AWL in SCL umschreiben Verständnisfrage

Korpos

Level-1
Beiträge
41
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich muss einen AWL Code in SCL umschreiben und bin mir unsicher. Könnte jemand sagen ob dies so richtig ist ?
Ich bin mir unsicher ob ich dieses UN #VA am Anfang bei einen anderen Abfragen berücksichtigen muss.


AWL

UN #VA
SPB X
U #VB
O #VC
SPB C
SPA D

SCL


IF NOT #VA
//DO_SOMETHING X
ELSIF #VB | #VC
// DO_SOMETHING C
ELSE
// DO_SOMETHING D
 
Zuletzt bearbeitet:
Vielen Dank euch, mir ging es erstmal nur um den (Aufbau) sage ich mal. Um die Sprünge muss ich mir selber noch eigene Gedanken machen weil ständig von A nach B gesprungen wird. Werde gegeben falls etwas ergänzen :)
 
Da du keine Sprungzielmarken angegeben hast, ...
... kann man leider nicht sehen, wie und insbesondere wo es jeweils nach "DO SOMETHING" weitergehen soll.
In AWL kann man "unstruktriert" programmieren, man muss es aber natürlich nicht.
Wenn Du Glück hast, passt Dein Ansatz. Können wir so nicht beurteilen.
Man kann auch in SCL springen mit GOTO.
Ja, kann man, aber dann werden Sinn und Zweck des Umschreibens in SCL mehr als fraglich.
Als Notlösung für eine HauruckAktion vielleicht so gerade noch vertretbar, aber nicht wirklich wünschenswert.
 
Kann mir jemand sagen was hier genau gemacht wird und vielleicht wieso ? Die Kommentare stammen von mir b.z.w aus der Anweisungsliste AWL von Siemens übernommen. Nur verstehe ich nicht ganz was mit "// Schiebt die Bits in Akku 1 –L eins nach Rechts" gemeint ist. Einfach 1 nach rechts oder Akku 1 - Ladung eins nach Rechts.
Und wie man dies in SCL schreiben würde ?

L 1300 // 010100010100 Lade in Akku 1

L "PRG_GND_DB“.Override // Lade Inhalt von Akku 1 in 2 / Lade Inhalt von Akku 2 in 1 / %DB21.DB2W56

SRW 1 // Schiebt die Bits in Akku 1 –L eins nach Rechts

+I // Akku 1 und Akku 2 addieren

T "Move_Antriebe_DB"."ATS".Control.Pos // Lade und Transferiere
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also hier würde ich sagen:

1. lade 16-Bit Wort 1300
2. lade 16-Bit Wort (z.B.100)
3. schiebe 16-Bit Wort aus 2. 1 Stelle nach rechts --> das bedeutet aus der 100 wird 50, denn ein BIt nach rechts schieben entpricht einer Division durch 2
4. Addiere 1300 + 50
5 Schreibe das Ergebnis in ...Control.Pos
 
... "// Schiebt die Bits in Akku 1 –L eins nach Rechts" gemeint ist. Einfach 1 nach rechts oder Akku 1 - Ladung eins nach Rechts.
Mit dem L hinter Akku1 ist gemeint, dass nur die rechte Hälfte des 32-Bit-Akkus betroffen ist, da ein WortBefehl.
L bezeichnet die niederwertige Hälfte des Akkus (L wie low).
Und wie man dies in SCL schreiben würde ?
Code:
... SHR (IN := xxxx, N : =yy) ; // xxxx: was geschoben wird; yy: um wie viele BitPositionen nach rechts geschoben wird
L "PRG_GND_DB“.Override // Lade Inhalt von Akku 1 in 2 / Lade Inhalt von Akku 2 in 1 / %DB21.DB2W56
Der LadeBefehl kopiert den Inhalt von Akku1 nach Akku2, bevor er den Inhalt des Operanden (von L) nach Akku1 kopiert.
Die Umschreibung laut "Lade Inhalt von Akku 1 in 2 / Lade Inhalt von Akku 2 in 1" ist falsch.
 
Grob vermutet spart man sich in SCL den ganzen Quatsch, indem man bei Bedarf die Datentypen konvertiert und den benötigten Rechenweg in ein kleines Zeilchen schreibt
Das wäre auch mein Weg, nicht versuchen die AWL Zeilen 1:1 in SCL zu übertragen sondern Gedanken machen was für einen Sinn haben die Zeilen und wie kann man es vernünftig, lesbar und sinnvoll in SCL umsetzen.
 
Zurück
Oben