恭喜,你发布的帖子
发布于 2017-10-17 19:40:56
29楼
FUNCTION_BLOCK AverageTi
VAR_INPUT
Hold :BOOL:=false;//
V :REAL:=0.0;//输入值
Ti :REAL:=1.0;//时间段,1~10分钟
Sampletime{S7_link:='false';S7_visible:='false';S7_sampletime:='true'}:REAL:=1.0;//采样时间
END_VAR
VAR_OUTPUT
U:REAL;//平均值输出
END_VAR
VAR
sr_count:REAL;
sr_value:ARRAY[0..599] OF REAL;
sr_sum:REAL;
END_VAR
VAR_TEMP
pr_Ti:REAL;
pr_count:REAL;
pi:INT;
END_VAR
BEGIN
pr_Ti := LIMIT(MN:=1.0,MX:=10.0,IN:=Ti);
pr_count := pr_Ti*60.0/Sampletime;
IF sr_count <= pr_count -1 THEN
sr_count := sr_count+1;
END_IF;
IF Hold THEN
U := V;
FOR pi := 0 TO 599 DO
sr_value[pi] := 0.0;
END_FOR;
sr_count:=0.0;
ELSE
FOR pi := REAL_TO_INT(pr_count)-2 TO 0 BY -1 DO
sr_value[pi+1] := sr_value[pi];
END_FOR;
sr_value[0] := V;
FOR pi := 0 TO REAL_TO_INT(pr_count)-1 DO
sr_sum := sr_sum + sr_value[pi];
END_FOR;
U := sr_sum/sr_count;
sr_sum := 0.0;
END_IF;
END_FUNCTION_BLOCK
CFC OB32 运行
取最近的1~10分钟数据平均值
请填写推广理由:
分享
只看
楼主