6.6 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project purpose
sps_skel takes a mechanical layout (from project planning/sales) together with an
electrical layout (list of sensors, stoppers, switches, etc.) and generates a skeleton
of Siemens SCL code ("TRO" — Transfer Route Object — blocks for a conveyor/material-flow
control system) that can be imported directly into TIA Portal.
The repository is currently in the design/analysis phase: lib/, tests/, examples/,
and cfg/ are empty scaffolding directories (see "Standard Programm Template" structure
below). No generator code has been written yet. What exists today is:
bin/— environment/venv management scripts (see "Environment scripts" below)data/*.scl— real SCL code extracted from an existing plant ("HundM_Fortna", 5 controllers UH01–UH05), used as reference templates for the planned generatordoc/*.md— analysis documents that reverse-engineer the SCL patterns and propose the JSON schema / code-generation approach
Read doc/ before writing any generator code — it contains the actual domain model this
project is meant to implement.
Environment scripts (bin/)
Every script has a .bat (Windows) and .sh (Linux/macOS) pair. None of them invoke a
concrete Python script — they only manage the environment and virtualenv.
| Script | Purpose |
|---|---|
setenv.bat / source setenv.sh |
Sets SPS_SKEL (project root) and SKEL_BIN/LIB/CFG/DATA/LOG/RESULTS/EXAMPLES/TESTS; prepends SKEL_LIB to PYTHONPATH; creates missing folders |
install_py.bat / install_py.sh |
Calls setenv, creates .venv (py -m venv / python3 -m venv), installs requirements.txt. Aborts with a message if .venv already exists |
activate_venv.bat / activate_venv.sh |
Calls setenv, activates .venv (errors if missing — run install_py first) |
get_cmd.bat / get_cmd.sh |
Calls setenv, opens a new shell with the environment variables set |
Typical workflow on Windows:
bin\install_py.bat # one-time: create venv + pip install
bin\activate_venv.bat # each session: activate venv + show versions
Linux/macOS equivalents must be sourced, not executed:
bash bin/install_py.sh
source bin/activate_venv.sh
Requires Python 3.10+. requirements.txt currently has no real dependencies pinned yet
(placeholders for pydantic, pytest).
There is no build/lint/test command configured yet — tests/ is empty and no test
runner or linter is set up. Once code exists in lib/, use pytest (already anticipated
in requirements.txt) and set PYTHONPATH via bin/setenv first so imports resolve
against lib/.
Domain model (from doc/)
The target system is a Siemens TIA Portal / SCL project for automated conveyor/carrier routing, modeled around TRO (Transfer Route Object) blocks. Key documents, read in this order for onboarding:
doc/Json_Layout-Konzept.md— the core proposal: a JSON file as single source of truth (plc,controlUnits,sensors[],conveyors[],tros[],loadingBooms[],emptyCarrBuffers[],routing,jamAreas[],scanners[],connections[],destinations[]) from which the repetitive, per-topology SCL code inFB_Main,FB_CallSensors,FC_Direction,FC_Call_Jamswould be generated.doc/TRO_Typen.md— catalogs all 10 TRO function-block types actually found across the 5 reference controllers (UH01–UH05) and shows that 9 of them are additive combinations of one base type (1Sep= one separator/stopper) plus reusable sub-blocks (FB_ILS_STRO_Sep,FB_ILS_STRO_Switch,FB_ILS_STRO_Vario,FB_BarcodeReaderCognex,FB_CarrAccumulate1Sep). OnlyLoadingBoomis structurally independent.doc/EA-Listen-Analyse.md— analyzes the raw I/O list Excel exports (*_EA.xlsx/*_TIA.xlsx/*_WSCAD.xlsx) and companion position/cabling JSON exports, and what can vs. cannot be auto-derived from them (signal naming prefixesBG/SF/DI/BPfor inputs,MB/MA/QA/DQ/FC/PFfor outputs; topology/timing/customCode cannot be derived from I/O lists alone — those must come from the JSON model or CAD symbol).doc/BricsCAD_TRO_Symbol.md— proposes a BricsCAD block symbol whose attributes feed the JSONtros[]entries; documents which fields are captured on the symbol vs. derived from drawing topology or type-based timing defaults.doc/SCL_Analyse_Standardisierung.md— cross-controller duplication analysis; identifies ~22 blocks duplicated identically across all 5 controllers (candidates for a shared library) and flags "version chaos" areas (e.g.FB_StockRemovalBLKModul*variants) that should NOT be naively merged.doc/suggestion.md— a follow-up proposal to collapse the 7FB_ILS_MTRO_*variants into a singleFB_ILS_MTROblock driven by an array/config descriptor instead of hand-duplicated numbered members (...1,...2,Dir1..Dir4). References a not-yet-writtenlib/create_skel.py(guess_fbtype()) as the intended generator entry point — this is the planned shape of the generator, not existing code.
Used libraries (referenced but not vendored)
Most FB_ILS_MTRO_* types exist in this repo only as .liblink references to an
external ILSLib library — the actual FB source is not in this Git repo. data/*.scl
contains the real call-site/instantiation code (parametrization in FB_Main) for
those types, not the FB body. Only a few types have local, fully-vendored SCL source
(FB_ILS_MTRO_Vario_workStation, FB_EmptyCarrBuffer, FB_LoadingBoom_INBOUND,
FB_ILS_MTRO_2Sep1Swi — the last one unused/orphaned). Treat data/*.scl as read-only
reference material for pattern extraction, not code to execute or modify.
Standard Programm Template
This project follows the user's standard Python project scaffold convention:
sps_skel/
bin/ environment scripts (see above)
cfg/ config files (INI/JSON) — empty for now
data/ input data, gitignored except the .scl reference templates
doc/ documentation
examples/ example files — empty for now
lib/ Python source — empty for now, this is where the generator belongs
log/ gitignored
results/ gitignored
tests/ unit tests — empty for now
When adding the generator, put it under lib/ (importable via SKEL_LIB on
PYTHONPATH), keep bin/*.bat/*.sh scripts environment-only (do not add
project-specific script invocations to them per the user's convention), and add tests
under tests/.