Multicolor print with one extruder, M600 problem

Basic Information:

Printer Model: Voron 2.4
MCU / Printerboard:Bigtreetech Octopus
klippy.log
klippy.log (34.8 KB)

Hi

I am trying to do a multicolor print with only one extruder with two colors on the first layer only. I use Cura which creates an M600 command for material change. Therefor I added the following M600 macro which seems to be working fine:

[gcode_macro M600]
gcode:
{% set X = params.X|default(50) %}
{% set Y = params.Y|default(5) %}
{% set Z = params.Z|default(10) %}
SAVE_GCODE_STATE NAME=M600_state
PAUSE
G91
G1 E-4 F2700
G1 Z{Z}
G90
G1 X{X} Y{Y} F3000
G91
RESTORE_GCODE_STATE NAME=M600_state

When I print my model it invokes the macro and I can change filament. But after resume the head moves to the last print position and then the print is cancelled with the following errors:

21:52:02 Extrude only move too long (-153.773mm vs 50.000mm)
21:52:02 Extrude only move too long (-153.773mm vs 50.000mm), See the ‘max_extrude_only_distance’ config option for details
21:52:01 Unknown command:“F900”

I cannot absolutely say which command raises the error, since Klipper don’t gives a line number :frowning:

Strangest thing is the F900 “command”. I don’t see anything like this in my gcode. Only some F900 feed parameters in some move commands.

The Extrude move too long message maybe because of the M83 command in my gcode. What means absolute or relative extrusion mode? For movements this is clear, but for extrusion? If I do an extrusion like:

G1 F1200 E-3

What is the result in absolute and in relative mode?

I also don’t know where this M83 command comes from. Since the error happens directly after the material change, I post below that snippet from my gcode. Maybe you have an idea what happens.

G1 F1200 E-16
G1 F600 Z0.4
M82 ;absolute extrusion mode
M600
M83 ;relative extrusion mode
M104 T0 S195
M109 S200
G1 F2400 E-3
;MESH:Glas.stl
G0 F7200 X166.255 Y31.976 Z0.4
G1 F600 Z0.4
G0 F7200 X167.543 Y25.277
;TYPE:SKIRT
G1 F600 Z0.2
G1 F960 E3
G1 F900 X168.097 Y25.293 E0.02074
G1 X168.498 Y25.322 E0.01504
G1 X168.8 Y25.356 E0.01137
G1 X169.026 Y25.391 E0.00856
G1 X169.461 Y25.5 E0.01678
G1 X169.703 Y25.572 E0.00945

BTW. I used the same slicer setting that I used forever with only one material.

Are you manually changing the filament or do you have multiple extruders?

If you are doing it manully, then the easiest thing is to just have the slicer pause your print, do everything manually, then click resume.

If you have multiple extruders (looking at your log I dont think you do), then do everything within Klipper and have the Slicer just issue a T0 or T1 command.

I have a macro to do everything, save gcode swap filaments, clean the nozzle and restore, I think having pause in the middle of that is redundant.

Also before doing anything with moving the extruder, as soon as you pause issue an M83 and G92 E0, this will put it in relative mode and zero it out, then you can command it to move without issue.

Also have Cura set to relative extrusion, and set M83 in your start code.

I started out doing multi colour prints manually, and all I ever used was:

PAUSE
M83
G92 E0
G1 E-35 F2500
Wait 5 to 10 seconds seconds (You can us G4 P10000 for this)
G1 E-200 F5000
Rip filament out, and freed in the new
RESUME

If you want to use M600 and put this in a Macro:

[gcode_macro M600]
gcode:
PAUSE
M83
G92 E0
G1 E-35 F2500
G4 P10000
G1 E-200 F5000

Then once your done loading, hit resume.

Also, your missing out on much faster printing by sticking with Cura, if you have time check out Orca Slicer, it really takes advantage fast CoreXY machines running Klipper.

Sorry for answering so late.

I only have one extruder and want to change filament manually. As you see from my outtake from the Gcode, Cura already adds the M83 code, but I don’t know from which config it comes. But it does not issue an G92 E0 afterwards. Maybe that’s the problem. I will try it.

I just did a test with removing all extrude commands from the M600 macro and also commented out all M83/M83 commands from the filament change part of the gcode.

Then I get also the extrude distance error during manual extruding after filament change. When I then resume it prints some seconds without extruding leaving gaps in the print.

Another strange thing is, it seems to repeat some parts before the pause. Maybe the pause comes asyncronous to the print commands. It pauses before all commands are printed the resumes at that point and then agains runs into the M600 macro. I get three macro starts where there should be only one. Very strange.

You suggested to say Cura it should only pause the print and do everything by hand. How can I do this? It seems Cura alwas puts in T0/T1 commands if I use multiple materials because it can only do this when I configure multiple extruders in Cura. Plus it adds the commands I put in the extruder config. I put M600 at extruder init code. And I create T0/T1 macros to prevent klipper to complain about an unconfigured extruder.

I forgot about your suggestion to switch to ORCA. Maybe sometimes. At the moment I am fighting with many newby problems, wo I don’t want to build up new problems. And beside ORCA there are also many suggestions to use superslicer. There are many alternatives. Which is the right one.
What is so special about ORCA with CoreXY machines?

Change the M600 code in Cura to PAUSE

Remove the T0 and T1 macros, just let Klipper complain, it doesnt effect anything.

All you need to do now, is manually command the filament out and in when it pauses, thats all you need.

I was doing this for quite some time, and all I used was PAUSE/RESUME

If you do the above, you wont have any issues or gaps in the print, while its paused you can purge as much as you like, I usually purge 25 to 50mm then wipe the nozzle with a rag and click resume, my prints come out perfect.

The issue is your over thinking it, for manual filament changing, you do nothing, just pause and resume, dont do an M600 or any other macro’s, they are just not required for manual changing, this is the most reliable way to do filament swaps, Macros are more for automation.

Make sure you have M83 in your start code, and use the Web GUI to retract and extrude when changing.

I give up now!
I tried using only PAUSE as @NexGen-3D suggested. But that makes things worse. It is always the same problem: When I press resume the print does not continue were it was paused but some lines before. It repeats the last few moves BEFORE the pause, then reaches the pause again. This repeats two or three times, each time a bit “nearer” to the pause command until finally it reaches the position after the pause and then resumes printing. But because it repeats moves it destroys the already printed parts. I added an M400 before and after the pause, but that didn’t help.

Another problem is, that the restore command moves to the last position directly without keeping the secure Z height. So the head comes very near to already printed parts and when there is a bit of leaking this stucks to the part. Better would be, go to the last xy coordinate first and then step down z and resume.

The third problem is that the pause command lifts the head very little and uses this as the pause height. It is very difficult to extrude some filament and clean the nozzle during filament change then, because the nozzle is only a few mm above the bed.

I could solve problem 2 and 3 by adding a move to a park position before the pause. But problem 1, the repeating of the last few GCode lines I could not solve.

Best thing would be if there was a pause gcode which only pause/resume without doing anything which works synchon as any other gcode command. Then it would be easy to generate an appropriate filament change sequence of gcode commands.

The below picture shows the double printed parts in white:

So you seem to know what you are doing, maybe you can help me. I’ve been running Klipper on my Ender 3S1 for a few months and using Orcaslicer for as long. Everything was fine until I tried adding a pause through Orca. Now most of my prints (whether I’ve sliced with the pause or not) will throw in an M600 code at the beginning of the print. I’m also running into the T0 and T1 issue as well as prints being cancelled by Klipper without my doing so. Even last night I was trying a print a test for magnet fitment. The print had two colors on the first two layers and then a pause at layer 26. The print failed due to too long of an extrusion command so I removed the three layers that had printed and dropped the model down in the slicer to continue the print. Once the pause came around and I tried to resume I got the error that Klipper was saying that the print was not paused despite everything outside of the console saying that the print was in fact paused. I am using Mainsail by the way. Do you have any advice regarding the Orca side of things and a possible idea of what could be going wrong? I can provide screenshots and files if needed.

I don’t think that I know what I am doing. Therefore I asked that question.

I gave up this two color print for now, because I don’t get it running without errors.

And I don’t know Orca at all.

So sorry, I fear I cannot help here. Maybe someone in this forum with more know how can jump in. I would be also interested in some solutions.

BTW. I only once paused and resumed a print manually. With fatal consequences. The print rammed it’s head into the bed, destroying the print sheet and the printhead itself. Never tried that again.

Thorsten

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.