以下是本人编的流量累积程序,在OB35调用(请指教:采用了了整形运算会比实形精度高的原理)
数据类型 变量名 备注
INT: PIW 模拟量输入地址
DINT: TOTOAL_D DINT类型的流量累积
REAL: FAC 转换系数(如4-20MA,对应100-1000m3/h,OB35一秒内执行N次,则FAC=[(1000-10)/(27648×3600×N)]
REAL: OFFSET 偏移 (如4-20MA,对应100-1000m3/h,则OFFSET=100)
REAL: TOTOAL_R REAL类型的流量累积(m3) TOTOAL_R=TOTOAL_D对应的实数×FAC+OFFSET
BOOL: RESET 流量累计复位
OB35程序部分
L #PIW
ITD
L #TOTOAL_D
+D
T #TOTOAL_D
DTR
L #FAC
*R
L #OFFSET
+R
T #TOTOAL_R
A #RESET
JNB _001
L 0
T #TOTOAL_D
1、请各位提出它的缺点?
2、很大的DINT量与很小的DINT相加会有误差吗?(我想应该没有象很大的REAL量与很小的REAL相加会大的误差)
3、TOTOAL_D加到一定程度就会溢出,如何解决?(#TOTOAL_D没有REAL的表示范围大,最大为2147483648,按照每秒采集一次算,按50%流量算,
2147483648/(27648×3600*24/2)=1.78天),即2天不到就会溢出!!我想是否应该加一段:如当TOTOAL_D大于Y时(Y取接近溢出值),TOTOAL_D减去Y,而同时TOTOAL_R加上Y对应的实数值。