1. 加入收藏 在線留言 聯系我們
        關注微信
        手機掃一掃 立刻聯系商家
        全國服務熱線13185520415
        公司新聞
        西門子博途中實現信號濾波的三種方法
        發布時間: 2024-05-24 18:01 更新時間: 2024-11-23 08:00
        觀看西門子博途中實現信號濾波的三種方法視頻

        濾波程序全局概述與下載方式【一】下載方式公眾號對話框回復“333”獲取下載鏈接,不會的請參考下圖。【二】濾波程序全局庫概述(1)功能:實現對采集數據的濾波,調節濾波參數可達到理想曲線。(2)移植:功能塊編寫語言均為SCL,可方便移植到其它品牌PLC。(3)內容:內含三種濾波程序,一階滯后/堆棧平均/中位值/濾波法。(4)版本:博途V15.1【三】濾波效果如下圖一階滯后濾波法【一】一階滯后濾波法封裝(二)SCL編程代碼如IF #"a (0-1)" >= 1.0 THEN    #"a (0-1)" := 0.5;END_IF;#ms_time := INT_TO_TIME(#time_ms);#IEC_Timer_0_Instance(IN := NOT #p,                      PT := #ms_time,                      Q => #p);IF #p THEN        #new_value := (1 - #"a (0-1)") * #IN + #"a (0-1)" * #last_value;    #last_value := #new_value;    #OUT := #new_value;END_IF;堆棧平均濾波法(一)堆棧平均濾波法封裝(二)SCL編程代碼#IEC_Timer_0_Instance(IN:=NOT #TIMER_INOUT,                      PT:=#time_采集時間,                      Q=>#TIMER_INOUT);#S_數組[#"N_采集數量(3-999)"] := #In_輸入值;IF #TIMER_INOUT THEN       FOR #S_j := 1 TO  #"N_采集數量(3-999)" DO        #S_數組[#S_j-1] := #S_數組[#S_j];            END_FOR;END_IF;#T_max := #S_數組[0];#T_min := #S_數組[0];FOR #S_j := 0 TO #"N_采集數量(3-999)"-1 DO    IF #S_數組[#S_j] > #T_max THEN        #T_max := #S_數組[#S_j];    END_IF;    IF #S_數組[#S_j] < #T_min THEN        #T_min := #S_數組[#S_j];    END_IF;    #T_sum := #T_sum + #S_數組[#S_j];END_FOR;IF #"MAX/MIN_EN" THEN#Out_輸出結果:=(#T_sum-#T_max- #T_min )/ (#"N_采集數量(3-999)"-2);ELSE    #Out_輸出結果 := #T_sum / #"N_采集數量(3-999)";END_IF;#Out_max := #T_max;#Out_min := #T_min;中位值濾波法(一)中位值濾波法封裝  (二)SCL編程代碼//n 須為3<n<999的奇數IF #N < 3 THEN    #N := 3;END_IF;IF #N >999 THEN    #N := 999;END_IF;#MOD :=#N MOD 2;IF #MOD = 0 THEN    #N := #N + 1;END_IF;//轉換成時間格式#time_temp := INT_TO_TIME(#time_ms);//生成脈沖,對n個數堆棧#IEC_Timer_0_Instance(IN:=NOT #p,                      PT:=#time_temp,                      Q=>#p );IF #p THEN    FOR #x := 0 TO #N - 2 DO        #value[#x] := #value[#x + 1];    END_FOR;   #value[#N-1] := #IN;END_IF;     // 將value數組中的數復制到temp_value數組中MOVE_BLK(IN:=#value[0],             COUNT:=1000,             OUT=>#temp_value[0]);        //對temp_value數組中數從小到大排序    FOR #j := 0 TO #N - 3 DO        FOR #i := #j TO #N - 2 DO            IF #temp_value[#j] > #temp_value[#i + 1] THEN                #value_temp := #temp_value[#i + 1];                #temp_value[#i + 1] := #temp_value[#j];                #temp_value[#j] := #value_temp;            END_IF;        END_FOR;    END_FOR;        //在排好序的數組中,取中間數作為輸出     #OUT := #temp_value[(#N - 1) / 2];

        聯系方式

        • 電  話:13510737515
        • 聯系人:董海波
        • 手  機:13185520415
        • 微  信:13185520415