erste Fassung eines Python Skripts zur Skeleton Erzeugung über ein json Zwischenformat geschrieben

This commit is contained in:
2026-07-06 17:44:03 +02:00
parent fed13fa077
commit 48ec3abdba
16 changed files with 102180 additions and 8 deletions
+3 -3
View File
@@ -1,8 +1,8 @@
# Analyse der Ein-/Ausgabelisten (doc/Eingaben)
# Analyse der Ein-/Ausgabelisten (data/Eingaben)
## Kontext
In `doc/Eingaben/` liegen je Steuerung (ILS-1 bis ILS-5, entspricht UH01-UH05) drei Excel-Dateien mit denselben E/A-Punkten in drei Sichten:
In `data/Eingaben/` liegen je Steuerung (ILS-1 bis ILS-5, entspricht UH01-UH05) drei Excel-Dateien mit denselben E/A-Punkten in drei Sichten:
| Datei | Inhalt |
| --- | --- |
@@ -87,7 +87,7 @@ Die Listen enthalten eine durchgaengige **Anlagenhierarchie**, die im aktuellen
## Verwendung von Positionen
Zusaetzlich zu den Excel-Listen liegen in `doc/Eingaben/` vier JSON-Dateien mit Positions- und Verkabelungsdaten, offenbar Exporte eines WSCAD/CAD-Auswertungstools:
Zusaetzlich zu den Excel-Listen liegen in `data/Eingaben/` vier JSON-Dateien mit Positions- und Verkabelungsdaten, offenbar Exporte eines WSCAD/CAD-Auswertungstools:
| Datei | Inhalt |
| --- | --- |
+94
View File
@@ -1092,6 +1092,100 @@ flowchart LR
---
### 14. Erweiterungen aus der E/A-Listen- und Positionsdaten-Analyse
Die Analyse der Eingabelisten in `data/Eingaben/` (siehe [EA-Listen-Analyse.md](EA-Listen-Analyse.md)) hat gezeigt, dass grosse Teile des JSON automatisch aus den Projektierungsdaten befuellbar sind. Dafuer werden folgende Schema-Erweiterungen eingefuehrt:
#### 14.1 Feld `unit` je TRO/Conveyor (Schluessel zur E/A-Liste)
Jede TRO-/Conveyor-Instanz erhaelt die Foerdertechnik-Einheit (M-Nummer) als expliziten Schluessel. Die M-Nummern stehen in den Kommentaren der E/A-Listen und identisch in den REGION-Namen des SCL-Codes:
```json
{
"id": "TRO115",
"unit": "M4104",
"unitKind": "CV",
"type": "Vario",
"pos": { "x": 341906, "y": 164862 },
"cabinet": "UC1101"
}
```
| Feld | Quelle | Bedeutung |
|---|---|---|
| `unit` | Kommentar E/A-Liste (`(ILS-CV M4104)`) | M-Nummer der mechanischen Einheit |
| `unitKind` | dito | `KR` = Kreisel/Carousel, `CV` = Conveyor, `K` = Kreisel-Einfahrt |
| `pos` | `..._positions.json` -> `sensors[<BMK>@<SPS>].pos` | x/y-Lage in mm (Referenzsensor der Einheit) |
| `cabinet` | `..._positions.json` -> `mappings` | Verteiler/Schaltschrank aus der realen Verkabelung |
#### 14.2 Gruppierungsebene `areas`
Neue Top-Level-Ebene, die TROs/Conveyors zu den in den Listen gefundenen Bereichsgruppen buendelt:
```json
"areas": [
{
"id": "Block 1.1.1",
"kind": "pinStoreBlock",
"members": ["TRO208", "TRO209", "TRO210"],
"ucStations": ["UC2101"],
"safetyZone": "UZ0201",
"storageDb": "DB_Storage1.1.1",
"lines": 8
},
{
"id": "LS1",
"kind": "loadingStation",
"members": ["TRO103", "TRO104", "TRO105", "TRO106", "LoadingBoom1"],
"safetyZone": "UZ0110"
},
{
"id": "WS1.1",
"kind": "workStation",
"members": ["TRO421"]
}
]
```
Gefundene `kind`-Werte: `pinStoreBlock` (Block x.y.z, UH02/UH03), `loadingStation` (LS 1/2, UH01), `workStation` (WS x.y, UH04/UH05), `safetyZone` (UZ0x0y), `ucStation` (Feldstation/Verteiler).
#### 14.3 Rollenklassifikation ueber das `VERW`-Vokabular
Die Positions-JSONs (`..._positions.json`) enthalten je Signal das Feld `VERW` — ein kontrolliertes Vokabular, das zuverlaessiger ist als das Parsen der freien Kommentartexte:
| `VERW`-Wert | Rolle im JSON | Hinweis auf FB-Typ |
|---|---|---|
| `In sep` | `separator.sensorInSep` | — |
| `Sep` | `outputs.stopper*` (MB-Ausgang) | — |
| `Jam detector` / `Jam detector (LP)` | `sensorJam*` | — |
| `ES branch` | `outputs.sw*ExTo*` (Weichenausgang) | `1SepNSwi` |
| `conveyor full` | `vario.sensors.jam` / Puffer voll | `Vario` |
| `MT in Position` | `vario.sensors.carrInPos` | `Vario` |
| `Finger in position` | `vario.sensors.finger` | `Vario` |
| `PIN query` | PinStore-Abfrage | `PinStore_Auto` |
| `Sync P1`..`P4` | Synchronisationspunkte | PinStore/Vario-Sonderform |
| `Rad dreht` | LoadingBoom Rad-Sensor | LoadingBoom |
Heuristik fuer den FB-Typ je Einheit: `ES branch` vorhanden -> Weiche; `Finger`/`MT in Position`/`conveyor full` -> `Vario`; `PIN query` -> `PinStore_Auto`; Anzahl `In sep` (1/2) -> `1Sep`/`2Sep`; nur FC/MA-Paar ohne Separator -> `FB_Conveyor`.
#### 14.4 Quellen-Uebersicht
| Datenquelle | Liefert |
|---|---|
| `..._TIA.xlsx` "PLC Tags" | BMK-Name, Datentyp, `%E/%A`-Adresse, Kommentar -> `sensors[]`, `outputs` |
| `..._TIA.xlsx` "Constants" | `cIn...`-Indexkonstanten -> Konstanten-Tabelle, `sensors[].constant` |
| `..._WSCAD.xlsx` "Bezug" | Ortskennzeichen `=A01+UCxxxx-KF1DIx` -> Karten-/Stationszuordnung |
| `..._positions.json` | `pos` (x/y), `VERW` (Rolle), `mappings` (Signal->Verteiler), `distributors` (Verteiler-Position) |
| `..._todraw.json` | Kabelwege und -laengen (Doku/BOM, nicht SPS-relevant) |
Nicht aus den Listen ableitbar bleiben: Timings, Priority-Manager, Release-Ausdruecke, Scanner-Zuordnung (BX = PROFINET), `customCode` und die Verkettungsrichtung der Topologie (`connections`/`destinations`). Die Positionen dienen dabei als Plausibilitaets-Check der Topologie (kurze Abstaende = wahrscheinliche Nachbarn) und fuer massstabsgetreue Lageplaene.
#### 14.5 Skeleton-Generator
Das Skript [lib/create_skel.py](../lib/create_skel.py) (Aufruf ueber `bin\create_skel.bat`) liest die Eingabelisten und erzeugt je Steuerung ein Skeleton der JSON-Zwischendatei (`results/skeleton_UH0x.json`) sowie ein SCL-Grundgeruest. Die SCL-Aufruf-Templates sind als globale Definitionen im Skript hinterlegt und koennen spaeter in eine `.cfg` ausgelagert werden.
---
## Welche SCL-Bausteine werden daraus generiert?
| Ziel-Baustein | Generiert aus JSON-Abschnitt |