流量控制瓶

问题描述

我正在尝试控制从串行db9 RS232接收的数据流,并且正在使用Pyserial。 通常我应该接收13个字节的数据,但是当发送器发送的字节数超过13个字节时,我希望能够控制自己的流量。为此,我想知道使用流控制选项,但我对此并不熟悉。 因此,有人可以给我有关使用XonXoff,rtscts和dsrdtr的示例吗? 感谢您的帮助!

Screenshot of my output

解决方法

Serialport流控制控制缓冲区大小和缓冲区中的数据量,以防止缓冲区溢出,这不是您想要的。

它也不保证确切的大小或时间。

您的选择是接受您接收的所有数据,分析其内容并剪切数据块,或者与其他设备以命令/响应或ENQ / ACK / NAK格式建立自己的协议,仅发送一个一次数据块。


此外:

一旦权重值固定,您就可以检查数据是否有效直到发生某些事件,然后丢弃数据本身。仅仅因为您接收到数据并不意味着它必须由主应用程序(POS?)使用。


系统崩溃确实发生了吗?

是不是因为不完全了解情况而感到恐惧,不确定或怀疑?

仅接收大量未使用的数据,系统就不会崩溃。
您只需要足够的缓冲区来检查格式。

还,真的有很多数据吗?例如,如果您每50到100毫秒收到13个字节的数据,那根本就不算什么。

很有可能在处理该错误的应用程序的处理中存在一个错误。


也就是说,如果您想做某事,请仔细阅读电子秤的规格。

或者,在问题中添加说明或提供指向规范文档的链接。

如果您的电子秤无法通过流量控制来停止发送数据,那么您就是在浪费时间和精力来增加发生错误的可能性。


如果您收到了数千到数百万次的邮件,即使它们全部位于不同的区域,则最多可能只有几十兆字节。
发送和接收视频数据大约需要1分钟。
通常,同一区域会被重复使用,因此不可能有这样的大小。

软件/系统错误无处不在,因此它们可能由于某些原因而崩溃,但是您要使用的电子秤可能会运行大量用户。
如果电子秤符合当前规格,并且商店中没有问题,则意味着您不必做任何奇怪而又焦虑的事情。

如果您仍然想尝试,可以使用:


如果要让PySerial模块或系统控制,可以将以下一项设置为true。

xonxoff
rtscts
dsrdtr

但是,缓冲区的大小是固定的,并且无法设置发生控制事件的大小和时间。


如果您想自己控制它,可以将以上所有规范设置为False,然后自己执行以下操作。

软件流控制:
写入XON = 0x11,XOFF = 0x13。
Software flow control

硬件流控制:
rtsdtr设置为True / False。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...