Sekret!
Gcodes Not For Everyone
Advanced diagnostics and reporting. Not really secret, but intended for internal use.
G38 Distance Probing
G38 will move the bed until a probe until contact is made, and report the position when contact is made, storing a list of coordinate points with depths. This is helpful for making the bed level (and potentially working on non-planar surfaces).
Usage
G38 Xn Yn Zn An Bn T# Pn Dn In Hn On Fn
Parameters
Xn relative move in this axis Yn relative move in this axis Zn relative move in this axis An relative move in this axis Bn relative move in this axis T# head where probe is loaded; if no T#, probe is not in a tool position; default: no T Pn probe connection If T is specified, P values can be: 0 : PA3 pin on 10-pin connector 1 : PA2 pin on 10-pin connector 2 : LIMIT1 pin on 18-pin connector 3 : LIMIT2 pin on 18-pin connector 4 : RTD1 pin on 18-pin connector 5 : RTD2 pin on 18-pin connector If T is not specified, P values can be: 0 : No direct connect probe; canbus based probe one *** must specify probeHead via T arg 1 : X Limit1 or W_RTD1 (sys30) 2 : X Limit2 or W_RTD2 (sys30) 3 : X Fault 4 : X Home 5 : unused 6 : Y Limit1 7 : Y Limit2 8 : Y Fault 9 : Y Home 10 : unused 11 : Z Limit1 12 : Z Limit2 13 : Z Fault 14 : Z Home 15 : unused 16 : A Limit1 17 : A Limit2 18 : A Fault 19 : A Home 20 : unused 21 : B Limit1 22 : B Limit2 23 : B Fault 24 : B Home 25 : unused 26 : C Limit1 27 : C Limit2 28 : C Fault 29 : C Home D only 1 is presently supported; other options for future development I is probe polarity; 0 if contact makes a circuit, 1 if contact breaks the circuit H head offset register to use for tool dimension O additional offset F feedrate in mm/min (nonpersistent)
Example
G38 Z-9 T# P3 D1 I1 F200
This command is decoded and executed by the printer as follows:
- G38 (probe)
- Z-9 (9 mm in Z toward 0)
- T# (target head)
- P3 (LIMIT2 pin on 18-pin connector)
- D1 (only option)
- I1 (contact breaks circuit)
- F200 (at 200 mm/smin)
M619 Map Aux Port
M619 sets the behavior (function and output timing) of a user-controllable switch (including aux ports and arm lights).
Normally we expect users to keep the defaults - but some people will want to remap logical functions to other physical pins. Here are the details.
This can be used to remap outputs associated with inputs, or to control frequency/duty cycle of outputs - or both.
So I can associate the Laser X-hair button (logical function) with my X-arm "danger" LEDs (physical pins), or I can associate my M7 button on the CNC tab (logical function) with my Y-arm light (physical pins).
Usage
M619 Ln In Sn Hn On Fn Pn
Parameters
Ln
Ln is the logical function (or button push) that we want to affect.
M619 L Parameter | Alt MCode | Description | Default HSS | Default I Value | Notes |
---|---|---|---|---|---|
M619 L0 | N/A | none | none | N/A | none |
M619 L1 | M7 | Mist Coolant | W2 | I8 | shared with Ext Head |
M619 L2 | M8 | Flood Coolant | W1 | I7 | none |
M619 L3 | M671 | X-Arm LEDs | X2 | I2 | none |
M619 L4 | M670 | Y-Arm LEDs | Y1 | I3 | none |
M619 L5 | M675 | RESP LEDs | X1 | I1 | none |
M619 L6 | M677 | Buzzer | Z1 | I5 | none |
M619 L7 | M676 | Recirc Fan | N/A | N/A | *16A only |
M619 L8 | M678 | Laser X-hair | N/A | N/A | *16A only |
M619 L9 | N/A | Exhaust | N/A | N/A | none |
M619 L10 | M679 | Vacuum | N/A | N/A | *EHR/16A only |
M619 L11 | M685 | (Positive) Air | N/A | N/A | *16A only |
M619 L12 | N/A | Ext. Head | W2 | I8 | shared with Mist Coolant |
M619 L13 | M620 | CO2 Power | N/A | N/A | *16A only |
M619 L Parameter | Alt MCode | Description | Default HSS | Default I Value | Notes |
---|---|---|---|---|---|
M619 L0 | N/A | none | N/A | N/A | none |
M619 L1 | M7 | Mist Coolant | AP1 | I1 | shared with Ext Head |
M619 L2 | M8 | Flood Coolant | AP2 | I2 | none |
M619 L3 | M671 | Danger LEDs | N/A | N/A | *ESR/30M only |
M619 L4 | M670 | Gantry LEDs | AP5 | I4 | none |
M619 L5 | M675 | RESP LEDs | AP6 | I5 | none |
M619 L6 | M677 | Buzzer | N/A | N/A | *ESR/30M only |
M619 L7 | M676 | Recirc Fan | AP7 | I6 | none |
M619 L8 | M678 | Laser X-hair | AP9 | I8 | 16A only |
M619 L9 | N/A | Exhaust | N/A | N/A | none |
M619 L10 | M679 | Vacuum | DR1 | I9 | none |
M619 L11 | M685 | (Positive) Air | DR2 | I10 | none |
M619 L12 | N/A | Ext. Head | AP1 | I1 | shared with Mist Coolant |
M619 L13 | M620 | CO2 Power | AP4 | I3 | 16A only |
In
In designates the physical pins that we want to affect:
M619 I Parameter | HSS | Default Descr | Default L Mapping | Notes |
---|---|---|---|---|
M619 I1 | X1 | RESP LEDs | L5 | none |
M619 I2 | X2 | X-Arm LEDs | L3 | none |
M619 I3 | Y1 | Y-Arm LEDs | I13 | none |
M619 I4 | Y2 | N/A | N/A | none |
M619 I5 | Z1 | Buzzer | L5 | none |
M619 I6 | N/A | N/A | N/A | none |
M619 I7 | W1 | Flood Coolant | L7 | none |
M619 I8 | W2 | Mist / Ext Head | L8 | dual mapping |
M619 I Parameter | HSS | Default Descr | Default L Mapping | Notes |
---|---|---|---|---|
M619 I1 | AP1 | Mist / Ext Head | L8 | dual mapping |
M619 I2 | AP2 | Flood Coolant | L7 | none |
M619 I3 | AP4 | CO2 Power | L13 | none |
M619 I4 | AP5 | Gantry LEDs | L4 | none |
M619 I5 | AP6 | RESP LEDs | L1 | none |
M619 I6 | AP7 | Recirc Fan | L7 | none |
M619 I7 | AP8 | N/A | N/A | none |
M619 I8 | AP9 | Laser X-hair | L11 | *optional |
M619 I9 | DR1 | Vacuum | L10 | none |
M619 I10 | DR2 | (Positive) Air | L11 | none |
M619 I11 | DR3 | N/A | N/A | none |
M619 I12 | DR4 | N/A | N/A | none |
Sn
Sn dictates the power level, 0-100.
Hn
Hn specifies the polarity of the sensor: 0 or 1 (H0 = active low, H1 = active high). HSS default to H1, Drains default to H0.
On
On can limit each execution to a single iteration with an O1. Other values default to no limit.
Fn
Fn stipulates the frequency in Hz for the signal. If Fn and Pn are both specified, only Fn is used.
Pn
Pn stipulates the period in seconds for the signal. If Fn and Pn are both specified, only Fn is used.
M670 Toggle Y-Arm Light Now
Turn on Y-arm light immediately. S 0 - 100 for duty.
M671 Toggle X-Arm Lights
Toggle X-arm Lights S 0 - 100 for duty.
M672 Toggle Y-Arm with Sensor
See main Gcode page.
M673 Toggle Y-Arm Light Next
Toggle Y-arm light after all previous commands are finished. S 0 - 100 for duty.
M772 Reset All Metrics
In addition to info on the Gcode page, these other reports are available:
M772 - reset all internal data gathering to “0” state Sn - optional. If Sn != 0, then Sn is a mask of which reports to auto send when M30 is processed. S1 or S3 are typical user settings to get basic print info. Bit0 (0x01): enables M773 report (basic print stats) Bit1 (0x02): enables M774 report (system configuration) Bit2 (0x04): enables M774 report (queue metrics) Bit3 (0x08): enables M775 report (crashDataFromRam) Bit4 (0x10): enables M776 report (command and motionQ usage) Bit5 (0x20): enables M779 report (slice timing)
M773 Generate Basic Report
M773 generates a basic report of printing statistics (including average speed, number of primes, etc.)
Note: this report will be more meaningful if you use M772 to reset these counters at the start of a job.
Usage
M773
Parameters
N/A
Example
M773
- M773 (generate basic report)
Sample Output
>IN: 50: ****************************************************************** >IN: 50: ** Begin M773 - print job metrics Report >IN: 50: ****************************************************************** >IN: 50: >IN: 50: Time (s) Dist (m) >IN: 50: -------- -------- >IN: 50: Totals: 0.0 0.000 >IN: 50: >IN: 50: Printing moves: 0.0 0.000 >IN: 50: Non-printing moves 0.0 0.000 >IN: 50: >IN: 50: Accelerating: 0.0 0.000 >IN: 50: Cruising: 0.0 0.000 >IN: 50: Decelerating: 0.0 0.000 >IN: 50: >IN: 50: can e steps issued: 0 >IN: 50: approx filament (PI*d) 0.000 m >IN: 50: approx filament (PIr^2) 0.000 m >IN: 50: unprimes issued: 0 >IN: 50: primes issued: 0 >IN: 50: unprime-primes avoided: 0 >IN: 50: >IN: 50: ****************************************************************** >IN: 50: ** End M773 Report >IN: 50: ******************************************************************
M774 Generate Queue Report
M774 generates a queue metrics report:
Usage
M774
Parameters
N/A
Example
M774
- M774 (generate queue report)
Sample Output
>IN: 50: ****************************************************************** >IN: 50: ** Begin M774 - queue metrics Report >IN: 50: ****************************************************************** >IN: 50: >IN: 50: Total commands: 109 >IN: 50: Total moves: 0 >IN: 50: Max commands in CmdQue: 9 (60) >IN: 50: Max commands in motionQ: 0 (50) >IN: 50: Max commands in deferredCmdQue: 0 (15) >IN: 50: Max chars in raw RX buffer: 1 (256) >IN: 50: Max chars in urgent RX buffer: 0 (1024) >IN: 50: Max chars in normal RX buffer: 43 (6144) >IN: 50: Max chars in direct RX buffer: 0 (8192) >IN: 50: Max chars in serial TX buffer: 697 (6144) >IN: 50: Total serial TX chars rejected: 0 (6144) >IN: 50: >IN: 50: ****************************************************************** >IN: 50: ** End M774 Report >IN: 50: ******************************************************************
M775 Generate Crash Report
M775 generates a crash data report:
Usage
M775
Parameters
N/A
Example
M775
- M775 (generate queue report)
Sample Output
>IN: 50: ****************************************************************** >IN: 50: ** Begin M775 - current crashDataFromRAM Report >IN: 50: ****************************************************************** >IN: 50: >IN: 50: slice_1Hz = 1 >IN: 50: slice_10Hz = 5 >IN: 50: slice_100Hz = 9 >IN: 50: slice_1000Hz = 3 >IN: 50: lsiActualFreq = 0 >IN: 50: >IN: 50: CAN1->MCR = 0x00010044 >IN: 50: CAN1->MSR = 0x00000c00 >IN: 50: CAN1->TSR = 0x1c030303 >IN: 50: CAN1->IER = 0x00000000 >IN: 50: CAN1->ESR = 0x00000000 >IN: 50: CAN1->BTR = 0x0012000d >IN: 50: >IN: 50: CAN1->sTxMailBox[0].TIR = 0x89408004 >IN: 50: CAN1->sTxMailBox[0].TDTR = 0x00000008 >IN: 50: CAN1->sTxMailBox[0].TDLR = 0x00000008 >IN: 50: CAN1->sTxMailBox[0].TDHR = 0x00000008 >IN: 50: CAN1->sTxMailBox[1].TIR = 0x80088006 >IN: 50: CAN1->sTxMailBox[1].TDTR = 0x00000008 >IN: 50: CAN1->sTxMailBox[1].TDLR = 0x00000000 >IN: 50: CAN1->sTxMailBox[1].TDHR = 0x00000000 >IN: 50: CAN1->sTxMailBox[2].TIR = 0x880a0924 >IN: 50: CAN1->sTxMailBox[2].TDTR = 0x00000008 >IN: 50: CAN1->sTxMailBox[2].TDLR = 0x00000003 >IN: 50: CAN1->sTxMailBox[2].TDHR = 0x00000000 >IN: 50: >IN: 50: total_commandsProcessed = 109 >IN: 50: total_motionQprocessed = 0 >IN: 50: total_DeferredProcessed = 0 >IN: 50: total_charsRx = 2331 >IN: 50: total_charsTx = 22871 >IN: 50: total_canRx = 3233 >IN: 50: total_canTx = 1772 >IN: 50: >IN: 50: max_CommandsInQue = 9 >IN: 50: max_motionQvalidEntries = 0 >IN: 50: max_DeferredCommandsInQue = 0 >IN: 50: max_rawRxCharsInBuf = 1 >IN: 50: max_urgentRxCharsInBuf = 0 >IN: 50: max_normalRxCharsInBuf = 43 >IN: 50: max_directRxCharsInBuf = 0 >IN: 50: max_normalTxCharsInBuf = 697 >IN: 50: max_canRxQ_numMsg = 88 >IN: 50: max_canTxQ_numMsg = 34 >IN: 50: >IN: 50: curr_CommandsInQue = 5 >IN: 50: curr_motionQ.validEntries = 0 >IN: 50: curr_DeferredCommandsInQue = 0 >IN: 50: curr_rawRxCharsInBuf = 0 >IN: 50: curr_urgentRxCharsInBuf = 0 >IN: 50: curr_normalRxCharsInBuf = 0 >IN: 50: curr_normalTxCharsInBuf = 0 >IN: 50: curr_gs._canRxQ.numMsg = 0 >IN: 50: curr_gs._canRxQ.numMsg = 0 >IN: 50: >IN: 50: curr_rawRxIndexIn = 73 >IN: 50: curr_rawRxIndexOut = 73 >IN: 50: curr_urgentRxIndexIn = 0 >IN: 50: curr_urgentRxIndexOut = 0 >IN: 50: curr_normalRxIndexIn = 822 >IN: 50: curr_normalRxIndexOut = 822 >IN: 50: curr_normalTxIndexIn = 6084 >IN: 50: curr_normalTxIndexOut = 6126 >IN: 50: >IN: 50: _serialPortRxOverrunCnt = 0 >IN: 50: flushedRxCharsDuringAbort = 0 >IN: 50: >IN: 50: pendingAcknowledge = 0 >IN: 50: _gcodeCmdsReceived = 43 >IN: 50: _gcodeAcksSent = 43 >IN: 50: >IN: 50: _g4DwellTimer = 0 >IN: 50: _gcodePaused = 0 >IN: 50: _abortInProgress = 0 >IN: 50: _blockAllMotion = 1 >IN: 50: _blockAbsoluteMotion = 0 >IN: 50: _motionSensorTripped = 0 >IN: 50: _waitingFor.flags.u32 = 0x00000000 >IN: 50: _needToProcessDeferredCommands = 0 >IN: 50: >IN: 50: X.HomeSense.State = 1 >IN: 50: Y.HomeSense.State = 1 >IN: 50: Z.HomeSense.State = 2 >IN: 50: A.HomeSense.State = 2 >IN: 50: B.HomeSense.State = 2 >IN: 50: C.HomeSense.State = 2 >IN: 50: >IN: 50: X.FaultSense.State = 2 >IN: 50: Y.FaultSense.State = 2 >IN: 50: Z.FaultSense.State = 2 >IN: 50: A.FaultSense.State = 2 >IN: 50: B.FaultSense.State = 2 >IN: 50: C.FaultSense.State = 2 >IN: 50: >IN: 50: X.Limit1Sense.State = 2 >IN: 50: Y.Limit1Sense.State = 2 >IN: 50: Z.Limit1Sense.State = 2 >IN: 50: A.Limit1Sense.State = 2 >IN: 50: B.Limit1Sense.State = 2 >IN: 50: C.Limit1Sense.State = 2 >IN: 50: >IN: 50: X.Limit2Sense.State = 2 >IN: 50: Y.Limit2Sense.State = 2 >IN: 50: Z.Limit2Sense.State = 2 >IN: 50: A.Limit2Sense.State = 2 >IN: 50: B.Limit2Sense.State = 2 >IN: 50: C.Limit2Sense.State = 2 >IN: 50: >IN: 50: X.HasBeenHomed = 0 >IN: 50: Y.HasBeenHomed = 0 >IN: 50: Z.HasBeenHomed = 1 >IN: 50: A.HasBeenHomed = 1 >IN: 50: B.HasBeenHomed = 1 >IN: 50: C.HasBeenHomed = 1 >IN: 50: >IN: 50: _validFirmwareKey = 1 >IN: 50: >IN: 50: ****************************************************************** >IN: 50: ** End M775 Report >IN: 50: ******************************************************************
M776 Generate Motion Report
M776 generates a motion report:
Usage
M776
Parameters
N/A
Example
M776
- M776 (generate queue report)
Sample Output
>IN: 50: ****************************************************************** >IN: 50: ** Begin M776 - cmd/motionQ usage histograms Report >IN: 50: ****************************************************************** >IN: 50: >IN: 50: motionQ numEntries histogram at start of move (total moves: 0) >IN: 50: --: 0 (executed while forcing Q empty) >IN: 50: 1: 0 >IN: 50: 2: 0 >IN: 50: 3: 0 >IN: 50: 4: 0 >IN: 50: 5: 0 >IN: 50: 6: 0 >IN: 50: 7: 0 >IN: 50: 8: 0 >IN: 50: 9: 0 >IN: 50: 10: 0 >IN: 50: 11: 0 >IN: 50: 12: 0 >IN: 50: 13: 0 >IN: 50: 14: 0 >IN: 50: 15: 0 >IN: 50: 16: 0 >IN: 50: 17: 0 >IN: 50: 18: 0 >IN: 50: 19: 0 >IN: 50: 20: 0 >IN: 50: 21: 0 >IN: 50: 22: 0 >IN: 50: 23: 0 >IN: 50: 24: 0 >IN: 50: 25: 0 >IN: 50: 26: 0 >IN: 50: 27: 0 >IN: 50: 28: 0 >IN: 50: 29: 0 >IN: 50: 30: 0 >IN: 50: 31: 0 >IN: 50: 32: 0 >IN: 50: 33: 0 >IN: 50: 34: 0 >IN: 50: 35: 0 >IN: 50: 36: 0 >IN: 50: 37: 0 >IN: 50: 38: 0 >IN: 50: 39: 0 >IN: 50: 40: 0 >IN: 50: 41: 0 >IN: 50: 42: 0 >IN: 50: 43: 0 >IN: 50: 44: 0 >IN: 50: 45: 0 >IN: 50: 46: 0 >IN: 50: 47: 0 >IN: 50: 48: 0 >IN: 50: 49: 0 >IN: 50: 50: 0 >IN: 50: >IN: 50: ****************************************************************** >IN: 50: >IN: 50: cmdQue numEntries histogram when cmd received (total cmds: 109) >IN: 50: >IN: 50: 0: 89 >IN: 50: 1: 2 >IN: 50: 2: 4 >IN: 50: 3: 2 >IN: 50: 4: 4 >IN: 50: 5: 2 >IN: 50: 6: 2 >IN: 50: 7: 2 >IN: 50: 8: 2 >IN: 50: 9: 0 >IN: 50: 10: 0 >IN: 50: 11: 0 >IN: 50: 12: 0 >IN: 50: 13: 0 >IN: 50: 14: 0 >IN: 50: 15: 0 >IN: 50: 16: 0 >IN: 50: 17: 0 >IN: 50: 18: 0 >IN: 50: 19: 0 >IN: 50: 20: 0 >IN: 50: 21: 0 >IN: 50: 22: 0 >IN: 50: 23: 0 >IN: 50: 24: 0 >IN: 50: 25: 0 >IN: 50: 26: 0 >IN: 50: 27: 0 >IN: 50: 28: 0 >IN: 50: 29: 0 >IN: 50: 30: 0 >IN: 50: 31: 0 >IN: 50: 32: 0 >IN: 50: 33: 0 >IN: 50: 34: 0 >IN: 50: 35: 0 >IN: 50: 36: 0 >IN: 50: 37: 0 >IN: 50: 38: 0 >IN: 50: 39: 0 >IN: 50: 40: 0 >IN: 50: 41: 0 >IN: 50: 42: 0 >IN: 50: 43: 0 >IN: 50: 44: 0 >IN: 50: 45: 0 >IN: 50: 46: 0 >IN: 50: 47: 0 >IN: 50: 48: 0 >IN: 50: 49: 0 >IN: 50: 50: 0 >IN: 50: 51: 0 >IN: 50: 52: 0 >IN: 50: 53: 0 >IN: 50: 54: 0 >IN: 50: 55: 0 >IN: 50: 56: 0 >IN: 50: 57: 0 >IN: 50: 58: 0 >IN: 50: 59: 0 >IN: 50: 60: 0 >IN: 50: >IN: 50: ****************************************************************** >IN: 50: ** End M776 Report >IN: 50: ******************************************************************
M784 Generate Summary Report
M784 generates a system summary report:
Usage
M784
Parameters
N/A
Example
M784
- M784 (generate queue report)
Sample Output
>IN: 50: ****************************************************************** >IN: 50: ** Begin M784 - System Summary Report >IN: 50: ****************************************************************** >IN: 50: >IN: 50: Motion Controller: >IN: 50: >IN: 50: DEBUG_EngineSR_30M_5.000za :mcu 0x413 0x1001 :uid 0x3a002c00 0x18473132 0x39373139 :UART6 >IN: 50: License key: 4vxBFI46rsyXbS6__dU5mdS3WP8X8dLi >IN: 50: >IN: 50: ****************************************************************** >IN: 50: >IN: 50: Compatible Devices: >IN: 50: >IN: 50: T# Location DeviceType SW Loaded PCB RTD1 RTD2 RTD3 SubType SW Codebase Can# Fmt# >IN: 50: ----- ----------- ------------ -------------------------- -------- -------- -------- -------- ------------ ------------ ---- ---- >IN: 50: T1 Yoke1 Head2 MK1 Heads_Beds_103_5.000za.hex 4988_J 1K None None Standard Medusa5 1 2 >IN: 50: >IN: 50: ****************************************************************** >IN: 50: >IN: 50: Incompatible Devices (must be upgraded to 5.x software): >IN: 50: >IN: 50: OldT# Location >IN: 50: ----- ----------- >IN: 50: T14 Yoke1 Head4 >IN: 50: >IN: 50: ****************************************************************** >IN: 50: ** End M784 Report >IN: 50: ******************************************************************
M797 Report Sensors
M797 generates a sensor status report:
Usage
M797 In
Parameters
I can be 1 (logical states) or 2 (physical values)
Example 1
M797 I1
This command is decoded and executed by the printer as follows:
- M797 (generate sensor report)
- I1 (show logical states)
Sample Output 1 (30M/ESR)
>GB: Logical States (M797 I1) >GB: AX ST DR HM L1 L2 FT >GB: == == == == == == == >GB: X - F H . . . <= in this example, X is currently homed >GB: Y - F - . . . <= in this example, Y is not currently homed >GB: Z - F . . . . >GB: A not installed >GB: B not installed >GB: <end>
Column definitions: AX - Axis ST - Step DR - Direction HM - Home L1 - Limit 1 L2 - Limit 2 FT - Fault
Example 2
M797 I2
This command is decoded and executed by the printer as follows:
- M797 (generate sensor report)
- I2 (show physical values)
Sample Output 2 (30M/ESR)
>GB: Physical values (M797 I2) >GB: AX ST DR HM L1 L2 FT >GB: == == == == == == == >GB: X 1 0 1 . . . >GB: Y 1 0 0 . . . >GB: Z 1 0 . . . . >GB: A not installed >GB: B not installed >GB: <end>