前幾天有個(gè)學(xué)員咨詢一個(gè)程序設(shè)計(jì)的問題,程序的控制要求如下:需要控制5臺(tái)電機(jī)的運(yùn)行,每臺(tái)電機(jī)運(yùn)行時(shí)需要記錄運(yùn)行時(shí)間,電機(jī)啟動(dòng)運(yùn)行時(shí),根據(jù)記錄的運(yùn)行時(shí)間,從小到大,每個(gè)2s依次啟動(dòng)電機(jī)的運(yùn)行。
我想對(duì)于這個(gè)程序的控制要求來(lái)講,他的難點(diǎn)在于如何對(duì)這些電機(jī)運(yùn)行時(shí)間進(jìn)行排列,排列好了后,如何根據(jù)排列的順序去起動(dòng)電機(jī)的運(yùn)行,從這個(gè)控制要求中我們可以看出,這主要是分為兩個(gè)部分來(lái)完成這個(gè)程序的設(shè)計(jì)的:
第一部分、用于對(duì)電機(jī)的運(yùn)行時(shí)間進(jìn)行從小到大順序的排列
第二部分、根據(jù)排列好的數(shù)據(jù),如何判斷需要起動(dòng)那一臺(tái)電機(jī)
前幾天有個(gè)學(xué)員咨詢一個(gè)程序設(shè)計(jì)的問題,程序的控制要求如下:需要控制5臺(tái)電機(jī)的運(yùn)行,每臺(tái)電機(jī)運(yùn)行時(shí)需要記錄運(yùn)行時(shí)間,電機(jī)啟動(dòng)運(yùn)行時(shí),根據(jù)記錄的運(yùn)行時(shí)間,從小到大,每個(gè)2s依次啟動(dòng)電機(jī)的運(yùn)行。
我想對(duì)于這個(gè)程序的控制要求來(lái)講,他的難點(diǎn)在于如何對(duì)這些電機(jī)運(yùn)行時(shí)間進(jìn)行排列,排列好了后,如何根據(jù)排列的順序去起動(dòng)電機(jī)的運(yùn)行,從這個(gè)控制要求中我們可以看出,這主要是分為兩個(gè)部分來(lái)完成這個(gè)程序的設(shè)計(jì)的:
第一部分、用于對(duì)電機(jī)的運(yùn)行時(shí)間進(jìn)行從小到大順序的排列
第二部分、根據(jù)排列好的數(shù)據(jù),如何判斷需要起動(dòng)那一臺(tái)電機(jī)
這里我們以西門子S7-200SMART系列PLC為例,先說說,如何編寫一個(gè)數(shù)據(jù)排列的帶參數(shù)的子程序。
數(shù)據(jù)排列帶參數(shù)子程序設(shè)計(jì)思路:
西門子S7-200系列的PLC中不像三菱的FX系列PLC具有數(shù)據(jù)排列的指令,因此我們要實(shí)現(xiàn)這個(gè)數(shù)據(jù)的排列功能,必須自己去搭建一個(gè)這樣的功能塊,在搭建這個(gè)功能塊的時(shí)候,會(huì)使用到間接尋址和循環(huán)指令,同時(shí)還需要應(yīng)用到帶參數(shù)的子程序。那么如何編寫一個(gè)數(shù)據(jù)排列的子程序呢?
假設(shè)有5個(gè)數(shù)據(jù)需要把他們的數(shù)據(jù)的大小按照順序從小到大排列,那么我們可以先在這五個(gè)數(shù)中找到最大的數(shù)放在最后面。然后在剩下的四個(gè)數(shù)中找到最大的數(shù)放到倒數(shù)第二個(gè)的位置,接著在剩下的三個(gè)數(shù)中找到最大的值放到倒數(shù)第三的位置,依次下去,這樣當(dāng)全部比較完后,我們的數(shù)據(jù)就按照從小到大的順序排列好了。那么很明顯,我們需要用兩個(gè)循環(huán)指令進(jìn)行嵌套。外層的循環(huán)指令需要循環(huán)4次,而內(nèi)層的循環(huán)指令的循環(huán)次數(shù)是會(huì)變化的,因?yàn)榈谝淮螐?個(gè)數(shù)據(jù)中找出最大值,循環(huán)4次,第二次的時(shí)候從4個(gè)數(shù)據(jù)中找出最大值,循環(huán)3次,依次下去,每次需要改變循環(huán)的次數(shù)。
如何找出最大值呢?我們可以進(jìn)行比較,首先用第二個(gè)數(shù)跟第一個(gè)數(shù)比較,如果第二個(gè)數(shù)比第一個(gè)數(shù)大,那么指針往下移動(dòng)變成第二個(gè)數(shù)跟第三個(gè)數(shù)比較,如果第二個(gè)數(shù)比第三個(gè)數(shù)大,那么對(duì)第二個(gè)數(shù)和第三個(gè)數(shù)進(jìn)行交換,依次下去,當(dāng)比較完成后,最大的數(shù)就放到最后的地址里面去了。
程序設(shè)計(jì):
(1)建立變量表
(2)根據(jù)變量表,編寫數(shù)據(jù)排列子程序
第二部分的內(nèi)容:根據(jù)排列好的數(shù)據(jù),如何判斷需要起動(dòng)那一臺(tái)電機(jī)。
在啟動(dòng)電機(jī)時(shí),我們需要把每一臺(tái)電機(jī)運(yùn)行的時(shí)間拿過來(lái)與排列好的數(shù)據(jù)進(jìn)行比較,看看他是位于我們這個(gè)排列好的數(shù)據(jù)中的的什么位置。然后根據(jù)這個(gè)位置來(lái)判斷啟動(dòng)的時(shí)候。
設(shè)計(jì)思路:
在這里面我們會(huì)用到兩個(gè)功能,第一個(gè)功能時(shí)把我們電機(jī)運(yùn)行的時(shí)間,按照編號(hào)順序放到表格中,例如VW20到VW28分別表示電機(jī)1到電機(jī)5的運(yùn)行時(shí)間,把它放到表格中,而后把我們排列好的數(shù)據(jù),拿過來(lái)與表格中的數(shù)據(jù)進(jìn)行比較(可以使用查表指令),看看最小的值時(shí)位于表格中的哪個(gè)位置,根據(jù)查表指令所查找的位置來(lái)啟動(dòng)那條電機(jī),比如查找出來(lái)的值時(shí)3則表示的就是第三臺(tái)電機(jī)的運(yùn)行時(shí)間最少,可以啟動(dòng)這第三臺(tái)電機(jī),這里我們需要用到表格指令及間接尋址。
程序:
總結(jié)
本程序作為一個(gè)框架程序,主要應(yīng)用到了以下幾個(gè)內(nèi)容,間接尋址的時(shí)候用,循環(huán)指令的應(yīng)用,帶參數(shù)子程序的應(yīng)用,查表指令的使用,希望讀者看完后,對(duì)自己以后設(shè)計(jì)程序時(shí)思路會(huì)有所啟發(fā),若有考慮不周之處或更好的方法,望指出,謝謝。
-
西門子
+關(guān)注
關(guān)注
93文章
2996瀏覽量
115485 -
電機(jī)
+關(guān)注
關(guān)注
142文章
8874瀏覽量
144850
原文標(biāo)題:資深工程師分享:PLC程序設(shè)計(jì)思路,初學(xué)者福利!
文章出處:【微信號(hào):plcfans,微信公眾號(hào):PLC發(fā)燒友】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論