Files
appRobotDriver/doc/ToDo_8_Bugs.md
2026-06-08 19:04:31 +02:00

3.6 KiB
Raw Blame History

ToDo 8 — Bekannte Bugs

Ziel

Konkrete, im Code identifizierte Fehler beheben — unabhängig von den Architektur-Refactorings in den anderen ToDo-Dateien.


Bug 1: TelnetSenderGRBLclose-Event verliert this-Kontext ERLEDIGT

Behoben im ToDo-2-Refactoring: Der close-Handler nutzt jetzt eine Arrow-Function (robot/TelnetSenderGRBL.js), this zeigt korrekt auf die Sender-Instanz.

Datei: robot/TelnetSenderGRBL.js, Zeile 5457

Problem: Das close-Event verwendet eine reguläre function() statt einer Arrow Function. Dadurch zeigt this innerhalb des Handlers auf das EventEmitter-Objekt, nicht auf die TelnetSenderGRBL-Instanz. this.tSocket = null hat keinen Effekt — nach einer Verbindungstrennung bleibt tSocket auf dem alten, ungültigen Objekt.

// Falsch:
this.tSocket.on("close", function () {
    this.tSocket = null;  // 'this' ist hier NICHT TelnetSenderGRBL
});

// Richtig:
this.tSocket.on("close", () => {
    this.tSocket = null;
});

Bug 2: FFirst und FLast sind nicht implementiert

Datei: robot/GCode.js

Problem: ContainsFilesCommand() erkennt FFirst und FLast und leitet sie an receiveFC() weiter. receiveFC() behandelt sie aber nicht — die Befehle werden stillschweigend ignoriert und es wird nur getM114 zurückgegeben.

Erwartetes Verhalten:

  • FFirst — Cursor auf den ersten Eintrag der Log-Datei setzen und die Position anfahren
  • FLast — Cursor auf den letzten Eintrag setzen und die Position anfahren

Bug 3: G92/M92-Mismatch

Datei: robot/GCode.js

Problem: containsCommand() erkennt G92, aber receiveGCode() prüft auf g[0] == "M92". Ein eingehender Befehl G92 X10 wird als G-Code erkannt, fällt dann aber durch alle Bedingungen in receiveGCode(), und löst unbeabsichtigt calculateAngles3D() + sendCommand() aus, ohne die Position zu setzen.

Klärungsbedarf: Ist G92 oder M92 der korrekte Eingabe-Befehl? Beides konsistent machen.


Bug 4: logs/-Verzeichnis wird nicht sichergestellt ERLEDIGT

Behoben: initInputWS() ruft ensureLogDir() (fs.mkdirSync('./logs', { recursive: true })) beim Start auf. ensureLogDir ist exportiert und idempotent. Test: test/InputWS.logDir.test.js.

Datei: server/InputWS.js, Zeilen 6667 und 7778

Problem: fs.appendFileSync('./logs/gcode_commands.log', ...) und fs.appendFileSync('./logs/pings.log', ...) crashen beim ersten Aufruf, wenn das logs/-Verzeichnis nicht existiert.

Fix: Beim Start fs.mkdirSync('./logs', { recursive: true }) aufrufen, z. B. in startRobot.js oder am Anfang von initInputWS.


Bug 5: Falscher Finitude-Check in TelnetSenderGRBL.execCommand

Datei: robot/TelnetSenderGRBL.js, Zeile 161

Problem:

if(this.aAxisGrbl == "x" && mNew.xMotorChanged && Number.isFinite(mNew.y)){

Der Check prüft mNew.y statt mNew.x. Wenn mNew.x NaN oder Infinity wäre, würde das trotzdem durchgehen.


Bug 6: containsMCode matcht zu breit ERLEDIGT

Behoben: containsMCode nutzt jetzt s === 'M1' || s.startsWith('M1 '). Test: test/GCode.containsMCode.test.js. (Hinweis bleibt: Methode wird im Produktivcode noch nicht aufgerufen.)

Datei: robot/GCode.js, Zeile 12

Problem: s.indexOf('M1') == 0 trifft auch auf M10, M11, M12 usw. zu.

// Aktuell:
static containsMCode(s){ return s.indexOf('M1') == 0 }

// Präziser:
static containsMCode(s){ return s === 'M1' || s.startsWith('M1 ') }

Hinweis: Diese Methode wird im aktuellen Code nicht aufgerufen — sie hat keine Wirkung, ist aber irreführend.