Программное управление потоком Rs232

У меня есть общий вопрос о программном управлении потоком Rs232 (он же XOn/XOff).

Реализация .Net (и собственный API-интерфейс win32) определяют свойство WriteTimeout / ReadTimeout, которое представляет собой время в мс, после которого сообщение считается просроченным.

Нет, моя проблема заключается в следующем: если я отправляю, скажем, 5-байтовую строку на устройство, я не вижу никакого WriteTimeout, как и ожидалось. Как это реализовано? Все, что я нашел о программном управлении потоком, это то, что XOFF должен быть установлен, когда приемный буфер заполнен; XOn, когда он снова готов к приему.

Но из поведения, которое я вижу, я подозреваю, что устройство отправляет XON после того, как оно обработает 5-байтовую информацию, которую я отправляю, таким образом создавая информацию для окон, чтобы генерировать соответствующие события.

Итак, когда отправлять XON на двухпроводную реализацию только RS232? Только если буфер был заполнен и перезагрузить прием; Или сигнализировать, что мы «все еще готовы» к приему после каждого обработанного фрагмента?

Как реализовать?

Ура и спасибо заранее!

Корелготт


person Tobias Boschek    schedule 04.04.2012    source источник
comment
Что именно вы реализуете? Вы пишете программное обеспечение или проектируете оборудование?   -  person David Schwartz    schedule 04.04.2012


Ответы (1)


Отправьте XON в любое время, когда вы готовы принять данные (ваш буфер приема пуст или почти пуст). Отправляйте XOFF каждый раз, когда вы не можете принимать больше входящих данных (ваш приемный буфер заполнен или почти заполнен). Этот процесс задокументирован на странице программного управления потоком Википедии.

person David Schwartz    schedule 04.04.2012
comment
Спасибо, что указали мне на вики. Но: Другой конец получает код XOFF и приостанавливает передачу. Как только первый конец снова готов принять данные, он отправляет XON, а другой конец возобновляет передачу. В этом контексте XON следует отправлять только в том случае, если XOFF был отправлен? ИЛИ: отправлять XON каждый раз, когда контроллер обрабатывает какие-либо данные? Хост посылает abcdef; Клиент отвечает XON; Хост посылает ghijk; Клиент отвечает XON? - person Tobias Boschek; 04.04.2012
comment
Вам не нужно отправлять XON, если только вы ранее не заблокировали другой конец. Однако вы можете захотеть периодически отправлять XON для защиты от шума, интерпретируемого как XOFF и прерывающего связь. - person David Schwartz; 04.04.2012