Resuming program after HOLD

  • Hello, I am fairly new to fanuc and would appreciate some help on a hold issue I'm facing.


    I have two SR-6iA robots working near each other and am setting up an 'unsafe zone' so that while one robot is in that zone the other will not enter.

    Currently, I have this program running with my movement program:


    LBL[1]

    IF (DI [3: LISTEN RB2 POS] = OFF AND R [11: YPOS] >= R [4: EXTRA_SAFE]), $MCR_GRP[1].$HOLD = (ON)

    // if robot 2 is in the unsafe position and robot 1 is past the 'extra safe' position, then hold is turned on for robot 1


    IF (DI [3: LISTEN RB2 POS] = ON, $MCR_GRP[1].$HOLD = (OFF)

    // if robot 2 is in a safe position, the hold for robot 1 is turned off


    WAIT .10 (sec)


    JMP LBL [1]


    However, when the hold is turned on it will not turn back off even though the input is going from off to on. Is there any way to fix this or to achieve the same function with a different method?

  • MOM

    Approved the thread.
  • Thanks for the suggestion. I'm looking into it now, and correct me if I'm wrong but this looks like a method to set up the 'unsafe zone'; would I be able to use this to get one robot to stop while the other is in this zone and then resume working once the robot has left?

  • Whenever I've done something like this were robots are sharing a space, I use bits from a PLC to control permissions to enter the space. The robots wait for permission, rather than holding the program. This makes it restart as soon as the PLC gives permission to move ahead. I assume you could do this without the PLC, just between the two robots.


    This has worked really well for us when the application doesn't really involve humans in the zone so the worst that can happen is that the robots hit each other. We also had an alarm if both the robots were in the shared zone, that threw a hold the operator would have to reset. This was our failsafe, and we measured it by looking at J1 angles, because of where the shared zone was in relation to everything else.

  • Thank you everyone for the help, I was trying to practice using the robot positions to communicate as needed but I ended up hard coding lines to wait for inputs from the other robot.

  • Personally I have used reference positions with I/O to prevent motion into collision areas. Then check the I/O before moving there. I use 2 outs and 2 In for each area. One is controlled by Ref_pos the other is controlled by the program. The program controlled bits are "Going to location" once the robot is in the area it turns the bit off and allows the ref_pos to handle it.

  • Often, I have 2-5 robots competing for access to a common space. I use a safety PLC along with DCS to only allow one robot at a time access to the common space. A TP program must first request access from the cell PLC and if given, the CPC zone is "enabled" for access. Once done and clear, the TP program releases it. The PLC logic gives access on first-asked-first-allowed.


    This works well to protect the robots from crashing and if a programmer without system knowledge tries to program a robot to access that space without going through the request-release protocol, a DCS CPC zone violation occurs before the robot gets in harms way. And for the programming, a simple wait-on-a-OK-to-access-input is inserted in the routine.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account
Sign up for a new account in our community. It's easy!
Register a new account
Sign in
Already have an account? Sign in here.
Sign in Now