簡介
本地錯誤處理可單獨編程,也可與其它代碼一起編程。為確保可識別程序中的所有錯誤,建議使用本地錯誤處理組合方案,如以下示例所示。
為提高錯誤分析的準確程度的錯誤分析,除輸出參數 RET_VAL 之外,還可使用指令“GET_ERROR”或“GET_ERR_ID”。這些方案提供有錯誤代碼,并在相應指令的描述中對其進行詳細說明。
此外,RET_VAL 輸出參數也可能不輸出有效錯誤代碼。如果在讀取輸入參數時發生訪問錯誤(如,指令輸出無法入),則這是因為指令執行已中斷。此時,建議在用戶程序中插入兩條指令“GET_ERROR”和“GET_ERR_ID”。這是因為,發生此類錯誤時,這兩條指令將返回可靠的錯誤信息。
警告 | |
讀取輸入參數時發生訪問錯誤 RET_VAL 參數未返回有效的錯誤代碼,且診斷緩沖區中未輸出任何詳細錯誤信息。 |
錯誤的第一個指示符可以是狀態字的 BR 位,也可以是使能輸出 ENO 。如果返回信號狀態“0”,則說明指令執行過程中出錯。信號狀態為“1”表示無錯誤,因而無需進行進一步錯誤分析,但存儲器訪問錯誤例外。此時,信號狀態為“1”表示發生錯誤。
操作步驟
以下示例說明了如何在讀取輸入參數時識別訪問錯誤:
按以下方式聲明程序塊的塊接口: 編寫以下程序代碼: |
在程序段 1 中,調用指令“MOVE_BLK_VARIANT:塊移動”。在 SRC 參數中,使用一個變量索引訪問“SrcField”源區域。如果指令成功執行無錯誤,則使能輸出 ENO 將返回信號狀態“1”,同時程序執行跳轉到程序段 4 中繼續執行。
如果指令在執行過程中發生訪問錯誤(如,由變量索引而引發),則程序段 2 中的指令“GET_ERR_ID:獲取本地錯誤 ID”將返回錯誤 ID。程序段 2 中“UNEQUAL”的錯誤 ID 將與值“0”進行比較并返回結果 #Test2 = TRUE。在程序段 3 中,“EQUAL”的錯誤 ID 將與值“0”進行比較,并返回結果 #Test3 = TRUE。
此時,輸出參數 RET_VAL 處的 #TagRet_Val 操作數將不返回有效錯誤代碼。
例外
但也有一些指令不適用于以上示例中所列的錯誤處理方式。具體包括以下指令:
通常不支持 EN/ENO 機制的指令
禁用 ENO 的指令
S_COMP
PEEK、PEEK_BOOL、POKE、POKE_BOOL 和 POKE_BLK
即使發生訪問錯誤,這些指令中的 BR 位或使能輸出 ENO 也將設置為 TRUE。
以下示例中說明了如何在 STL 編程語言中編程可靠的錯誤處理方式:
STL | 說明 |
---|---|
SET | // 操作數 #Tag_ErrorID 將初始化為“0”。 |
L 0 | |
T #Tag_ErrorID | |
CALL S_COMP | // 調用該指令。 |
src_type := String | // 參數 IN1 和 IN2 的數據類型 |
relation := EQ | // 該指令的比較類型 |
IN1 := #StringArray.THIS[#index] | // 對 ARRAY 元素的可變訪問。 |
IN2 := 'STRING' | // 將兩個值互相比較。 |
OUT := #TagResult | // 如果兩個值相等,則操作數 #TagResult 的信號狀態為“1”。 |
A BR | // 查詢 BR 位。 |
CALL GET_ERR_ID | // 調用該指令。 |
RET_VAL := #Tag_ErrorID | // 發生訪問錯誤時,該指令將輸出一個錯誤代碼。 |
即使 BR 位的信號狀態為“1”,也將檢測到訪問錯誤。通過評估指令“GET_ERR_ID:獲取本地錯誤 ID”的操作數 #Tag_ErrorID,可查詢該錯誤代碼。
審核編輯:劉清
-
存儲器
+關注
關注
38文章
7530瀏覽量
164403 -
西門子
+關注
關注
95文章
3066瀏覽量
116515 -
STL算法
+關注
關注
0文章
6瀏覽量
5399
原文標題:西門子博途: 有關處理程序執行錯誤的示例
文章出處:【微信號:gh_a8b121171b08,微信公眾號:機器人及PLC自動化應用】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論