![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с COM портом!!!!!!!!!!!!!!!! [D5, Win95/98, WinME]
Андрей_Р © (2002-07-23 00:22:00)В общем моя проблема: к компу подключено устройство через COM порт, при посылке команд устройству, оно посылает ответ в виде "ok", т.е. команда получена, но программа через раз получает этот ответ. Как мне "зациклить" посылку команды с машины, чтобы получать ответ всегда, потому-что без ответа устройство не реагирует на команды.
Andrew_R (2002-08-19 21:50:00) [1]to DC-AC: спасибо, работает как часы!
DC-AC (2002-07-26 13:56:00) [2]Позицию тракбара (а точнее байт, который нужно передать) ИМХО нужно хранить в какой-нибудь переменной. Если ответ от устройства пришёл, то в обработчике события компонента работы с портом посылаем байт из переменной, а её значение обнуляем. Когда двигаешь тракбар, по OnChange проверяй значение переменной, если не нуль - или жди или делай, что тебе заблагорассудится.
С многобайтовыми посылками/ответами - чуть сложнее, но идея та же.
Кстати, чем выше скорость обмена с твоим устройством - тем лучше для юзателя программы. ИМХО.
Андрей_Р (2002-07-26 11:55:00) [3]To harismatik : Спасибо, итак использую компонент оттуда
harismatik (2002-07-25 17:26:00) [4]Используй компоненты. Например ComPortLibrary с сайта TorryDelphiPages
Андрей_Р (2002-07-25 12:35:00) [5]To eric : Так вот именно, я получаю ответ в другом событии, мне необходимо асинхронно обрабатывать.
To Coalycat : Вся документация известна, т.к. устройство наше, для него нужна прога. Интервалы между командами тооже имеются, если усройство посылает enable, то оно готово к приему команд, а если disable, то оно выполняет некие операции.
Coalycat (2002-07-25 12:15:00) [6]Обычно у устройства есть время срабатывания. Почитай документацию, может там временные диаграммы указаны и есть интервалы между командами. У меня такое было, пришлось sleep ставить перед выполнением команды.
erik (2002-07-25 12:13:00) [7]Откажись от асинхроности и облегциш свою жизнь. Делай сначала
:Retry
SendCommand (WriteFIle)
Buf := ReadNofification (ReadFile)
if Buf <> "ok" then goto Retry
Это приблезительный алгоритм.
Андрей_Р (2002-07-25 11:47:00) [8]у моего компонента есть событие на получение данных, которое постоянно работает, если я посылаю данные путем перемещения TrackBar"а, а если ответ не пришел, то как мне "запомнить" команду, которую я передал?
Например:
...
Case TrakBar.Position of
-5 :
begin
CpDrv.SendChar("r");// Если устройство не отвечает,
CpDrv.SendByte($0A);// как повторить команду?
end;
...
DC-AC (2002-07-23 11:11:00) [9]Что за устройство ? Задействует только RXD/TXD COM-порта ? Какими методами/командами/компонентами получаете ответ от устройства ? Как организован процесс опроса (WaitCommEvent, TTimer, while ... do ...) ?
Aleks1 (2002-07-23 03:26:00) [10]"Пойди туда, не знаю куда, принеси то, не знаю что."
Вот суть твоего вопроса.
И какой же ответ ты ждешь?