# 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/.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/.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)