# AWL in SCL umschreiben  Verständnisfrage



## Korpos (10 November 2021)

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


----------



## DeltaMikeAir (10 November 2021)

Korpos schrieb:


> UN #VA
> SPB X
> U #VB
> O #VC
> ...


Da du keine Sprungzielmarken angegeben hast, wie soll man das so genau sagen, was in deinem AWL Code genau passiert?

Kopiere doch mal dein AWL Netzwerk hier rein


----------



## Ralle (10 November 2021)

Ich denke das stimmt so in der Umsetzung,


----------



## Korpos (10 November 2021)

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


----------



## Ludewig (10 November 2021)

Man kann auch in SCL springen mit GOTO.


----------



## Korpos (10 November 2021)

Ist mir bekannt  Der Prof. früher hat uns aber nahe gelegt dies nicht zu verwenden falls nicht unbedingt nötig. Habe hier auch schon Diskussionen drüber gelesen


----------



## Heinileini (10 November 2021)

DeltaMikeAir schrieb:


> 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.


Ludewig schrieb:


> 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.


----------



## Ludewig (10 November 2021)

Als schnelle 1:1-Notlösung wars auch gedacht.


----------



## DeltaMikeAir (10 November 2021)

Ludewig schrieb:


> Als schnelle 1:1-Notlösung wars auch gedacht.


Nur meistens bleiben die schnellen 1:1 Notlösungen wenn sie erst einmal funktionieren für immer drin.....


----------



## Heinileini (10 November 2021)

DeltaMikeAir schrieb:


> Nur meistens bleiben die schnellen 1:1 Notlösungen wenn sie erst einmal funktionieren für immer drin.....


..., denn nichts ist so beständig, wie ein Provisorium!


----------



## Korpos (10 November 2021)

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


----------



## Ralle (10 November 2021)

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


----------



## Korpos (10 November 2021)

Vielen Dank


----------



## Heinileini (10 November 2021)

Korpos schrieb:


> ... "// 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).


Korpos schrieb:


> Und wie man dies in SCL schreiben würde ?




```
... SHR (IN := xxxx, N : =yy) ; // xxxx: was geschoben wird; yy: um wie viele BitPositionen nach rechts geschoben wird
```



Korpos schrieb:


> 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.


----------



## Ludewig (10 November 2021)

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


----------



## DeltaMikeAir (10 November 2021)

Ludewig schrieb:


> 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.


----------

