检查了很多页面,但我仍然觉得没有答案。
我的问题如下。我有一个设备,通过RS232连接到计算机。该设备正在发送TWICE一行,如下所示:
"*X;0;bbb;cc;d;eee;f\r\n"
字段是固定宽度的数字字段。每分钟一次,0标志升至1,“cc”改变。这个号码我需要。
在C#应用程序中,我无法使其正常工作。尝试使用recieve事件来获取数据,但刷新的结果需要10秒以上才能处理。这意味着在旗帜升起10秒后我得到了结果。有时需要更长时间。
我首先尝试使用RecieveEvent。我甚至试图填充缓冲区,直到填满线,但同样的结果。然后我尝试使用Timer,每300毫秒调用一次并读取一行。仍然是同样的问题。
所以我的问题是,如何从串口读取和处理最新数据?
答案 0 :(得分:2)
读取时,串口将缓冲数据。这将引入一个小延迟(但我们说的是毫秒,而不是几十秒)。大多数串行设备驱动程序也允许您配置缓冲,如果它真的很重要。
如果您调用ReadLine,则可能会引入更多延迟,因为它会在返回任何数据之前等到收到换行符。您确定您的设备正在发送好的换行符吗?使用终端仿真程序可以准确查看设备实际发送的内容,因为设备文档通常非常糟糕!
我会从端口读取原始数据,然后自己解析它。您可能必须更加小心地接收部分数据包,但是您从图片中删除了所有中间人,并且您可以更宽容(例如,不关心数据是否在其中有新行)。开始读取,然后将收到的数据写出到调试控制台,您很快就会看到您的程序正在接收的内容以及频率等等。这也将显示延迟是在串口还是处理中消息
答案 1 :(得分:0)
您可以尝试serialPort1.readExisting();
,然后尝试解析数据。
祝你好运!