中斷指令 |
時(shí)間: 2022-04-02 15:31 瀏覽: |
中斷指令
CPU正常運(yùn)行期間,停止當(dāng)前操作,執(zhí)行其他特殊操作的行為就叫中斷,負(fù)責(zé)跳轉(zhuǎn)的指令就是中斷指令。中斷指令PLC 的 CPU在整個(gè)控制過(guò)程中, 有些控制要取決于外部事件。 比如只有 外部設(shè)備請(qǐng)求 CPU發(fā)送數(shù)據(jù)時(shí),CPU才能向這個(gè)設(shè)備發(fā)送數(shù)據(jù)。這類控制的進(jìn)行是取決于 外部設(shè)備的請(qǐng)求和 CPU 的響應(yīng),當(dāng)CPU在接受了 外部設(shè)備的請(qǐng)求時(shí), CPU就要暫停其當(dāng)前的工作,去完成外部過(guò)程的請(qǐng)求,這種工作方式就叫 中斷方式。在啟動(dòng)中斷程序之前,必須使中斷事件與發(fā)生此事件時(shí)希望執(zhí)行的程序段建立聯(lián)系。使用中斷連接指令(ATCH)建立中斷事件(由中斷事件號(hào)碼指定)與 程序段(由中斷程序號(hào)碼指定)之間的聯(lián)系。將中斷事件連接于中斷程序時(shí),該中斷自動(dòng)被啟動(dòng)。使用中斷分離指令(DTCH)可刪除中斷事件與中斷程序之間的聯(lián)系,因而關(guān)閉單個(gè)中斷事件。中斷分離指令使中斷返回未激活或被忽略狀態(tài)。S7-200可以引發(fā)的中斷事件總共有5大類34項(xiàng)。 其中輸入信號(hào)引起的中斷事件有8項(xiàng),通訊口引起的中斷事件有 6 項(xiàng),定時(shí)器引起的中斷事件 4 項(xiàng),高速計(jì)數(shù)器引起的中斷事件有14 項(xiàng), 脈沖輸出指令引起的中斷事件有 2 項(xiàng)。S7-200 可以在梯形圖編輯器內(nèi)的任何位置右擊鼠標(biāo)并選擇插入中斷。S7-200 也可以從指令樹(shù),右擊程序塊圖標(biāo)并從彈出菜單選擇插入中斷。S7-200 還可以從程序編輯器窗口, 從 菜單右擊插入中斷。一旦一個(gè)新的中斷被建立,會(huì)在程序編輯器的底部將出現(xiàn)新的標(biāo)簽,代表新的中斷程序。
(1)中斷連接指令 中斷連接指令的表示:中斷連接指令由指令的允許端 EN、 指令助記符ATCH、中斷程序號(hào)(入口號(hào))INT n和中斷事件的事件號(hào) EVNT 構(gòu)成。 中斷連接指令的操作:中斷連接指令(ATCH)使中斷事件(EVNT)與中斷程序號(hào)碼(INT)相聯(lián)系,并啟動(dòng)中斷事件。根據(jù)指定事件優(yōu)先級(jí)組,PLC按照先 來(lái)先服務(wù)的順序?qū)χ袛嗵峁┓?wù)。任何時(shí)刻只能激活一個(gè)用戶中斷。其它中斷處于激活狀態(tài)時(shí),CPU發(fā)出中斷暫時(shí)入隊(duì),等待以后處理。如果發(fā)生的中斷數(shù)目過(guò)多,隊(duì)列無(wú)法處理,則設(shè)定 隊(duì)列溢出狀態(tài)位。當(dāng)隊(duì)空時(shí),重置這些位。 數(shù)據(jù)范圍: INT;0~127 EVENT:0~33 (2)中斷分離指令 中斷分離指令由指令的允許端 EN、 指令助記符 DTCH和中斷事件的事件號(hào)EVNT 構(gòu)成。中斷分離指令的操作:中斷分離指令(DTCH)取消中斷事件(EVNT)與全部中斷程序之間的聯(lián)系,并關(guān)閉此中斷事件 數(shù)據(jù)范圍:EVENT:0~33 (3) 中斷返回指令
中斷返回指令的表示:中斷返回指令由 指令助記符 RETI構(gòu)成。
(4)中斷允許指令中斷返回指令的操作:中斷返回指令(RETI條件返回)可用于根據(jù)先前邏輯條件從中斷返回。 注意事項(xiàng):Micro/WIN 32 自動(dòng)為各中斷程序添加無(wú)條件返回。在編寫程序時(shí),用戶不必要再書寫無(wú)條件返回指令了。 中斷處理提供了對(duì)特殊的內(nèi)部或 外部中斷事件的響應(yīng)。編寫 中斷服務(wù)程序時(shí),使中斷程序短小而簡(jiǎn)單,加快執(zhí)行速度而且不要延時(shí)過(guò)長(zhǎng)。否則,未預(yù)料條件可能引起主程序控制的設(shè)備操作異常。對(duì)于 中斷服務(wù)程序 ,俗語(yǔ)說(shuō)“越短越好,”這是絕對(duì)正確的。在中斷程序內(nèi)不能使用 DISI、ENI、HDEF、LSCR、END指令。 中斷允許指令的表示:中斷允許指令由指令助記符 ENI構(gòu)成。中斷允許指令的操作:中斷允許指令(ENI)指令全局性地啟動(dòng)全部中斷事件。 一旦進(jìn)入運(yùn)行模式,就允許執(zhí)行各個(gè)已經(jīng)激活的中斷事件。 (5)中斷禁止指令 中斷禁止指令的表示:中斷禁止指令由指令助記符 DISI 構(gòu)成。 中斷禁止指令的操作:中斷禁止指令(DISI)可以全局性地關(guān)閉所有中斷事件。中斷禁止指令允許中斷入隊(duì),但不允許啟動(dòng)中斷程序。 (6)中斷中進(jìn)一步說(shuō)明的幾個(gè)問(wèn)題 1)關(guān)于在中斷中調(diào)用 子程序:從中斷程序中可以調(diào)用一個(gè)嵌套 子程序。 累加器和邏輯堆棧在中斷程序和被調(diào)用的 子程序中是共用的。 2)關(guān)于共享數(shù)據(jù):可以在主程序和一個(gè)或多個(gè)中斷程序間共享數(shù)據(jù)。例如,用戶主程序的某個(gè)地方可以為某個(gè)中斷程序提供要用到的數(shù)據(jù),反之亦然。如果 用戶程序共享數(shù)據(jù),必須考慮中斷事件異步特性的影響,這是因?yàn)橹袛嗍录?huì)在用戶主程序執(zhí)行的任何地方出現(xiàn)。共享數(shù)據(jù)一致性問(wèn)題的解決要依賴于主程序被中斷事件中斷時(shí)中斷程序的操作。 這里有幾種可以確保在用戶主程序和中斷程序之間正確共享數(shù)據(jù)的編程技巧。 這些技巧或限制共享 存儲(chǔ)器單元的訪問(wèn)方式,或讓使用共享 存儲(chǔ)器單元的指令序列不會(huì)被中斷。語(yǔ)句表 程序共享單個(gè)變量。如果共享數(shù)據(jù)是單個(gè)字節(jié)、字、雙字變量,而 用戶程序用STL 編寫,那么通過(guò)把共享數(shù)據(jù)操作得到的中間值,只存儲(chǔ)到非共享的 存儲(chǔ)器單元或 累加器中,可以保證正確的共享訪問(wèn)。梯形圖 程序共享單個(gè) 變量。如果共享數(shù)據(jù)是單個(gè)字節(jié)、字或雙字 變量,而且用戶程序用梯形圖編寫,那么通過(guò)只用 Move 指(MOVB、MOVW、MOVD、MOVR)訪問(wèn)共享 存儲(chǔ)器單元,可以保證正確的共享訪問(wèn)。這些 Move 指令執(zhí)行時(shí)不受中斷事件影響。語(yǔ)句表或梯形圖 程序共享多個(gè) 變量,如果共享數(shù)據(jù)由一些相關(guān)的字節(jié)、字或雙字組成,那么可以用中斷禁止/允許指令(DISI 和 ENI)來(lái)控制中斷程序的執(zhí)行。在 用戶程序開(kāi)始對(duì)共享 存儲(chǔ)器單元操作的地方禁止中斷,一旦所有影響共享存儲(chǔ)器單元的操作完成后,再允許中斷,但這種方法會(huì)導(dǎo)致對(duì)中斷事件響應(yīng)的延遲。 3)關(guān)于通訊口中斷:PLC 的 串行通訊口可由梯形圖或語(yǔ)句表程序來(lái)控制。通訊口的這種操作模式稱為自由端口模式。在自由端口模式下,用戶可用程序定義 波特率、每個(gè)字符位數(shù)、 奇偶校驗(yàn)和通訊協(xié)議。利用接收和發(fā)送中斷可簡(jiǎn)化程序?qū)νㄓ嵉目刂啤?/span> 4)關(guān)于I/O中斷: I/O 中斷包含了上升沿或下降沿中斷、高速計(jì)數(shù)器中斷和脈沖串輸出(PTO)中斷。 S7-200 CPU 可用輸入 I0.0至 I0.3 的上升沿或下降沿產(chǎn)生中斷。上升沿事件和下降沿事件可被這些輸入點(diǎn)捕獲。 這些上升沿或下降沿事件可被用來(lái)指示當(dāng)某個(gè)事件發(fā)生時(shí)必須引起注意的條件。高速計(jì)數(shù)器中斷允許響應(yīng)諸如當(dāng)前值等于預(yù)置值、 計(jì)數(shù)器計(jì)數(shù)方向改變和計(jì)數(shù)器外部復(fù)位等事件而產(chǎn)生中斷。每種高速計(jì)數(shù)器可對(duì)高速事件實(shí)時(shí)響應(yīng),而 PLC 掃描速率對(duì)這些高速事件是不能控制的。脈沖串輸出中斷給出了已完成指定脈沖數(shù)輸出的指示。脈沖串輸出的一個(gè)典型應(yīng)用是步進(jìn)電機(jī)。 可以通過(guò)將一個(gè)中斷 程序連接到相應(yīng)的 I/O 事件上來(lái)允許上述的每一個(gè)中斷。
5)關(guān)于時(shí)基中斷:時(shí)基中斷包括定時(shí)中斷和定時(shí)器 T32/T96 中斷。CPU 可以支持定時(shí)中斷器??梢杂枚〞r(shí)中斷指定一個(gè)周期性的活動(dòng)。周期以 1ms 為增量單位,周期可以從 5ms 到255ms。對(duì)定時(shí)中斷 0,把周期時(shí)間寫入 SMB34;對(duì)定時(shí)中斷 1,把周期時(shí)間寫入 SMB35。每當(dāng)定時(shí)器溢出時(shí),定時(shí)中斷事件把控制權(quán)交給相應(yīng)的中斷程序。 通??捎枚〞r(shí)中斷以固定的時(shí)間間隔去控制模擬量輸入的采樣或者執(zhí)行一個(gè) PID回路。當(dāng)把某個(gè)中斷 程序連接到一個(gè)定時(shí)中斷事件上, 如果該定時(shí)中斷被允許, 那就開(kāi)始計(jì)時(shí)。在連接期間,系統(tǒng)捕捉周期時(shí)間值,因而后來(lái)的變化不會(huì)影響周期。為改變周期時(shí)間,首先必須修改周期時(shí)間值,然后重新把中斷 程序連接到定時(shí)中斷事件上。當(dāng)重新連接時(shí),定時(shí)中斷功能清除前一次連接時(shí)的任何累計(jì)值,并用新值重新開(kāi)始計(jì)時(shí)。一旦允許, 定時(shí)中斷就連續(xù)地運(yùn)行, 指定時(shí)間間隔的每次溢出時(shí)執(zhí)行被連接的中斷程序。如果退出 RUN 模式或分離定時(shí)中斷,則定時(shí)中斷被禁止。如果執(zhí)行了全局中斷禁止指令,定時(shí)中斷事件會(huì)繼續(xù)出現(xiàn),每個(gè)出現(xiàn)的定時(shí)中斷事件將進(jìn)入中斷 隊(duì)列等待,直到中斷允許或隊(duì)列滿。定時(shí)器 T32/T96 中斷允許及時(shí)地響應(yīng)一個(gè)給定時(shí)間間隔。 這些中斷只支持 lms 分辨率的時(shí)接通定時(shí)器(TON)和延時(shí)斷開(kāi)定時(shí)器(TOF)T32 和 T96。T32 和 T96 定時(shí)器在其它方面工作正常。一旦中斷允許,當(dāng)有效定時(shí)器的當(dāng)前值等于預(yù)置值時(shí),在 CPU 的正常 lms 定時(shí)刷新中,執(zhí)行被連接的中斷程序。首先把一個(gè)中斷 程序連接到 T32/T96 中斷事件上,然后允許該中斷。
6)關(guān)于中斷的優(yōu)先級(jí)和排對(duì):中斷按以下固定的優(yōu)先級(jí) 順序執(zhí)行。通訊(最高優(yōu)先級(jí)) ,I/O 中斷,時(shí)基中斷(最低優(yōu)先級(jí)) 。 在各個(gè)指定的優(yōu)先級(jí)之內(nèi),CPU 按先來(lái)先服務(wù)的原則處理中斷。任何時(shí)間點(diǎn)上,只有一個(gè)用戶中斷程序正在執(zhí)行。一旦中斷程序開(kāi)始執(zhí)行,它要一直執(zhí)行到結(jié)束。而且不會(huì)被別的中斷程序,甚至是更高優(yōu)先級(jí)的中斷程序所打斷。當(dāng)另一個(gè)中斷正在處理中,新出現(xiàn)的中斷需排隊(duì)等待處理。有時(shí),可能有多于隊(duì)列所能保存數(shù)目的中斷出現(xiàn),因而,由 系統(tǒng)維護(hù)的隊(duì)列溢出 存儲(chǔ)器位表明丟失的中斷事件的類型。只在中斷程序中使用這些 隊(duì)列溢出存儲(chǔ)器位,因?yàn)樵陉?duì)列變空或控制返回到主程序時(shí),這些位會(huì)被復(fù)位。 7)關(guān)于使用中斷的限制:一個(gè)程序內(nèi)最多可有 128 個(gè)中斷。在各自的優(yōu)先級(jí)范圍內(nèi),PLC 采用先來(lái)先服務(wù)的原則處理中斷。在任何時(shí)刻,只能執(zhí)行一個(gè)用戶中斷程序。一旦一個(gè)中斷程序開(kāi)始執(zhí)行,則一直執(zhí)行至完成。不能被另一個(gè)中斷程序打斷,即使另一程序的優(yōu)先級(jí)較高。正在處理中斷時(shí)發(fā)生的新的中斷需要排隊(duì)等待處理。在中斷程序內(nèi)不能使用 DISI、ENI、HDEF、LSCR 和 END指令。 (7) 中斷程序編程步驟建立中斷程序 INT n(同建立 子程序方法相同)在中斷程序 INT n 中編寫其應(yīng)用程序編寫中斷連接指令(ATCH)允許中斷(ENI)如果需要的話,可以編寫中斷分離指令(DTCH) 例 3-9-1:圖 3-9-5 是一個(gè)應(yīng)用定時(shí)中斷去讀取一個(gè)模擬量的編程例子。主程序 OB1 有一條語(yǔ)句,其功能是當(dāng) PLC 上電以后首次掃描(SMO.l=1),調(diào)用子程序 SBRO,進(jìn)行初始 化。子程序 SBR0 的功能是設(shè)置定時(shí)中斷。其中,設(shè)定定時(shí)中斷 0 時(shí)間間隔為 l00ms。傳送指令 MOV 把100存入SMB34中, 就是設(shè)定定時(shí)中斷0的時(shí)間間隔。而中斷連接指令 ATCH 則把定時(shí)中斷 0(中斷事件號(hào)為 10)和中斷程序 0(中斷入口為 INT0)連接起來(lái),并對(duì)該事件允許中斷。 子程序的最后一句是全局允許中斷(ENI) ,只有有了這一條,已經(jīng)允許中斷的中斷事件才能真正被執(zhí)行。中斷服務(wù)程序 INT0 的功能是每中斷一次,執(zhí)行一次讀取模擬量 AIW0 的操作,并將這個(gè)數(shù)值傳送給VW0。 天津會(huì)一自動(dòng)化科技有限公司專業(yè)從事于自動(dòng)化系統(tǒng)集成以及高低壓配電柜的研發(fā)、設(shè)計(jì)和裝配一站式服務(wù);本公司生產(chǎn)的PLC控制柜、電控柜、變頻柜等控制柜獲得多個(gè)專利和榮譽(yù)稱號(hào) |
上一篇:遠(yuǎn)程I/O 下一篇:沒(méi)有了 |