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

Вниз

Как точно отловить окончание передачи в линию 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
8-78010
pasha676
2003-04-02 10:58
2003.07.24
Торможу с рисованием в канвасе...


1-77903
SVN17
2003-07-11 15:18
2003.07.24
Обработчик сообщений


3-77759
Zigs
2003-06-30 13:22
2003.07.24
Уважаемые мастера, можно можно ли в TDBText отображать несколько


1-77993
kostya
2003-07-11 16:22
2003.07.24
Помогите с Bitmap...ом


3-77773
mihmax
2003-06-19 16:00
2003.07.24
BDE не видит MS SQL