網(wǎng)上有很多求助PLC編程的帖子,很有探討價值,我經(jīng)常幫助他們?nèi)ゾ幊,這不僅是幫助他們解決問題,而且對己也是一種鍛煉與提高,F(xiàn)選出幾個求助帖,都是具有一定難度的編程命題,它可以使我們增強思維,提高編程的技巧和能力。現(xiàn)將這幾個帖子并同我為之編寫的程序一起貼出,愿與大家共享與探討,如有 不對之處,請給于指正,本人深表感謝。
一帖:“我想做一個小程序,每半個小時循環(huán)一次,每次循環(huán)內(nèi)部又要執(zhí)行20次幾乎相同的操作(第一個90秒之內(nèi)Q0.0 輸出5秒,Q0.0輸出延時2秒Q0.1 輸出0.5秒。第二個90秒,輸出點變?yōu)?span lang="EN-US">Q0.2和Q0.3,以此類推)。我想用一個子程序,不想書寫20次子程序調(diào)用,只書寫一次子程序調(diào)用,利用循環(huán) 可以實現(xiàn)不,任何實現(xiàn)?請高手給我指點指點。期待您的指點。”
我的思路:按著樓主要求用S7-200編寫了一個子程序(SBR_1),該子程序運行時間為半小時,在此時間內(nèi)重復(fù)執(zhí)行20次類似的控制動作,不同點就是輸出口依次下移:第一次輸出口為Q0.0、Q0.1,第二次輸出為Q0.2、 Q0.3,第三次輸出為Q0.4、Q0.5……。在主程序中,設(shè)定I0.1為啟動命令按鈕,設(shè)I0.2為停止運行按鈕。只要按一下I0.1啟動,程序?qū)⒆?動執(zhí)行每半小時調(diào)一次SBR_1子程序,重復(fù)調(diào)用,直到按下I0.2停止按鈕,程序才終止運行。
該子程序共占據(jù)輸出口40個,整整是5個輸出通道( QB0、QB1、…QB5)如按正常編程,這20個類似動作由于輸出口不同,需一一調(diào)用,這樣編出的程序太長。經(jīng)過反復(fù)思考,我是這樣編程的:
1、 我利用指針指令,首址指向QB0,每執(zhí)行完一個通道動作后,令指針地址加1,這樣循環(huán)5次,其輸出即可由QB0依次移到QB5。
2、 對 一個輸出通道內(nèi)的傳送地址,是采用“與”、“或”指令進行的,比如第一次輸出,先將QB0清0,將MB2=1,MB3=2。當運行80秒時將QB0與 MB2相或運算,其結(jié)果:Q0.0=1,延時82秒將QB0與MB3相或運算,其結(jié)果:Q0.0=1,Q0.1=1。當運行85秒時將MB2求反送入 MB4,此時MB4=16#FE,再用QB0與MB4相與運算,其結(jié)果:Q0.0=0,Q0.1=1,當運行87秒時將MB3求反送入MB5,此時 MB5=16#FB,再用QB0與MB5相與運算,其結(jié)果:Q0.0=0,Q0.1=0,從而達到在第一個90秒內(nèi)使Q0.0輸出為1且保持5秒后復(fù)位, 使Q0.1滯后Q0.1兩秒輸出為1且保持5秒復(fù)位的控制要求。第二次動作時,先將MW2左移2位,即使MB2=04,MB3=8再重復(fù)上述動作,其結(jié) 果:Q0.2=1,延時5秒復(fù)位,Q0.3滯后二秒輸出為1,保持5秒復(fù)位,從而達到第二次動作時其輸出下移到Q0.2、Q0.3。具體動作控制,請見下 面梯形圖:
主程序:
子程序:SBR_1
該程序經(jīng)上機運行(為縮短運行時間按圖中注解的試驗時改動數(shù)據(jù)運行),動作正確,符合命題要求。
二 帖:“有5個執(zhí)行動作我轉(zhuǎn)換為操作數(shù),姑且定為D10、D20、D30、D40、D50,它們每一個都可能寫入從0 到5的數(shù)值。最后執(zhí)行是從1到5 依次執(zhí)行輸出,是0的不執(zhí)行跳過,不知如何編,請高手指點,謝謝了!”又“……如這一次是按1/2/3/4/5依次動作,下一次也許設(shè)置為按5/3/2 /動作,再下一次就1/5/2/3/。。。。。”、“兩次執(zhí)行的間隔時間可設(shè)定,暫定3秒看設(shè)備運轉(zhuǎn)情況而定”
我的編程構(gòu)思:
一、PLC的硬件設(shè)置及有關(guān)事項說明:選用S7-200PLC編程。
1、其輸入口:
I1.0 為啟動按鈕,
I1.1 為停止動作按鈕。
*** 以下的I0.0 ~ I0.5 六個輸入點是為手動設(shè)置參數(shù)的按鈕地址。是為在沒有上位機或觸摸屏與PLC通訊的條件下,可用這6個按鈕,對5路執(zhí)行機構(gòu)的動作順序號及動作間隔時間進行手動設(shè)置。其各輸入點定義如下:
I0.0 為設(shè)置第1路執(zhí)行機構(gòu)執(zhí)行動作的順序號按鈕
I0.1 為設(shè)置第2 ~ 5路執(zhí)行機構(gòu)執(zhí)行動作的順序號按鈕,設(shè)置值:0~5
I0.2 為設(shè)置第2 ~ 5路執(zhí)行機構(gòu)執(zhí)行動作的順序號左移8位按鈕
I0.3 為復(fù)位按鈕,即將第1~ 第5 路機構(gòu)的順序號清0,其作用是為更改5個機構(gòu)動作的順序號值做清0準備。
I0.4 為相鄰二個機構(gòu)動作時間間隔值的個位數(shù)設(shè)置按鈕,設(shè)置值:0~F(16進制數(shù))
I0.5 將時間設(shè)定值左移4位按鈕
2、其輸出口:
Q0.0 為第1路執(zhí)行機構(gòu)輸出
Q0.1 為第2路執(zhí)行機構(gòu)輸出
Q0.2 為第3路執(zhí)行機構(gòu)輸出
Q0.3 為第4路執(zhí)行機構(gòu)輸出
Q0.4 為第5路執(zhí)行機構(gòu)輸出
3、VB10、VB11、VB12、VB13、VB14分別為第1~第5執(zhí)行機構(gòu)動作順序號設(shè)置區(qū)
為節(jié)省設(shè)置按鈕,將VB11、VB12、VB13、VB14合并為一個雙字存儲器VD11。
4、 VW30 為相鄰二個機構(gòu)動作時間間隔設(shè)置區(qū)?捎冒粹o對其設(shè)置時間。VW30也是第一個執(zhí)行機構(gòu)的動作時間,2倍的VW30(即VW32)是第二個執(zhí)行機構(gòu)的動作 時間,3倍的VW30(即VW34)是第三個執(zhí)行機構(gòu)的動作時間,4倍的VW30(即VW36)是第四個執(zhí)行機構(gòu)的動作時間,5倍的VW30(即 VW38)是第五個執(zhí)行機構(gòu)的動作時間。
5、從按下啟動命令開始,先將計時器(MW2)清0,再用秒脈沖對MW2進行加1計數(shù),當 MW2=VW30時, 第一個執(zhí)行機構(gòu)動作,當MW2=VW32時, 第二個執(zhí)行機構(gòu)動作……直到MW2=VW38時, 第五個執(zhí)行機構(gòu)動作為止。那路執(zhí)行機構(gòu)是第一個、第二個動作…取決它設(shè)定的順序號。
6、設(shè)MB0為第幾個機構(gòu)動作標記區(qū),按啟動按鈕時,將 其清0,每當計時VW30,MB0加1,故MB0等于幾就應(yīng)為第幾個執(zhí)行機構(gòu)執(zhí)行動作,(如:第一次機構(gòu)動作時,MB0=1……第五次機構(gòu)動作 時,MB0=5)。在執(zhí)行動作前,先用MB0與VB10~VB14比較,那路執(zhí)行機構(gòu)的順序號=MB0,那路執(zhí)行機構(gòu)就動作,這樣就可確保動作執(zhí)行的的正 確性。
詳細動作控制請見以下梯形圖:
二、S7-200編程的梯形圖:
該程序是經(jīng)過上機運行及調(diào)試,證明程序是正確的、好用的。
VB10、VD11及VW30可由上位機或觸摸屏設(shè)置,如沒有上位機或觸摸屏,可用幾個按鈕與PLC輸入口I0.0~I0.5相連,用按鈕可對其參數(shù)進行設(shè)置,以下就是用按鈕直接在PLC上設(shè)定參數(shù)的程序。這種用PLC輸入口設(shè)置內(nèi)部參數(shù)的方法對初學(xué)者也是有幫助的。
三帖、這也是網(wǎng)友的求助帖,經(jīng)整理為:
輸入點4個:I0.0、I0.1、I0.2、I0.3; 輸出點2個:Q0.0、Q0.1。
要求:
1、4個輸入點分別有脈沖信號輸入,其四路連續(xù)累計9個輸入脈沖信號的時間間隔 < 1 分鐘時。其輸出Q0.0=1,否則Q0.0=0。
2、4個輸入點分別有脈沖信號輸入,其四路連續(xù)累計15個輸入脈沖信號的時間間隔 < 1 分鐘時。其輸出Q0.1=1,否則Q0.1=0。
編程構(gòu)思:本程序采用二個指針指令,一個首址為VB100,指針為VD80;另一個首址
為VB200。指針為VD84。初始化將VB0、VB1、VW2清0.。用I0.0~I0.3四個輸入信號的
后沿并聯(lián)觸發(fā)M0.0,這樣那路最先出現(xiàn)又最先結(jié)束,將M0.0置1,M0.0=1開始秒脈沖對
VW2加1計時,計時中那路出現(xiàn)輸入信號,其前沿VW2計時值送入VD80與VD84指針所
指的地址中。且判斷輸入脈沖數(shù)(VB0)<=9,如<=9,VB0加1,指針VD80加2。同時判斷
VB1,如VB1<=15,則VB1加1,指針VD84加2。且使M0.1=1。
在M0.1=1掃描周期內(nèi),先判斷VB0=9?如=9,再判斷VB3<=60,如<=60 則使Q0.0=1,
否則使Q0.0=0。同時又判斷VB1=15?如=15,再判斷VB3<=60,如<=60 則使Q0.1=1,
否則使Q0.0=0。
在M0.1=1掃描周期內(nèi),如果VB0=10時,用VW2-VW100=MW4,判斷MW4<60 則
使Q0.0=1,否則使Q0.0=0,再將VW102為首址的連續(xù)9個字的內(nèi)容前移到以VW100為首
址的連續(xù)9個字里。同樣如果VB1=16時,用VW2-VW200=MW6,判斷MW6<60 則使
Q0.1=1,否則使Q0.1=0,再將VW202為首址的連續(xù)9個字的內(nèi)容前移到以VW200為首址的
連續(xù)9個字里。詳見梯形圖:
四帖:網(wǎng)友求助:“S7-300編程實現(xiàn)一個輸入四個輸出順序輸出:就要希望實現(xiàn)第一次按i4.1,輸出m1,第二次輸出m2,第三次輸出m3,第四次輸出m4.如此循環(huán)。一次輸出一個”
回復(fù):我用s7-200編了你所要的梯形圖,上機運行正確無誤,并將此程序翻譯為S7-300,供你參考.。
s7-200梯形圖:
用S7-300的梯形圖:
對程序的解析:這二個程序的編程特點就是巧妙地運用循環(huán)左移、與、或等編程指令編寫的。使程序短小精悍。以S7-200程序為例:當?shù)谝淮伟粹o時由于M1.0=0,故不執(zhí)行第二網(wǎng)絡(luò)指令,只能執(zhí)行第三網(wǎng)絡(luò)指令,即先將MB0置數(shù)為0001_0001,再將M1.0置1,M1.0=1進行與、或運算,將MB0的低4位數(shù)0001送入QB0的低4位,使Q0.0=1,而QB0的高4位不受影響(即仍保持原狀態(tài))。當?shù)诙伟粹o,由于M1.0=1,程序執(zhí)行第二網(wǎng)絡(luò)指令而不再執(zhí)行第三網(wǎng)絡(luò)指令,即使MB0循環(huán)左移一位,即0010——0010,再進行與、或運算,將MB0的低4位數(shù)0010送入QB0的低4位,使Q0.1=1,而QB0的高4位仍不受影響……,故可達到每按一次按鈕,輸出口Q0.0~Q0.3 只有一位輸出,而且是依次循環(huán)輸出的控制目的。
S7-300沒有字節(jié)循環(huán)指令及字節(jié)與或指令,采用雙字循環(huán)移位、字與、字或等指令完成的,故編程顯得不易被看懂,但二者思路是一樣的,大家按我上述說明去分析一定會看懂的。