串口通信的问题,为什么有时串口读出来的数会偏移了一位的啊
最近写了套程序 通过串口读取 电子秤的数据. 用是能用了,但有时读出来的数会偏了一位的,
电子秤的 格式是=号后面接8位数字,不停重复,也就是
=100.0010=100.0210=110.0210=100.0210
这种格式.
一开始时 我是这样写的
MSComm1.Settings = "600,N,8,1"
MSComm1.InputLen = 0
MSComm1.RThreshold = 9
然后 在ONCOMM 那里取直接读这9个字符 转成数字处理就行了
也就是读取出来 变成 "=100.0010" ,再取后面8位数字处理
一开始时是能正常运行的.但过一段时间 就有可能变成
"0=100.001" (也就是偏移了一位)
这种情况,时间不定,有时可能用一天都没事,有时几分钟就出现这种情况. 请问是那里的设置出了问题?
我现在的解决方案是一次读18个字节,然后从"=号" 开始取后面的8个数字.程序用是能用了,但我想了解并解决上面提及的这个字符偏一位的问题.谢谢
[解决办法]
通讯设定问题、硬件故障、发送端程序错误……
存在即合理。
你的解决方案其实很不错,在这种场景中丢掉一半数据没有任何问题。
下面的方案适用于不能丢数据的场景:
1)第一次发现 "=" 不是第一个字符时,将 RThreshold 临时增加,增加的长度为 "=" 前的字符个数;
2)接下来收到的数据和上一条数据组成完整的两个数据,马上将 RThreshold 恢复正常长度。