Форум: "WinAPI";
Текущий архив: 2009.01.11;
Скачать: [xml.tar.bz2];
ВнизКак определить что данные черех СОМ порт отправлены??? Найти похожие ветки
← →
Андрей Пл (2008-02-13 17:23) [0]Я работаю с компортом посредством WinAPI функций.
Ситауция следущая устройство с которым я должен общаться посредством ком порта имеет следующее условие:
перед посылкой данных я должен сбросить сигнал RTS отослать данные и после этого востановитбь RTS .
EscapeCommFunction(Hport, CLRRTS );
WriteComm(buf,n,m);
EscapeCommFunction(Hport, SETRTS);
но проблема в том что реально данные записываются в буфер компорта и на момент когда я установил RTS данный в устройство еще не отправлялись или не все доходили.
Как мне программно установить факт отправки всех данных компортом или наверное что тоже самое что буфер СОМ порта пуст???
заранее спасибо.
← →
MBo © (2008-02-13 17:35) [1]SetCommMask с EV_TXEMPTY, или FlushFileBuffers ?
← →
Германн © (2008-02-14 01:58) [2]
> MBo © (13.02.08 17:35) [1]
Имею неподтвержденные сведения, что сей вариант (SetCommMask с EV_TXEMPTY) нормально работает только при размере буфера FIFO СОМ-порта равным 1.
P.S. Речь конечно идёт о протоколе RS-485.
← →
МистерТ (2008-02-18 15:33) [3]Для обычного RS-232 (если работа с ним ведется через WriteFile()) возможно проверить количество отправленных байт функцией:
BOOL WINAPI GetOverlappedResult(
__in HANDLE hFile,
__in LPOVERLAPPED lpOverlapped,
__out LPDWORD lpNumberOfBytesTransferred,
__in BOOL bWait
);
Может поможет...
← →
orinoko (2008-02-19 12:00) [4]Если речь идёт о RS-485, то, как я понимаю, манипуляции с RTS нужны для переключения преобразователя 232-485 на приём-передачу. Смею дать совет. Не заморачиваться с этим. У нас это реализовано аппаратно в преобразователе. По началу передачи переводить аппаратно 485 интерфейс на вывод. По отсутствию импульсов на Tx в течение примерно 3Т (Т - время отсылки 1 байта) таймером (мы использовали NE555 таймер) он автоматом переводится на приём
← →
Андрей Пл (2008-02-27 10:18) [5]>orinoko (19.02.08 12:00) [4]
да ты прав на счет
> манипуляции с RTS нужны для переключения преобразователя
> 232-485 на приём-передачу
но то что ты говоришь у вас аппаратно реализовано в преобразователе у нас судя по моему ТЗ не реализовано :(
← →
Андрей Пл (2008-02-27 11:05) [6]Что то ничего не выходит!!! Прошу помощи!!!
функция SetCommMask с EV_TXEMPTY тоже что то не так работает вроде бы событие то что буфер пустой происходит, а на осциллографе (который прикреплён к преобразователя 232-485) вижу что не все данные еще отправлены.
← →
Evgeny V © (2008-02-27 13:12) [7]I>
> Андрей Пл (13.02.08 17:23)
> Андрей Пл (27.02.08 11:05) [6]
Как вариант -функция SetCommState ->
DCB->
-> fRtsControl
->RTS_CONTROL_TOGGLE
Правда с уровнем судя по всему все наоборот, но думаю инвертор вполне можно поставить...
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2009.01.11;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c