工控網(wǎng)首頁
>

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

>

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

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

2013/3/21 21:52:45

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

   對于同一個命題編程,不同人編出不同的程序,有的編出的程序簡短精煉,一目了然,有的編出的程序很長很亂,不易讀懂。之所以這樣就是由于編程者的編程思路不同,對PLC的編程指令的理解掌握不一樣所致。要想編出好的簡短精煉的程序,編程者不僅要在指令上狠下功夫,做到不僅要深入理解各種指令的內(nèi)涵,更要學(xué)會靈活巧妙的運用它。而且要擴大知識面,使你思路開闊,利于編程。

    下面例舉3個編程實例,供大家分析參考:

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

如:當(dāng)輸入點部分有信號時,是否能做到依次輸出且依次關(guān)閉已動作了的。假設(shè)輸入點IB0~IB1任意一點先變化,則先變化的對應(yīng)輸出點QB0~QB1動作。如:I0.0—>ON接著I1.3->ON,再接著I0.4->ON......依次輸出Q0.0=1Q1.3=1(Q0.0=0),Q0.4=1Q0.0=0,Q1.3=0)……

    解答:按題意要求,用S7-200編寫二段程序供參考:

   1、不保持輸入信號狀態(tài)(即輸入為不自鎖的按鈕,即按下后就抬起)的編程:

     編程解析:本程序只用一個網(wǎng)絡(luò)語句編程即可實現(xiàn)。編程共用3個指令,這3個指令缺一不可:

1、用比較指令(IW0<>0),由于輸入側(cè)的16個開關(guān)皆為不自鎖按鈕開關(guān),未按鈕時其對應(yīng)的16個輸入點輸入狀態(tài)皆=0,即IW0=0。只有有按鈕按下時,其IW0<>0。

2、前沿指令(P)的使用,也是不可缺少的,它執(zhí)行將IW0傳遞給QW0,確保無輸入時其輸出狀態(tài)不變:只有輸入轉(zhuǎn)態(tài)變化瞬間,其前沿將IW0的輸入狀態(tài)傳送給輸出口QW0,以確保當(dāng)該輸入點復(fù)位時仍能保持原輸出狀態(tài)不變(即按鈕抬起的后沿不起傳遞作用)。 

3、用傳遞指令MOVW的使用:它可將輸入點I0.0~I1.7的狀態(tài)傳送給輸出口Q0.0~Q1.7,可將輸入口按下點的信息傳遞給輸出口的對應(yīng)輸出點。

     如:I0.0=1,對應(yīng)輸出Q0.0=1,I0.0復(fù)位(I0.0=0)仍保持Q0.0=1。如I0.7=1,對應(yīng)輸出Q0.7=1、Q0.0=0.,I0.7復(fù)位(I0.7=0)仍保持Q0.7=1,再輸入I1.1=1,對應(yīng)Q1.1=1,而Q0.7=0。。。。

    但這種編程,對輸入口的輸入狀態(tài)有要求:按鈕前IW0=0,故只適應(yīng)不自鎖按鈕(按完后觸點斷開)。

   2、自鎖與不自鎖的按鈕都可用的編程:

這種情況對編程帶來難度,如按一般思路編程,編出的程序一定較長,但用異或指令編程就會使編出的程序簡短精練,見下圖:

編程思路:選用一字存儲器MW10,使其保存未按鈕前的IW0的輸入狀態(tài),即未按鈕時其MW10=IW0。當(dāng)輸入側(cè)有按鈕按下時,必然使IW0<>MW10,且IW0 > MW10,此時除按鈕位=1,其MW10與之對應(yīng)位=0外,IW0MW10其它各個對應(yīng)位的狀態(tài)都是一樣的(或=0=1),如能從此狀態(tài)中將按下按鈕位檢出,且使其對應(yīng)輸出位=1,就可實現(xiàn)本題目的控制要求。S7-200有字異或指令,該指令的功能是可將參與異或運算的二個字變量,將其狀態(tài)相同的對應(yīng)位變量運算結(jié)果=0,而狀態(tài)不同的對應(yīng)位變量運算結(jié)果=1,這正好符合本題目的控制要求,故選用字異或指令編程。

動作原理:當(dāng)開機時,由于未按按鈕,其IW0=0MW10=0,當(dāng)按下某一按鈕,其IW0將不等于MW10且大于MW10,使I W0MW10進行異或運算,運算結(jié)果送入QW0(此時QW0的輸出只有剛剛按下的位信號=1,其它位都等于0)。隨后再將IW0送入MW10,以保存IW0的現(xiàn)有狀態(tài),以備下次按鍵與IW0比較,即MW10為按鈕按下時的輸入狀態(tài)。如此時將按鈕抬起,其IW0不等于MW10,但IW0小于MW10,故不執(zhí)行異或指令,即QW0仍保持原輸出狀態(tài)。而IW0狀態(tài)仍傳遞給MW10。 如此時按下另一按鈕,其IW0不等于MW10,而IW0大于MW10,故執(zhí)行異或指令,運算結(jié)果送入QW0(此時QW0的輸出只有剛剛按下的位信號=1,其它位都等于0)。隨后IW0狀態(tài)又傳遞給MW10。例如:

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

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

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

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

可見,巧妙地運用異或指令和比較指令,不僅簡化編程,而且對輸入口狀態(tài)無條件限制,使之可適用與各類按鈕。

二、請編出這樣的一段程序:一個按鈕控制4個燈泡,要求每按一次按鈕,其4個燈泡總是只有一個燈亮,其它3個不亮。其哪個燈亮是隨機的,無規(guī)律的。如何編程?

     按此命題編寫如下程序:

     編程思路與技巧解析:該程序只用2個網(wǎng)絡(luò)語句就可實現(xiàn)本命題的控制要求,其編程思路是:開機先將MB116#11,即0001_0001,如對MB1進行多次循環(huán)左移,其低4位總是只有一位=1,其它3位皆=0。2、按下按鈕,使I0.0=1,由于是手按按鈕,其每次按下的時間間隔很難保持一樣,而按下時間又>>PLC循環(huán)掃描周期,即在按鈕按下時間里,MB1將循環(huán)左移多次,由于按鈕按下時間是隨意的,使MB1循環(huán)左移的次數(shù)也是多變的,故使當(dāng)按鈕抬起時,其MB1的低4位的=1位時隨機的不可確定的。用它傳遞給QB0,使QB0的低4位只有一位輸出=1,其它3=0,而且=1的位是不確定的,即Q0.0~Q0.3都有=1的可能,其幾率是相等的。

    編程技巧:本程序編程技巧見網(wǎng)絡(luò)2:用I0.0=1使MB1進行循環(huán)左移,由于I0.0=1的時間不確定,使MB1循環(huán)左移的次數(shù)為不確定數(shù),即MB1的低4=1的位是可變的,不確定的。當(dāng)按鈕抬起時,其后沿將MB1的低4位傳遞給QB0達到控制目的。

三、有5個按鈕和5個信號燈,編號1#5#,每次只按下一個按鈕,按的次序是隨意的且沒有時間限制,每按下一個按鈕輸出就亮一個對應(yīng)的信號燈,持續(xù)10秒后自動熄滅,但是同一時刻只允許亮一個燈,即前燈不滅后燈不亮,并且亮燈的次序嚴(yán)格按照按鈕按下的次序,例如按鈕是2#——1#——5#——3#——4#,則亮燈也按照2#——1#——5#——3#——4#,不能亂。

本命題如用一般指令編程是有一定難度的,而且編出的程序很長又不易讀懂,如用填表指令與FIFO指令配合編程就會使程序簡短而精煉,見下梯形圖:

     程序解析:網(wǎng)絡(luò)1為填表指令設(shè)置:即VW100為表地址,容許填表數(shù)據(jù)數(shù)=10,即容許最多填寫10組數(shù)據(jù),即容許間隔小于10秒連續(xù)按不同按鈕10下,使之對應(yīng)用的燈泡按按鈕的順序依次各亮10秒,這樣就有重復(fù)使用同一個燈泡的可能。如連續(xù)按按鈕:1、3、2、42、3,則輸出為Q0.0、Q0.2、Q0.1、Q0.3、Q0.1Q0.2各燈泡依次個亮10秒。

    網(wǎng)絡(luò)2~網(wǎng)絡(luò)6分別為按鈕1~按鈕5按下時的編程,這5路編程是一樣的,以網(wǎng)絡(luò)1為例:當(dāng)按下按鈕1,使I0.0=1,如此時M0.0=05路輸出皆=0),其前沿將其輸出Q0.01(燈亮),如此時M0.0=1說明5路中有一路輸出=1,其前沿將其輸出Q0.0的地址(1)填入表內(nèi)。以備當(dāng)輸出=1的燈由亮10秒后熄滅時,通過FIFO指令將其彈出,使彈出的地址燈泡點亮。如果連續(xù)按N個按鈕,其間距<10秒,則第一個按下的燈亮外,剩下的N-1個燈的輸出地址依次填入表中,當(dāng)?shù)?/span>1個燈由亮變滅時,由于表的實存數(shù)據(jù)數(shù)≠0,則FIFO指令將最先填入的輸出地址彈出,通過異或運算使第2個按下按鈕對應(yīng)的輸出燈亮(見網(wǎng)絡(luò)10~11)。

網(wǎng)絡(luò)7~網(wǎng)絡(luò)85路輸出皆為0時,M0.0=0,只要有一路輸出由01,其前沿都會將M0.0=1,而M0.0=1使T101得電延時,延時時間為10秒。

網(wǎng)絡(luò)10~網(wǎng)絡(luò)11:當(dāng)T101延時時間到,T10101,使M0.0=0、使Q0.0~Q0.4=0,再判斷VW102(表實際存數(shù)據(jù)數(shù)):如VW1020,說明表內(nèi)仍存有數(shù)據(jù),執(zhí)行FIFO指令,將表內(nèi)最前數(shù)據(jù)彈出,送入MW1(實際為MB2),再通過異或運算送到輸出口使對應(yīng)輸出燈亮。如VW102=0,說明表內(nèi)已無數(shù)據(jù),不執(zhí)行FIFO指令。

網(wǎng)絡(luò)9:是將M0.1=1時執(zhí)行將M0.1傳遞給M0.2,此條指令看似有點多余,但實際上是必要的,這條指令的使用也是本程序編程技巧之一,它解決爭態(tài)問題:

如不用它直接用M0.1去代替網(wǎng)絡(luò)11M0.2,其程序?qū)⒉荒苷_\行,即T101延時時間到不會使M0.0斷開,即T101仍處于得電延時狀態(tài),這樣就不會執(zhí)行FIFO指令,使程序總處于一個燈泡長亮的狀態(tài)不變。

再有這條指令與安放位置有關(guān),必須將它放在使M0.101的指令前面才好用(即放在網(wǎng)絡(luò)10的前面),其原因:當(dāng)程序使M0.1=1時,M0.2=0,故不執(zhí)行異或運算,即不會使輸出由亮燈的可能,故下一個掃描周期不會使M0.01,使T101斷電。而此時掃描到網(wǎng)絡(luò)9,由于M0.1=1M0.2才由01,執(zhí)行異或運算,使輸出有一路亮。此處理就是確保M0.0=1的寬度=10秒,不會衡=1。

    通過以上3個編程的解析,可以看出,深入理解各個指令的內(nèi)涵,廣開思路,就會使編程指令使用的更加靈活合理,會使你編出的程序簡短精練。就寫到這里,謝謝大家!

投訴建議

提交

查看更多評論
其他資訊

查看更多

對多輸出點PLC設(shè)計與編程的實例展示與解析

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

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

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

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