Adressberechnung +AR2

Zuviel Werbung?
-> Hier kostenlos registrieren
Jo, das ist wahr, dann ist es aber auch unnötig, das AR2 überhaupt erst mit einer "Grundadresse" zu laden. Das kann man dann gleich als "Offset" z.Bsp. in die Integer-Rechnung mit reinnehmen.
Ich halte es grundsätzlich so dass ich den Pointer/ANY als Bausteinparameter übernehme. Ich berechne also nichts, bis ggf. auf einen Offset, wie in desem Fall.

Im konkreten Fall habe ich eine DB mit 67 Datensätzen a 100Byte. Ich übergebe´den ANY des ersten Datensatzes and die FC, somit habe ich auch die Länge eines Datensatzes. Anhand eines INT-Parmetres "NR" [1..67] wähle ich den gewünschten Datensatz und kopiere ihn in einen anderen Datenbereich (ebenfalls ein ANY als Input). Ich muss also keine Adressen berechnen, sondern nur einen Offset anhand der Datensatznummer.

Gruß, Onkel
 
Zuletzt bearbeitet:
Aehnlich

Hallo Dagobert,


ich habe dass bei mir ähnlich gelöst.

War allerdings ein FB.



L #IStellplatznummer
L 100
*I
ITD
SLD 3
T #TZeigerSchnittstelle


Im nächsten Netzwerk greife ich dann allerdings über das AR1 darauf zu.

LAR1 #TZeigerSchnittstelle
L #TReal2
T DBD [AR1,P#14.0]
L #TReal3
T DBD [AR1,P#18.0]

Funktioniert so weit wunderbar.

Meine maximale Stellplatznummer beträgt 34.
Meine Nutzbytes sind je Stellplatz 100 Byte groß.
#TZeigerSchnittstelle ist als temporäre Variable vom Typ DWord deklariert.


Mit freundlichen Grüßen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
+ar2

Beschreibung

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

+AR2: Die Ganzzahl (16 Bit), die zum Inhalt von AR2 addiert werden soll, wird durch den Wert in AKKU1-L angegeben. Zulässig sind Werte von -32768 bis +32767.



Die 51200 stellen im 16bit-Format eine negative Zahl dar, die dann von dem Befehl (+AR2) in eine negative 24bit-Zahl umgewandelt werden und dann addiert.
 
Ausprobiert

Hallo zusammen,


habe das alles mal an einer 315 nachgestellt.

Sieht so weit sehr gut aus.

L P#20.0
LAR2

oder auch

LAR2 P#20.0

Die Zeilen darüber sind nur um zu zeigen, daß auch Dein Offset mit berechnet werden kann.

L 64
L 1000
*I
SLD 3

Der Trick ist wohl, daß man sich das AR2 Register erst in den Akku holt und dann verrechnet.

TAR2
+D
LAR2

Ich hoffe er hilft bei der Lösung deines Problems.
 
Zurück
Oben