Sendin Home From Anywhere

  • Greetings,


    Dear readers, I hope you are all well and everything is okay in your works! I have really specific question about FANUC robot homing (from PLC Command with only one button) from anywhere in an automation line.


    Automation Line Info:

    In this system, FANUC robot is taking parts from IMM and puts on the fixtures which is for let kuka take the part from them and put in the boxes.


    What I want to do:

    In this cycle, after a fault occures and if FANUC stops or something else like that. I want to make that robot go home from anywhere without crashing any part of the automation system. As, Stäubli robots have I want to do such configuration like Stäubli robots have. Let FANUC go home position (which means if FANUC is in home position, system can be started again from zero) and wait for main start.


    Little info for Stäubli Robots, if robot stops while the cycle is running, on Stäubli Robot's TP there is an home button and after you push the button robot goes home from anywhere even if the robot is between the injection mould. Stäubli Robot goes out from the place it stopped as backward it gets inside to anywhere. With this crazy thought is there anyone that can give me a clue or information about it? This configuration is really important for so I'm open for any ideas!


    THANK YOU ALL FOR YOUR ATTENTION AND HELP IN ADVANCE!

    SORRY IF MY ENGLISH IS TOO BAD FOR YOUR UNDERSTANDING!


    Waiting for your replies!

    Have a nice day all!

    Automation Engineer

  • I always write a recovery program for each robot that traverses backwards though the position sequence. This I assign to UI7:Home under Menu->Setup->Macro. If the robot is not busy and all errors have been reset you can send UI:7 from the PLC to start it. You could also assign macros to certain buttons on the teach pendant there.

  • I always write a recovery program for each robot that traverses backwards though the position sequence. This I assign to UI7:Home under Menu->Setup->Macro. If the robot is not busy and all errors have been reset you can send UI:7 from the PLC to start it. You could also assign macros to certain buttons on the teach pendant there.

    Excuse me, the way you told seems possibe ofc. But problem is I'm not so exprienced with fanuc robot. Can you please, explain more or share some documents?


    THANK YOU FOR YOUR ANSWER!

    Automation Engineer

  • Here is a sample routine:

    Program No. 1 is a condition monitor, it monitors a certain Robot Input, when it turns on it calls program No. 2

    /PROG VACUUM_PROTECT Cond

    /ATTR

    OWNER = MNEDITOR;

    COMMENT = "";

    PROG_SIZE = 166;

    CREATE = DATE 19-07-06 TIME 03:55:22;

    MODIFIED = DATE 19-07-06 TIME 03:55:22;

    FILE_NAME = ;

    VERSION = 0;

    LINE_COUNT = 1;

    MEMORY_SIZE = 542;

    PROTECT = READ_WRITE;

    TCD: STACK_SIZE = 0,

    TASK_PRIORITY = 50,

    TIME_SLICE = 0,

    BUSY_LAMP_OFF = 0,

    ABORT_REQUEST = 0,

    PAUSE_REQUEST = 0;

    DEFAULT_GROUP = *,*,*,*,*;

    CONTROL_CODE = 00000000 00000000;

    /MN

    1: WHEN RI[1:ON :Vuoto OK]=OFF,CALL VACUUM_RECOUER ;

    /POS

    /END


    Program No 2


    /PROG VACUUM_RECOUER

    /ATTR

    OWNER = MNEDITOR;

    COMMENT = "";

    PROG_SIZE = 238;

    CREATE = DATE 19-07-05 TIME 22:48:42;

    MODIFIED = DATE 19-09-10 TIME 01:45:24;

    FILE_NAME = ;

    VERSION = 0;

    LINE_COUNT = 8;

    MEMORY_SIZE = 578;

    PROTECT = READ_WRITE;

    TCD: STACK_SIZE = 0,

    TASK_PRIORITY = 50,

    TIME_SLICE = 0,

    BUSY_LAMP_OFF = 0,

    ABORT_REQUEST = 0,

    PAUSE_REQUEST = 0;

    DEFAULT_GROUP = *,*,*,*,*;

    CONTROL_CODE = 00000000 00000000;

    /MN

    1: DO[11:OFF:Stop wheels]=ON ;

    2: DO[2:OFF:CstopI UI4]=PULSE,0.3sec ;

    3: WAIT .50(sec) ;

    4: F[1:OFF]=(ON) ;

    5: WAIT 1.00(sec) ;

    6: F[1:OFF]=(OFF) ;

    7: DO[11:OFF:Stop wheels]=OFF ;

    8: ;

    /POS

    /END


    This program activates a DO (doesnt matter for you), after it PULSES DO2 (I have mapped DO2 to UI4 which is the cycle stop signal), after I activate F1 which is a flag. Flag no. 1 calls the return home macro.


    Return home macro program:


    /PROG AUTO_HOME Macro

    /ATTR

    OWNER = MNEDITOR;

    COMMENT = "";

    PROG_SIZE = 276;

    CREATE = DATE 19-07-05 TIME 23:35:20;

    MODIFIED = DATE 19-07-06 TIME 00:14:40;

    FILE_NAME = ;

    VERSION = 0;

    LINE_COUNT = 7;

    MEMORY_SIZE = 628;

    PROTECT = READ_WRITE;

    TCD: STACK_SIZE = 0,

    TASK_PRIORITY = 50,

    TIME_SLICE = 0,

    BUSY_LAMP_OFF = 0,

    ABORT_REQUEST = 0,

    PAUSE_REQUEST = 0;

    DEFAULT_GROUP = 1,*,*,*,*;

    CONTROL_CODE = 00000000 00000000;

    /MN

    1: OVERRIDE=25% ;

    2: PR[16]=LPOS ;

    3: PR[16,1]=PR[16,1]-250 ;

    4: PR[16,2]=PR[16,2]+0 ;

    5: PR[16,3]=PR[16,3]+100 ;

    6:L PR[16] 400mm/sec FINE ;

    7: CALL R_HOME ;

    /POS

    /END



    this program changes the speed override to 25%, saves the current robot LINEAR position to a Position Register and then it substracts 250mm from PR16 x dimension and adds 100mm to the z dimension, after it calls Robot home program which is basically a joint position to home.

  • The Macro menu allows you to execute a program once a certain signal turns on, e.g. a button on the HMI is pressed or a PLC is received. You find it when you press the "Menu" button on the teach pendant and then go to "Setup" and "Macro". It's similar to the condition monitor that Famous_Fella described but the condition monitor seems less restrictive. On the pic below you can see how I set the "REF_POS" program to UI:7 which is usually the "Home" signal. The other things(UK = TeachPendant button; SU = TeachPenant button + shift) are assignments to the blank buttons of the teach pendant to control for example the grippers. You could also set your homing programm to a button in this menu.




    Looks like both me and ps0f0r use custom programs to reach the home position. This offers complete control but can be tedious to program.


    What you described from Stäubli sounds more like what stare284 mentioned(I haven't tried those functions so I dunno).

  • I call this sub LOAD_POS


    1: !Load Position ;

    2: !Called from MoveSafe ;

    3: !Get Joint data ;

    4: PR[21:C_Lpos]=JPOS ;

    5: R[30:J1]=PR[21,1:C_Lpos] ;

    6: R[31:J2]=PR[21,2:C_Lpos] ;

    7: R[32:J3]=PR[21,3:C_Lpos] ;

    8: R[33:J4]=PR[21,4:C_Lpos] ;

    9: R[34:J5]=PR[21,5:C_Lpos] ;

    10: R[35:J6]=PR[21,6:C_Lpos] ;

    11: ;

    12: !Get World data ;

    13: PR[21:C_Lpos]=LPOS ;

    14: R[40:LX]=PR[21,1:C_Lpos] ;

    15: R[41:LY]=PR[21,2:C_Lpos] ;

    16: R[42:LZ]=PR[21,3:C_Lpos] ;

    17: R[43:LW]=PR[21,4:C_Lpos] ;

    18: R[44:LP]=PR[21,5:C_Lpos] ;

    19: R[45:LR]=PR[21,6:C_Lpos] ;


    And this one MOVE_SAFE (your home program)


    1: !Move Safe: Look around and ;

    2: !Move Accordingly ;

    3: !Called from AAAMain ;

    4: ;

    5: CALL A_LOAD_POS ;

    6: !If at home leave program ;

    7: IF DO[7:At Home]=ON,JMP LBL[999] ;

    8: ;

    9: !If at Pick ;

    10: IF DO[58:At Pick Cnvr]=ON,JMP LBL[100] ;

    11: ;

    12: !If at Chute ;

    13: IF DO[59:At Chute]=ON,JMP LBL[100] ;

    14: ;

    15: !If at Pallet ;

    16: IF DO[60:At Pallet]=ON,JMP LBL[200] ;

    17: ;

    18: !If at Maintenance ;

    19: IF DO[30:At Maint Pos]=ON,JMP LBL[300] ;

    20: ;

    21: !If at Unknown ;

    22: UALM[2] ;

    23: ABORT ;

    24: !Near Pick / chute. Lets go home ;

    25: LBL[100] ;

    26: UTOOL_NUM=1 ;

    27: UFRAME_NUM=0 ;

    28: CALL A_LOAD_POS ;

    29: PR[21,3:C_Lpos]=R[102:ClearOPickZ] ;

    30:L PR[21:C_Lpos] 100mm/sec FINE ;

    31:J P[3:Home] 100% CNT100 ;

    32: JMP LBL[999] ;

    33: ;

    34: !Near Pallet ;

    35: LBL[200] ;

    36: UTOOL_NUM=1 ;

    37: UFRAME_NUM=0 ;

    38: CALL A_LOAD_POS ;

    39: PR[21,3:C_Lpos]=R[103:ClearOPlaceZ] ;

    40:L PR[21:C_Lpos] 100mm/sec FINE ;

    41:J P[3:Home] 100% CNT100 ;

    42: JMP LBL[999] ;

    43: ;

    44: !Near Maint ;

    45: LBL[300] ;

    46: UTOOL_NUM=1 ;

    47: UFRAME_NUM=0 ;

    48:J P[1:Orient] 100% CNT10 ;

    49:J P[3:Home] 100% CNT100 ;

    50: ;

    51: !End of program ;

    52: LBL[999] ;

  • Not sure if it'll help, but I'll post my two ways I've gone in the past. Both of these also use the "breadcrumb" trail method (i.e. set Register 1 = a number after every move, so you know where the robot left off at last):


    For simple Material Handling, use PR for your pick/place position and then use other PR's for Offsetting that position in your job. That way your end customer only needs to touch up 1 point in the job. With this method, in your Home program (I usually use a PNS job for Homing sequences) you can then use the offsets from the job from the pick/place position and the robot will home using the same programmed path. And if the pick/place PR is ever touched up, then your path (and also your homing path) is automatically updated.


    The more complicated route I've had to go with complicated weld fixture. The weld fixture had different sized parts, but the paths were kept the same between all of the parts: Program your welding/paths with P[x] (points). At the beginning of your weld job, record each P[x] to a PR. If any changes are made to the weld path they have now been updated. When/If the robot stops during welding, you can check your "breadcrumb" trail to see where you last left off, and then go to your Home job. Your home job has the positional data of the model you're running and is able to home the robot. The only downside this method is that it is a PR HOG! It was my first attempt at a Homing sequence as well as with a complicated weld fixture.

  • If using the Auto Backward Execute option, is there a way to assign the actual "Do Backward Exit" macro to an input? I tried mapping macro table to a DI, but it gives 'no motion group specified' alarm? (do backward exit is a non-motion .pc file in the select menu).

    It appears that this option is intended to easily recover. It would be great if I could assign the execute-backward to a button as Zeytey indicated the Staubli robot can do.

Advertising from our partners