Вниз
Скачать: CL | DM;

Циклический опрос COM порта   Найти похожие ветки 

← →
M@X_1   (2006-01-10 16:59) [0]

Доброго время суток!
Подскажите, как правильно циклически опрашивать COM порт(пользуюсь TVaComm)

Есть железяка, которая передает данные при посылке на нее комманды
Делаю:



procedure TfMain.Timer1Timer(Sender: TObject);
begin
  Comm1.WriteBuf(WriteBuffer, 23);
  Sleep(100);
  Comm1.ReadBuf(ReadBuffer,23);
end;


Чего то отвратительно работает.
Если вместо Sleep(100) использую ручками нарисованную Delay(100) - работает лучше, но все равно нестабильно.

А послать комманду отдельно и привязаться к событию получения первого символа OnRxChar чего то никак не получается.


procedure TfMain.Comm1RxChar(Sender: TObject; Count: Integer);
begin
  Comm1.ReadBuf(ReadBuffer,23);
end;



Чего не так делаю


← →
YurikGL ©   (2006-01-10 17:13) [1]

Я делал примерно так:

Command1wasSend:boolean
GlobalST:string;

Посылаешь комманду, и выставляешь глобальный флаг типа
Comm1.WriteBuf("...")
Command1wasSend:true;
GlobalST:="";

В процедуре
procedure TfMain.Comm1RxChar(Sender: TObject; Count: Integer);
begin
 //автоматически вызовется, когда придут данные, если я правильно помню
 Comm1.ReadBuf(ReadBuffer,23);
 //кстати, что за число 23?
 if Command1wasSend then GlobalST:=GlobalST+ReadBufferl;

 if "признак окончания ответа от Command1" then begin
   Command1wasSend:=false;
   Обработать строку GlobalST учитывая то, что там хранится весь ответ от  Command1
end;
end;


← →
M@X_1   (2006-01-17 11:46) [2]

Да вот так что  то не получается.

23 - количество принимаемых/передаваемых байт.

OnRxChar срабатывает когда первый байт из 23 в буфере и ReadBuf считывает именно один, после этого следует опять событие OnRxChar с остальными 22 байтами.

А по скольку опрос циклицццский по таймеру в буфере уже могут быть следующие 23 байта ...

Как это преодолеть ?



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.024 c
15-1137501483
Yeg
2006-01-17 15:38
2006.02.05
Запуск программы...


15-1137350050
Андрей К
2006-01-15 21:34
2006.02.05
Подскажите аспирантуры в Москве...


3-1133563756
NTNick
2005-12-03 01:49
2006.02.05
InterBase и ODBC


1-1135935500
__oleg
2005-12-30 12:38
2006.02.05
Scrool в TStringGrid


2-1137376211
Bratskiy
2006-01-16 04:50
2006.02.05
Использование дочерних классов




   Наверх