Console.WriteLine("📜 Compensator: 1D");
const int INDEX_ZERO = 0;
const int INDEX_ONE = 1;
const int MIN = 0;
const int MAX = 100;
const int DELTA = 10;
const int POINTS = ((MAX - MIN) / DELTA) + 1;
double[] table0 = new double[POINTS] { 0, 1000, -5000, -10000, 10000, 5000, -5000, 2500, 0, 2500, 5000 };
double[] table1 = new double[POINTS] { 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 1000 };
Console.WriteLine($"Range: {MIN} to {MAX}, Delta: {DELTA}");
Console.WriteLine($"Points: {POINTS}");
try
{
controller.CompensatorCountSet(2);
controller.CompensatorPointCountSet(INDEX_ZERO, table0.Length);
controller.CompensatorPointCountSet(INDEX_ONE, table1.Length);
Axis movingAxis = controller.AxisGet(axisNumber: 0);
Axis followerAxis = controller.AxisGet(axisNumber: 1);
if (controller.CompensatorPointCountGet(INDEX_ZERO) == table0.Length && POINTS == table0.Length)
{
controller.CompensatorConfigSet(
compensatorNumber: INDEX_ZERO,
inputAxis: movingAxis,
inputAxisMinimum: MIN,
inputAxisMaximum: MAX,
inputAxisDelta: DELTA,
outputAxis: followerAxis,
table: table0);
controller.CompensatorConfigSet(
compensatorNumber: INDEX_ONE,
inputAxis: movingAxis,
inputAxisMinimum: MIN,
inputAxisMaximum: MAX,
inputAxisDelta: DELTA,
outputAxis: followerAxis,
table: table1);
movingAxis.PositionSet(DELTA);
double compPos = followerAxis.CompensationPositionGet();
Console.WriteLine($"Compensation position: {compPos} (expected: {table0[1] + table1[1]})");
if (compPos != table0[1] + table1[1])
throw new Exception("❌ Compensator compensation position does not match expected value.");
}
}
finally
{
controller.CompensatorCountSet(0);
controller.Delete();
}
static void AbortMotionObject(RapidCodeMotion motionObject)
Aborts motion on the given RapidCodeMotion object (Axis or MultiAxis), waits for motion to stop,...
static void CheckErrors(RapidCodeObject rsiObject)
Checks for errors in the given RapidCodeObject and throws an exception if any non-warning errors are ...
static void PhantomAxisReset(Axis phantomAxis)
Configures a phantom axis on the controller.
Helpers class provides static methods for common tasks in RMP applications.
Represents a single axis of motion control. This class provides an interface for commanding motion,...
static MotionController * Get()
Get an already running RMP EtherCAT controller.
Represents the RMP soft motion controller. This class provides an interface to general controller con...
RSICompensatorOutputType
Compensator output types.
RSIAxisMasterType
Sources available to a slave Axis for electronic gearing & camming.