using NUnit.Framework;
using System;
[TestFixture]
[Category("Software")]
class MultiAxisMotion : StaticMemoryTestBase
{
[Test]
public void MultiAxisVelocityMotion()
{
MultiAxis multi;
const int cycles = 2;
const int NUM_OF_AXES = 6;
controller.AxisCountSet(NUM_OF_AXES);
controller.MotionCountSet(NUM_OF_AXES + 1);
int i;
double[] accelerations = new double[6] { 1000, 1000, 1000, 1000, 1000, 1000 };
double[] velocities = new double[6];
Random rnd = new Random();
Axis x_axis = controller.AxisGet(Constants.X_AXIS_NUMBER);
Axis y_axis = controller.AxisGet(Constants.Y_AXIS_NUMBER);
Axis z_axis = controller.AxisGet(Constants.Z_AXIS_NUMBER);
Axis a_axis = controller.AxisGet(Constants.A_AXIS_NUMBER);
Axis b_axis = controller.AxisGet(Constants.B_AXIS_NUMBER);
Axis c_axis = controller.AxisGet(Constants.C_AXIS_NUMBER);
multi = controller.MultiAxisGet(NUM_OF_AXES);
multi.AxisRemoveAll();
multi.AxisAdd(x_axis);
multi.AxisAdd(y_axis);
multi.AxisAdd(z_axis);
multi.AxisAdd(a_axis);
multi.AxisAdd(b_axis);
multi.AxisAdd(c_axis);
multi.Abort();
multi.ClearFaults();
multi.AmpEnableSet(true);
for (i = 0; i < cycles; i++)
{
int random_vel1 = rnd.Next(1, 100);
int random_vel2 = rnd.Next(1, 100);
int random_vel3 = rnd.Next(1, 100);
int random_vel4 = rnd.Next(1, 100);
int random_vel5 = rnd.Next(1, 100);
int random_vel6 = rnd.Next(1, 100);
velocities = new double[6] {random_vel1,
random_vel2,
random_vel3,
random_vel4,
random_vel5,
random_vel6 };
multi.MoveVelocity(velocities, accelerations);
System.Threading.Thread.Sleep(100);
}
multi.Abort();
}
[Test]
public void PointToPointMultiAxisMotion()
{
const int NUM_OF_AXES = 2;
double[] positions1 = new double[NUM_OF_AXES] { 5, 10 };
double[] positions2 = new double[NUM_OF_AXES] { 15, 15 };
double[] velocities1 = new double[NUM_OF_AXES] { 1000, 1000 };
double[] velocities2 = new double[NUM_OF_AXES] { 1000, 1000 };
double[] accelerations = new double[NUM_OF_AXES] { 500, 500 };
double[] decelerations = new double[NUM_OF_AXES] { 500, 500 };
double[] jerkPercent = new double[NUM_OF_AXES] { 50, 50 };
controller.AxisCountSet(NUM_OF_AXES);
controller.MotionCountSet(NUM_OF_AXES + 1);
Axis axis0 = controller.AxisGet(Constants.X_AXIS_NUMBER);
Axis axis1 = controller.AxisGet(Constants.Y_AXIS_NUMBER);
MultiAxis multi = controller.MultiAxisGet(NUM_OF_AXES);
controller.AxisCountSet(NUM_OF_AXES);
multi.AxisRemoveAll();
multi.AxisAdd(axis0);
multi.AxisAdd(axis1);
multi.Abort();
multi.ClearFaults();
multi.AmpEnableSet(true);
axis0.ErrorLimitActionSet(
RSIAction.RSIActionNONE);
axis1.ErrorLimitActionSet(
RSIAction.RSIActionNONE);
multi.MoveSCurve(positions1, velocities1, accelerations, decelerations, jerkPercent);
multi.MotionDoneWait();
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);
multi.MotionDoneWait();
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);
}
}