george.kontogiorgos Posted November 20, 2020 Share Posted November 20, 2020 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 Link to comment Share on other sites More sharing options...
curtwilson Posted November 23, 2020 Share Posted November 23, 2020 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. Link to comment Share on other sites More sharing options...
george.kontogiorgos Posted November 23, 2020 Author Share Posted November 23, 2020 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. Link to comment Share on other sites More sharing options...
curtwilson Posted November 23, 2020 Share Posted November 23, 2020 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. Link to comment Share on other sites More sharing options...
Omron Forums Support Posted November 25, 2020 Share Posted November 25, 2020 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. Link to comment Share on other sites More sharing options...
george.kontogiorgos Posted January 11, 2021 Author Share Posted January 11, 2021 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. Link to comment Share on other sites More sharing options...
Recommended Posts