发布于 2008-05-13 21:29:20
0楼
FUNCTION "FLUXbase" : VOID
TITLE = 'FLUXbase'
//流量累积计算
//
//算法原理:
// 当前积分量 = 积分量 + 以前的计算误差
// 当前累积量 = 当前积分量 + 原累积量
// 当前计算误差 = 原累积量 - 当前累积量 + 当前积分量
//
//版本: 1.0
//作者: QLHCCO
//创建: 2008.05.09 V1.0
//更新: ------
//
VERSION: '1.0'
AUTHOR: qlhcco
NAME: FLUXbase
FAMILY: FLUX
VAR_INPUT
PV : REAL ; //瞬时流量
CYC : REAL ; //采样时间(MS)
PLL : REAL ; //允许的最小瞬时流量
END_VAR
VAR_IN_OUT
OV : REAL ; //流量累积输出
OV_ER1 : REAL ; //累计偏差1
OV_ER2 : REAL ; //累计偏差2
OV_ER3 : REAL ; //累计偏差3
PV_ALT : REAL ; //上周期瞬时流量
END_VAR
VAR_TEMP
tmpReal1 : REAL ;
tmpReal2 : REAL ;
OValt : REAL ;
RS : BOOL ;
END_VAR
BEGIN
IF OV >= 1.000000e+016 THEN //
OValt := 0.0 ;
RS := true ;
ELSE
OValt := OV ;
RS := False ;
END_IF;
tmpReal1 := ( PV + PV_ALT ) / 2.0 ;
tmpReal2 := PV * (CYC / 3.6E+6 ) ;
IF tmpReal1 >= PLL THEN //小信号切除
tmpReal1 := tmpReal2 + OV_ER1 ; //计算当前积分量
tmpReal2 := tmpReal1 + OV_ER2 ;
OV_ER1 := OV_ER2 - tmpReal2 + tmpReal1 ; //第1误差动态误差计算
tmpReal1 := tmpReal2 + OV_ER3 ;
OV_ER2 := OV_ER3 - tmpReal1 + tmpReal2 ; //第2误差动态误差计算
tmpReal2 := tmpReal1 + OValt ;
//下面的这个主要是在累积量清零后
//防止误差引起的显示负值的显示效果
IF RS THEN
IF tmpReal2 >= 0.0 THEN
OV := 0.000000e+000;
OV_ER3 := OValt - tmpReal2 + tmpReal1 ;
ELSE
OV := OV ;
OV_ER3 := tmpReal2 ;
END_IF ;
ELSE
OV := tmpReal2 ;
OV_ER3 := OValt - tmpReal2 + tmpReal1 ;
END_IF;
ELSE
OV := OValt ;
END_IF ;
PV_ALT := PV ;
END_FUNCTION