在技术资源库中,有How is numerical integration programmed in S7-SCL and STEP 7这样一篇文章
Instructions:
The integral is the mathematical calculation of the area under a given function curve. However, there is often no mathematical correlation in practice, but rather an analog value which varies over time. The integral calculation involving totaling the trapezoidal areas, spread between the last two function values and the time. This trapezoidal area is identical to the product of the average of the two process values and the time interval.

程序如下
FUNCTION_BLOCK FB1
// Integral calculation /
VAR_INPUT
IN : REAL;
RESET : BOOL;
ENABLE : BOOL;
END_VAR
VAR_OUTPUT
OUT : REAL;
RESET_ACTIV : BOOL;
END_VAR
VAR
OUT_LOW : REAL;
LAST_IN : REAL;
LAST_OUT : REAL;
LAST_TIME : REAL;
ACTUAL_TIME : REAL;
X : REAL;
n : INT;
END_VAR
// Reset of values /
RESET_ACTIV := RESET;
IF RESET = TRUE THEN
OUT := 0.0;
OUT_LOW := 0.0;
LAST_OUT := 0.0;
LAST_TIME := ACTUAL_TIME;
ACTUAL_TIME := TIME_TO_DINT(TIME_TCK()) / 1000.0;
X := 0.0;
n := 0;
ELSIF ENABLE = FALSE THEN
n := 0;
ELSE
//First Integral Cyclus /
IF n = 0 THEN
ACTUAL_TIME := TIME_TO_DINT(TIME_TCK()) / 1000.0;
LAST_TIME := ACTUAL_TIME;
LAST_IN := IN;
n:=1;
ELSE
// Input / Eingang
ACTUAL_TIME := TIME_TO_DINT(TIME_TCK()) / 1000.0;
// Overflow Correction /
IF ACTUAL_TIME < LAST_TIME THEN
X := (ACTUAL_TIME - LAST_TIME + 2147483.647) * (IN + LAST_IN) / 2;
ELSE
X := (ACTUAL_TIME - LAST_TIME) * (IN + LAST_IN) / 2;
END_IF;
LAST_TIME := ACTUAL_TIME;
LAST_IN := IN;
// Integral Calculation /
LAST_OUT := OUT;
OUT := LAST_OUT + X;
[COLOR=red]OUT_LOW := (OUT - LAST_OUT) - X + OUT_LOW;// OUT_LOW 是干什么用的?
IF OUT_LOW <> 0 THEN
IF ABS(OUT/OUT_LOW) < 10000000 THEN
LAST_OUT := OUT;
OUT := OUT - OUT_LOW;
OUT_LOW := (OUT - LAST_OUT) + OUT_LOW;
END_IF;
END_IF;
END_IF;
END_IF;
[/COLOR]
END_FUNCTION_BLOCK
程序大体的意思看明白了,但是标记红颜色的字体的部分不是很明白
感觉应该是浮点数运算纠偏的过程,但是没有分析很透彻。OUT_LOW 是干什么用的。
大家帮忙分析下,谢谢