Jump to content
OMRON Forums

Recommended Posts

Posted

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!

  • Replies 4
  • Created
  • Last Reply

Top Posters In This Topic

Posted

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.

Posted

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.)

Posted

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.

Guest
This topic is now closed to further replies.

×
×
  • Create New...