JohnR Posted March 22, 2011 Posted March 22, 2011 I have setup 2 motors #1->2048X, #2->2048Y within CS 1 After #1hmz;#2hmz I setup #1 MaxPos = 1000 and execute &1 cpx abs X2 ( commanded to move to 4096 mu, should stop @ 1000 mu ) stops at 330 mu If I repeate the above with MaxPos = 2000 motor stops at 660 mu. If I move the motor with a jog command it will stop on the MaxPos value, as expected. Why does the motor stop 1/3 of the way to the software limit when commanded as an axis ? Also, With MaxPos = 0, no software limit set, I execute "&1 cpx abs X2" the motor moves to ~4096 mu. I then set MaxPos = 1000, and Coord[1].SoftLimitStopDis=1. execute "&1 cpx abs Y1" this causes #2 to move to 2048 mu as expected BUT it also causes #1 to move to 1000 mu at a VERY high rate of speed ! This is unexpected motion from the motor. If I try this with Coord[1].SoftLimitStopDis=0 nothing moves. It seems that once a motor goes into a softlimit the motion programs abort immediatelyand will not move any axes. Is this “as planed” or am I seeing something different ? John
kmonroe023 Posted March 25, 2011 Posted March 25, 2011 Do you have lookahead enabled? On our system (also an XY Cartesian setup), I've noticed that Pmac will stop the motors when it calculates that the motor will exceed the softlimit, not necessarily when the offending move is executed. If I increase the lookahead distance (coord[x].LHDistance) the motor will stop even further from the actual soft limit setting. Interesting...to say the least. I expected that it would stop at the limit...oh well. Haven't tried to enable the StopLimitStopDis flag; the verbage "with the position of the motor that hit its software limit saturating at the limit value" scared me a little bit. I have setup 2 motors #1->2048X, #2->2048Y within CS 1 After #1hmz;#2hmz I setup #1 MaxPos = 1000 and execute &1 cpx abs X2 ( commanded to move to 4096 mu, should stop @ 1000 mu ) stops at 330 mu If I repeate the above with MaxPos = 2000 motor stops at 660 mu. If I move the motor with a jog command it will stop on the MaxPos value, as expected. Why does the motor stop 1/3 of the way to the software limit when commanded as an axis ? Also, With MaxPos = 0, no software limit set, I execute "&1 cpx abs X2" the motor moves to ~4096 mu. I then set MaxPos = 1000, and Coord[1].SoftLimitStopDis=1. execute "&1 cpx abs Y1" this causes #2 to move to 2048 mu as expected BUT it also causes #1 to move to 1000 mu at a VERY high rate of speed ! This is unexpected motion from the motor. If I try this with Coord[1].SoftLimitStopDis=0 nothing moves. It seems that once a motor goes into a softlimit the motion programs abort immediatelyand will not move any axes. Is this “as planed” or am I seeing something different ? John
Sina.Sattari Posted March 28, 2011 Posted March 28, 2011 John, based upon the description in Power PMAC Saved Data Structure Elements for Coord[x].SoftLimitStopDis, if the PMAC detects (at calculation time) that a move will cause the motor to go beyond a software limit, depending on Coord[x].SoftLimitStopDis setting it will do one of the following: If the Coord[x].SoftLimitStopDis is set to 0, then it will stop the motion program execution immediately. If you're not using segmentation, this means depending on the move type you're in, the program will be aborted 1 or 2 blocks ahead of the offending block. If you're using the segmentation, it will abort the motion program as soon as the calculated segment goes beyond the software limit, in this case it depends on how many segments ahead of time are being calculated in Power PMAC. If the Coord[x].SoftLimitStopDis is set to 1, them the motion program will continue execution, but the violating motor will be commanded to software limit position. In the case you're setting the Coord[x].SoftLimitStopDis=1 after violating the software limit, the PMAC simply commands your motor to software limit and that's why you see the motor moving at max speed to the software limit. It's user's responsibility to check the motor position while setting the software limits in order to prevent setting the boundary outside of motor's current position.
JohnR Posted April 3, 2011 Author Posted April 3, 2011 John, based upon the description in Power PMAC Saved Data Structure Elements for Coord[x].SoftLimitStopDis, if the PMAC detects (at calculation time) that a move will cause the motor to go beyond a software limit, depending on Coord[x].SoftLimitStopDis setting it will do one of the following: If the Coord[x].SoftLimitStopDis is set to 0, then it will stop the motion program execution immediately. If you're not using segmentation, this means depending on the move type you're in, the program will be aborted 1 or 2 blocks ahead of the offending block. If you're using the segmentation, it will abort the motion program as soon as the calculated segment goes beyond the software limit, in this case it depends on how many segments ahead of time are being calculated in Power PMAC. If the Coord[x].SoftLimitStopDis is set to 1, them the motion program will continue execution, but the violating motor will be commanded to software limit position. In the case you're setting the Coord[x].SoftLimitStopDis=1 after violating the software limit, the PMAC simply commands your motor to software limit and that's why you see the motor moving at max speed to the software limit. It's user's responsibility to check the motor position while setting the software limits in order to prevent setting the boundary outside of motor's current position. Ok Thanks, That make sense out of what I am seeing. Now I can handle the limit events more intelligently. John
Recommended Posts