特殊功能指令
3.9 S7-200的特殊功能指令
1. 中斷指令
PLC 的 CPU在整個控制過程中, 有些控制要取決於外部事件。 比如只有外部設備請求 CPU傳送數
據時,CPU才能向這個設備傳送數據。這類控制的進行是取決於外部設備的請求和 CPU 的回響,當
CPU在接受了外部設備的請求時, CPU就要暫停其當前的工作,去完成外部過程的請求,這種工作方
式就叫中斷方式。
在啟動中斷程式之前,必須使中斷事件與發生此事件時希望執行的程式段建立聯繫。使
用中斷連線指令(ATCH)建立中斷事件(由中斷事件號碼指定)與程式段(由中斷程式號碼指定)
之間的聯繫。將中斷事件連線於中斷程式時,該中斷自動被啟動。
使用中斷分離指令(DTCH)可刪除中斷事件與中斷程式之間的聯繫,因而關閉單箇中斷
事件。中斷分離指令使中斷返回未激活或被忽略狀態。
S7-200可以引發的中斷事件總共有5大類34項。 其中輸入信號引起的中斷事件有8項,
通訊口引起的中斷事件有 6 項,定時器引起的中斷事件 4 項,高速計數器引起的中斷事件有
14 項,脈衝輸出指令引起的中斷事件有 2 項。如表
S7-200 可以在梯形圖編輯器內的任何位置右擊滑鼠並選擇插入中斷。S7-200 也可以從
指令樹,右擊程式塊圖示並從彈出選單選擇插入中斷。S7-200 還可以從程式編輯器視窗,從選單右擊插入中斷。一旦一個新的中斷被建立,會在程式編輯器的底部將出現新的標籤,
代表新的中斷程式。
(1)中斷連線指令
·中斷連線指令的表示:中斷連線指令由指令的允許端 EN、指令助記符
ATCH、中斷程式號(入口號)INT n和中斷事件的事件號 EVNT 構成。用梯
形圖或語句表表示如圖 3-9-1。
·中斷連線指令的操作:中斷連線指令(ATCH)使中斷事件(EVNT)與中斷程
序號碼(INT)相聯繫,並啟動中斷事件。根據指定事件優先權組,PLC按照先來先服務的順序對中斷提供服務。
任何時刻只能激活一個用戶中斷。其它中斷處於激活狀態時,CPU發出
中斷暫時入隊,等待以後處理。如果發生的中斷數目過多,佇列無法處理,
則設定佇列溢出狀態位。當隊空時,重置這些位。
數據範圍
INT;0~127
EVENT:0~33
圖 3-9-1
(2)中斷分離指令
· 中斷分離指令的表示: 中斷分離指令由指令的允許端 EN、 指令助記符 DTCH
和中斷事件的事件號 EVNT 構成。用梯形圖或語句表表示如圖 3-9-2。·中斷分離指令的操作:中斷分離指令(DTCH)取消中斷事件(EVNT)與全部中
斷程式之間的聯繫,並關閉此中斷事件 ·數據範圍:
EVENT:0~33
(3)中斷返回指令
·中斷返回指令的表示:中斷返回指令由指令助記符 RETI
構成。用梯形圖或語句表表示如圖 3-9-3。
·中斷返回指令的操作:中斷返回指令(RETI條件返回)可用
於根據先前邏輯條件從中斷返回。
·注意事項:
Micro/WIN 32 自動為各中斷程式添加無條件返回。在
編寫程式時,用戶不必要再書寫無條件返回指令了。中斷處理提供了對特殊的內部或外部中斷事件的回響。
編寫中斷服務程式時,使中斷程式短小而簡單,加快執行速
度而且不要延時過長。否則,未預料條件可能引起主程式控
制的設備操作異常。對於中斷服務程式 ,俗語說“越短越好,”這是絕對正確的。
在中斷程式內不能使用 DISI、ENI、HDEF、LSCR、END指令。
圖 3-9-3
(4)中斷允許指令
·中斷允許指令的表示:中斷允許指令由
指令助記符 ENI構成。用梯形圖或語句表
表示如圖 3-9-4。· 中斷允許指令的操作:中斷允許指令
(ENI)指令全局性地啟動全部中斷事件。 一
旦進入運行模式,就允許執行各個已經激
活的中斷事件。
(5)中斷禁止指令
·中斷禁止指令的表示:中斷禁止指令由
指令助記符 DISI 構成。用梯形圖或語句表表示如圖 3-9-4。
·中斷禁止指令的操作:中斷禁止指令(DISI)可以全局性地關閉所有中斷事件。中斷禁止指
令允許中斷入隊,但不允許啟動中斷程式。
(6)中斷中進一步說明的幾個問題
1)關於在中斷中調用子程式:從中斷程式中可以調用一個嵌套子程式。累加器和邏輯堆疊
在中斷程式和被調用的子程式中是共用的。
2)關於共享數據:可以在主程式和一個或多箇中斷程式間共享數據。例如,用戶主程式的某
個地方可以為某箇中斷程式提供要用到的數據,反之亦然。如果用戶程式共享數據,必須考
慮中斷事件異步特性的影響,這是因為中斷事件會在用戶主程式執行的任何地方出現。共享
數據一致性問題的解決要依賴於主程式被中斷事件中斷時中斷程式的操作。
這裡有幾種可以確保在用戶主程式和中斷程式之間正確共享數據的編程技巧。 這些技巧
或限制共享存儲器單元的訪問方式,或讓使用共享存儲器單元的指令序列不會被中斷。
語句表程式共享單個變數。如果共享數據是單個位元組、字、雙字變數,而用戶程式用
STL 編寫,那么通過把共享數據操作得到的中間值,只存儲到非共享的存儲器單元或累加器中,可以保證正確的共享訪問。
梯形圖程式共享單個變數。如果共享數據是單個位元組、字或雙字變數,而且用戶程式用
梯形圖編寫,那么通過只用 Move 指令(MOVB、MOVW、MOVD、MOVR)訪問共享存儲器單元,
可以保證正確的共享訪問。這些 Move 指令執行時不受中斷事件影響。
語句表或梯形圖程式共享多個變數,如果共享數據由一些相關的位元組、字或雙字組成,
那么可以用中斷禁止/允許指令(DISI 和 ENI)來控制中斷程式的執行。在用戶程式開始
對共享存儲器單元操作的地方禁止中斷,一旦所有影響共享存儲器單元的操作完成後,再允
許中斷,但這種方法會導致對中斷事件回響的延遲。
3)關於通訊口中斷:
PLC 的串列通訊口可由梯形圖或語句表程式來控制。通訊口的這種操作模式稱為自由端
口模式。在自由連線埠模式下,用戶可用程式定義波特率、每個字元位數、奇偶校驗和通訊協
議。利用接收和傳送中斷可簡化程式對通訊的控制。
4)關於I/O中斷:
I/O 中斷包含了上升沿或下降沿中斷、高速計數器中斷和脈衝串輸出(PTO)中斷。 S7
-200 CPU 可用輸入 I0.0至 I0.3 的上升沿或下降沿產生中斷。上升沿事件和下降沿事件可
被這些輸入點捕獲。 這些上升沿或下降沿事件可被用來指示當某個事件發生時必須引起注意
的條件。
高速計數器中斷允許回響諸如當前值等於預置值、 計數器計數方向改變和計數器外部復
位等事件而產生中斷。每種高速計數器可對高速事件實時回響,而 PLC 掃描速率對這些高速
事件是不能控制的。脈衝串輸出中斷給出了已完成指定脈衝數輸出的指示。脈衝串輸出的一
個典型套用是步進電機。 可以通過將一個中斷程式連線到相應的 I/O 事件上來允許上述的每
一個中斷。
5)關於時基中斷:
時基中斷包括定時中斷和定時器 T32/T96 中斷。CPU 可以支持定時器中斷。可以用定時
中斷指定一個周期性的活動。周期以 1ms 為增量單位,周期可以從 5ms 到255ms。對定時中
斷 0,把周期時間寫入 SMB34;對定時中斷 1,把周期時間寫入 SMB35。每當定時器溢出時,
定時中斷事件把控制權交給相應的中斷程式。 通常可用定時中斷以固定的時間間隔去控制模
擬量輸入的採樣或者執行一個 PID迴路。
當把某箇中斷程式連線到一個定時中斷事件上, 如果該定時中斷被允許, 那就開始計時。
在連線期間,系統捕捉周期時間值,因而後來的變化不會影響周期。為改變周期時間,首先
必須修改周期時間值,然後重新把中斷程式連線到定時中斷事件上。當重新連線時,定時中
斷功能清除前一次連線時的任何累計值,並用新值重新開始計時。
一旦允許, 定時中斷就連續地運行, 指定時間間隔的每次溢出時執行被連線的中斷程式。
如果退出 RUN 模式或分離定時中斷,則定時中斷被禁止。如果執行了全局中斷禁止指令,定
時中斷事件會繼續出現,每個出現的定時中斷事件將進入中斷佇列等待,直到中斷允許或隊
列滿。
定時器 T32/T96 中斷允許及時地回響一個給定時間間隔。 這些中斷只支持 lms 解析度的
延時接通定時器(TON)和延時斷開定時器(TOF)T32 和 T96。T32 和 T96 定時器在其它方面
工作正常。一旦中斷允許,當有效定時器的當前值等於預置值時,在 CPU 的正常 lms 定時
刷新中,執行被連線的中斷程式。首先把一個中斷程式連線到 T32/T96 中斷事件上,然後允
許該中斷。
6)關於中斷的優先權和排隊:
中斷按以下固定的優先權順序執行。通訊(最高優先權) ,I/O 中斷,時基中斷(最低
優先權) 。 在各個指定的優先權之內,CPU 按先來先服務的原則處理中斷。任何時間點上,只有一
個用戶中斷程式正在執行。一旦中斷程式開始執行,它要一直執行到結束。而且不會被別的
中斷程式,甚至是更高優先權的中斷程式所打斷。當另一個中斷正在處理中,新出現的中斷
需排隊等待處理。
有時,可能有多於佇列所能保存數目的中斷出現,因而,由系統維護的佇列溢出存儲器
位表明丟失的中斷事件的類型。只在中斷程式中使用這些佇列溢出存儲器位,因為在佇列變
空或控制返回到主程式時,這些位會被復位。
7)關於使用中斷的限制:
一個程式內最多可有 128 箇中斷。在各自的優先權範圍內,PLC 採用先來先服務的原
則處理中斷。在任何時刻,只能執行一個用戶中斷程式。一旦一個中斷程式開始執行,則一
直執行至完成。不能被另一個中斷程式打斷,即使另一程式的優先權較高。正在處理中斷時
發生的新的中斷需要排隊等待處理。
在中斷程式內不能使用 DISI、ENI、HDEF、LSCR 和 END指令。
(7) 中斷程式編程步驟
·建立中斷程式 INT n(同建立子程式方法相同)
·在中斷程式 INT n 中編寫其應用程式
·編寫中斷連線指令(ATCH)
·允許中斷(ENI)
·如果需要的話,可以編寫中斷分離指令(DTCH) 例 3-9-1:圖 3-9-5 是一個套用定時中斷去讀取一個
模擬量的編程例子。
主程式 OB1 有一條語句,其功能是當 PLC 上電以
後首次掃描(SMO.l=1),調用子程式 SBRO,進行初始化。
子程式 SBR0 的功能是設定定時中斷。其中,設
定定時中斷 0 時間間隔為 l00ms。傳送指令 MOV 把
100存入SMB34中, 就是設定定時中斷0的時間間隔。
而中斷連線指令 ATCH 則把定時中斷 0(中斷事件號
為 10)和中斷程式 0(中斷入口為 INT0)連線起來,
並對該事件允許中斷。子程式的最後一句是全局允許
中斷(ENI) ,只有有了這一條,已經允許中斷的中斷
事件才能真正被執行。
中斷服務程式 INT0 的功能是每中斷一次,執行
一次讀取模擬量 AIW0 的操作,並將這個數值傳送給
VW0。