JeffLowe Posted May 21, 2018 Posted May 21, 2018 Is it possible to use a CamTable without it killing the targeted axis's InPos status? I know I can create a phantom axis that is the target of the cam table and then use that as the master for the axis I want to add some supplemental motion to, but it would be great if the cam table could do this directly.
curtwilson Posted May 22, 2018 Posted May 22, 2018 I'm puzzled by this question. Cam table offsets do not "kill" the InPos status any more than master position does. Each servo cycle, PPMAC computes the net desired position (Motor[x].DesPos) as the sum of trajectory position, cam table position (CompDesPos) and master position (ActiveMasterPos). Then it computes the net actual position (Motor[x].ActPos) as the sum of feedback position (Pos), comp table position (CompPos), and backlash position. Next it computes the following error as the difference between DesPos and ActPos. If the magnitude of this difference is less than or equal to InPosBand, the InPos status bit is set true. Perhaps you are getting fooled by the cam table and master position values affect the reported position. For the cam table this is controlled by Motor[x].PosReportMode. For the master position, this is controlled by bit 1 (value 2) of Motor[x].MasterCtrl.
JeffLowe Posted May 23, 2018 Author Posted May 23, 2018 I'm puzzled by this question. Cam table offsets do not "kill" the InPos status any more than master position does. Each servo cycle, PPMAC computes the net desired position (Motor[x].DesPos) as the sum of trajectory position, cam table position (CompDesPos) and master position (ActiveMasterPos). Then it computes the net actual position (Motor[x].ActPos) as the sum of feedback position (Pos), comp table position (CompPos), and backlash position. Next it computes the following error as the difference between DesPos and ActPos. If the magnitude of this difference is less than or equal to InPosBand, the InPos status bit is set true. Perhaps you are getting fooled by the cam table and master position values affect the reported position. For the cam table this is controlled by Motor[x].PosReportMode. For the master position, this is controlled by bit 1 (value 2) of Motor[x].MasterCtrl. If I have a cam table targeting a motor and enter CamTable[0].Enable=1, The Inpos in the motor status goes to zero. Also, without any motion on the cam axis, the DesVelZero status goes to false. Note there is no motion being commanded by the Cam Table.
curtwilson Posted May 23, 2018 Posted May 23, 2018 If there is any cycle-to-cycle change of any magnitude (even sub-count) from the cam table, the DesVelZero status bit goes to 0. The DesVelZero bit must be 1 as a pre-condition for InPos to go true. You may want to set your warning following error limit Motor[x].WarnFe to the same size as InPosBand. The status bit FeWarn goes to 0 inside this band, and there is no dependence on DesVelZero.
JeffLowe Posted May 24, 2018 Author Posted May 24, 2018 If there is any cycle-to-cycle change of any magnitude (even sub-count) from the cam table, the DesVelZero status bit goes to 0. The DesVelZero bit must be 1 as a pre-condition for InPos to go true. You may want to set your warning following error limit Motor[x].WarnFe to the same size as InPosBand. The status bit FeWarn goes to 0 inside this band, and there is no dependence on DesVelZero. Unfortunatly, dwells and CoordSys readieness relies on an and of all axes in the CS. Is there any way around this?
curtwilson Posted May 24, 2018 Posted May 24, 2018 Try setting Sys.ZeroVelSetPoint greater than its default value of 0.0. If the changes from the cam table truly are tiny, you can set this threshold to a small value to ignore these contributions. Remember also that Coord[x].FeWarn is the logical OR of the motor status bits, so that the inverted logic that you want to use is the effective AND.
Recommended Posts