This works exactly as you say eusty and this is something I've always seen as a BIG constraint: our cells are usually complex and we offer the end user a big set of functions that handle all the main tasks automatically also we create some routines like:
- urWorkUnit1
- urWorkUnit2
- ...
- urWorkUnitn
- urPickFromPallet
- ...
And the operator must put the points and calls to other routines inside those routines.
The problem comes as we have a main routine that call the different routines in a specific order and inside a loop, and there are some calls to initializations and changes to some IOs in between that happen automatically.
Here when our user has to select one specific routine has to start the program first and wait for it to reach a routine that calls one of those functions, then line select that function and go inside there.
We've put the routine calls in the main program in this way:
INIT
mainRoutineCall(); this includes the main loop and all the program logic to control the right program flow for the cell.
HALT
urWorkUnit1();
HALT
urWorkUnit2();
HALT
urWorkUnit3();
HALT
...
This allows the user to call directly any routine without all the hassle, but it gives a lot of job to the robot programmers we have at our company...
But at the same time it is far from being ideal, this is not happening in other robot brands.