Ok, das ist schon mal ein Hinweis und erklärt warum es bisher nicht aufgefallen ist. Idealerweise sollte z offset 0 sein, weil nur dann der ditto modus zum Drucken von 2 Teilen gleichzeitig sinnvoll genutzt werden kann.
Dann gibt es noch all diejenigen die
#define LAZY_DUAL_X_AXIS 1
haben - das Fehlt bei dir komplett daher gilt default wert 0 was heist das die Positionen direkt angepasst werden. Im lazy modus bleibt der Extruder beim Wechsel daher geparkt und fährt erst bei der ersten Druckbewegung raus. Dadurch spart man etwas Zeit und reduziert die Wege über dem Objekt auf ein Minimum.
Jetzt zum eigentlichen Problem. Bei unterschiedlichem Z werden die höhen entweder am Anfang oder am ende angepasst. Je nachdem welcher Extruder höhe ist. Ich sehe daher folgende Moves:
Extr 1->2
E1 Parkt
E2 Fährt zur letzten Position
Z fährt hoch
Alles korrekt
Extr 2->1
E2 Parkt
Z fährt runter
E1 fährt nach rechts (falsch, trifft aber E2 nicht oder doch)
E1 fährt auf Position aber zu weit links wenn ich das richtig gesehen habe oder hast du ihn selber nach links bewegt und die erste Bewegung war schon die falsche.
Du hats noch eine Besonderheit nämlich dual x resolution. Wenn das aktiv ist geht er in Extruder.cpp zeile ca.830 in diesen code:
#if DUAL_X_RESOLUTION
Printer::updateDerivedParameter(); // adjust to new resolution
// dualXPosSteps = Printer::lastCmdPos[X_AXIS] * Printer::axisStepsPerMM[X_AXIS] - Printer::xMinSteps; // correct to where we should be in new coordinates
dualXPosSteps = cx * Printer::axisStepsPerMM[X_AXIS] - Printer::xMinSteps; // correct to where we should be in new coordinates
#endif
Wegen des Z wechsels davor wurde aber Printer::lastCmdPos[X_AXIS] geändert auf die neue park position des rechten Extruders. Ich hab die Zeile hie rauskommentiert und eine Alternativzeile eingefügt die statt dessen cx verwendet was die korrekte Position haben sollte. Bitte versuch das mal mit der Zeile ob es besser klappt. Das würde genau zu dem Fehlerbild passen. Hoffe nur das es der einizge Fehler ist der noch drin ist.