前 言:
近,剑指工控技术群里一些新入群的技术新人,一直找管理员所求TIA的LGF算法功能块的提取码。也针对一些功能块展开激烈的讨论,很多人都在讨论这些算法块内部程序是如何实现的?针对于此剑指工控技术专家将为大家逐步展开并实现一些算法的SCL程序。这篇文章主要是介绍平均值的算法程序。//---- INPUTS I_RAW_VALUE Real Raw Value to be averaged I_NEW_SAMPLE_PULSE Bool New Value One-Shot Pulse I_RESET Bool Reset MAV Buffer to 0 //---- OUTPUTS Q_MAV Real Output //---- STATIC BUFFER Array[1..#CONST_MAV_PERIOD] of Real Buffer SUM Real Sum for Average i Int Pointer to Array FULL Bool Buffer Full //---- CODE IF #I_RESET THEN // Reset Buffer FOR #i:=1 TO #CONST_MAV_PERIOD DO #BUFFER[#i] := 0; END_FOR; #i := 1; #FULL := False; // Reset Full Pulse END_IF; IF #i #CONST_MAV_PERIOD THEN // Test Index and reset to 0 if out of range #i := 0; END_IF; IF #I_NEW_SAMPLE_PULSE THEN // New Value? #SUM := #SUM + #I_RAW_VALUE - #BUFFER[#i]; // Update Sum - add newest // element and take out oldest // one from the buffer #BUFFER[#i] := #I_RAW_VALUE; // Store new raw value in // the buffer #Q_MAV := #SUM / #CONST_MAV_PERIOD; // Calculate Moving Average IF #i = #CONST_MAV_PERIOD THEN // Buffer Full #FULL := True; END_IF; i:=i+1; // Update Pointer END_IF; ENO := #FULL; // ENO when buffer full