This is my first post here and my first UR task. I am currently working with a UR10 CB3 controled (Start, Stop, etc) via PLC, profinet.
The task here has got different jobs for different products and our client asked for a simple button in the HMI screen, that moves the robot in a position where operators are able to change the gripper. So you press a button, robot moves in a maintenance position and then you press an other button and robot returns to home position.
I would like to discuss the aproach here. How can this be implemented.
I know from other robots that you can run your code in background , so when main program is not executed you can still move robot. Is it possible with UR, because idealy i would like allow this operation only in manual mode when machine is stopped. If not could you suggest a solution?
I change gripper fingers a lot and was looking for something similar. I ended up creating a program that I would load when I need to change fingers. I use two grippers.
The program sets Gripper 1 and moves to a comfortable position where the operator can work on it, then opens the fingers. It uses a popup to wait for you to finish (or stop). When done it rotates to the other gripper and waits again. When finished it moves back to it’s normal home over the pallet.
The program doesn’t start the machine or anything like that, it just moves tot he waypoints and waits for input.
Of course this will require a program change so I don’t know if that’s an option when running via PLC (I run from the teach pendent). There may be a way to use a sub to do this.
You may be able to do what you’re looking for using the Dashboard server. It allows you to programmatically load and run programs, which may work well with @fuknrekd’s solution of having separate programs for swapping the grippers.
You cannot run a program in the background when main program is stopped. When the main robot program stops everything stops (threads too). So one approach would be to have a program that is ALWAYS running and it presents operator with a prompt to do something. As an example the operator could enter ‘H’ for home, ‘S’ for stop, ‘R’ for run… or something along those lines. The program would behave as a state machine and take this command and do it’s work, maybe via subprograms (one for homing, etc).
This method would work as long as the robot does not have an unscheduled stop (example - protective stop). If there is some unscheduled stop (it crashes into something) then the main program stops. IF you need to recover from this then you need to get much more clever.