28using RSI.RapidCode.dotNET;
32using System.Threading;
34using System.Runtime.InteropServices;
46 Console.WriteLine(
"G-Code Callback executed: " + data.
LineNumber +
" " + data.
LineText);
56public class GcodeMotion : SampleAppTestBase
65 public void Teardown()
73 jointsMultiAxis?.
Abort();
80 var actualUnits = model.UnitsGet();
81 Assert.That(actualUnits, Is.EqualTo(expectedUnits), $
"Expected model units to be '{expectedUnits}' but was '{actualUnits}' instead!");
82 var actualName = model.NameGet();
83 Assert.That(actualName, Is.EqualTo(expectedName), $
"Expected model name to be '{expectedName}' but was '{actualName}' instead!");
87 public void GcodeBasic()
91 string gcodeProgram =
"G91; Sets the programming mode to RELATIVE\n" +
92 "G64; Turns off exact stop mode(Default)\n" +
93 "G1 X1.0 Y0.0 Z0.0 A1.0 F60.0; Move on USERUNIT in positive x direction at 60in/min. Moves Free axis A to position 1.0.\n" +
94 "G3 X1 Y1 I0 J1; Counter clockwise arc with a center point of 0,1,0 and end point of 1,1,0 relative to the current position\n" +
95 "M80; Show how to use an M-code with GcodeCallback!\n";
98 const string xLabel =
"X-Axis";
99 const string yLabel =
"Y-Axis";
100 const string zLabel =
"Z-Axis";
101 const string aLabel =
"A-Axis";
113 Axis[] axes =
new Axis[] { x_axis, y_axis, z_axis, a_axis };
114 jointsMultiAxis.
AxesAdd(axes, axes.Length);
118 const string modelName =
"RSI_XYZA";
119 const double scaling = 1.0, offset = 0.0;
140 robot.
Gcode.Load(gcodeProgram);
151 Console.WriteLine(
"Error: " + e.Message);
157 Console.WriteLine(
"G-code estimated run time: " + robot.
Gcode.
DurationGet() +
" seconds");
160 Int64 activeLineNumber = 0;
167 Console.WriteLine(
"G-Code Line Number: " + activeLineNumber);
174 Assert.AreEqual(gcodeProgram.Count(c => c.Equals(
'\n')), robot.
Gcode.
LineCountGet());
175 VerifyModel(robot.
ModelGet(), modelName);
179 public void ChangingUnits()
183 const string xLabel =
"X-Axis";
184 const string yLabel =
"Y-Axis";
185 const string zLabel =
"Z-Axis";
186 const string aLabel =
"A-Axis";
187 const string bLabel =
"B-Axis";
188 const string cLabel =
"C-Axis";
204 Axis[] axes =
new Axis[] { x_axis, y_axis, z_axis, a_axis, b_axis, c_axis };
205 jointsMultiAxis.
AxesAdd(axes, axes.Length);
208 const string modelName =
"RSI_XYZABC_Centimeters";
210 const double scaling = 1.0, offset = 0.0;
240 VerifyModel(robot.
ModelGet(), modelName, units);
static void CheckErrors(RapidCodeObject rsiObject)
Check if the RapidCodeObject has any errors.
Helper Functions for checking logged creation errors, starting the network, etc.
void UserLabelSet(const char *const userLabel)
Set the axis User defined Label.
Represents a single axis of motion control. This class provides an interface for commanding motion,...
int32_t LineCountGet()=0
Get the number of lines in the last loaded G-Code program.
int32_t SyntaxErrorLineNumberGet()=0
Gets the line number of any errors in the G-Code syntax.
int32_t ExecutingLineNumberGet()=0
Get the currently executing line number.
LinearUnits UnitsGet()=0
Get the currently active unit as set by G20/G21.
void AccelerationRateSet(double programmingUnitsPerMinuteSquared)=0
Sets the target acceleration for the machine (units/minute^2). Should be set apprpriately based on yo...
void UnitsSet(LinearUnits units)=0
Set the currently active unit (same as calling G20/G21)
double DurationGet()=0
Get the time duration required to run the loaded G-Code program in seconds.
void FreeAxisLetterSet(const char gcodeLetter, const int freeAxisIndex)=0
Map a letter in a Gcode file to a free axis. It will be used to specify the free axis' motion.
void FeedRateSet(double programmingUnitsPerMinute)=0
Sets the target feed rate for the machine (units/minute).
void Run()=0
Run the loaded G-Code file (or string). The behavior is non-blocking. Use Robot.MotionDoneWait() to b...
Handles callbacks for M-codes within a G-code file.
void CallbackRegister(Cartesian::GcodeCallback *callback)=0
G-code callback register.
bool IsRunning()=0
Returns true if a Gcode program is executing, false otherwise.
void UnitsSet(LinearUnits units)
Set the units the built model will use.
void FreeAxisAdd(const ModelAxisMapping &freeAxis)
Map a free-axis in the kinematic model.
Describes the mathematical kinematic model of a robot.
The Builder for a linear kinematic model. Constructs a single Linear Kinematic Model to use when crea...
void JointAdd(const LinearJointMapping &joint)
adds a joint to the model using the configuration specified within the LinearJoint structure.
uint64_t MotionDoneWait()=0
Waits for a move to complete.
static Robot * RobotCreate(MotionController *controller, MultiAxis *multiAxis, KinematicModelBuilder *builder, uint32_t motionFrameBufferSize)
Create a Robot object to use G-Code, path motion, etc.
void EStop()=0
Commands a joint EStop and clears the loaded moves.
Represents a collection of joints in Cartesian space with forward and inverse kinematics....
void ClearFaults()=0
Clears the MultiAxis fault then the Robot's error bit.
const KinematicModel & ModelGet()=0
Get the model this robot was created with Visit our Topic Page for more information.
static void RobotDelete(MotionController *controller, Robot *robot)
Delete a Robot.
RSI::RapidCode::Cartesian::Gcode * Gcode
An object to load and run Gcode files.
static constexpr int32_t AxisFrameBufferSizeDefault
The default value of the AxisFrameBufferSize, also the minimum allowable value.
Represents the RMP soft motion controller. This class provides an interface to general controller con...
void AxisRemoveAll()
Remove all axes from a MultiAxis group.s.
void AxesAdd(Axis **axes, int32_t axisCount)
void ClearFaults()
Clear all faults for an Axis or MultiAxis.
void AmpEnableSet(bool enable)
Enable all amplifiers.
void Abort()
Abort an axis.
const RsiError *const ErrorLogGet()
Get the next RsiError in the log.
int32_t ErrorLogCountGet()
Get the number of software errors in the error log.
make a Callback class and register it with the Gcode object
CartesianAxis
This enum specifies which Cartesian axis a LinearJointMapping maps a robot joint to.
LinearUnits
Unit types. For G-code use.
const char * LineText
The actual line content from the G-code file.
int32_t LineNumber
The line number in the G-code file where the M-code is encountered.
Holds data for the G-code M-code callback mechanism.
Data for adding joint or free-axis mappings when building a kinematic model.