Schritte 1-3 aus doc/SCL_Templates.md (neu: Konzept, Wertklassen je Zeile, Namensregeln, Tests, Migrationsplan, Vertrag fuer den CSV->SCL-Workflow). - Golden-Files (tests/test_scl_skeleton_golden.py, tests/fixtures/scl/): komplette FB_Main-Ausgabe von mubea und HundM05 byte-genau festgeschrieben, Zeitstempel maskiert; gewollte Aenderung per SKEL_UPDATE_GOLDEN=1 - lib/scl_context.py (neu): alles, was scl_skeleton aus der TRO-JSON ableitet (Reihenfolge, Separator-/Weichen-/Scanner-Bloecke, Staubereiche, Ziellisten, Namen) als pydantic-Kontext SclFile/SclTro; Namen als SclName (Wert + todo-Merker) als Andockstelle fuer die Namensregeln (Schritt 4). scl_skeleton schreibt nur noch Text; Ausgabe byte-identisch (Golden-Files, zusaetzlich dematic/showroom mit und ohne --start alt/neu verglichen) - lib/scl_templates/ (neu, Jinja2): _macros.scl.j2 + Pilot FB_ILS_MTRO_1Sep1Swi.scl.j2 nach der realen Aufrufstelle TRO107 (PriorityManagerDir2, stInSenJam<n>, xInCarouselRun1, xInRelease TRUE, Separatorzeiten 100/50 ms). Ortsgebundene Zeilen als Vorschlag umgesetzt, jede offene Stelle mit TODO(E-Planung) - Bestaetigung durch SPS steht aus - scl_skeleton: --templates [DIR] (opt-in, ohne Schalter Ausgabe unveraendert), --strict (Exit 1 ohne SCL, wenn ein FB-Typ kein Template hat); Kopf und Zusammenfassung nennen Template-/generische Typen; Templatefehler (StrictUndefined) -> Exit 1 ohne SCL - tests/test_scl_templates.py: Rundlauf Template mit Referenzwerten == Referenz-REGION (normalisiert); jede Platzhalterzeile traegt den TODO-Marker - requirements.txt: jinja2 >= 3.1 (bestehende .venv: pip install -r requirements.txt) - Doku: SCL_Templates.md, Python_Scripts.md §5b, Commandlines.md §2.5, CLAUDE.md Befunde: xInCarouselRun1 laesst sich nicht aus der TRO-JSON ableiten (Kanten- art "umlauf" kommt praktisch nicht vor) -> immer als TODO; nTo1Destinations ist in der Referenz 3 bei 2 Abgaengen (zaehlt evtl. Ziele) -> "pruefen". Mit --templates nur die 1Sep1Swi-REGIONs (+ Kopf) anders als generisch; 32 Tests gruen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
9.4 KiB
Command Lines — Overview
As of: 2026-10-05
Every command this project provides, in one place. This is the quick reference;
for what each tool derives, how, and the full description of every switch, see
Python_Scripts.md.
All commands live in bin/ as a .bat (Windows) / .sh (Linux/macOS) pair.
Examples below use the Windows form; on Linux/macOS replace bin\x.bat with
bash bin/x.sh (or source bin/x.sh where noted).
1. Environment commands
These set up or enter the environment. They never run a Python tool.
| Command | Purpose |
|---|---|
bin\setenv.bat / source bin/setenv.sh |
Sets SPS_SKEL and SKEL_BIN/LIB/CFG/DATA/DOC/LOG/RESULTS/EXAMPLES/TESTS, prepends SKEL_LIB to PYTHONPATH, creates missing folders. Windows: --keep-open pauses at the end. |
bin\install_py.bat / bash bin/install_py.sh |
One-time: creates .venv and installs requirements.txt. Does nothing if .venv already exists. |
bin\activate_venv.bat / source bin/activate_venv.sh |
Each session: sets the environment and activates .venv (error if missing — run install_py first). |
bin\get_cmd.bat / bash bin/get_cmd.sh |
Opens a new shell with the environment variables set. |
2. Pipeline tools
The five CLI tools, in pipeline order. Each wrapper sets the environment,
activates .venv if present and runs lib/<name>.py with all arguments passed
through. Every tool accepts --help.
CSV ─► material_flow ─► tro_flow --json ─► <name>_tro.json ─► scl_skeleton ─► <name>_FB_Main.scl
│ (model.py) (validates)
└─► tro_annotate (+ DXF) ─► <name>_annotated.dxf viewer only
parked: tro_extract (DXF → JSON), see 2.4
Shared conventions:
- Input names (
--file,--dxf) are a bare filename resolved against%SKEL_DATA%, or a full path.scl_skeleton(and the parkedtro_extract) look up their input in%SKEL_RESULTS%instead (it is the output of the previous step). - All output goes to
%SKEL_RESULTS%. --tosvgneeds Graphvizdot(neatowith--use-cords) onPATH, orGRAPHVIZ_DOTpointing atdot.
2.1 material_flow — material-flow graph of the mechanical objects
Input: CSV export. Details: Python_Scripts.md §3.
| Switch | Argument | Default | Effect |
|---|---|---|---|
--file |
NAME |
export.csv |
CSV input. |
--tosvg |
— | off | Also render .svg via Graphviz. |
--use-cords / --use-coords |
— | off | Place nodes at plant coordinates (neato -n). Only with --tosvg. |
--doc |
— | off | Write Markdown report <name>_material_flow.md. |
--connect |
— | off | Write topology as <name>_connect.ini. |
--show-bbs |
flow | all |
flow if given without value |
Write top-down view <name>_bbs.svg (no Graphviz). all also draws VF/GF chain detail rows. |
--show-kx |
— | off | Only with --show-bbs: draw connection points K1–K4. |
--track |
— | off | Write fine-grained track graph <name>_track.dot (.svg with --tosvg). |
--chain-graph |
— | off | Write chain/layout plan of the coarse objects (<name>_chain.svg / .dot). |
--graphtype |
coarsebox | compound | subgraph |
coarsebox |
Only with --chain-graph: rendering method. |
Exit codes: 0 ok · 1 input/CLI error · 2 SVG rendering failed.
bin\material_flow.bat --file mubea.csv --tosvg --use-cords --doc
bin\material_flow.bat --file HundM05.csv --show-bbs all --show-kx
bin\material_flow.bat --file HundM05.csv --chain-graph --graphtype subgraph --tosvg
2.2 tro_flow — derive and draw the TROs
Input: CSV export. Details: Python_Scripts.md §4.
| Switch | Argument | Default | Effect |
|---|---|---|---|
--file |
NAME |
export.csv |
CSV input. |
--tosvg |
— | off | Also render the TRO flow diagram as .svg. |
--use-cords / --use-coords |
— | off | Place TROs at plant coordinates (neato -n). Only with --tosvg. |
--true-scale |
— | off | Only with --use-cords: draw to scale (default shortens empty stretches > 1500 mm). |
--doc |
— | off | Write Markdown report <name>_tro_doc.md. |
--connect |
— | off | Write TRO topology as <name>_tro_connect.ini. |
--json |
— | off | Write the TRO-JSON <name>_tro.json (model lib/model.py) — input for scl_skeleton. |
Exit codes: 0 ok · 1 input/CLI error · 2 SVG rendering failed ·
3 TRO validation errors (<name>_tro_errors.md written).
bin\tro_flow.bat --file mubea.csv --tosvg --use-cords --doc
bin\tro_flow.bat --file mubea.csv --json
2.3 tro_annotate — burn the TROs into a copy of the drawing
Viewer only: shows the same TROs as tro_flow in the drawing for a visual
check; the drawing is not read back as data.
Input: CSV export + original BricsCAD DXF. The original is never modified.
Details: Python_Scripts.md §5.
| Switch | Argument | Default | Effect |
|---|---|---|---|
--file |
NAME |
export.csv |
CSV input. |
--dxf |
NAME |
— | Original drawing (DXF). Required unless --emit-lisp is used alone. |
--out |
NAME |
<csv-stem>_annotated.dxf |
Output filename. |
--flow |
— | off | Draw flow arrows between TROs. |
--fb |
— | off | Show the Siemens FB block name on the marker. |
--legend |
— | off | Draw a color-group legend. |
--marker-size |
MM |
300.0 |
Marker radius in mm. |
--text-height |
MM |
220.0 |
Text height in mm. |
--offset |
DX,DY |
— | Set the CSV↔DXF offset by hand (0,0 for dxfmakros drawings). |
--re-register |
— | off | Re-derive the offset even if a cached one exists in %SKEL_CFG%. |
--check |
— | off | Dry run: analyze and report, write nothing. |
--emit-lisp |
— | off | Regenerate cad/tro_types.lsp (or under %DXFM_LISP%) and exit. |
Exit codes: 0 ok · 1 input/CLI error · 4 coordinate registration not
provable — use --offset.
bin\tro_annotate.bat --file mubea.csv --dxf 500573_60_1.dxf --flow --fb --legend
bin\tro_annotate.bat --file mubea.csv --dxf Mubea.dxf --offset 0,0 --check
bin\tro_annotate.bat --emit-lisp
2.4 tro_extract — read the TROs back out of the drawing into JSON
Parked — kept, but not part of the main path. Its JSON (schema
sps_skel-tro-extract-v1) is rejected by scl_skeleton; use
tro_flow --json instead.
Input: the (possibly hand-edited) annotated DXF only, never the CSV.
Details: Python_Scripts.md §5a.
| Switch | Argument | Default | Effect |
|---|---|---|---|
--dxf |
NAME |
export_annotated.dxf |
Annotated drawing (looked up in %SKEL_RESULTS%). |
--out |
NAME |
<drawing>_tro.json |
Output JSON filename. |
Exit codes: 0 ok · 1 input/CLI error · 2 no TRO markers in the drawing.
bin\tro_extract.bat --dxf mubea_annotated.dxf
2.5 scl_skeleton — generate the FB_Main SCL skeleton
Input: TRO-JSON from tro_flow --json, validated against lib/model.py — a
wrong or renamed key stops the run (exit 1) instead of producing SCL. Output
is a skeleton with TODO(E-Planung) gaps, not a compilable program.
Details: Python_Scripts.md §5b.
| Switch | Argument | Default | Effect |
|---|---|---|---|
--json |
NAME |
export_tro.json |
TRO-JSON input (looked up in %SKEL_RESULTS%). |
--out |
NAME |
<source>_FB_Main.scl |
Output SCL filename. |
--start |
TRO |
— | TRO where the REGION order begins. Only needed while the flow is a closed loop without a loading/unloading station (SYSn). |
--templates |
[DIR] |
off | Build REGIONs from the FB templates (lib/scl_templates if DIR is omitted); FB types without a template stay generic. Without it: the previous output, unchanged. See SCL_Templates.md. |
--strict |
— | off | With --templates: exit 1 and write nothing if any FB type of the plant has no template. |
Exit codes: 0 ok (also when TROs without a template were built generically) · 1
input/CLI error, JSON does not match the model, template error, or a missing template
with --strict.
bin\scl_skeleton.bat --json mubea_tro.json
bin\scl_skeleton.bat --json mubea_tro.json --start TRO01
bin\scl_skeleton.bat --json mubea_tro.json --templates
3. End-to-end example
bin\activate_venv.bat
bin\material_flow.bat --file mubea.csv --tosvg --doc
bin\tro_flow.bat --file mubea.csv --tosvg --use-cords --doc --json
bin\scl_skeleton.bat --json mubea_tro.json
REM optional, for a visual check in BricsCAD:
bin\tro_annotate.bat --file mubea.csv --dxf Mubea.dxf --flow --legend
Tests: python -m pytest tests/ (with .venv active).
4. Documentation tooling (not part of the pipeline)
| Command | Purpose |
|---|---|
py doc/TRO_Katalog/tro_graphs/gen_tro_graphs.py |
Regenerates the per-type SVGs, the edge legend and the UH01–UH05 topology graphs for TRO_Katalog.md from doc/TRO_Katalog/connect.ini. No switches, no bin/ wrapper. Needs Graphviz dot. |
The libraries lib/tro_catalog.py, lib/model.py, lib/dxf_registration.py
and lib/tro_overrides.py have no command line of their own.