Step 7 Siemens Step7 - AWL - Text --Frage zu SLW3

Peter.0202

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich hab von meinem Ausbilder einen Programmteil bekommen, dessen Funktion ich erklären soll.
Hier mal ein Ausschnitt:


L DB15.DBW12
L 50
*I
L 12
+I
SLW 3
T #Last Pos

L #Last Pos
L P#2.0
+I
T #LastWidth

L #RollPCS
L 12
>I
SPB END

Also mit SLW 3 wird das Wort um drei Bit Stellen nach links verschoben und mit Nullen aufgefüllt.

Ich hab zwar verstanden, was hier geschieht, aber ich verstehe nicht warum das geschieht.

Welche Funktion hat den das verschieben des Wortes um drei Stellen nach Links in meinen Programm?
Dieser Befehl wird hier auch öfters wiederholt.

Kann mir das bitte jemand erklären?
 
Hallo,
ich hab von meinem Ausbilder einen Programmteil bekommen, dessen Funktion ich erklären soll.
Hier mal ein Ausschnitt:


L DB15.DBW12
L 50
*I
L 12
+I
SLW 3
T #Last Pos

L #Last Pos
L P#2.0
+I
T #LastWidth

L #RollPCS
L 12
>I
SPB END

Also mit SLW 3 wird das Wort um drei Bit Stellen nach links verschoben und mit Nullen aufgefüllt.

Ich hab zwar verstanden, was hier geschieht, aber ich verstehe nicht warum das geschieht.

Welche Funktion hat den das verschieben des Wortes um drei Stellen nach Links in meinen Programm?
Dieser Befehl wird hier auch öfters wiederholt.

Kann mir das bitte jemand erklären?

Damit wird der vorher errechnet INT-Wert in das sogenannte Pointerformat überführt.
Das Pointerformat adressiert Bits, die letzten drei Stellen im Pointerformat sind diese 3 Bits.

Wenn man per Adressregister (was man in deinem Code nicht sieht, aber wegen dem L P#2.0 erahnen kann :) ) auf eine Speicherstelle zugreifen und man will z.Bsp. Byte 50 in einem DB ansprechen, dann muß man in das Adressregister ein P#50.0 hineinladen.

Aus INT 50 wird also P#50.0 durch das SLW 3.

Aber Achtung das Pointerformat ist DWord, also 4 Byte.
Sollte der DB sehr groß sein, funktioniert euer Code nicht mehr, da dann auch links Bits herausgeschoben werden.

16000 Int = 11111010000000 bin, das sind 14 Stellen, drei nach links und 1 Bit fällt raus.

Daher ist es immer besser, gleich mit DWORD und SLD 3 zu rechnen.




PS: Insofern ist

L #Last Pos
L P#2.0
+I
T #LastWidth

nicht korrekt!!!
 
Zuletzt bearbeitet:
SLW 3 entspricht einer Multiplikation mit 8 und wird benötigt, um eine Bitadresse Adresse.0 zu berechnen, die bei indirekten Adressierungen verwendet wird.

Angenommen in DB15.DBW12 steht eine 1:
(DB15.DBW12 *50 + 12) * 8 = (1 *50 + 12) * 8 = 62 * 8 = P#62.0

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie du an Hand der Kommentare siehst, kann dein Ausbilder hier noch was lernen :ROFLMAO:
Noch ein kleiner Tipp am Rande:

Wenn Variablen im Pointerformat sind, dass ist es auch nicht schlecht, diese kenntlich zu machen.
Ich stelle immer ein ein "p" vorne dran.
Also "#pLast_Pos" und "#pLast_Width".

Gruß
Dieter
 
Zurück
Oben