# Delta Tau Forums

Full Version: Axis software limits
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hello

Is there a way to impose software limits to KinPosAxisA for example?

I would like to define my robot a limited work volume and the individual motors software limits does not work form me because I need the full range of some joints in order to perform the entire motion.

George
You have a couple of possibilities. One is to do the calculations yourself in the kinematic subroutine -- e.g.:

if (KinPosAxisA > MyMaxA || KinPosAxisA < MyMinA) …

The other method is to assign an additional virtual motor that maps directly to the axis -- e.g.:

KinPosMotor11 = KinPosAxisA

Set your motor software limits for this virtual motor to the axis software limits you desire.

You will need to define this as an inverse kinematic motor in the same coordinate system -- e.g.:

&1 #11->I

You will also need to disable other faults on this virtual motor: hardware limits, amplifier fault, following error.
(11-23-2020, 10:39 AM)curtwilson Wrote: [ -> ]You have a couple of possibilities. One is to do the calculations yourself in the kinematic subroutine -- e.g.:

if (KinPosAxisA > MyMaxA || KinPosAxisA < MyMinA) …

The other method is to assign an additional virtual motor that maps directly to the axis -- e.g.:

KinPosMotor11 = KinPosAxisA

Set your motor software limits for this virtual motor to the axis software limits you desire.

You will need to define this as an inverse kinematic motor in the same coordinate system -- e.g.:

&1 #11->I

You will also need to disable other faults on this virtual motor: hardware limits, amplifier fault, following error.

I prefer the second method but I couldn't find a way to interlock the individual motors looking to kinematics axes limits. If I move a individual motor by #4j=100 for example and motor 4 belongs to refered kinematics, the KinPosAxisA could reach a forbidden zone.
To do this outside the motion program execution, you will want to have a PLC program scanning continually and issuing the "pread" command, which will return the axis positions in D-variables for the program (e.g. D0 for the A-axis position). Then you will explicitly compare the returned position values for each axis to your axis limits and abort motion if exceeded.
What robot shape are you working with?

I have used a PLC that sets Coord[1].ErrorStatus = 255 if Coord[1].TPExec.Pos[j] is not within bounds. I believe this protects against program moves that go out of bounds, but not individual motor jog moves. A pread or dread would be more useful for getting axis positions in the case of motor level moves.
Hi Eric!

Our robot is basically three granites, where two of them form a wedge and they are over the third granite. One motor control the wedge position and other motor compensate the movement, so we can perform X and Y movements purely by kinematics transformations.

We develop a plc to peform this safety but the complexity level increased too much and we decided to remove the individual motors from final users and the Curt Wilson answer's work very good.