簡(jiǎn)介
本地錯(cuò)誤處理可單獨(dú)編程,也可與其它代碼一起編程。為確??勺R(shí)別程序中的所有錯(cuò)誤,建議使用本地錯(cuò)誤處理組合方案,如以下示例所示。
為提高錯(cuò)誤分析的準(zhǔn)確程度的錯(cuò)誤分析,除輸出參數(shù) RET_VAL 之外,還可使用指令“GET_ERROR”或“GET_ERR_ID”。這些方案提供有錯(cuò)誤代碼,并在相應(yīng)指令的描述中對(duì)其進(jìn)行詳細(xì)說明。
此外,RET_VAL 輸出參數(shù)也可能不輸出有效錯(cuò)誤代碼。如果在讀取輸入?yún)?shù)時(shí)發(fā)生訪問錯(cuò)誤(如,指令輸出無法入),則這是因?yàn)橹噶顖?zhí)行已中斷。此時(shí),建議在用戶程序中插入兩條指令“GET_ERROR”和“GET_ERR_ID”。這是因?yàn)?,發(fā)生此類錯(cuò)誤時(shí),這兩條指令將返回可靠的錯(cuò)誤信息。
警告 | |
讀取輸入?yún)?shù)時(shí)發(fā)生訪問錯(cuò)誤 RET_VAL 參數(shù)未返回有效的錯(cuò)誤代碼,且診斷緩沖區(qū)中未輸出任何詳細(xì)錯(cuò)誤信息。 |
錯(cuò)誤的第一個(gè)指示符可以是狀態(tài)字的 BR 位,也可以是使能輸出 ENO 。如果返回信號(hào)狀態(tài)“0”,則說明指令執(zhí)行過程中出錯(cuò)。信號(hào)狀態(tài)為“1”表示無錯(cuò)誤,因而無需進(jìn)行進(jìn)一步錯(cuò)誤分析,但存儲(chǔ)器訪問錯(cuò)誤例外。此時(shí),信號(hào)狀態(tài)為“1”表示發(fā)生錯(cuò)誤。
操作步驟
以下示例說明了如何在讀取輸入?yún)?shù)時(shí)識(shí)別訪問錯(cuò)誤:
按以下方式聲明程序塊的塊接口: 編寫以下程序代碼: |
在程序段 1 中,調(diào)用指令“MOVE_BLK_VARIANT:塊移動(dòng)”。在 SRC 參數(shù)中,使用一個(gè)變量索引訪問“SrcField”源區(qū)域。如果指令成功執(zhí)行無錯(cuò)誤,則使能輸出 ENO 將返回信號(hào)狀態(tài)“1”,同時(shí)程序執(zhí)行跳轉(zhuǎn)到程序段 4 中繼續(xù)執(zhí)行。
如果指令在執(zhí)行過程中發(fā)生訪問錯(cuò)誤(如,由變量索引而引發(fā)),則程序段 2 中的指令“GET_ERR_ID:獲取本地錯(cuò)誤 ID”將返回錯(cuò)誤 ID。程序段 2 中“UNEQUAL”的錯(cuò)誤 ID 將與值“0”進(jìn)行比較并返回結(jié)果 #Test2 = TRUE。在程序段 3 中,“EQUAL”的錯(cuò)誤 ID 將與值“0”進(jìn)行比較,并返回結(jié)果 #Test3 = TRUE。
此時(shí),輸出參數(shù) RET_VAL 處的 #TagRet_Val 操作數(shù)將不返回有效錯(cuò)誤代碼。
例外
但也有一些指令不適用于以上示例中所列的錯(cuò)誤處理方式。具體包括以下指令:
通常不支持 EN/ENO 機(jī)制的指令
禁用 ENO 的指令
S_COMP
PEEK、PEEK_BOOL、POKE、POKE_BOOL 和 POKE_BLK
即使發(fā)生訪問錯(cuò)誤,這些指令中的 BR 位或使能輸出 ENO 也將設(shè)置為 TRUE。
以下示例中說明了如何在 STL 編程語言中編程可靠的錯(cuò)誤處理方式:
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] | // 對(duì) ARRAY 元素的可變?cè)L問。 |
IN2 := 'STRING' | // 將兩個(gè)值互相比較。 |
OUT := #TagResult | // 如果兩個(gè)值相等,則操作數(shù) #TagResult 的信號(hào)狀態(tài)為“1”。 |
A BR | // 查詢 BR 位。 |
CALL GET_ERR_ID | // 調(diào)用該指令。 |
RET_VAL := #Tag_ErrorID | // 發(fā)生訪問錯(cuò)誤時(shí),該指令將輸出一個(gè)錯(cuò)誤代碼。 |
即使 BR 位的信號(hào)狀態(tài)為“1”,也將檢測(cè)到訪問錯(cuò)誤。通過評(píng)估指令“GET_ERR_ID:獲取本地錯(cuò)誤 ID”的操作數(shù) #Tag_ErrorID,可查詢?cè)撳e(cuò)誤代碼。
審核編輯:劉清
-
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7492瀏覽量
163850 -
西門子
+關(guān)注
關(guān)注
94文章
3039瀏覽量
115886 -
STL算法
+關(guān)注
關(guān)注
0文章
6瀏覽量
5366
原文標(biāo)題:西門子博途: 有關(guān)處理程序執(zhí)行錯(cuò)誤的示例
文章出處:【微信號(hào):gh_a8b121171b08,微信公眾號(hào):機(jī)器人及PLC自動(dòng)化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論