Files
sps_skel/README.md
T
m.stangl e630ec12d6 Document the planned DXF-to-JSON-to-SCL generator pipeline
Add a Roadmap section to README.md and CLAUDE.md describing the two
still-to-be-written lib/ tools (tro_export.py, scl_gen.py) that will
turn the annotated CAD drawing into a JSON layout model and then into
TIA-Portal-importable SCL, including the --skip-json shortcut.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-20 21:30:25 +02:00

175 lines
6.6 KiB
Markdown

# sps_skel
> Das Programm erhält ein mechanisches Layout von der Projektierung oder dem
> Angebotswesen zusammen mit dem elektrischen Layout (Liste aller Sensoren,
> Stopper, Weichen, etc.). Daraus soll es ein Skelett für die SPS-Programmierung
> (Siemens SCL, TIA Portal) erzeugen — aufgebaut aus **TRO**-Bausteinen
> (Transfer Route Object), den wiederkehrenden Steuerungseinheiten einer
> Fördertechnik-Anlage.
## Stand des Projekts
Der eigentliche SCL-Generator (JSON-Layout → TIA-Portal-Code) ist **noch nicht
geschrieben**. Was bereits funktioniert, ist die Ableitung der Vorstufen dazu:
aus einem CSV-Export der mechanischen Planung (ILS 2.0) werden automatisch
- der **Materialfluss-Graph** der mechanischen Objekte (Strecken, Gefällestrecken,
Kreisel),
- die daraus abgeleitete **TRO-Liste** samt eigenem Flussdiagramm, und
- eine **annotierte Kopie der BricsCAD-Zeichnung** mit einem Marker-Symbol pro
TRO
erzeugt. Diese drei Werkzeuge liegen als CLI-Tools in `lib/` und sind über
`bin/`-Wrapper aufrufbar (siehe unten). Details, Domänenmodell und die
Roadmap zum Generator stehen in `doc/`, allen voran `doc/Python_Scripts.md`.
## Roadmap
`tro_annotate.py` ist aktuell die letzte Stufe: Der Nutzer kann die annotierte
DXF-Kopie danach von Hand weiterbearbeiten — TROs verschieben, ergänzen oder
deren Typ ändern (`TRO_INSERT`/`TRO_EDIT` im BricsCAD-Menü, siehe
`doc/HundM/BricsCAD_TRO_Symbol.md`). Geplant sind zwei weitere Tools, die diese
Zeichnung bis zum fertigen SCL-Code weiterführen:
1. **`tro_export.py`** (geplant) — liest die (ggf. von Hand nachbearbeitete)
annotierte DXF zusammen mit dem CSV-Export und leitet daraus die
JSON-Layout-Datei nach dem in `doc/HundM/Json_Layout-Konzept.md`
beschriebenen Schema ab (`plc`, `controlUnits`, `sensors[]`, `conveyors[]`,
`tros[]`, `loadingBooms[]`, `emptyCarrBuffers[]`, `routing`, `jamAreas[]`,
`scanners[]`, `connections[]`, `destinations[]`). Timing-Werte pro TRO
(`trailingTime`, `handlingTime`, `senFree`, `senWait`, `jamTime`, ...)
kommen dabei standardmäßig aus der typspezifischen Default-Tabelle
(`doc/TRO_Typen.md`); trägt das CAD-Symbol einen `OVERRIDE_TIMING_JSON`-Wert
(siehe `doc/HundM/BricsCAD_TRO_Symbol.md`), gewinnt der Override. Die
erzeugte JSON-Datei ist danach von Hand editierbar, um einzelne Defaults
oder Zeiten anzupassen, bevor daraus SCL generiert wird.
2. **`scl_gen.py`** (geplant) — liest die JSON-Layout-Datei und erzeugt daraus
die `.scl`-Skeleton-Dateien für den direkten TIA-Portal-Import (`FB_Main`,
`FB_CallSensors`, `FC_Direction`, `FC_Call_Jams` je Steuerung). Mit dem
Schalter `--skip-json` läuft dieser Schritt auch ohne manuell
nachbearbeitete JSON-Datei: `scl_gen.py` liest dann DXF und CSV direkt (wie
`tro_export.py`) und erzeugt sofort SCL mit den Typ-Defaults, ohne eine
Zwischen-JSON-Datei zu schreiben oder einzulesen — sinnvoll, wenn an den
Defaults nichts manuell angepasst werden muss.
Beide Tools bekommen wie üblich ein `bin/<name>.bat`/`.sh`-Wrapper-Paar und
werden in `doc/Python_Scripts.md` dokumentiert, sobald sie existieren.
## Projektstruktur
```text
sps_skel/
bin/ Umgebungsskripte + ein .bat/.sh-Wrapper-Paar je CLI-Tool
setenv.bat/.sh Umgebungsvariablen setzen
install_py.bat/.sh venv erstellen + pip install
activate_venv.bat/.sh venv aktivieren
get_cmd.bat/.sh Shell mit Umgebung oeffnen
material_flow.bat/.sh Wrapper fuer lib/material_flow.py
tro_flow.bat/.sh Wrapper fuer lib/tro_flow.py
tro_annotate.bat/.sh Wrapper fuer lib/tro_annotate.py
cad/ generiertes BricsCAD-LISP (tro_types.lsp) fuer den TROEDIT-Dialog
cfg/ Konfigurationsdateien (INI/JSON); dxf_registration.json
data/ Eingabedaten - CSV-Exporte, DXF (nicht im Git)
doc/ Dokumentation, siehe doc/Python_Scripts.md
examples/ Beispieldateien
lib/ Python-Quellcode (CLI-Tools + Bibliotheken)
log/ Log-Dateien (nicht im Git)
results/ Ergebnisse der CLI-Tools (.dot/.svg/.md/.dxf, nicht im Git)
tests/ Unit Tests
.gitignore
LICENSE
README.md
requirements.txt
```
## Umgebungsvariablen
| Variable | Beschreibung |
|----------------|---------------------------|
| `SPS_SKEL` | Wurzelverzeichnis |
| `SKEL_BIN` | Skriptverzeichnis |
| `SKEL_LIB` | Python-Quellcode |
| `SKEL_CFG` | Konfigurationsdateien |
| `SKEL_DATA` | Eingabedaten |
| `SKEL_DOC` | Dokumentation |
| `SKEL_LOG` | Log-Dateien |
| `SKEL_RESULTS` | Ergebnisse |
| `SKEL_EXAMPLES` | Beispieldateien |
| `SKEL_TESTS` | Unit Tests |
| `PYTHONPATH` | Erweitert um `SKEL_LIB` |
## Installation
### Voraussetzungen
- Python 3.10 oder hoeher
- Graphviz (`dot`) auf `PATH` fuer `--tosvg`, optional aber empfohlen
- fuer `tro_annotate.py`: `ezdxf` (wird per `requirements.txt` installiert)
### Setup (Windows)
```bat
bin\install_py.bat
```
### Setup (Linux / macOS)
```sh
bash bin/install_py.sh
```
## Nutzung
### Umgebung setzen
```bat
bin\setenv.bat # Windows
source bin/setenv.sh # Linux / macOS
```
### Shell mit gesetzten Variablen oeffnen
```bat
bin\get_cmd.bat # Windows
source bin/get_cmd.sh # Linux / macOS
```
### venv aktivieren
```bat
bin\activate_venv.bat # Windows
source bin/activate_venv.sh # Linux / macOS
```
### CLI-Tools ausführen
Jedes Tool wird über seinen `bin/<name>.bat`/`.sh`-Wrapper aufgerufen; dieser
setzt die Umgebung, aktiviert `.venv` und ruft dann das Python-Modul auf.
`--file`/`--dxf` akzeptieren entweder einen Dateinamen (wird gegen
`%SKEL_DATA%` aufgelöst) oder einen vollen Pfad; Ausgaben landen in
`%SKEL_RESULTS%`.
```bat
REM 1) Materialfluss der mechanischen Objekte
bin\material_flow.bat --file mubea.csv --tosvg --doc
REM 2) TRO-Liste + eigenes Flussdiagramm ableiten
bin\tro_flow.bat --file mubea.csv --tosvg --doc
REM 3) TROs als Marker-Symbole in eine Kopie der CAD-Zeichnung einbrennen
bin\tro_annotate.bat --file mubea.csv --dxf 500573_60_1.dxf --flow --fb --legend
```
Alle Switches, Ausgabedateien und Exit-Codes der drei Tools sind in
[`doc/Python_Scripts.md`](doc/Python_Scripts.md) dokumentiert; das
Domänenmodell (TRO-Typen, geplantes JSON-Layout, I/O-Listen-Analyse) findet
sich in den übrigen Dokumenten unter `doc/`.
## Lizenz
MIT License - siehe LICENSE
## Autor
Michael Stangl (GitHub: mistamichael)