Introduction
The question was recently posed: “I need a signal that indicates when the robot is physically moving, not just when the program is "Running." I checked the Concurrent I/O manual and identified signal #50070 (Running), but this is insufficient as it stays active even when the robot is standing still (e.g., during a WAIT instruction). Is there a specific bit that exclusively identifies when the axes are in motion?”
So, the task here is how to trigger an output to show a robot is in motion beyond just a Specific Output showing a program is running.
The Setup
Function for Outputting TCP Speed to a Register
The TCP (tool center point) speed of the manipulator is output to the specified registers.
The following parameters specify the details of the function and output register numbers.
Set S1C1G332 = 2 (4 bytes micrometer/sec) – This is used over 330, because 332 is a Feedback value so it is returning the value that the manipulator is actually moving vs what is it programmed to move.
Set S1C1G333 = 91* - Use any available M-Register that has not already been allocated. (*M091 is used in this example. Validate what available registers your application has available)
This will now populate the defined M-Register (M091 in this example) with the Feedback TCP Speed of the manipulator in µm/sec.
Ladder Modifications
Now that the TCP Feedback Speed is being written to an M Register, that value needs to be inspected to generate an output. To accomplish this, the Compare instruction is where this process will start. Adding the following rung to the user ladder will begin to compare a constant value of zero to the M091 that was defined earlier. Using Internal Signal #70017 (Control Power On Completed) will initiate the Compare instruction continually while the controller is powered on in a normal operating condition. The carry flag (#51400) is set when the CMP result is S1<s2 (0<M091 in this example).
The carry flag is cleared at the end of each cycle scan so to keep it on while the robot is in motion a rung needs to be added to seal-in a signal. This is accomplished by using an Auxiliary Relay. In this example Auxiliary Relay #75900 is used to define when the robot is in motion and Auxiliary Relay #75901 is used to define when the robot is not in motion (this will be how the seal-in logic is exited).
The next rung will be the logic for the Auxiliary Relay that designates the robot is not in motion and is how the seal-in logic will be defined in the rung before it will be exited.
Now the Auxiliary Relay that designates the robot in motion needs to be mapped to a physical output so that an external device can examine its state. In this example Auxiliary Relay is mapped to External Output #30921. Best practice is to use an output that is not already associated with a General-Purpose output via a BMOV. Doing this prevents the robot in motion output from being triggered by a General-Purpose output in INFORM Jobs. To accomplish this may require breaking out a BMOV.
Once all ladder edits are completed and compiled to the robot controller, any time that the manipulator is in motion, Output #30921 (in this example) will become true regardless of operating state (Teach, Play, Remote).
Comments
0 comments
Please sign in to leave a comment.