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:
- Projektkopie anlegen (oder eigenes Test-Projekt mit PLCSIM).
- Quellen importieren und einzeln generieren — Reihenfolge:
DatenOut→MHMOmniSchleuse(Aufrufer von DatenOut);MZylinderundFifoInsind unabhängig. - 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, DBTrolleyDL_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/DeserializemitVARIANT-Parametern.- BR-Bit (
SAVE/JBI/BEC) →ENO := …;bzw. Auswertung von RE_VAL-Bit 7. - Indirekte Aufrufe
UC FC[n]→CASE n OFmit den projektierten FC-Nummern. - 16-Bit-Semantik (
+I,*I) bleibtInt; keine stille Aufweitung auf DInt.
Bekannte, dokumentierte Abweichungen (Kopf der jeweiligen Datei!)
- FifoIn:
INDATENjetztVariant(stattPOINTER); Kopier-Fehler des alten SFC20 werden über eigene Bereichsprüfungen nachgebildet. - DatenOut:
SEARCHDATEN/OUTDATENjetztVariant; 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;Positionwird mit 0 initialisiert (AWL: undefiniert). - MHMOmniSchleuse: Merker-Scratch (MW200-Suchdaten, M220-OutDaten, MB199)
durch lokale Puffer ersetzt; Merker-Schnittstellen zu Fremd-FCs
(MW190–MW198, 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)
- AWL-Original umbenennen (z.B.
DatenOut→DatenOut_AWL), SCL-Baustein generieren. - Test-FC schreiben, der beide mit identischen Eingangsdaten aufruft (getrennte Kopien des Ziel-DB!) und RE_VAL/ENO/DB-Inhalte vergleicht.
- Für
MHMOmniSchleuse: Instanz-DBs beider Varianten nach jedem Zyklus vergleichen (Watch-Tabelle bzw. Vergleichs-FC über die Static-Bereiche).
Werkzeug
lib/stlxml2awl.py (Projektwurzel) wandelt die SimaticML-XML-Exporte
(StatementList) in lesbaren AWL-Text um, inkl. Interface, Netzwerktitel,
Sprungmarken und Kommentaren — Grundlage für die Massenkonvertierung der
restlichen ~230 Bausteine. Aufruf über bin/xmls2awl.bat:
bin\xmls2awl.bat <baustein.xml> [<baustein2.xml> ...] REM einzelne Dateien
bin\xmls2awl.bat --dir <verzeichnis> REM rekursiv alle .xml -> .awl
Je .xml wird die .awl daneben abgelegt. Nicht-Baustein-Exporte (UDTs,
Tag-Tabellen) werden übersprungen. Zusätzlich schätzt das Skript pro Baustein
anhand von Sprung-/Label-Anzahl, registerindirekten Zugriffen und bekannten
Namensmustern eine der drei Aufwandskategorien (A/B/C, siehe oben) und
schreibt ein Log (log/stlxml2awl_<Zeitstempel>.log, mit --log <pfad>
überschreibbar) mit allen Bausteinen der Kategorien B/C sowie Fehlern — das
ist die Priorisierungsliste für die manuelle Nacharbeit.