C#串口每2s定时接收数据,接收数据同时进行数据处理和绘图显示,接收数据长度固定为47个字节。正常情况下接收和显示没有问题,但是出错时发现数据没有同步上,即接收的数据头部不是我想要的头部,所以里边的数据结构错位了,我初步判断是上位机处理速度没有跟上(因为有绘图和算法处理),而发送端可能过快,导致了数据的丢失。请问如何改善程序?
1、我使用的是c# 的serialport类,串口数据采用中断接收,每隔47个字节产生一个中断。接收后判断头部是否与是我预先设定的。然后进行处理,如果不是则丢弃。我的程序到出错时头部就找不到了。
2、我接收使用的是委托,使用的是this.Invoke(p,recievebuf);这个来处理。
3、之前还出现过timeout exception是串口的后来加上了try catch 语句给忽略了。
那个serialport 的RecieveBytesThreshold属性是47,是可以将串口设置成固定数据接收的。我的程序可以这样固定数据字节接收,但是运行一阵子后会错位。因此应该是没有搞缓冲区用线程同步的问题,总之谢谢你了。
追答不能用RecieveBytesThreshold来确认收到一定是固定长度的数据,指定的结果就是可能刚开始正常,过一段时间就会出现问题。