RobotStudio event

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

    .......

    ...

    image