$ err
具有有關(guān)當(dāng)前程序信息的結(jié)構(gòu)
該變量可用于評(píng)估相對(duì)于提前運(yùn)行的當(dāng)前執(zhí)行程序。例如,該變量可用于評(píng)估程序中的錯(cuò)誤,以便能夠使用適當(dāng)?shù)墓收戏?wù)功能對(duì)其進(jìn)行響應(yīng)。
該變量具有寫保護(hù),只能被讀取。
$ERR=Information
信息類型:Error_T
列出有關(guān)當(dāng)前正在執(zhí)行的程序的信息.
變量結(jié)構(gòu):
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:發(fā)生運(yùn)行時(shí)錯(cuò)誤時(shí)的消息編號(hào)。如果未發(fā)生錯(cuò)誤,則顯示零值。
Interpreter:當(dāng)前解釋器?
#R_INT:機(jī)器人解釋器
?#S_INT:提交解釋器
int_type當(dāng)前圖片類型和中斷狀態(tài)
?#I_NORMAL:該程序不是中斷程序。
?#I_INTERRUPT:該程序?yàn)橹袛喑绦颉?/p>
?#I_STOP_INTERRUPT:通過$ STOPMESS中斷(錯(cuò)誤停止)
int_prio中斷優(yōu)先級(jí)
?1,2,4…39
?81…128
line_nr當(dāng)前程序中的行號(hào)
module[]當(dāng)前程序的目錄和名稱
up_name[]當(dāng)前子程序的目錄和名稱
trigger_type
觸發(fā)屬于子程序的觸發(fā)器的上下文
1.#TRG_NONE:該子程序不是觸發(fā)子程序。?#TRG_REGULAR:在向前運(yùn)動(dòng)期間切換了觸發(fā)器子程序。?#TRG_BACKWARD:觸發(fā)子程序在向后運(yùn)動(dòng)期間被切換。
2.#TRG_RESTART:觸發(fā)子程序已打開,切換回正向運(yùn)動(dòng)。
3.#TRG_REPLAY:觸發(fā)子程序在向后運(yùn)動(dòng)后反復(fù)切換。
注意:此組件在KUKA System Software 8.3或更高版本中可用。
包含有關(guān)當(dāng)前程序信息的結(jié)構(gòu)
該變量可用于評(píng)估當(dāng)前執(zhí)行的程序相對(duì)于提前運(yùn)行。例如,該變量可用于評(píng)估程序中的錯(cuò)誤,以便能夠使用合適的故障服務(wù)功能對(duì)其進(jìn)行響應(yīng)。
該變量是寫保護(hù)的,只能讀取。
$ERR 單獨(dú)存在于機(jī)器人和提交解釋器中。每個(gè)解釋器只能訪問自己的變量。命令解釋器不存在 $ERR。
每個(gè)子程序級(jí)別都有自己的 $ERR 表示。這樣,一個(gè)層次的信息不會(huì)覆蓋不同層次的信息,可以同時(shí)讀取不同層次的信息。
ON_ERROR_PROCEED 在當(dāng)前解釋器和當(dāng)前級(jí)別隱式刪除 $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錯(cuò)誤繼續(xù)
ON_ERROR_PROCEED 可用于抑制由以下程序行觸發(fā)的運(yùn)行時(shí)錯(cuò)誤消息。機(jī)器人控制器跳過觸發(fā)錯(cuò)誤的語句,并用有關(guān)錯(cuò)誤的信息填充系統(tǒng)變量 $ERR。
ON_ERROR_PROCEED 始終適用于以下行,即使這是一個(gè)空行!例外:如果以下行包含語句 CONTINUE,則 ON_ERROR_PROCEED 適用于后面的行。
如果 ON_ERROR_PROCEED 之后的行是子程序調(diào)用,則該語句引用調(diào)用本身,而不是子程序的第一行。
$ERR 和 ERR_RAISE() 是使用 ON_ERROR_PROCEED 時(shí)的重要工具。
函數(shù) ERR_RAISE() 隨后可以生成抑制的運(yùn)行時(shí)錯(cuò)誤消息。它只能將系統(tǒng)變量 $ERR 或從 $ERR 派生的變量作為 OUT 參數(shù)處理。
ON_ERROR_PROCEED 對(duì)運(yùn)動(dòng)語句沒有影響:
樣條/端線;PTP_SPLINE/ENDSPL INE;點(diǎn)對(duì)點(diǎn);PTP_REL;
LIN_REL; CIRC_REL; ASYPTP;停止;異步;異步取消;
MOVE_EMI
ON_ERROR_PROCEED 對(duì)以下控制結(jié)構(gòu)沒有影響:
為/ENDFOR;去; IF/ELSE/ENDIF;循環(huán)/ENDLOOP;重復(fù)/直到;
跳過/結(jié)束跳過;開關(guān)/外殼/默認(rèn)/ENDSWITCH;同時(shí)/結(jié)束盡管
ON_ERROR_PROCEED with CONTINUE:
ON_ERROR_PROCEED
CONTINUE
$OUT[1]=TRUE
CONTINUE
ON_ERROR_PROCEED
$OUT[1]=TRUE
兩個(gè)語句序列的效果是相同的。在這兩個(gè)示例中,ON_ERROR_PROCEED 和 CONTINUE 作用于 $OUT[1]=TRUE。
$ERR、ON_ERROR_PROCEED 和 ERR_RAISE() 的示例:
例1
如果您不想抑制所有可能的運(yùn)行時(shí)錯(cuò)誤消息,而只希望抑制特定的錯(cuò)誤消息,則可以使用 SWITCH ... ENDSWITCH 進(jìn)行區(qū)分。在此示例中,僅抑制消息 1422。將顯示任何其他運(yùn)行時(shí)錯(cuò)誤消息。
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 ;如果需要,程序故障服務(wù)功能
...
10 DEFAULT
11 ERR_RAISE ($ERR)
12 ENDSWITCH
...
13 END
4-5第 5 行觸發(fā)消息 1422 {$variable} value invalid(除非程序被中斷調(diào)用)。前一行中的 ON_ERROR_PROCEED 會(huì)抑制錯(cuò)誤消息。
6 … 12取決于 $ERR.NUMBER 的差異化
7 如果第 5 行沒有發(fā)生錯(cuò)誤,$ERR.NUMBER==0。在這種情況下,不需要任何操作。
8, 9 如果消息 1422 已被觸發(fā),$ERR.NUMBER==1422。如果需要,可以對(duì)故障服務(wù)功能進(jìn)行編程。
10, 11 如果觸發(fā)了 1422 以外的消息,則現(xiàn)在(隨后)通過 ERR_RAISE 生成此消息。
這個(gè)例子說明了每個(gè)程序級(jí)都有自己的$ERR表示。 1 DEF myMainProg () 2 INT myVar, myVar2 3 INI 4 ON_ERROR_PROCEED 5 mySubProg (myVar)
第5行觸發(fā)消息1422{$variable}值無效,因?yàn)閙yVar未初始化,因此無法傳輸?shù)阶映绦颉?/p>
預(yù)編碼行中的ON_ERROR_PROCEED將抑制錯(cuò)誤消息。
5 mySubProg (myVar)
如果此處使用變量校正函數(shù)讀取$ERR,則以下組件具有以下值:
$ERR。編號(hào)==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
如果在子程序中使用變量糾正函數(shù)讀取$ERR,則以下組件具有以下值:
$ERR。數(shù)字==0
$ERR。line_nr==0
$ERR。模塊[]==“MYMAINPROG”
$ERR。up_name[]==“MYSUBPROG”
這清楚地表明,$E RR始終具有來自當(dāng)前級(jí)別的信息(在本例中來自子程序MySubProg)。另一方面,MyMainProg的信息未知。
此示例還顯示了每個(gè)程序級(jí)別都有自己的$ERR表示。該示例還顯示了如何將$ERR信息傳輸?shù)讲煌募?jí)別。
1 DEF myMainProg2 ()
2 INI
3 ON_ERROR_PROCEED
4 $OUT[-10] = TRUE
第4行觸發(fā)消息1444陣列索引不可接受ON_ERROR_PROCEED,在前一行中抑制錯(cuò)誤消息。
5 myHandleErr ($ERR, $ERR)
$ERR的內(nèi)容被傳輸?shù)阶映绦騼纱危阂淮巫鳛镮N參數(shù),一次作為OUT參數(shù)。
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行觸發(fā)消息1451除以0.ON_ERROR_PROCEED,在前一行中抑制錯(cuò)誤消息。
11 ERR_RAISE($ERR)
ERR_RAISE($ERR)從第10行生成消息,而不是從第4行生成消息。$ERR始終具有當(dāng)前級(jí)別的信息。在本例中,從子程序myHandleErr。
12 ERR_RAISE(outErr)
ERR_RAISE(outErr)從主程序的第4行生成消息,因?yàn)閛utErr是對(duì)主程序中$ERR的引用。
13 ERR_RAISE(inErr)
ERR_RAISE(inErr)不允許,因此觸發(fā)消息1451{(變量名)}無效參數(shù)。 ERR_RAISE只能處理$ERR或從$ERR派生的OUT變量。
...
14 END
$ERR不僅可用于錯(cuò)誤處理,還可用于確定當(dāng)前環(huán)境。 在本例中,參數(shù)從機(jī)器人程序和提交程序轉(zhuǎn)換為子程序。在子程序中,系統(tǒng)確定參數(shù)來自哪個(gè)解釋器。執(zhí)行的操作取決于結(jié)果。
機(jī)器人程序:
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故障變量相關(guān)聯(lián)的函數(shù)
清除與$ERR相關(guān)的過程故障信息:
ERR_CLEAR (ERROR_T PERR :OUT )
產(chǎn)生與$ERR相關(guān)的過程故障信息:
ERR_RAISE (ERROR_T PERR :OUT )
審核編輯:劉清
-
機(jī)器人
+關(guān)注
關(guān)注
210文章
28103瀏覽量
205849 -
觸發(fā)器
+關(guān)注
關(guān)注
14文章
1995瀏覽量
61011 -
Err
+關(guān)注
關(guān)注
0文章
6瀏覽量
6495
原文標(biāo)題:KUKA系統(tǒng)變量:$ERR 匯總版V12.6
文章出處:【微信號(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)論