温度显示动不动跳0.5℃、压力值和现场表差了2%,这类问题九成出在"原始码到工程值"的转换链路上,而不是传感器本身。结论先说:只要把AD采样、工程值换算、滤波、标定补偿这四步做扎实,0.2级精度的仪器仪表信号在上位机端做到全量程误差0.1%以内完全可行。下面按信号流过的顺序,一步步拆开讲。
原始码是怎么来的?AD采样这一步就容易踩坑
模拟量信号进PLC的AI模块,先被AD芯片量化成整数,也就是原始码。西门子S7-1200/1500的标定是0到27648,对应4到20mA;超量程会冲到32767。三菱和欧姆龙的标定区间又各不相同。第一个坑就在这儿:很多程序把原始码直接当工程值用,或者写死了单一品牌的标定系数,换设备就出错。
第二个坑是断线检测。传感器断偶、断线时,AI模块会输出32767或-32768这类特殊码,不处理的话界面会显示一个离谱的温度值。我之前处理过一个类似案例,制药车间的温度曲线隔几小时冒一个尖峰,查了一整天,最后发现是某台变送器接线端子松动,原始码冲顶后没被过滤。
还有个细节:PLC通讯数据采集时要用带符号的Int去读,用Word强转Int会丢符号位,负温区的数据全会变错。这种问题在北方的室外项目里特别常见。
工程值转换公式怎么选才不失精度?
线性传感器最简单,y=kx+b一步到位,k等于量程上下限之差除以码值上下限之差。但仪器仪表里大量传感器是非线性的——NTC热敏电阻、低成本铂电阻、部分气体浓度探头,线性公式直接用误差会失控。
两个方案。一是分段线性插值,把量程切成若干段,每段独立标定,五到十个分段点就能把误差压得很低;二是多项式拟合,三阶多项式在-40到120℃区间能做到0.05℃以内的拟合误差。数据点足够时我们优先用最小二乘拟合,配置表里存系数,运行时代入计算,改传感器型号只换配置不改代码。这点很关键:转换逻辑和参数分离,是仪器仪表上位机开发的基本功。
另外提醒一句:浮点运算全程用double。float只有7位有效数字,长时间运行累积下来的偏差会把你的标定成果一点点吃掉。
滤波怎么做,既平滑又不失真?
滤波做猛了曲线好看,但会把真实突变抹平;不滤波,实时曲线抖得没法看。我们常用的组合是三板斧:先限幅滤波剔除尖刺——相邻两次采样偏差超过阈值就判为异常值;再滑动平均,窗口取8到16个采样点;最后中值滤波防脉冲干扰。
要求高的场合上自适应一阶低通:信号平稳时系数取0.1,曲线丝滑;检测到突变时系数切到0.6,保证跟随速度。我们在苏州上位机系统开发的一个称重项目里用的就是这套,静态显示稳定到小数点后两位,加卸载冲击的响应延迟还控制在200毫秒内。
标定和漂移补偿怎么落地?
再好的算法也扛不住硬件漂移,标定必须做成常态化机制。实操上用两点标定:零点和满量程各接入一个标准信号源,上位机采两组原始码,算出新的k和b存进配置。现场巡检时一键重标,五分钟搞定。
温漂补偿容易被忽略。采集板卡和调理电路会随温度漂移,按厂家给的ppm/℃系数,记录板卡温度做二次修正。在嘉兴PLC数据采集的一个高低温试验箱项目里,加不加温漂补偿,长期运行的误差差了将近三倍。据行业普遍观察,很多"传感器不准"的锅,其实是调理链路温漂的锅。
最后给个可以马上做的动作:从现场挑一台公认最不准的仪表,拿标准源做对比实验,把误差按量程画成曲线。误差是斜的,标定有问题;误差是抖的,滤波有问题;两头翘中间平,非线性拟合的问题。对着曲线下药,比盲目换传感器省钱得多。