Главная страница
    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
2-1227856798
Андрей Алекс.
2008-11-28 10:19
2009.01.11
Сохдать Pages в PageControl


2-1227949553
man Yury
2008-11-29 12:05
2009.01.11
Access violation и MapViewOfFile


3-1212567348
french_cat
2008-06-04 12:15
2009.01.11
Установить фильтр для ADOQuery


2-1227711457
ekto
2008-11-26 17:57
2009.01.11
запрос


2-1227599161
Valerik
2008-11-25 10:46
2009.01.11
SQL запрос





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский