博图标准化编程技巧(四)流量累计计算
周末写了关于设备运行时间计算的文章,大家讨论还比较热烈,今天趁热打铁写一下关于流量累计计算的问题。流量累计如果想得到精确的数据当然是需要采用数据通讯的方式直接从仪表采集数据,或者采用脉冲信号的方式在PLC中累加,如果既没有数据通讯又没有脉冲信号就只能采用瞬时流量积分的方式计算,简单的算法就是每秒钟将当前瞬时流量除以3600作为每秒的累计流量加到流量累加值中。同样以上算法跟设备运行时间一样会面临浮点数精度问题,通常处理方式也有2种,一种方式是两级累加,比如把累计值拆分成一个大数和一个小数,小数累加到1万或10万再加到大数上,避免出现一个很大的数加一个很小的数情况;另一种就是取整累加,累加值由整数部分和小数部分组成,最后只显示小数部分。一般情况下累计值用整数表示已经足够满足要求,所以今天就给大家展示一下我写的流量累加程序。程序可能不够简练,算法也不够精确,一切以满足要求为准,欢迎大家批评。

首先是秒脉冲信号到来时 我们将瞬时流量R_V_PV 除以3600 得到一秒钟内的近似累加值并将其累加到中间变量R_UPVQ_R上

当中间变量R_UPVQ_R的绝对值大于等于1时或小于等于-1时,对R_UPVQ_R取整,将整数累加到最后的累加值上,同时中间变量减掉已经累加的整数部分,保留小数部分。
那么大家知道为什么要判断中间变量小于等于-1的情况呢?那是因为这种积分累加的准确度不高,需要定期校准,为了方便计算校准的值可以直接累加到R_UPVQ_R上后面的取整操作就跟普通累加过程一样了,而有时候偏差就是负值,所以要判断小于等于-1的情况。