無錫西門子PLC系列代理商
西門子PLC組織塊與中斷處理是不是很多疑惑?
組織塊OB是操作系統(tǒng)與用戶程序之間的接口,組織塊由操作系統(tǒng)調(diào)用,組織塊中的程序是用戶編寫的。S7 plc的組織塊用來創(chuàng)建在特定的時(shí)間執(zhí)行的程序或相應(yīng)特定事件的程序,例如延時(shí)中斷OB、外部硬件中斷OB和錯(cuò)誤中斷OB等。
一、中斷的基本概念
1、中斷過程
中斷處理用來實(shí)現(xiàn)對(duì)特殊內(nèi)部事件或外部事件的快速響應(yīng),如果沒有中斷,CPU循環(huán)執(zhí)行組織塊OB1,因?yàn)槌吮尘敖M織塊OB90以外,OB1的中斷優(yōu)先級(jí)低,CPU檢測(cè)到中斷源的中斷請(qǐng)求,操作系統(tǒng)在執(zhí)行完當(dāng)前程序的當(dāng)前指令(即斷點(diǎn)處)后,立即響應(yīng)中斷。CPU暫停正在執(zhí)行的程序,調(diào)用中斷源的中斷組織塊OB來處理,執(zhí)行完中斷組織塊后,返回被中斷的程序斷點(diǎn)處繼續(xù)執(zhí)行原來的程序。
有中斷事件發(fā)生時(shí),如果沒有下載相應(yīng)的組織塊,CPU將會(huì)進(jìn)入STOP模式,即使生成和下載一個(gè)空的組織塊,出現(xiàn)相應(yīng)的中斷事件時(shí),CPU也不會(huì)進(jìn)入STOP模式。
PLC的中斷源可能來自I/O模塊的硬件中斷,或者來自CPU模塊內(nèi)部的軟件中斷,例如時(shí)間中斷、延時(shí)中斷、循環(huán)中斷和編程錯(cuò)誤引起的中斷。
一個(gè)OB的執(zhí)行被另一個(gè)OB中斷時(shí),操作系統(tǒng)對(duì)現(xiàn)場(chǎng)進(jìn)行保護(hù),被中斷的OB的局部數(shù)據(jù)壓入L堆棧(局部數(shù)據(jù)堆棧),被中斷的斷點(diǎn)處的現(xiàn)場(chǎng)信息保存在I堆棧(中斷堆棧)和B堆棧(塊堆棧)中。中斷程序不是由邏輯塊調(diào)用,而是在中斷事件發(fā)生時(shí)由操作系統(tǒng)調(diào)用,因?yàn)椴荒茴A(yù)知系統(tǒng)何時(shí)調(diào)用中斷程序,中斷程序不能改寫其他程序中可能正在使用的存儲(chǔ)器,中斷程序應(yīng)盡可能的使用局部變量。編寫中斷程序應(yīng)越短越好,減少中斷程序的執(zhí)行時(shí)間,減少對(duì)其他事件處理的延遲,否則可能引起主程序控制的設(shè)備操作異常。
2、組織塊的分類
組織塊只能由操作系統(tǒng)啟動(dòng),它由變量聲明表和用戶編寫的控制程序組成。
(1)啟動(dòng)組織塊:用于系統(tǒng)初始化,CPU上電或操作模式切換到RUN時(shí),S7-300執(zhí)行OB100,S7-400根據(jù)組態(tài)的啟動(dòng)方式執(zhí)行OB100~OB102中的一個(gè)。
(2)循環(huán)執(zhí)行OB1:需要連續(xù)執(zhí)行的程序放在OB1中,循環(huán)執(zhí)行。
(3)定期執(zhí)行的組織塊:包括時(shí)間中斷組織塊OB10~OB17,和循環(huán)中斷組織塊OB30~OB38,可以根據(jù)設(shè)定的日期時(shí)間或時(shí)間間隔執(zhí)行中斷程序。
(4)事件驅(qū)動(dòng)的組織塊:延時(shí)中斷OB20~OB23在過程事件出現(xiàn)后延時(shí)一定時(shí)間再執(zhí)行中斷程序,硬件中斷OB40~OB47用于需要快速響應(yīng)的過程事件,時(shí)間出現(xiàn)時(shí)馬上中止當(dāng)前正在執(zhí)行的程序,執(zhí)行對(duì)應(yīng)的中斷程序。d版權(quán)所有!異步錯(cuò)誤中斷0B80~OB87和同步錯(cuò)誤中斷OB121、OB122用來決定出現(xiàn)錯(cuò)誤時(shí)系統(tǒng)如何響應(yīng)。
3、中斷的優(yōu)先級(jí):也就是組織塊的優(yōu)先級(jí),如果在執(zhí)行中斷程序(組織塊)時(shí),又檢測(cè)到一個(gè)終端請(qǐng)求,CPU將比較兩個(gè)中斷源的中斷優(yōu)先級(jí),如果優(yōu)先級(jí)相同,按照產(chǎn)生中斷請(qǐng)求的先后次序進(jìn)行處理。如果后者的優(yōu)先級(jí)比正在執(zhí)行的OB的優(yōu)先級(jí)高,將中止當(dāng)前的正在處理的OB,
4、對(duì)終端的控制:時(shí)間中斷和延時(shí)中斷有的允許處理中斷和禁止中斷的系統(tǒng)功能SFC。
SFC39“DIS_INT”用來禁止中斷和異步錯(cuò)誤處理,可以禁止所有中斷,有選擇的禁用某些優(yōu)先級(jí)范圍的中斷,或者只禁止的某個(gè)中斷;
SFC40“EN_INT”用來激活新的中斷和異步錯(cuò)誤處理,激活中斷是指允許處理中斷,做好了在中斷事件出現(xiàn)時(shí)執(zhí)行對(duì)應(yīng)的組織塊的準(zhǔn)備??梢匀吭试S或有選擇的允許。
SFC41“DIS_AIRT”延遲處理比當(dāng)前優(yōu)先級(jí)更高的中斷和異步錯(cuò)誤,直到用SFC42允許處理中斷或當(dāng)前OB執(zhí)行完畢,SFC42“EN_AIRT”用來允許立即處理被SFC41暫時(shí)禁止的中斷和異步錯(cuò)誤,SFC41和SFC42配對(duì)使用。
5、組織塊的變量聲明表:OB塊是操作系統(tǒng)調(diào)用的,OB沒有背景數(shù)據(jù)塊,也不能為OB聲明輸入、輸出參數(shù)和靜態(tài)變量,所以,OB的變量聲明表中只有臨時(shí)變量,OB的臨時(shí)變量可以是基本數(shù)據(jù)類型、復(fù)雜數(shù)據(jù)類型或數(shù)據(jù)類型ANY。OB塊包含OB的啟動(dòng)信息的20B的臨時(shí)局部變量TEMP,這些信息在OB啟動(dòng)時(shí)由操作系統(tǒng)提供,包括啟動(dòng)事件、啟動(dòng)日期和時(shí)間、錯(cuò)誤及診斷事件。聲明表中的變量的具體內(nèi)容與組織塊的類型有關(guān)
用戶可以通過在啟動(dòng)組織塊中編寫程序,用來設(shè)置CPU的初始化操作,例如設(shè)置開始運(yùn)行時(shí)的某些變量的初始值和輸出模塊的初始值等。
1)暖啟動(dòng)過程映像數(shù)據(jù)以及非保持的存儲(chǔ)器位、定時(shí)器和計(jì)數(shù)器被復(fù)位。具有保持功能的存儲(chǔ)器位、定時(shí)器、計(jì)數(shù)器和所有的數(shù)據(jù)塊將保留原數(shù)值,執(zhí)行一個(gè)OB100后,循環(huán)執(zhí)行OB1,將模式選擇開關(guān)從STOP切換到RUN,執(zhí)行一次暖啟動(dòng)。
2)熱啟動(dòng):400CPU在RUN模式下電源突然丟失,很快又重新上電,將執(zhí)行OB101,自動(dòng)完成熱啟動(dòng),從上次RUN模式結(jié)束時(shí)程序被中斷之處繼續(xù)執(zhí)行,不對(duì)計(jì)數(shù)器等復(fù)位。
3)冷啟動(dòng):所有系統(tǒng)存儲(chǔ)區(qū)均被清除,即復(fù)位為零,包括有保持功能的存儲(chǔ)區(qū)。調(diào)用OB102后循環(huán)執(zhí)行OB1。
2、循環(huán)中斷組織塊
循環(huán)中斷組織塊用于按精確時(shí)間間隔循環(huán)執(zhí)行中斷程序,例如周期性執(zhí)行閉環(huán)控制系統(tǒng)PID控制程序,間隔時(shí)間從cpu從STOP切換到RUN開始計(jì)算。S7-300大多數(shù)只能使用OB35,其余CPU可以實(shí)用的循環(huán)中斷OB的個(gè)數(shù)和CPU型號(hào)有關(guān)。時(shí)間間隔不能小于5ms。時(shí)間間隔過短,還沒有執(zhí)行完循環(huán)中斷程序又開始調(diào)用它,將會(huì)產(chǎn)生時(shí)間錯(cuò)誤時(shí)間,調(diào)用OB80,如果沒有調(diào)用OB80,CPU將進(jìn)入STOP。
舉例說明:
硬件組態(tài)如下:采用CPU315-2DP,雙擊硬件組態(tài)中的CPU,打開屬性對(duì)話框,由【周期性中斷】選項(xiàng)卡可知只能使用OB35。
3、時(shí)間中斷組織塊
300CPU只能使用OB10,400CPU可以使用OB10~17,可以設(shè)置在某一個(gè)特定的日期時(shí)間產(chǎn)生一次時(shí)間中斷,也可以設(shè)置從設(shè)定日期時(shí)間開始,周期性的重復(fù)產(chǎn)生中斷,可以用SFC28~SFC30設(shè)置、取消和激活時(shí)間中斷。
1)、基于硬件組態(tài)的時(shí)間中斷
要求在到達(dá)設(shè)置的日期和時(shí)間時(shí),用Q4.0自動(dòng)啟動(dòng)某臺(tái)設(shè)備。具體如下:
硬件組態(tài):打開CPU屬性中的“時(shí)刻中斷”選項(xiàng)卡,設(shè)置執(zhí)行啟動(dòng)設(shè)備的日期和時(shí)間,執(zhí)行方式為“一次”。
2)用SFC控制時(shí)間中斷
除了在硬件組態(tài)功能中設(shè)置和激活時(shí)間中斷外,也可以在用戶程序中調(diào)用SFC來設(shè)置和激活時(shí)間中斷,
在I0.0的上升沿調(diào)用SFC28和SFC30分別來設(shè)置和激活時(shí)間中斷OB10。用I0.1調(diào)用SFC29來禁止時(shí)間中斷。各SFC的參數(shù)中的RET_VAL是執(zhí)行時(shí)可能出現(xiàn)的錯(cuò)誤代碼,為0時(shí)無錯(cuò)誤,OB_NR是組織塊編號(hào),SFC28用來設(shè)置時(shí)間中斷,它的參數(shù)SDT是開始產(chǎn)生中斷的日期和時(shí)間。PERIOD用來設(shè)置執(zhí)行方式,w#16#0201表示每分鐘產(chǎn)生一次中斷。
4、硬件中斷組織塊
OB40~47用于快速響應(yīng)信號(hào)模塊、通信模塊和功能模塊的信號(hào)變化,具有硬件中斷功能的上述模塊將中斷信號(hào)傳送給到CPU時(shí),將觸發(fā)硬件中斷,S7-300只能用OB40。
)編寫OB40程序
判斷是哪個(gè)模塊的哪個(gè)點(diǎn)產(chǎn)生中斷,然后執(zhí)行相應(yīng)的操作。
3)禁止和激活硬件中斷
OB1程序在I0.2的上升沿調(diào)用SFC40激活OB40對(duì)應(yīng)的硬件中斷,I0.3的上升沿調(diào)用SFC39禁止OB40對(duì)應(yīng)的硬件中斷,SFC的MODE為2時(shí),OB_NR為實(shí)參的OB的編號(hào)
5、延時(shí)中斷組織塊
PLC的普通定時(shí)器的工作和掃描工作方式有關(guān),其定時(shí)精度較差,需要高精度的延時(shí),應(yīng)使用延時(shí)中斷OB,用SFC32啟動(dòng)延時(shí)中斷,延時(shí)時(shí)間1~60000ms,精度為1ms,
硬件組態(tài)
OB40程序:在I0.0的上升沿出發(fā)硬件中斷,CPU調(diào)用OB40,在OB40中調(diào)用SFC32啟動(dòng)延時(shí)中斷,延時(shí)10s,從LD12開始8B臨時(shí)局部變量是調(diào)用OB40的日期時(shí)間,用MOVE指令講起中的后4個(gè)字節(jié)LD16保存到MD20中。
10s延時(shí)時(shí)間到,CPU調(diào)用SFC32的OB20.在OB20中用MOVE保存調(diào)用OB20的日期時(shí)間的后4個(gè)字節(jié),同時(shí)將Q4.0置為,并通過PQB4立即輸出。
用I0.2將Q4.0復(fù)位,在OB1調(diào)用SFC34來查詢延時(shí)中斷的狀態(tài)字,查詢結(jié)果用MW8保存,其低字節(jié)為MB9,OB_NR的實(shí)參是延時(shí)中斷OB的編號(hào)。RET_VAL為SFC執(zhí)行時(shí)的錯(cuò)誤代碼,為0時(shí)無錯(cuò)誤。
6、異步錯(cuò)誤組織塊
操作系統(tǒng)可以檢測(cè)下列錯(cuò)誤:不正確的CPU功能、操作系統(tǒng)執(zhí)行中的錯(cuò)誤、用戶程序中的錯(cuò)誤、I/O中的錯(cuò)誤。當(dāng)檢測(cè)到一個(gè)錯(cuò)誤,
用戶可以在組織塊中編程,對(duì)發(fā)生的錯(cuò)誤采取相應(yīng)的措施,以減少或消除錯(cuò)誤的影響,若沒有生成或下載處理錯(cuò)誤相應(yīng)的組織塊,當(dāng)出現(xiàn)錯(cuò)誤時(shí)CPU將進(jìn)入STOP模式,即使下載一個(gè)空的OB,CPU也不會(huì)進(jìn)入STOP。
利用系統(tǒng)功能SFC可以屏蔽、延遲或禁止各種OB的啟動(dòng)事件。

無錫西門子PLC系列代理商