Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.01.11;
Скачать: CL | DM;

Вниз

Как определить что данные черех СОМ порт отправлены???   Найти похожие ветки 

 
Андрей Пл   (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 вся ветка

Текущий архив: 2009.01.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.014 c
2-1227784613
9899100
2008-11-27 14:16
2009.01.11
деструктор


15-1226514556
@!!ex
2008-11-12 21:29
2009.01.11
Вопрос: почему удалили тему Раймонда?


2-1228066837
NEWSER
2008-11-30 20:40
2009.01.11
Как программно отличить каталог от файла по адресу?


15-1226659506
Palladin
2008-11-14 13:45
2009.01.11
Exit внутри Try/Finally


2-1227729324
Евгений Р.
2008-11-26 22:55
2009.01.11
RichEdit и простой текст