记一次labview串口读取数据错位的bug及解决办法
2023-07-29 21:35:17 星期六
问题来源:使用labview制作上位机软件,通过读取温度传感器发送的数据,实时显示在上位机界面中。单独测试温度读取程序时,串口读取一般不会出错。但是,当串口读取与其他程序并行运行时,串口读取的温度值就会出现错位现象,导致温度值读取不正确。
原因分析:串口在读取数据时常常由于与下位机的时钟频率不同,导致发送数据和读取数据的速率不一致。当下位机发送数据时,上位机可能处于正在读取数据、准备读取数据、停止读取数据三种状态。假设下位机发送数据时,上位机正在读取数据,则有可能在下位机发送数据一半之后才开始读,导致数据串位。
我试了三种方法:
方法1:labview“连续运行”状态。当labview处于“连续运行”这种奇妙的状态时,读取数据往往不会出错,这种观点来源于CSDN博客。我尝试了此种方法,数据的错误率下降了很多,但仍然不符合预期,不得已放弃这种最简单的方法。
方法2:设置长时延。在串口读取数据之后设置较长的延时,并且在连续发送温度值状态下,先写入一次单次读取命令,读取命令跟在其后。这样做的预期是希望可以打断下位机发送命令的进程,迫使其重新发送数据。预期效果不错,但仍然有错误,可以接受。
方法3:将连续发送数据改为写入一次命令发送一次温度数据,且使用停止位。读物温度仍然出错。
方法4:连续读取命令,然后根据命令中的不变字符匹配获得想要的温度字符。有效。