時間出錯組織塊(OB80)
無論何時執行OB時出錯,S7-300 CPU的操作系統將調用OB80。
此類錯誤包括:超出周期時間、執行OB時出現確認錯誤、提前了時間而使OB的啟動時間被跳過、在CiR后恢復RUN模式。
例如,如果在上一次調用之后發生了某一周期性中斷OB的啟動事件,而同一OB此時仍在執行中,則操作系統將調用OB80。
如果OB80尚未編程,則CPU將轉為STOP 模式。
可以使用SFC 39至42禁用或延遲和重新啟用時間出錯OB。
注意:
如果因超出了掃描時間而導致在同一掃描周期內調用了兩次OB80,則CPU 轉為STOP 模式。
通過在程序中的適當的點調用SFC43 “RE_TRIGR”,可防止這種情況。
時間出錯OB的本地數據:
OB80_EV_CLASS ????? :事件等級和標識符:B#16#35.
OB80_FLT_ID :出錯代碼.
OB80_PRIORITY:? 優先級:OB 80以優先級26在RUN模式下運行,如果發生OB請求緩沖區溢出,則以優先級28運行.
OB80_OB_NUMBR:? OB編號(80).
OB80_ERROR_INFO:? 出錯信息:取決于出錯代碼.
OB80_ERR_EV_CLASS:? 導致出錯的啟動事件的事件等級.
OB80_ERR_EV_NUM:? 導致出錯的啟動事件的事件編號.
OB80_OB_PRIORITY:? 出錯信息:取決于出錯代碼.
OB80_OB_NUM:? 出錯信息:取決于出錯代碼.
OB80_DATE_TIME:? 調用OB時的DATE_AND_TIME.
時間錯誤 OB80
● 時間錯誤 OB80 的功能
當 CPU 中的程序執行時間超過最大循環時間或者發生時間錯誤事件(例如,循環中斷 OB 仍在執行前一次調用時,該循環中斷 OB 的啟動事件再次發生)時,將觸發時間錯誤中斷優先執行 OB80 。由于 OB80 的優先級最高,它將中斷所有正常循環程序或其它所有 OB 事件的執行而優先執行。
● 與時間錯誤 OB80 相關的信息
當觸發時間錯誤中斷時,通過 OB80 的接口變量讀取相應的啟動信息。OB80 的接口變量及啟動信息參考下圖1、2。
圖1. OB80 接口變量
圖2. OB80 啟動信息
● 時間錯誤 OB 的使用示例:
例如:在 OB1 中做一個循環跳轉程序,可通過設置時間控制該部分程序的循環時間,當該部分程序的執行時間大于CPU 設定的最大循環時間時,觸發時間錯誤事件。
1、按如下步驟創建時間錯誤 OB80 。如圖3。
圖3. 創建時間錯誤 OB80
2、OB80 中編程如下圖,創建地址為 MB100、MW102、MW104 的變量用于存儲出現時間錯誤時讀取到的啟動信息。如圖4。
圖4. OB80 中編程
3、在 OB1 中編寫一個循環跳轉程序,其循環執行時間可通過變量“set_time”設定。如圖5。
圖5. OB1 中編程
4、程序下載,測試:
① 如果在監控表中將變量“set_time”設置為160ms,則 CPU 報故障且沒有停機,可從監控表中讀取到 OB80 的啟動信息,同時查看故障緩沖區。如圖6。
圖6. 測試結果1
② 如果在監控表中將變量“set_time”設置為310ms,則 CPU 立即停機,可從監控表中讀取到 OB80 的啟動信息,同時查看故障緩沖區。如圖7。
圖7. 測試結果2
注:S7-1200 CPU 默認最大循環時間為150ms。
● 重新觸發掃描循環看門狗指令“RE_TRIGR”
“RE_TRIGR”指令用于在單個掃描循環期間重新啟動掃描循環監視定時器。其功能是執行一次“RE_TRIGR”指令,使允許的最大掃描周期延長一個最大循環時間段。
使用示例:在上個示例中的時間錯誤 OB80 塊中調用指令“RE_TRIGR”,當 OB1 中的循環跳轉程序執行時間大于 CPU 設定的最大循環時間時,觸發時間錯誤 OB80 并執行指令“RE_TRIGR”重新觸發掃描循環看門狗。
1、在 OB80 中編程調用“RE_TRIGR”指令。在“指令->基本指令->程序控制操作->運行時控制”中可以找相關指令。如下圖8。
圖8. 調用重新觸發掃描循環看門狗指令
2、OB80 中編程如下圖,在程序段2中增加重新觸發掃描循環看門狗指令“RE_TRIGR”。如圖9。
圖9. OB80 中編程
3、程序下載,測試:
如果在監控表中將變量“set_time”設置為400ms(大于兩倍最大循環時間300ms),由于“RE_TRIGR”指令的作用 CPU 報故障但沒有停機,可從監控表中讀取到 OB80 的啟動信息,同時查看故障緩沖區。如圖10。
圖10. 測試結果3
常見問題
關于指令“RE_TRIGR”的相關詳細信息,請查看下面鏈接中S7-1200系統手冊,第8.8.6章:重置周期監視時間。
按住 Shift 鍵時用鼠標點擊下列鏈接,打開新瀏覽器窗口。
哪些情況會觸發時間錯誤中斷,以及 CPU 在這些情況下如何響應?
1.超出最大循環時間
在 CPU 屬性中組態最大循環時間(默認150ms),當 CPU 中的程序執行時間超過最大循環時間時,如果 OB80 不存在,CPU 將切換到 STOP 模式(例外情況:V1 版 CPU 仍然處于 RUN 模式);如果 OB80 存在,則 CPU 執行 OB80 且不停機;如果同一程序循環中出現兩次“超過最大程序循環時間”且沒有通過指令“RE_TRIGR”復位循環定時器,則無論 OB80 是否存在,CPU 都將切換到 STOP 模式。
2.請求的 OB 無法啟動
如果循環中斷、延時中斷請求 OB ,但請求的 OB 已經在執行,就會出現請求的 OB 無法啟動這種情況。
3.發生隊列溢出
如果中斷的出現頻率超過其處理頻率,就會出現發生隊列溢出這種情況。如果 OB80 不存在,則 CPU 將切換到 STOP 模式;如果 OB80 存在,則執行 OB80 ,CPU 將保持為 RUN 模式。
4.總結:發生任何上述事件都將在診斷緩沖區生成一個描述相應事件的條目。無論是否存在 OB80 ,都將生成診斷緩沖區條目。
審核編輯:劉清
評論
查看更多