Wert in AR1 verkleinern

Züttu

Level-1
Beiträge
195
Reaktionspunkte
19
Zuviel Werbung?
-> Hier kostenlos registrieren
ich bin gerade mit indirekter Adressierung beschäftigt und stehe vor einem Problem. Ich müsste den Wert im AR1 verkleinern, ich weiss das ich das mit einer normaler Subtraktion machen kann, dazu muss ich aber alles in den AKKU kopieren und ins Pointer-Format wandeln. Um den Wert zu erhöhen gibt es ja die Funktion:

Code:
L    P#4.0
+AR1
oder einfach mit Offset:
Code:
L    DBD[AR1, P#4.0]

Das sind aber beides Additionen, ich möchte subtrahieren!
 
Ich hab's auch erst nicht geglaubt, aber +AR1 taugt auch zum Subtrahieren. Auszug aus der Simatic Hilfe:

+AR1 (Addiere zu AR1) addiert einen Versatz, der entweder in der Anweisung oder in AKKU1-L angegeben wird, zum Inhalt von AR1. Die Ganzzahl (16 Bit) wird zunächst vorzeichenrichtig auf 24 Bit erweitert und danach zu den niederwertigsten 24 Bit von AR1 (Teil der relativen Adresse in AR1) addiert. Der Teil der Bereichskennung in AR1 (Bits 24, 25 und 26) wird nicht verändert. Die Operation wird ausgeführt, ohne die Statusbits zu berücksichtigen oder zu beeinflussen.

+AR1: Die Ganzzahl (16 Bit), die zum Inhalt von AR1 addiert werden soll, wird durch den Wert in AKKU1-L angegeben. Zulässig sind Werte von -32768 bis +32767.
Den interessanten Aspekt habe ich mal in fett hervorgehoben. Das bedeutet, dass ein entsprechender negativer Pointer zu einer Subtraktion führt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für die schnelle Antwort.

Wie lautet den der Korrekte Syntax?

Wenn ich zum Beispiel AR1 um 6 Byte verkleinern will?

Code:
L    -6
+AR1

oder

L    -P#6.0
+AR1
geht leider beides nicht
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok, Das AR is 32bit groß. Aber ich kann doch eigentlich problemlos eine 16Bit Zahl addieren, oder?

Ehrlich gesagt hab ich schon länger nichtmehr mit S7 zu tun gehabt. Deshalb versuche ich auch durch mitlesen wieder in die Denkweise reinzukommen.^^
 
Zurück
Oben