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
- Einschließlich Protokolldateien
- Debuggen
- 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?
debugging
issue-tracking
Shirish11
quelle
quelle
Antworten:
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.
quelle
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.
quelle
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:
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.
quelle
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.)
quelle
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.
quelle
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.
quelle
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.
quelle