福建西門子S7-200SMARTPLC代理批發(fā)銷售
西門子S7-200 PLC子程序的嵌套運(yùn)行方式
主程序調(diào)用子程序,子程序還可以再調(diào)用子程序,這種方式叫做嵌套,多可以嵌套8層,這種情況下,各個(gè)子程序的運(yùn)行有先后之分。

如圖6-29所示的嵌套運(yùn)行例子中,兩個(gè)子程序的運(yùn)行是有先后之分的,從程序中可以看到,要先運(yùn)行子程序1后才可能去運(yùn)行主程序2的。我們都知道必須先運(yùn)行主程序,然后才有可能運(yùn)行子程序。在本例中運(yùn)行主程序后,需要先接通I0.0調(diào)用子程序1后,當(dāng)子程序1運(yùn)行起來(lái)后才能去接通I0.1調(diào)用子程序2,如果在不運(yùn)行子程序1的情況下直接接通I0.1,則不會(huì)調(diào)用子程序2,因?yàn)榇藭r(shí)子程序1沒(méi)有運(yùn)行,故接通的I0.1無(wú)效。
①子程序的特點(diǎn):子程序只有在主程序發(fā)出調(diào)用指令的時(shí)候才運(yùn)行,運(yùn)行完畢后,自動(dòng)返回主程序,所以不用每個(gè)掃描周期都執(zhí)行,這樣可以減少整個(gè)程序的運(yùn)行時(shí)間,對(duì)于一些初始化的程序,寫在子程序里比較合適。
②S7-200 CPU可以寫64個(gè)子程序(0~63),CPU226XM還可以寫128個(gè)子程序(0~127)。
③子程序可以嵌套使用(主程序中調(diào)用子程序,子程序再調(diào)用子程序),大嵌套深度為8級(jí),但是中斷程序里不能嵌套子程序。
④子程序默認(rèn)的名稱是SBR_n(n為子程序編號(hào)),也可以修改。
西門子PLC的編程強(qiáng)調(diào)結(jié)構(gòu)化編程,因此會(huì)經(jīng)常使用到子程序和中斷程序。
在S7-200 PLC中,有4種程序:OS(系統(tǒng)程序)、OB1(主程序)、SBR(子程序)和INT(中斷程序)。CPU在運(yùn)行時(shí),當(dāng)滿足調(diào)用SBR程序狀態(tài)時(shí),會(huì)暫?,F(xiàn)在執(zhí)行的用戶程序進(jìn)入執(zhí)行SBR子程序。執(zhí)行完子程序后,再返回原來(lái)的地方繼續(xù)執(zhí)行原來(lái)的程序。執(zhí)行中斷程序,當(dāng)聲明允許開中斷,有中斷源產(chǎn)生,會(huì)暫停現(xiàn)在執(zhí)行的用戶程序(包括OB1、SBR和級(jí)別較低的INT),進(jìn)入聲明與該中斷源有聯(lián)系的INT中斷程序,中斷程序執(zhí)行完畢,自動(dòng)返回到原來(lái)的地方,繼續(xù)執(zhí)行原來(lái)的程序。子程序可以從主程序、另一個(gè)SBR或INT中調(diào)用,不能從子程序本身調(diào)用。S7-200 CPU總共有64個(gè)子程序(CPU226 XM有128個(gè)子程序),可以在子程序中調(diào)用另一個(gè)子程序,大嵌套深度為8級(jí),但在INT程序中不能嵌套子程序。使用子程序能加快CPU的掃描速度。中斷程序主要是為特殊內(nèi)部或外部事物提供快速反應(yīng)而設(shè)置的,中斷程序中不可以使用DISI、ENI、HDEF、SCR、END指令。一個(gè)程序中總共可以有128個(gè)子程序,在任何時(shí)刻只能執(zhí)行一個(gè)用戶中斷程序。
①指令名稱:減1指令(DEC_B) (DEC_W)和(DEC_DW)。
②指令的功能:IN-1=OUT。
③指令的形式和操作數(shù):見(jiàn)表6-22。
表6-22 減1指令的形式和操作
減1指令的作用是使得輸入端的數(shù)值減1后在輸出端輸出,共有3條具體指令,與加1指令一樣,讀者可參考前面的指令進(jìn)行練習(xí)使用。
下面通過(guò)具體的案例來(lái)說(shuō)明這些指令的應(yīng)用。
例6-11控制要求:在數(shù)模轉(zhuǎn)換中,需要一個(gè)數(shù)字量在0~4000范圍內(nèi)變換,當(dāng)按下增加按鈕時(shí),數(shù)據(jù)就增加,但大只增加到4000;當(dāng)按下減小按鈕時(shí),數(shù)據(jù)就減小,小只能減小到0。
分析:這個(gè)例子在實(shí)際中經(jīng)常要用到,在數(shù)模轉(zhuǎn)換中,需要得到連續(xù)變化的模擬量時(shí)就要用到。根據(jù)案例要求,I/O分配如下:I0.0為增加按鈕;I0.1為減小按鈕;Q0.0到達(dá)大數(shù)據(jù)時(shí)指示燈亮;Q0.1到達(dá)小數(shù)據(jù)時(shí)指示燈亮。在數(shù)據(jù)變化時(shí),變化的頻率我們可以通過(guò)定時(shí)器做個(gè)脈沖信號(hào)來(lái)進(jìn)行控制。程序如圖6-24所示
例6-12用比較指令和加1、減1指令編寫開關(guān)燈控制程序,要求控制按鈕I0.0按下一次,燈Q0.0亮,按下2次,燈Q0.0、Q0.1全亮,按下3次,燈全滅,如此循環(huán)。
分析:利用加1指令INC B控制數(shù)據(jù)VB0,當(dāng)這個(gè)數(shù)據(jù)等于1時(shí),Q0.0點(diǎn)亮,當(dāng)數(shù)據(jù)等于2時(shí),QO.1點(diǎn)亮,當(dāng)數(shù)據(jù)等于3時(shí),馬上把數(shù)據(jù)歸零,同時(shí)把Q0.0、Q0.1復(fù)位??刂瞥绦蛉鐖D6-25所示。
例6-13 圖6-26所示為倉(cāng)庫(kù)區(qū)及庫(kù)存顯示面板。在兩個(gè)傳送帶之間有一個(gè)能裝100件物品的臨時(shí)倉(cāng)庫(kù),傳送帶1將物品送至臨時(shí)倉(cāng)庫(kù),I0.0為物品進(jìn)倉(cāng)感應(yīng)器,傳送帶2為物品出倉(cāng),I0.1為出倉(cāng)感應(yīng)器,面板上的指示燈顯示倉(cāng)庫(kù)內(nèi)物品的庫(kù)存情況,Q0.0表示空倉(cāng),Q0.1表示倉(cāng)庫(kù)不空,但小于50%,Q0.2為倉(cāng)庫(kù)裝載超過(guò)50%,Q0.3為倉(cāng)庫(kù)裝載超過(guò)90%,Q0.4表示滿倉(cāng)。寫出控制程序。

分析:物品進(jìn)倉(cāng),就用加1指令,表示進(jìn)了一個(gè)物品,出倉(cāng)就用減1指令,表示出了一個(gè)物品;然后用比較指令進(jìn)行比較,驅(qū)動(dòng)相應(yīng)的指示燈。
①指令名稱:整數(shù)除法指令(DIV)、(DIV_I)和(DIV_DI)。
②指令的功能:IN1÷IN2=OUT。
③指令的形式和操作數(shù):
④指令應(yīng)用如下。
程序如圖6-21所示:VW0÷VW2=VD4。DIV整數(shù)除法,2個(gè)16位的整數(shù)相除,結(jié)果是32位,其中高16位是用來(lái)存放余數(shù)的,低16位是用來(lái)存放商。
VW8÷VW10=VW12。DIV_L整數(shù)除法,2個(gè)16位的整數(shù)相除,結(jié)果是16位,輸出結(jié)果只保留商,不保留余數(shù)。
VD20÷VD24=VD28。DIV_DI雙整數(shù)除法,2個(gè)32位的整數(shù)相除,結(jié)果是32位,輸出也是只保留商,不保留余數(shù)。
整數(shù)除法指令也是包含3條具體指令,區(qū)別同樣是在操作數(shù)上,其使用跟整數(shù)乘法指令相類似,讀者可參考整數(shù)乘法指令進(jìn)行練習(xí),所不同的是,在這3條指令中,*條DIV指令的輸入是16位整數(shù),輸出是32位的雙整數(shù),在這32位中,高16位是用來(lái)存放余數(shù)的,低16位是用來(lái)存放商的;第二條DIV_I指令的輸出結(jié)果只保留商,不保留余數(shù);第三條DIV_DI指令雖然也是32位輸出,但是該指令的輸出也是只保留商,不保留余數(shù),這一點(diǎn)需要注意。
四則運(yùn)算綜合應(yīng)用舉例如下。
控制要求如下。
①自動(dòng)售貨機(jī)可以投入1角、5角、1元的硬幣(硬幣的識(shí)別裝置另議,這里只作為輸入信號(hào))。

②當(dāng)投入的硬幣總值超過(guò)2.5元時(shí),汽水指示燈亮;當(dāng)投入的硬幣總值超過(guò)4元時(shí),橙汁和汽水的指示燈都亮;表示可以購(gòu)買
圖6-21 整數(shù)除法指令應(yīng)用
③當(dāng)汽水指示燈亮?xí)r,按下買汽水按鈕,汽水閥打開,流出汽水,6s后自動(dòng)關(guān)閉,在流出的過(guò)程中,汽水指示燈閃爍,同時(shí)系統(tǒng)自動(dòng)計(jì)算所剩的余額。
④當(dāng)橙汁指示燈亮?xí)r,按下買橙汁按鈕,橙汁閥打開,流出橙汁,6s后自動(dòng)關(guān)閉,在流出的過(guò)程中,橙汁指示燈閃爍,同時(shí)系統(tǒng)自動(dòng)計(jì)算所剩的余額。
⑤買完后,按下找錢按鈕,系統(tǒng)會(huì)將余額退回。退幣時(shí)退幣燈閃爍,閃爍的次數(shù)和余額一樣(以角為單位)。
⑥系統(tǒng)能自動(dòng)統(tǒng)計(jì)該機(jī)的營(yíng)業(yè)情況,包括各種產(chǎn)品的銷售量和銷售額。
根據(jù)以上控制要求,列出I/O表,寫出控制程序,并進(jìn)行調(diào)試。
①指令名稱:整數(shù)乘法指令(MUL)、(MUL_I)和(MUL_DI)。
②指令的功能:IN1×IN2=OUT。
③指令的形式和操作數(shù):見(jiàn)表6-18。
④指令應(yīng)用如下。
程序如圖6-20所示:VW0×VW2=VD4。MUL整數(shù)乘法,2個(gè)16位的整數(shù)相乘,結(jié)果是32位。
VW8×VW10=VW12。MUL_L整數(shù)乘法,2個(gè)16位的整數(shù)相乘,結(jié)果是16位。
VD20×VD24=VD28。MUL_DI雙整數(shù)乘法,2個(gè)32位的整數(shù)相乘,結(jié)果是32位。
整數(shù)乘法指令包含3條指令,從表6-18中可以看到,這3條指令的區(qū)別在于它們的操作數(shù)不同,因此在使用時(shí)具體要用哪一條指令就是要看其操作數(shù)的類型來(lái)定。如圖6-20所示的應(yīng)用實(shí)例,I0.0為執(zhí)行條件,后面是跟著乘法的3條指令,可以看到它們的操作數(shù)類型是不同的,需要提醒的是,在使用不同操作數(shù)寄存器時(shí),如果是16位的寄存器,其地址要相隔2,32位的寄存器地址要相隔4。

福建西門子S7-200SMARTPLC代理批發(fā)銷售