Текущий архив: 2006.02.05;
Скачать: 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 вся ветка
Текущий архив: 2006.02.05;
Скачать: CL | DM;
Память: 0.44 MB
Время: 0.011 c