Step 7 Variabler Address-Pointer

Studiologe

Level-1
Beiträge
57
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
ich habe eine schnelle Frage zum Address-Pointer.
Und zwar versuche ich die Bit-Byte Adresse variable zu gestalten.

Im Angehaengten Screenshot kann man erkennen, dass ich meinen FC mit Folgenden Parametern aufrufe:
#Area_DB
#Sel_Type

wie kann ich jetzt die Variable in meinen Address-Pointer reinknueppeln?

Ich moechte quasi
U DBX [AR1,P#1.0] // 1.0 soll durch #Sel_Type ersetzt werden
= M 399.0

Also so
U DBX [AR1,P#Sel_Type]
= M 399.0



Danke fuer jegliche Ratschlaege.

Studi :)



pointer.PNG
 
Ich denke, dass du nach SLW 3 die Bitadresse reinmaskieren musst. Oder anstatt L P#DBX0.0 gleich L P#DBX0.[0..7]. Habs allerdings nicht getestet, weiss nicht, ob der Editor das frisst
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
den DB kannst du mit 2 Methoden aufrufen :
1. dein Area_DB ist vom Variablen-Typ Block_DB, dann mit "AUF #Area_DB"
2. dein Area_DB ist vom Typ Word, dann mit "AUF DB [#Area_DB]"

Das Pointer-Offset in deinem Anwendungsfall ist immer eine Konstante. Daran kannst du also nichts machen.
Allerdings bildet sich ein Pointer IMMER als Bit-Adresse - wenn du die also die Bit-Adresse deiner Speicherstelle ausrechnest dann kannst du sie direkt ins AR1 laden und damit indexieren ("U DBX [AR1,P#0.0]").
Die Bit-Adresse errechnet sich aus Byte-Nummer*8+Bitnummer - das Ergebnis ist idealerweise ein DWORD.

Gruß
Larry
 
Hallo zusammen,
vielen Dank schon einmal fuer die Antworten.
Ich habe meinen DB so strukturiert, dass ich alle 12 Bytes einen unterschiedlichen Bereich abdecke.
#Area_DB
Byte 12-23 = Bereich 1
Byte 24-35 = Bereich 2
....
....

Aus jedem Bereich habe ich Zugriff auf ein und daselbe Ausgangs-Byte.
Daher muss ich in meinen FC303 8 mal den Address-Pointer anpassen, damit ich jedes einzelne Bit in dem Ausgangs-Byte verknueppeln kann.

Momentan verstehe ich allerdings nicht, wie ich das variable gestalten kann
bei einem Durchlauf muss ich es folgendermassen addressieren:
U DBX [AR1,P#A.Z] und ich moechte den Teil A.Z beim naechsten Durchlauf (via #Sel_Type) auf U DBX [AR1,P#A.Y] aendern.

Also kann ich das so nicht machen, da wie Larry schon sagt, das Pointer Offset immer Konstant ist?

Danke Leute!
 
Hallo,
wie ich schon geschrieben habe ...
Wenn ich mich aber Recht erinnere (ist ja noch nicht so lange her) habe ich dir auch die Alternative genannt, wie es z.B. gehen würde.

Du mußt aber nicht den Adress-Pointer 8 mal neu "verknüppeln".
Den berechnest du auf die Start-Adresse des jeweiligen Bytes (wie beschrieben) und lädst diesen Wert in das AR1.
Nun kannst du das Bit 0 des Byte mit U DBX[AR1,p#0.0], das nächste mit U DBX[AR1,p#0.1] etc. ansprechen.
Wie schon beschrieben ist der Pointer-Offset an dieser Stelle eine Konstante ...

Gruß
Larry
 
Zurück
Oben