Skip to content

Commit 0b0de2a

Browse files
MadGapunclaude
andcommitted
Alpha 0.0.1-alpha.14 - Spindel-Korrektur (1,5kW VFD statt Makita) + Spindel-Editor
Markus' Korrektur: er nutzt eine 1,5-kW-Spindel (luftgekuehlt, VFD, ER11) - nie eine Makita. Davor ein SainSmart 710W Router (ersetzte die Original-Spindel). Daten: - Neue Spindeln: spindle_1500w_aircooled_vfd + sainsmart_router_710w. - ProVerXL-Profil: aktive Spindel = 1,5kW VFD (6000-24000, Hochlauf 3s, PWM). Makita bleibt als Option in der Bibliothek + spindel_ids. - 2 Tests an korrigierte Realitaet angepasst (test_loader, test_app). Spindel-Editor (Markus' Anforderung "alles einstellbar"): - Neuer editor/SpindelEditor.tsx (alle Felder: Typ, RPM, Leistung, Drehmoment, Spannzange, Kuehlung, VFD-Hochlauf-Dwell, PWM-Kennlinie, Notizen). - MaschinenView: Spindel-Bibliothek (anlegen/bearbeiten/loeschen) + "aktiv"-Knopf pro Spindel (Projekt-Override). Backend-CRUD war vorhanden, nur UI fehlte. - GCodeEditorView: Hochlauf-Dwell folgt der gewaehlten aktiven Spindel. Docs: CLAUDE.md-Maschinentabelle, ANALYSE-2026-06, Postprozessor-GRBL, Master-Plan (P1 + neuer D38), Spindel-Wiki - Makita-Referenzen ersetzt; Warmlauf vs. Hochlauf-Dwell klargestellt (10s manueller Warmlauf separat, Programmstart- Warmlauf als Folge-Option vorgemerkt). Tests: Backend 877 gruen, Frontend baut. Versionen 0.0.1-alpha.14. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent d05e9b7 commit 0b0de2a

18 files changed

Lines changed: 391 additions & 30 deletions

CLAUDE.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,9 @@ Wichtigste Details die im Code abgebildet sein müssen:
102102
|---|---|
103103
| Arbeitsraum (Standard) | 400 × 400 × 110 mm |
104104
| Controller | GRBL 1.1 |
105-
| Spindel | Makita RT0700 |
106-
| RPM-Range | 10.000 - 30.000 |
105+
| Spindel | 1,5 kW luftgekühlt mit VFD (ER11) — davor SainSmart 710 W Router (ersetzte Original-Spindel) |
106+
| RPM-Range | 6.000 - 24.000 (einstellbar; alle Spindel-Werte UI-editierbar) |
107+
| Spindel-Hochlauf | manueller Warmlauf ~10 s; G4-Dwell vor Erstschnitt ~3 s (VFD-Accel) |
107108
| Vorschub max | 3000 mm/min |
108109
| Rotary-Setup | Y-Achse umgemappt, $101=88.889 steps/deg |
109110
| Rotary-Macros | ROTARY EIN/AUS in CNCjs vorhanden |

STATUS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ Detaillierte Begründungen + Beispiele liegen im [Wiki](docs/wiki/).
1515

1616
**Releases:**
1717

18+
- **v0.0.1-alpha.14** (Spindel-Korrektur + Spindel-Editor) — Markus' reale Spindel (1,5 kW luftgekühlt, VFD, ER11) + SainSmart 710 W in die Bibliothek; ProVerXL-Profil aktive Spindel = VFD (statt Makita). **Neuer Spindel-Editor** (`SpindelEditor.tsx` + Spindel-Bibliothek in MaschinenView: anlegen/bearbeiten/löschen, „aktiv" setzen) — alle Spindel-Werte UI-editierbar. Hochlauf-Dwell folgt der gewählten Spindel. Makita-Referenzen in allen Docs korrigiert. 877 Tests grün.
1819
- **v0.0.1-alpha.13** (G-code-Härtung + Rampen-Eintauchen + Steuerungs-Architektur) — **Cluster P** (Postprozessor-Härtung: P1 Spindel-Hochlauf-Dwell, P2 modaler Output, P3 Rapid-Safety, P4 G54) + **J5 Rampen-Eintauchen** (`gcode/eintauchen.py`, endpunkt-treu). Tiefen-Analyse (`docs/ANALYSE-2026-06.md`) + **Sender-Architektur** (`docs/SENDER-ARCHITEKTUR.md`, neuer **Teil G** im Master-Plan, Pure-CAM-Grundsatz reconciled). +35 Backend-Tests. Issues #54 (Cluster P), #55 (Sender). UI-Toggles im G-Code-Editor.
1920
- **v0.0.1-alpha.12** (Intelligente Fahrwege + Werkzeug-Grafiken) — J9 kurze Wege (Nearest-Neighbor-Reihenfolge) + J10 knappe Freifahrten (`gcode/fahrweg.py`) + J11 Vorschub-Anpassung bei Teil-Tiefe + K5 Bearbeitungszeit im UI (#52); parametrische Werkzeug-Skizze `WerkzeugGrafik.tsx` (12 Typen, bemaßt im Editor mit Feld-Fokus-Highlight, Piktogramm in Liste + Dropdown) + Auto-Name aus Daten + optionaler Zusatz (#33/D34/D34a). +9 Backend-Tests, +19 Frontend-Tests. **Erstes Release mit substanziellem UI-Anteil für diese Features.**
2021

backend/camwosa/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@
44
G-Code-Generierung und Sicherheits-Checks bereit.
55
"""
66

7-
__version__ = "0.0.1-alpha.13"
7+
__version__ = "0.0.1-alpha.14"

backend/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "camwosa"
7-
version = "0.0.1a13"
7+
version = "0.0.1a14"
88
description = "CAMWOSA Backend — 2.5D CAM für GRBL-Maschinen"
99
readme = "README.md"
1010
requires-python = ">=3.11"

backend/tests/api/test_app.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ def test_details(self, client) -> None:
3838
assert rv.status_code == 200
3939
data = rv.get_json()
4040
assert data["controller"] == "GRBL"
41-
assert data["_aktive_spindel"]["id"] == "makita_rt0700"
42-
assert len(data["_verfuegbare_spindeln"]) == 2
41+
assert data["_aktive_spindel"]["id"] == "spindle_1500w_aircooled_vfd"
42+
assert len(data["_verfuegbare_spindeln"]) == 4
4343

4444
def test_unbekannt_404(self, client) -> None:
4545
rv = client.get("/api/machines/xxx")

backend/tests/db/test_loader.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,10 @@ def test_proverxl_referenziert_spindeln(self, default_data_dir: Path) -> None:
9595
assert "genmitsu_router_710w" in proverxl.spindel_ids
9696
sp = proverxl.aktive_spindel(idx)
9797
assert sp is not None
98-
assert sp.id == "makita_rt0700"
98+
# Markus' reale aktive Spindel: 1,5 kW luftgekuehlt mit VFD
99+
assert sp.id == "spindle_1500w_aircooled_vfd"
99100
# Effektive RPM-Range sollte aus aktiver Spindel kommen
100-
assert proverxl.effektive_rpm_range(idx) == (10000, 30000)
101+
assert proverxl.effektive_rpm_range(idx) == (6000, 24000)
101102

102103

103104
class TestLeeresVerzeichnis:

data/machines/genmitsu_proverxl_4030_v2.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,17 @@
88
"max_vorschub": 3000,
99
"sicherer_vorschub": 2000,
1010
"eilgang": 5000,
11-
"spindel_ids": ["genmitsu_router_710w", "makita_rt0700"],
12-
"aktive_spindel_id": "makita_rt0700",
11+
"spindel_ids": ["spindle_1500w_aircooled_vfd", "sainsmart_router_710w", "genmitsu_router_710w", "makita_rt0700"],
12+
"aktive_spindel_id": "spindle_1500w_aircooled_vfd",
1313
"rotary_profile_ids": ["generic_4achs_3backen_50mm", "generic_4achs_3backen_50mm_fliegend"],
1414
"aktive_rotary_profil_id": null,
15-
"spindel_typ": "manuell",
16-
"spindel_rpm_min": 10000,
17-
"spindel_rpm_max": 30000,
15+
"spindel_typ": "PWM",
16+
"spindel_rpm_min": 6000,
17+
"spindel_rpm_max": 24000,
1818
"sicherheitshoehe": 5.0,
1919
"werkzeugwechsel_position": [0, 0, 100],
2020
"postprozessor": "grbl_genmitsu",
2121
"modi": ["standard_xyz", "rotary_y"],
2222
"aktiver_modus": "standard_xyz",
23-
"notizen": "Markus' Test-Maschine. Aktive Spindel: Makita RT0700 (Upgrade). OEM-Genmitsu-Router weiterhin verfuegbar. Rotary-Setup: Y-Achse umgemappt, $101=88.889 steps/deg (3,5-Achs-Tausch)."
23+
"notizen": "Markus' Test-Maschine. Aktive Spindel: 1,5-kW-Spindel luftgekühlt mit VFD (ER11). Davor SainSmart 710 W Router (ersetzte die Original-Spindel), beide weiterhin verfügbar. Alle Spindel-Werte (Max-Drehzahl, VFD-Hochlauf) im Spindel-Editor anpassbar. Rotary-Setup: Y-Achse umgemappt, $101=88.889 steps/deg (3,5-Achs-Tausch)."
2424
}

data/spindles/standard.json

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,40 @@
11
[
2+
{
3+
"id": "spindle_1500w_aircooled_vfd",
4+
"name": "1,5 kW Spindel (luftgekühlt, VFD)",
5+
"hersteller": "Generisch",
6+
"modell": "1.5 kW ER11 luftgekühlt",
7+
"typ": "PWM",
8+
"rpm_min": 6000,
9+
"rpm_max": 24000,
10+
"leistung_watt": 1500,
11+
"drehmoment_ncm": null,
12+
"gewicht_g": null,
13+
"schaft_durchmesser_mm": 7.0,
14+
"kuehlung": "luft",
15+
"pwm_min_promille": 250,
16+
"pwm_max_promille": 1000,
17+
"rampen_zeit_s": 3.0,
18+
"herkunft": "upgrade",
19+
"notizen": "1,5-kW-Spindel mit VFD (GRBL-PWM → 0-10 V Wandler → VFD), ER11. Alle Werte im Spindel-Editor anpassbar — Max-Drehzahl + VFD-Hochlaufzeit sind maschinenabhängig. rampen_zeit_s = Hochlauf-Dwell vor dem Erstschnitt (NICHT der manuelle Warmlauf)."
20+
},
21+
{
22+
"id": "sainsmart_router_710w",
23+
"name": "SainSmart 710 W Router",
24+
"hersteller": "SainSmart",
25+
"modell": "710 W Trimmrouter",
26+
"typ": "manuell",
27+
"rpm_min": 10000,
28+
"rpm_max": 30000,
29+
"leistung_watt": 710,
30+
"drehmoment_ncm": null,
31+
"gewicht_g": null,
32+
"schaft_durchmesser_mm": 6.35,
33+
"kuehlung": "luft",
34+
"rampen_zeit_s": 2.0,
35+
"herkunft": "upgrade",
36+
"notizen": "710-W-Trimmrouter (ersetzte die Original-Spindel). Drehzahl manuell am Drehrad."
37+
},
238
{
339
"id": "makita_rt0700",
440
"name": "Makita RT0700C",

docs/ANALYSE-2026-06.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ Geprüfter Pfad: `gcode/toolpath.py` → `postprocessor/base.py` →
4343

4444
| # | Befund | Schwere | Wirkung |
4545
|---|--------|---------|---------|
46-
| P1 | **Kein Spindel-Hochlauf-Dwell.** `spindle_on()` gibt `M3 S<rpm>` ohne folgendes `G4 P<t>`. | 🔴 hoch | Erster Plunge passiert, bevor die Makita RT0700 (~1–2 s Hochlauf) auf Drehzahl ist → schlechter Erstschnitt, Werkzeug-/Spindel-Last, Stall-Risiko. |
46+
| P1 | **Kein Spindel-Hochlauf-Dwell.** `spindle_on()` gibt `M3 S<rpm>` ohne folgendes `G4 P<t>`. | 🔴 hoch | Erster Plunge passiert, bevor die Spindel (Markus: 1,5 kW VFD, ~3 s Hochlauf) auf Drehzahl ist → schlechter Erstschnitt, Werkzeug-/Spindel-Last, Stall-Risiko. |
4747
| P2 | **Nicht-modaler Output.** Jede `G1`-Zeile wiederholt `F<feed>` (grbl_standard.py:75) und **alle** Achsworte `X Y Z`, auch wenn unverändert. | 🟠 mittel | Datei 2–3× größer; Z wird auf reinen XY-Zügen wieder gesetzt → Mikro-Jitter durch `:.3f`-Rundung; unübersichtlicher G-code. |
4848
| P3 | **Diagonale Eilgänge möglich.** `rapid_move()` gibt `G0 X Y Z` in **einer** Zeile (base/standard). Wenn eine Eilgang-Bewegung gleichzeitig XY ändert und Z bewegt, fährt die Maschine schräg. | 🟠 mittel | Beim Rückzug: Werkzeug zieht schräg → kann durch Material/Steg schleifen. Bei Anfahrt mit Z-ab: schräger Tauchgang. Abhängig vom Generator. |
4949
| P4 | **Kein explizites `G54`, kein garantierter Start-Sicherheits-Z.** Header setzt G21/G90/G17/G94, aber kein Arbeits-KS und keinen ersten Z-Rückzug. | 🟡 niedrig | Verlässt sich auf GRBL-Default G54 + darauf, dass jeder Toolpath mit Eilgang auf Safe-Z startet. Robustheit. |

docs/wiki/Master-Plan.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ Lücken im **realen G-code-Output** (was auf der Maschine läuft), gefunden beim
121121

122122
| Nr | Funktion | Issue | Wiki | Status |
123123
|----|----------|-------|------|--------|
124-
| P1 | **Spindel-Hochlauf-Dwell**`spindle_on()` hängt `G4 P<t>` nach `M3 S<rpm>` an, damit die Spindel (Makita ~1–2 s) vor dem Erstschnitt auf Drehzahl ist. Quelle `Spindel.rampen_zeit_s` (war schon im Modell, jetzt verdrahtet), per `PostKontext.spindel_hochlauf_s`. Default 0 = aus. 4 Tests. | [#54](https://github.com/MadGapun/CAMWOSA/issues/54) | [Postprozessor-GRBL](Postprozessor-GRBL.md) ||
124+
| P1 | **Spindel-Hochlauf-Dwell**`spindle_on()` hängt `G4 P<t>` nach `M3 S<rpm>` an, damit die Spindel (z.B. 1,5 kW VFD ~3 s) vor dem Erstschnitt auf Drehzahl ist. Quelle `Spindel.rampen_zeit_s` (war schon im Modell, jetzt verdrahtet), per `PostKontext.spindel_hochlauf_s`. Default 0 = aus. 4 Tests. | [#54](https://github.com/MadGapun/CAMWOSA/issues/54) | [Postprozessor-GRBL](Postprozessor-GRBL.md) ||
125125
| P2 | **Modaler Output**`gcode/modal.py` `komprimiere_modal()`: endpunkt-treuer Post-Pass entfernt redundante Achsworte (X/Y/Z unverändert), Feed (nur bei Änderung) und Motion-Wort. Datei kleiner, kein Z-Jitter. Boegen behalten X/Y/I/J. Opt-in `modal:true`. 11 Tests (inkl. Bahn-Treue-Replay). | [#54](https://github.com/MadGapun/CAMWOSA/issues/54) | [Postprozessor-GRBL](Postprozessor-GRBL.md) ||
126126
| P3 | **Rapid-Safety-Split**`entschaerfe_eilgaenge()` zerlegt mehr-achsige Eilgänge in sichere Reihenfolge: Z-hoch zuerst beim Rückzug, XY zuerst beim Anfahren. Kein diagonaler Tauchgang/Schliff. `gcode/fahrweg.py`. Opt-in `rapid_safety:true`. 6 Tests. | [#54](https://github.com/MadGapun/CAMWOSA/issues/54) | [Fahrweg-Optimierung](Fahrweg-Optimierung.md) ||
127127
| P4 | **G54 im Header**`grbl_standard.header()` wählt das Arbeits-KS explizit. Start-Sicherheits-Z liefern die Generatoren bereits (jeder Toolpath beginnt mit Eilgang auf Sicherheitshöhe). 1 Test. | [#54](https://github.com/MadGapun/CAMWOSA/issues/54) | [Postprozessor-GRBL](Postprozessor-GRBL.md) ||
@@ -236,6 +236,8 @@ Die **Profi-Seite** des Dual-Audience-Prinzips — die Anfänger-Schicht (K/L) d
236236
| D35 | UI-Konzepte aus etablierten CAM-Tools — Project-Tree mit Sichtbarkeits-Lampen pro Operation + Doppelklick-Edit + Rechtsklick-Kontextmenue + Drag&Drop · NC-Files-Window · Multi-View-Layout (1/2/3/4 Splits Top/Front/Right/Default) · Animation (Cutter-Symbol auf Toolpath mit Speed-Slider) · Wizard-Framework + 3 Basis-Wizards (Vector/Geometry/Bitmap) · Toolpath-Display-Optionen (Points/Arrows/Rapid) · Default-Project/Part/Operation pro User. | [#38](https://github.com/MadGapun/CAMWOSA/issues/38) | [Frontend](Frontend.md) ||
237237
| D36 | Hilfe-System — **Glossar mit 60+ CNC-Begriffen** ✅ (Werkzeug-Doku + Operations + Strategien). Hover-Help-Audit auf 200+ Eingaben, Inline-Grafiken pro Strategie, FachTooltip-Pattern-Erweiterung folgen in Frontend-Iteration. | [#41](https://github.com/MadGapun/CAMWOSA/issues/41) | [Tooltip-System](Tooltip-System.md) · [First-Run-Wizard](First-Run-Wizard.md) · [Glossar](Glossar.md) | 🟨 |
238238

239+
| D38 | **Spindel-Editor (UI)**`editor/SpindelEditor.tsx` + Spindel-Bibliothek in `MaschinenView` (anlegen/bearbeiten/löschen, alle Felder: Typ, RPM min/max, Leistung, Drehmoment, Spannzangen-Ø, Kühlung, **VFD-Hochlauf-Dwell**, PWM-Kennlinie, Notizen). „Als aktiv setzen" pro Maschine (Projekt-Override). Backend-CRUD war vorhanden (`api/endpoints/spindles.py`), nur die UI fehlte. Markus' Anforderung „alles einstellbar". || [Spindel](Spindel.md) ||
240+
239241
## Teil E — Polish und Pro-Features
240242

241243
| Nr | Funktion | Issue | Wiki | Status |

0 commit comments

Comments
 (0)