The RMP Motion Controller APIs
MotionStreaming.cs
1
48using RSI.RapidCode.dotNET; // Import our RapidCode Library.
49using NUnit.Framework;
50using System;
51using System.Linq;
52
53#if DOXYGEN // RSI internal documentation use only
54using RSI.RapidCode;
55#endif
56
58[TestFixture]
59[Category("Software")]
60public class motionStreaming : SampleAppTestBase
61 {
62 [Test]
63 public void PTmotion()
64 {
65
67 int points = 3; // Specify the total number of streamed points.
68 int emptyCount = 2; // E-stop generated if there are this number or fewer frames loaded. (Typically for PT motion there are two frames per PT point)
69 double[] positions = { 1.0, 0.5, 0.75 }; // Specify the positions that you want to reach. (it can be n number)
70 double[] times = { 0.2, 0.3, 0.1 }; // Specify the times in which you want to reach each position. (velocity and acceleration is calculated by the RMP)
71
73 axis.MovePT(RSIMotionType.RSIMotionTypePT, // Specify the type of PT Motion that you want to perform. (RSIMotionType.RSIMotionTypePT, RSIMotionType.RSIMotionTypeBSPLINE, RSIMotionType.RSIMotionTypeBSPLINE2)
74 positions, // Specify the positions that you want to reach. (it can be n number)
75 times, // Specify the times in which you want to reach each position. (velocity and acceleration is calculated by the RMP)
76 points, // Specify the total number of streamed points.
77 emptyCount, // E-stop generated if there are this number or fewer frames loaded. (Typically for PT motion there are two frames per PT point)
78 false, // Specify whether points are kept, or are not kept.
79 true); // Specify if this is the last MovePT. (If True, this is the final point. If False, more points expected.)
80
81 axis.MotionDoneWait(); // Wait for motion to be completed.
83
85 Assert.That(axis.CommandPositionGet(), Is.EqualTo(positions.Last()), "The command position should be equal to last position in the array");
86 }
87
88 [Test, Timeout(Constants.MAX_TEST_TIME)]
89 public void PVTmotion()
90 {
92 int points = 3; // Specify the total number of streamed points. (Very Important!)
93 int emptyCount = 2; // E-stop generated if there are this number or fewer frames loaded. (Typically for PVT motion there are two frames per PT point)
94
95 double[] positions = { 1.0, 0.5, 0.75 }; // Specify the positions that you want to reach. (it can be n number)
96 double[] velocities = { 12.0, 10.0, 6.0 }; // Specify the velocities that you want to use to reach your position.
97 double[] times = { 0.1, 0.2, 0.1 }; // Specify the times in which you want to reach each position. (acceleration is calculated by the RMP)
98
99 axis.MovePVT(positions, // Specify the positions that you want to reach. (it can be n number)
100 velocities, // Specify the velocities that you want to reach. (it can be n number)
101 times, // Specify the times in which you want to reach each position. (velocity and acceleration is calculated by the RMP)
102 points, // Specify the total number of streamed points.
103 emptyCount, // E-stop generated if there are this number or fewer frames loaded. (Typically for PVT motion there are two frames per PT point)
104 false, // Specify whether points are kept, or are not kept.
105 true); // Specify if this is the last MovePT. (If True, this is the final point. If False, more points expected.)
106
107 axis.MotionDoneWait(); // Wait for motion to be completed.
109
111 Assert.That(axis.CommandPositionGet(), Is.EqualTo(positions.Last()), "The command position should be equal to last position in the array");
112 }
113
114 [Test, Timeout(Constants.MAX_TEST_TIME)]
115 public void PVAJTmotion()
116 {
118 int points = 3; // Specify the total number of streamed points. (Very Important!)
119 int emptyCount = 2; // E-stop generated if there aren't at least this many points loaded.
120
121 double[] positions = { 1.0, 0.5, 0.75 }; // Specify the positions that you want to reach. (it can be n number)
122 double[] velocities = { 10.0, 20.0, 40.0 }; // Specify the velocities that you want to use to reach your position.
123 double[] accelerations = { 4, 4, 4 }; // Specify the accelerations that you want to use to reach your position.
124 double[] jerks = { 50, 50, 50 }; // Specify the jerks that you want to use in each move.
125 double[] times = { 0.4, 0.2, 0.1 }; // Specify the times in which you want to reach each position.
126
127 axis.MovePVAJT(positions, // Specify the positions that you want to reach. (it can be n number)
128 velocities, // Specify the velocities that you want to reach. (it can be n number)
129 accelerations, // Specify the accelerations that you want to use during every move.
130 jerks, // Specify the jerks that you want to use during every move.
131 times, // Specify the times in which you want to reach each position. (velocity and acceleration is calculated by the RMP)
132 points, // Specify the total number of streamed points.
133 emptyCount, // E-stop generated if there are this number or fewer frames loaded. (Typically for PVAJT motion there are two frames per PVAJT point)
134 false, // Specify whether points are kept, or are not kept.
135 true); // Specify if this is the last MovePVAJT. (If True, this is the final point. If False, more points expected.)
136
137 axis.MotionDoneWait(); // Wait for motion to be completed.
139
141 Assert.That(axis.CommandPositionGet(), Is.EqualTo(positions.Last()), "The command position should be equal to last position in the array");
142 }
143
144 [Test, Timeout(Constants.MAX_TEST_TIME)]
145 public void PTmotionWhileStopping()
146 {
148 const int points = 3; // Specify how many points per streaming motion method call.
149 const int emptyCount = 2; // E-stop generated if there aren't at least this many points loaded.
150
151 double[] first = { 0.1, 0.2, 0.3 }; // specify the array with position(s) that will go in the first MovePT call.
152 double[] second = { 0.4, 0.5, 0.6 }; // specify the array with position(s) that will go in the second MovePT call
153 double[] third = { 0.7, 0.8, 0.9 }; // specify the array with position(s) that will go in the third MovePT call
154
155 double[] time1 = { 0.3, 0.3, 0.3 }; // specify the array with time(s) that will go in the first MovePT call.
156 double[] time2 = { 0.2, 0.2, 0.2 }; // specify the array with time(s) that will go in the second MovePT call.
157 double[] time3 = { 0.25, 0.25, 0.25 }; // specify the array with time(s) that will go in the third MovePT call.
158
159 axis.MovePT(RSIMotionType.RSIMotionTypePT, first, time1, points, emptyCount, false, false); // Start motion and stream a point.
160 axis.MovePT(RSIMotionType.RSIMotionTypePT, second, time2, points, emptyCount, false, false); // Append a point.
161
162 // After you Stop() a streaming motion, you can do 2 things.
163 // 1. You can either RESUME motion and continue to append.
164 // 2. Or you can DISCARD the points before the stop and start new motion.
165
166 axis.Stop(); // Calling Stop() after streaming motion will put you in an STOPPED state.
167
168 //axis.EStop(); // Calling EStop() after streaming motion will put you in an ERROR state.
169 // Therefore, you must ClearFaults() before taking any action.
170
171 //axis.Abort(); // Calling Abort() after streaming motion will put you in an ERROR state and trigger an AmpEnable(false).
172 // Therefore, you must call AmpEnable(true) before taking action.
173
174 axis.MotionDoneWait(); // Wait for axis to come to a stop.
175 axis.Resume(); // Resume() is the key here.
176 // If you include Resume() you will append all next streaming points to the old ones.
177 // If you do not include Resume() you will discard all previous points and start with new motion with the new points.
178
179 axis.MovePT(RSIMotionType.RSIMotionTypePT, third, time3, points, emptyCount, false, true); // Depending on whether you include Resume() or not this point will be appended or will be starting motion.
181 }
182 }
double CommandPositionGet()
Get the current command position.
int32_t MotionDoneWait()
Waits for a move to complete.
void Resume()
Resume an axis.
void MovePVT(const double *const position, const double *const velocity, const double *const time, int32_t pointCount, int32_t emptyCount, bool retain, bool final)
Move commanded by list of positions, velocities, and times.
void MovePT(RSIMotionType type, const double *const position, const double *const time, int32_t pointCount, int32_t emptyCount, bool retain, bool final)
A move commanded by a list of position and time points.
void MovePVAJT(const double *const position, const double *const velocity, const double *const acceleration, const double *const jerk, const double *const time, int32_t pointCount, int32_t emptyCount, bool retain, bool final)
RSIMotionType
Streaming motion types.
Definition rsienums.h:979