@Phaedrux Yes, M401 and M402 work as expected.
M122 results
M122
=== Diagnostics ===
RepRapFirmware for Duet 2 WiFi/Ethernet version 3.4.5 (2022-11-30 19:36:12) running on Duet WiFi 1.02 or later + DueX5v0.11
Board ID: 0JD2M-9F8TA-GJ4TD-6JTDJ-3S86N-TNPQ6
Used output buffers: 1 of 26 (12 max)
=== RTOS ===
Static ram: 23836
Dynamic ram: 75740 of which 12 recycled
Never used RAM 9636, free system stack 184 words
Tasks: NETWORK(notifyWait,13.8%,242) HEAT(notifyWait,0.0%,333) Move(notifyWait,0.0%,363) DUEX(notifyWait,0.0%,24) MAIN(running,85.3%,440) IDLE(ready,0.9%,30), total 100.0%
Owned mutexes:
=== Platform ===
Last reset 00:01:22 ago, cause: power up
Last software reset at 2023-05-31 10:37, reason: User, GCodes spinning, available RAM 9076, slot 0
Software reset code 0x0003 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x0041f000 BFAR 0xe000ed38 SP 0x00000000 Task MAIN Freestk 0 n/a
Error status: 0x00
Aux0 errors 0,0,0
Step timer max interval 0
MCU temperature: min 19.2, current 24.6, max 24.8
Supply voltage: min 24.1, current 24.3, max 24.6, under voltage events: 0, over voltage events: 0, power good: yes
Heap OK, handles allocated/used 99/7, heap memory allocated/used/recyclable 2048/110/0, gc cycles 0
Events: 0 queued, 0 completed
Driver 0: standstill, SG min n/a
Driver 1: standstill, SG min n/a
Driver 2: standstill, SG min n/a
Driver 3: standstill, SG min n/a
Driver 4: standstill, SG min n/a
Driver 5: standstill, SG min n/a
Driver 6: standstill, SG min n/a
Driver 7: standstill, SG min n/a
Driver 8: standstill, SG min n/a
Driver 9: standstill, SG min n/a
Driver 10:
Driver 11:
Date/time: 2023-05-31 14:33:31
Cache data hit count 2999513061
Slowest loop: 9.50ms; fastest: 0.18ms
I2C nak errors 0, send timeouts 0, receive timeouts 0, finishTimeouts 0, resets 0
=== Storage ===
Free file entries: 10
SD card 0 detected, interface speed: 20.0MBytes/sec
SD card longest read time 9.4ms, write time 0.0ms, max retries 0
=== Move ===
DMs created 83, segments created 0, maxWait 0ms, bed compensation in use: none, comp offset 0.000
=== MainDDARing ===
Scheduled moves 0, completed 0, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state -1
=== AuxDDARing ===
Scheduled moves 0, completed 0, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state -1
=== Heat ===
Bed heaters -1 -1 -1 -1, chamber heaters -1 -1 -1 -1, ordering errs 0
Heater 1 is on, I-accum = 0.0
=== GCodes ===
Segments left: 0
Movement lock held by null
HTTP is idle in state(s) 0
Telnet is idle in state(s) 0
File is idle in state(s) 0
USB is idle in state(s) 0
Aux is idle in state(s) 0
Trigger is idle in state(s) 0
Queue is idle in state(s) 0
LCD is idle in state(s) 0
Daemon is idle in state(s) 0
Autopause is idle in state(s) 0
Code queue is empty
=== DueX ===
Read count 1, 0.73 reads/min
=== Network ===
Slowest loop: 12.67ms; fastest: 0.00ms
Responder states: HTTP(0) HTTP(0) HTTP(0) HTTP(0) FTP(0) Telnet(0)
HTTP sessions: 1 of 8
= WiFi =
Network state is active
WiFi module is providing access point
Failed messages: pending 0, notready 0, noresp 0
WiFi firmware version 1.27
WiFi MAC address ca:c9:a3:40:6f:f9
WiFi Vcc 3.37, reset reason Power up
WiFi flash size 2097152, free heap 23440
WiFi IP address 192.168.0.2
Connected clients 1
Clock register 00002002
Socket states: 0 0 0 0 0 0 0 0
M98 P"config.g"
Error: in file macro line 4 column 24: meta command: variable 'config_version' already exists
config.g
; Modix Big-60, Duex Expansion, Dual Printhead
; Configuration file for Duet WiFi (firmware version 3.4.5)
; Generated by Modix - Version 3.4.5 Config B
global config_version = "Version 3.4.5 Config B"
global generation = 3 ; Generation 3 printer
global printhead = 1 ; Griffin printhead
global expansion = 1 ; Duex expansion board is installed
global printheads = 2 ; Dual printhead, change this value to 1 to switch it to a single-printhead setup
; General preferences_________________________________________________________
G90 ; send absolute coordinates...
M83 ; ...but relative extruder moves
M555 P2 ; Set output to look like Marlin
M575 P1 B57600 S1 ; Set auxiliary serial port baud rate and require checksum (for PanelDue)
; Network_____________________________________________________________________
M550 P"Big 60" ; set printer name
;M551 P"MODIX3D" ; Set password (optional)
M98 P"config_networking.g" ; load networking settings
G4 P300 ; wait 300ms
;M552 P0.0.0.0 ; Uncomment this command for using Duet Ethernet board
; Drives_________________________________________________________________________
;Main board______________________________________________________________________
M569 P0 S0 ; Physical drive 0. X1
M569 P1 S1 ; Physical drive 1. X2
M569 P2 R-1 ; Physical drive 2. Canceled
;M569 P3 S0 ; Physical drive 3. Primary Extruder
M569 P4 S0 ; Physical drive 4. Secondary Extruder
;Duex5 board_____________________________________________________________________
M569 P5 S0 ; Physical drive 5 . Y
M569 P6 S0 ; Physical drive 6 . Z1 (0,600)
M569 P7 S0 ; Physical drive 7 . Z2 (0,0)
M569 P8 S0 ; Physical drive 8 . Z3 (600,0)
M569 P9 S0 ; Physical drive 9 . Z4 (600,600)
;Motor to stepper motor driver mapping_________________________________________________________
M584 X0:1 Y5 Z6:7:8:9 E4 P3 ; Driver mapping
M671 X-185:-185:668:668 Y668:-46:-46:668 S30 ; Anticlockwise
;Motor settings and acceleration limits___________________________________________________________________
M350 X16 Y16 Z16 E16:16 I1 ; Configure microstepping with interpolation
M92 X100 Y100 Z2000 E418.5 ; Set steps per mm
M566 X360 Y360 Z30 E3600:3600 P1 ; Set maximum instantaneous speed changes (mm/min)
M203 X9000 Y9000 Z200 E5000:5000 ; Set maximum speeds (mm/min)
M201 X1000 Y1000 Z200 E5000:5000 ; Set accelerations (mm/s^2)
M204 P500 ; Set print and travel accelerations (mm/s^2)
M906 X1800 Y1800 E1000 Z1800 I50 ; Set motor currents (mA) and motor idle factor in per cent
M84 S100 ; Set idle timeout - 100 seconds
; Axis Limits
M208 X0 Y0 Z-2 S1 ; set axis minima
M208 X600 Y600 Z660 S0 ; set axis maxima
; Endstops
M574 X1 S1 P"xstop + e0stop" ; configure switch-type (e.g. microswitch) endstop for low end on X via pin xstop
M574 Y2 S1 P"ystop" ; configure switch-type (e.g. microswitch) endstop for low end on Y via pin ystop
; Z-Probe
;M558 P9 C"zprobe.in" H3 F100 T9000 R0.5 ; BLTouch probing settings
;M950 S0 C"duex.pwm5" ; sets the BLTouch probe
M950 S0 C"duex.pwm4" ; create servo pin 0 for BLTouch
M558 P9 C"zprobe.in" H5 F120 T6000 ; set Z probe type to bltouch and the dive height + speeds
M376 H100 ; Height (mm) over which to taper off the bed compensation
G31 P500 X-25.5 Y26.9 ; BLTouch X and Y offset
M557 X{move.axes[0].min + sensors.probes[0].offsets[0] + 1, move.axes[0].max + sensors.probes[0].offsets[0] - 1} Y{move.axes[1].min + sensors.probes[0].offsets[1] + 1, move.axes[1].max + sensors.probes[0].offsets[1] - 1} P10:10
; The M557 is used to define the mesh grid area. It uses the P parameter to set the amount of probing points. P10:10 would be a 10x10 grid. Supports up to a 21x21 grid.
M98 P"config_probe.g" ; Load the Z-offset from the config_probe.g file
; The Z_offset value is now set in config_probe.g, not in config.g
; Adjust the values there, do not adjust anything here.
; Heaters___________________________________________________________
M140 H-1 ; disable heated bed (overrides default heater mapping)
;E0_________________________________________________________________
;M308 S0 P"e0temp" Y"thermistor" T100000 B4725 ; configure sensor 0 as thermistor on pin e0temp
;M308 S0 P"spi.cs1" Y"rtd-max31865" ; Configure sensor 0 as PT100 via the daughterboard
M308 S0 P"e0temp" Y"pt1000" ; Configure sensor 0 as PT1000 on pin e0temp
M950 H1 C"e0heat" T0 ; create nozzle heater output on e0heat and map it to sensor 0
;M98 P"PID_tune_E1.g" R1 ; PID calibration
; M307 is not used in this config. The M307 files are stored and executed from the PID_tune_E0.g file. You can verify the values there.
M143 H1 S285 ; set temperature limit for heater 0 to 285C
;if {global.printheads} = 2
;E1_________________________________________________________________
;M308 S1 P"e1temp" Y"thermistor" T100000 B4725 ; configure sensor 1 as thermistor on pin e1temp
;M308 S1 P"spi.cs2" Y"rtd-max31865" ; Configure sensor 1 as PT100 via the daughterboard
;M308 S1 P"e1temp" Y"pt1000" ; Configure sensor 1 as PT1000 on pin e1temp
;M950 H2 C"e0heat" T1 ; create nozzle heater output on e1heat and map it to sensor 1
;M98 P"PID_tune_E1.g" R1 ; PID calibration
; M307 is not used in this config. The M307 files are stored and executed from the PID_tune_E1.g file. You can verify the values there.
; M143 H1 S285 ; set temperature limit for heater 1 to 285C
; Fans______________________________________________________________
M950 F0 C"fan0" Q500 ; create fan 0 on pin fan0 and set its frequency
M106 P0 S0 H-1 C"Primary blower fan" ; set fan 0 value. Thermostatic control is turned on
M950 F2 C"duex.fan7" Q500 ; create LED on pin fan2 and set its frequency
M106 P2 S0 H-1 C"LED" ; Disable fan channel for LED
M106 P2 S255 ; LED on by default
M950 F3 C"duex.fan5" Q500 ; create fan 3 on pin fan1 and set its frequency
M106 P3 S255 H0 T45 ; set fan 3 value. Thermostatic control is turned on
;if {global.printheads} = 2
;M950 F1 C"fan1" Q500 ; create fan 1 on pin fan1 and set its frequency
; M106 P1 S0 H-1 C"Secondary blower fan" ; set fan 1 value. Thermostatic control is turned on
; M950 F4 C"duex.fan6" Q500 ; create fan 4 on pin fan1 and set its frequency
; M106 P4 S255 H1 T45 ; set fan 4 value. Thermostatic control is turned on
; Tools______________________________________________________________
;T0_________________________________________________________________
M563 P0 S"Griffin Extruder" D0 H1 F0 ; define tool 0
G10 P0 X0 Y0 Z0 ; set tool 0 axis offsets
G10 P0 R0 S0 ; set initial tool 0 active and standby temperatures to 0C
;if {global.printheads} = 2
;T1_________________________________________________________________
; M563 P1 S"E1 Secondary" D1 H1 F1 ; define tool 1
; G10 P1 X0 Y74.3 Z0 ; set tool 1 axis offsets
; G10 P1 R0 S210 ; set initial tool 1 active and standby temperatures to 0C
; Automatic power saving____________________________________________
M911 S22.5 R29.0 P"M913 X0 Y0 G91 M83 G1 Z3 E-5 F1000" ; Set voltage thresholds and actions to run on power loss. Power Failure Pause
; Filament sensor settings__________________________________________________
;M591 D0 P1 C"duex.e2stop" S1 ; Regular filament sensor for E0
;M591 D1 P1 C"duex.e3stop" S1 ; Regular filament sensor for E1
; Add-on settings__________________________________________________
; Primary hotend Clog detector__________________________________________________
;M591 D0 P7 C"e1stop" S1 L3.2 E10 R10:300 ; Clog Detector E0 [Add-On]
;Secondary hotend Clog detector__________________________________________________
;M591 D1 P7 C"zstop" S1 L3.2 E10 R10:300 ; Clog Detector E1 [Add-On]
; Crash detector__________________________________________________
;M950 J2 C"duex.e4stop" ; create Input Pin 2 on pin E4 to for M581 Command.
;M581 P2 T0 S0 R0 ; Crash Detector [Add-On]
; Emergency stop button__________________________________________________
;M950 J3 C"duex.e6stop" ; create Input Pin 2 on pin E4 to for M581 Command.
;M581 P3 T0 S1 R0 ; Emergency stop [Add-On]
;M581 P3 T1 S1 R1 ; Emergency stop, pause the print [Add-On]
;M581 P3 T1 S1 R0 ; Emergency stop, pause always [Add-On]
; Automatic Z Offset Calibration____________________________________
M574 Z1 S1 P"!duex.e5stop" ; configure switch-type for Automatic z-offset
;M501
T0
; homeall.g
; called to home all axes
G91 ; relative positioning
G1 H2 Z15 F200 ; lift Z relative to current position
M98 P"0:/sys/homex.g"
M400
M98 P"0:/sys/homey.g"
M400
M98 P"0:/sys/homez.g"
M400
; homex.g
; called to home the X axis
G91 ; relative positioning
M913 X50 ; X axis 50% power
;G1 H2 Z5 F200 ; lift Z relative to current position
G1 H1 X{(move.axes[0].max+5)*-1} F3000 ; move quickly to X and Y axis endstops and stop there (first pass)
G1 H2 X5 F600 ; go back a few mm
G1 H1 X{(move.axes[0].max+5)*-1} F600 ; move slowly to X and Y axis endstops once more (second pass)
M913 X100 ; X axis 100% power
;G1 H2 Z-5 F200 ; lower Z again
G90 ; absolute positioning
; homey.g
; called to home the Y axis
G91 ; relative positioning
;G1 H2 Z5 F200 ; lift Z relative to current position
G1 H1 Y{(move.axes[1].max+5)} F3000 ; move quickly to Y axis endstop and stop there (first pass)
G1 H2 Y-5 F600 ; go back a few mm
G1 H1 Y{(move.axes[1].max+5)} F600 ; move slowly to Y axis endstop once more (second pass)
;G1 H2 Z-5 F3000 ; lower Z again
G90 ; absolute positioning
; homez.g
; called to home the Z axis
if !move.axes[0].homed || !move.axes[1].homed ; If the printer hasn't been homed, home it
M98 P"0:/sys/homeall.g"
M400
M98 P"config_probe.g" ; Load BLTouch probe settings
M280 P0 S10 I1 ; push pin down
M280 P0 S60 I1 ; use touch probe mode
G29 S2 ; cancel mesh bed compensation
G91 ; relative positioning
G1 H2 Z5 F200 ; lift Z relative to current position
G90 ; absolute positioning
G1 X{move.axes[0].min+5} Y{move.axes[1].min+5} F6000 ; move to front left
G1 F600 ; slow speed
M401
M400
G4 P500
G30 ; home Z by probing the bed
G32 ; tram bed
;G1 X{move.axes[0].min+5} Y{move.axes[1].min+5} F6000 ; move to front left
;G1 F600 ; slow speed
;M400
;G4 P500
;G30 ; home Z by probing the bed
;G29 S1 ; load heightmap
; Modix bed.g file for duex enabled printers
; Configuration file for Duet WiFi (firmware version 3.4.5)
; Generated by Modix - Version 3.4.5 Config B
M558 H10 ; BLTouch probing settings
M98 P"config_probe.g" ; ensure probe is using most recent configuration values
M280 P0 S10 ; deploy probe
M280 P0 S60 ; set touch switch mode
if !move.axes[0].homed || !move.axes[1].homed || !move.axes[2].homed ; If the printer hasn't been homed, home it
M98 P"0:/sys/homeall.g"
M400
M280 P0 S60 I1 ; clear any probe errors
G29 S2 ; cancel mesh bed compensation
M290 R0 S0 ; cancel baby stepping
G90 ; absolute moves
G1 Z15 F99999 ; insure Z starting position is high enough to avoid probing errors
G1 X{move.axes[0].min+2} Y{move.axes[1].min+2} F6000 ; move to front left
G30 ; do single probe which sets Z to trigger height of Z probe
; --- level bed ---
M280 P0 S10 ; deploy probe
M280 P0 S60 ; set touch switch mode
G30 P0 X{move.axes[0].min + sensors.probes[0].offsets[0] + 2} Y{move.axes[1].min + sensors.probes[0].offsets[1] + 2} Z-99999 ; Probe near front left leadscrew
M280 P0 S10 ; deploy probe
M280 P0 S60 ; set touch switch mode
G30 P1 X{move.axes[0].max + sensors.probes[0].offsets[0] - 2} Y{move.axes[1].min + sensors.probes[0].offsets[1] + 2} Z-99999 ; Probe near front right leadscrew
M280 P0 S10 ; deploy probe
M280 P0 S60 ; set touch switch mode
G30 P2 X{move.axes[0].max + sensors.probes[0].offsets[0] - 2} Y{move.axes[1].max + sensors.probes[0].offsets[1] - 2} Z-99999 ; Probe near rear right leadscrew
M280 P0 S10 ; deploy probe
M280 P0 S60 ; set touch switch mode
G30 P3 X{move.axes[0].min + sensors.probes[0].offsets[0] + 2} Y{move.axes[1].max + sensors.probes[0].offsets[1] - 2} Z-99999 S4 ; Probe near rear left leadscrew
G1 X{move.axes[0].min+2} Y{move.axes[1].min+2} Z10 F6000 ; move to front left
M558 H3
M98 P"config_probe.g" ; insure probe is using most recent configuration values
G30 ; do single probe which sets Z to trigger height of Z probe
M280 P0 S90 ; deploy probe
M18 XY ; release XY stepper motors
M98 P"config_probe.g" ; insure probe is using most recent configuration values
if !move.axes[0].homed || !move.axes[1].homed || !move.axes[2].homed ; If the printer hasn't been homed, home it
M280 P0 S60 I1 ; clear any probe errors
G29 S2 ; cancel mesh bed compensation
G91 ; relative positioning
M913 X50 ; X axis 50% power
G1 H2 Z5 F200 ; lift Z relative to current position
G1 H1 X{(move.axes[0].max+5)*-1} Y{move.axes[1].max+5} F3000 ; move quickly to X and Y axis endstops and stop there (first pass)
G1 H2 X5 Y-5 F600 ; go back a few mm
G1 H1 X{(move.axes[0].max+5)*-1} Y{move.axes[1].max+5} F600 ; move slowly to X and Y axis endstops once more (second pass)
M913 X100 ; X axis 100% power
G90 ; absolute positioning
G1 X{move.axes[0].min+5} Y{move.axes[1].min+5} F6000 ; move to front left
G1 F600 ; reduce speed
G30 ; home Z by probing the bed
G29 S2 ; cancel mesh bed compensation
M290 R0 S0 ; cancel baby stepping
G90 ; absolute moves
G1 Z5 F99999 ; insure Z starting position is high enough to avoid probing errors
G1 X{move.axes[0].min+2} Y{move.axes[1].min+2} F6000 ; move to front left
G30 ; do single probe which sets Z to trigger height of Z probe
G29 S0 ; probe bed and create height map
G28 ; home all
Please excuse the absolute mess that is in these files. These are from modix, and they didn't work from the get go, so we've been trying to fix the issues step by step, but I'm almost to the point of just making a new config with rrf configurator and removing this mess that is in here.