恭喜,你发布的帖子
发布于 2022-09-08 19:36:25
5楼
FUNCTION_BLOCK "Avg"
VERSION : 0.1
VAR_INPUT
value : Real;
reset : Bool;
END_VAR
VAR_OUTPUT
avgValue : Real;
END_VAR
VAR
statCache : Array[0..#MAX_INDEX] of Real;
statCacheIndex : Int;
statIndex : Int;
statLast : Real;
statSum : Real;
statAvg : Real;
END_VAR
VAR_TEMP
i : Int;
END_VAR
VAR CONSTANT
MAX_INDEX : Int := 14;
END_VAR
BEGIN
IF #reset THEN //初始化
FOR #i := 0 TO #MAX_INDEX DO
#statCache[#i] := 0;
END_FOR;
#statCacheIndex := 0;
#statIndex := 0;
#statLast := 0;
#statSum := 0;
#statAvg := 0;
ELSIF #value <> #statLast THEN //如果值改变
IF #statCacheIndex < #MAX_INDEX THEN //缓存未满
#statCache[#statCacheIndex] := #value;
#statCacheIndex += 1;
ELSE //缓存已满
#statCache[#statIndex] := #value;
#statIndex += 1;
#statIndex := #statIndex MOD #MAX_INDEX;
#statSum := 0;
FOR #i := 0 TO #MAX_INDEX DO
#statSum += #statCache[#i];
END_FOR;
#statAvg := #statSum / #MAX_INDEX;
END_IF;
END_IF;
#statLast := #value;
#avgValue := #statAvg;
END_FUNCTION_BLOCK
请填写推广理由:
分享
只看
楼主