恭喜,你发布的帖子
发布于 2017-10-16 08:34:09
26楼
FUNCTION_BLOCK "DW_Mean30Seconds"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
IN : Real;
END_VAR
VAR_OUTPUT
OUT : Real;
END_VAR
VAR
i : Int := 1;
k : Int := 1;
iArrayMean30Seconds : Array[1..30] of DInt;
iSumArrayMean30Seconds : DInt;
FB_TON_1Second {OriginalPartName := 'IEC_TIMER'; LibVersion := '1.0'} : TON_TIME;
END_VAR
BEGIN
(*Zeitintervall mit dem die Werte eingelesen werden*)
#FB_TON_1Second(IN := TRUE,
PT := t#1s);(*定时器开始计时*)
If #FB_TON_1Second.Q = TRUE Then
#FB_TON_1Second.IN := FALSE;
(*Mittelwertbildung*)
#iSumArrayMean30Seconds := #iSumArrayMean30Seconds - #iArrayMean30Seconds[#i];
#iArrayMean30Seconds[#i] := REAL_TO_DINT(#IN * 100);
#iSumArrayMean30Seconds := #iSumArrayMean30Seconds + #iArrayMean30Seconds[#i];
#OUT := DINT_TO_REAL(#iSumArrayMean30Seconds) / (#k * 100);
(*inkrementieren des Array-Index*)
If #i < 30 Then
#i := #i + 1;
Else
#i := 1;
End_If;
(*Anzahl der Werte im Array*)
If #k < 30 Then
#k := #k + 1;
Else
#k := 30;
End_If;
End_If;
#FB_TON_1Second.IN:=TRUE;
(*----------END FUNKTIONBLOCK----------*)
END_FUNCTION_BLOCK
请填写推广理由:
分享
只看
楼主