Проблема с работой COM в Lazarus

Модератор: Модераторы

Проблема с работой COM в Lazarus

Сообщение Gouren » 12.10.2009 22:44:42

Помогите разобратся где я допустил ошибку? Вот весь исходник
Код: Выделить всё
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  StdCtrls, ExtCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Label1: TLabel;
    Memo1: TMemo;
    Timer1: TTimer;
    Timer2: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;
  Port: integer;
[color=#FF0000]DCB:tDCB;[/color]

implementation

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
Port:=CreateFile(pchar(edit1.Text),
GENERIC_READ or GENERIC_WRITE,0,
nil,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,0);
  SetupComm(Port,$2000,$2000);
  GetCommState(Port,Dcb) then Exit;
  Dcb.BaudRate := Cardinal(EntryProps.IntAttr[0]);
  Dcb.ByteSize := EntryProps.IntAttr[1];
  Dcb.Parity   := EntryProps.IntAttr[2];
  Dcb.StopBits := EntryProps.IntAttr[3];
  SetCommState(Port,Dcb);
  PurgeComm(Port,PURGE_TXCLEAR or PURGE_RXCLEAR);
  SetCommMask(Port,EV_RXCHAR);
  Button2.Enabled:=True;
  Button1.Enabled:=False;
  Memo1.Lines.Add('Порт открыт!');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
CloseHandle(Port);
  Button1.Enabled:=true;
  Button2.Enabled:=False;
  Memo1.Lines.Add('Порт закрыт!');
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
timer2.Interval:=strtoint(edit4.Text);
    Button5.Enabled:=true;
  Button4.Enabled:=False;
  Timer2.Enabled:=true;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
    Button4.Enabled:=true;
  Button5.Enabled:=False;
   Timer2.Enabled:=false;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin

end;

initialization
  {$I Unit1.lrs}

end.
                               

DCB:tDCB; ругается на этой строчке
Gouren
незнакомец
 
Сообщения: 8
Зарегистрирован: 12.10.2009 16:19:18
Откуда: Пингвин ленд (Антарктида, прорубь 312)

Re: Проблема с работой COM в Lazarus

Сообщение Mr.Smart » 12.10.2009 23:00:17

Внимательнее нужно быть. И обращать внимание на текст сообщений об ошибках.
Добавте модуль Windows
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Проблема с работой COM в Lazarus

Сообщение Gouren » 12.10.2009 23:28:57

Учту! Не видел диолога этого он был почемуто снесён под бар! Короче в не зоны дескопа! Спасибо! Тут много ещё ошибок но исправлю самостоятельно! Да и вопрос не в тему почему при компиляции, EXE выходит аш 11 мегобайт я использую LCL но это через чур много!?
Gouren
незнакомец
 
Сообщения: 8
Зарегистрирован: 12.10.2009 16:19:18
Откуда: Пингвин ленд (Антарктида, прорубь 312)

Re: Проблема с работой COM в Lazarus

Сообщение Mr.Smart » 13.10.2009 09:51:50

Gouren
На форуме данный вопрос уже обсуждался и не раз! пользуйтесь поиском...
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Проблема с работой COM в Lazarus

Сообщение Gouren » 13.10.2009 16:21:46

Вот вопрос ещё! Почему на порт приходит какойто мусор? Edit2 принемает значение 123 но на порт компа приходит в HEX 47840200. Это точно не оборудывание!
Код: Выделить всё
procedure TForm1.Button3Click(Sender: TObject);
var
I,m: Dword;
buf:PAnsiChar;
str:ShortString;
begin
str:=edit2.Text;
buf:=@Str[1];
I:=Length(edit2.text);
writeFile(port,buf,I,m,nil);
end;

И проблема с чтением с порта что не отпровляю ноль имоций? Bufer переменная типа char а Stat типа tcomstat?
Код: Выделить всё
procedure TForm1.Timer1Timer(Sender: TObject);
begin
      ReadFile(port,bufer,Stat.cbInQue,Stat.cbInQue,nil);
      if length(bufer)>0 then
      begin
      memo1.Lines.add(bufer);
      end;
end;
Gouren
незнакомец
 
Сообщения: 8
Зарегистрирован: 12.10.2009 16:19:18
Откуда: Пингвин ленд (Антарктида, прорубь 312)

Re: Проблема с работой COM в Lazarus

Сообщение Attid » 13.10.2009 19:01:55

Gouren
для работы с компортом использую synaser все работает без проблем.
можешь глянуть его исходники, если не хочешь использовать компонент.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Проблема с работой COM в Lazarus

Сообщение Gouren » 15.10.2009 17:08:28

Attid
Я конечно понемаю но компонент не работает под WINCE ибо структуру Overlapped не поддерживает! Я не смог найти не чего полезного! Если есть компонент под CE или версия какаянибудь скажите. Если кому интересно я делаю интерфейсный адаптер 1WERE его используют в ключах домофонов и мого ещё где!
Gouren
незнакомец
 
Сообщения: 8
Зарегистрирован: 12.10.2009 16:19:18
Откуда: Пингвин ленд (Антарктида, прорубь 312)

Re: Проблема с работой COM в Lazarus

Сообщение Mr.Smart » 15.10.2009 17:36:56

Для работы с WinCE я писал свой модуль.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Проблема с работой COM в Lazarus

Сообщение Gouren » 15.10.2009 20:15:41

Mr.Smart
Не пощитайте за наглость :( ! Дайте пожалуйсто его. Я уже себе весь мозг вынес WINAPI! C COM портом не хочет оно работать нормально! Кое как сделал приём, а вот передача один мусор сыпится!
Gouren
незнакомец
 
Сообщения: 8
Зарегистрирован: 12.10.2009 16:19:18
Откуда: Пингвин ленд (Антарктида, прорубь 312)

Re: Проблема с работой COM в Lazarus

Сообщение Mr.Smart » 15.10.2009 20:23:34

Какой вы COM порт используете? Аппаратный или эмулированный через RIL?
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Проблема с работой COM в Lazarus

Сообщение Gouren » 15.10.2009 20:36:28

Mr.Smart
Аппаратный COM1:. КПК HP rx3715 WM2003se
Gouren
незнакомец
 
Сообщения: 8
Зарегистрирован: 12.10.2009 16:19:18
Откуда: Пингвин ленд (Антарктида, прорубь 312)

Re: Проблема с работой COM в Lazarus

Сообщение AVS » 10.11.2009 18:05:02

Добрый день!
Gouren, чем закончилась история с СОМ портом :?:
Тоже очень нужно разобраться. С первого захода не получилось.
Готовых модулей не нашел, хотя все говорят, что пишут свои :cry:
AVS
незнакомец
 
Сообщения: 2
Зарегистрирован: 10.11.2009 17:51:47

Re: Проблема с работой COM в Lazarus

Сообщение Fantomas » 11.11.2009 00:04:53

AVS писал(а):Тоже очень нужно разобраться. С первого захода не получилось.
Готовых модулей не нашел, хотя все говорят, что пишут свои :cry:


Так что же это за проблема с COM-портом. Там же все достаточно просто даже, если использовать функции API. Может само оборудование глючит или драйвер порта?
Fantomas
новенький
 
Сообщения: 14
Зарегистрирован: 09.04.2008 19:12:50

Re: Проблема с работой COM в Lazarus

Сообщение Mr.Smart » 11.11.2009 10:49:55

Fantomas
Просто как я понимаю людям лень, что-либо делать самим. Хотят получить всё готовое!
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Проблема с работой COM в Lazarus

Сообщение AVS » 11.11.2009 12:00:44

нет, не лень, просто не хватает времени разобраться :(
в своих разработках тоже пытаюсь по возможности делать все сам, в крайнем случае посмотреть пример и сделать свое...
win ce и FreePascal - для меня новое направление, хожу по граблям как слепой...
Вариант с ReadFile почему то не хочет работать, поэтому и прошу подсказку.
Хочу попробовать вариант через win ce api но опыта работы с се арi мало :(
Если Вам не сложно, можете поделиться фрагментами своих функций? Заранее спасибо.
AVS
незнакомец
 
Сообщения: 2
Зарегистрирован: 10.11.2009 17:51:47

След.

Вернуться в WinCE

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru