XON/XOFF 流控制实际上做了什么?
What does XON/XOFF flow control actually do?
据我所知,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, respectively.) Or is there something else going on? (Sadly, with the demise of PortMon 我没有自己测试的简单方法。)
XON/XOFF用于流量控制。如果你正在处理信息,并且由于你的输入缓冲区已满而无法再接收,那么你将发送 XOFF 以告诉对方停止发送。当你的输入缓冲区有空间时,你会发送一个 XON 告诉对方重新开始发送。我见过的应用程序(我多年前做过很多这样的应用程序)只在需要时使用它们,而不是作为消息的标准部分。
XON/XOFF 的一个问题是在嘈杂的线路上,这些字符可能无法正确接收,因此接收方可能会在缓冲区满 80% 时发送 XOFF,当缓冲区满 90% 时可能再次发送 XOFF % 已满,如果发送方不停止,则开始更频繁地发送它们。
类似地,接收方可能会在准备接收时发送 XON,但如果没有收到更多信息,则它可能会定期发送 XON 以确保不会错过第一个。
要实现成功,任何字符都不能出现在消息的任何部分。 Wikipedia explains some of this比我好。
在 PySerial 中,您实际上不必显式发送它们。它会为您处理,或者您可以使用 API 发送。
据我所知,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, respectively.) Or is there something else going on? (Sadly, with the demise of PortMon 我没有自己测试的简单方法。)
XON/XOFF用于流量控制。如果你正在处理信息,并且由于你的输入缓冲区已满而无法再接收,那么你将发送 XOFF 以告诉对方停止发送。当你的输入缓冲区有空间时,你会发送一个 XON 告诉对方重新开始发送。我见过的应用程序(我多年前做过很多这样的应用程序)只在需要时使用它们,而不是作为消息的标准部分。
XON/XOFF 的一个问题是在嘈杂的线路上,这些字符可能无法正确接收,因此接收方可能会在缓冲区满 80% 时发送 XOFF,当缓冲区满 90% 时可能再次发送 XOFF % 已满,如果发送方不停止,则开始更频繁地发送它们。
类似地,接收方可能会在准备接收时发送 XON,但如果没有收到更多信息,则它可能会定期发送 XON 以确保不会错过第一个。
要实现成功,任何字符都不能出现在消息的任何部分。 Wikipedia explains some of this比我好。
在 PySerial 中,您实际上不必显式发送它们。它会为您处理,或者您可以使用 API 发送。