jackvoxel8.com Posted February 20, 2018 Posted February 20, 2018 I am using a Power PMAC controller to drive my CNC machine, which has standard cartesian X, Y, Z axes. Is there any way to adjust the position of the Z axes on the fly while a motion program is running? (in a similar manner to how you can adjust the feedrate on the fly with a feedrate override) Ideally these adjustments would happen ASAP but also follow any accel limits I have set for the axes. I currently have some software that allows my machine operator to enter an offset and that offset is pushed to the controller and stored in a register. For example, lets say I have this simple motion program: G1 Z1 G1 X0 Y0 G1 X10 G1 Y10 G1 X0 G1 Y0 The above program should trace a square at Z=1. Now lets say that in the middle of the program executing an operator puts 0.5 into the register. I would like the Z axes to move to Z=1.5 (ASAP while still respecting accel limits) and then finish the rest of the square at Z=1.5. Any subsequent moves will retain this offset (i.e., a move to Z=5 will end up at Z=5.5) until the register is reset back to 0. Is this behavior achievable? If so I'd love some pointers on accomplishing this.
DaveBarnett Posted February 21, 2018 Posted February 21, 2018 Look up Motor[x].pMasterEnc in the software reference. I think it will do what you want.
JeffLowe Posted February 21, 2018 Posted February 21, 2018 I am using a Power PMAC controller to drive my CNC machine, which has standard cartesian X, Y, Z axes. Is there any way to adjust the position of the Z axes on the fly while a motion program is running? (in a similar manner to how you can adjust the feedrate on the fly with a feedrate override) Ideally these adjustments would happen ASAP but also follow any accel limits I have set for the axes. I currently have some software that allows my machine operator to enter an offset and that offset is pushed to the controller and stored in a register. For example, lets say I have this simple motion program: G1 Z1 G1 X0 Y0 G1 X10 G1 Y10 G1 X0 G1 Y0 The above program should trace a square at Z=1. Now lets say that in the middle of the program executing an operator puts 0.5 into the register. I would like the Z axes to move to Z=1.5 (ASAP while still respecting accel limits) and then finish the rest of the square at Z=1.5. Any subsequent moves will retain this offset (i.e., a move to Z=5 will end up at Z=5.5) until the register is reset back to 0. Is this behavior achievable? If so I'd love some pointers on accomplishing this. CamTables are nice for this type of things since they can control the rate at which correction gets applied to the target axis. In this case a zero degree cam table would work.
jackvoxel8.com Posted February 21, 2018 Author Posted February 21, 2018 CamTables are nice for this type of things since they can control the rate at which correction gets applied to the target axis. In this case a zero degree cam table would work. Hi Jeff, thank for the response. I was experimenting yesterday and figured out that CamTables do work as I hoped. What do you mean by "zero degree" though? I've pasted my working code below (on the fly updates are achieved by adjusting PosBias), is there anything I can do to simplify it or do I need to define all those options? CamTable Definition: CamTable[0].Source = 0 CamTable[0].Nx = 1 CamTable[0].X0 = 0 CamTable[0].SlewX0 = 10 CamTable[0].Dx = 1 CamTable[0].Target = 3 CamTable[0].PosSf = 1 CamTable[0].PosBias = 0 CamTable[0].SlewPosOffset = 0.1 CamTable[0].DacEnable = 0 CamTable[0].PosData[0] = 0 CamTable[0].PosData[1] = 0 Sys.CamEnable = 1
jackvoxel8.com Posted February 21, 2018 Author Posted February 21, 2018 Look up Motor[x].pMasterEnc in the software reference. I think it will do what you want. Hi Dave, thanks for the response. I will experiment with pMasterEnc and see how it works. It seems simpler than my CamTable solution posted above. Do you know if it has a "slew" option similar to the CamTable so the motion isn't sudden? I couldnt seem to find a reference to anything like that in the docs.
Clopedandle Posted February 23, 2018 Posted February 23, 2018 Jack, Motor[x].SlewMasterPosSf limits the rate that the command is injected to the follower motor upon enabling the following feature. It basically ramps up to the ratio between master and follower specified by Motor[x].MasterPosSf.
Recommended Posts