1. Home
    1. Dashboard
    2. Search
  2. Forum
    1. Unresolved Threads
    2. Members
      1. Recent Activities
      2. Users Online
      3. Team Members
      4. Search Members
      5. Trophys
  3. Articles
  4. Blog
  5. Videos
  6. Jobs
  7. Shop
    1. Orders
  • Login or register
  • Search
This Thread
  • Everywhere
  • This Thread
  • This Forum
  • Articles
  • Pages
  • Forum
  • Blog Articles
  • Products
  • More Options
  1. Robotforum - Support and discussion community for industrial robots and cobots
  2. Forum
  3. Industrial Robot Support and Discussion Center
  4. Fanuc Robot Forum
Your browser does not support videos RoboDK Software for simulation and programming
Visit our Mainsponsor
IRBCAM
Robotics Channel
Robotics Training
Advertise in robotics
Sponsored Ads

Auto HOME procedure : Best / Different Strategies

  • MoEL
  • April 28, 2025 at 10:29 AM
  • Thread is Unresolved
  • MoEL
    Reactions Received
    1
    Trophies
    2
    Posts
    109
    • April 28, 2025 at 10:29 AM
    • #1

    Hi everyone,

    New on Fanuc robots and not yet an everyday user,

    I am reaching to you to have your retex regarding the best strategies to bring back the robot to home from any position if the robot is unintentionally stopped

    Thank you very much

  • svr
    Reactions Received
    6
    Trophies
    3
    Posts
    43
    • April 28, 2025 at 2:25 PM
    • #2

    I use return to home, so I always write down the current positions in the PR, then check them through the conditions, where I then jump to various help points from where the robot can get to the home position.
    It's not the easiest to write down, but it works.


    code example:

    Code
      22:  LBL[1] ;
      23:  !position control ;
      24:  IF DO[2:Ref. Servis]=ON,JMP LBL[1100] ;
      25:  IF DO[1:Ref. Home]=ON,JMP LBL[1200] ;
      26:   ;
      27:  LBL[900] ;
      28:  !Write akt.pos. registers ;
      29:  PR[95:Akt.pos.JPOS]=JPOS    ;
      30:  PR[96:Akt.pos.LPOS]=LPOS    ;
      31:   ;
      32:  !write J1,J2,J3,J4,J5,J6 ;
      33:  R[150:Pos. J1]=PR[95,1:Akt.pos.JPOS]    ;
      34:  R[151:Pos. J2]=PR[95,2:Akt.pos.JPOS]    ;
      35:  R[152:Pos. J3]=PR[95,3:Akt.pos.JPOS]    ;
      36:  R[153:Pos. J4]=PR[95,4:Akt.pos.JPOS]    ;
      37:  R[154:Pos. J5]=PR[95,5:Akt.pos.JPOS]    ;
      38:  R[155:Pos. J6]=PR[95,6:Akt.pos.JPOS]    ;
      39:   ;
      40:  !write X,Y,Z,W,P,R ;
      41:  R[156:Pos. X]=PR[96,1:Akt.pos.LPOS]    ;
      42:  R[157:Pos. Y]=PR[96,2:Akt.pos.LPOS]    ;
      43:  R[158:Pos. Z]=PR[96,3:Akt.pos.LPOS]    ;
      44:  R[159:Pos. W]=PR[96,4:Akt.pos.LPOS]    ;
      45:  R[160:Pos. P]=PR[96,5:Akt.pos.LPOS]    ;
      46:  R[161:Pos. R]=PR[96,6:Akt.pos.LPOS]    ;
      47:   ;
      48:  IF R[150:Pos. J1]>=115,JMP LBL[400] ;
      49:  IF R[150:Pos. J1]<55 AND R[150:Pos. J1]>(-10),JMP LBL[100] ;
      50:  IF R[150:Pos. J1]<=(-10),JMP LBL[200] ;
      51:  IF R[150:Pos. J1]>=55,JMP LBL[300] ;
      52:   ;
      53:   ;
      54:  LBL[100] ;
      55:  !Control pos. NOK table ;
      56:  IF R[150:Pos. J1]>=(-10) AND R[150:Pos. J1]<=55 AND R[156:Pos. X]>=780,JMP LBL[1000] ;
      57:  IF R[150:Pos. J1]>=(-10) AND R[150:Pos. J1]<=55 AND R[158:Pos. Z]<=(-100),JMP LBL[1010] ;
      58:  IF R[150:Pos. J1]>=(-10) AND R[150:Pos. J1]<=55 AND R[156:Pos. X]<=780 AND R[158:Pos. Z]>=(-100),JMP LBL[1050] ;
      59:   ;
      60:  DO[10:Fault Home]=PULSE,0.5sec ;
      61:  END ;
      62:   ;
      63:   ;
      64:  LBL[200] ;
      65:  !Control pos. ST210 ;
      66:  IF R[150:Pos. J1]<=(-10) AND R[150:Pos. J1]>=(-96) AND R[157:Pos. Y]<=(-800) AND R[158:Pos. Z]<=142,JMP LBL[1000] ;
      67:  IF R[150:Pos. J1]<=(-10) AND R[150:Pos. J1]>=(-96) AND R[157:Pos. Y]<=(-800) AND R[158:Pos. Z]>=142,JMP LBL[1070] ;
      68:  IF R[150:Pos. J1]<=(-10) AND R[150:Pos. J1]>=(-96) AND R[156:Pos. X]<=700 AND R[158:Pos. Z]>=140,JMP LBL[1070] ;
      69:   ;
      70:  DO[10:Fault Home]=PULSE,0.5sec ;
      71:  END ;
      72:   ;
      73:  LBL[300] ;
      74:  !Control pos. ST305 ;
      75:  IF R[150:Pos. J1]>=50 AND R[150:Pos. J1]<=110 AND R[157:Pos. Y]>=936,JMP LBL[1000] ;
      76:  IF R[150:Pos. J1]>=50 AND R[150:Pos. J1]<=110 AND R[158:Pos. Z]<=150,JMP LBL[1010] ;
      77:  IF R[150:Pos. J1]>=50 AND R[150:Pos. J1]<=110 AND R[157:Pos. Y]<=936 AND R[158:Pos. Z]>=R[150:Pos. J1],JMP LBL[1060] ;
      78:  DO[10:Fault Home]=PULSE,0.5sec ;
      79:  END ;
      80:   ;
      81:  LBL[400] ;
      82:  !Control pos. ST295 ;
      83:  IF (PR[96,1:Akt.pos.LPOS]>(-950) AND PR[96,1:Akt.pos.LPOS]<(-550) AND PR[96,3:Akt.pos.LPOS]<=(-390)),JMP LBL[410] ;
      84:  IF (PR[96,1:Akt.pos.LPOS]>(-950) AND PR[96,1:Akt.pos.LPOS]<(-550) AND PR[96,3:Akt.pos.LPOS]<=330 AND PR[96,3:Akt.pos.LPOS]>(-390)),JMP LBL[420] ;
      85:  IF (PR[96,1:Akt.pos.LPOS]>(-950) AND PR[96,1:Akt.pos.LPOS]<(-550) AND PR[96,3:Akt.pos.LPOS]<=1070 AND PR[96,3:Akt.pos.LPOS]>330),JMP LBL[430] ;
      86:  MESSAGE[moving the robot manually] ;
      87:  END ;
      88:   ;
      89:  LBL[410:auxiliary from below] ;
      90:J P[6] 10% CNT20    ;
      91:J P[7] 15% CNT20    ;
      92:  JMP LBL[1100] ;
      93:   ;
      94:  LBL[420:pomocna stred] ;
      95:J P[9] 10% CNT20    ;
      96:J P[7] 15% CNT20    ;
      97:  JMP LBL[1100] ;
      98:   ;
      99:  LBL[430:auxiliary center] ;
     100:J P[10] 10% CNT20    ;
     101:J P[7] 15% CNT20    ;
     102:  JMP LBL[1100] ;
     103:   ;
     104:  LBL[1000] ;
     105:  PR[96:Akt.pos.LPOS]=LPOS    ;
     106:   ;
     107:  PR[97,1:Offset home use]=(-30)    ;
     108:  PR[97,2:Offset home use]=0    ;
     109:  PR[97,3:Offset home use]=0    ;
     110:  PR[97,4:Offset home use]=0    ;
     111:  PR[97,5:Offset home use]=0    ;
     112:  PR[97,6:Offset home use]=0    ;
     113:   ;
     114:L PR[96:Akt.pos.LPOS] 100mm/sec FINE Tool_Offset,PR[97:Offset home us]    ;
     115:  JMP LBL[900] ;
     116:   ;
     117:  LBL[1010] ;
     118:  PR[96:Akt.pos.LPOS]=LPOS    ;
     119:   ;
     120:  PR[97,1:Offset home use]=0    ;
     121:  PR[97,2:Offset home use]=0    ;
     122:  PR[97,3:Offset home use]=30    ;
     123:  PR[97,4:Offset home use]=0    ;
     124:  PR[97,5:Offset home use]=0    ;
     125:  PR[97,6:Offset home use]=0    ;
     126:   ;
     127:L PR[96:Akt.pos.LPOS] 100mm/sec FINE Offset,PR[97:Offset home use]    ;
     128:  JMP LBL[900] ;
     129:   ;
     130:  LBL[1050] ;
     131:J P[1] 20% FINE    ;
     132:  JMP LBL[1100] ;
     133:   ;
     134:  LBL[1060] ;
     135:J P[2] 20% FINE    ;
     136:  JMP LBL[1100] ;
     137:   ;
     138:  LBL[1070] ;
     139:J P[3] 20% FINE    ;
     140:J P[4] 20% FINE    ;
     141:J P[5] 20% FINE    ;
     142:  JMP LBL[1100] ;
     143:   ;
     144:  LBL[1100] ;
     145:J PR[100:Home position] 10% FINE    ;
     146:  LBL[1200] ;
    Display More


    If there are multiple stations and machines in the workplace, the HOME program can have more than 500 lines.

    I have also seen a similar principle, but using the SPACE function.

    Alternatively, in the main program you marked a FLAG for each position and in the Home program then "back", the entire program back from the given FLAG.

  • MoEL
    Reactions Received
    1
    Trophies
    2
    Posts
    109
    • April 29, 2025 at 8:05 AM
    • #3

    Verys thanks for your feedback and contribution.
    I hope others will share their methods and strategies.

  • YakawFaBB
    Reactions Received
    12
    Trophies
    1
    Posts
    74
    • April 29, 2025 at 8:24 AM
    • #4

    Hi,
    You can set up a macro program with your home position, then select the SU button.
    This method isn't automatic, you need to switch to manual mode (T1 or T2)
    if you haven't done it before check the link below :

    FANUC Macro Command Setting up user key - DIY Robotics
    Setting up user key macro command assignment on teach pendant. This procedure will help you create a one key press action.
    diy-robotics.com
  • TheKetteringKid
    Reactions Received
    2
    Posts
    7
    • May 1, 2025 at 5:13 PM
    • #5

    We use a recovery sub program. We write the position to a position register and then use IF statements to determine if the robot is in a location it can be recovered as well as recoverin it. If the robot is not in an area and pose that has a recovery procedure it throws a user alarm and must have a technicain recover. An example of a non recoverable area would be shared spaces or in machines.

  • Napster_matta
    Reactions Received
    7
    Trophies
    3
    Posts
    32
    • May 2, 2025 at 12:11 PM
    • #6

    We use ref positions and space checks to find where the robot is in the cell.

    Based on the above information, we write if statements to home the robot safely.

    If the robot enters a complicated space where recovery is not easy, we use registers, increment the register value, and backstep based on the register value. This is a more complicated way of getting the robot out.

  • HawkME
    Reactions Received
    568
    Trophies
    11
    Posts
    3,268
    • May 2, 2025 at 12:56 PM
    • #7

    You can also use DCS "not stop" zones to determine current location similar to the posts above that are using space check, ref pos, or LPOS.

    I prefer to use some kind of current location or zone first then rely on registers and breadcrumbs only if needed for the application.

  • jstolaruk
    Reactions Received
    16
    Trophies
    4
    Posts
    189
    • May 2, 2025 at 2:21 PM
    • #8

    I'm currently finishing a cell that has a ton of interference with paths that snake between equipment below and overhead. Difficult to maneuver even with a teach pendant moving manually. So I created a move stack that the normal routine "pushes" the moves and then a recovery routine can "pulls" moves to reverse the motions until the robot gets to a pounce position. Time invested was worth it because I have a bunch more cells that are going to have the same problem; robot is big because of the payload but space to move is cramped.

    I know Fanuc as an option that claims to be able to do the same thing but I couldn't get it to work well because it wants to "rewind" with linear moves (not joint) and if there is a lot of wrist action, the robot throws up configuration faults. So I home brewed my own. Basically breadcrumbs as HawkME mentioned.

  • sborchshev
    Reactions Received
    4
    Trophies
    2
    Posts
    39
    • May 5, 2025 at 5:31 PM
    • #9

    One of the other options using R[a] register and record a number after each critical move in each program. Let's say you have five programs, program one R[a] range would be 0 to 1000, program 2 1001 to 2000, program 3 2001 to 3000 and so on.

    Whenever you need to home, call home program set another R[b] register to 1 to indicate homing request issued and check the value of R register If 0<R<1000 call program 1, 1001<R<2000 call program , 2001<R<3000 program 2 and so on.

    In you program 1,2,3... check IF R[b]=1 jump to the homing label placed after the end of normal cycle of this program and depends of the value of R[a] you can program a backward exit from your R[a] position. than reset R[a] and R[b]. starting comparing R[a] to highest enter motion to built exit if robot stopped entering the cell and to the lowest exit motion number to finish the exit. If that make sense.

    Also CRX robots have built in backward exit program when you can record up to 6000mm of motion and execute a backward exit. But from my experience if robot moves fast the recording is not accurate, so I used this method even with CRXs instead of built in option...

Advertising from our partners

IRBCAM
Robotics Channel
Robotics Training
Advertise in robotics
Advertise in Robotics
Advertise in Robotics

Job Postings

  • Anyware Robotics is hiring!

    yzhou377 February 23, 2025 at 4:54 AM
  • How to see your Job Posting (search or recruit) here in Robot-Forum.com

    Werner Hampel November 18, 2021 at 3:44 PM
Your browser does not support videos RoboDK Software for simulation and programming

Tag Cloud

  • abb
  • Backup
  • calibration
  • Communication
  • CRX
  • DCS
  • dx100
  • dx200
  • error
  • Ethernet
  • Ethernet IP
  • external axis
  • Fanuc
  • help
  • hmi
  • I/O
  • irc5
  • IRVIsion
  • karel
  • kawasaki
  • KRC2
  • KRC4
  • KRC 4
  • KRL
  • KUKA
  • motoman
  • Offset
  • PLC
  • PROFINET
  • Program
  • Programming
  • RAPID
  • robodk
  • roboguide
  • robot
  • robotstudio
  • RSI
  • safety
  • Siemens
  • simulation
  • SPEED
  • staubli
  • tcp
  • TCP/IP
  • teach pendant
  • vision
  • Welding
  • workvisual
  • yaskawa
  • YRC1000

Thread Tag Cloud

  • abb
  • Backup
  • calibration
  • Communication
  • CRX
  • DCS
  • dx100
  • dx200
  • error
  • Ethernet
  • Ethernet IP
  • external axis
  • Fanuc
  • help
  • hmi
  • I/O
  • irc5
  • IRVIsion
  • karel
  • kawasaki
  • KRC2
  • KRC4
  • KRC 4
  • KRL
  • KUKA
  • motoman
  • Offset
  • PLC
  • PROFINET
  • Program
  • Programming
  • RAPID
  • robodk
  • roboguide
  • robot
  • robotstudio
  • RSI
  • safety
  • Siemens
  • simulation
  • SPEED
  • staubli
  • tcp
  • TCP/IP
  • teach pendant
  • vision
  • Welding
  • workvisual
  • yaskawa
  • YRC1000
  1. Privacy Policy
  2. Legal Notice
Powered by WoltLab Suite™
As a registered Member:
* You will see no Google advertising
* You can translate posts into your local language
* You can ask questions or help the community with your knowledge
* You can thank the authors for their help
* You can receive notifications of replies or new topics on request
* We do not sell your data - we promise

JOIN OUR GREAT ROBOTICS COMMUNITY.
Don’t have an account yet? Register yourself now and be a part of our community!
Register Yourself Lost Password
Robotforum - Support and discussion community for industrial robots and cobots in the WSC-Connect App on Google Play
Robotforum - Support and discussion community for industrial robots and cobots in the WSC-Connect App on the App Store
Download