前幾天有個學員咨詢一個程序設計的問題,程序的控制要求如下:需要控制5臺電機的運行,每臺電機運行時需要記錄運行時間,電機啟動運行時,根據記錄的運行時間,從小到大,每個2s依次啟動電機的運行。
我想對于這個程序的控制要求來講,他的難點在于如何對這些電機運行時間進行排列,排列好了后,如何根據排列的順序去起動電機的運行,從這個控制要求中我們可以看出,這主要是分為兩個部分來完成這個程序的設計的:
第一部分、用于對電機的運行時間進行從小到大順序的排列
第二部分、根據排列好的數據,如何判斷需要起動那一臺電機
前幾天有個學員咨詢一個程序設計的問題,程序的控制要求如下:需要控制5臺電機的運行,每臺電機運行時需要記錄運行時間,電機啟動運行時,根據記錄的運行時間,從小到大,每個2s依次啟動電機的運行。
我想對于這個程序的控制要求來講,他的難點在于如何對這些電機運行時間進行排列,排列好了后,如何根據排列的順序去起動電機的運行,從這個控制要求中我們可以看出,這主要是分為兩個部分來完成這個程序的設計的:
第一部分、用于對電機的運行時間進行從小到大順序的排列
第二部分、根據排列好的數據,如何判斷需要起動那一臺電機
這里我們以西門子S7-200SMART系列PLC為例,先說說,如何編寫一個數據排列的帶參數的子程序。
數據排列帶參數子程序設計思路:
西門子S7-200系列的PLC中不像三菱的FX系列PLC具有數據排列的指令,因此我們要實現這個數據的排列功能,必須自己去搭建一個這樣的功能塊,在搭建這個功能塊的時候,會使用到間接尋址和循環指令,同時還需要應用到帶參數的子程序。那么如何編寫一個數據排列的子程序呢?
假設有5個數據需要把他們的數據的大小按照順序從小到大排列,那么我們可以先在這五個數中找到最大的數放在最后面。然后在剩下的四個數中找到最大的數放到倒數第二個的位置,接著在剩下的三個數中找到最大的值放到倒數第三的位置,依次下去,這樣當全部比較完后,我們的數據就按照從小到大的順序排列好了。那么很明顯,我們需要用兩個循環指令進行嵌套。外層的循環指令需要循環4次,而內層的循環指令的循環次數是會變化的,因為第一次從5個數據中找出最大值,循環4次,第二次的時候從4個數據中找出最大值,循環3次,依次下去,每次需要改變循環的次數。
如何找出最大值呢?我們可以進行比較,首先用第二個數跟第一個數比較,如果第二個數比第一個數大,那么指針往下移動變成第二個數跟第三個數比較,如果第二個數比第三個數大,那么對第二個數和第三個數進行交換,依次下去,當比較完成后,最大的數就放到最后的地址里面去了。
程序設計:
(1)建立變量表
(2)根據變量表,編寫數據排列子程序
第二部分的內容:根據排列好的數據,如何判斷需要起動那一臺電機。
在啟動電機時,我們需要把每一臺電機運行的時間拿過來與排列好的數據進行比較,看看他是位于我們這個排列好的數據中的的什么位置。然后根據這個位置來判斷啟動的時候。
設計思路:
在這里面我們會用到兩個功能,第一個功能時把我們電機運行的時間,按照編號順序放到表格中,例如VW20到VW28分別表示電機1到電機5的運行時間,把它放到表格中,而后把我們排列好的數據,拿過來與表格中的數據進行比較(可以使用查表指令),看看最小的值時位于表格中的哪個位置,根據查表指令所查找的位置來啟動那條電機,比如查找出來的值時3則表示的就是第三臺電機的運行時間最少,可以啟動這第三臺電機,這里我們需要用到表格指令及間接尋址。
程序:
總結
本程序作為一個框架程序,主要應用到了以下幾個內容,間接尋址的時候用,循環指令的應用,帶參數子程序的應用,查表指令的使用,希望讀者看完后,對自己以后設計程序時思路會有所啟發,若有考慮不周之處或更好的方法,望指出,謝謝。
-
西門子
+關注
關注
95文章
3066瀏覽量
116511 -
電機
+關注
關注
142文章
9095瀏覽量
146485
原文標題:資深工程師分享:PLC程序設計思路,初學者福利!
文章出處:【微信號:plcfans,微信公眾號:PLC發燒友】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
程序運行時間計時小程序
labview中計算程序的運行時間
電機參數檢測程序的運行時間有多長?
freertos的任務運行時間怎么設置
如何用SysTick實現測量程序運行時間
![如何用SysTick實現測量<b class='flag-5'>程序</b><b class='flag-5'>運行時間</b>](https://file.elecfans.com/web1/M00/50/62/pIYBAFrykXeAQcU0AAMDRBP-0o0211.png)
變頻器帶動電機運行時發抖是怎么回事?
![變頻器帶動<b class='flag-5'>電機運行時</b>發抖是怎么回事?](https://file.elecfans.com/web2/M00/1A/0E/pYYBAGF4-lOAaXJ9AABBEXgCq2s794.jpg)
西門子SCL編程50臺電機運行時間累計方法
![西門子SCL編程50臺<b class='flag-5'>電機運行時間</b>累計方法](https://file1.elecfans.com/web2/M00/B3/14/wKgZomVj-KGAHw4uAAAdcQDx_Pk799.png)
評論