安徽西門子S7-200SMARTPLC代理批發(fā)銷售
西門子S7-200 PLC中斷程序應(yīng)用說明(I/O中斷)
①下面通過一個應(yīng)用程序來說明中斷指令的應(yīng)用,說明如何開中斷,如何關(guān)閉中斷,什么時候可以執(zhí)行中斷程序,怎么樣進(jìn)行中斷分離。

如圖6-36所示,先看圖6-36 (a)中斷程序0,“網(wǎng)絡(luò)1”當(dāng)程序運(yùn)行時,VB0自動加“1”,“網(wǎng)絡(luò)2”是有條件的中斷返回,當(dāng)I1.0接通時,執(zhí)行中斷返回,“網(wǎng)絡(luò)3”的內(nèi)容不再執(zhí)行;若I1.0不接通,當(dāng)VB0自動加“1”至大于或等于2時,“網(wǎng)絡(luò)3”將其復(fù)位為“0”。對圖6-36 (b)的中斷程序1的分析是一樣的,所不同的是VB0換成了VB1,另外中斷返回的條件變成了I1.1,分析這兩個中斷程序我們可以看到,如果不執(zhí)行中斷返回,兩程序中的“網(wǎng)絡(luò)3”執(zhí)行,那么VB0和VB1的值將不可能超過2,會一直在0和1之間變化,若執(zhí)行了中斷返回,則兩個程序中的“網(wǎng)絡(luò)3”都不再執(zhí)行,這樣VB0和VB1的值就可能會超過2。
圖6-36 (c)子程序的作用是將中斷事件與中斷程序聯(lián)系起來,從“網(wǎng)絡(luò)1”的標(biāo)題欄可以看出,該程序為初始化子程序0,聲明中斷程序0和I0.0上升沿中斷事件0聯(lián)系,聲明中斷程序1和I0.0下降沿中斷事件1聯(lián)系,而允許開全局中斷。兩個中斷連接指令(ATCH)的INT端分別與INT_0和INT_1連接,EVNT端分別與0和3連接,表示當(dāng)程序運(yùn)行時,中斷程序INT_0與事件號為0的中斷事件聯(lián)系,即I0.0上升沿觸發(fā)中斷程序INT_0運(yùn)行。中斷程序INT_1與事件號為3的中斷事件聯(lián)系,即I0.1下降沿觸發(fā)中斷程序INT_1運(yùn)行。當(dāng)然,這段程序也可以放在主程序中,但是這種初始化的程序一般放在子程序里,否則會加長程序的運(yùn)行周期,因為在子程序中只運(yùn)行一次,如果寫在主程序中則每次運(yùn)行都要掃描時間。
圖6-36 (d)的主程序中,“網(wǎng)絡(luò)1”開機(jī)調(diào)用子程序,“網(wǎng)絡(luò)2”I0.3接通開中斷,“網(wǎng)絡(luò)3”I0.4接通關(guān)閉中斷。其余依此類推。
①在中斷程序中不能使用DISI、ENI、HDEF、SCR和END指令。
②一個程序中多可有128個中斷程序,PLC采用先來先服務(wù)的原則為中斷提供服務(wù)。在任何時刻,只能執(zhí)行一個中斷程序,一旦一個中斷程序開始執(zhí)行,則一直執(zhí)行至完成,不會被另一個中斷程序所打斷,所以就不存在嵌套運(yùn)行。
③當(dāng)多個中斷程序同時要求執(zhí)行時,按照優(yōu)先級不同進(jìn)行執(zhí)行,沒有被執(zhí)行的,進(jìn)行列隊等待,如果出現(xiàn)中斷的數(shù)目超出列隊能夠容納的數(shù)目時,列隊溢出內(nèi)存位會改變狀態(tài)。表6-26列出了每個中斷列隊大條目數(shù)和中斷隊列溢出標(biāo)志位。
表6-26 每個中斷列隊大條目數(shù)和中斷隊列溢出標(biāo)志位

中斷程序相關(guān)的指令如圖6-33所示。啟用中斷(ENI)指令是全局性啟用所有附加中斷事件進(jìn)程。禁用中斷( DISI)指令則是全局性禁止所有中斷事件進(jìn)程。即當(dāng)使用ENI指令時就可以啟動運(yùn)行中斷程序,當(dāng)使用DISI指令時禁止所有中斷程序的運(yùn)行。RETI指令可根據(jù)先前邏輯條件用于從中斷程序中返回。中斷連接( ATCH)指令是將中斷事件(EVNT)與中斷例行程序號碼(INT)相聯(lián)系,并啟用中斷事件,設(shè)置如圖6-34所示。中斷分離(DTCH)指令用于取消中斷事件( EVNT)與所有中斷例行程序之間的關(guān)聯(lián),并禁用中斷事件。使用設(shè)置如圖6-35所示

圖6-35 DTCH指令設(shè)置
在激活中斷程序之前,必須在中斷事件和希望在事件發(fā)生時執(zhí)行的程序段之間建立聯(lián)系。使用“中斷連接”指令將中斷事件(由中斷事件號碼)與程序段(由中斷程序號碼)聯(lián)系在一起??梢詫⒍鄠€中斷事件附加在一個中斷程序上,但一個事件不能同時附加在多個中斷程序上。當(dāng)將一個中斷事件附加在一個中斷程序上時會自動啟用中斷。如果用DISI禁用中斷指令禁用所有的中斷,則每次出現(xiàn)的中斷事件均入隊等候,直至使用ENI啟用中斷指令或中斷隊列溢出重新啟用中斷。也可以使用“中斷分離”指令斷開中斷事件與中斷程序之間的聯(lián)系,從而禁用單個中斷事件。“中斷分離”指令使中斷返回至非現(xiàn)用或忽略狀態(tài)。
①通信端口中斷:S7-200會生成允許程序控制通信端口的事件。比如PLC和外圍設(shè)備通信時,數(shù)據(jù)的發(fā)送和接收等都要運(yùn)用到中斷程序,這類中斷程序就屬于通信端口中斷程序。
②I/O中斷(也稱外部中斷):指S7-200可以通過外部的I/O信號產(chǎn)生中斷。可以產(chǎn)生中斷的輸入信號有:I0.0、I0.1、I0.2的上升沿和下降沿。
③定時中斷:就是按固定的時間間隔運(yùn)行中斷程序。定時間隔的時間設(shè)置在SMB34和SMB35中。
以上這三類中斷程序又分別各有不同的事件號以及在發(fā)生中斷時的優(yōu)先級別。
說明:表6-25以事件號為序列出各種中斷事件及其優(yōu)先級別等信息,表中打“√”表示該類CPU可以產(chǎn)生這樣的中斷事件,打“--”表示該類CPU不能產(chǎn)生這樣的中斷事件,“組內(nèi)優(yōu)先級別”中“0”高,“1”次之,依此類推。舉例如下。

①“I0.1上升沿”產(chǎn)生的中斷事件的事件號為“2”,其所在組的優(yōu)先級別為中級,組內(nèi)的優(yōu)先級別為“3”,所有型號的CPU均能產(chǎn)生。
②高速計數(shù)器1“HSC1 CV=PV”,當(dāng)其當(dāng)前值等于設(shè)定值時產(chǎn)生的中斷事件的事件號為“13”,所在組的優(yōu)先級別為低級,組內(nèi)優(yōu)先級別為“13”,只有224、224XP、226、226XP型號的CPU能產(chǎn)生該類中斷事件,221、222型號的CPU不能產(chǎn)生該類中斷事件。
③高速計數(shù)器4“HSC4計數(shù)方向改變”,當(dāng)其計數(shù)方向改變時產(chǎn)生的中斷事件的事件號為“30”,所在組的優(yōu)先級別為低級,組內(nèi)優(yōu)先級別為“21”,所有型號的CPU均能產(chǎn)生。
有兩個電動機(jī),分別接在Q0.0和Q0.1,I0.0控制電動機(jī)1的(Q0.0)啟動,I0.1控制電動機(jī)1的(Q0.0)停止;I0.2控制電動機(jī)2的(Q0.1)啟動,I0.3控制電動機(jī)2的(Q0.1)停止。
要求用局部變量,子程序調(diào)用來完成。
分析:在子程序中建立局部變量,變量符號用“啟動”、“停止”、“電動機(jī)”命名。在子程序中寫出這些局部變量之間的控制邏輯關(guān)系,在主程序中調(diào)用這些變量。程序如圖6-31所示。
首先在子程序SBR_0中建立變量表,如圖6-31 (a)所示,建立“啟動”、“停止”、“電動機(jī)”3個變量,“啟動”和“停止”變量為“IN”型的,電動機(jī)既要使用其線圈,也要用到觸點(diǎn),因此要采用IN_OUT變量類型。然后在子程序中寫出這些局部變量之間的控制邏輯關(guān)系,如圖6-31 (b)所示,編程時在元件上方輸入變量名稱后,會自動在其名稱前出現(xiàn)“#”號,說明該變量已經(jīng)被定義過了,如果變量沒有被定義,則不會出現(xiàn)“#”號,該程序表明3個變量之間的關(guān)系是:接通“啟動”變量,則“電動機(jī)”有輸出,且自鎖,接通“停止”變量,則“電動機(jī)”停止輸出,自鎖斷開
接下來編寫主程序如圖6-31(c)所示,“EN”端表明當(dāng)程序運(yùn)行時調(diào)用子程序SBR_0。對“網(wǎng)絡(luò)1”“啟動”、“停止”端分別由I0.0、I0.1控制,程序的意思是當(dāng)接通I0.0時將觸發(fā)子程序中的“啟動”接通,這樣“電動機(jī)”Q0.0運(yùn)轉(zhuǎn),當(dāng)接通I0.1時將觸發(fā)子程序中的“停止”接通,這樣“電動機(jī)”Q0.0停止。依此類推,“網(wǎng)絡(luò)2”為電動機(jī)2的控制程序。
這就是通過變量的關(guān)系來實(shí)現(xiàn)控制的,由此例子可以看到,這里實(shí)際上是“L0.0”、“L0.1”、“L0.2”3個變量之間邏輯關(guān)系的控制,它們?nèi)咴诔绦蛑谢ハ嗾{(diào)用。同樣的問題,如果改變其邏輯關(guān)系,可以用其他的方法來實(shí)現(xiàn)。

該問題的第二種處理辦法如上,同樣的要先建立控制變量表如圖6-32 (a)所示,但在子程序的編寫上就不再采用*種方式的邏輯控制,而是將電動機(jī)變量直接當(dāng)成一個邏輯變量處理,這樣在子程序中用“置位”和“復(fù)位”指令來控制電動機(jī),*行“網(wǎng)絡(luò)1”,接通“啟動”變量,則將“電動機(jī)”變量置“1”,電動機(jī)啟動運(yùn)轉(zhuǎn);第二行“網(wǎng)絡(luò)2”,接通“停止”變量則將“電動機(jī)”變量“復(fù)位”為“0”,電動機(jī)停止。主程序與方法1是一樣的。
安徽西門子S7-200SMARTPLC代理批發(fā)銷售