Print Error on all jobs
-
I started getting a print error which i cannot locate the source. i've been making some minor changes to my config.g and IDEX pre, post, free files. suddenly i cannot start a print because the print job immediately errors out with the following info:
4/15/2023, 11:10:34 AM M32 "0:/gcodes/chip_0.2mm_PLA_41m.gcode" File 0:/gcodes/chip_0.2mm_PLA_41m.gcode selected for printing Error: in file macro line 129 column 25: meta command: reached null object before end of selector string Cancelled printing file 0:/gcodes/chip_0.2mm_PLA_41m.gcode, print time was 0h 0m 4/15/2023, 11:10:09 AM Error: in file macro line 129 column 25: meta command: reached null object before end of selector string Cancelled printing file 0:/gcodes/Dual_Color Cali-Cube - V2 - S2_0.2mm_PLA_1h34m.gcode, print time was 0h 0m 4/15/2023, 11:10:07 AM Macro retractprobe.g complete 4/15/2023, 11:09:52 AM Macro deployprobe.g complete
if i reboot the printer it seems like i can make 1 successful print of any job. but then going forward all print jobs fail with the same error shown above. only a reboot seems to fix the issue temporarily.
I dont know which macro line 129 is referring to because even if i print any random print job created from weeks ago i still get the same line 129 error which makes no sense. it doesnt seem to relate to the actual print job file.
any help is appreciated.
here is my config file
config.g
; General preferences G90 ; send absolute coordinates... M83 ; ...but relative extruder moves M550 P"V-Core3" ; set printer name M669 K11 Y1:-1:0:-1 ; Dual Markforged Kinematics https://forum.duet3d.com/topic/7796/haq-xy/125 https://forum.duet3d.com/topic/21021/dual-markforged-kinematics?_=1672244913067 ;M669 K1 X1:0:0:0 Y1:-1:0:-1 Z0:0:1:0 U0:0:0:1; Matrix mapping for Axis - X:Y:Z:U G21 ; Set Units to Millimeters ; Network M552 S2 ; enable network M586 P0 S1 ; enable HTTP M586 P1 S0 ; disable FTP M586 P2 S0 ; disable Telnet G4 S2 ; wait for expansion boards to start ; Drives M569 P0.0 S0 D2 ; Left Z physical drive 0.0 goes forwards M569 P0.1 S0 D2 ; Rear Z physical drive 0.1 goes forwards M569 P0.2 S0 D2 ; Right Z physical drive 0.2 goes forwards M569 P0.3 S1 D2 ; Right U toolhead drive 0.3 goes forwards M569 P0.4 S1 D2 ; Left X toolhead drive 0.4 goes forwards M569 P0.5 S0 D2 ; Left Y drive 0.5 goes forwards M569 P0.6 S1 D2 ; Right Y drive 0.6 goes reverse M569 P20.0 S1 D2 ; Extruder physical drive 20.0 goes forwards Toolboard 1LC M569 P21.0 S1 D2 ; Extruder physical drive 21.0 goes forwards Toolboard 1LC M569 P1.0 S0 D2 ; Extruder physical drive 1.0 goes forwards Expansion 3HC M569 P1.1 S0 D2 ; Extruder physical drive 1.1 goes forwards Expansion 3HC M569 P1.2 S1 D2 ; Extruder physical drive 1.2 goes forwards Expansion 3HC M584 Z0.0:0.1:0.2 Y0.5:0.6 X0.4 U0.3 E20.0:21.0:1.0:1.1 ; set drive mapping M350 U16 X16 Y16 Z16 E16:16:16:16 I1 ; configure microstepping with interpolation M92 U80.0 X80.00 Y80.00 Z800.00 E690:690:690:690 ; set steps per mm M906 U2000 X2000 Y2000 Z1800 E1000:1000:1000:1000 I30 ; set motor currents (mA) and motor idle factor in per cent -- safe for Duet 3 mini 5+ M84 S30 ; Set idle timeout ;M98 P"0:/sys/setspeeds.g" ; Set speed and acceleration M566 U500.00 X500.00 Y500.00 Z60.00 E300:300:300:300 P1 ;E300:300 P1 ;X1500.00 Y1500.00 Z6.00 E300 P1 ;E120.00 P1 ; set maximum instantaneous speed changes (mm/min) M203 U30000.00 X30000.00 Y30000.00 Z1000.00 E7200:7200:7200:7200 ;E7200:3600 ;E3600.00 ; set maximum speeds (mm/min) M201 U10000.00 X10000.00 Y10000.00 Z100.00 E3000:3000:3000:3000 ;E10000:3600 ;E3600.00 ; set accelerations (mm/s^2) M207 S0.6 F7200 Z0.2 ; firmware retraction orbiter 2.0 ; Axis Limits M208 X-70 U0 Y0 Z0 S1 ; set axis minima M208 X310 U380 Y306 Z300 S0 ; set axis maxima ;M208 X-70:310 Y0:308 U0:308 Z0:300 ; Endstops M574 X1 S1 P"20.io2.in" ; configure active high endstops Toolhead 1 X low end M574 U2 S1 P"21.io2.in" ; configure active high endstops Toolhead 2 U high end M574 Y2 S1 P"io2.in" ; configure active high endstops Y. IO0 and IO1 also are UART, so do not put endstops on them, use them elsewhere to free up UART. M574 Z1 S2 M671 X-4.5:155:304.5 Y-4.5:305:-4.5 S5 ; define positions of Z leadscrews or bed levelling screws ;M557 X30:280 Y20:300 P5 ; define 5x5 mesh grid M557 X30:280 Y20:270 P5 ; Heaters M308 S0 P"temp0" Y"thermistor" T100000 B3950 A"Keenevo 600W Bed" ; configure sensor 0 as thermistor on pin temp0 M950 H0 C"out0" T0 Q10 ; Define Heater0 as the heated bed, bind to Sensor0 M140 H0 P0 ; Define Heated Bed M307 H0 R0.602 K0.401:0.000 D2.44 E1.35 S1.00 B0 ; PID Tuning for Heater0, Heated Bed (100C) M143 H0 S140 T0 A0 ; Set temperature limit for Heater0 to 120C M308 S1 P"20.temp0" Y"thermistor" T100000 B4725 C7.060000e-8 A"Slice Hotend 0" ;Slice Engineering 300C thermistor, settings are online M950 H1 C"20.out0" T1 Q100 ; Define Heater1 as Extruder0 heater, bind to Sensor1 M307 H1 R2.808 K0.368:0.000 D4.56 E1.35 S1.00 B0 V23.8 ; PID Tuning for Heater1, Extruder0 (240C) M143 H1 S325 T1 A0 ; Set temperature limit for heater 1 to 285C M308 S2 P"temp1" Y"thermistor" T100000 B3950 C7.060000e-8 A"Chamber" ; configure sensor 2 as thermistor on pin temp1 M950 H2 C"out1" T2 ;Q10 ; create chamber heater output on out1 and map it to sensor 2 M307 H2 R0.01 K0.200:0.000 D60 E1.35 S1.00 B1 ; enable bang-bang mode for the chamber heater and set PWM limit M141 H2 ; map chamber to heater 2 M143 H2 S120 T2 A0 ; set temperature limit for heater 2 to 60C M308 S3 P"21.temp0" Y"pt1000" A"Slice Hotend 1" ;Slice Engineering RTD PT1000 450C, settings are online M950 H3 C"21.out0" T3 Q100 ; Define Heater1 as Extruder0 heater, bind to Sensor1 M307 H3 R2.808 K0.368:0.000 D4.56 E1.35 S1.00 B0 V23.8 ; PID Tuning for Heater1, Extruder0 (240C) M143 H3 S325 T3 A0 ; Set temperature limit for heater 1 to 285C M308 S4 P"20.temp1" Y"thermistor" A"Cooling Block" T100000 B3950 C7.060000e-8 ; Define Sensor as Chamber temperature M308 S5 Y"drivers" A"4028 Power" ; 4028 power using spare heater M308 S6 Y"mcu-temp" A"Mini 5+ MCU" ; Define Sensor3 as the integrated MCU temperature sensor M308 S7 Y"drivers" A"Mini 5+ TMC Drivers" ; Define Sensor4 as the TMC overheat sensor M308 S8 Y"mcu-temp" P"20.dummy" A"Toolboard0 MCU" M308 S9 Y"drivers" P"20.dummy" A"1LC0 Stepper" M308 S10 Y"mcu-temp" P"21.dummy" A"Toolboard1 MCU" M308 S11 Y"drivers" P"21.dummy" A"1LC1 Stepper" M308 S12 Y"mcu-temp" P"1.dummy" A"3HC MCU" M308 S13 Y"drivers" P"1.dummy" A"3HC TMC Drivers" M308 S14 P"temp2" Y"thermistor" T100000 B3950 C7.060000e-8 A"Orbiter Motor" ; configure sensor 9 as thermistor on pin temp2 M308 S15 P"spi.cs1" Y"thermocouple-max31856" K"K" A"TC0 Chamber Heater"; define temperature sensor number 10 as a K Type thermocouple on the first port of a temperature daughter board plugged into the expansion board with CAN bus address 3. M308 S16 P"spi.cs2" Y"thermocouple-max31856" K"K" A"TC1 Chamber Fins"; define temperature sensor number11 as a T Type thermocouple on the first port of a temperature daughter board plugged into the expansion board with CAN bus address 3. ;M308 S17 P"21.temp1" Y"thermistor" T4500000 B5315 C3.219245e-9 A"BLUE MELLOW" ; blue Mellow high temp thermistor (toolboard)https://duet3d.dozuki.com/Wiki/Connecting_thermistors_or_PT1000_temperature_sensors#Section_RepRapFirmware_3_x ;M308 S17 P"21.temp1" Y"pt1000" T500000 B4666 C1.117125e-7 A"WHITE MELLOW" ; white Mellow high temp pt1000 (toolboard)https://duet3d.dozuki.com/Wiki/Connecting_thermistors_or_PT1000_temperature_sensors#Section_RepRapFirmware_3_x ; Fans M950 H4 C"!out2" T2 Q10 ;H2 ; Define Heater2 as the 4028 fan power, bind to Sensor3 M143 H4 P2 S200 A0 ; Needed M143 to set max temp so the graph scaled correctly M950 F0 C"!20.out1+out1.tach" Q25000 ;Q500 ; create fan 0 on pin out4 and set its frequency M106 P0 C"T0 Layer Fan" L0.0 X1.0 S0 H-1 B0.1 ; set fan 0 name and value. Thermostatic control is turned off M950 F1 C"20.out2+out2.tach" Q500 ; Fan 1 uses out3, and using out3.tach as a tacho input M106 P1 C"T0 Hotend Fan" S0 H1 T45 ; For M106 the H is sensor # and NOT heater #. set fan 1 name and value. Thermostatic control turned on for Hotend M950 F2 C"out5" Q500 ; create fan 1 on pin out5 and set its frequency M106 P2 C"Mini 5+ Board Fan" S0 H5:6:7 T45 ; set fan 1 name and value. Thermostatic control turned on for Hotend M950 F3 C"!out3+out3.tach" Q500 ; Chamber Heater Fan Noctua NF-F12 Industrial M106 P3 C"Chamber Heater Fan" H15 T30 ; S0.3 L0.3 X0.6 B0.1 T30:40 ; set fan 1 name and value. Thermostatic control turned on for Hotend. M950 F4 C"out6" Q500 ; create fan 4 for Water Cooling 12V Fan 4 on pin out4 and set its frequency M106 P4 C"Radiator Cooling Fan" S0 H4 T35 ; set fan 1 name and value. Thermostatic control turned on for liquid cooling hotend M950 F5 C"out4+out4.tach" Q500 ; create fan 4 for Water Cooling 12V Fan 4 on pin out4 and set its frequency M106 P5 C"Liquid Cooling Pump" S0 H4 T20 ; set fan 1 name and value. Thermostatic control turned on for liquid cooling hotend M950 F6 C"!21.out1+out1.tach" Q25000 ;Q500 ; create fan 6 on pin out4 and set its frequency M106 P6 C"T1 Layer Fan" L0.0 X1.0 S0 H-1 B0.1 ; set fan 6 name and value. Thermostatic control is turned off M950 F7 C"21.out2+out2.tach" Q500 ; Fan 7 uses out3, and using out3.tach as a tacho input M106 P7 C"T1 Hotend Fan" S0 H3 T45 ; set fan 7 name and value. Thermostatic control turned on for Hotend M950 F8 C"1.out6" Q500 ; create fan 1 on pin out5 and set its frequency M106 P8 C"3HC Board Fan" S0 H12:13 T45 ; set fan 1 name and value. Thermostatic control turned on for Hotend ; Tool 0 X Axis M563 P0 D0 H1 X0 F0 S"Mosquito Mag Liquid" ; define tool 0 G10 P0 X0 Y0 Z0 S210 R175 ; ; set tool 0 axis offsets, set initial tool 0 active 60C and standby temperatures to 0C ; Tool 1 U Axis M563 P1 D1 H3 F6 X3 S"Mosquito Mag Air" ; define tool 0 G10 L1 P1 U-2.14 X0 Y2.64 Z-0.035 S210 R175 ; ; set tool 0 axis offsets, set initial tool 0 active 60C and standby temperatures to 0C ; Tool 2-- Toolhead 2 with ROME 1 M563 P2 S"ROME 1" D1:2 H3 X3 F6 ; tool 2 uses both extruders and hot end heaters, maps X to both X and U, and uses both print cooling fans G10 L1 P2 U-2.14 X0 Y2.64 Z-0.035 S210 R175 ; ; set tool 0 axis offsets, set initial tool 0 active 60C and standby temperatures to 0C M567 P2 E1:1 ; set mix ratio 100% on both extruders for copy mode ; Tool 3-- Toolhead 2 with ROME 2 ;M563 P3 S"ROME 2" D1:3 H3 X3 F6 ; tool 2 uses both extruders and hot end heaters, maps X to both X and U, and uses both print cooling fans ;G10 L1 P3 U-2.14 X0 Y2.64 Z-0.035 S210 R175 ; ; set tool 0 axis offsets, set initial tool 0 active 60C and standby temperatures to 0C ;M567 P3 E1:1 ; set mix ratio 100% on both extruders for copy mode ; Tool 4-- copy mode M563 P4 S"copy mode" D0:1 H1:3 X0:3 F0:6 ; tool 2 uses both extruders and hot end heaters, maps X to both X and U, and uses both print cooling fans G10 P4 X77.5 Y0 U-77.5 S210 R175 ; set tool offsets and temperatures for tool 2 M567 P4 E1:1 ; set mix ratio 100% on both extruders for copy mode ; Tool 5-- mirror mode ;M563 P5 S"mirror mode" D0:1 H1:3 X0:3 F0:6 ; tool for mirror mode ;G10 P5 X77.5 Y0 U-77.5 S210 R175 ; tool offset for mirror mode (flipped X offset) ;M567 P5 E1:1 ; set mix ratio 100% on both extruders for mirror mode ; Z-Probe Euclid Probe ;M558 P5 C"20.io0.in" H5 F400 T5000 ; set Z probe type to unmodulated and the dive height + speeds M558 P8 C"^20.io0.in" H8 F400 T9000 A1 ; S0.01 ; set Z probe type to unmodulated and the dive height + speeds G31 P1000 X-28 Y-20 Z10.22 ; Z8.86 ; K0 ; set Z probe trigger value, offset and trigger height, more Z means closer to the bed ;; BLTouch ; M950 S0 C"io7.out" ; Create a servo pin on io7 ; M558 P9 C"io7.in" H5 F240 T10800 A5 ; set Z probe type to unmodulated and the dive height + speeds ; G31 P25 X-28.00 Y-13.00 Z0.78 ; set Z probe trigger value, offset and trigger height, more Z means closer to the bed ;Accelerometer M955 P20.0 I14 ;Input Shaper M593 P"zvdd" F31 ; for 10k acceleration ;M593 P"mzv" F42.5 ; for 15k acceleration ;Filament Sensor0 ;M591 D0 P3 C"20.io1.in" S1 ;M591 D0 L27 R10:190 ;ROME Filament Sensor0 ;M591 D2 P1 C"21.io0.in" S1 ;M591 D2 L27 R10:190 ;M574 U2 S1 P"21.io0.in" ; configure active high endstops Toolhead 2 ROME toolhead filament sensor ;M577 wait until endstop is triggered. Does equivalent exist for a general IO sensor? M950 J0 C"^!21.io0.in" ;PanelDue 5i M575 P1 S1 B57600 ;NeoPixels x3 M150 X3 Q4000000 ;R128 U128 B128 P128 S2 F0 M150 X3 R255 U255 B255 W255 P255 S2 F0 ; display led ; Custom settings G29 S1 M572 D0:1 S0.065 ; set Pressure Advance K-factor M501 M376 H3 ;M911 S10 R11 P"M913 X0 Y0 G91 M83 G1 Z3 E-5 F1000" ; set voltage thresholds and actions to run on power loss global daemonLoop = true ; init filament sensor error global variables if !exists(global.filamentTimestamp) global filamentCounter = 0 global filamentTimestamp = state.Uptime ; init print time logging if !exists(global.runtime) M98 P"runtime.g" ; init LED variables if !exists(global.warmUp) global warmUp = false ; Select default tool M404 N1.75 ; Define filament diameter for print monitor T0
-
@RogerPodacter i have recently added a new GPIO micro switch which i plan to experiment with. but when i remove the switch i continue to get the same error.
-
I dont know which macro line 129 is referring to
Just being curious: how many macro files of 129 or more lines populate your /sys/ or /macros/ directories?
-
@RogerPodacter said in Print Error on all jobs:
Error: in file macro line 129 column 25: meta command: reached null object before end of selector string
The error is (likely) coming from another macro that is being called at the start of the print (homing, leveling etc)
You have some incorrect meta code.
If you put an echo such asecho "entering start.g"
andecho "finished start.g"
in your files it will help narrow down where it is.
Could also be daemon.g if you run that.Your new code for the switch is of course the first suspect.
For example something likeif sensors.gpIn[5].value = 1
would throw that error if there was no sensor configured on pin #5 -
@OwenD yes my new code is exactly something like "if sensors.gpIn[0].value == 0". but while troubleshooting i have removed all new code to try and isolate the cause, but i continue to get the same error somehow.
this is the new line i added in my config for the switch:
;ROME Filament Sensor0 ;M591 D2 P1 C"21.io0.in" S1 ;M591 D2 L27 R10:190 ;M574 U2 S1 P"21.io0.in" ; configure active high endstops Toolhead 2 ROME toolhead filament sensor ;M577 wait until endstop is triggered. Does equivalent exist for a general IO sensor? M950 J0 C"^!21.io0.in"
i then added this check to the IDEX tpre2.g file.
M117 "Test of Switch on T2 tool 3 " echo "Switch test = " ^ sensors.gpIn[0].value M106 R1 ; restore print cooling fan speed ;M116 P1 ; wait for tool 1 heaters to reach operating temperature ;if sensors.gpIn[0].value == 0 ; for i in range(50): ; G92 E0 ; G0 E20 F3600 ; M400 ; if sensors.gpIn[0].value == 1 ; break
my daemon.g file does not have anything related, but i do call LED code which has worked normally for many months.
daemon.gwhile global.daemonLoop ;if global.warmUp = true ; echo "setLEDbyTemp = true" ; M98 P"0:/macros/set_LED_while_heating.gcode" if state.status == "processing" if exists(global.runtime) set global.runtime = {global.runtime + 10} echo >"runtime.g" "global runtime = " ^ {global.runtime} ^ " ; seconds AUTO GENERATED by daemon.g" ;echo >"runtime.g" "minutes = "^{global.runtime}/60 ;echo >"runtime.g" "hours = "^{global.runtime}/60/60 ;echo >"runtime.g" "days = "^{global.runtime}/60/60/24 ; LED control if {state.status} == "paused" M150 R255 B255 P255 S2 ; purple M300 S4000 P50 G4 P300 M300 S4000 P50 ; double beep elif {state.status} == "processing" || {state.status} == "busy" M150 R255 U255 B255 W255 P255 S2 ; white elif {heat.heaters[0].current} > 50 || {heat.heaters[1].current} > 70 M150 R255 U0 B0 W0 P255 S2 ; red elif {state.status} == "idle" M150 R0 U255 B0 W0 P255 S2 ; green else M150 R150 U0 B150 W0 P255 S2 ; purple G4 S10 ;there is a delay of 10 seconds between consecutive executions of daemon.g. This is to avoid SD ; card access contention between daemon.g and a file being printed. If you need a smaller delay, put ; all that code inside a while-loop, and include a shorter delay (e.g. G4 S1) at the end of the loop. ;ADD SOMETHING LIKE THIS FOR HEATER SAFETY. USE REALLY USEFUL EXAMPLE GCODE DAEMON.G FILES. ;if fans[1].rpm < 100 && heat[1].heaters > 50 ; abort "No fan motion detected, stopping all macros, jobs, and disabling heaters" ; M140 P-273.1 ; disable bed heater ; M568 P0 A0; set tool 0 to off
i must have added somewhere else and i simply cant remember where.
-
@OwenD part of my code changes include adding a new Tool 3 which combines 2 extruder motors together, almost like Duplicate mode on an IDEX. i did not alter my daemon.g, but perhaps somehow now my daemon LED code is looking for additional heaters that dont exist. attached is a macro called from my daemon.g and it is the only macro larger than 129 lines of code.
-
@RogerPodacter i was able to correct my issue. i dont quite understand why, but the LED code is called at the start of my prints. and it looks for # of tools. once i added my extra tool to the start gcode, the error no longer happens. the micro switch is part of the new tool but i guess directly wasnt causing the error...?
-
@RogerPodacter
I don't see where you call the macro to set the led by temp.
There are several possible causes, all of which relate to trying to access a value from an undefined objectYou are looping the X number of tools and checking the heater values.
If the tools weren't created in numerical order then using iterations to identify a tool or heater would cause an error
e.g if you have tool0 and tool3 defined but no tool2
If one of the tools did not yet have a heater defined it would cause an error
And if the switch wasn't defined you'd get an errorDaemon.g may start running before config.g finishes, so if the errors appear at startup you may need a variable to exit the daemon until config.g finishes setting everything up.
state.upTime would sufficeIt seems like earlier versions of RRF were simply ignoring errors at times, so what "has always worked" could just be in unreported issue that's been there for some time.