APIs, concepts, guides, and more
gcode-loading

This method parses and processes the Gcode program. The program can be run by calling the Run() method.

Exceptions
RsiErrorif the program was not parsed or processed successfully, one exception is thrown. Additional RsiError are logged, use a HelperFunctions::CheckErrors() on the Gcode object to get details for each Gcode line number that failed.
Sample Code:
string gcodeProgram = "G91; Sets the programming mode to RELATIVE\n" +
"G64; Turns off exact stop mode(Default)\n" +
"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" +
"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" +
"M80; Show how to use an M-code with GcodeCallback!\n";
// We assume the axes have been confgured and homed properly prior this this program.
const string xLabel = "X-Axis";
const string yLabel = "Y-Axis";
const string zLabel = "Z-Axis";
const string aLabel = "A-Axis";
x_axis.UserLabelSet(xLabel);
y_axis.UserLabelSet(yLabel);
z_axis.UserLabelSet(zLabel);
a_axis.UserLabelSet(aLabel);
// The joint index of each axis is the index within the MultiAxis object.
// "X-Axis" has joint index 0
// "Y-Axis" has joint index 1
// "Z-Axis" has joint index 2
// "A-Axis" has joint index 3
Axis[] axes = new Axis[] { x_axis, y_axis, z_axis, a_axis };
jointsMultiAxis.AxesAdd(axes, axes.Length);
jointsMultiAxis.ClearFaults();
jointsMultiAxis.AmpEnableSet(true);
const string modelName = "RSI_XYZA";
const double scaling = 1.0, offset = 0.0;
LinearModelBuilder builder = new LinearModelBuilder(modelName);
builder.JointAdd(new LinearJointMapping(0, CartesianAxis.X) { ExpectedLabel = xLabel, Scaling = scaling, Offset = offset });
builder.JointAdd(new LinearJointMapping(1, CartesianAxis.Y) { ExpectedLabel = yLabel, Scaling = scaling, Offset = offset });
builder.JointAdd(new LinearJointMapping(2, CartesianAxis.Z) { ExpectedLabel = zLabel, Scaling = scaling, Offset = offset });
builder.FreeAxisAdd(new ModelAxisMapping(3) { ExpectedLabel = aLabel, Scaling = scaling, Offset = offset }); // Add a free axis.
// Create a Robot object with a multi axis containing all joints and the kinematic type
robot = Robot.RobotCreate(controller, jointsMultiAxis, builder, MotionController.AxisFrameBufferSizeDefault);
robot.Gcode.AccelerationRateSet(1000); // UserUnits per minute squared
// The free axis index here refers to the index in the RobotPosition freeAxes array. We use index 0 here to refer to the first position in that array.
robot.Gcode.FreeAxisLetterSet('A', 0);
robot.Gcode.CallbackRegister(callback); // Register a callback to be called when the Gcode encounters any M-code command
try
{
robot.Gcode.Load(gcodeProgram); // Loads in the string and prepairs it for execution
}
catch (Exception e)
{
Console.WriteLine("Error loading G-Code: " + e.Message);
// get any additional G-Code errors (will give you details of every line number that has an error in parsing or processing)
throw e; // exit the program
}
// print some details about the upcoming motion
Console.WriteLine("G-Code Line Count: " + robot.Gcode.LineCountGet());
Console.WriteLine("G-Code Error Log Count: " + robot.Gcode.ErrorLogCountGet());
Console.WriteLine("G-code estimated run time: " + robot.Gcode.DurationGet() + " seconds");
robot.Gcode.Run(); // Starts the motion. Calling with the false arguement for non blocking behavior
Int64 activeLineNumber = 0;
do
{
Thread.Sleep(200);
if (activeLineNumber != robot.Gcode.ExecutingLineNumberGet()) // only write if we are on a new line
{
activeLineNumber = robot.Gcode.ExecutingLineNumberGet();
Console.WriteLine("G-Code Line Number: " + activeLineNumber);
}
} while (robot.Gcode.IsRunning());
HelperFunctions.CheckErrors(robot.Gcode); // Check for any errors that may have occured during the motion
See also
Run, PlannedPositionsGet