根据我的发现,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字符in Python。)或者还有其他情况吗? (可悲的是,对于demise of PortMon,我没有一种简单的方法可以自己进行测试。)
答案 0 :(得分:4)
XON / XOFF用于流量控制。如果您正在处理信息,并且由于输入缓冲区已满而无法再接收任何信息,则可以发送XOFF来告知另一方停止发送。当输入缓冲区有一定空间时,您将发送XON通知另一方再次开始发送。我所见过的应用程序(很多年前,我做了很多事情)仅在需要时使用它们,而不是消息的标准部分。
XON / XOFF的问题之一是在嘈杂的行上,这些字符可能无法正确接收,因此接收方可能会在缓冲区80%满时发送XOFF,并且可能在90%满时再次发送XOFF,并且然后,如果发送方没有停止,则开始更频繁地发送它们。
类似地,接收方可以在准备好接收时发送XON,但是如果没有接收到更多信息,则它可能会定期发送XON以确保不会错过第一个。
要成功实施,任何字符都不能出现在消息的任何部分。 Wikipedia explains some of this比我好。
在PySerial中,您实际上不必显式发送它们。它将为您处理,也可以使用API发送。