Console.WriteLine("š User Limit: Command Position Direct Set");
const int AXIS_COUNT = 1;
const int USER_LIMIT_FIRST = 0;
const int USER_LIMIT_SECOND = 1;
const int USER_LIMIT_COUNT = 2;
const int DURATION = 0;
const bool ONE_SHOT = true;
const int COMMAND_POSITION_INDEX = 0;
const int ACTUAL_POSITION_INDEX = 1;
MotionController controller = MotionController.Get();
try
{
controller.AxisCountSet(AXIS_COUNT);
controller.UserLimitCountSet(USER_LIMIT_COUNT);
controller.UserLimitConditionSet(
number: USER_LIMIT_FIRST,
conditionNumber: 0,
userLimitMask: 0x400000,
limitValueUInt32: 0x400000);
controller.UserLimitConfigSet(
number: USER_LIMIT_FIRST,
duration: DURATION,
singleShot: ONE_SHOT);
controller.UserLimitConditionSet(
number: USER_LIMIT_SECOND,
conditionNumber: 0,
addressOfUInt32: controller.AddressGet(
RSIControllerAddressType.RSIControllerAddressTypeUSERLIMIT_STATUS, USER_LIMIT_FIRST),
userLimitMask: 1,
limitValueUInt32: 1);
controller.UserLimitConditionSet(
number: USER_LIMIT_SECOND,
conditionNumber: 1,
limitValueDouble: 0.0);
controller.UserLimitConfigSet(
number: USER_LIMIT_SECOND,
actionAxis: 0,
duration: 0,
singleShot: ONE_SHOT);
Console.WriteLine("Axis moving... waiting for user limit triggers");
ConfigureUserLimitInterrupts(controller, axis, USER_LIMIT_FIRST);
ConfigureUserLimitInterrupts(controller, axis, USER_LIMIT_SECOND);
controller.InterruptEnableSet(true);
WaitForInterrupts(controller);
controller.UserLimitDisable(USER_LIMIT_FIRST);
controller.UserLimitDisable(USER_LIMIT_SECOND);
Console.WriteLine("\nUser limit command position direct set complete.");
}
finally
{
controller.Delete();
}
{
controller.UserLimitInterruptUserDataAddressSet(
number: userLimitIndex,
userDataIndex: COMMAND_POSITION_INDEX,
controller.UserLimitInterruptUserDataAddressSet(
number: userLimitIndex,
userDataIndex: ACTUAL_POSITION_INDEX,
}
{
bool done = false;
int timeout_milliseconds = 100;
int interruptCount = 0;
while (!done)
{
RSIEventType eventType = controller.InterruptWait(timeout_milliseconds);
{
interruptCount++;
Console.WriteLine($"\nInterrupt {interruptCount}: {eventType} at sample {controller.InterruptSampleTimeGet()}");
}
switch (eventType)
{
int userLimitNum = controller.InterruptSourceNumberGet();
double cmdPos = controller.InterruptUserDataDoubleGet(COMMAND_POSITION_INDEX);
double actPos = controller.InterruptUserDataDoubleGet(ACTUAL_POSITION_INDEX);
Console.WriteLine($" UserLimit: {userLimitNum}");
Console.WriteLine($" Command Position: {cmdPos}");
Console.WriteLine($" Actual Position: {actPos}");
break;
done = true;
Console.WriteLine($"\nā Completed - received {interruptCount} interrupts");
break;
default:
break;
}
}
}
Constants used in the C# sample apps.
const int AXIS_0_INDEX
Default: 0.
uint64_t AddressGet(RSIAxisAddressType addressType)
Get the an address for some location on the Axis.
void TriggeredModifyDecelerationSet(double decel)
Set the deceleration rate for an Triggered Modify Event.
void MoveVelocity(double velocity)
void TriggeredModifyJerkPercentSet(double jerkPct)
Set the jerk percent for an Triggered Modify Event.
Represents a single axis of motion control. This class provides an interface for commanding motion,...
Represents the RMP soft motion controller. This class provides an interface to general controller con...
void ClearFaults()
Clear all faults for an Axis or MultiAxis.
void Abort()
Abort an axis.
int32_t AmpEnableSet(bool enable, int32_t ampActiveTimeoutMilliseconds=AmpEnableTimeoutMillisecondsDefault, bool overrideRestrictedState=false)
Enable all amplifiers.
int32_t NumberGet()
Get the axis number.
RSIControllerAddressType
Used to get firmware address used in User Limits, Recorders, etc.
RSIEventType
Event Types or Status Bits.
RSIUserLimitLogic
Logic options for User Limits.
RSIAction
Action to perform on an Axis.
RSIAxisAddressType
Used to get firmware address used in User Limits, Recorders, etc.
RSIUserLimitTriggerType
Trigger types for UserLimits.
Helpers namespace provides utility functions for common tasks in RMP applications.