谁知道C#的串口读取,高级bug么?

110次阅读

共计 1164 个字符,预计需要花费 3 分钟才能阅读完成。

我用串口调试工具,能看到数据大概 100ms 输出 1 个数据,是传感器的角度 X,我用 C# 的 SerialPort 读取,也能读取到但是延迟很高,X 改变,几秒 C# 才读取到这个 X

斌斌 发表于 2022-8-17 16:28
port.ReceivedBytesThreshold = 1
设置了这个好使了,不知道原因,但是这个设置完了,就不会延迟了。网 …

我知道你大概怎么回事了。强行缓冲区等满,但是实际上一次收到的字节数都不够缓冲区长度的,PC 上串口缓冲区好像是 64 个字节。还是来一个收一个最方便。这个与什么语言的程序无关,是程序逻辑设计问题。用非阻塞的方式读。和底层直接接触了,要注意阻塞与非阻塞的问题你读太慢了 新数据都堆起来了检查一下代码吧要加个线程,循环读。要清空缓冲。
另外,线也要好一点的。

奧巴马 发表于 2022-8-17 15:00
要加个线程,循环读。要清空缓冲。
另外,线也要好一点的。

应该是 C# 的 bug。我 python 读取没有延迟,奇怪啊。只是读取的频率快一些而已。
@未闻听心
@sertt @Grandia @hfhfg

斌斌 发表于 2022-8-17 15:56
应该是 C# 的 bug。我 python 读取没有延迟,奇怪啊。只是读取的频率快一些而已。
@未闻听心
@sertt @Gran …

代码贴出来瞅瞅诶,开发工控程序一直用的 C#,没发现过有什么问题。

未闻听心 发表于 2022-8-17 16:07
代码贴出来瞅瞅诶,开发工控程序一直用的 C#,没发现过有什么问题。

port.ReceivedBytesThreshold = 1
设置了这个好使了,不知道原因,但是这个设置完了,就不会延迟了。网上有说的。

斌斌 发表于 2022-8-17 15:56
应该是 C# 的 bug。我 python 读取没有延迟,奇怪啊。只是读取的频率快一些而已。
@未闻听心
@sertt @Gran …

怎么可能是 C#bug? 用异步和 await 来等待数据

斌斌 发表于 2022-8-17 16:28
port.ReceivedBytesThreshold = 1
设置了这个好使了,不知道原因,但是这个设置完了,就不会延迟了。网 …

我知道你大概怎么回事了。强行缓冲区等满,但是实际上一次收到的字节数都不够缓冲区长度的,PC 上串口缓冲区好像是 64 个字节。还是来一个收一个最方便。

斌斌 发表于 2022-8-17 15:56
应该是 C# 的 bug。我 python 读取没有延迟,奇怪啊。只是读取的频率快一些而已。
@未闻听心
@sertt @Gran …

一直用 C# 搞工控开发,没发现问题!

斌斌 发表于 2022-8-17 16:28
port.ReceivedBytesThreshold = 1
设置了这个好使了,不知道原因,但是这个设置完了,就不会延迟了。网 …

这个属性的默认值就是 1 啊

正文完
 0