andreychip Posted December 19, 2018 Posted December 19, 2018 Hello! Pow1er PMAC firmware supports circular interpolation directly only using the X, Y, and Z axes of a system. There are occasions when users desire the capability on other axes as well. In this example, we have a system with X, Y, U, and V axes. The U-axis is parallel to the X-axis; the Vaxis is parallel to the Y-axis. We desire the ability to do XY circular interpolation (which is a standard capability), but also XV, UY, and UV. We write the example in G-code (RS-274) style, because of its automatic use of subroutines in Turbo PMAC, but there are other ways to do this as well. We use the standard G17 code to specify XY circles, and invent G17.1 for XV, G17.2 for UY, and G17.3 for UV. This file describes an example of how to do this on TurboPMAC. http://www.deltatau.com/Common/technotes/Circular%20Interpolation%20on%20Other%20Axes.pdf How to make at PowerPMAC ? Thank you!
curtwilson Posted December 19, 2018 Posted December 19, 2018 I would always use XY circle commands. I would change which motors are assigned to the X, Y, U, and V axes. These changes are most easily done with logic in kinematic subroutines. To support all of the possibilities, you would need 4 modes in each kinematic subroutine. This could be done with a switch statement. It is very important that your forward and inverse kinematic subroutines match properly in all 4 modes. Whenever you change modes, you must do a PMATCH function before you command your next move. In Power PMAC, you do not need to do CMD"PMATCH" -- you can just do PMATCH in your program.
andreychip Posted December 20, 2018 Author Posted December 20, 2018 Thanks, I know about this method. There is a such metod for PowerPMAC ?
curtwilson Posted December 20, 2018 Posted December 20, 2018 Yes. The method I suggested is for Power PMAC. It's easier in the Power PMAC because you can use the "switch" statement. For example: open inverse switch (AxisMode) { case 1: // Motor 1 and 2 as XY KinPosMotor1 = KinPosAxisX KinPosMotor2 = KinPosAxisY KinPosMotor3 = KinPosAxisU KinPosMotor4 = KinPosAxisV break; case 2: // Motor 1 and 4 as XY KinPosMotor1 = KinPosAxisX KinPosMotor2 = KinPosAxisV KinPosMotor3 = KinPosAxisU KinPosMotor4 = KinPosAxisY break; (etc.) open inverse switch (AxisMode) { case 1: // Motor 1 and 2 as XY KinPosMotorX = KinPosAxis1 KinPosMotorY = KinPosAxis2 KinPosMotorU = KinPosAxis3 KinPosMotorV = KinPosAxis4 break; case 2: // Motor 1 and 4 as XY KinPosMotorX = KinPosAxis1 KinPosMotorV = KinPosAxis2 KinPosMotorU = KinPosAxis3 KinPosMotorY = KinPosAxis4 break; (etc.)
andreychip Posted December 21, 2018 Author Posted December 21, 2018 Yes. The method I suggested is for Power PMAC. It's easier in the Power PMAC because you can use the "switch" statement. For example: open inverse switch (AxisMode) { case 1: // Motor 1 and 2 as XY KinPosMotor1 = KinPosAxisX KinPosMotor2 = KinPosAxisY KinPosMotor3 = KinPosAxisU KinPosMotor4 = KinPosAxisV break; case 2: // Motor 1 and 4 as XY KinPosMotor1 = KinPosAxisX KinPosMotor2 = KinPosAxisV KinPosMotor3 = KinPosAxisU KinPosMotor4 = KinPosAxisY break; (etc.) open inverse switch (AxisMode) { case 1: // Motor 1 and 2 as XY KinPosMotorX = KinPosAxis1 KinPosMotorY = KinPosAxis2 KinPosMotorU = KinPosAxis3 KinPosMotorV = KinPosAxis4 break; case 2: // Motor 1 and 4 as XY KinPosMotorX = KinPosAxis1 KinPosMotorV = KinPosAxis2 KinPosMotorU = KinPosAxis3 KinPosMotorY = KinPosAxis4 break; (etc.) Thank you! I will work this way.
Recommended Posts