Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите с 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]

"Пойди туда, не знаю куда, принеси то, не знаю что."
Вот суть твоего вопроса.
И какой же ответ ты ждешь?


Наверх

Титульная страница Поиск, карта сайта Написать письмо