Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.07.24;
Скачать: [xml.tar.bz2];

Вниз

Как точно отловить окончание передачи в линию RS-232   Найти похожие ветки 

 
uk   (2003-04-30 20:29) [0]

Пожалуста помогите СОМ-портом, никак не получается точно отловить момент передачи в линию RS-232 последнего бита последнего байта посылки, оптправляемой с помощью API фунции WriteFile, получаются задержки в 1мс и более, которые слишком ощутимы. В этот момент планируется переключать состояние сигнала DTR.


 
Serious Sam   (2003-05-01 01:38) [1]

MS Windows не наделена ф-ями управления реального времени.
Для задач управления принято считать, что время реакции системы - от 20 мс и выше (на NT платформах).



 
крот   (2003-05-01 04:58) [2]

В принципе, можно дождаться события, когда выходной буффер будет пуст (WaitCommEvent), но это еще не значит, что данные уже ушли "железке", так что, после надо еще добавить задержку (sleep, например). Мне тоже в цикле передачи требуется управлять сигналом (RTS), вот так все работает.


 
wal   (2003-05-02 02:09) [3]

Тоже сталкивался с такой проблемой. Решал так: соединял RxD и TxD (не напрямую, естественно, а с небольшой схемной доработкой) и отлавливал приход "эха". Принцип работы следующий: установил сигнал (DTR), передал данные1, принял данные1, снял сигнал, принял данные2.


 
Verg   (2003-05-03 13:46) [4]

Вообще, для этого существует:

The WaitCommEvent function waits for an event to occur for a specified communications device. The set of events that are monitored by this function is contained in the event mask associated with the device handle.

BOOL WaitCommEvent(

HANDLE hFile, // handle of communications device
LPDWORD lpEvtMask, // address of variable for event that occurred
LPOVERLAPPED lpOverlapped, // address of overlapped structure
);


Parameters

hFile

Identifies the communications device. The CreateFile function returns this handle.

lpEvtMask

Points to a 32-bit variable that receives a mask indicating the type of event that occurred. If an error occurs, the value is zero; otherwise, it is one of the following values:

Value Meaning
EV_BREAK A break was detected on input.
EV_CTS The CTS (clear-to-send) signal changed state.
EV_DSR The DSR (data-set-ready) signal changed state.
EV_ERR A line-status error occurred. Line-status errors are CE_FRAME, CE_OVERRUN, and CE_RXPARITY.
EV_RING A ring indicator was detected.
EV_RLSD The RLSD (receive-line-signal-detect) signal changed state.
EV_RXCHAR A character was received and placed in the input buffer.
EV_RXFLAG The event character was received and placed in the input buffer. The event character is specified in the device"s DCB structure, which is applied to a serial port by using the SetCommState function.
EV_TXEMPTY The last character in the output buffer was sent.




 
Verg   (2003-05-03 14:00) [5]

2 крот

В самом деле, EV_TXEMPTY возникает иногда раньше, чем "отстрелялся" UART. Похоже, что в драйвере com порта не учтено состояние соответствующего бита слова состояния буфера передатчика.
Я поступал так:
1. Сигнал RTS соединял (в кабеле) с CTS этого же порта.
2. При открывании порта загонял его в режим управления RTS - RTS_CONTROL_TOGGLE. При этом драйвер самостоятельно управляет RTS-ом и управляет, как показывает практика корректно (по крайней мере на 98/NT4/2000).
3. Данные передавал исключительно полными блоками (пакетами).
4. Конец передачи отслеживал WaitCommEvent по пропаданию CTS-а (EV_CTS).


 
wal   (2003-05-04 01:43) [6]


> Verg © (03.05.03 13:46)
> Вообще, для этого существует:


> EV_TXEMPTY The last character in the output buffer was sent.

Ключевое слово Buffer. Если байт ушел из буфера, это не значит, что он ушел в линию. В ходе экспериментов выяснилось, что имеется в виду программный буфер, тот который выставляется функцией SetupComm. А EV_TXEMPTY обозначает, что последний байт в лучшем случае начал передаваться в линию (записался в выходной регистр UARTа), в худшем случае ушел в аппаратный буфер FIFO UARTа.
С уважением.


 
uk   (2003-05-14 16:47) [7]

Спасибо всем за советы !


 
uk   (2003-05-14 16:47) [8]

Спасибо всем за советы !



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2003.07.24;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.007 c
14-78155
Wonder
2003-07-09 13:48
2003.07.24
По мотивам событий в Москве в Тушино


4-78196
Игорь200305
2003-05-21 10:01
2003.07.24
Как передать адрес строки в SendMessage?


14-78068
Maryan
2003-07-07 19:03
2003.07.24
Нужен файл dsgnintf.dcu


14-78044
Andryk
2003-07-09 15:24
2003.07.24
Что с отправкой сообщений?


1-77946
Erik
2003-07-10 16:30
2003.07.24
В чем отличия CallBack для DCOM и Borland Socket Server?





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