西門子PLC組織塊與中斷處理方法有哪些
發(fā)布于2022-11-22 11:11
54
2
標(biāo)簽:西門子PLC
1.中斷過(guò)程
中斷處理用來(lái)實(shí)現(xiàn)對(duì)特殊內(nèi)部事件或外部事件的快速響應(yīng)。如果沒(méi)有中斷,CPU循環(huán)執(zhí)行組織塊0B1。因?yàn)槌尘敖M織塊0B90以外,0B1的中斷優(yōu)先級(jí)最低,CPU檢測(cè)到中斷源的中斷請(qǐng)求時(shí),操作系統(tǒng)在執(zhí)行完當(dāng)前程序的當(dāng)前指令(即斷點(diǎn)處)后,立即響應(yīng)中斷。CPU暫停正在執(zhí)行的程序,調(diào)用中斷源對(duì)應(yīng)的中斷組織塊(OB)來(lái)處理。執(zhí)行完中斷組織塊后,返回被中斷的程序的斷點(diǎn)處繼續(xù)執(zhí)行原來(lái)的程序。
有中斷事件發(fā)生時(shí),如果沒(méi)有下載對(duì)應(yīng)的組織塊,CPU將會(huì)進(jìn)入STOP模式。即使生成和下載一個(gè)空的組織塊,出現(xiàn)對(duì)應(yīng)的中斷事件時(shí),CPU也不會(huì)進(jìn)入STOP模式。
PLC的中斷源可能來(lái)自UO模塊的硬件中斷,或者來(lái)自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)盡可能地使用局部變量。
編寫中斷程序時(shí)應(yīng)遵循“越短越好”的格言,以減少中斷程序的執(zhí)行時(shí)間,減少對(duì)其他事件處理的延遲,否則可能引起主程序控制的設(shè)備操作異常。
2. 組織塊的分類
組織塊只能由操作系統(tǒng)啟動(dòng),它由變量聲明表和用戶編寫的控制程序組成。
(1)啟動(dòng)組織塊
啟動(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
需要循環(huán)執(zhí)行的程序存放在OB1中,執(zhí)行完后又開(kāi)始新的循環(huán)。(3)定期執(zhí)行的組織塊
定期執(zhí)行的組織塊包括時(shí)間中斷組織塊 OB10~OB17和循環(huán)中斷組織塊 OB30~OB38,可以根據(jù)設(shè)定的日期時(shí)間或時(shí)間間隔執(zhí)行中斷程序。
(4)事件驅(qū)動(dòng)的組織塊
延時(shí)中斷組織塊 OB20~OB23在過(guò)程事件出現(xiàn)后延時(shí)一定的時(shí)間再執(zhí)行中斷程序硬件中斷組織塊 OB40~OB47用于需要快速響應(yīng)的過(guò)程事件,事件出現(xiàn)時(shí)馬上中止當(dāng)前正在執(zhí)行的程序,執(zhí)行對(duì)應(yīng)的中斷程序。異步錯(cuò)誤中斷組織塊OB80~0B87和同步錯(cuò)誤中斷組織塊OB121、OB122用來(lái)決定在出現(xiàn)錯(cuò)誤時(shí)系統(tǒng)如何響應(yīng)。
3. 中斷的優(yōu)先級(jí)
中斷的優(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,改為執(zhí)行較高優(yōu)先級(jí)的OB。這種處理方式稱為中斷程序的嵌套調(diào)用。
下面是優(yōu)先級(jí)的順序(后面的比前面的優(yōu)先)背景循環(huán)、主程序掃描循環(huán)、時(shí)間中斷、時(shí)間延時(shí)中斷、循環(huán)中斷、硬件中斷、多處理器中斷、I/O 冗余錯(cuò)誤、異步故障(OB80~87)、啟動(dòng)和CPU 冗余,背景循環(huán)的優(yōu)先級(jí)最低。
S7-300的組織塊的優(yōu)先級(jí)是固定的,可以用STEP7修改S7-400 CPU下述組織塊的優(yōu)先級(jí)OB10~OB47(優(yōu)先級(jí)2~23),OB70~0B72(優(yōu)先級(jí)25或28,只適用于H系列CPU),以及在RUN模式下的OB80~OB88(見(jiàn)附表B-1)。通常情況下組織塊的編號(hào)越大(OB90除外),優(yōu)先級(jí)越高。具有相同優(yōu)先級(jí)的OB按啟動(dòng)它們的事件出現(xiàn)的先后順序處理。被同步錯(cuò)誤啟動(dòng)的OB121和OB122的優(yōu)先級(jí)與錯(cuò)誤出現(xiàn)時(shí)正在執(zhí)行的OB的優(yōu)先級(jí)相同。
生成邏輯塊0B、FB和FC時(shí),同時(shí)生成臨時(shí)局部變量數(shù)據(jù),CPU的局部數(shù)據(jù)區(qū)按優(yōu)先級(jí)劃分??梢栽赟7-400的CPU模塊屬性對(duì)話框的“存儲(chǔ)器”選項(xiàng)卡中,改變每個(gè)優(yōu)先級(jí)的局部數(shù)據(jù)區(qū)的大小。將優(yōu)先級(jí)賦值為0,或分配小于20B的局部數(shù)據(jù)給某一個(gè)優(yōu)先級(jí),可以取消相應(yīng)的中斷0B。
4.對(duì)中斷的控制
時(shí)間中斷和延時(shí)中斷有專用的允許處理中斷(或稱激活、使能中斷)和禁止中斷的系統(tǒng)功能(SFC)。
SFC39“DIS_INT”用來(lái)禁止中斷和異步錯(cuò)誤處理,可以禁止所有的中斷,有選擇地禁止某些優(yōu)先級(jí)范圍的中斷,或者只禁止指定的某個(gè)中斷。
SFC40“EN_INT”用來(lái)激活(使能)新的中斷和異步錯(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”用來(lái)允許立即處理被SFC41暫時(shí)禁止的中斷和異步錯(cuò)誤,SFC42和SFC41配對(duì)使用。