
Grady (Customer) asked a question.
PTO Error 102: I use a CLICK Plus PLC to control several axis. When attempting to use an axis in a different sub-routine, I get a Pulse Train Output error 102 stating that "an instruction for the same axis is being executed elsewhere".
I can see a rung in a different sub routine where a blue/green box is around a Position Move command indicating that it is active but the rung is not true. The Busy, Complete and Success indicators are not lit. Seems like the program has not released this position move (even though it was completed). Any ideas on how to fix would be appreciated. Thanks!
To release the axis, you should make sure you are calling the subroutine long enough to see the rung go false. For example, don't use the same contact to call the subroutine and enable the Mov Pos rung.
Also, you can monitor the PTO_Axis#_Ready_Flag at SC150-SC152, depending on which axis you're using.
Make sure that flag is on when trying to trigger a move.
A CLICK sub will leave outputs in their last sate when the sub is not active, in contrast to a stage in Direct-soft where outputs are turned off when deactivated. You said:
"indicating that it is active but the rung is not true" so I assume the rung was true last time it was called and become not false later, the status display of the software shows the current state of registers (i/o etc.) but if the sub is not being called it will not update its outputs to the current state, it remains in the last state it was active. You should be sure the rung in question is false before stopping the sub.
One thing I have done is something like this:
In Main program:
If condition_for_calling_sub ------- SET Sub_run_Flag
if Sub_run_Flag ---------------------CALL sub
Now that seems redundant, why not CALL in the first rung? and wont that call the sub forever? but look at the sub
In Subroutine:
if condition_for_calling_sub ----- Do our thing
(note that everything is global in the CLICK software)
Even if the condition_for_calling_sub has changed to false the sub will still be called because of the SET flag in main. This is useful if "our thing" is something like an OUT or activating a move that has different action for true and false, won't make so much difference with something like a SET if it has already been done.
If NOT condition_for_calling_sub ----------- RSET Sub_run_Flag
now that we have called the sub once with the enabling condition false (and cleaned up stuff we needed to clean up) the sub will not be called again until the condition is true again
This could cause timing issues and is not at all a universal solution, but could be an option in some cases