MK4 Purge line in MK3S+
How migrate purge line near printed object from MK4 to MK3S+ ?
RE: MK4 Purge line in MK3S+
I think that purge line is handled by the firmware.
Would there be room for additional code on the 8bit MK3 board?
I don't think so, but you never know with those guys at Prusa.
RE: MK4 Purge line in MK3S+
I think the purge line is simply defined in the additional g-code at print start, which can be edited in Prusa Slicer. At least for the Mk3s+.
Setting it at a specific coordinate should be relatively easy. I am not sure about how one could define it automatically relative to the printed object.
How is the Mk4 doing it? Is it really by firmware?
Mk3s MMU2s, Voron 0.1, Voron 2.4
RE: MK4 Purge line in MK3S+
That would be nice if that could be arranged through the start G-code.
Herewith the start G-code for the MK4, so anyone who wants to can try it out.
--------------------------------------
M17 ; enable steppers
M862.3 P "[printer_model]" ; printer model check
M862.1 P[nozzle_diameter] ; nozzle diameter check
M555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}
G90 ; use absolute coordinates
M83 ; extruder relative mode
M140 S[first_layer_bed_temperature] ; set bed temp{if filament_type[initial_tool]=="PC" or filament_type[initial_tool]=="NYLON"}
M104 S{first_layer_temperature[initial_tool]-25} ; set extruder temp for bed leveling
M109 R{first_layer_temperature[initial_tool]-25} ; wait for temp
{elsif filament_type[initial_tool]=="FLEX"}
M104 S210 ; set extruder temp for bed leveling
M109 R210 ; wait for temp
{else}
M104 S170 ; set extruder temp for bed leveling
M109 R170 ; wait for temp
{endif}
M84 E ; turn off E motor
G28 ; home all without mesh bed level
; probe to clean the nozzle
G1 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)+32} Y{((first_layer_print_min[1]) - 4)} Z{5} F4800
M302 S160 ; lower cold extrusion limit to 160C
{if filament_type[initial_tool]=="FLEX"}
G1 E-4 F2400 ; retraction
{else}
G1 E-2 F2400 ; retraction
{endif}
M84 E ; turn off E motor
G29 P9 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{32} H{4}
{if first_layer_bed_temperature[initial_tool]<=60}
M106 S100
{endif}
G0 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} Z{40} F10000
M190 S[first_layer_bed_temperature] ; wait for bed temp
M107
;
; MBL;
M84 E ; turn off E motor
G29 ; mesh bed leveling
M104 S[first_layer_temperature] ; set extruder temp
G0 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4) + 4 - 4.5} Z{30} F4800
M109 S[first_layer_temperature] ; wait for extruder temp
G1 Z0.2 F720
G92 E0
M569 S0 E ; set spreadcycle mode for extruder
;
; Extrude purge line
;{if filament_type[initial_tool]=="FLEX"}
G1 E4 F2400 ; deretraction
{else}
G1 E2 F2400 ; deretraction
{endif}
; move right
G1 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32) + 32} E{32 * 0.15} F1000; move down
G1 Y{(max(0, first_layer_print_min[1]) - 4) + 4 - 4.5 - 1.5} E{1.5 * 0.15} F1000; move left
G1 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} E{32 * 0.30} F800
G92 E0M221 S100 ; set flow to 100%
----------------------------------------------------------
RE: MK4 Purge line in MK3S+
Just copy and pasting everything to an Mk3s+ might cause some issues.
If you simply want the Mk4 purge line the key part is the following, if I am not mistaken:
; move right
G1 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32) + 32} E{32 * 0.15} F1000
; move down
G1 Y{(max(0, first_layer_print_min[1]) - 4) + 4 - 4.5 - 1.5} E{1.5 * 0.15} F1000
; move left
G1 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} E{32 * 0.30} F800
Replace the purge line command in the Mk3s start g-code with those movements and you should get the Mk4 style purge line.
Mk3s MMU2s, Voron 0.1, Voron 2.4
RE: MK4 Purge line in MK3S+
I don't believe the variables that define the dimensions of the print on the first layer are supported in the Mk3S firmware.
Formerly known on this forum as @fuchsr -- until all hell broke loose with the forum software...
RE: MK4 Purge line in MK3S+
I see, well, then you are out of luck with the dynamic purge line I guess. One can set one specifically for each print but I doubt it is worth the effort.
Mk3s MMU2s, Voron 0.1, Voron 2.4
RE: MK4 Purge line in MK3S+
Then just wait until it can be incorporated into the firmware of the MK3.
By the way, I don't think that will happen.
RE: MK4 Purge line in MK3S+
I don't believe the variables that define the dimensions of the print on the first layer are supported in the Mk3S firmware.
@fuchsr, they work.
Here is a picture and bellow the code:
Short code
- before mesh bed leveling (including G80 ):
M104 S{first_layer_temperature[initial_tool]-25} ; set extruder temp M140 S[first_layer_bed_temperature] ; set bed temp M190 S[first_layer_bed_temperature] ; wait for bed temp M109 R{first_layer_temperature[initial_tool]-25}; wait for extruder temp G28 W ; home all without mesh bed level G80 ; mesh bed leveling
After mesh bed leveling (including G80 ):
G80 ; mesh bed leveling G0 Z1 F720; rise extruder to 1mm M109 R[first_layer_temperature] ; wait for extruder temp G0 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4) + 4 - 4.5 - 1.5 - 2} F7000 ; go to start of purge
Purge Line:
G92 E0 G0 Z0.2 F1000 G1 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32) + 32} E{32 * 0.15} F1000 G1 Y{(max(0, first_layer_print_min[1]) - 4) + 4 - 4.5 - 1.5} E{1.5 * 0.15} F1000 G1 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} E{32 * 0.30} F800 G90; set the machine to absolute positioning mode.
Full Code:
M862.3 P "[printer_model]" ; printer model check M862.1 P[nozzle_diameter] ; nozzle diameter check M115 U3.11.0 ; tell printer latest fw version G90 ; use absolute coordinates M83 ; extruder relative mode M104 S{first_layer_temperature[initial_tool]-25} ; set extruder temp M140 S[first_layer_bed_temperature] ; set bed temp M190 S[first_layer_bed_temperature] ; wait for bed temp M109 R{first_layer_temperature[initial_tool]-25}; wait for extruder temp G28 W ; home all without mesh bed level G80 ; mesh bed leveling G0 Z1 F720; rise extruder to 1mm M109 R[first_layer_temperature] ; wait for extruder temp G0 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4) + 4 - 4.5 - 1.5 - 2} F7000 ; go to start of purge ; Send the filament type to the MMU2.0 unit. ; E stands for extruder number, F stands for filament type (0: default; 1:flex; 2: PVA) M403 E0 F{"" + ((filament_type[0]=="FLEX") ? 1 : ((filament_type[0]=="PVA") ? 2 : 0))} M403 E1 F{"" + ((filament_type[1]=="FLEX") ? 1 : ((filament_type[1]=="PVA") ? 2 : 0))} M403 E2 F{"" + ((filament_type[2]=="FLEX") ? 1 : ((filament_type[2]=="PVA") ? 2 : 0))} M403 E3 F{"" + ((filament_type[3]=="FLEX") ? 1 : ((filament_type[3]=="PVA") ? 2 : 0))} M403 E4 F{"" + ((filament_type[4]=="FLEX") ? 1 : ((filament_type[4]=="PVA") ? 2 : 0))} {if not has_single_extruder_multi_material_priming} ;go outside print area ;G1 Y-3 F1000 ;G1 Z0.4 F1000 ; select extruder T[initial_tool] ; initial load ;PURGE LINE G92 E0 G0 Z0.2 F1000 G1 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32) + 32} E{32 * 0.15} F1000 G1 Y{(max(0, first_layer_print_min[1]) - 4) + 4 - 4.5 - 1.5} E{1.5 * 0.15} F1000 G1 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} E{32 * 0.30} F800 G90; set the machine to absolute positioning mode. {endif} M221 S{if layer_height<0.075}100{else}95{endif} G92 E0
RE: MK4 Purge line in MK3S+
I'm pretty sure that all variable replacement is a feature of the slicer, not of the firmware.
I don't believe the variables that define the dimensions of the print on the first layer are supported in the Mk3S firmware.
RE: MK4 Purge line in MK3S+
I'm pretty sure that all variable replacement is a feature of the slicer, not of the firmware.
Yeah, duh 😢 I realized that myself after my post—just proves that I shouldn't answer questions before being fully caffeinated…
@fuchsr, they work.
Thanks, and they should, because my assertion that it's firmware based was of course a senior moment…
I just tried it myself. I'm not sure I'm a huge fan of the prime line itself, I will try to transfer my current code over but use the new location parameters.
Formerly known on this forum as @fuchsr -- until all hell broke loose with the forum software...
RE:
@petru Working beautiful !
For not MMU unit:
M862.3 P "[printer_model]" ; printer model check M862.1 P[nozzle_diameter] ; nozzle diameter check M115 U3.12.2 ; tell printer latest fw version G90 ; use absolute coordinates M83 ; extruder relative mode M104 S[first_layer_temperature] ; set extruder temp M140 S[first_layer_bed_temperature] ; set bed temp M190 S[first_layer_bed_temperature] ; wait for bed temp M109 S[first_layer_temperature] ; wait for extruder temp G28 W ; home all without mesh bed level G80 ; mesh bed leveling G0 Z1 F720; rise extruder to 1mm M109 R[first_layer_temperature] ; wait for extruder temp G0 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4) + 4 - 4.5 - 1.5 - 2} F7000 ; go to start of purge G92 E0 G0 Z0.2 F1000 G1 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32) + 32} E{32 * 0.15} F1000 G1 Y{(max(0, first_layer_print_min[1]) - 4) + 4 - 4.5 - 1.5} E{1.5 * 0.15} F1000 G1 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} E{32 * 0.30} F800 G90; set the machine to absolute positioning mode. G92 E0 M221 S{if layer_height<0.075}100{else}95{endif} ; Don't change E values below. Excessive value can damage the printer. {if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3).*/}M907 E430 ; set extruder motor current{endif} {if print_settings_id=~/.*(SPEED @MK3|DRAFT @MK3).*/}M907 E538 ; set extruder motor current{endif}
RE: MK4 Purge line in MK3S+
Here's my version of it, modeled on the widely used startup code by Bob George, modified to use the new variables to move the prime line closer to the model. I like this prime line better than the Prusa one, or maybe I'm just so used to it…
; PrusaSlicer start gcode for Prusa i3 Mk3S ; Last updated 20230418 - RF - Originally adopted from Bob George M862.3 P "[printer_model]" ; printer model check M862.1 P[nozzle_diameter] ; nozzle diameter check M115 U3.11.0 ; tell printer latest fw version ; Set coordinate modes G90 ; use absolute coordinates M83 ; extruder relative mode ; Reset speed and extrusion rates M200 D0 ; disable volumetric e M220 S100 ; reset speed ; Set initial warmup temps M104 S{first_layer_temperature[0] - 40}; set extruder temp to 40 lower than print temp to prevent oozing M140 S[first_layer_bed_temperature] ; set bed temp M109 S{first_layer_temperature[0] - 40} ; wait for extruder no-ooze warmup temp before mesh bed leveling, cool hot PINDA G28 W ; home all without mesh bed level G80 ; mesh bed leveling ; Final warmup routine G0 Z80; Raise nozzle to avoid denting bed while nozzle heats M140 S[first_layer_bed_temperature] ; set bed final temp M104 S[first_layer_temperature] ; set extruder final temp M109 S[first_layer_temperature] ; wait for extruder final temp M190 S[first_layer_bed_temperature] ; wait for bed final temp ; Prime line G0 Z0.15 ; Restore nozzle position - (thanks tim.m30) G92 E0.0 ; reset extrusion distance ;new move to prime line near model G1 X{(min(print_bed_max[0],first_layer_print_min[0]+110)-110)} Y{(max(-3,first_layer_print_min[1])-3)} F1000 ; previous positioning in older version ;G1 Y-3.0 F1000.0 ; go outside print area G1 E2 F1000 ; de-retract and push ooze G1 X{(min(print_bed_max[0],first_layer_print_min[0]+110)-110)+20} E6 F1000.0 ; fat 20mm intro line @ 0.30 G1 X{(min(print_bed_max[0],first_layer_print_min[0]+110)-110)+60} E3.2 F1000.0 ; thin +40mm intro line @ 0.08 G1 X{(min(print_bed_max[0],first_layer_print_min[0]+110)-110)+100} E6 F1000.0 ; fat +40mm intro line @ 0.15 G1 E-0.8 F3000; retract to avoid stringing G1 X{(min(print_bed_max[0],first_layer_print_min[0]+110)-110)+99.5} E0 F1000.0 ; -0.5mm wipe action to avoid string G1 X{(min(print_bed_max[0],first_layer_print_min[0]+110)-110)+110} E0 F1000.0 ; +10mm wipe action G1 E0.6 F1500; de-retract G92 E0.0 ; reset extrusion distance ; end mods M221 S{if layer_height<0.075}100{else}95{endif} ; Don't change E values below. Excessive value can damage the printer. {if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3).*/}M907 E430 ; set extruder motor current{endif} {if print_settings_id=~/.*(SPEED @MK3|DRAFT @MK3).*/}M907 E538 ; set extruder motor current{endif}
Formerly known on this forum as @fuchsr -- until all hell broke loose with the forum software...
RE: MK4 Purge line in MK3S+
Just in case anyone is interested, I made a couple of small modifications to the startup code I posted above to avoid some initial stringing:
; PrusaSlicer start gcode for Prusa i3 Mk3S ; Last updated 20230422 - RF - Originally adopted from Bob George M862.3 P "[printer_model]" ; printer model check M862.1 P[nozzle_diameter] ; nozzle diameter check ; Set coordinate modes G90 ; use absolute coordinates M83 ; extruder relative mode ; Reset speed and extrusion rates M200 D0 ; disable volumetric e M220 S100 ; reset speed ; Set initial warmup temps M104 S{first_layer_temperature[0] - 40}; set extruder temp to 40 lower than print temp to prevent oozing M140 S[first_layer_bed_temperature] ; set bed temp M109 S{first_layer_temperature[0] - 40} ; wait for extruder no-ooze warmup temp before mesh bed leveling, cool hot PINDA G28 W ; home all without mesh bed level G80 ; mesh bed leveling ; Final warmup routine G0 Z80; Raise nozzle to avoid denting bed while nozzle heats M140 S[first_layer_bed_temperature] ; set bed final temp M104 S[first_layer_temperature] ; set extruder final temp M109 S[first_layer_temperature] ; wait for extruder final temp M190 S[first_layer_bed_temperature] ; wait for bed final temp ; Prime line G92 E0.0 ; reset extrusion distance ;new move to prime line near model G1 E-0.8 F3000; retract to avoid stringing G1 X{(min(print_bed_max[0],first_layer_print_min[0]+110)-110)} Y{(max(-3,first_layer_print_min[1])-3)} F4800 G0 Z0.15 ; Restore nozzle position - (thanks tim.m30) ; previous positioning in older version ;G1 Y-3.0 F1000.0 ; go outside print area G1 E2 F1000 ; de-retract and push ooze G1 X{(min(print_bed_max[0],first_layer_print_min[0]+110)-110)+20} E6 F1000.0 ; fat 20mm intro line @ 0.30 G1 X{(min(print_bed_max[0],first_layer_print_min[0]+110)-110)+60} E3.2 F1000.0 ; thin +40mm intro line @ 0.08 G1 X{(min(print_bed_max[0],first_layer_print_min[0]+110)-110)+100} E6 F1000.0 ; fat +40mm intro line @ 0.15 G1 E-0.8 F3000; retract to avoid stringing G1 X{(min(print_bed_max[0],first_layer_print_min[0]+110)-110)+99.5} E0 F1000.0 ; -0.5mm wipe action to avoid string G1 X{(min(print_bed_max[0],first_layer_print_min[0]+110)-110)+110} E0 F1000.0 ; +10mm wipe action G1 E0.6 F1500; de-retract G92 E0.0 ; reset extrusion distance ; end mods M221 S{if layer_height<0.075}100{else}95{endif} ; Don't change E values below. Excessive value can damage the printer. {if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3).*/}M907 E430 ; set extruder motor current{endif} {if print_settings_id=~/.*(SPEED @MK3|DRAFT @MK3).*/}M907 E538 ; set extruder motor current{endif}
Formerly known on this forum as @fuchsr -- until all hell broke loose with the forum software...
RE: MK4 Purge line in MK3S+
I'm on PS 2.6.0 with the latest configuration updates. Did Prusa revert the purge line back to how it was previously (lower left) vs near the print? I'm getting the original purge line even when using completely stock print, filament, and printer settings
RE: MK4 Purge line in MK3S+
I just used a MK4 file on my MK3. It does the cool purge line. The only thing I didn't like was it wants to cool the hot end while bed leveling. I just over rode it in Tune. You couls also do that in G-CODE
RE: MK4 Purge line in MK3S+
I have the mk3.9 and it just does the normal purge line no matter what size the print
RE:
Try selecting MK4 in Prusa Slicer and use that file on the MK3
Maverick Holster Mount