Duet3 Executing moves out of order - 3.1.1 W/ SBC
-
Hi!
After significantly slowing down my COVID-19 Shield Clip printing, its time to get back into toolchanging!
However, after I updated to 3.1.1, I have a very frustrating bug(s???) and need some help.
When I start a print, if my axes are not homed, my printer reports: Error:
G0/G1: insufficient axes homed
However - here's my starting Gcode:
M107 M190 S60 ; set bed temperature and wait for it to be reached G10 T0 S195 R175 T0 P0 ; Activate tool but don't run any macros G28 G32 ; auto-magic levelling M558 H3 F240 A1 M557 X263:330 Y281:319 S19.0 G29 ;M572 D0 S0.01; Set K-factor PLA ;M572 D2 S0.01; Set K-factor PLA M572 D2 S0.022; Set K-factor PLA ;M572 D3 S0.01; Set K-factor PLA ;M572 D4 S0.01; Set K-factor PLA ;M572 D5 S0.01; Set K-factor PLA M106 P15 S255; TURN ON THE LIGHTS T-1 P0 ; turn off the tool(s) that you didn't actually grab, just to make sure all are in standby T0 ; real tool M117 We Prantin G21 ; set units to millimeters G90 ; use absolute coordinates M82 ; use absolute distances for extrusion G92 E0 ; Filament gcode G1 Z0.300 F9000.000
The first real movement command that it gets SHOULD be to home - my machine cannot home with tools on without damaging results.
I've read that in 3.1 the toolchange behavior changed so that they would run even if the machine wasn't homed. So I thought, maybe T0 P0 isn't honored anymore, so I should ask for the tool only after homing - So that's what I did, removed the initial T0 P0 command and the T-1 P0 command and tried again. Same issue.
So I then manually homed the machine, and started a print with the single T0 command at the end of the starting script. To be clear, that means it should run a G28 and home, and then a G29 mesh probe before ever thinking to do anything with the tool.
It proceeds to immediately Yeet on over to the tool and pick it up, and once the tool change macro is complete, it goes for a nice G28 home, with my tool attached! not good!
I'm curious if there is something I'm doing wrong, but this setup is something I was using fine on older RRF versions, so I wanted to share my experience and see if I'm missing something with the upgraded firmware or if this is a bug. I'll be reverting to older firmware sometime later this week to make sure.
The nitty gritty:
Config:
; Configuration file for Duet 3 (firmware version 3) ; executed by the firmware on start-up ; ; generated by RepRapFirmware Configuration Tool v2.1.4 on Thu Dec 26 2019 17:05:21 GMT-0600 (Central Standard Time) ; General preferences G90 ; send absolute coordinates... M83 ; ...but relative extruder moves M550 P"StableBot" ; set printer name M667 S1 ; select CoreXY mode ;+++++++++++++++++++++++++++++++++++MOTION SYSTEM++++++++++++++++++++++++++++++ ; Drives M569 P0.1 S1 ; physical drive 0.1 goes forwards XY M569 P0.0 S0 ; physical drive 0.0 goes forwards XY M569 P0.2 S0 ; physical drive 0.2 goes forwards Coupler M569 P0.3 S1 ; physical drive 0.3 goes backwards Z M569 P0.4 S1 ; physical drive 0.4 goes backwards Z M569 P0.5 S0 ; physical drive 0.5 goes backwards Z M569 P1.0 S0 ; Extruder 1 M569 P1.1 S0 ; Extruder 2 M569 P1.2 S0 ; Extruder 3 M584 X0.1 Y0.0 Z0.3:0.4:0.5 C0.2 E1.0:1.1:1.2 ; set drive mapping M350 X16 Y16 E16:16:16 I1 ; configure microstepping with interpolation M350 Z16 C8 I0 ; No interpolation on Z Axis M92 X160.00 Y160.00 Z1600.00 E409.00:409.00:409.00 C100 ; set steps per mm M566 X300 Y300 Z600 E1800:1800:1800 C2 ; set maximum instantaneous speed changes (mm/min) M203 X50000.00 Y50000.00 Z840 E10800.00:10800:10800 C5000 ; set maximum speeds (mm/min) M201 X2000.00 Y2000.00 Z18 E2500:2500:2500 C400 ; set accelerations (mm/s^2) M906 X1800 Y1800 Z1800 E1100:1100:1100 C600 I60 ; set motor currents (mA) and motor idle factor in per cent M84 S120 ; Set idle timeout ; Axis Limits M208 X-17 Y-15 Z0 C0 S1 ; set axis minima M208 X622 Y660 Z950 C500 S0 ; set axis maxima M671 X290.0:-32:627 Y658:185:186 S20 ; leadscrews at rear middle, front left+right ; Endstops M574 X1 S1 P"io2.in" ; configure active-low endstop for low end on X via pin io2.in M574 Y1 S1 P"io0.in" ; configure active-low endstop for low end on Y via pin io0.in ;M574 Y2 S1 P"!io1.in" ; configure active-low endstop for high end on Y via pin io1.in ;Tool Presence Checking M950 J"io4.in" ; Z-Probe M558 P5 C"io3.in" H10 F120 T3600 ; set Z probe type to simp switch and the dive height + speeds G31 X0 Y0 Z0 P200 ; set Z probe trigger value, offset and trigger height ;M557 X15:600 Y15:600 S30 ; define mesh grid - Whole Bed M557 X10:590 Y10:590 P21:21 ; define mesh grid - Center Small ; Bed Heater M308 S0 P"temp3" Y"thermistor" T100000 B4138 A"Bed1" ; configure sensor 0 as thermistor on pin temp0 M950 H0 C"out1" T0 ; create bed heater output on out0 and map it to sensor 0 M143 H0 S120 ; set temperature limit for heater 0 to 120C M307 H0 A133.1 C1828.2 D2.6 V12.3 B0 S0.75 ; disable bang-bang mode for the bed heater and set PWM limit M140 H0 ; map heated bed to heater 0 ; Lights M950 F15 C"out9" Q500 ; create fan 2 on pin out7 and set its frequency M106 P15 S0 C"LEDS" H-1 ; set fan 2 value. Thermostatic control is turned off ;+++++++++++++++++++++++++++++++++Hotends++++++++++++++++++++++++++++++++++++++++++++++ ;MOVED TO MACRO BELOW - allows for scripting updates <-LIAR ;M98 P"/macros/tool_conf" ;+++++++++++++++++++++++++++++++++Hotends++++++++++++++++++++++++++++++++++++++++++++++ ;Each Tool Needs a Hotend Fan, Part Fan, Heater, Thermistor, and offsets ;====Tool 0====== M308 S1 P"1.temp0" Y"thermistor" T100000 B4725 C7.060000e-8 A"T0" ; configure sensor 1 as thermistor on pin temp2 M950 H1 C"1.out0" T1 ; create nozzle heater output on out2 and map it to sensor 1 ;M143 H1 P1 S285 A0 ; set temperature limit for heater 1 to 280C ;M307 H1 B0 S1.00 ; disable bang-bang mode for the nozzle heater and set PWM limit ;====Tool 1====== M308 S2 P"1.temp1" Y"thermistor" T100000 B4725 C7.060000e-8 A"T1"; configure sensor 1 as thermistor on pin temp2 M950 H2 C"1.out1" T2 ; create nozzle heater output on out2 and map it to sensor 1 ;M143 H2 P2 S285 A0 ; set temperature limit for heater 1 to 280C ;M307 H2 B0 S1.00 ; disable bang-bang mode for the nozzle heater and set PWM limit ;====Tool 2====== M308 S3 P"1.temp2" Y"thermistor" T100000 B4725 C7.060000e-8 A"T2 Supervolcano"; configure sensor 1 as thermistor on pin temp2 M950 H3 C"1.out2" T3 ; create nozzle heater output on out2 and map it to sensor 1 ;M143 H2 P2 S285 A0 ; set temperature limit for heater 1 to 280C ;M307 H2 B0 S1.00 ; disable bang-bang mode for the nozzle heater and set PWM limit ; Fans T0 M950 F0 C"1.out7" ; create fan 0 on pin out7 and set its frequency M106 P0 C"Part_Cool0 FAN" ; set fan 0 value. Thermostatic control is turned off M950 F1 C"1.out6" ; create fan 1 on pin out8 and set its frequency M106 P1 S255 H1 T45 ; set fan 1 value. Thermostatic control is turned on ; Fans T1 M950 F2 C"1.out8" ; create fan 2 on pin out3 and set its frequency M106 P2 C"Part_cool1 FAN" ; set fan 0 value. Thermostatic control is turned off M950 F3 C"1.out3" ; create fan 1 on pin out3 and set its frequency M106 P3 S255 H2 T45 ; set fan 1 value. Thermostatic control is turned on ; Fans T2 M950 F4 C"1.out4" ; create fan 2 on pin out3 and set its frequency M106 P4 C"Part_cool2 FAN" ; set fan 0 value. Thermostatic control is turned off M950 F5 C"1.out5" ; create fan 1 on pin out3 and set its frequency M106 P5 S255 H3 T45 ; set fan 1 value. Thermostatic control is turned on ; Filament Endstop ;M591 D2 P1 C"0.io5.in" S1 ; sets a filament sensor on io5 ; Positioning T0 M563 P0 D0 H1 F0 S"T0" ; define tool 0 G10 P0 X0 Y0 Z-5.47 ; set tool 0 axis offsets - Negative=nozzle below switch, Positive = nozzle above switch, larger negative, lower below - to make more space, go more negative G10 P0 R170 S215 ; set initial tool 0 active and standby temperatures to 0C ; Positioning T1 M563 P1 D1 H2 F2 S"T1" ; define tool 1 G10 P1 X0.1 Y0.4 Z-5.1 ; set tool 1 axis offsets Negative=nozzle below switch, Positive = nozzle above switch, larger negative, lower below - to make more space, go more negative G10 P1 R170 S215 ; set initial tool 1 active and standby temperatures to 0C ; Positioning T2 M563 P2 D2 H3 F4 S"T2 Supervolcano" ; define tool 1 ;G10 P2 X30 Y30 Z-44.81 ; set tool 1 axis offsets Negative=nozzle below switch, Positive = nozzle above switch, larger negative, lower below - to make more space, go more negative ;G10 P2 X0.0 Y0.0 Z-14 G10 P2 X0.0 Y0.0 Z-14.5 G10 P2 R170 S215 ; set initial tool 1 active and standby temperatures to 0C ; Filament Endstop ;M591 D1 P1 C"1.io1.in" S1 ; sets a filament sensor on io5
M122:
M122 === Diagnostics === RepRapFirmware for Duet 3 MB6HC version 3.1.1 running on Duet 3 MB6HC v0.6 or 1.0 (SBC mode) Board ID: 08DGM-9T66A-G63SJ-6J1DG-3SD6K-9V0MA Used output buffers: 1 of 40 (13 max) === RTOS === Static ram: 154604 Dynamic ram: 164108 of which 20 recycled Exception stack ram used: 304 Never used ram: 74180 Tasks: NETWORK(ready,1972) HEAT(blocked,1188) CanReceiv(suspended,3512) CanSender(suspended,1488) CanClock(blocked,1436) TMC(blocked,204) MAIN(running,4928) IDLE(ready,76) Owned mutexes: === Platform === Last reset 00:17:21 ago, cause: software Last software reset at 2020-06-17 03:49, reason: User, spinning module LinuxInterface, available RAM 73432 bytes (slot 0) Software reset code 0x0010 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x0444a000 BFAR 0x00000000 SP 0xffffffff Task MAIN Error status: 0 MCU temperature: min 36.9, current 37.0, max 38.4 Supply voltage: min 24.2, current 24.4, max 24.4, under voltage events: 0, over voltage events: 0, power good: yes 12V rail voltage: min 12.1, current 12.2, max 12.2, under voltage events: 0 Driver 0: standstill, reads 10072, writes 14 timeouts 0, SG min/max 0/0 Driver 1: standstill, reads 10072, writes 14 timeouts 0, SG min/max 0/0 Driver 2: standstill, reads 10073, writes 14 timeouts 0, SG min/max 0/0 Driver 3: standstill, reads 10073, writes 14 timeouts 0, SG min/max 0/0 Driver 4: standstill, reads 10074, writes 14 timeouts 0, SG min/max 0/0 Driver 5: standstill, reads 10074, writes 14 timeouts 0, SG min/max 0/0 Date/time: 2020-06-17 04:06:43 Slowest loop: 5.14ms; fastest: 0.14ms === Storage === Free file entries: 10 SD card 0 not detected, interface speed: 37.5MBytes/sec SD card longest read time 0.0ms, write time 0.0ms, max retries 0 === Move === Hiccups: 0(0), FreeDm: 375, MinFreeDm: 375, MaxWait: 0ms Bed compensation in use: none, comp offset 0.000 === MainDDARing === Scheduled moves: 0, completed moves: 0, StepErrors: 0, LaErrors: 0, Underruns: 0, 0 CDDA state: -1 === AuxDDARing === Scheduled moves: 0, completed moves: 0, StepErrors: 0, LaErrors: 0, Underruns: 0, 0 CDDA state: -1 === Heat === Bed heaters = 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1, chamberHeaters = -1 -1 -1 -1 === GCodes === Segments left: 0 Movement lock held by null HTTP* is ready with "M122" 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 SBC is idle in state(s) 0 Daemon* is idle in state(s) 0 Aux2 is idle in state(s) 0 Autopause is idle in state(s) 0 Code queue is empty. === Network === Slowest loop: 1.50ms; fastest: 0.01ms Responder states: HTTP(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) FTP(0) Telnet(0), 0 sessions Telnet(0), 0 sessions HTTP sessions: 0 of 8 - Ethernet - State: disabled Error counts: 0 0 0 0 0 Socket states: 0 0 0 0 0 0 0 0 === CAN === Messages sent 4169, longest wait 2ms for type 6011 === Linux interface === State: 0, failed transfers: 0 Last transfer: 22ms ago RX/TX seq numbers: 33575/33577 SPI underruns 0, overruns 0 Number of disconnects: 0 Buffer RX/TX: 0/0-0 === Duet Control Server === Duet Control Server v3.1.1 Code buffer space: 4096 Configured SPI speed: 8000000 Hz Full transfers per second: 32.44
Toolchange Script (carbon copies for all of my tools)
; tpre0.g ; called before tool 0 is selected ;Unlock Coupler M98 P"/macros/Coupler - Unlock" ;Move to location G53 G1 X38 Y623 F36000 ;Move in G1 Y633 F36000 ;Collect G1 Y640 F2500 ;Close Coupler M98 P"/macros/Coupler - Lock" ;Need to update this to conditional and combine it in the move to pickup G91 G1 Z10 F1000 G90 ;Move to Prime Location G1 Y625 F4000 ====================================================================================== ====================================================================================== ; tpost0.g ; called after tool 0 has been selected ;heatup M116 P0 S10 ;prime nozzle M98 P"/sys/Purge.g" ;Wipe M98 P"/sys/Wipe.g" M83 ; Extruder to relative G1 E-2 ; retract before last one M82 ; extrude to absolute M98 P"/sys/Wipe.g" ;Mesh on G29 S1 ;Move out of wipe area G1 Y575 ;PCF fan on M106 P1 S255
-
The M109 command will select tool 0 implicitly. This is for compatibility with slicers that don't explicitly select a tool. Better to home the printer first, so that movement in your tool change files doesn't cause that error.
-
@dc42 said in Duet3 Executing moves out of order - 3.1.1 W/ SBC:
The M109 command will select tool 0 implicitly. This is for compatibility with slicers that don't explicitly select a tool. Better to home the printer first, so that movement in your tool change files doesn't cause that error.
Hi DC32!
Where are you seeing M109? I do not use that in my toolchange script nor my starting G-code. Regardless, even when I move my T0 P0 tool command to AFTER the G28 command (that is, the G28 is the first uncommented movement line in the entire file) the machine still goes to pick up the first tool without homing first.
Below is the beginning of a file that I've tried printing, but it still will pick up the tool before homing, but ONLY if the machine was homed before starting the file.One additional question for clarification as well - does Tn P0 not work anymore for not calling any of the toolchange scripts? Just want to know if I should be trying to use them in the first place.
M107 M190 S60 ; set bed temperature and wait for it to be reached G10 T0 S195 R175 G28 G32 ; auto-magic levelling M558 H3 F240 A1 M557 X263:330 Y281:319 S19.0 G29 ;M572 D0 S0.01; Set K-factor PLA ;M572 D2 S0.01; Set K-factor PLA M572 D2 S0.022; Set K-factor PLA ;M572 D3 S0.01; Set K-factor PLA ;M572 D4 S0.01; Set K-factor PLA ;M572 D5 S0.01; Set K-factor PLA M106 P15 S255; TURN ON THE LIGHTS T0 ; M117 We Prantin
-
Alright - Got it -
I had my T's and P's wrong - the gcode was interpreting the G10 line as " G10 || T0" instead of a G10 P0, because I missed that.
Now that I printed with the correct file (having the correct G10 P0) we're good, nothing with the firmware.Thank you for your time.
-
@Luke-sLaboratory That's really spooky. I made exactly the same mistake using G10 "T" instead of "P" just a short time ago, but for completely different reasons. As an aside, G10 Tn Snnn Rnnn will always set the active and standby temperatures for Tool 0 regardless of the specified tool number. I too thought it must be a bug until I realised my error and used "P" (which works flawlessly) instead of "T" (which does very strange things)
-
Yep -
Was from an earlier version of my M109->G10 conversion script, but now its fixed and we're all good!
-
@Luke-sLaboratory I don't have any excuse (unless senility counts).