12.25 資深工程師分享:PLC程序設計思路,初學者福利

前幾天有個學員諮詢一個程序設計的問題,程序的控制要求如下:需要控制5臺電機的運行,每臺電機運行時需要記錄運行時間,電機啟動運行時,根據記錄的運行時間,從小到大,每個2s依次啟動電機的運行。


我想對於這個程序的控制要求來講,他的難點在於如何對這些電機運行時間進行排列,排列好了後,如何根據排列的順序去起動電機的運行,從這個控制要求中我們可以看出,這主要是分為兩個部分來完成這個程序的設計的:


第一部分:用於對電機的運行時間進行從小到大順序的排列;

第二部分:根據排列好的數據,如何判斷需要起動那一臺電機。

這裡我們以西門子S7-200SMART系列PLC為例,先說說,如何編寫一個數據排列的帶參數的子程序。

數據排列帶參數子程序設計思路:

西門子S7-200系列的PLC中不像三菱的FX系列PLC具有數據排列的指令,因此我們要實現這個數據的排列功能,必須自己去搭建一個這樣的功能塊,在搭建這個功能塊的時候,會使用到間接尋址和循環指令,同時還需要應用到帶參數的子程序。

那麼如何編寫一個數據排列的子程序呢?

假設有5個數據需要把他們的數據的大小按照順序從小到大排列,那麼我們可以先在這五個數中找到最大的數放在最後面。然後在剩下的四個數中找到最大的數放到倒數第二個的位置,接著在剩下的三個數中找到最大的值放到倒數第三的位置,依次下去,這樣當全部比較完後,我們的數據就按照從小到大的順序排列好了。那麼很明顯,我們需要用兩個循環指令進行嵌套。外層的循環指令需要循環4次,而內層的循環指令的循環次數是會變化的,因為第一次從5個數據中找出最大值,循環4次,第二次的時候從4個數據中找出最大值,循環3次,依次下去,每次需要改變循環的次數。


如何找出最大值呢?我們可以進行比較,首先用第二個數跟第一個數比較,如果第二個數比第一個數大,那麼指針往下移動變成第二個數跟第三個數比較,如果第二個數比第三個數大,那麼對第二個數和第三個數進行交換,依次下去,當比較完成後,最大的數就放到最後的地址裡面去了。


程序設計:

(1)建立變量表

資深工程師分享:PLC程序設計思路,初學者福利

(2)根據變量表,編寫數據排列子程序

資深工程師分享:PLC程序設計思路,初學者福利

資深工程師分享:PLC程序設計思路,初學者福利

資深工程師分享:PLC程序設計思路,初學者福利

資深工程師分享:PLC程序設計思路,初學者福利

第二部分的內容:根據排列好的數據,如何判斷需要起動那一臺電機。

在啟動電機時,我們需要把每一臺電機運行的時間拿過來與排列好的數據進行比較,看看他是位於我們這個排列好的數據中的的什麼位置。然後根據這個位置來判斷啟動的時候。

設計思路:

在這裡面我們會用到兩個功能,第一個功能時把我們電機運行的時間,按照編號順序放到表格中,例如VW20到VW28分別表示電機1到電機5的運行時間,把它放到表格中,而後把我們排列好的數據,拿過來與表格中的數據進行比較(可以使用查表指令),看看最小的值時位於表格中的哪個位置,根據查表指令所查找的位置來啟動那條電機,比如查找出來的值時3則表示的就是第三臺電機的運行時間最少,可以啟動這第三臺電機,這裡我們需要用到表格指令及間接尋址。

程序:

資深工程師分享:PLC程序設計思路,初學者福利

資深工程師分享:PLC程序設計思路,初學者福利

資深工程師分享:PLC程序設計思路,初學者福利

資深工程師分享:PLC程序設計思路,初學者福利

總結

本程序作為一個框架程序,主要應用到了以下幾個內容,間接尋址的應用,循環指令的應用,帶參數子程序的應用,查表指令的使用,希望讀者看完後,對自己以後設計程序時思路會有所啟發,若有考慮不周之處或更好的方法,望指出,謝謝。


↓↓↓下載可免費觀看西門子系列課程


分享到:


相關文章: