APIs, concepts, guides, and more
_helpers.cs
1using RSI.RapidCode; // RSI.RapidCode.dotNET;
2
4public static class Helpers
5{
15 public static void CheckErrors(RapidCodeObject rsiObject)
16 {
17 var hasErrors = false;
18 var errorStrBuilder = new System.Text.StringBuilder();
19
20 while (rsiObject.ErrorLogCountGet() > 0)
21 {
22 // get error
23 RsiError rsiError = rsiObject.ErrorLogGet();
24
25 // get message
26 var errorMsg = rsiError.isWarning ? $"WARNING: {rsiError.Message}" : $"ERROR: {rsiError.Message}";
27 errorStrBuilder.AppendLine(errorMsg);
28
29 // set flag
30 hasErrors = !rsiError.isWarning;
31 }
32
33 if (hasErrors)
34 throw new Exception(errorStrBuilder.ToString());
35 }
37
47 public static void StartTheNetwork(MotionController controller)
48 {
49 // check if network is started already
50 if (controller.NetworkStateGet() != RSINetworkState.RSINetworkStateOPERATIONAL)
51 {
52 Console.WriteLine("Starting Network..");
53
54 // if not started, initialize the network
55 controller.NetworkStart();
56 }
57
58 // check if network is started again
59 if (controller.NetworkStateGet() != RSINetworkState.RSINetworkStateOPERATIONAL)
60 {
61 // read network log messages
62 int messagesToRead = controller.NetworkLogMessageCountGet();
63
64 // print all the messages to help figure out the problem
65 for (int i = 0; i < messagesToRead; i++)
66 Console.WriteLine(controller.NetworkLogMessageGet(i));
67
68 throw new SystemException("Expected OPERATIONAL state but the network did not get there.");
69 }
70 else
71 {
72 Console.WriteLine("Network Started");
73 }
74 }
76
86 public static void ShutdownTheNetwork(MotionController controller)
87 {
88 // check if the network is already shutdown
89 if (controller.NetworkStateGet() == RSINetworkState.RSINetworkStateUNINITIALIZED ||
90 controller.NetworkStateGet() == RSINetworkState.RSINetworkStateSHUTDOWN)
91 return;
92
93 // shutdown the network
94 Console.WriteLine("Shutting down the network..");
95 controller.NetworkShutdown();
96
97 // check if the network is shutdown
98 var networkState = controller.NetworkStateGet();
99 if (networkState != RSINetworkState.RSINetworkStateUNINITIALIZED &&
100 networkState != RSINetworkState.RSINetworkStateSHUTDOWN)
101 {
102 // some kind of error shutting down the network, read the network log messages
103 int messagesToRead = controller.NetworkLogMessageCountGet();
104
105 // print all the messages to help figure out the problem
106 for (int i = 0; i < messagesToRead; i++)
107 Console.WriteLine(controller.NetworkLogMessageGet(i));
108
109 throw new SystemException("Expected SHUTDOWN state but the network did not get there.");
110 }
111 else
112 {
113 Console.WriteLine("Network Shutdown");
114 }
115 }
117
126 public static void SetupControllerForHardware(MotionController controller)
127 {
128 ShutdownTheNetwork(controller);
129
130 // reset the controller to ensure it is in a known state
131 controller.Reset();
132
133 StartTheNetwork(controller);
134 }
136
144 public static void ClearControllerCounts(MotionController controller)
145 {
146 controller.AxisCountSet(0);
147 controller.MotionCountSet(0);
148 controller.UserLimitCountSet(0);
149 }
151
160 public static void ConfigurePhantomAxis(MotionController controller, int axisIndex)
161 {
162 Axis phantomAxis = controller.AxisGet(axisIndex);
163
164 // disable all limits (not used for phantom axes)
165 phantomAxis.ErrorLimitActionSet(RSIAction.RSIActionNONE);
166 phantomAxis.HardwareNegLimitActionSet(RSIAction.RSIActionNONE);
167 phantomAxis.HardwarePosLimitActionSet(RSIAction.RSIActionNONE);
168 phantomAxis.HomeActionSet(RSIAction.RSIActionNONE);
169 phantomAxis.SoftwareNegLimitActionSet(RSIAction.RSIActionNONE);
170 phantomAxis.SoftwarePosLimitActionSet(RSIAction.RSIActionNONE);
171
172 // set position tolerances to max value for immediate MotionDone
173 double POSITION_TOLERANCE_MAX = Double.MaxValue / 10.0;
174 phantomAxis.PositionToleranceCoarseSet(POSITION_TOLERANCE_MAX);
175 phantomAxis.PositionToleranceFineSet(POSITION_TOLERANCE_MAX);
176
177 // set the motor type to phantom
178 phantomAxis.MotorTypeSet(RSIMotorType.RSIMotorTypePHANTOM);
179 }
181}
static void SetupControllerForHardware(MotionController controller)
Sets up the controller for hardware use by resetting it and starting the network.
Definition _helpers.cs:126
static void StartTheNetwork(MotionController controller)
Starts the network communication for the given MotionController.
Definition _helpers.cs:47
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 ShutdownTheNetwork(MotionController controller)
Shuts down the network communication for the given MotionController.
Definition _helpers.cs:86
static void ClearControllerCounts(MotionController controller)
Clears count settings for axes, motion, and user limits on the controller.
Definition _helpers.cs:144
static void ConfigurePhantomAxis(MotionController controller, int axisIndex)
Configures a phantom axis on the controller.
Definition _helpers.cs:160
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.
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 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 MotorTypeSet(RSIMotorType type)
Set the motor type.
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:5870
Axis * AxisGet(int32_t axisNumber)
AxisGet returns a pointer to an Axis object and initializes its internals.
RSINetworkState NetworkStateGet()
void Reset()
Reset the controller which stops and restarts the RMP firmware.
void MotionCountSet(int32_t motionCount)
Set the number of processed Motion Supervisors in the controller.
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)
void UserLimitCountSet(int32_t userLimitCount)
Set the number of processed UserLimits in the MotionController.
void AxisCountSet(int32_t axisCount)
Set the number of allocated and processed axes in the controller.
Represents the RMP soft motion controller. This class provides an interface to general controller con...
Definition rsi.h:800
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