88 lines
3.0 KiB
Markdown
88 lines
3.0 KiB
Markdown
# ToDo 8 — Bekannte Bugs
|
||
|
||
## Ziel
|
||
|
||
Konkrete, im Code identifizierte Fehler beheben — unabhängig von den Architektur-Refactorings in den anderen ToDo-Dateien.
|
||
|
||
---
|
||
|
||
## Bug 1: `TelnetSenderGRBL` — `close`-Event verliert `this`-Kontext
|
||
|
||
**Datei:** `robot/TelnetSenderGRBL.js`, Zeile 54–57
|
||
|
||
**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.
|
||
|
||
```js
|
||
// 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
|
||
|
||
**Datei:** `server/InputWS.js`, Zeilen 66–67 und 77–78
|
||
|
||
**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:**
|
||
```js
|
||
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
|
||
|
||
**Datei:** `robot/GCode.js`, Zeile 12
|
||
|
||
**Problem:** `s.indexOf('M1') == 0` trifft auch auf `M10`, `M11`, `M12` usw. zu.
|
||
|
||
```js
|
||
// 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.
|