Conditional running of two robots

If two robots are running together and either one crashes via an unplanned stop (i.e. protective stop), I want the other robot program to pause/halt. However, if either robot program is manually stopped, I want the other robot to continue running.
Both robots have a dedicated DO and DI wired together for communicating their status to each other.
How would you go about adding these conditional instructions in the program so it functions as described above?

Consider using MODBUS between the two robots. This is really easy to set up, since both robots come standard with client/server functionality. All you have to do is connect them via ethernet.

Particularly coil address 261 which tells you if the robot is protective stopped.
image
So each robot can simply look at the other’s coil 261 (possibly in a thread) and halt if it goes high. Since normally stopping the robot via the teach pendent won’t cause this to go high, you’d have your implmentation.

Thank you Eric! I’ve successfully used modbus to communicate between two robots to tell each other the status of their protective stops and E stops and halt the program when this happens. This was surprising easy and efficient.

I have the status of the other robot’s protective stop and e stop being checked in a thread where a halt executes when coil 261 or coil 262 is HI. However, I would prefer the program to just wait until the coil 261 and 262 go LO, then continue the program. The problem is the main program will still run even if the thread has a wait. I can opt to not use a thread and have the “if” expression check continuously in the main program, but it will not execute a halt or “wait for…” until that expression is read. I would like the program to wait immediately until the safety stops are inactive, like have a command that is always ready to pause the main program. Would you have any suggestions? Otherwise thank you very much for your help.

Glad you got the main part done! Always refreshing when something is actually easy, and works. I had similar success with MODBUS myself. As for new problem, maybe give this a try:

Register 128-255 are some GPIO registers.
image

So if we set up this address as a digital input:

Then in the installation tab, under I/O setup, at the very bottom, you will see a modbus input. You can then assign this as “pause program”

You may need to map an additional register that serves as “Start Program” and have your other robot write to that when you need to resume the program.

I think this is the easier place to start, so see if that works!

After being stumped for a while trying to get this to work, I found an even easier way to get one robot to pause the other’s program, and be able to resume the program without restarting.

It’s as simple as setting the input emergency stopped/protective stopped signals from the other robot to execute the “pause program” action.

Thanks for the time you took to successfully help me out. It is much appreciated!

1 Like