一个模拟量信号,例如0-10V电压,通过模拟量模块的模数转换器转换为过程值,然后通过背板总线传送给到CPU中, 在CPU中使用一个数据类型为Int的变量表示,例如IW10,一个Int包含16个位信号。
1个字=16个位
最高位即第16位表示符号位,0为正值,1为负值
其他的15个位信号表示过程值
正数时,最大值为2的15次方减1,即32767,取值范围为0-32767。如果与0-10V模拟量信号按线性关系对应,过程值的一个增量对应305.2微伏,也就是最小可以分辨305.2微伏。
那么为什么在电压、电流转换计算时,使用的是27648而非32767呢?
原因就是显示的测量范围分别有额定范围、超出范围以及低于范围,以及上溢或下溢。
以0-10V模拟量信号转换后的过程值为例,0-27648为额定范围,27649-32511为超出范围,32512-32767为上溢,实际上0-32767对应的是0-11.852V的测量范围,0-27648对应的是0-10V的测量范围。所以在额定范围内,转换计算的是27648而非32767,这样做的好处之一就是可以连接具有多个测量范围的变送器或者仪表。好处之二就是可以在程序中判断取值是否超限。
如果使用0-32767作为额定范围,即使超限也只能显示最大值,而不能得到超限的状态。
以0-10V为例,使用0-27648作为额定测量范围,每一个增量将从305.2微伏降低到361.7微伏,考虑到模数转换误差以及其他因素,适当降低分辨率并不会影响计算的准确性,但是却增加了诊断功能。
除了在程序中可以判断外,过程值超限还可以触发诊断中断。
对于低于16位分辨率的模拟量模块,转换的过程之采用整体位左移的方式,移出的位使用0填充,这样对于额定测量范围来说,转换的过程值还是0-27648,但是分辨率却降低了。