Zugriff auf Lokaldaten in einem FC/FB

Move

Level-2
Beiträge
510
Reaktionspunkte
58
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Leute,

hatte letzte Woche schon ne Diskussion zu diesem Thema und versuche gerade hier für mich Licht ins Dunkle zu bekommen. Habe im Forum u.a. folgende Lösung gefunden, habe aber Probleme dies zu verstehen :confused:

TAR1 #dTempAR1 //Adressregister retten
TAR2 #dTempAR2

LAR1 P##stTemp //startadrese der quelle in AR1
LAR2 P##wTempOutput //startadresse des ziels in AR2

L W [AR1,P#0.0] //stTemp nach
T W [AR2,P#0.0] //wTempOutput schreiben

LAR1 #dTempAR1
LAR2 #dTempAR2 //Adressregister zurückschreiben

L #wTempOutput //aus dem Temp-Bereich
T #wOutput //auf den Ausgang kopieren

Was ich nicht verstehe:
Wo, wie, warum sind die Variablen #dTempAR1 und #dTempAR2 definiert
Was bringt das zuvor Adressregister retten und zurückschreiben. Stehe irgendwie aufm Schlauch das nachzuvollziehen, liegt sicher auch daran das man dies zu wenig anwendet, hoffe ich:)
 
Was ich nicht verstehe:
Wo, wie, warum sind die Variablen #dTempAR1 und #dTempAR2 definiert
Was bringt das zuvor Adressregister retten und zurückschreiben. Stehe irgendwie aufm Schlauch das nachzuvollziehen, liegt sicher auch daran das man dies zu wenig anwendet, hoffe ich:)

das sind einfach nur DWORD-Temp-variablen zum merken der alten Registerwerte

und das retten der Register ist dann praktisch, wenn du in einem DB mehrfach die gleiche Struktur hintereinander hast und in deinem programm deren bestandteile immer registerindirekt adressierst

(z.b. L W [AR1,P#0.0] )

und dann zwischen diesen indirekten aufrufen noch der programmschnipsel oben reinkommt.

angenommen, dein DB bestünde aus nem Array von UDTs. Die UDTs hätten dann ja immer die gleiche Struktur... wenn du also innerhalb eines UDTs arbeiten willst und deren Struktur kennst, kannst du die die Anfangsadresse des gerade relevanten UDTs ins AR1 laden und von diesem startpunkt aus feste pointer verwenden.

wenn das Array dann auch noch in einem Instanz-DB stünde und deine befehle in nem Multiinstanzierten FB stünden, wäre auch noch das AR2 relevant, weil im AR2 der anfang der Daten dieser instanz stünde

während man das AR1 in der regel einfach neu mit der Anfangsadresse des gewünschten UDTs beschreiben könnte, endet n verändertes AR2 bei multiinstanzen in nem ziemlichen chaos :D
 
Ok,
will heißen, das wenn ich mehrere Eingangsparameter an meinem FC/FB habe und über Adressregister diese ansprechen will, muß ich den gültigen Parameter ins AR laden,auswerten, beschreiben etc. und am Ende wieder zurückschreiben bzw retten um dann die nächste Variable nutzen zu können?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vereinfacht geesagt:

Die ARs werden gerettet um mit ihnen spielen zu können, aber dann wieder in den Ursprungszustand überführt werden zu können. Also das Spielzeug wieder wegräumen.

Wichtig, wie Mangokind gesagt hat, bei Multiinstanzen.
Das AR 2 verwaltt hier nämlich die DB-Adresse, und wenn die verdreht ist bist Du nicht mehr in Deinem I-DB...

Also setzt man halt am Ende seinen Codes die AR wieder zurück.

dtsclipper
 
Ok,
will heißen, das wenn ich mehrere Eingangsparameter an meinem FC/FB habe und über Adressregister diese ansprechen will, muß ich den gültigen Parameter ins AR laden,auswerten, beschreiben etc. und am Ende wieder zurückschreiben bzw retten um dann die nächste Variable nutzen zu können?

Nicht ganz genau.
Am Anfang Deines Codes einmal Retten, dann alles Durchrechnen, dann ARs widerherstellen und Ende

dtsclipper
 
Zurück
Oben