erste Fassung eines Python Skripts zur Skeleton Erzeugung über ein json Zwischenformat geschrieben
This commit is contained in:
@@ -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 |
|
||||
| --- | --- |
|
||||
|
||||
@@ -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 |
|
||||
|
||||
Reference in New Issue
Block a user