Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.006 c
9-1176815377
ElectriC
2007-04-17 17:09
2009.01.11
Прозрачность CD3DFont текста


15-1226211186
Cyrax
2008-11-09 09:13
2009.01.11
Записал инфу на винт, отсоединил - ничего нет...


2-1228034039
Шурик
2008-11-30 11:33
2009.01.11
Нужно исправить код


2-1227860921
atom321
2008-11-28 11:28
2009.01.11
челая часть числа


2-1227898264
9899100
2008-11-28 21:51
2009.01.11
TlistView





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский