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

6.6 KiB

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

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)

bin\install_py.bat

Setup (Linux / macOS)

bash bin/install_py.sh

Nutzung

Umgebung setzen

bin\setenv.bat              # Windows
source bin/setenv.sh        # Linux / macOS

Shell mit gesetzten Variablen oeffnen

bin\get_cmd.bat             # Windows
source bin/get_cmd.sh       # Linux / macOS

venv aktivieren

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%.

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 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)