Step 7 LAR1 - Problem mit Adressierung

borromeus

Level-1
Beiträge
2.271
Reaktionspunkte
329
Zuviel Werbung?
-> Hier kostenlos registrieren
Grüß euch,
ich glaube ich werde langsam zu alt, weil ich scheinbar an primitiven Dingen, die immer funzten scheitere.

Lange Rede kurzer Sinn, wieso stehen am Screenhot nicht gleiche Werte bei den Zeilen untereinander (im Akku/Standard):

Code:
L DBB [AR1,P#0.0]                  mit AR1= 26.0
L DIB 26
Da müsste doch der gleiche Werte im Akku sein, warum nicht?
 

Anhänge

  • LAR1.JPG
    LAR1.JPG
    96 KB · Aufrufe: 53
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo borromeus

bitte berichtige mich muss da bei lade vom Pointer nicht nur l b [ar1 p#0.0] anstatt von dbw weil da greifst du ja automatisch auf den letzten aufgeschlagenen dB oder

Gruß tia
 
"L DBB ..." liest aus dem DB, dessen Nummer im DB-Register (DBNO) steht
"L DIB ..." liest aus dem DB, dessen Nummer im DI-Register (DINO) steht

So würde es aus dem selben DB lesen:
Code:
L DIB [AR1,P#0.0]                  mit AR1= 26.0
L DIB 26

Harald
 
OK, gelöst....

Statt:

Code:
L DBB [AR1,P#0.0]
muss es
Code:
L B [AR1,P#0.0]

heissen.
Stimmt so nicht ganz. Das "L B [AR1,..." liest aus dem Speicherbereich, dessen Bereichskennung in AR1 steht. Nur wenn die Bereichskennung im AR1 "DI" ist (ich meine das ist B#16#85), dann entspricht das einem "L DIB..."

Harald
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Stimmt so nicht ganz. Das "L B [AR1,..." liest aus dem Speicherbereich, dessen Bereichskennung in AR1 steht. Nur wenn die Bereichskennung im AR1 "DI" ist (ich meine das ist B#16#85), dann entspricht das einem "L DIB..."

Harald

Hallo Harald,
was für eine Freude!

"Nur wenn die Bereichskennung im AR1 "DI" ist"
Ist sie das nicht automatisch nach einem LAR1 P#Zeit, wenn #Zeit im IN-Bereich des FB's liegt wie oben?
 
"Nur wenn die Bereichskennung im AR1 "DI" ist"
Ist sie das nicht automatisch nach einem LAR1 P#Zeit, wenn #Zeit im IN-Bereich des FB's liegt wie oben?
Hallo borromeus,

Ja, die Bereichskennung in AR1 ist dann "DI". Trotzdem würde ich in dem Fall nicht "L B [AR1,P#0.0]" verwenden. Wenn ich weiß, daß ich auf die FB-Instanz zugreifen will, dann verwende ich "sicherheitshalber" und für bessere Verständlichkeit "L DIB [AR1,P#0.0]".

Noch ein Grund: Ist Dein FB als multiinstanzfähig markiert? Dann muß man korrekterweise noch den Multiinstanz-Offset aus AR2 addieren. Falle: der Offset in AR2 hat die Bereichskennung "DB"! - wenn man da falsch addiert, zeigt das AR1 plötzlich nicht auf den IDB sondern auf einen Global-DB, was zum Glück zunächst der selbe DB ist, doch sobald ein vollqualifizierter DB-Zugriff (L "MyDB".MyVar) oder ein "AUF DB .." auf einen DB <> IDB erfolgt, dann wird das DB-Register verändert und ein nachfolgender bereichsübergreifender registerindirekter Zugriff via AR1 ("L B [AR1,P#0.0]") adressiert nicht mehr die IDB-Lokalvariablen --> mit einem bereichsinternen registerindirekten Zugriff ("L DIB [AR1,P#0.0]") ist man auf der sicheren Seite, der ignoriert die Bereichskennung in AR1 und verwendet das DI-Register.

Um solche registerindirekten Adressierungen detailliert zu verfolgen kann man beim AWL-Beobachten die Spalten "Adressregister 1", "Adressregister 2", "DB-Register 1" (DB-Register) und "DB-Register 2" (DI-Register) einblenden.

Harald
 
Zurück
Oben