西门子SCL的平均值算法
前 言:
近,剑指工控技术群里一些新入群的技术新人,一直找管理员所求TIA的LGF算法功能块的提取码。同时也针对一些功能块展开激烈的讨论,很多人都在讨论这些算法块内部程序是如何实现的?针对于此剑指工控技术专家将为大家逐步展开并实现一些算法的SCL程序。这篇文章主要是介绍平均值的算法程序。//---- INPUTSI_RAW_VALUE Real Raw Value to be averagedI_NEW_SAMPLE_PULSE Bool New Value One-Shot PulseI_RESET Bool Reset MAV Buffer to 0//---- OUTPUTSQ_MAV Real Output//---- STATICBUFFER Array[1..#CONST_MAV_PERIOD] of Real BufferSUM Real Sum for Averagei Int Pointer to ArrayFULL Bool Buffer Full //---- CODEIF #I_RESET THEN // Reset BufferFOR #i:=1 TO #CONST_MAV_PERIOD DO#BUFFER[#i] := 0;END_FOR;#i := 1;#FULL := False; // Reset Full PulseEND_IF;IF #i < 1 OR #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 PointerEND_IF;ENO := #FULL; // ENO when buffer full