![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Циклический опрос COM порта [D7, WinXP]
belenkov © (2006-01-17 17:10:00)Доброго время суток уважаемые Мастера!
Повторно хочу задать вопрос о циклическом опросе (по таймеру) железяки, подключенной к COM порту.
В железяку засылается команда из 23 байт, железяка должна выдать ответ тоже 23 байта.
Пользуюсь TViaCom (собственно один из множества аналогичных)
var RBuf, Buf: Array[0..22] of Byte;
procedure TfMain.Timer1Timer(Sender: TObject);
begin
Comm1.WriteBuf(Buf,23); // Посылаем команду
Sleep(100); //Ждемс ..
Comm1.ReadBuf(RBuf,23);// Читаем ответ
end;
Работает отвратительно. Посоветуйте плиииз как правильно сделать.
belenkov (2006-01-17 19:23:00) [1];-)спасибо
Darvin (2006-01-17 19:20:00) [2]TThread + F1
belenkov (2006-01-17 19:15:00) [3]Если можно пример, как организовать поток
Darvin (2006-01-17 19:14:00) [4]>Если быть точнее в железяке 2 канала
Это ничего не меняет
belenkov (2006-01-17 19:11:00) [5]Если быть точнее в железяке 2 канала
Comm1.WriteBuf(код опроса канала 1,23);
Comm1.ReadBuf(RBuf,23);//
//проводим действия с данными 1 канала
Comm1.WriteBuf(код опроса канала 2,23);
Comm1.ReadBuf(RBuf,23);//
//проводим действия с данными 2 канала
Darvin (2006-01-17 19:10:00) [6]Организуй поток TThread и читай в нем :
Comm1.WriteBuf(Buf,23); // Посылаем команду
Comm1.ReadBuf(RBuf,23);// Читаем ответ
Кстати, зачем задержка?
Sleep(100); //Ждемс ..
Она не нужна. Умный компонент не вернет управление, пока не прочитает твои 23 байта
belenkov (2006-01-17 18:33:00) [7]Есть OnRxChar
Но он срабатывает по приему первого байта
MBo (2006-01-17 17:33:00) [8]читать нужно по событию прихода данных с порта. Есть у этого класса такое?