RecordOnMotion.cs
Configure the Recorder to start recording when a motion starts.
using System;
using System.Collections.Generic;
using System.Text;
using NUnit.Framework;
using RSI.RapidCode.SynqNet.dotNET;
using RSI.RapidCode.SynqNet.dotNET.Enums;
namespace SampleApplications
{
[TestFixture]
public class RecordOnMotion
{
const int X = 0;
const int Y = 1;
const int RECORDER_PERIOD = 1;
const int AXES = 2;
MotionController controller;
Axis x;
Axis y;
MultiAxis multiAxisXY;
public enum RecordingIndexes
{
XActualLsb = 0,
XActualMsb,
YActualLsb,
YActualMsb,
}
public class DataRecord
{
public Int64 ActualPositionX = 0;
public Int64 ActualPositionY = 0;
}
public List<DataRecord> dataRecordList = new List<DataRecord>();
[Test]
public void Main()
{
try
{
controller = MotionController.Create();
x = controller.AxisGet(X);
y = controller.AxisGet(Y);
multiAxisXY = controller.MultiAxisGet(x);
multiAxisXY.AxisAdd(y);
controller.RecorderStop();
controller.RecorderPeriodSet(RECORDER_PERIOD);
controller.RecorderDataCountSet( Enum.GetValues(typeof(RecordingIndexes)).Length);
controller.RecorderDataAddressSet((int)RecordingIndexes.XActualLsb, x.AddressGet(RSIAxisAddressType.RSIAxisAddressTypeACTUAL_POSITION_LSB));
controller.RecorderDataAddressSet((int)RecordingIndexes.XActualMsb, x.AddressGet(RSIAxisAddressType.RSIAxisAddressTypeACTUAL_POSITION_MSB));
controller.RecorderDataAddressSet((int)RecordingIndexes.YActualLsb, y.AddressGet(RSIAxisAddressType.RSIAxisAddressTypeACTUAL_POSITION_LSB));
controller.RecorderDataAddressSet((int)RecordingIndexes.YActualMsb, y.AddressGet(RSIAxisAddressType.RSIAxisAddressTypeACTUAL_POSITION_MSB));
controller.InterruptEnableSet(true);
controller.RecorderConfigureToTriggerOnMotion(multiAxisXY, true);
double[] pos = new double[AXES] { 2000, 2000};
double[] v = new double[AXES] { 1000, 1000 };
double[] a = new double[AXES] { 1000, 1000 };
multiAxisXY.MoveTrapezoidal(pos, v, a, a);
bool done = false;
while (!done)
{
ReadRecordedData();
if (multiAxisXY.MotionDoneGet() == true)
{
done = true;
}
}
PrintRecordedData();
controller.InterruptEnableSet(false);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
public void ReadRecordedData()
{
while (controller.RecorderRecordCountGet() > 0)
{
controller.RecorderRecordDataRetrieve();
DataRecord record = new DataRecord();
record.ActualPositionX = ConvertRecordedPositionsTo64(controller.RecorderRecordDataValueGet((int)RecordingIndexes.XActualLsb), controller.RecorderRecordDataValueGet((int)RecordingIndexes.XActualMsb));
record.ActualPositionY = ConvertRecordedPositionsTo64(controller.RecorderRecordDataValueGet((int)RecordingIndexes.YActualLsb), controller.RecorderRecordDataValueGet((int)RecordingIndexes.YActualMsb));
dataRecordList.Add(record);
}
}
private void PrintRecordedData()
{
foreach (DataRecord record in dataRecordList)
{
Console.WriteLine("X: " + record.ActualPositionX + " Y: " + record.ActualPositionY.ToString());
}
}
public Int64 ConvertRecordedPositionsTo64(int lsb, int msb)
{
return (Int64)((((UInt64)msb) << 32) | (UInt32)lsb);
}
}
}