◆ MultiAxisGet()

virtual MultiAxis* MultiAxisGet ( int32_t  motionSupervisorNumber)
pure virtual

MultiAxisGet returns a pointer to a MultiAxis object and initializes its internals.

ℹ This function is avaliable in RapidCode

Part of the Create and Initialize RapidCode Objects method group.

Description:
MultiAxisGet takes a MotionSupervisor index and returns a pointer to the MultiAxis object.
Parameters
motionSupervisorNumberA motion supervisor index, should be >= AxisCount.
Returns
(MultiAxis*) A pointer to the MultiAxis specified.
Sample Code:
PointToPointMultiAxisMotion
// Constants
const int NUM_OF_AXES = 2; // Specify the number of axes (Make sure your axis count in RapidSetup is 2!)
// Parameters
double[] positions1 = new double[NUM_OF_AXES] { 5, 10 }; // The first set of positions to be moved to
double[] positions2 = new double[NUM_OF_AXES] { 15, 15 }; // The second set of positions to be moved to
double[] velocities1 = new double[NUM_OF_AXES] { 1000, 1000 }; // The velocity for the two axes for the first move- Units: units/sec (driver will execute 10 rotations per second)
double[] velocities2 = new double[NUM_OF_AXES] { 1000, 1000 }; // The velocity for the two axes for the second move
double[] accelerations = new double[NUM_OF_AXES] { 500, 500 }; // The acceleration for the two axes
double[] decelerations = new double[NUM_OF_AXES] { 500, 500 }; // The deceleration for the two axes
double[] jerkPercent = new double[NUM_OF_AXES] { 50, 50 }; // The jerk percent for the two axes
controller.AxisCountSet(NUM_OF_AXES); // Uncomment when using Phantom Axes.
controller.MotionCountSet(NUM_OF_AXES + 1);
Axis axis0 = controller.AxisGet(Constants.X_AXIS_NUMBER); // Initialize axis0
Axis axis1 = controller.AxisGet(Constants.Y_AXIS_NUMBER); // Initialize axis1
SampleAppsCS.HelperFunctions.CheckErrors(axis0); // [Helper Function] Check that 'axis0' has been initialized correctly
SampleAppsCS.HelperFunctions.CheckErrors(axis1); // [Helper Function] Check that 'axis1' has been initialized correctly
// In this application, we have two Axis objects and one MultiAxis object, so three motion supervisors are required
MultiAxis multi = controller.MultiAxisGet(NUM_OF_AXES); // Initialize a new MultiAxis object. MultiAxisGet takes a motion supervisor number as its argument.
// This number is equal to the number of axes since motion supervisors are zero indexed (i.e., motion supervisors
// 0 and 1 are used for axis0 and axis1, so motion supervisor 2 is available for our MultiAxis object).
SampleAppsCS.HelperFunctions.CheckErrors(multi); // [Helper Function] Check that 'multi' has been initialized correctly
controller.AxisCountSet(NUM_OF_AXES); // Set the number of axis being used. A phantom axis will be created if for any axis not on the network. You may need to refresh rapid setup to see the phantom axis.
multi.AxisRemoveAll(); // Remove all current axis if any. So we can add new ones
multi.AxisAdd(axis0); // Add axis0 to the MultiAxis object
multi.AxisAdd(axis1); // Add axis1 to the MultiAxis object
multi.Abort(); // If there is any motion happening, abort it
multi.ClearFaults(); // Clear any faults
multi.AmpEnableSet(true); // Enable the motor
axis0.ErrorLimitActionSet(RSIAction.RSIActionNONE); // Disable poistion error for Phantom Axes.
axis1.ErrorLimitActionSet(RSIAction.RSIActionNONE); // Disable poistion error for Phantom Axes.
multi.MoveSCurve(positions1, velocities1, accelerations, decelerations, jerkPercent); // Move to the positions specified in positions1 using a trapezoidal motion profile
multi.MotionDoneWait(); // Wait for motion to finish
//---ASSERT---
Assert.AreEqual(positions1[0], axis0.CommandPositionGet(), "The first axis in the multi axis object should be commanded to move to the firt element of the array");
Assert.AreEqual(positions1[1], axis1.CommandPositionGet(), "The second axis in the multi axis object should be commanded to move to the second element of the array");
multi.MoveTrapezoidal(positions2, velocities2, accelerations, decelerations); // Move to the positions specified in positions2 using a SCurve motion profile
multi.MotionDoneWait(); // Wait for the motion to finish
//---ASSERT---
Assert.AreEqual(positions2[0], axis0.CommandPositionGet(), "The first axis in the multi axis object should be commanded to move to the firt element of the array");
Assert.AreEqual(positions2[1], axis1.CommandPositionGet(), "The second axis in the multi axis object should be commanded to move to the second element of the array");
multi.AmpEnableSet(false); // Disable the axes
Note
You'll need to set the number of MotionSupervisors to a number greater than the Axis count. This should be done before any calls to AxisGet or MultiAxisGet.
See also
MultiAxis::AxisAdd , MotionCountGet , MotionCountSet
Examples
MultiaxisMotion.cpp, PathMotion.cpp, PVTmotionMultiAxis.cpp, SyncOutputWithMotion.cpp, Template.cpp, and UpdateBufferPoints.cpp.