3

检查了很多页面,但我仍然发现它没有答案。

我的问题如下。我有一个设备,通过 RS232 连接到计算机。该设备正在发送 TWICE 一秒钟,如下所示:

"*X;0;bbb;cc;d;eee;f\r\n"

这些字段是固定宽度的数字字段。每分钟一次,0 标志上升到 1 并且“cc”更改。那我需要这个号码。

在 C# 应用程序中,我无法让它工作。尝试使用recieve事件获取数据,但刷新结果需要10+秒才能处理。这意味着升旗后 10 秒我得到了结果。有时需要更长的时间。

我首先尝试使用 RecieveEvent。我什至尝试填充缓冲区,直到它填满该行,但同样的结果。然后我尝试使用每 300 毫秒调用一次并读取一行的 Timer。还是同样的问题。

所以我的问题是,如何从串口读取和处理最新数据?

4

2 回答 2

2

读取时,串口会缓存数据。这将引入一个小的延迟(但我们说的是毫秒,而不是几十秒)。大多数串行设备驱动程序也允许您配置缓冲,如果它真的很重要的话。

如果您调用 ReadLine,您可能会引入更多延迟,因为它会等到收到换行符后再返回任何数据。您确定您的设备正在发送良好的换行符吗?使用终端仿真程序来查看设备实际发送的内容,因为设备文档通常很糟糕!

我会从端口读取原始数据,然后自己解析。您可能必须更加小心地接收部分数据包,但是您从图片中删除所有中间人,并且您可以更加宽容(例如,不关心数据中是否有换行符)。开始读取,然后将您收到的数据写出到调试控制台,您很快就会看到您的程序正在接收什么以及频率等。这也会告诉您延迟是在串行端口中还是在您的处理中消息

于 2012-07-04T17:37:34.840 回答
0

您可以尝试serialPort1.readExisting();然后尝试解析数据。

祝你好运!

于 2019-03-02T14:23:17.273 回答