回覆列表
  • 1 # 工控人

    評比算分,去掉最高分和最低分算平均,PLC怎樣程式設計實現,這個功能採用ST結構文字語言編寫比較簡單,採用梯形圖的話則比較麻煩但是都能實現。首先我們分析你的問題很經典的程式設計題目,我們的目的就是找出最高分和最低分,然後求和算成平均值,下面我們分別使用ST和梯形圖的程式設計去實現。

    1ST,比較簡單我們使用兩個指令MAXMUM最大值選擇函式和MINMUM最小值選擇函式即可找出最高分和最低分,這裡我們假設對10組評分進行計算,最後得出一個平均值,ST程式設計如下,左側是程式,右側圍監視部分,程式很簡單總共五句就能完成。

    2梯形圖,相對來說比較複雜,因為沒有現成的尋找最小值最大值的指令,我們還得自己編寫,這裡我們使用迴圈指令來實現最高分和最低分的挑選,以及總分的計算。梯形圖程式設計大致分為三部分,1是資料初始化,2是極值的尋找,3是平均分的計算。這中間我們用了變址暫存器V進行連續資料處理,這在批次資料處理中經常遇到。具體的程式如下:

    兩種程式設計方式最後的計算結果一致,可以看出在PLC對資料的處理這塊,ST程式設計明顯比梯形圖有優勢,簡潔明瞭,可以使用庫函式和自己編寫的函式對資料進行處理。而梯形圖則需要很多指令去完成比較繁瑣。

  • 2 # 儒拉小鎮

    也沒有問用什麼PLC,閒著沒事寫個小程式。為了方便模擬,隨便用了一個1500系列的PLC。博圖V15.

    這些資料沒有說明多少個。這裡建了一個real陣列,長度100。另外有一個輸入介面和兩個輸入輸出介面。

    初始化程式段,這裡如果ioClear為True的時候,對陣列進行清除。

    REGION _Init_

    IF #ioClear THEN

    FOR #i := 1 TO 100 BY 1 DO

    #sArrayReal[#i] := 0.0;

    END_FOR;

    #ioClear := 0;

    END_IF;

    END_REGION

    正常測試程式,如果設定要求算的資料長度在1~100之間則計算。如果超過,Return退出當前FB塊,並且給一個Error警告。

    REGION _Cal_

    IF #iNumber >= 1 AND #iNumber <= 100 THEN

    IF #ioTrigger THEN

    #sMax := #sArrayReal[1];

    #sMin := #sArrayReal[1];

    #sTotal := 0;

    #sAverage := 0;

    FOR #i := 1 TO #iNumber BY 1 DO

    IF #sArrayReal[#i] > #sMax THEN

    #sMax := #sArrayReal[#i];

    END_IF;

    IF #sArrayReal[#i] < #sMin THEN

    #sMin := #sArrayReal[#i];

    END_IF;

    #sTotal := #sTotal + #sArrayReal[#i];

    END_FOR;

    IF #iNumber >= 1 AND #iNumber <= 2 THEN

    #sAverage := 0.0;

    ELSE

    #sAverage := (#sTotal- #sMax - #sMin) / (#iNumber -2);

    END_IF;

    #ioTrigger := 0;

    END_IF;

    #oError := "";

    ELSE

    #oError := "iNumber Set Error";

    RETURN;

    END_IF;

    END_REGION

    資料設定。注意起始數值。如果是10的話,陣列計算為1~10

    總結一下:

    西門子PLC在原來STEP 7(硬體300/400)基礎上,推出了博圖平臺(硬體1500系列)。除了對電腦配置要求高外,還是值得推薦使用的。

    SCL語言,以前在STEP 7下使用不是很方便。博圖平臺後,使用還是挺方便的。另外擴充套件性很好。

  • 中秋節和大豐收的關聯?
  • 經過一段感情後,4年都沒有新的感情,是否正常?該怎麼辦?