3.6.0-b2: z-Position wrong after pause
-
I noticed a strange thing. After a pause the extruders are not returning to the correct z-height. With T0 there seems to be a deviation of 0-0.2mm. With T1 the extruder is moving down after a each pause. Sometimes it then gets back to a gigher position.
Here is the logged user position when pausing and resuming
Time 2024-11-19T18:11:14 Job 0:/gcodes/CFFFP_TestPrint-both.gcode Pause: x= 122.426 y= 97.718 u= 286.800 z= 0.200 Resume: x= 122.426 y= 97.718 u= 286.800 z= 0.200 Pause: x= 126.492 y= 118.153 u= 286.800 z= 0.560 Resume: x= 126.492 y= 118.153 u= 286.800 z= 0.560 Pause: x= 122.804 y= 98.097 u= 122.804 z= 1.160 Resume: x= 122.804 y= 98.097 u= 122.804 z= 1.160 Pause: x= 123.204 y= 117.709 u= 123.204 z= 1.160 Resume: x= 123.204 y= 117.709 u= 123.204 z= 1.160 Pause: x= 135.949 y= 117.709 u= 135.949 z= 1.160 Resume: x= 135.949 y= 117.709 u= 135.949 z= 1.160 Pause: x= 123.203 y= 99.036 u= 123.203 z= 0.882 Resume: x= 123.203 y= 99.036 u= 123.203 z= 0.882 Pause: x= 126.975 y= 98.497 u= 126.975 z= 0.586 Resume: x= 126.975 y= 98.497 u= 126.975 z= 0.586 Pause: x= 131.101 y= 98.496 u= 131.101 z= 1.280
During a print move.axes[2].machinePosition (which is z in my case) is permanently jumping, whereas the move.axes[2].userPosition stays constant during a print. Unlike in 3.4.6 the user[2]Position is not equal to the machine[2]Position. For the other axis both values are the same, ignoring round-offs.
For the purpose of this post I changed my pause.g to
set global.pausex=move.axes[0].userPosition set global.pausey=move.axes[1].userPosition set global.pausez=move.axes[2].userPosition set global.pauseu=move.axes[3].userPosition echo >>"0:/sys/0-printlog" "Pause: x= " ^{global.pausex}^ " y= " ^{global.pausey}^ " u= " ^{global.pauseu}^ " z= " ^{global.pausez} G1 X200 M99
So just moves the x-axis out off the way of a test print.
And resume.g toM98 P"00-Functions/CurrentSenseNormal" ; ensure the drivers current and sensitivity is set for normal routines M17 G4 P100 ; ;************************************ echo >>"0:/sys/0-printlog" "Resume: x= " ^{global.pausex}^ " y= " ^{global.pausey}^ " u= " ^{global.pauseu}^ " z= " ^{global.pausez} G1 R1
-
-
@wschadow with regard to the machine position jumping around during a print, I have reproduced that. What's happening is that in 3.6 the reported machine position is the position after bed compensation has been applied, whereas in 3.5 it's the position before bed compensation is applied. So the reported Z machine position jumps around if you are using bed compensation.
I was expecting your other report (user Z position not being restored after pause/resume) to be related; however on my test machine the user Z position remains constant:
Pause: x= 27.9 y= -64.0 z= 2.00 Resume: x= 27.9 y= -64.0 z= 2.00 Pause: x= 47.2 y= 51.4 z= 2.00 Resume: x= 47.2 y= 51.4 z= 2.00 Pause: x= -60.6 y= 34.7 z= 2.00 Resume: x= -60.6 y= 34.7 z= 2.00 Pause: x= -24.9 y= -65.2 z= 2.00 Resume: x= -24.9 y= -65.2 z= 2.00
Perhaps it is configuration-dependent. Please provide your config.g file.
-
; ========================================================================================================= ; ; Configuration file for CaribouIDEX with LGX and Duet 3 Mini 5+ (firmware version 3.4 and higher) ; ; for 0.9° motors on xy, and 0.9° or 1.8° motor on e ; ; for CaribouIDEX220 Duet3Mini5+ LGX Mosquito 0.9° - E3d or SE Thermistor - SuperPINDA ; ; CariboDuetConfiguration Release : "0.1.0" ; Build : 177 ; ; Copyright Caribou Research & Development 2023. Licensed under GPL3. ; Source code and release notes are available on github: https://github.com/Caribou3d/CaribouIDEX-Configuration-and-Macros ; ; ========================================================================================================= ; ; global variables ; global IdleCounter = 0 ; counts idle time global ExtruderTempActive_Old0 = 0 ; stores extruder 0 temperature for idle check global ExtruderTempActive_Old1 = 0 ; stores extruder 1 temperature for idle check global BedTempActive_Old = 0 ; stores bed temperature for idle check global OldStateStatus = 0 ; stores the status of the printer, processing = 1 global ToolSelected = -1 ; stores the selected tool global HeatStatus1 = -1 ; stores the status of heater 1 global HeatStatus2 = -1 ; stores the status of heater 2 global HeatStatus3 = -1 ; stores the status of tool2 global HeaterActive1 = 0 ; stores the active temperature of heater 1 global HeaterStandby1 = 0 ; stores the standby temperature of heater 1 global HeaterActive2 = 0 ; stores the active temperature of heater 2 global HeaterStandby2 = 0 ; stores the standby temperature of heater 2 global HeaterActive3 = 0 ; stores the active temperature of tool 2 global HeaterStandby3 = 0 ; stores the standby temperature of tool 2 global HeatStatusTr1 = -1 ; stores the status of heater 1 global HeatStatusTr2 = -1 ; stores the status of heater 2 global HeatStatusTr3 = -1 ; stores the status of tool2 global HeaterActiveTr1 = 0 ; stores the active temperature of heater 1 global HeaterStandbyTr1 = 0 ; stores the standby temperature of heater 1 global HeaterActiveTr2 = 0 ; stores the active temperature of heater 2 global HeaterStandbyTr2 = 0 ; stores the standby temperature of heater 2 global HeaterActiveTr3 = 0 ; stores the active temperature of tool 2 global HeaterStandbyTr3 = 0 ; stores the standby temperature of tool 2 global ToolToActOn = -1 ; stores tool for load / unload / change / filament global zlifted = 0 ; stores status of the z axis global success = 0 ; stores status of load / unload / change global purge = 0 ; stores status to purge when autoloading global AskToChange = 1 ; ask if filament should be changed? global zLiftDistance = 0 ; stores distance for lifting z axis global waitForExtruderTemperature0 = false ; beeps when pre-heat temperature is reached global waitForExtruderTemperature1 = false ; beeps when pre-heat temperature is reached global waitForExtruderTemperature2 = false ; beeps when pre-heat temperature is reached global waitForBedTemperature = false ; beeps when pre-heat temperature is reached global x_accel = 0 ; stores x accelerations (mm/s^2) global x_jerk = 0 ; stores x maximum instantaneous speed changes (mm/min) global y_accel = 0 ; stores y accelerations (mm/s^2) global y_jerk = 0 ; maximum y instantaneous speed changes (mm/min) global filamentErrorIgnore0 = 0 ; enable / disable execution of filament-error.g global filamentTriggerIgnore0 = 0 ; enable / disable execution of trigger2.g global filamentErrorIgnore1 = 0 ; enable / disable execution of filament-error.g global filamentTriggerIgnore1 = 0 ; enable / disable execution of trigger2.g global SkipCalibration=0 ; enable / disable claibration at the beginning of a print global pausex=0 global pausey=0 global pauseu=0 global pausez=0 ; ; general settings ; M111 S0 ; debugging off G21 ; work in millimetres ; ; ========================================================================================================= ; network settings ; ========================================================================================================= ; M550 P"AM-Xfuse2" ; set printer name ; M552 S1 ; enable network M586 P0 S1 ; enable HTTP M586 P1 S1 ; enable FTP M586 P2 S0 ; disable Telnet M575 P1 S1 B57600 ; enable support for PanelDue ; ; ========================================================================================================= ; drives ; ========================================================================================================= ; M569 P0.1 S1 D3 V1000 ; physical drive 0.0 goes backwards - x-axis M569 P0.2 S0 D3 V1000 ; physical drive 0.0 goes forwards - u-axis M569 P0.3 S0 D3 V1000 ; physical drive 0.1 goes backwards - y-axis M569 P0.0 S0 D3 V10 ; physical drive 0.2 goes backwards - z-left M569 P0.4 S0 D3 V10 ; physical drive 0.3 goes backwards - z-right M569 P20.0 S0 D3 V1000 ; physical drive 0.3 goes forwards - extruder M569 P21.0 S0 D3 V1000 ; physical drive 0.4 goes forwards - extruder ; ; motor Configuration ; M584 U0.1 X0.2 Y0.3 Z0.0:0.4 E20.0:21.0 ; set drive mapping M671 X-125.1:369.9 Y0:0 S1.00 ; leadscrews at left (connected to z) and right (connected to E1) of X axis ; ; set Microsteps and steps / mm ; M350 X16 U16 Y16 Z16 E16 I1 ; configure microstepping with interpolation ;M92 X200.00 U200.00 Y200.00 Z800.00 E704.00 ; set steps per mm ;M92 X200.00 U200.00 Y200.00 Z800.00 E706.00:706.00 ; set steps per mm M92 X200.00 U200.00 Y200.00 Z800.00 E567.00:567.00 ; set steps per mm ; ; set motor currents ; ;M906 X1400 U1400 Y1400 Z1200 E650 I40 ; set motor currents (mA) and motor idle factor in percent M906 X1250 U1250 Y1400 Z1300 E650 I100 ; set motor currents (mA) and motor idle factor in percent ; M84 S60 ; set idle timeout ; ; set speeds ; M201 X3000 U3000 Y3000 Z500 E500 ; set accelerations (mm/s^2) M203 X12000 U12000 Y12000 Z1000 E3600 ; set maximum speeds (mm/min) M204 P2000 T2000 ; set print and travel accelerations (mm(s^2) M566 X600 U600 Y600 Z48 E300 ; set maximum instantaneous speed changes (mm/min) ; set global.x_accel = move.axes[0].acceleration ; save accelerations (mm/s^2) set global.x_jerk = move.axes[0].jerk ; save maximum instantaneous speed changes (mm/min) ; set global.y_accel = move.axes[1].acceleration ; save accelerations (mm/s^2) set global.y_jerk = move.axes[1].jerk ; save maximum instantaneous speed changes (mm/min) ; M564 H0 ; allow unhomed movement ; ; ========================================================================================================= ; axis limits ; ========================================================================================================= ; M208 X-72.8 U-37 Y-24.0 Z0 S1 ; set axis minima M208 X251.0 U286.8 Y210.0 Z217.50 S0 ; set axis maxima ; ; ========================================================================================================= ; endstops ; ========================================================================================================= ; M574 X1 S1 P"io2.in" ; configure active high endstop switch for low end on x M574 U2 S1 P"io3.in" ; configure active high endstop switch for low end on u M574 Y1 S3 ; configure sensorless endstop for low end on y ; ; ========================================================================================================= ; ; SuperPINDA ; M558 P8 C"^20.io2.in" H1.5 F600 T8000 A3 S0.03 ; set z probe to SuperPINDA M557 X30:240 Y0:200 S30:40 ; define mesh grid ; ; ========================================================================================================= ; ; stallguard sensitivy ; M915 X S2 F0 H400 R0 ; set x axis sensitivity M915 Y S1 F0 H200 R0 ; set y axis sensitivity M915 Z S1 F0 H200 R0 ; set z axis sensitivity M915 U S2 F0 H400 R0 ; set x axis sensitivity ; ; ========================================================================================================= ; heaters & fans ; ========================================================================================================= ; ; heated bed ; ========================================================================================================= ; M308 S0 P"temp0" Y"thermistor" T100000 B4138 A"Bed" ; configure sensor 0 as thermistor on pin temp0 M950 H0 C"out0" Q50 T0 ; create bed heater output on bedheat and map it to sensor 0 M143 H0 S110 ; set temperature limit for heater 0 to 110°C M307 H0 B0 S1.00 ; disable bang-bang mode for the bed heater and set PWM limit M140 H0 ; map heated bed to heater 0 ; ; extruder ; ========================================================================================================= ; ; Hotend 1 (Mosquito or Mosquito Magnum with E3d Thermistor) ; M308 S1 P"20.temp0" Y"thermistor" T100000 B4725 C7.060000e-8 A"Nozzle E0" ; E3d configure sensor 1 as thermistor on pin temp1 ; M950 H1 C"20.out0" T1 ; create nozzle heater output on out1 and map it to sensor 1 M307 H1 B0 S1.00 ; disable bang-bang mode for heater 1 and set PWM limit M143 H1 S280 ; set temperature limit for heater 1 to 280°C ; ; Hotend 2 (Mosquito or Mosquito Magnum with E3d Thermistor) ; M308 S2 P"21.temp0" Y"thermistor" T100000 B4725 C7.060000e-8 A"Nozzle E1" ; E3d configure sensor 2 as thermistor on pin temp2 ; M950 H2 C"21.out0" T2 ; create nozzle heater output on out2 and map it to sensor 2 M307 H2 B0 S1.00 ; disable bang-bang mode for heater 2 and set PWM limit M143 H2 S280 ; set temperature limit for heater 2 to 280°C ; ; ========================================================================================================= ; M308 S4 P"mcu-temp" Y"mcu-temp" A"MCU" ; set virtual heater for MCU M308 S5 P"drivers" Y"drivers" A"Driver" ; set virtual heater for stepper drivers ; ; ========================================================================================================= ; fans ; ========================================================================================================= ; ; ; cooling fans ; M950 F0 C"20.out1" Q500 ; create fan 0 on pin fan1 and set its frequency ; M950 F1 C"21.out1" Q500 ; create fan 1 on pin fan1 and set its frequency ; ; extruder fans (temperature controlled) ; M950 F2 C"20.out2" Q500 ; create fan 2 on pin out5 and set its frequency M106 P2 H1 T50 ; set fan 2 value. Thermostatic control is turned on ; M950 F3 C"21.out2" Q500 ; create fan 3 on pin out6 and set its frequency M106 P3 H2 T50 ; set fan 3 value. Thermostatic control is turned on ; ; ======================================================================================================== ; tools ; ========================================================================================================= ; M563 P0 D0 H1 ; define tool 0 G10 P0 X0 Y0 Z0 ; set tool 0 axes offsets M568 P0 S0 R0 A0 ; turn off tool 0, set active and standby temperature to 0°C ; M563 P1 D1 H2 X3 ; define tool 1 (maps x to u) G10 P1 X0 Y0 Z0 ; set tool 1 axes offsets M568 P1 S0 R0 A0 ; turn off tool 1, set active and standby temperature to 0°C ; M563 P2 D0:1 H1:2 X0:3 F0:1 S"Tool 2 (copy mode)" ; define tool 2 (copies x to u) G10 P2 X0 Y0 U-110 S0 R0 ; set tool 2 axes offsets M568 P2 S0 R0 A0 ; turn off tool 2, set active and standby temperature to 0°C M567 P2 E1:1 ; set mixing ; M302 S80 R80 ; allow extrusions starting from 80°C and retractions from 80°C ; ; ========================================================================================================= ; filament handling ; ========================================================================================================= ; ; execute macro that determines the status of the filament sensor ; ;M591 D0 P3 C"20.io0.in" S1 R70:150 L78.5 ;M591 D1 P3 C"21.io0.in" S1 R70:150 L78.5 ; ; calculated values is L77.75 ; ;M98 P"0:/sys/00-Functions/FilamentsensorStatus" ; ; ========================================================================================================= ; other settings ; ========================================================================================================= ; M18 XUY ; release / unlock x, y M501 ; load config-override (for thermistor parameters and other settings) G90 ; absolute positioning M83 ; relative extruder moves ; ; ========================================================================================================= ; ; offsets - place off-sets for x and y here. z-offsets are handled in the print sheet macros ; G31 P1000 X0 Y5 G10 P0 X0 ; set offset for tool 0 ;G10 P1 X0 Y0.08 U34.22 Z0 ; set offset for tool 1 g10 p1 x0 u34.66 -y0.02 z0 ;g10 p1 x0 u34.90 y0.12 z0 ; ========================================================================================================= ; T-1 P0 ; deselect tools ; ; ========================================================================================================= ;