MultiAxisMotion.cs
Map two axis together using the
MultiAxis class and move them in a synchronized motion.
using System;
using System.Collections.Generic;
using System.Text;
using NUnit.Framework;
using NUnit.Framework.SyntaxHelpers;
using RSI.RapidCode.SynqNet.dotNET;
using RSI.RapidCode.SynqNet.dotNET.Enums;
namespace SampleApplications
{
[TestFixture]
public class MultiAxisMotion
{
MotionController controller;
Axis axisX;
Axis axisY;
MultiAxis multiAxis;
const int AXIS_COUNT = 2;
[Test]
public void Main()
{
long[] axisNumber = new long [AXIS_COUNT] {0, 1};
double[] start_position = new double [2] {0, 0};
double[] end_position = new double [2] {2000, 6000};
double[] velocity= new double [2] {1000, 1000};
double[] accel = new double [2] {10000, 10000};
double[] decel = new double [2] {10000, 10000};
double[] jerkPct = new double [2] {0, 0};
try
{
controller = MotionController.Create();
axisX = controller.AxisGet(0);
axisY = controller.AxisGet(1);
multiAxis = controller.MultiAxisGet(axisX);
multiAxis.AxisAdd(axisY);
multiAxis.ClearFaults();
multiAxis.AmpEnableSet(true);
multiAxis.MotionAttributeMaskOnSet(RSIMotionAttrMask.RSIMotionAttrMaskSYNC_START);
Console.WriteLine("\nMotionStart...");
multiAxis.MoveSCurve(end_position, velocity, accel, decel, jerkPct);
multiAxis.MotionDoneWait();
PrintResult(axisX, axisY);
multiAxis.MotionAttributeMaskOnSet(RSIMotionAttrMask.RSIMotionAttrMaskSYNC_END);
Console.WriteLine("\nMotionStart...");
multiAxis.MoveSCurve(start_position, velocity, accel, decel, jerkPct);
multiAxis.MotionDoneWait();
PrintResult(axisX, axisY);
Console.WriteLine("\nTrapezoidal Motion Done\n");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
void PrintResult(Axis X, Axis Y)
{
Console.WriteLine("Motion Done \nAxisX position= Commanded: " + X.CommandPositionGet()
+ "\tActual: " + X.ActualPositionGet() + "\n");
Console.WriteLine("Motion Done \nAxisY position= Commanded: " + Y.CommandPositionGet()
+ "\tActual: " + Y.ActualPositionGet() + "\n");
}
}
}