工控網(wǎng)首頁
>

應(yīng)用設(shè)計(jì)

>

解析用S7-200編寫的幾個(gè)程序的構(gòu)思與技巧

解析用S7-200編寫的幾個(gè)程序的構(gòu)思與技巧

2012/7/24 17:49:39

           解析用S7-200編寫的幾個(gè)程序的構(gòu)思與技巧  

    本文展示的幾個(gè)編程實(shí)例,都是從網(wǎng)上看到的求助帖,按其命題要求編程都有一定難度和可探討性。實(shí)為是提高我們編程構(gòu)思與鍛煉編程能力的好命題。本人對(duì)此作了編程,經(jīng)上機(jī)運(yùn)行,程序運(yùn)行正確符合命題要求。本文對(duì)編寫的程序作以解析,將其編程構(gòu)思與技巧作以介紹,現(xiàn)展示給大家,起個(gè)拋磚引玉的作用。清大家進(jìn)一步深入探討,廣開思路,巧妙的使用編程指令,編出更加精煉短小的程序,共同鍛煉與提高我們的編程水平和能力。

一、          請(qǐng)教:“PLC輸入點(diǎn)任意一點(diǎn)變化均觸發(fā)一次,用什么指令比較精簡  

當(dāng)輸入點(diǎn) 有信號(hào)輸入時(shí),是否能做到依次輸出且依次關(guān)閉已動(dòng)作了輸出點(diǎn)。如:I0.001,其輸出狀態(tài)為輸出Q0.0=1。接著使I1.201,其輸出狀態(tài)為輸出Q1.2=1Q0.0=0,再使I0.401,其輸出狀態(tài)為Q0.4=1Q1.2=0 ……

       編程構(gòu)思:對(duì)此命題要求有二種編程方案:

1)、如果PLC16個(gè)輸入點(diǎn)的輸入信號(hào)皆為單脈沖,或外接不自鎖式的點(diǎn)動(dòng)按鈕時(shí),在未有輸入信號(hào)或未按按鈕時(shí),PLC16個(gè)輸入點(diǎn)皆=0。在這種條件下,最精簡的編程為:用比較與傳遞指令就可完成。見下梯形圖:

    

編程說明:以PLC16輸入點(diǎn)皆外接不自鎖式的點(diǎn)動(dòng)按鈕為例:當(dāng)為未按鈕時(shí),PLC16個(gè)輸入點(diǎn)皆=0,即:IW0=0,故網(wǎng)絡(luò)1不執(zhí)行MOV_W指令動(dòng)作。當(dāng)PLC輸入點(diǎn)有任意一點(diǎn)按下按鈕,都會(huì)使IW0<>0,使網(wǎng)絡(luò)1執(zhí)行MOV_W指令動(dòng)作:將IW0的狀態(tài)傳送給QW0,

     如:按下I0.0的按鈕,使I0.00變?yōu)?/span>1,即 IW00,使MOV_W指令使能,將IW0傳送給QW0,使對(duì)應(yīng)輸出Q0.0=1。I0.0復(fù)位(即I0.0=0)由于IW0=0,不滿足IW0<>0比較條件,MOV_W不使能,故輸出仍保持Q0.0=1的輸出狀態(tài)。如按下I0.7的按鈕,使I0.7=1,執(zhí)行MOV_W傳送,使對(duì)應(yīng)輸出Q0.7=1Q0.0=0。I0.7復(fù)位(I0.7=0)仍保持Q0.7=1不變。再輸入I1.1=1,對(duì)應(yīng)Q1.1=1,而Q0.7=0。。。。

2)、如果PLC16輸入點(diǎn)的輸入信號(hào)為既有單脈沖又有電平信號(hào),或外接按鈕為自鎖式或不自鎖式按鈕都可用時(shí)的編程:

 編程思考:這種要求編程顯然比(1)要難的多,我們可以這樣處理,以按鈕輸入為例:將未按按鈕前的PLC的輸出狀態(tài)先存入一字存儲(chǔ)器MW10里,但某一按鈕按下,其輸入點(diǎn)由01時(shí),立刻用此時(shí)的輸入端的各點(diǎn)狀態(tài)與存儲(chǔ)器MW10對(duì)應(yīng)的各點(diǎn)進(jìn)行比較判斷:如果二者的狀態(tài)相同(或皆為0或皆為1),說明此點(diǎn)不是本次的信號(hào)輸入點(diǎn),可令其對(duì)應(yīng)輸出=0。只有二者不同(輸入=1,而輸出=0)時(shí)才是本次的信號(hào)輸入點(diǎn),令其輸出=1。按這種思路編程,即可實(shí)現(xiàn)本命題的控制要求。請(qǐng)見梯形圖:

       圖一、用求反、與、或指令編寫的梯形圖

 

編程說明:圖一中的MW2IW0的反碼,MW4MW10的反碼,當(dāng)IW0<> MW10時(shí),說明此時(shí)輸入端按鈕有變化:如果IW0<MW10,說明輸入按鈕有由按下變抬起的,故不執(zhí)行“與”“或”等運(yùn)算,即輸出狀態(tài)保持不變,僅將IW0傳送給MW10。如果IW0> MW10,說明此時(shí)輸入側(cè)有信號(hào)輸入(既有按鈕按下),此時(shí)的IW0各位的值應(yīng)≥MW10對(duì)應(yīng)的各位的值,即:如IW0某一位的值=0時(shí),MW10對(duì)應(yīng)的位的值一定=0 而不可能=1,如IW0某一位的值=1時(shí),MW10對(duì)應(yīng)的位的值可能=0也可能=1。

MW2MW10進(jìn)行“與”運(yùn)算,“與”的結(jié)果送入MW6。二者狀態(tài)不等其“與”的結(jié)果=0,二者相等則“與”的結(jié)果=1。由于MW2IW0的反碼,故MW2的某位=1時(shí)(即未按鈕的輸入點(diǎn)),其MW10對(duì)應(yīng)位的值一定=0,這樣“與“的結(jié)果,使MW6對(duì)應(yīng)位的值=0,而MW2的某位=0時(shí),其“與“的結(jié)果使MW6對(duì)應(yīng)位的值=0.

MW4IW0進(jìn)行“與”運(yùn)算,“與”的結(jié)果送入MW8。如輸入=0,“與”的結(jié)果=0。如輸入=1時(shí),其對(duì)應(yīng)的輸出=1(即MW4對(duì)應(yīng)點(diǎn)=0)與的結(jié)果=0,如其對(duì)應(yīng)的輸出=0(即MW4對(duì)應(yīng)點(diǎn)=1)與的結(jié)果=1。

再將MW6MW8相“或”運(yùn)算,其結(jié)果送入QW0,即為最后輸出狀態(tài)。

對(duì)上面的運(yùn)算處理仔細(xì)分析整理,就會(huì)發(fā)現(xiàn)實(shí)際上是執(zhí)行這樣的運(yùn)算:

           

     顯然這是異或的運(yùn)算形式,而S7-200有現(xiàn)成的異或指令,故上面的程序可以用異或指令來完成,從而可大大的精簡程序。見下梯形圖:

   

     圖二、用異或指令編寫的梯形圖   

 

舉例說明:

IW0狀態(tài)=0000_0000_0110_0011,現(xiàn)按下一按鈕,使I0.3=1,此時(shí)IW0=0000_0000_0110_1011MW10=0000_0000_0110_0011,由于IW0MW10IW0>MW10,故IW0MW10進(jìn)行異或運(yùn)算,由于此時(shí)IW0MW10只有第3位的內(nèi)容不等(I0.3=0,M10.3=1),其他各個(gè)對(duì)應(yīng)位相同,故異或的結(jié)果使QW0=8,即 Q0.3=1。隨后將現(xiàn)在的IW0=0000_0000_0110_1011的值 送入給MW10。

如該按鈕又抬起,使IW0=0000_0000_0110_0011,此時(shí)IW0MW10的值又不相等(I0.3=0、MW10.3=1),但IW0<MW10,故Q0.3=1QW0輸出不變。但IW0值送入MW10(0000_0000_0110_0011)。

如此時(shí)將I0.0的按鈕抬起(I0.0=0),IW0=0000_0000_0110_0010,此時(shí)IW0MW10,且IW0<MW10,故QW0輸出不變。但IW0值送入MW10(0000_0000_0110_0010)。

當(dāng)輸入按鈕有幾個(gè)以處于按下(即接通狀態(tài)),時(shí),如要抬起任一按下的按鈕,其輸出都不會(huì)發(fā)生變化,如現(xiàn)輸入狀態(tài)為:IW0=0000_0000_0110_1011, MW10= 0000_0000_0110_1011。如抬起I1.5,使IW0=0000_0000_010 0_1011,此時(shí)IW0 < MW10,故不會(huì)進(jìn)行異或運(yùn)算,即輸出保持不變,只是IW0 送入 MW10,使MW10=0000_0000_010 0_1011。

可見,圖二的編程由于巧妙地運(yùn)用異或指令和比較指令,不僅簡化編程(見圖一),而且對(duì)輸入口狀態(tài)無條件限制,使之可適用與各類按鈕。從中可以看出,對(duì)同一命題,只要開闊思路,深入分析探討,就會(huì)靈活巧妙的使用編程指令,使編程更加精煉短小。

     二、編程要求:5個(gè)按鈕和5個(gè)信號(hào)燈,編號(hào)1#5#,每次只按下一個(gè)按鈕,按的次序是隨意的且沒有時(shí)間限制,每按下一個(gè)按鈕輸出就亮一個(gè)對(duì)應(yīng)的信號(hào)燈,持續(xù)10秒后自動(dòng)熄滅,但是同一時(shí)刻只允許亮一個(gè)燈,即前燈不滅后燈不亮,并且亮燈的次序嚴(yán)格按照按鈕按下的次序,例如按鈕是2#——1#——5#——3#——4#,則亮燈也按照2#——1#——5#——3#——4#,不能亂。
      
 編程構(gòu)思:這個(gè)編程命題還是頗有難度的,我共編寫了2個(gè)程序,第一個(gè)程序?yàn)橥瓿纱斯δ芫帉懥硕€(gè)功能塊子程序,調(diào)用二個(gè)指針指令,且多次調(diào)用子程序,多次 選用各種比較指令。雖然上機(jī)運(yùn)行好使,但程序編的很長,不易被人看懂。第二個(gè)程序,由于選用填表指令與先入先出指令及比較指令進(jìn)行巧妙地配合,使編寫的程序長度大為縮短,經(jīng)上機(jī)運(yùn)行,效果很好,現(xiàn)展示出來與大家共享:

三、求助帖原文:有一自動(dòng)老化線,線長三百米,線速18/,線進(jìn)口有一個(gè)產(chǎn)品進(jìn)入老化線檢測開關(guān),出口有一個(gè)阻擋器和一個(gè)產(chǎn)品出檢測開關(guān).老化線體上可容納920臺(tái)產(chǎn)品,產(chǎn)品在進(jìn)入老化線上的時(shí)間間隔不等,當(dāng)產(chǎn)品老化時(shí)間等于四小時(shí)就可出產(chǎn)品,產(chǎn)品是一邊進(jìn)一邊出,流水作業(yè).但要求每一臺(tái)產(chǎn)品在老化線上老化的時(shí)間都必須是四個(gè)小時(shí)或大于四小時(shí).望高手們給指點(diǎn)一下怎么編這個(gè)程序?

我的編程思維與編程方案:

1、對(duì)題目的分析:老化線的線長三百米,線速18/=0.3/秒,產(chǎn)品從進(jìn)口到出口運(yùn)行時(shí)間=300÷0.3=1000=16.7<<4小時(shí),故需在出口處安放一阻擋器。老化線體上可容納920臺(tái)產(chǎn)品,則知產(chǎn)品寬度為300÷920=0.326。如產(chǎn)品彼此以X秒的間隔進(jìn)入老化線,進(jìn)入920個(gè)產(chǎn)品的時(shí)間=4小時(shí),則X=4×3600÷920=15.56秒。顯然如果產(chǎn)品傳送時(shí)彼此相互間隔時(shí)間<15秒,產(chǎn)品進(jìn)入老化線運(yùn)行中的個(gè)數(shù)=920個(gè)時(shí)所用時(shí)間<4小時(shí),為保證老化時(shí)間,顯然需要停車等待。

2、編程的設(shè)計(jì)構(gòu)思:

如果以第一個(gè)產(chǎn)品進(jìn)入老化線的時(shí)刻起使一計(jì)時(shí)器從0開始計(jì)時(shí),第二個(gè)產(chǎn)品進(jìn)入老化線立即讀取計(jì)時(shí)器的計(jì)時(shí)值且存入數(shù)據(jù)區(qū)的首址,第三個(gè)產(chǎn)品進(jìn)入老化線立即讀取計(jì)時(shí)器的計(jì)時(shí)值且存入數(shù)據(jù)區(qū)的首址下面的第二個(gè)地址……,以此規(guī)律不斷的將進(jìn)入老化線產(chǎn)品的時(shí)間存入數(shù)據(jù)區(qū)。

當(dāng)老化時(shí)間≥4小時(shí)時(shí)阻擋器移開,第一個(gè)產(chǎn)品走出老化線,同時(shí)將數(shù)據(jù)區(qū)首址數(shù)據(jù)取出,再用計(jì)時(shí)器的計(jì)時(shí)值減去這取出的數(shù)據(jù),其差值即為第二個(gè)產(chǎn)品的老花時(shí)間,將其送回計(jì)時(shí)器,繼續(xù)計(jì)時(shí),第一產(chǎn)品走出老化線阻擋器回原位。當(dāng)計(jì)時(shí)器的計(jì)時(shí)值又等于4小時(shí)時(shí),再移開阻擋器,使第二個(gè)產(chǎn)品走出老化線,同時(shí)將數(shù)據(jù)區(qū)第二個(gè)數(shù)據(jù)取出,再用計(jì)時(shí)器的計(jì)時(shí)值減去這取出的數(shù)據(jù),其差值即為第三個(gè)產(chǎn)品的老花時(shí)間,將其送回計(jì)時(shí)器,繼續(xù)計(jì)時(shí)……,不斷的重復(fù)取出的數(shù)據(jù),再用計(jì)時(shí)器的計(jì)時(shí)值減去此取出值,將其送回計(jì)時(shí)器,繼續(xù)計(jì)時(shí),就可實(shí)現(xiàn)本求助帖的控制要求。

3、編程的設(shè)計(jì)方案解析:本文對(duì)此題目做了二種設(shè)計(jì)方案。

第一種方案:是按上面所述的編程設(shè)計(jì)構(gòu)思,用二組指針指令分別對(duì)產(chǎn)品進(jìn)入老化線的時(shí)間存入數(shù)據(jù)區(qū),對(duì)產(chǎn)品走出老化線時(shí),從數(shù)據(jù)區(qū)中取出對(duì)應(yīng)數(shù)據(jù)進(jìn)行減法運(yùn)算。這種方案要占據(jù)大量的數(shù)據(jù)區(qū):老化線能容納920個(gè)產(chǎn)品,即要占據(jù)920個(gè)字存儲(chǔ)器,而且產(chǎn)品是不斷的進(jìn)入老化線,使存儲(chǔ)數(shù)據(jù)不斷的增加。而PLC的數(shù)據(jù)塊的容量是有限度的,這樣就會(huì)出現(xiàn)數(shù)據(jù)塊計(jì)滿的情況:使后續(xù)的提取計(jì)時(shí)器的時(shí)間值無法再存入數(shù)據(jù)區(qū)而丟失,使這種判斷控制失敗。如何解決這個(gè)問題呢?本設(shè)計(jì)是這樣解決的:設(shè)數(shù)據(jù)區(qū)為內(nèi)含1000個(gè)字,運(yùn)行時(shí)存儲(chǔ)的數(shù)據(jù)從首址依次存入數(shù)據(jù)區(qū),每存入一組數(shù)據(jù),存數(shù)指針地址加2。讀取數(shù)據(jù)時(shí)也是從數(shù)據(jù)首址開始,每讀取一次數(shù)據(jù),讀取指針地址加2。運(yùn)行中程序時(shí)時(shí)判斷指針地址是否已到第1000個(gè)數(shù)據(jù)的地址,如已到,再存數(shù)或讀數(shù)地址又回到數(shù)據(jù)區(qū)的首地址,這樣可重復(fù)使用這1000個(gè)字存儲(chǔ)器,即可巧妙地解決數(shù)據(jù)區(qū)計(jì)滿的難題。請(qǐng)見第一方案梯形圖:

第二種編程方案:是巧妙地使用填表指令(ATT)與先入先出指令(FIFO)來實(shí)現(xiàn)的。如產(chǎn)品之間以1分以內(nèi)的間隔進(jìn)入老化線,則進(jìn)入10個(gè)產(chǎn)品所需時(shí)間≤10分鐘,以第一次進(jìn)入的第10個(gè)產(chǎn)品進(jìn)入的時(shí)間為計(jì)時(shí)起點(diǎn),用填表指令將每進(jìn)入10個(gè)產(chǎn)品的最后時(shí)間存入表內(nèi),則進(jìn)入920個(gè)產(chǎn)品,共存入表里的數(shù)據(jù)92個(gè),如果進(jìn)入920 個(gè)產(chǎn)品的時(shí)間<4小時(shí),則老化線停車。用計(jì)時(shí)器的值與4小時(shí)時(shí)時(shí)比較,如相等,說明老化線的頭10個(gè)產(chǎn)品老化時(shí)間≥4小時(shí)(即4~4小時(shí)另10 分鐘),打開阻擋器,且啟動(dòng)老化線運(yùn)行。出口處的檢測開關(guān),測出10個(gè)產(chǎn)品,令阻擋器關(guān)門,同時(shí)用先入先出指令(FIFO)將表內(nèi)的第一組數(shù)據(jù)送給MW6,再用計(jì)時(shí)器值VW10減去MW6,其差即為下一組產(chǎn)品的老化時(shí)間值。再將差值送回計(jì)時(shí)器VW10。當(dāng)入口處的檢測開關(guān),測出10個(gè)產(chǎn)品,老化線內(nèi)產(chǎn)品數(shù)又=920,如此時(shí)的計(jì)時(shí)時(shí)間<4小時(shí),令老化線停車。計(jì)時(shí)器的計(jì)時(shí)值時(shí)時(shí)與4小時(shí)比較,如等于,說明第二組的10個(gè)產(chǎn)品老化時(shí)間≥4小時(shí),打開阻擋器,且啟動(dòng)老化線運(yùn)行……反復(fù)重復(fù)上述動(dòng)作。當(dāng)老化工作結(jié)束時(shí),最后一組產(chǎn)品的個(gè)數(shù)有可能<10,如用上述操作,由于MB810,故最后一次的計(jì)時(shí)時(shí)間不能存入表中,就會(huì)使最后一組產(chǎn)品留在老化線內(nèi)而無法傳出。為此增加判斷產(chǎn)品間隔時(shí)間計(jì)時(shí)器MB11,如MB11>4分,則視為工作結(jié)束(既無后續(xù)產(chǎn)品到來),把此時(shí)計(jì)時(shí)時(shí)間存入表內(nèi),當(dāng)MB10=1時(shí)老化線內(nèi)只有最后一組產(chǎn)品,由于其產(chǎn)品數(shù)<10且具體數(shù)未知,但考慮出口處的產(chǎn)品間距很小,彼此間隔時(shí)間<1秒,故用I0.2驅(qū)動(dòng)斷電延時(shí)定時(shí)器(TOF),定時(shí)為5秒,從第一個(gè)產(chǎn)品出口使I0.2=1,同時(shí)使T101=1起,連續(xù)出N個(gè)產(chǎn)品,由于N個(gè)I0.2=1脈沖彼此間隔<5秒,故使T101始終保持=1,第N個(gè)脈沖結(jié)束后因再無脈沖到來,延時(shí)5秒后T101=0,T1011變?yōu)?/span>0的后沿使Q0.1=0,即阻擋器關(guān)。請(qǐng)見第二種方案的梯形圖:

    

4、方案比較:

第一種編程方案優(yōu)點(diǎn)為:對(duì)產(chǎn)品之間間隔時(shí)間無限制,由于是一個(gè)一個(gè)的對(duì)產(chǎn)品老化時(shí)間進(jìn)行判斷。故可確保每個(gè)產(chǎn)品的老化時(shí)間值皆= 4小時(shí),即老花時(shí)間精確。它的編程的技巧為用二個(gè)指針指令。一個(gè)為將每個(gè)產(chǎn)品進(jìn)入老化線的時(shí)間依次存入數(shù)據(jù)區(qū),另一個(gè)為在產(chǎn)品走出老化線,再從數(shù)據(jù)區(qū)將其對(duì)應(yīng)的下一個(gè)產(chǎn)品的入線時(shí)間提出來,用計(jì)時(shí)器值減去該提出值,其差即為下一產(chǎn)品的老花時(shí)間。指針指令所用數(shù)據(jù)區(qū)可存儲(chǔ)數(shù)據(jù)1000個(gè)(>920),當(dāng)所存數(shù)據(jù)=1000個(gè)時(shí),指針又從新指向數(shù)據(jù)區(qū)的首址,其目的可長時(shí)間循環(huán)使用,不會(huì)造成因數(shù)據(jù)區(qū)滿而不能存入數(shù)據(jù)。該方案的缺點(diǎn)為:如果產(chǎn)品彼此間間隔時(shí)間短時(shí),老化線停車頻繁,幾乎每出一個(gè)產(chǎn)品就要停車一次,這頻繁啟動(dòng)對(duì)電機(jī)是不利的。

第二種編程方案優(yōu)點(diǎn)為:由于采用10個(gè)產(chǎn)品為一組,從而減少老化線的停車次數(shù)。由于10個(gè)產(chǎn)品為一組,使對(duì)920個(gè)產(chǎn)品的提取的數(shù)據(jù)由920個(gè)變?yōu)?/span>92個(gè)數(shù)據(jù)存入數(shù)據(jù)區(qū),PLC的填表指令最多填寫數(shù)據(jù)為100,故使利用填表指令(ATT)和先入先出指令(FIFO)來編程變?yōu)榭赡堋T摲桨傅木幊碳记删褪乔擅畹乩锰畋碇噶睿?/span>ATT)和先入先出指令(FIFO)的功能特點(diǎn)代替第一方案的用2個(gè)指針指令去完成存入數(shù)據(jù)與提取數(shù)據(jù)。該方案缺點(diǎn):對(duì)產(chǎn)品彼此間間隔時(shí)間有限制,即它只實(shí)用于間隔時(shí)間小于1分鐘的條件下使用。

    本文到此結(jié)束,如有不妥之處請(qǐng)給于指正。謝謝!

投訴建議

提交

查看更多評(píng)論
其他資訊

查看更多

對(duì)多輸出點(diǎn)PLC設(shè)計(jì)與編程的實(shí)例展示與解析

簡短精煉的3例編程展示及編程思路與技巧解析

如何實(shí)現(xiàn)用PLC采集高于其高速計(jì)數(shù)器最高計(jì)數(shù)頻率的脈沖數(shù)據(jù)的探討

超聲波時(shí)差法測量流量的公式推導(dǎo)及檢測方法的探討

PLC增擴(kuò)輸出口的硬件電路圖及與之配合使用的PLC梯形圖的構(gòu)思與解析