Fehler von Zeit zu Zeit, aber hohe Priorität


16

Ich arbeite an einem CNC-Projekt (Computer Numerical Control), bei dem Formen mithilfe von Laser in Metall geschnitten werden.

Jetzt ist mein Problem ab und zu (1-2 mal an 20 ungeraden Tagen), dass das Schneiden je nach Einstellung schief geht oder nicht.

Dies führt jedoch zu Verlusten, sodass der Kunde darüber nicht sehr glücklich ist.

Ich habe versucht, die Ursache dafür herauszufinden

  1. Einschließlich Protokolldateien
  2. Debuggen
  3. Dieselbe Umgebung wiederholen.

Aber es wird sich nicht wiederholen.

Wenn Sie den Vorgang unterbrechen und fortsetzen, wird der Vorgang wieder reibungslos ausgeführt, ohne dass der Fehler erneut auftritt.

Wie gehe ich dieses Problem an? Sollte ich es als Hardware-Problem angeben?


15
Willkommen in der wundervollen Welt des Heisenbugs * 8 ')
Mark Booth

Wenn Sie sagen, dass es ein bis zwei Mal in 20 Tagen vorkommt, bedeutet dies, dass es ungefähr 20 Tage dauert, bis es erscheint, oder es erscheint manchmal nach dem 1. Tag, manchmal nach dem 3. Tag usw.
Dunk

@Dunk es gibt kein genaues Timing, aber es ist noch nie in einer Woche zweimal aufgetaucht.
Shirish11

@Shirish - Ich neigte dazu, ein Problem mit dem Überlauf der Uhr nicht richtig zu behandeln, das ich ein paarmal auf Systemen gesehen habe, deren Problem anscheinend alle so viele Tage und bei weiterer Überprüfung genau alle so viele Tage (oder ein Vielfaches davon) auftritt. .
Dunk

Was passiert, wenn das System angehalten ist? Welche Speicher / Zähler / Hardware ändern sich noch? Was ist wenn du weitermachst? Anscheinend ist jede Änderung bei diesen Vorgängen ein Hinweis auf die Ursache des Problems.
Dunk

Antworten:


25

Work arounds

Wie ChrisF vorschlägt, besteht die pragmatische kurzfristige Lösung möglicherweise darin, den Pause- und Wiederaufnahme- Trick zu verwenden, aber Sie müssen mit Ihren Kunden sprechen, um zu wissen, welche Prioritäten Sie setzen sollten. Beispielsweise:

  • Wenn der Fehler einen Teil von 1.000 Euro in den Papierkorb wirft oder einmal pro Woche 4 Stunden Ausfallzeit verursacht, während der Fix für die Wiederaufnahme der Unterbrechung die Produktion um 1% verringert, wird er den Fix wahrscheinlich sofort vorziehen.

  • Wenn der Fehler einen Teil von 1 GBP in den Papierkorb wirft oder einmal in der Woche 4 Minuten Ausfallzeit verursacht, der Fix für den Pausenwiederaufnahmevorgang jedoch die Produktion um 1% senkt, ziehen sie es wahrscheinlich vor, auf einen Fix zu warten, der die Produktionsrate nicht beeinflusst.

Nachdem ich viele Jahre in der Lasermikrobearbeitung gearbeitet habe, weiß ich, unter welchem ​​Druck Sie stehen können, um den Prozess zu optimieren und Ihre Maschine so viele Teile pro Stunde wie möglich produzieren zu lassen Druck, um das Problem richtig zu beheben.

Protokollierung

Meiner Erfahrung nach besteht die einzige Möglichkeit, einen Heisenbug effektiv aufzuspüren, in einer umfangreichen Protokollierung. Protokollieren Sie alles in und um den Teil des Codes, der für den Fehler verantwortlich sein könnte. Erfahren Sie, wie Sie Ihre Protokolldateien effektiv lesen können, und stellen Sie sicher, dass Sie folgende Fehler an Ihren Motoren überwachen (bewegen sich Ihre Bühnen, wo sie sollen, wann sie sollen?). Überprüfen Sie die Speichernutzung auf dem Computer. Hat ein Speicherverlust dazu geführt, dass ein kritischer Prozess ausfällt?

Stellen Sie sicher, dass Sie auch Benutzeraktionen protokollieren. Sind Sie sicher, dass der Bediener nicht den Notstopp betätigt, damit er während der Reparatur für eine verschobene Zigarettenpause herausspringt? Ich habe gesehen, dass das passiert ist!

Statische Analyse

Suchen Sie auch nach Korrelationen zwischen dem Schreiben bestimmter Muster und dem Fehler, der mehr oder weniger häufig ausgelöst wird. Wenn Sie Muster finden, die das Problem häufiger auslösen (oder niemals auslösen), deuten diese möglicherweise auf Ihr Problem hin.

Versuchen Sie, Muster zu erstellen, die das Problem noch häufiger auslösen . Wenn Sie einen Weg finden, das Problem zuverlässig auszulösen, sind Sie auf halbem Weg zu einer Lösung.

Andere Optionen

Geben Sie der Hardware nicht so schnell die Schuld, sondern gehen Sie niemals davon aus, dass sie perfekt ist. Oft wurde ich für Probleme beschuldigt, die sich als elektrisch oder mechanisch herausstellten, also muss man das immer im Hinterkopf haben.

Auch wenn Sie normalerweise keinen Zugriff auf das Gerät haben, denken Sie daran, dass einige Probleme nur auf dem Gerät effizient gelöst werden können. Manchmal sind ein paar Tage vor Ort Wochen über den Remote-Desktop und Monate offline wert. Wenn Ihnen die Offline-Optionen ausgehen, haben Sie keine Angst, einen Besuch vor Ort vorzuschlagen. Sie können nur Nein sagen.

Vielleicht möchten Sie auch die Fragen und Antworten zu Was machen Sie mit einem Heisenbug? und was tun mit bugs, die nicht repro? aber diese könnten für Ihre Situation nicht so nützlich sein.


Ich habe keine Hardware zur Verfügung. Und der Kunde ist nicht so gut ausgebildet, diese Programmierbegriffe zu verstehen. So ist es nicht möglich, remote an seinem System festzuhalten. Übrigens, danke für den Rat, werde versuchen, eine Lösung zu finden.
Shirish11

6

Ich mache einen Vorschlag von der Wand.

Wenden Sie sich an den Werksleiter und fragen Sie nach den Aufzeichnungen des Stromleitungsmonitors für dieses Werkzeug oder diesen Bereich zu den Zeitpunkten, zu denen die Fehlfunktionen aufgetreten sind. Fragen Sie ihn auch, ob es zu dieser Zeit Schweißarbeiten oder andere ungewöhnliche Aktivitäten gegeben hat.

Vor einigen Jahrzehnten hatte mein Vater eine verdammte Zeit mit einem Minicomputer, der grundlos abstürzte. Sie riefen den Kundenvertreter des Herstellers an.

Der Repräsentant kam in ihr Büro im Fabrikbereich und steckte ein Voltmeter in die Wand neben dem Mini und sagte dann "Pass auf."

Ein paar Minuten später sackte das Voltmeter plötzlich merklich zusammen und kehrte dann zurück. Der Repräsentant sagte: "Das war er, als er seinen Testbogen schlug. Warte eine Minute." Kurz danach sackte das Voltmeter wieder zusammen, und diesmal blieb es zusammengesackt.

Der Repräsentant sagte: "Das ist Ihr Problem. Sie haben einen Mann, der in der Fabrik schweißt, und er befindet sich auf der gleichen Kraftstrecke wie Sie. Ich habe gesehen, wie er sich aufgemacht hat, als ich hereinkam."

Sie mussten eine völlig separate Stromversorgung für das Büro betreiben.



4

Es handelt sich um ein echtes Problem mit echten Konsequenzen für den Benutzer, z. B. ruinierte Arbeit usw., das behoben werden muss. Es muss jedoch nicht "richtig" repariert werden. Sie geben an:

Wenn Sie den Vorgang unterbrechen und fortsetzen, läuft der Vorgang wieder reibungslos, und der Fehler tritt erneut auf.

In diesem Fall tun Sie dies einfach. Der Kunde ist froh, dass er bei fehlerhaften Läufen kein Material verschwendet, auch wenn normale Läufe einige Sekunden länger dauern.

Natürlich müssen Sie dies auf lange Sicht möglicherweise "richtig" beheben, aber vorerst sollten Sie Ihre Verluste reduzieren , die Problemumgehung in Angriff nehmen und sich auf etwas anderes konzentrieren.


4

Ich hatte einen Fehler in einem Spiel, das nur einmal in einer Milliarde vorkam. Glücklicherweise bedeutete dies, dass ich es alle 15 bis 30 Minuten sah, aber das Durchlaufen des Codes im Debugger würde nicht funktionieren. Am Ende habe ich Debug-Meldungen eingegeben. Sie mussten ausgefallene if-Anweisungen verwenden, weil ich nur etwas wollte, wenn es ein Problem gab. In den meisten Fällen wiederholte der Debugging-Code die Berechnungen im regulären Code, verwendete jedoch andere Techniken. Die Wiederholungen mussten nicht präzise sein. Wenn ich wüsste, dass eine Zahl immer unter 10.000 liegen sollte und gelegentlich 150.000 erreicht, würde ich einfach nach einem Wert über 100.000 suchen. Jedes Mal, wenn der Fehler auftrat, studierte ich meine Ergebnisse, entwarf ausführlichere Debugging-Meldungen (oder genauer gesagt ausführlichere Überprüfungen, um festzustellen, ob ich eine Meldung anzeigen sollte) und wartete, bis das Problem erneut auftrat.

Ihre Zyklen werden viel länger sein als meine, aber Sie werden sich irgendwann dem Problem nähern. Ich hoffe, dass Sie die Lösung auf eine andere, schnellere Weise finden können, aber dies wird sich irgendwann bemerkbar machen, wenn nichts anderes geschieht, und Ihnen das Gefühl geben, dass Sie etwas tun , bis Sie eine bessere Idee haben.

(Falls es hilfreich ist, habe ich mein Problem endlich gelöst, indem ich die wenigen Codezeilen bereinigt habe, die ich schließlich als Problem identifiziert habe. Ich schwöre, dass daran nichts falsch war, aber ich denke, dass sowohl das Optimierungsprogramm als auch die CPU die Anweisungen für neu geordnet haben Leistung, und ich denke, ab und zu haben sie das Risiko eingegangen, etwas mehr Geschwindigkeit zu erlangen. Selbst ein einzelner Kern-Multiprozess in diesen Tagen, und ich denke, dass jedes Mal ein Register gelesen wurde, bevor es geschrieben wurde. ich schaltete alle Berechnungen zur Arbeit mit lokalen Variablen. „Instance Feld“ Werte auf lokale Variablen gleich zu Beginn bewegt wurden, und die lokalen Werte wurden wieder nur ganz am Ende, innerhalb Synchronisationsblöcke bewegt. und ich verwenden , um einen lokalen Wert für die Rückgabewert der Methode anstelle des "Instanzfeldes"Ich hatte benutzt.)


+1 für die Überprüfung der Integrität und die iterative Verbesserung der Protokollierung von Nachrichten, um die Ursache des Problems zu ermitteln.
Mark Booth

1

Regel 1 Nummer eins beim Debuggen: Sie benötigen ein reproduzierbares Szenario .

Wenn Sie keine haben, sollten Sie zuerst daran arbeiten. Können Sie diesen Fehler in einer Art "Simulationsmodus" der Maschine reproduzieren, in dem tatsächlich kein Metall geschnitten wird? Dies scheint hier Sinn zu machen. Können Sie mehrere verschiedene Schneidprogramme schnell und automatisch ausführen und den 20-tägigen Prozess in wenigen Minuten simulieren? Dies kann die Wahrscheinlichkeit erhöhen, dass das Problem auftritt.

Wenn Sie ein solches Szenario haben, besteht der nächste Schritt darin, so viele Informationen wie möglich zu sammeln und mit dem Debuggen zu beginnen.


den prozess von 20 tagen in wenigen minuten zu simulieren, das ist nicht möglich. Ich muss die Hardware berücksichtigen.
Shirish11

2
Ich bin noch nie auf einen Heisenbug gestoßen , der mit einem Simulationsmodus reproduziert werden konnte . Die Probleme liegen fast immer in den simulierten Bauteilen oder der Kopplung zwischen ihnen. Wie gesagt, wenn Sie das Problem zuverlässig reproduzieren können, sind Sie auf halbem Weg zu einer Lösung.
Mark Booth

@Shirish: "Den Prozess in wenigen Minuten simulieren" mag ein Extrem sein, aber 20 Tage auf das Auftreten des Fehlers zu warten und viel Metall zu schneiden, damit der Fehler auftaucht, ist offensichtlich das andere Extrem. Vielleicht ist dazwischen etwas möglich.
Doc Brown

2
@ shirish - Wenn Sie die Hardware nicht so abstrahiert haben, dass sie simuliert werden kann, fehlt das Design. Dies bedeutet auch, dass Ihr System nicht ausreichend getestet werden konnte. Daher ist es nicht verwunderlich, dass das System Probleme hat.
Dunk

1
@Dunk - Haben Sie schon einmal in der Laserbeschriftungsindustrie gearbeitet? Sie haben nicht immer den Luxus eines Simulators, und selbst wenn Sie einen guten besitzen, wäre es nicht wirtschaftlich, alle Feinheiten eines komplexen mechatronischen Systems vollständig zu simulieren. Nach Fehlern, Geschwindigkeitsprofilen, Pulsverfolgung mit einer Genauigkeit von weniger als einem Mikrometer, Interaktionen zwischen weichen und harten Echtzeitsystemen, Taktzeitdruck - die Simulation dieses Loses in Echtzeit würde einen Cluster erfordern, geschweige denn in 1 / 10.000 von Echtzeit. Schneller / besser / billiger - Sie können selten alle drei haben, also versuchen Sie bitte, nicht so wertend zu sein.
Mark Booth

1

Ich bin mir nicht sicher, in welcher Sprache dies ausgeführt wird, aber wenn es in meinem Code (C ++) zu fehlerhaften Fehlern kommt, verwende ich ein Tool wie dieses Informationen erhalte valgrind oder cppcheck, um sicherzustellen, dass in Bezug auf den Arbeitsspeicher nichts vor sich geht.


0

Eine Erweiterung der Antwort von RalphChapin:

Im Laufe der Jahre musste ich eine ganze Reihe von Fehlern aufspüren, die sich nur auf Systemen zeigten, die ich aufgrund der angeschlossenen Hardware nicht duplizieren konnte.

Neben der verrückten Protokollierung fand ich Folgendes nützlich: Informationen auf dem Bildschirm anzeigen, wo sich der Code befand und die Werte einiger relevanter Variablen. Als das Problem auftrat, konnten mir sogar die Fabrikarbeiter die Informationen vorlesen.

Normalerweise dauerte es ein paar Runden, um es genau festzulegen, aber es war sehr effektiv.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.