Форум: "Система";
Текущий архив: 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