本人之前一直从事工控行业,这工作中我不只一次地遇到这种情况:我给你放两根线到你的自控柜,你给我把流量计的累计值读过来,显示到界面上。每次我都表示很无奈,这个做不到啊!那么能用AI板卡读瞬时流量,为什么不能读累计流量呢?
说到这个问题,要从一个正常的模拟量信号的读取过程说起。首先仪表通过4-20mA的电流信号来表示实际的数值,通过AI板卡的模数转换器将模拟量信号转换为Int类型(整型)的数字量。
Int为带符号的16位整型,所以最大值为 0111 1111 1111 1111 (原码),最小值为 1111 1111 1111 1111 (原码)转换为十进制表示即为 -32767 ~ +32767(由于有一位符号位,所以实际用来表示数值的有15位,用二进制表示为 111 1111 1111 1111 十进制为32767 所以对应的数据范是-32767 ~ +32767)
知道了原理那么假如现在我们有一台流量计,最大能测量的流量为65534 m³/h,显然这个数已经超了INT数据所能表示的最大值的两倍,所以我们要如何把这个数表达出来呢?首先流量的显示肯定不能使用Int类型了,我们该用32位浮点型,以便显示更大的数值。然后这里我们就要引入一个新的概念量程,量程即为流量的范围,如我们上面的举的例子,流量计的最大流量是65534 m³/h,那它的量程就是0 ~ 65534m³/h,有了量程我们就可以得到对应关系,即Int 0对应流量0m³/h,Int 32767对应最大流量65534m³/h,有了这样的关系我们就可以使用AI板卡提供的数字信号表示量程范围内的任一数值。举个例子,假如现在Int数值为10000,那么对应的流量值为65534*10000/32767=20000m³/h。
下面回到我们最开始讨论的话题,为什么累计流量不能用AI板卡读取呢?因为有了量程才可以量化AI板卡读取数据与实际数据的对应关系,而累计流量是没有量程的,它会一直累计。所以累计流量是不能使用AI板卡读取的,如果想要读取累计流量,在流量计支持的情况下选取对应的通讯协议进行读取如485/232协议等,当然这一般就需要在PLC端增加相应的硬件。
最后在实际操作的时候,有小伙伴会发现一些AI板卡读取的PIW值最大值并不是+32767而是+27648,这是为了应对超量程情况而留下的15%裕量,毕竟不是所有仪表都很老实,也有超量程的时候,我们也不能不显示吧。