解决流量计跳数问题总结和感悟
王硕
在进行第二次轴向分级燃烧第一级点火燃烧实验时,主流空气更换了两个大量程流量计2000slpm,在实验过程中,返回数据出现了位数错乱现象,如下图。
流量的读取是通过截取固定位置及位数的返回码而后经过换算实现的,因此流量显示出现了频繁的掉数。刚开始考虑可能是硬件问题,例如信号线接线不牢固,拓展坞插口异常,usb转485设备传输不稳定,流量计信号线之间存在电磁干扰等问题。于是急忙重新接了一次线,更换了另一个拓展坞,发现问题依然存在,但是好在,在实验中发现了,只有流量计流量在二百多到三百的时候才会出现掉数,大流量则不会出现这种情况,这起码证明掉数的原因并非是设备密集而导致的干扰问题,也非接线的问题。至此,除usb转485接口外,其他硬件因素基本已经排查完毕。
当时因为只有两个大量程流量计出现了跳数,考虑可能是用大流量计测较小流量会出现错误,询问流量计客服后,用串口助手测试,发现收发功能码都是正常的,但是用labview则会出现返回码不完整和冗余的现象,考虑可能是labview的编写问题。后来,购买的高质量usb转485设备到了,迫不及待的换上试了一下,确实质量好,也确实好用了很多,但是问题并没有解决,于是便开始一心解决软件及程序问题。
经过多途径的大量搜索,怀疑可能是大量程流量计在收发小流量时,写入速度大于读取速度,累计数据量增大导致缓冲区溢出,进而导致跳数。于是基于这一猜想,想出了几种解决方案:
- 在读取前,增加一个清除读取缓冲区,保证每次的读数不会被前面影响
- 在写入和读取之间增加一个延时,避免读取过快过慢导致的错位
- 使用条件结构,在只有返回数为7时,才进行数据的读取和写入
- 使用条件结构,判断起始位是否是01,如果是,再进行读数和存储
实践后发现无论哪种方法,都无法避免其在特定的流量范围内出现返回码不完整的问题,总是会频繁的出现0103020A这个不完整的返回码。还有一个比较麻烦的方法就是在visa读取后,增加一个队列,数据存入队列,长度等于7则处理,不足7则继续等待,这个学习了一会,还没学会,后续可以再学习一下。
在验证这些方案是否可行的过程中,突然发现,每次返回数的位数出现偏差,都是以0A为结尾,于是搜索了一下发现,labview的默认终止符是0A!在前面的blog中提到,读取流量的位数是第4,5位,如图。

在十六进制中,0A的取值范围为0A00-0AFF,对应十进制的值为2560-2815,再除以流量计的放大倍数为256-281.5,即在这个流量范围内都会因触发终止符而中断,导致后续的错位,致使无法正常显示流量。解决办法即是在visa配置串口将启用终止符创建常量,并将其关闭,如图。

完成修改后,再次测试程序,返回码中断,错位问题得到解决,如图。

经过此次经历让我发现,labview的学习任重而道远。一步就能解决的问题,竟然走了这么多弯路。