question about additional axis detect
Hello friends here
I have some problems understanding additional axis controlling and really hope
somebody can help me here.
I have a IRB 1400 arc welding robot with three additional axis.Option as bellow:
****************************************
>>PRODUCTS_ID:
3HAC6811-1.71 004 System Pack 4.0
Irb 1400
Advanced Functions
Advanced Motion
LoadId and ColDetect
Multitasking
Developer Functions
Screen Viewer
ArcWare
Sensor Interface
ArcWare Plus
*****************************************
The three additional axis is called respectively: "INTERCH", "STN1" and "STN2"
see infor bellow from MOC.cfg file
*****************************************
MECHANICAL_UNIT:
-name "INTERCH" -use_run_enable "" -use_activation_relay "INTERCH"
-use_brake_relay "BRAKE_RELAY" -use_robot "INTERCH" -stand_by_state
-name "STN1" -use_run_enable "" -use_activation_relay "STN1"
-use_brake_relay "BRAKE_RELAY" -use_single_0 "STN1"
-user_frame_moved_by "STN1" -stand_by_state
-name "STN2" -use_run_enable "" -use_activation_relay "STN2"
-use_brake_relay "BRAKE_RELAY" -use_single_1 "STN2"
-user_frame_moved_by "STN2" -stand_by_state
******************************************
is it possible that robot can detect which station is at working position: STN1 or
STN2? I have some procedures bellow but did not understand what they are used for.
PROC DisplayStatus(
irbpstatus CurStatus
um AppStn
|string PosName
|num PosIndex)
VAR string stPosRef;
VAR string stErrorMsg1;
IF Present(AppStn) THEN
stPosRef:="AppStn="+ValToStr(AppStn);
ELSEIF Present(PosName) THEN
stPosRef:="PosName="+PosName;
ELSEIF Present(PosName) THEN
stPosRef:="PosIndex="+ValToStr(PosIndex);
ENDIF
stErrorMsg1:="Error "+IrbpStatusToStr(CurStatus);
TEST CurStatus
CASE snMAX_TIME_RELAY:
ErrWrite stErrorMsg1,"The relay output is different than relay input"RL2:=stPosRef;
CASE snSTN_OUT_RANGE:
ErrWrite stErrorMsg1,"Reference to unknown station"RL2:=stPosRef;
CASE snOUT_OF_RANGE:
ErrWrite stErrorMsg1,"Parameter out of range"RL2:=stPosRef;
CASE snNO_STN_MATCH:
ErrWrite stErrorMsg1,"Impossible the corresponding station"RL2:=stPosRef;
CASE snDETAIL_INVALID:
ErrWrite stErrorMsg1,"Invalid detail in positioner's description"RL2:=stPosRef;
CASE snNO_COMPONENTS:
ErrWrite stErrorMsg1,"No component found for this station or positioner"RL2:=stPosRef;
CASE snJOINTS_MISSING:
ErrWrite stErrorMsg1,"Joint declaration are missing in the positioner's description"RL2:=stPosRef;
CASE snLOG_AX_MISSING:
ErrWrite stErrorMsg1,"Logical axis missing in the definition of positioner"RL2:=stPosRef;
CASE snSIG_MU_MISSING:
ErrWrite stErrorMsg1,"Signal for mechanical unit is missing in definition"RL2:=stPosRef;
CASE snNO_INTCH_DEF:
ErrWrite stErrorMsg1,"Reference to unknown interchange in this positioner"RL2:=stPosRef;
CASE snFIRST_TIME:
ErrWrite stErrorMsg1,"The positioner table is full"RL2:=stPosRef;
CASE snNO_FREE_INDEX:
ErrWrite stErrorMsg1,"The positioner has already been defined"RL2:=stPosRef;
CASE snNO_OVERWRITE:
ErrWrite stErrorMsg1,"Reference to invalid positioner name"RL2:=stPosRef;
CASE snINVALID_NAME:
ErrWrite stErrorMsg1,"Not valid positioner name"RL2:=stPosRef;
CASE snUNKNOWN_POS:
ErrWrite stErrorMsg1,"Unknown positioner"RL2:=stPosRef;
CASE snNO_POS_DEFINED:
ErrWrite stErrorMsg1,"No positioner defined"RL2:=stPosRef;
CASE snALREADY_VALID:
ErrWrite stErrorMsg1,"Positioner already defined"RL2:=stPosRef;
CASE snARG_MISSING:
ErrWrite stErrorMsg1,"Argument missing"RL2:=stPosRef;
CASE snDATA_NOT_DEF:
ErrWrite stErrorMsg1,"Data not defined"RL2:=stPosRef;
CASE snNO_INTCH_FND:
ErrWrite stErrorMsg1,"Interchange position not found"RL2:=stPosRef;
CASE snNO_ANGTYPE_DEF:
ErrWrite stErrorMsg1,""RL2:=stPosRef;
CASE snDATA_NOT_FND:
ErrWrite stErrorMsg1,"Data not found"RL2:=stPosRef;
CASE snNO_SAFETY:
ErrWrite stErrorMsg1,"No safety"RL2:=stPosRef;
CASE snWRONG_OPMODE:
ErrWrite stErrorMsg1,"Wrong OP Mode"RL2:=stPosRef;
CASE snVALUE_MISSING:
ErrWrite stErrorMsg1,"Value missing"RL2:=stPosRef;
CASE snLOAD_NOT_SET:
ErrWrite stErrorMsg1,"Loaddata not set"RL2:=stPosRef;
CASE snLOAD_NOT_VALID:
ErrWrite stErrorMsg1,"Loaddata not valid"RL2:=stPosRef;
CASE snCALIB_POS_ERR:
ErrWrite stErrorMsg1,"Interchange calibration pos. not found"RL2:=stPosRef;
DEFAULT:
ErrWrite stErrorMsg1,"System error"RL2:=stPosRef;
ENDTEST
Stop;
ENDPROC
PROC CheckSafePos(
num PosIndex)
VAR num nAnswer;
VAR string sPosname;
VAR bool bValid;
IF IrbpAtSafePos(PosIndexValid:=bValid) RETURN;
IF NOT bValid THEN
SetSafePos PosIndex;
ELSE
! move to safe for pos.
IrbpMoveToSafePosIndex:=PosIndexSpeed:=sSAFE_POS,tTorchSt atus:=nAnswer;
ENDIF
IrbpUpdateSafeZnPosIndex:=PosIndex,30;
ENDPROC
PROC IndexToStn(
num Stn
speeddata Speed
switch Setup)
VAR irbpstatus snStatus;
! closing opX
VelSet 10,100;
IF NOT Present(Setup) opClose nOpBtn;
IrbpMoveToStn StnSpeed?SpeedStatus:=snStatus;
IF snStatus<>snOK THEN
DisplayStatus snStatusAppStn:=Stn;
EXIT;
ENDIF
VelSet 100,3000;
! open opX
IF NOT Present(Setup) opOpen nOpBtn;
ERROR
! open opX
IF NOT Present(Setup) opOpen nOpBtn;
IF ERRNO<>snOK THEN
DisplayStatus snStatusAppStn:=Stn;
EXIT;
ENDIF
ENDPROC
LOCAL PROC PreUserPrg(
num AppStn)
VAR irbpstatus snStatus;
IrbpActMechUnitAppStn:=AppStnStatus:=snStatus;
IF snStatus<>snOK THEN
DisplayStatus snStatusAppStn:=AppStn;
EXIT;
ENDIF
ENDPROC
LOCAL PROC PostUserPrg(
num AppStn)
VAR irbpstatus snStatus;
IrbpDeactMechUAppStn:=AppStnStatus:=snStatus;
IF snStatus<>snOK THEN
DisplayStatus snStatusAppStn:=AppStn;
EXIT;
ENDIF
ENDPROC
************************************
question:
" IrbpActMechUnitAppStn" is a RAPID command that can detect current activated station?
Comments
-
You can probebly use this (laxa) function AtStation()
like the example below.
Station:=AtStation();
IF Station=1 THEN.......
...
0
Categories
- All Categories
- 5.5K RobotStudio
- 396 UpFeed
- 18 Tutorials
- 13 RobotApps
- 297 PowerPacs
- 405 RobotStudio S4
- 1.8K Developer Tools
- 250 ScreenMaker
- 2.8K Robot Controller
- 316 IRC5
- 61 OmniCore
- 7 RCS (Realistic Controller Simulation)
- 800 RAPID Programming
- AppStudio
- 3 RobotStudio AR Viewer
- 18 Wizard Easy Programming
- 105 Collaborative Robots
- 5 Job listings