This sample application demonstrates how to use the compensator.
- Warning
- This is a sample program to assist in the integration of the RMP motion controller with your application. It may not contain all of the logic and safety features that your application requires. We recommend that you wire an external hardware emergency stop (e-stop) button for safety when using our code sample apps. Doing so will help ensure the safety of you and those around you and will prevent potential injury or damage.
The sample apps assume that the system (network, axes, I/O) are configured prior to running the code featured in the sample app. See the Configuration page for more information.
- Precondition
- These helper functions is used in the sample apps below.
public Axis CreateAndReadyAxis(
int AxisNumber)
{
ResetAxis(axis);
return axis;
}
public void ResetAxis(
Axis myAxis)
{
EnableAmp(myAxis);
}
public void EnableAmp(
Axis myAxis)
{
}
📜 Compensator 1D
This sample application demonstrates how to use a 1 dimensional compensator.
const int MIN = 0;
const int MAX = 200;
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, 7500, 1000, 1250, 1000, 7500, 5000, 2500, 0, -2500, -1000 };
double[] TABLE1 = new double[POINTS] { 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 1000, -5000, -1000, 1000, 5000, -5000, 2500, 0, -1000, 0, 0 };
Axis moving_axis = CreateAndReadyAxis(Constants.MAIN_AXIS_NUMBER);
Axis follower_axis = CreateAndReadyAxis(Constants.DRIVEN_AXIS_NUMBER);
{
}
Learn more in the concept page.
📜 Compensator 2D
This sample application demonstrates how to use a 2 dimensional compensator.
const int X_MIN = 0;
const int X_MAX = 500;
const int X_DELTA = 100;
const int Y_MIN = 0;
const int Y_MAX = 500;
const int Y_DELTA = 100;
const int COMPENSATOR_X_POINTS = ((X_MAX - X_MIN) / X_DELTA) + 1;
const int COMPENSATOR_Y_POINTS = ((Y_MAX - Y_MIN) / Y_DELTA) + 1;
const int POINTS = (COMPENSATOR_X_POINTS) * (COMPENSATOR_Y_POINTS);
double[] TABLE = new double[POINTS] {
0, 0, 0, 0, 0, 0,
100, 200, -200, 10, 300, 0,
100, 200, -500, 400, 500, 0,
0, 0, 0, 0, 0, 0,
-300, 300, -300, -300, -300, 0,
0, 0, 0, 0, 0, 0,
};
Axis x = CreateAndReadyAxis(Constants.X_AXIS_NUMBER);
Axis y = CreateAndReadyAxis(Constants.Y_AXIS_NUMBER);
Axis z = CreateAndReadyAxis(Constants.Z_AXIS_NUMBER);
z.ErrorLimitTriggerValueSet(1);
controller.
CompensatorConfigSet(Constants.COMP_NUM_ZERO, x,
RSIAxisMasterType.RSIAxisMasterTypeAXIS_ACTUAL_POSITION, X_MIN, X_MAX, X_DELTA, y,
RSIAxisMasterType.RSIAxisMasterTypeAXIS_ACTUAL_POSITION, Y_MIN, Y_MAX, Y_DELTA, z,
RSICompensatorOutputType.RSICompensatorOutputTypeSINGLE, TABLE);
Learn more in the concept page.
📜 Compensator Single Axis
This sample application demonstrates how to use a compensator that modifies the motion of itself.
const int MIN = 10;
const int MAX = 210;
const int DELTA = 10;
const int POINTS = ((MAX - MIN) / DELTA) + 1;
double[] TABLE = new double[POINTS] { 0, 2, -3, -5, -3, 2, -3, 0, 2, -3, -5, -3, 2, -3, 0, 2, -3, -5, -3, 2, -3 };
Axis axis = CreateAndReadyAxis(Constants.AXIS_NUMBER);
{
axis.MoveSCurve(DELTA * 2);
axis.MotionDoneWait();
}
Learn more in the concept page.