.Net SerialPort在相对较小的数据包上收到溢出

时间:2018-06-28 19:10:18

标签: c# serial-port

我正在尝试替换用于通过RS-485与设备通信的C库。我的代码在某些串行设备以及我尝试过的所有USB-to-RS485和IP-to-RS485设备上都能很好地工作。但是,在其他串行设备上,它无法正确接收长于大约28个字节的数据包。在大约那么多字节之后,它会收到一些垃圾字符并超时(因为它从未收到足够的字符)。

在同一硬件上,我可以毫无问题地通过C库接收数据。 (因此,硬件显然可以使用)。

最初,我是在调用SerialPort.BaseStream以获得流,然后在流上调用Stream.ReadByte以接收数据。我在文档中找到了辅助引用,指示未缓冲BaseStream。因此,我切换到调用SerialPort.ReadByte-没什么区别。

为了提高效率,我将代码切换为调用SerialPort.Read以获取更大的数据块。这(与直觉相反)使情况变得更糟-在第20个字符之后失败。

由于SerialPort.ReadBufferSize的默认值为4096字节(甚至不接受任何较小的字节),我对于数据包如何以20字节的字节数溢出感到困惑。

如何在串行端口上接收数据以使读取缓冲区发挥作用?

0 个答案:

没有答案