$ err
具有有關當前程序信息的結構
該變量可用于評估相對于提前運行的當前執行程序。例如,該變量可用于評估程序中的錯誤,以便能夠使用適當的故障服務功能對其進行響應。
該變量具有寫保護,只能被讀取。
$ERR單獨存在于robot和提交解釋器。每個解釋器只能訪問自己的變量$命令解釋器不存在ERR。
每個子程序級別都有自己的$ERR表示。這樣,來自一個級別的信息不會覆蓋來自不同級別的信息,并且可以同時從不同級別讀取信息。
ON_ERROR_PROCEED隱式刪除當前解釋器和當前級別的$ERR中的信息。
$ERR=信息
信息類型:Error_T
列出有關當前正在執行的程序的信息.
$ERR是結構類型為Error_T的系統變量。Error_T類型有一個表示當前解釋器的組件。
在單次提交模式下,此組件只能使用值#R_INT和#S_INT。
對于多提交模式,可能的值范圍已擴展到包括擴展的提交:
? #EXT_S_INT1 ? … ? #EXT_S_INT7
變量結構:
STRUC Error_T INT number, PROG_INT_Einterpreter, INT_TYP_E int_type, INT int_prio, line_nr, CHAR module[24],up_name[24], TRIGGER_UP_TYPE trigger_type
解釋:
Number:發生運行時錯誤時的消息編號。如果未發生錯誤,則顯示零值。
Interpreter:當前解釋器?
#R_INT:機器人解釋器
?#S_INT:提交解釋器
多功能提交模式: ? #R_INT:機器人解釋器 ? #S_INT:系統提交解釋器 ? #EXT_S_INT1:擴展型提交解釋器 1 ? #EXT_S_INT2:擴展型提交解釋器 2
int_type當前圖片類型和中斷狀態
?#I_NORMAL:該程序不是中斷程序。
?#I_INTERRUPT:該程序為中斷程序。
?#I_STOP_INTERRUPT:通過$ STOPMESS中斷(錯誤停止)
int_prio中斷優先級
?1,2,4…39
?81…128
line_nr只在運行時間錯誤的情況下:觸發了錯誤的行編號
module[]當前程序的目錄和名稱
up_name[]當前子程序的目錄和名稱
trigger_type
觸發屬于子程序的觸發器的上下文
1.#TRG_NONE:該子程序不是觸發子程序。?#TRG_REGULAR:在向前運動期間切換了觸發器子程序。?#TRG_BACKWARD:觸發子程序在向后運動期間被切換。
2.#TRG_RESTART:觸發子程序已打開,切換回正向運動。
3.#TRG_REPLAY:觸發子程序在向后運動后反復切換。
注意:此組件在KUKA System Software 8.3或更高版本中可用。
包含有關當前程序信息的結構
該變量可用于評估當前執行的程序相對于提前運行。例如,該變量可用于評估程序中的錯誤,以便能夠使用合適的故障服務功能對其進行響應。
該變量是寫保護的,只能讀取。
$ERR 單獨存在于機器人和提交解釋器中。每個解釋器只能訪問自己的變量。命令解釋器不存在 $ERR。
每個子程序級別都有自己的 $ERR 表示。這樣,一個層次的信息不會覆蓋不同層次的信息,可以同時讀取不同層次的信息。
ON_ERROR_PROCEED 在當前解釋器和當前級別隱式刪除 $ERR 中的信息。
$ERR=Information
Information Type: Error_T
STRUC Error_T INT number, PROG_INT_E interpreter, INT_TYP_E int_type, INT int_prio, line_nr, CHAR module[24], up_name[24], TRIGGER_UP_TYPE trigger_type
ON_ERROR_PROCEED錯誤繼續
ON_ERROR_PROCEED 可用于抑制由以下程序行觸發的運行時錯誤消息。機器人控制器跳過觸發錯誤的語句,并用有關錯誤的信息填充系統變量 $ERR。
ON_ERROR_PROCEED 始終適用于以下行,即使這是一個空行!例外:如果以下行包含語句 CONTINUE,則 ON_ERROR_PROCEED 適用于后面的行。
如果 ON_ERROR_PROCEED 之后的行是子程序調用,則該語句引用調用本身,而不是子程序的第一行。
$ERR 和 ERR_RAISE() 是使用 ON_ERROR_PROCEED 時的重要工具。
函數 ERR_RAISE() 隨后可以生成抑制的運行時錯誤消息。它只能將系統變量 $ERR 或從 $ERR 派生的變量作為 OUT 參數處理。
ON_ERROR_PROCEED 對運動語句沒有影響:
樣條/端線;PTP_SPLINE/ENDSPL INE;點對點;PTP_REL;
LIN_REL; CIRC_REL; ASYPTP;停止;異步;異步取消;
MOVE_EMI
ON_ERROR_PROCEED 對以下控制結構沒有影響:
為/ENDFOR;去; IF/ELSE/ENDIF;循環/ENDLOOP;重復/直到;
跳過/結束跳過;開關/外殼/默認/ENDSWITCH;同時/結束盡管
ON_ERROR_PROCEED with CONTINUE:
ON_ERROR_PROCEED
CONTINUE
$OUT[1]=TRUE
CONTINUE
ON_ERROR_PROCEED
$OUT[1]=TRUE
兩個語句序列的效果是相同的。在這兩個示例中,ON_ERROR_PROCEED 和 CONTINUE 作用于 $OUT[1]=TRUE。
$ERR、ON_ERROR_PROCEED 和 ERR_RAISE() 的示例:
例1
如果您不想抑制所有可能的運行時錯誤消息,而只希望抑制特定的錯誤消息,則可以使用 SWITCH ... ENDSWITCH 進行區分。在此示例中,僅抑制消息 1422。將顯示任何其他運行時錯誤消息。
1 DEF myProg ()
2 DECL E6POS myPos
3 INI
4 ON_ERROR_PROCEED
5 myPos = $POS_INT
6 SWITCH ($ERR.NUMBER)
7 CASE 0
8 CASE 1422
9 ;如果需要,程序故障服務功能
...
10 DEFAULT
11 ERR_RAISE ($ERR)
12 ENDSWITCH
...
13 END
4-5第 5 行觸發消息 1422 {$variable} value invalid(除非程序被中斷調用)。前一行中的 ON_ERROR_PROCEED 會抑制錯誤消息。
6 … 12取決于 $ERR.NUMBER 的差異化
7 如果第 5 行沒有發生錯誤,$ERR.NUMBER==0。在這種情況下,不需要任何操作。
8, 9 如果消息 1422 已被觸發,$ERR.NUMBER==1422。如果需要,可以對故障服務功能進行編程。
10, 11 如果觸發了 1422 以外的消息,則現在(隨后)通過 ERR_RAISE 生成此消息。
這個例子說明了每個程序級都有自己的$ERR表示。 1 DEF myMainProg () 2 INT myVar, myVar2 3 INI 4 ON_ERROR_PROCEED 5 mySubProg (myVar)
第5行觸發消息1422{$variable}值無效,因為myVar未初始化,因此無法傳輸到子程序。
預編碼行中的ON_ERROR_PROCEED將抑制錯誤消息。
5 mySubProg (myVar)
如果此處使用變量校正函數讀取$ERR,則以下組件具有以下值:
$ERR。編號==1422
$ERR。line_nr==15
$ERR。模塊[]==“MYMAINPROG”
$ERR。up_name[]==“MYMAINPROG”
6 HALT 7 myVar2 = 7 8 mySubProg (myVar2) 9 END --------------------------------------- 10 DEF mySubProg (myTest:IN) 11 INT myTest 12 HALT 13 END
如果在子程序中使用變量糾正函數讀取$ERR,則以下組件具有以下值:
$ERR。數字==0
$ERR。line_nr==0
$ERR。模塊[]==“MYMAINPROG”
$ERR。up_name[]==“MYSUBPROG”
這清楚地表明,$E RR始終具有來自當前級別的信息(在本例中來自子程序MySubProg)。另一方面,MyMainProg的信息未知。
此示例還顯示了每個程序級別都有自己的$ERR表示。該示例還顯示了如何將$ERR信息傳輸到不同的級別。
1 DEF myMainProg2 ()
2 INI
3 ON_ERROR_PROCEED
4 $OUT[-10] = TRUE
第4行觸發消息1444陣列索引不可接受ON_ERROR_PROCEED,在前一行中抑制錯誤消息。
5 myHandleErr ($ERR, $ERR)
$ERR的內容被傳輸到子程序兩次:一次作為IN參數,一次作為OUT參數。
6 END
---------------------------------------
7 DEF myHandleErr (inErr:IN, outErr:OUT)
8 DECL Error_T inErr, outErr
9 ON_ERROR_PROCEED
10 $OV_PRO=100/0
第10行觸發消息1451除以0.ON_ERROR_PROCEED,在前一行中抑制錯誤消息。
11 ERR_RAISE($ERR)
ERR_RAISE($ERR)從第10行生成消息,而不是從第4行生成消息。$ERR始終具有當前級別的信息。在本例中,從子程序myHandleErr。
12 ERR_RAISE(outErr)
ERR_RAISE(outErr)從主程序的第4行生成消息,因為outErr是對主程序中$ERR的引用。
13 ERR_RAISE(inErr)
ERR_RAISE(inErr)不允許,因此觸發消息1451{(變量名)}無效參數。 ERR_RAISE只能處理$ERR或從$ERR派生的OUT變量。
...
14 END
$ERR不僅可用于錯誤處理,還可用于確定當前環境。 在本例中,參數從機器人程序和提交程序轉換為子程序。在子程序中,系統確定參數來自哪個解釋器。執行的操作取決于結果。
機器人程序:
DEF Main ()
...
mySUB (55)
...
END
提交程序: DEF SPS () ... LOOP mySUB (33) ... ENDLOOP ... END 子程序: GLOBAL DEF mySUB (par:IN) INT par INI IF ($ERR.INTERPRETER==#R_INT) THEN $OUT_C[par] = TRUE ELSE $OUT[par] = TRUE ENDIF ... END
與$ERR故障變量相關聯的函數
清除與$ERR相關的過程故障信息:
ERR_CLEAR (ERROR_T PERR :OUT )
產生與$ERR相關的過程故障信息:
ERR_RAISE (ERROR_T PERR :OUT )
編輯:黃飛
-
KUKA
+關注
關注
3文章
217瀏覽量
16516 -
解釋器
+關注
關注
0文章
103瀏覽量
6509
原文標題:KUKA系統變量:$ERR 匯總版V3.14
文章出處:【微信號:gh_a8b121171b08,微信公眾號:機器人及PLC自動化應用】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論