西门子SCL的平均值算法

前 言:

最近,剑指工控技术群里一些新入群的技术新人,一直找管理员所求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 < 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 Pointer
END_IF;

ENO := #FULL;                                   // ENO when buffer full

 

欢迎大家加入剑指工控技术群共同进行技术讨论!

入群,请加管理员微信:

图片

 

同时还有剑指工控VIP知识星球提供一些厂商级别内部资料!

图片