Notifications
Clear all

MK4 Purge line in MK3S+  

  RSS
Olafejs
(@olafejs)
Member
MK4 Purge line in MK3S+

How migrate purge line near printed object from MK4 to MK3S+ ?

Posted : 14/04/2023 6:41 am
René
(@rene-3)
Reputable Member
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.

Posted : 14/04/2023 7:08 am
Thejiral
(@thejiral)
Noble Member
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

Posted : 14/04/2023 8:19 am
René
(@rene-3)
Reputable Member
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%

----------------------------------------------------------

 

Posted : 14/04/2023 9:11 am
Thejiral
(@thejiral)
Noble Member
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

Posted : 14/04/2023 10:43 am
FoxRun3D
(@foxrun3d)
Famed Member
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...

Posted : 14/04/2023 12:09 pm
Thejiral liked
Thejiral
(@thejiral)
Noble Member
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

Posted : 14/04/2023 1:20 pm
René
(@rene-3)
Reputable Member
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.

Posted : 14/04/2023 1:27 pm
Ro3Deee
(@ro3deee)
Eminent Member
RE: MK4 Purge line in MK3S+

 

Posted by: @fuchsr

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
Posted : 17/04/2023 5:35 pm
hli
 hli
(@hli)
Trusted Member
RE: MK4 Purge line in MK3S+

I'm pretty sure that all variable replacement is a feature of the slicer, not of the firmware.

Posted by: @fuchsr

I don't believe the variables that define the dimensions of the print on the first layer are supported in the Mk3S firmware.

 

Posted : 17/04/2023 8:44 pm
FoxRun3D
(@foxrun3d)
Famed Member
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...

Posted : 17/04/2023 10:21 pm
Olafejs
(@olafejs)
Member
Topic starter answered:
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}
Posted : 18/04/2023 6:09 am
FoxRun3D
(@foxrun3d)
Famed Member
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...

Posted : 20/04/2023 2:08 am
FoxRun3D
(@foxrun3d)
Famed Member
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...

Posted : 24/04/2023 9:04 pm
Jinra
(@jinra)
Active Member
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

Posted : 18/07/2023 10:42 pm
Ron S
(@ron-s-2)
New Member
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

Posted : 15/12/2023 6:41 pm
ronnie12342003
(@ronnie12342003)
Estimable Member
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 

Posted : 15/12/2023 10:45 pm
Ron S
(@ron-s-2)
New Member
RE:

Try selecting MK4 in Prusa Slicer and use that file on the MK3

Maverick Holster Mount

Posted : 16/12/2023 1:26 am
Share: