-
1 # 工控人
-
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下使用不是很方便。博圖平臺後,使用還是挺方便的。另外擴充套件性很好。
回覆列表
評比算分,去掉最高分和最低分算平均,PLC怎樣程式設計實現,這個功能採用ST結構文字語言編寫比較簡單,採用梯形圖的話則比較麻煩但是都能實現。首先我們分析你的問題很經典的程式設計題目,我們的目的就是找出最高分和最低分,然後求和算成平均值,下面我們分別使用ST和梯形圖的程式設計去實現。
1ST,比較簡單我們使用兩個指令MAXMUM最大值選擇函式和MINMUM最小值選擇函式即可找出最高分和最低分,這裡我們假設對10組評分進行計算,最後得出一個平均值,ST程式設計如下,左側是程式,右側圍監視部分,程式很簡單總共五句就能完成。
2梯形圖,相對來說比較複雜,因為沒有現成的尋找最小值最大值的指令,我們還得自己編寫,這裡我們使用迴圈指令來實現最高分和最低分的挑選,以及總分的計算。梯形圖程式設計大致分為三部分,1是資料初始化,2是極值的尋找,3是平均分的計算。這中間我們用了變址暫存器V進行連續資料處理,這在批次資料處理中經常遇到。具體的程式如下:
兩種程式設計方式最後的計算結果一致,可以看出在PLC對資料的處理這塊,ST程式設計明顯比梯形圖有優勢,簡潔明瞭,可以使用庫函式和自己編寫的函式對資料進行處理。而梯形圖則需要很多指令去完成比較繁瑣。