APIs, concepts, guides, and more
_helpers.cs
using RSI.RapidCode; // RSI.RapidCode.dotNET;
public static class Helpers
{
public static void CheckErrors(RapidCodeObject rsiObject)
{
var hasErrors = false;
var errorStrBuilder = new System.Text.StringBuilder();
while (rsiObject.ErrorLogCountGet() > 0)
{
// get error
RsiError rsiError = rsiObject.ErrorLogGet();
// get message
var errorMsg = rsiError.isWarning ? $"WARNING: {rsiError.Message}" : $"ERROR: {rsiError.Message}";
errorStrBuilder.AppendLine(errorMsg);
// set flag
hasErrors = !rsiError.isWarning;
}
if (hasErrors)
throw new Exception(errorStrBuilder.ToString());
}
public static void NetworkStart(MotionController controller)
{
// check if network is started already
if (controller.NetworkStateGet() != RSINetworkState.RSINetworkStateOPERATIONAL)
{
Console.WriteLine("Starting Network..");
// if not started, initialize the network
controller.NetworkStart();
}
// check if network is started again
if (controller.NetworkStateGet() != RSINetworkState.RSINetworkStateOPERATIONAL)
{
// read network log messages
int messagesToRead = controller.NetworkLogMessageCountGet();
// print all the messages to help figure out the problem
for (int i = 0; i < messagesToRead; i++)
Console.WriteLine(controller.NetworkLogMessageGet(i));
throw new SystemException("Expected OPERATIONAL state but the network did not get there.");
}
else
{
Console.WriteLine("Network Started");
}
}
public static void NetworkShutdown(MotionController controller)
{
// check if the network is already shutdown
if (controller.NetworkStateGet() == RSINetworkState.RSINetworkStateUNINITIALIZED ||
controller.NetworkStateGet() == RSINetworkState.RSINetworkStateSHUTDOWN)
return;
// shutdown the network
Console.WriteLine("Shutting down the network..");
controller.NetworkShutdown();
// check if the network is shutdown
var networkState = controller.NetworkStateGet();
if (networkState != RSINetworkState.RSINetworkStateUNINITIALIZED &&
networkState != RSINetworkState.RSINetworkStateSHUTDOWN)
{
// some kind of error shutting down the network, read the network log messages
int messagesToRead = controller.NetworkLogMessageCountGet();
// print all the messages to help figure out the problem
for (int i = 0; i < messagesToRead; i++)
Console.WriteLine(controller.NetworkLogMessageGet(i));
throw new SystemException("Expected SHUTDOWN state but the network did not get there.");
}
else
{
Console.WriteLine("Network Shutdown");
}
}
public static void ControllerSetup(MotionController controller)
{
NetworkShutdown(controller);
// reset the controller to ensure it is in a known state
controller.Reset();
NetworkStart(controller);
}
public static void PhantomAxisReset(Axis phantomAxis)
{
if (phantomAxis.MotorTypeGet() != RSIMotorType.RSIMotorTypePHANTOM)
{
throw new Exception(@$"Axis {phantomAxis.NumberGet()} is not configured as a phantom axis.
Please ensure the axis is set to phantom before calling PhantomAxisConfigure.");
}
// abort any motion
AbortMotionObject(phantomAxis);
// disable all limits (not used for phantom axes)
phantomAxis.ErrorLimitActionSet(RSIAction.RSIActionNONE);
phantomAxis.HardwareNegLimitActionSet(RSIAction.RSIActionNONE);
phantomAxis.HardwarePosLimitActionSet(RSIAction.RSIActionNONE);
phantomAxis.HomeActionSet(RSIAction.RSIActionNONE);
phantomAxis.SoftwareNegLimitActionSet(RSIAction.RSIActionNONE);
phantomAxis.SoftwarePosLimitActionSet(RSIAction.RSIActionNONE);
// set position tolerances to max value for immediate MotionDone
double POSITION_TOLERANCE_MAX = Double.MaxValue / 10.0;
phantomAxis.PositionToleranceCoarseSet(POSITION_TOLERANCE_MAX);
phantomAxis.PositionToleranceFineSet(POSITION_TOLERANCE_MAX);
// set sample apps default motion parameters
phantomAxis.UserUnitsSet(1);
phantomAxis.DefaultVelocitySet(100);
phantomAxis.DefaultAccelerationSet(1000);
phantomAxis.DefaultDecelerationSet(1000);
phantomAxis.DefaultJerkPercentSet(0);
phantomAxis.PositionSet(0);
}
public static void AbortMotionObject(RapidCodeMotion motionObject)
{
motionObject.EStopAbort();
motionObject.MotionDoneWait();
motionObject.ClearFaults();
// check for idle state
if (motionObject.StateGet() != RSIState.RSIStateIDLE)
{
RSISource source = motionObject.SourceGet(); // get state source enum
string errorMsg = @$"Axis or MultiAxis {motionObject.NumberGet()} failed to enter IDLE state after aborting.
The source of the axis error is: {motionObject.SourceNameGet(source)}";
throw new Exception(errorMsg);
}
}
}
static void AbortMotionObject(RapidCodeMotion motionObject)
Aborts motion on the given RapidCodeMotion object (Axis or MultiAxis), waits for motion to stop,...
Definition _helpers.cs:186
static void NetworkShutdown(MotionController controller)
Shuts down the network communication for the given MotionController.
Definition _helpers.cs:86
static void CheckErrors(RapidCodeObject rsiObject)
Checks for errors in the given RapidCodeObject and throws an exception if any non-warning errors are ...
Definition _helpers.cs:15
static void PhantomAxisReset(Axis phantomAxis)
Configures a phantom axis on the controller.
Definition _helpers.cs:144
static void NetworkStart(MotionController controller)
Starts the network communication for the given MotionController.
Definition _helpers.cs:47
static void ControllerSetup(MotionController controller)
Sets up the controller for hardware use by resetting it and starting the network.
Definition _helpers.cs:126
Helpers class provides static methods for common tasks in RMP applications.
Definition _helpers.cs:5
void HardwareNegLimitActionSet(RSIAction action)
Set the action that will occur when the Hardware Negative Limit Event triggers.
void HardwarePosLimitActionSet(RSIAction action)
Set the action that will occur when the Hardware Positive Limit Event triggers.
RSIMotorType MotorTypeGet()
Get the motor type.
void PositionToleranceCoarseSet(double tolerance)
Set the Coarse Position Tolerance for Axis settling.
void SoftwareNegLimitActionSet(RSIAction action)
Set the action that will occur when the Software Negative Limit Event triggers.
void UserUnitsSet(double countsPerUserUnit)
Sets the number of counts per User Unit.
void HomeActionSet(RSIAction action)
Set the action that will occur when the Home Event triggers.
void PositionToleranceFineSet(double tolerance)
Set the Fine Position Tolerance for Axis settling.
void ErrorLimitActionSet(RSIAction action)
Set the action that will occur when the Error Limit Event triggers.
void PositionSet(double position)
Set the Command and Actual positions.
void SoftwarePosLimitActionSet(RSIAction action)
Set the action that will occur when the Software Positive Limit Event triggers.
Represents a single axis of motion control. This class provides an interface for commanding motion,...
Definition rsi.h:5862
void DefaultVelocitySet(double velocity)
Set the default velocity in UserUnits.
void DefaultAccelerationSet(double acceleration)
Set the default acceleration in UserUnits.
void DefaultDecelerationSet(double deceleration)
Set the default deceleration in UserUnits.
void DefaultJerkPercentSet(double jerkPercent)
Set the default jerk percent.
RSINetworkState NetworkStateGet()
void Reset()
Reset the controller which stops and restarts the RMP firmware.
void NetworkShutdown()
Shutdown the EtherCAT network.
void NetworkStart()
Start the network, doing both a discovery followed by starting to OPERATIONAL state.
const char *const NetworkLogMessageGet(int32_t messageIndex)
Represents the RMP soft motion controller. This class provides an interface to general controller con...
Definition rsi.h:800
void ClearFaults()
Clear all faults for an Axis or MultiAxis.
int32_t MotionDoneWait()
Waits for a move to complete.
RSIState StateGet()
Get the Axis or MultiAxis state.
RSISource SourceGet()
Get the source of an error state for an Axis or MultiAxis.
void EStopAbort()
E-Stop, then abort an axis.
The RapidCodeMotion interface is implemented by Axis and MultiAxis .
Definition rsi.h:4311
const RsiError *const ErrorLogGet()
Get the next RsiError in the log.
int32_t ErrorLogCountGet()
Get the number of software errors in the error log.
The RapidCode base class. All non-error objects are derived from this class.
Definition rsi.h:184
Represents the error details thrown as an exception by all RapidCode classes. This class contains an ...
Definition rsi.h:111
bool isWarning
Whether the error is or is not a warning.
Definition rsi.h:120
RSINetworkState
State of network.
Definition rsienums.h:568
RSIAction
Action to perform on an Axis.
Definition rsienums.h:1115
RSIMotorType
Motor Type.
Definition rsienums.h:1311
RSISource
Possible sources that have caused an Error state.
Definition rsienums.h:1014