-
Notifications
You must be signed in to change notification settings - Fork 296
JSON Active Comments
This page describes using Gcode comments to carry JSON commands such that they can extend existing Gcode functions or insert control functions that execute synchronously with the Gcode.
##Gcode Comments
Gcode comments possess a number of features that extend their capabilities beyond classic Gcode. Classic Gcode only defines parentheses comments (...)
and message comments (msg...)
. Additionally, a slash character /
in the first character is a block delete, which can be considered a type of comment. G2 handles comments as so:
- Classic Gcode comments that start with a '(' and end with a ')', known as "inline comments", will be removed, UNLESS they are an active comment
- Gcode message active comments are comments with the letters
msg
(case insensitive) immediately following the open parenthesis:(Msg....)
- The string enclosed by the trailing
g
and the closing paren will be returned in the next status report as a"msg":"...."
tag - If there is a space or anything else between
(
and them
then it will be treated as a normal comment - Only one message active comment is allowed per Gcode block
- The string enclosed by the trailing
- JSON Active Comments are comments with JSON immediately inside the parentheses:
({...})
- Active comments carry content that GCode can't express, but is intrinsically part of the command on that line
- If there's a space or anything else between the
(
and the{
then it will be treated as a normal comment
- Multiple inline comments
(...)
are allowed, and gcode and active comments in between will be retained - Multiple active comments are allowed, and will be combined and treated as if they were separated by commas
- Ex:
M100 ({he1st:200}) ({he2st:210})
will be treated the same asM100 ({he1st:200, he2st:210})
- Internally msg comments are converted to JSON comments, so these may also be mixed with JSON active comments
- Ex:
- Comments that start with a semicolon ';' end the line -- everything including and after the ';' will be ignored. SOMe Gcode generators use semicolons as comments.
Valid comment cases | Notes: |
---|---|
G0X10 |
command only - no comment |
G0X10 (comment text) |
command with comment |
G0X10 (comment text |
acceptable, but a warning may be issued for the comment not being terminated |
G0X10 ;comment text |
comment delimited by semicolon |
(MSGSend this string) |
will report back as "msg":"Send this string"
|
(comment text) |
there is no command on this line |
G0 (traverse) X10 (to X ten) Y12 (and Y twelve) |
Command G0X10Y12 with multiple inline comments |
M100 (set heater temp to 210:) ({he1st:210}) |
Command with inline comment and active comment |
Additional considerations:
The % character is commonly used at the beginning and end of a gcode file to delimit the file.
We don't need any special handling in these cases. M2 and M30 handle the "end-of-job" case, and should be used for that purpose. We do NOT plan on supporting running two Gcode files concatenated. Or, at least, we don't plan on adding any special handling for that case. The % character is used by some gcode generators (InkScape, for example) as a start-comment character.
Using % as a "buffer flush" doesn't make any sense without a ! "feed hold" proceeding it.
Getting Started Pages
- Home
- What is g2core?
- Who uses g2core?
- Jerk-Controlled Motion
- Getting Started with g2core
- Connecting to g2core
- Configuring g2core
- Flashing g2core
- Troubleshooting
Reference Pages
- Gcodes
- Mcodes
- Text Mode
- JSON Communications
- GPIO Digital IO
- Alarms & Exceptions
- Power Management
- Coordinate Systems
- Status Reports
- Status Codes
- G2 Communications
- Tool Offsets and Selection
- Probing
- Feedhold, Resume, Job Kill
- Marlin Compatibility
- 9 Axis UVW Operation
- gQuintic Specs
Discussion Topics
- Roadmap
- GPIO for 1.X Releases
- Toolheads
- Raster Streaming Prototol
- g2core REST Interface
- Gcode Parsing
- G2 3DP Dialect
- Consensus Gcode
- Digital DRO
- Overview of Motion Processing
Developer Pages
- Development & Contribution
- Branching and Release - DRAFT
- Getting Started with g2core Development
- Project Structure & Motate
- Compiling G2
- OSX w/Xcode
- OSX/Linux Command Line
- Windows10 w/AtmelStudio7
- Debugging G2 on OSX
- Board and Machine Profiles
- Arduino Due Pinout
- Arduino DUE External Interfaces
- Diagnostics
- Debugging w/Motate Pins
- Development Troubleshooting
- g2core Communications
- Git Procedures
- Windows 10 / VMware 8 Issues
- Dual Endpoint USB Internals
- G2core License
- VSCode Setup
- Compatibility Axioms
- Wiki History