Zu dem Test und meinem möglichen Fix.
Die Hauptschleife bereitet Bewegungen vor. Der Interrupt führt diese dann Schrittweise aus.
Die Z-Kompensation hängt dort "davor", macht aber immer nur halbe Schritte, wenn sonst keine Z-Bewegung ansteht.
Und zwar so: Interrupt 1: Z-Kompensation macht den halben StartStep, Interrupt 2: Z-Kompensation beendet den EndStep und zählt ihn.
https://github.com/RF1000/Repetier-Firm ... .cpp#L1806
Dort wird geprüft, ob demnächst ein Z-Move ansteht und für den Z-Move-Fall setzt die Z-Kompensation kurz aus. -> return.
Danach wird geprüft,
https://github.com/RF1000/Repetier-Firm ... .cpp#L1815
ob ein Z-Kompensations-Schritt abgeschlossen werden muss. Dann wird der Step beendet und anschließend gezählt.
Nun mein Verdacht:
Wenn der erste Interrupt einen Z-Schritt anfängt, weil kein Z-Move ansteht, dann in genau diesem Interrupt nachher dieser Move endet und darauf ein Bewegungs-Schnipselchen (G-Code) folgt welcher ein Z-Move drin hat, dann beendet die Z-Kompensation den Schritt erst wenn der andere Z-Move wieder verschwunden ist.
Ich würde also diese beiden Blöcke tauschen.
Zuerst abschließen:
https://github.com/RF1000/Repetier-Firm ... .cpp#L1815
Dann prüfen ob ein neuer Z-Kompensations-Schritt angefangen werden darf:
https://github.com/RF1000/Repetier-Firm ... .cpp#L1806
Rein hypotetisch könnte das vertauscht sicherer laufen als unvertauscht.
-->
https://github.com/Nibbels/Repetier-Fir ... .cpp#L1809
Allerdings kann ich nicht sagen, wie solche Z-Versätze ins Bauteil geraten, wenn die Z-Kompensation schon lange nicht mehr laufen sollte. Denn die Kompensation arbeitet bis g_maxZCompensationSteps
http://www.rf1000.de/wiki/index.php/GCo ... _festlegen
Und das ist normalerweise nur bis 3mm. Ausser man hat M3008 im Startcode oder
verstellt.
Seit RF.01.37l.Mod lasse ich ständig die Digits und damit die Durchbiegung der DMS-Streifen kompensieren. Da arbeitet die Z-Kompensation immer. Der Z-Lift-Fehler scheint aber auch vor RF.01.37l.Mod schon aufzutreten. Darum ist ungewiss ob der Fehler über mir unbekannte Wege tatsächlich für das Z-Lift-Problem zuständig ist.
[Vergleich von SenseOffset mit Digit-Kompensation: Im ersten Layer nutzen wir über "SenseOffset" die DMS-Digits um den Extruder zu entlasten, wenn die Digits zu hoch werden. Sind die Digits höher wie der Schwellwert wird ein zusätzliches Offset aufgebaut, welches das Bett runterfahren lässt.
Das geht nur in eine Richtung und ist ab ca. dem zweiten Layer beendet. Die Digit-Kompensation läuft ständig mit und gleicht nur die Absenkung des Hotends durch die Kraft des Extruders aus.]
LG