erste Fassung der Konvertierung der xml Dateien in .scl Code aus dem Projekt von Andi Emmert

This commit is contained in:
2026-07-07 15:10:47 +02:00
commit e61cd2319a
796 changed files with 1101171 additions and 0 deletions
+91
View File
@@ -0,0 +1,91 @@
# SCL-Export — AWL→SCL-Pilotkonvertierung
Pilotbausteine der AWL→SCL-Konvertierung, bereit zum Test in TIA Portal V20.
Je Station ein Ordner; die Dateien sind **externe Quellen** (Import über
*Externe Quellen → Quelle hinzufügen → Bausteine aus Quelle generieren*).
## Inhalt
| Baustein | Original | Kategorie | Datei |
|---|---|---|---|
| MZylinder | FB 92, AWL, 11 Netzwerke | A — Verknüpfungslogik | `MZylinder.scl` |
| FifoIn | FC 80, AWL, Pointer/BLKMOV | C — Pointerzugriffe | `FifoIn.scl` |
| DatenOut | FC 86, AWL, Pointer/indirekte Aufrufe | C — Pointerzugriffe | `DatenOut.scl` |
| MHMOmniSchleuse | FB 1274, AWL, Schrittkette 52 NW | B — Ablaufsteuerung | `MHMOmniSchleuse.scl` |
Die Bausteine sind zwischen UH06 und UH07 identisch (FifoIn: nur Kommentare
verschieden) — **Ausnahme `MHMOmniSchleuse`**: die CASE-Verteiler für die
indirekten FC-Aufrufe (Leser-/Ziel-/Draussen-FC) enthalten die
stationsspezifischen FC-Nummern:
- UH06: 181/1181/2181 (Ziel), 1180 (Leser), 1182 (Draussen)
- UH07: 181..6181 (Ziel), 180..6180 (Leser), 182..6182 (Draussen)
## WICHTIG: Nicht direkt ins Produktivprojekt!
`DatenOut` und `FifoIn` haben geänderte Schnittstellen
(`POINTER`/`ANY``VARIANT`, S7-1500-konform). Die **bestehenden
AWL-Aufrufer** übergeben `P#M...`-Pointer und kompilieren nach dem Ersetzen
u.U. nicht mehr, bis sie angepasst sind. Daher:
1. **Projektkopie** anlegen (oder eigenes Test-Projekt mit PLCSIM).
2. Quellen importieren und **einzeln generieren** — Reihenfolge:
`DatenOut``MHMOmniSchleuse` (Aufrufer von DatenOut); `MZylinder` und
`FifoIn` sind unabhängig.
3. Kompilieren; Fehlerliste prüfen (erwartbar: Aufrufer von DatenOut/FifoIn,
die noch AWL-Pointer übergeben).
`MZylinder` ist schnittstellengleich und kann den AWL-Baustein direkt
ersetzen (Aufrufer und Instanz-DBs bleiben gültig, neu übersetzen genügt).
## Voraussetzungen (im Projekt bereits vorhanden)
- UDTs: `UZylinder`, `UDLHMOmniSchleuse`, `USk_ILS`, `UErrHMOmniSchleuse`, `UTrolley`
- Bausteine: `TEST_DB_TO_ATTR_DB` (SCL), `BCD (4stellig)_to_INT`,
`Wandel_FC_für_DB1000`, `Trolley_DL_Neue_Pos`, die Leser-/Ziel-/Draussen-FCs,
DB `TrolleyDL_OutDaten` (DB1011)
- PLC-Variablen: `MW2`, `MW4`, `100ms-Impuls`, `1s-Impuls`, `MW200`,
`M200.0..M201.7`, `MW190..MW198`, `MD182`, `MD192`, `M180.x`, `M199.0`,
`MW248..MW254`
- Nicht-optimierte DBs (Standard-Zugriff) — die Bausteine arbeiten mit
PEEK/POKE auf absolute Byte-Offsets, Layouts unverändert.
## Umsetzungs-Konventionen (gelten auch für die Massenkonvertierung)
- AWL-Netzwerke → `REGION NW<x>: <Titel>`; Sprünge → `IF`/`CASE`/`GOTO`
(GOTO nur für die gemeinsamen Fehler-/Verwaltungs-Enden, wie im AWL).
- `OPN DB[n]` + `DBW[AR1,..]``PEEK/POKE (area:=16#84, dbNumber:=…, byteOffset:=…)`.
- `BLKMOV` über ANY-Pointer → `Serialize`/`Deserialize` mit `VARIANT`-Parametern.
- BR-Bit (`SAVE`/`JBI`/`BEC`) → `ENO := …;` bzw. Auswertung von RE_VAL-Bit 7.
- Indirekte Aufrufe `UC FC[n]``CASE n OF` mit den projektierten FC-Nummern.
- 16-Bit-Semantik (`+I`, `*I`) bleibt `Int`; keine stille Aufweitung auf DInt.
## Bekannte, dokumentierte Abweichungen (Kopf der jeweiligen Datei!)
- **FifoIn**: `INDATEN` jetzt `Variant` (statt `POINTER`); Kopier-Fehler des
alten SFC20 werden über eigene Bereichsprüfungen nachgebildet.
- **DatenOut**: `SEARCHDATEN`/`OUTDATEN` jetzt `Variant`; die DB-Prüfungen des
Such-/Out-DB (AWL NW5/NW8) entfallen (Fehlerbit 5 wird nicht mehr erzeugt);
`OUTDATEN`-Ziel sollte exakt Datensatzlänge×2 Bytes groß sein;
`Position` wird mit 0 initialisiert (AWL: undefiniert).
- **MHMOmniSchleuse**: Merker-Scratch (MW200-Suchdaten, M220-OutDaten, MB199)
durch lokale Puffer ersetzt; Merker-Schnittstellen zu Fremd-FCs
(MW190MW198, MD182/192, M180.x, Fehlerwort MW200/M200.x/M201.x) bleiben.
NW21 war im Original tot (CLR+JU) und entfällt. In Schritt 10 („NoLesung")
verglich das AWL gegen einen **undefinierten Akku-Altwert** — umgesetzt ist
die beabsichtigte Prüfung `TrolleyID_Input <> 0`. **Bei IBN prüfen!**
## Empfohlener Vergleichstest (PLCSIM)
1. AWL-Original umbenennen (z.B. `DatenOut``DatenOut_AWL`), SCL-Baustein
generieren.
2. Test-FC schreiben, der beide mit identischen Eingangsdaten aufruft
(getrennte Kopien des Ziel-DB!) und RE_VAL/ENO/DB-Inhalte vergleicht.
3. Für `MHMOmniSchleuse`: Instanz-DBs beider Varianten nach jedem Zyklus
vergleichen (Watch-Tabelle bzw. Vergleichs-FC über die Static-Bereiche).
## Werkzeug
`tools/stlxml2awl.py` wandelt die SimaticML-XML-Exporte (`StatementList`) in
lesbaren AWL-Text um (`python stlxml2awl.py <baustein.xml>`), inkl. Interface,
Netzwerktitel, Sprungmarken und Kommentaren — Grundlage für die
Massenkonvertierung der restlichen ~230 Bausteine.