工控網(wǎng)首頁
>

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

>

簡(jiǎn)短精煉的3例編程展示及編程思路與技巧解析

簡(jiǎn)短精煉的3例編程展示及編程思路與技巧解析

2013/3/21 21:52:45

         簡(jiǎn)短精煉的3例編程展示及編程思路與技巧解析       

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

    下面例舉3個(gè)編程實(shí)例,供大家分析參考:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

IW0狀態(tài)=0000_0000_0110_0011,現(xiàn)按下一按鈕(使I0.3=1),此時(shí)IW0=0000_0000_0110_1011,MW10=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=1,QW0輸出不變。但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)用異或指令和比較指令,不僅簡(jiǎn)化編程,而且對(duì)輸入口狀態(tài)無條件限制,使之可適用與各類按鈕。

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

     按此命題編寫如下程序:

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

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

三、有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#,不能亂。

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

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

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

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

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

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

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

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

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

投訴建議

提交

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

查看更多

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

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

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

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

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