Что на самом деле делает управление потоком XON / XOFF? - PullRequest
0 голосов
/ 12 июня 2019

Из того, что я смог обнаружить, XON и XOFF - не что иное, как специальные символы ASCII, используемые для установления связи между двумя последовательными устройствами. Но мне не ясно, что на самом деле происходит, когда я использую этот тип управления потоком данных для связи. Есть ли только символ XON в начале моего сообщения и символ XOFF в конце? То есть, когда я пишу что-то, используя PySerial , например:

import serial
ser = serial.Serial('COMx', 9600, xonxoff = True)
ser.write('Hi!\r\n')

Получает ли устройство на самом деле это:

\x11Hi!\r\n\x13

(\x11 и \x13 - символы XON и XOFF в Python соответственно.) Или что-то еще происходит? (К сожалению, с кончиной PortMon у меня нет простого способа проверить это самостоятельно.)

1 Ответ

4 голосов
/ 12 июня 2019

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

Одна из проблем с XON / XOFF заключается в том, что в шумной строке эти символы могут быть получены неправильно, поэтому принимающая сторона может отправлять XOFF, когда буфер заполнен на 80%, и, возможно, снова, когда заполнен на 90%, и затем начните отправлять их чаще, если отправляющая сторона не останавливается.

Аналогично, принимающая сторона может отправлять XON, когда она готова к приему, но если больше ничего не получено, она может периодически отправлять ее, чтобы убедиться, что первая не была пропущена.

Для успешной реализации ни один символ не может появляться ни в одной части сообщения. Википедия объясняет кое-что из этого лучше, чем я.

В PySerial вам не нужно фактически отправлять их явно. Он будет обрабатывать это для вас, или вы можете использовать API для отправки.

...