Drucker stoppt mitten im Druck

Wenn der Drucker erfolgreich verbunden wurde und du einen Druck starten konntest, sind die Verbindungseinstellungen normalerweise mindestens 95% richtig. Dieser Eintrag soll dir eine Hilfestellung geben, falls du einen Druck starten konntest und der Druck später aus unbekannten Gründen abbricht. Das ist etwas, das normalerweise nicht vorkommt, also muss es einen Grund geben. Und oft, wenn die Ursache nicht beseitigt wird, passiert das immer wieder. Wenn du also häufig ungewollte Druckabbrüche hast, folge diesem Leitfaden und finde heraus, woran es liegt.

Als erstes musst du verstehen, wie der Kommunikationsfluss funktioniert. Der Fluss vom Drucker zum Repetier-Server erfolgt in den folgenden Schritten.

  1. Drucker-Firmware: Die Firmware verfügt über einen Kommunikationspuffer für ein- und ausgehende Nachrichten. Sie prüft eingehende Nachrichten mit Zeilennummern und Prüfsummen auf Kommunikationsfehler.
  2. Drucker-USB: Hierbei handelt es sich entweder um einen USB-Seriell-Konverter, mit dem die Drucker-Firmware über eine serielle Verbindung kommuniziert, oder um einen nativen USB-Treiber, der in die Drucker-Firmware integriert ist.
  3. USB-Kabel: Keine aktive Komponente, aber elektrisches Rauschen, schlechte Kontakte, schlechte Abschirmung oder einfach nur lange Kabel können hier zu Kommunikationsfehlern führen und sind daher eine mögliche Fehlerquelle.
  4. USB Hip (optional): Manche Benutzer haben eine Kaskade von USB-Hubs, um genügend USB-Anschlüsse zu erhalten. Jeder Hub muss Daten aufteilen und erneut senden, so dass das ebenfalls eine Fehlerquelle ist.
  5. USB deines PCs, PC-Betriebssystems: Der serielle Treiber des Betriebssystems erkennt das Gerät und erstellt einen Kommunikationsanschluss im Betriebssystem, an den es angeschlossen werden kann.
  6. Repetier-Server angeschlossen über Kommunikationsport

Wie du siehst, sind bis zu 6 Instanzen beteiligt, und jede hat ihre eigene mögliche Problemquelle. Der wichtigste Schritt besteht also darin, herauszufinden, welches Gerät das Problem verursacht und was du dagegen tun kannst.

Einer der wichtigsten Teile, um das Problem zu identifizieren, sind die Protokolldateien. Auf der Serverseite ist der relevante Teile die server.log, die anzeigt, wann eine serielle Verbindung geöffnet oder geschlossen wird. Es zeigt allerdings nicht den Grund dafür. Aber mit diesen Informationen ist es zumindest möglich, den Zeitstempel zu ermitteln, wann genau das Problem aufgetreten ist. Die andere Serverdatei ist die Server-Druckprotokollierung. Du kannst dies im Drucker-Menü unter Druck Logs aktivieren. Normalerweise handelt es sich dabei nur um nicht benötigte Informationen und Schreibvorgänge, so dass die Logs standardmäßig deaktiviert sind. Wenn du aber nach den Gründen für den Verbindungsabbruch suchst, solltest du sie aktivieren. Ein Teil davon kann auch in der Konsole eingesehen werden, so dass dies auch eine gute Quelle für die Echtzeitanzeige von Problemen ist, aber du siehst nur die Ergebnisse der letzten 2000 Zeilen, so dass die Informationen möglicherweise weg sind, wenn du sie brauchst. Das letzte sind die Protokolle des Betriebssystems. Bei Linux ist dies die Datei /etc/logs/system – die du auch im Server-Log-Fenster herunterladen können. Beachte, dass syslog täglich rotiert wird, so dass du beim Herunterladen immer nur das Protokoll des aktuellen Tages erhältst.

Prüfe zunächst die Qualität der Verbindung, wenn sie funktioniert. Überprüfe also bei einem längeren Druck ein Protokoll und zähle, wie viele erneute Sendeanforderungen vom Drucker und wie viele Zeitüberschreitungen du siehst.

Eine erneute Sendung erfolgt, wenn eine Firmware einen Befehl mit Prüfsumme empfängt und die Prüfsumme nicht übereinstimmt, d. h. die gesendete Zeile ist nicht mit der empfangenen identisch. Irgendetwas zwischen Schritt 5 und 1 hat den Inhalt verändert oder einen Teil der gesendeten Daten ausgelassen.

Vor allem bei echten seriellen<->USB-Konvertern kann eine Änderung leicht passieren. Es gibt keine Timing-Leitung, wenn also die Uhren der Geräte nicht genau mit der gleichen Geschwindigkeit laufen, können sie hin und wieder etwas falsch interpretieren. Wenn der Drucker das Umschalten der Baudrate erlaubt, kannst du versuchen, 115200 mit 250000 oder umgekehrt zu wechseln. Manchmal führt eine der beiden Geschwindigkeiten zu weniger Fehlern. In Bezug auf die Geschwindigkeit macht es keinen großen Unterschied, da die USB-Latenzzeit der wichtigste Geschwindigkeitsbegrenzer ist.

Wenn du sehr häufig erneute Sendebefehle erhältst, etwa alle 5-10 Zeilen, ist deine Einstellung für die Größe des Eingabepuffers zu hoch und wir senden mehr Daten, als die Drucker-Firmware zwischenspeichern kann. Verringere die Größe auf 63. Wenn das nicht hilft, schalte auf den Ping-Pong-Modus um, bei dem wir nur dann einen neuen Befehl senden, wenn die Firmware den letzten Sendebefehl als abgeschlossen markiert.

Zeitüberschreitungen sind das Ergebnis von Kommunikationsfehlern in der anderen Richtung von der Drucker-Firmware zum Server. Für jeden Befehl, den wir senden, müssen wir eine Zeile erhalten, die mit „ok“ beginnt. Ein typischer Fall ist, dass das „o“ fehlt und das „k“ nicht „ok“ ist. Wir warten und warten und die Firmware wartet auf den nächsten Befehl, ohne zu wissen, dass wir das „ok“ nicht erhalten haben. Nach dem eingestellten Wert von „Kommunikationstimeout“-Sekunden und wenn wir wissen, dass der Befehl schnell sein sollte, nehmen wir diesen Fall an, schreiben die Timeout-Meldung und senden die Daten weiter. Hier muss man aufpassen, dass man einen guten Wert wählt. Moderne Firmwares unterstützen ein Busy-Protokoll, d.h. wenn ein Befehl länger dauert, sendet er „busy“ und setzt den Timeout alle 2 Sekunden zurück. In dieser Zeit kannst du die Zeitüberschreitung auf 3 Sekunden einstellen und hast so eine schnelle Wiederherstellung. Wenn dies nicht unterstützt wird, sollte die Zeitüberschreitung 30 Sekunden betragen oder zumindest länger sein als der längste langsame Zug, den du ausführen willst. Häufig ist dies eine Z-Bewegung von oben nach unten.

Vor allem, wenn du eine gute Kombination von Timeouts und Wiederholungen häufiger als alle 1000 Zeilen erhältst (viele Drucker sind sogar noch viel besser, aber ich denke, dass du unterhalb dieses Wertes wirklich nach der Quelle suchen solltest), hast du einige elektronische Störungen. Dies kann ein Netzkabel neben einem nicht abgeschirmten USB-Kabel oder ein Heizungs-/Motorkabel in der Nähe eines Kommunikationskabels im Drucker sein, ein langes Kabel, das Probleme verursacht, und vieles mehr.

Es kann auch sein, dass der Drucker selbst ein Problem hat. Bekannte Probleme und Anzeichen:

  • Die Firmware hat einen behebbaren Fehler entdeckt: Im Log/Konsole siehst du normalerweise eine Meldung der Firmware mit der Info, dass M999 die Firmware neu starten würde. Neuere Serverversionen geben auch oft einen Hinweis je nach Fehler und Firmware.
  • Die Firmware hat einen nicht behebbaren Fehler entdeckt: Einige Firmware-Fehler werden von den Firmware-Autoren als kritisch eingestuft und halten die Firmware in einer Endlosschleife an. In der Konsole siehst du normalerweise den Grund dafür. Sie ignorieren die gesamte Kommunikation, bis der Drucker zurückgesetzt wird.
  • Der Drucker hat sich aus irgendeinem Grund zurückgesetzt. Viele Firmwares senden den Grund bei der nächsten Verbindung. Wenn du eine Meldung über einen Stromausfall siehst, bedeutet dies, dass der Drucker eine Unterspannung hatte. Watchdog bedeutet, dass die Drucker-Firmware unerwartet hängen geblieben ist.

Der nächste große Bereich ist die Stromversorgung. Insbesondere die CPU-Platinen des Druckers können entweder über die Hauptstromversorgung des Druckers oder über USB und Netzstrom versorgt werden. Im letzteren Fall kann der Strom vom Drucker-PC bezogen werden. USB 2.0 erlaubt 500mA, aber es kann sein, dass du mehr verbrauchst oder dass der USB-Anschluss nicht so viel senden kann (besonders passive Hubs). Besonders bei kleinen PCs wie dem Raspberry Pi, der sehr empfindlich auf Stromprobleme reagiert, kann dies zu allen möglichen Problemen führen, von einer einfachen Warnung über nicht angeschlossene oder nicht funktionierende Drucker bis hin zu einem Absturz des Betriebssystems. Für den Pi gibt es eine Hardware-Info in der Repetier-Server-GUI (Blitz-Symbol), die anzeigt, ob der Pi eine Unterspannung hat oder gerade leidet, da dies ein häufiger Grund für Probleme ist. Ließ diesen Artikel für mögliche Lösungen: Unterspannung und Drosselung des Pi

Linux schließt USB-Verbindungen aktiv aus vier Gründen:

  1. Du hast den Stecker des USB-Kabels herausgezogen oder das Gerät deaktiviert, so dass es nicht mehr kommuniziert. Das ist die offensichtliche Möglichkeit, die du leicht ausschließen kannst.
  2. Die Unterspannung hat einen bestimmten Wert überschritten. Du siehst eine Meldung in /var/log/syslog
  3. EMF. Wiederum protokolliert Linux diesen Eintrag in /var/log/syslog
  4. Absturz des Treiber. Das ist tatsächlich knifflig. Wenn er offiziell abstürzt, erhältst du eine Meldung im Syslog, nehme ich an. Tatsache ist aber, dass er auch im aktiven Zustand oft nur Daten in eine Richtung sendet und die Verbindung offen hält.

Wenn du im Druckprotokoll „Connection closed by os“ siehst, bedeutet dies, dass der Port, mit dem wir gesprochen haben, nicht mehr existiert. Hier solltest du einen Blick in das Syslog werfen, um zu sehen, was Linux über den Grund erzählt. Der Zeitstempel würde dem Zeitstempel der Nachricht sehr nahe kommen, berücksichtige nur, dass syslog eine andere Zeitzone hat als unsere Protokolle, die die lokale Zeit verwenden.

Bei Unterspannung/EMF erscheint der Anschluss ein paar Sekunden später und der Drucker verbindet sich wieder. Du kannst in den Servereinstellungen festlegen, dass der Druck in diesem Fall fortgesetzt werden soll. Tune dies nur, wenn die Verbindung ohne Reset erfolgt. Wir versuchen, das Zurücksetzen beim schnellen Wiederverbinden zu verhindern, aber nicht alle seriellen Treiber unterstützen dies. Native USB-Verbindungen werden ohnehin nicht zurückgesetzt.

Besonders ärgerlich ist es, wenn die serielle Schnittstelle offen bleibt, aber keine oder nur in eine Richtung Kommunikation stattfindet. Es ist unklar, wo genau das passiert. Als Ergebnis sieht man normalerweise häufige Timeouts und wir haben eine Serveroption hinzugefügt, um den USB-Treiber auf dem Linux-System neu zu starten (USB neu verbinden bei Timeout). Früh bedeutet nach einer Zeitüberschreitung, konservativ nach 2 Zeitüberschreitungen für den Fall von wiederherstellbaren Zeitüberschreitungen wie oben beschrieben. Es startet die Serverkommunikation und den Linux-Treiber neu. Wenn du in diesem Fall den Drucker vom Netz trennen musst, um die Verbindung wiederherzustellen, scheint der Fehler auf der Druckerseite zu liegen.

Der letzte und recht ungewöhnliche Fall ist ein Deadlock im Repetier-Server. Dies kam in der Vergangenheit vor, aber inzwischen haben wir alle bekannten Fälle gelöst und hatten lange Zeit keine gefundenen Fälle mehr. Dennoch möchte ich ihn der Vollständigkeit halber erwähnen und für den Fall, dass wir ihn versehentlich hinzugefügt haben. Wenn es passiert, ist es ziemlich typisch, dass die Benutzeroberfläche nicht vollständig geladen wird, oder es scheint so, als würde sie auch nicht funktionieren. Seitenwechsel werden nicht ausgeführt oder es fehlen Inhalte, die vorher vorhanden waren. Falls dies auf einem Linux-System passiert ist, wären wir dir dankbar, wenn du uns ein Backlog aller Threads, wie hier beschrieben, zukommen lässt: Debugge Abstürze/Hänger unter Linux