概覽
可通過以下幾種不同的錯誤處理機(jī)制進(jìn)行參數(shù)跟蹤或編程或訪問錯誤:
機(jī)制 | 任務(wù) | 錯誤處理 |
---|---|---|
使能輸入 EN 或 IF 指令 | 阻止程序代碼的執(zhí)行 | 本地 |
使能輸出 ENO 或二進(jìn)制結(jié)果位 | 指示一個錯誤 | |
參數(shù)輸出 RET_VAL、STATUS 和 ERROR | ||
GET_ERROR 和 GET_ERR_ID 指令 | 響應(yīng)一個錯誤 | |
組織塊 | 全局 |
參數(shù)值錯誤時的本地錯誤處理
錯誤發(fā)生后,除了通過本地錯誤處理機(jī)制立即進(jìn)行響應(yīng),也可通過程序代碼內(nèi)進(jìn)行特定響應(yīng)。此時,可以在程序塊(OB、FB 或 FC)中直接編寫本地錯誤處理方式,但系統(tǒng)僅對發(fā)生在該程序塊中的錯誤進(jìn)行處理。
本地錯誤處理的優(yōu)勢
可根據(jù)該錯誤信息編寫程序塊中發(fā)生相應(yīng)錯誤時的響應(yīng)措施。
所編寫的錯誤評估和錯誤響應(yīng)不會中斷程序的循環(huán)運行。
本地錯誤處理不會影響系統(tǒng)性能。如果錯誤未發(fā)生,則不會執(zhí)行所編寫的錯誤分析和響應(yīng)措施。
下標(biāo)列出了各種不同的本地錯誤處理方式:
錯誤處理方式 | 適用范圍 | 說明 |
---|---|---|
EN/ENO 機(jī)制 1) | S7-300 / S7-400 / S7-1200 / S7-1500 |
通過使能輸出 ENO 檢測特定的運行時錯誤并進(jìn)行相應(yīng)處理。后續(xù)指令的執(zhí)行取決于該使能輸出的信號狀態(tài)。通過 EN/ENO 機(jī)制,可有效避免程序崩潰。塊狀態(tài)將以布爾型變量形式進(jìn)行傳遞。 有關(guān) EN/ENO 機(jī)制的更多信息,請參見: EN/ENO 機(jī)制的基本知識 |
輸出參數(shù) STATUS 和 ERROR | S7-300 / S7-400 / S7-1200 / S7-1500 |
STATUS 和 ERROR 參數(shù)作為系統(tǒng)函數(shù)塊 (SFB) 的返回值時,可查詢塊特定的錯誤信息,并按照預(yù)定義的結(jié)構(gòu)進(jìn)行輸出。 有關(guān)輸出參數(shù)的更多信息,請參見信息系統(tǒng)中相應(yīng)指令的說明。 |
輸出參數(shù) RET_VAL | S7-300 / S7-400 / S7-1200 / S7-1500 |
輸出參數(shù) RET_VAL 作為順序功能圖 (SFC) 的返回值時,可顯示常規(guī)的錯誤代碼或特定的錯誤代碼。所謂常規(guī)的錯誤代碼對應(yīng)于所有指令,而特定的錯誤代碼僅適用于特定指令。最多可以輸出一個 INT 或 WORD 數(shù)據(jù)類型的變量。 有關(guān) RET_VAL 輸出參數(shù)的更多信息,請參見: 通過輸出參數(shù) RET_VAL 評估錯誤 |
1) 如果指令的參數(shù)未導(dǎo)致任何存儲器訪問錯誤,則相關(guān)的使能輸出 ENO 將返回信號狀態(tài)“1”,并在輸出中返回可查詢的有效值。 |
發(fā)生編程錯誤時的全局和本地錯誤處理
通過全局和本地錯誤處理,可立即對發(fā)生的錯誤進(jìn)行響應(yīng)而無需將 CPU 切換為“STOP”模式。可通過以下方式處理編程錯誤和訪問錯誤:
全局錯誤處理的類型 | 適用范圍 | 說明 |
---|---|---|
程序執(zhí)行錯誤 OB (OB 85) | S7-300 / S7-400 |
如果未使用 OB 85,則在發(fā)生程序執(zhí)行錯誤時 CPU 將從 RUN 模式切換為 STOP 模式,并在診斷緩沖區(qū)內(nèi)生成一個條目。 有關(guān) OB 85 的更多信息,請參見: 優(yōu)先等級錯誤組織塊 (OB 85) |
發(fā)生編程和訪問錯誤時的 CPU 內(nèi)部錯誤處理 | S7-1200 | 發(fā)生錯誤時,CPU 將在診斷緩沖區(qū)中生成一個條目并保持為 RUN 模式,無需進(jìn)行額外編程。 |
編程錯誤 OB (OB 121) | S7-300/ S7-400 / S7-1500 |
如果未使用 OB 121,則在發(fā)生編程錯誤時 CPU 將從 RUN 模式切換為 STOP 模式,并在診斷緩沖區(qū)內(nèi)生成一個條目。 有關(guān) OB 121 的更多信息,請參見: S7-300 / S7-400: 編程錯誤組織塊 (OB 121) S7-1500: 編程錯誤 OB |
I/O 訪問錯誤 OB (OB 122) | S7-300/ S7-400 / S7-1500 |
S7-300 / S7-400: 如果未使用 OB 122,則在發(fā)生訪問錯誤時 CPU 將從 RUN 模式切換到 STOP 模式。 I/O 訪問錯誤組織塊 (OB 122) S7-1500: 發(fā)生 I/O 訪問錯誤時,CPU 將始終保持為 RUN 模式并在診斷緩沖區(qū)中生成一個條目。即使未使用 OB 122,也同樣如此。 有關(guān) OB 122 的更多信息,請參見: I/O 訪問錯誤 OB |
通過 GET_ERROR 和 GET_ERR_ID 指令,可直接在程序代碼中集成本地錯誤處理。也可通過接收有關(guān)錯誤的詳細(xì)信息并在錯誤附近的程序中對其進(jìn)行評估。此時,可以在程序塊(OB、FB 或 FC)中直接編寫本地錯誤處理方式,但系統(tǒng)僅對發(fā)生在該程序塊中的錯誤進(jìn)行處理。
本地錯誤處理的類型 | 適用范圍 | 說明 |
---|---|---|
GET_ERROR 和 GET_ERR_ID 指令 | S7-1200/S7-1500 |
通過該指令,可獲得錯誤 ID 或詳細(xì)的錯誤信息,并在程序代碼中編寫直接響應(yīng)。 查詢第一個錯誤信息時,將再次啟用系統(tǒng)存儲器中該錯誤所在的存儲空間。如果隨后發(fā)生其它錯誤,則將輸出下一個錯誤的信息。 |
采用本地錯誤處理時,可通過 GET_ERROR 指令進(jìn)行查詢。支持以下幾種默認(rèn)的響應(yīng)方式:
發(fā)生寫錯誤時:將忽略該錯誤并繼續(xù)程序運行。
發(fā)生讀錯誤時:程序?qū)⒗^續(xù)運行,且算術(shù)指令的值將替換為“0”。
發(fā)生執(zhí)行錯誤時:將停止該指令的運行,程序?qū)⑦\行下一條指令。
本地錯誤處理的優(yōu)勢
錯誤信息存儲在系統(tǒng)存儲器中,可對其進(jìn)行查詢和評估(如,通過 GET_ERROR 和 GET_ERR_ID 指令)。
可根據(jù)該錯誤信息編寫程序塊中發(fā)生相應(yīng)錯誤時的響應(yīng)措施。
所編寫的錯誤評估和錯誤響應(yīng)不會中斷程序的循環(huán)運行。
本地錯誤處理對系統(tǒng)性能的影響要低于全局錯誤處理。如果錯誤未發(fā)生,則不會執(zhí)行所編寫的錯誤分析和響應(yīng)措施。
如果在程序塊中設(shè)置有本地錯誤處理,則在發(fā)生錯誤時將不執(zhí)行全局錯誤處理。
說明 要防止在發(fā)生錯誤時 CPU 切換為 STOP 模式,無論是全局錯誤處理還是本地錯誤處理必須處理所有的編程錯誤和 I/O 訪問錯誤。 |
示例:有關(guān)處理程序執(zhí)行錯誤的示例
簡介
本地錯誤處理可單獨編程,也可與其它代碼一起編程。為確保可識別程序中的所有錯誤,建議使用本地錯誤處理組合方案,如以下示例所示。
為提高錯誤分析的準(zhǔn)確程度的錯誤分析,除輸出參數(shù) RET_VAL 之外,還可使用指令“GET_ERROR”或“GET_ERR_ID”。這些方案提供有錯誤代碼,并在相應(yīng)指令的描述中對其進(jìn)行詳細(xì)說明。
此外,RET_VAL 輸出參數(shù)也可能不輸出有效錯誤代碼。如果在讀取輸入?yún)?shù)時發(fā)生訪問錯誤(如,指令輸出無法入),則這是因為指令執(zhí)行已中斷。此時,建議在用戶程序中插入兩條指令“GET_ERROR”和“GET_ERR_ID”。這是因為,發(fā)生此類錯誤時,這兩條指令將返回可靠的錯誤信息。
錯誤的第一個指示符可以是狀態(tài)字的 BR 位,也可以是使能輸出 ENO 。如果返回信號狀態(tài)“0”,則說明指令執(zhí)行過程中出錯。信號狀態(tài)為“1”表示無錯誤,因而無需進(jìn)行進(jìn)一步錯誤分析,但存儲器訪問錯誤例外。此時,信號狀態(tài)為“1”表示發(fā)生錯誤。
操作步驟
以下示例說明了如何在讀取輸入?yún)?shù)時識別訪問錯誤:
按以下方式聲明程序塊的塊接口:![]() 編寫以下程序代碼: ![]() |
在程序段 1 中,調(diào)用指令“MOVE_BLK_VARIANT:塊移動”。在 SRC 參數(shù)中,使用一個變量索引訪問“SrcField”源區(qū)域。如果指令成功執(zhí)行無錯誤,則使能輸出 ENO 將返回信號狀態(tài)“1”,同時程序執(zhí)行跳轉(zhuǎn)到程序段 4 中繼續(xù)執(zhí)行。
如果指令在執(zhí)行過程中發(fā)生訪問錯誤(如,由變量索引而引發(fā)),則程序段 2 中的指令“GET_ERR_ID:獲取本地錯誤 ID”將返回錯誤 ID。程序段 2 中“UNEQUAL”的錯誤 ID 將與值“0”進(jìn)行比較并返回結(jié)果 #Test2 = TRUE。在程序段 3 中,“EQUAL”的錯誤 ID 將與值“0”進(jìn)行比較,并返回結(jié)果 #Test3 = TRUE。
此時,輸出參數(shù) RET_VAL 處的 #TagRet_Val 操作數(shù)將不返回有效錯誤代碼。
例外
但也有一些指令不適用于以上示例中所列的錯誤處理方式。具體包括以下指令:
通常不支持 EN/ENO 機(jī)制的指令
禁用 ENO 的指令
S_COMP
PEEK、PEEK_BOOL、POKE、POKE_BOOL 和 POKE_BLK
即使發(fā)生訪問錯誤,這些指令中的 BR 位或使能輸出 ENO 也將設(shè)置為 TRUE。
以下示例中說明了如何在 STL 編程語言中編程可靠的錯誤處理方式:
STL | 說明 |
---|---|
SET | // 操作數(shù) #Tag_ErrorID 將初始化為“0”。 |
L 0 | |
T #Tag_ErrorID | |
CALL S_COMP | // 調(diào)用該指令。 |
src_type := String | // 參數(shù) IN1 和 IN2 的數(shù)據(jù)類型 |
relation := EQ | // 該指令的比較類型 |
IN1 := #StringArray.THIS[#index] | // 對 ARRAY 元素的可變訪問。 |
IN2 := 'STRING' | // 將兩個值互相比較。 |
OUT := #TagResult | // 如果兩個值相等,則操作數(shù) #TagResult 的信號狀態(tài)為“1”。 |
A BR | // 查詢 BR 位。 |
CALL GET_ERR_ID | // 調(diào)用該指令。 |
RET_VAL := #Tag_ErrorID | // 發(fā)生訪問錯誤時,該指令將輸出一個錯誤代碼。 |
即使 BR 位的信號狀態(tài)為“1”,也將檢測到訪問錯誤。通過評估指令“GET_ERR_ID:獲取本地錯誤 ID”的操作數(shù) #Tag_ErrorID,可查詢該錯誤代碼。
審核編輯:劉清
-
存儲器
+關(guān)注
關(guān)注
38文章
7528瀏覽量
164345 -
cpu
+關(guān)注
關(guān)注
68文章
10904瀏覽量
213023 -
西門子
+關(guān)注
關(guān)注
95文章
3062瀏覽量
116447 -
狀態(tài)機(jī)
+關(guān)注
關(guān)注
2文章
492瀏覽量
27649 -
S7-1500
+關(guān)注
關(guān)注
3文章
300瀏覽量
6516
原文標(biāo)題:西門子博圖:錯誤處理機(jī)制概覽
文章出處:【微信號:gh_a8b121171b08,微信公眾號:機(jī)器人及PLC自動化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
嵌入式編程錯誤處理機(jī)制設(shè)計
![嵌入式編程<b class='flag-5'>錯誤處理機(jī)制</b>設(shè)計](https://file1.elecfans.com/web2/M00/82/5E/wKgZomRLKQCARag_AAB9eEmSo-A990.jpg)
Rust語言中錯誤處理的機(jī)制
嵌入式C編程常用的異常錯誤處理
暢銷西門子助聽器價格表_西門子助聽器價格大全
![暢銷<b class='flag-5'>西門子</b>助聽器價格表_<b class='flag-5'>西門子</b>助聽器價格大全](https://file1.elecfans.com//web2/M00/A6/4F/wKgZomUMPNOAc5InAAALDIjB_Uk526.jpg)
博世和西門子哪個好_博世和西門子的關(guān)系
博圖如何實現(xiàn)遠(yuǎn)程調(diào)試西門子PLC
西門子博圖TIA的Modbus主站通訊
![<b class='flag-5'>西門子</b><b class='flag-5'>博</b><b class='flag-5'>圖</b>TIA的Modbus主站通訊](https://file1.elecfans.com/web2/M00/88/6D/wKgaomRmzcKANVf2AAIuyU7Cpvg225.png)
西門子博途中CPU對錯誤的反應(yīng)
![<b class='flag-5'>西門子</b><b class='flag-5'>博</b>途中CPU對<b class='flag-5'>錯誤</b>的反應(yīng)](https://file1.elecfans.com/web2/M00/B4/07/wKgaomV21W6AI9xSAAEYc89WZA0764.jpg)
評論