Nicht Multiinstanzfähig?

ar2 muss dazu, der pointer von ar1 bezieht sich auf den afang des dbs

in ar2 steht quasi der offset des instanzaufrufes...


Code:
      TAR2                              //AR2 in Akku
      UD    DW#16#FFFFFF                //Bereichscodierung ausblenden
      L     P##Datenquelle
      +D    
      LAR1
 
Zuletzt bearbeitet:
na im prinzip nur mein "datenquelle" mit deinem "test" ersetzen.

TAR2 //AR2 in Akku
UD DW#16#FFFFFF //Bereichscodierung ausblenden
L P##TEST
+D
LAR1
L DIW [AR1,P#0.0]
T #ERSTESWORD



deine multiinstanz wird in einem fb mehrfach nacheinander aufgerufen oder befindet sich in der deklaration hinter anderen variablen.

die erste variable die du in deinem mutifb deklariert hast, die hat adresse 0 - zumindest in der deklaration.
aber in wirklichkeit hat sie adresse 1200 oder 236 oder sonst was, je nachdem an welcher stelle die instanz deklariert wurde bzw. wo sie im idb des aufrufenden fb liegt.

der fb ist aber doof und weis das nicht, er geht davon aus das er einen eigenen idb hat und der beginnt logischerweise bei adresse 0.

nun muss dein fb wissen an welcher stelle seine adresse 0 im aufrufenden fb liegt, bzw. wo er im idb des aufrufenden fbs beginnt.

dieser offset wird beim aufruf eines bausteins in ar2 geschrieben.

wenn du diesen wert dazu addierst dann gehts...

nicht vergessen: beide ar im ersten netzwerk in temp variablen sichern und im letzten netzwerk zurückschreiben. spezielle bei der arbeit mit ar2 können böse sachen passieren.
in deinem fall greifst du nur lesend auf ar2 zu, aber wenn du es mal zum schreiben brauchst, zb. zwei pointer gleichzeitig zum umkopieren von daten, dann am besten gleich im anschluss wieder rücksichern.
 
Adressversatz aus AR2 zu AR1 addieren

Hallo
Etwas einfacher geht es mit folgendem Code
Code:
LAR 1 P##Test
TAR2  //Adressoffset in Akku1
+AR1  //Bereichskennung wird nicht verändert
 
Zurück
Oben