簡介:errnum用于描述在執(zhí)行過程中,發(fā)生的所有可恢復的錯誤。例如程序執(zhí)行時,被零除。如果機器人程序執(zhí)行過程中檢測到一個錯誤,錯誤非致命,可以被錯誤處理程序處理。這類錯誤的典型例子是過大的值或者被零除。errnum類型的系統(tǒng)變errno,根據(jù)不同的錯誤性質,分……
  
        
	  errnum用于描述在執(zhí)行過程中,發(fā)生的所有可恢復的錯誤。例如程序執(zhí)行時,被零除。如果機器人程序執(zhí)行過程中檢測到一個錯誤,錯誤非致命,可以被錯誤處理程序處理。這類錯誤的典型例子是過大的值或者被零除。errnum類型的系統(tǒng)變errno,根據(jù)不同的錯誤性質,分配不同的值。錯誤處理程序可以通過讀取這個變量來糾正錯誤,然后執(zhí)行程序可以正確的方式繼續(xù)運行。
	  錯誤也可以通過使用RAISE指令在程序中創(chuàng)建。錯誤處理程序通過指定一個能檢測到該特定類型的錯誤號(范圍1-90內(nèi)或通過BookErrNo指令預訂)作為RAISE的參數(shù)。
	  示例:
	  reg1:=reg2/reg3;
	  ERROR
	  IFERRNO=ERR_DIVZEROTHEN
	  reg3:=1;
	  RETRY;
	  ENDIF
	  如果REG3=0,機器人除法時檢測到發(fā)生的錯誤。這個錯誤可以被檢測并通過分配REG3的值為1予以糾正。因此除法可再次被執(zhí)行,程序可以繼續(xù)執(zhí)行。
	  CONST
	  errnummachine_error:=1;
	  IF di1=0RAISEmachine_error;
	  ERROR
	  IFERRNO=machine_errorRAISE;
	  機器人通過信號DI1檢測出現(xiàn)的錯誤。跳轉到錯誤處理程序。調用的錯誤處理程序調,糾正這個錯誤。machine_error作為一個常數(shù),用來讓錯誤處理程序確切知道發(fā)生的是哪種錯誤的類型。
	  系統(tǒng)變量ERRNO可以用于讀取最后一次發(fā)生的錯誤。許多預定義常量可以用來確定發(fā)生的錯誤類型。關于raise,RAISE用于在程序中產(chǎn)生一個錯誤,并調用程序的錯誤處理函數(shù)。RAISE同樣可以在錯誤處理函數(shù)中使用,將當前錯誤傳送給調用程序的錯誤處理函數(shù)。這個指令可以用于跳回高一層的程序結構,例如,底層的錯誤返給主程序的錯誤處理函數(shù)。
	  參數(shù):
	  RAISE [Error no]
	  Error no的數(shù)據(jù)類型為errnum。Errornumber:錯誤處理程序可以通過ERRNO系統(tǒng)變量查找1和90之間任意數(shù)字的錯誤。
	  舉例:
	  MODULEMainModule
	  VAR errnumERR_MY_ERR:=-1;
	  PROC main( )
	  BookErrNoERR_MY_ERR;
	  IF=0THEN
	  RAISEERR_MY_ERR;
	  ENDIF
	  ERROR
	  IF ERRNO=ERR_MY_ERR
	  THENTPWrite"di1equals 0";
	  ENDIF
	  ENDPROC
	  ENDMODULE
	  如果di1等于0產(chǎn)生一個錯誤。RAISE會將程序推動到錯誤處理程序處執(zhí)行。在這個程序中,用戶創(chuàng)建了自己的錯誤號處理指定的錯誤。通過BookErrNo注冊錯誤號并使用。
	  MODULEMainModule
	  VAR numvalue1:=10;
	  VAR numvalue2:=0;
	  PROC main()
	  routine1;
	  ERROR
	  IFERRNO=ERR_DIVZEROTHEN
	  value2:=1;
	  RETRY;RETRY指令用于當一個錯誤發(fā)生時,重新運行引起錯誤的指令。
	  ENDIF
	  ENDPROC
	  PROCroutine1( )
	  value1:=5/value2;當value2為0的時候,這將導致一個錯誤。
	  ERROR
	  RAISE;
	  ENDPROC
	  ENDMODULE
	  關于錯誤處理,TRYNEXT-跳過產(chǎn)生錯誤的指令,繼續(xù)運行。TRYNEXT指令用于在產(chǎn)生一個錯誤后,程序運行產(chǎn)生錯誤的下一條語句。
	  示例:
	  reg2:=reg3/reg4;
	  ERROR
	  IF ERRNO=ERR_DIVZEROTHEN
	  reg2:=0;
	  TRYNEXT;
	  ENDIF
	  RETRY指令用于從引起錯誤的地方恢復程序繼續(xù)運行。
	  示例:
	  reg2:=reg3/reg4;
	  ERROR
	  IF ERRNO =ERR_DIVZERO THEN
	  reg4:=1;
	  RETRY;
	  ENDIF
	  reg3除以reg4,如果reg4等于0(零),那么跳轉到錯誤處理程序,重新為reg4賦值。然后RETRY從錯誤處理程序跳出,回到產(chǎn)生錯誤的除法指令,執(zhí)行除法指令。錯誤處理程序與機器人運動示例(在機器人運動過程中產(chǎn)生某種錯誤時,如何在自動模式下恢復錯誤)
	  PROC
	  CONSTrobtarget service_pos:=[...];
	  VARrobtargetstop_pos;
	  ERROR
	  IFERRNO=AW_WELD_ERRTHEN
	  Currentmovement on motion base pathlevel is already stopped.
	  New motionpath level for newmovements in the ERROR handler
	  StorePath;
	  Storecurrent position from motionbase path level
	  stop_pos:=CRobT(\Tool:=tool1,\WObj:=wobj1);
	  !Do the workto fix the problem
	  MoveJservice_pos,v50,fine,tool1,\WObj:=wobj1;
	  Move backto the position on themotion base path level
	  MoveJstop_pos,v50,fine,tool1,\WObj:=wobj1;
	  Go back tomotion base path leveRestoPath;
	  Restart thestopped movements onmotion base path level,
	  restart theprocess and retryprogram execution
	  StartMoveRetry;
	  ENDIF
	  ENDPROC
		
        文章來源,
工業(yè)機器人維修官網(wǎng):lingtingtech.cn