Dynamischer Bitzugriff in Datenbaustein

ffutsi

Level-1
Beiträge
23
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Ich habe ein Problem und zwar habe ich einen globalen Datenbaustein mit einem Dword. Ich möchte, durch einen Int Parameter, auf die einzelnen Bits dieses Dwords zugreifen. Zum Beispiel wenn der Int wert 5 beträgt auf DB1.DBX0.4 bei 7 auf DB1.DBX1.0 . Ist so etwas in Step 7 mit AWL möglich?

Danke für die Hilfe
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da sehe ich keine grossen Probleme,

Den Parameter ins Adressregister und damit auf das Bit.

Aber Achtung: In Deinem Beispiel wäre dann DBX0.0 der Parameter 1.

Wenn dem so sein soll, dann musst Du den Parameter = 0 abfangen und den Parameter um 1 dekrementieren.
 
Wieso kompliziert wenn es einfach auch geht. Danke für den Tipp. Ich hab die ganze Zeit mit Pointern usw. probiert :p
 
Hallo ffutsi,

das ist möglich, wenn Du Dich hier vertippt hast:
Zum Beispiel wenn der Int wert 5 beträgt auf DB1.DBX0.4 bei 7 auf DB1.DBX1.0
Ich hoffe Du meinst bei Int = 7 DBX0.7 und Int = 8 DBX 1.0.

Stichwort => indirekte Adressierung
Code:
AUF DB 1
L     P#0.0
L    #INT
+D
LAR1

U    DBX[AR1,p#0.0]

Grüße
Gebs
 
Find grad keine sinnvolles Bsp.
DBX_Byte : INT;
DBX_Bit : INT;
Offset : DWORD;

Aber so ginge es:
L DBX_Byte
SLD 3 (PointerFormat!)
L DBX_Bit
OW (Hier hast du den Offset, den du dann gerne hättest)
LAR1 (Alternative 1)
T Offset (Alternative 2)
AUF DB_Quelle
U DBX[AR1, P#0.0] (Alternative 1)
U DBX[Offset] (Alternative 2)

Sollte so hinhauen.

BG vuli
 
Hallo ffutsi,

das ist möglich, wenn Du Dich hier vertippt hast:

Ich hoffe Du meinst bei Int = 7 DBX0.7 und Int = 8 DBX 1.0.

Stichwort => indirekte Adressierung
Code:
AUF DB 1
L     P#0.0
L    #INT
+D
LAR1

U    DBX[AR1,p#0.0]

Grüße
Gebs

Ich habe deine Variante jetzt ausprobiert.
Wenn ich das DWord auf 2#0000_0000_0000_0000_0000_0000_0000_0001 setze und den Integer Parameter auf 0 müsste das abfragen theoretisch 1 ergeben. Bleibt aber auf null! ?!?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe deine Variante jetzt ausprobiert.
Wenn ich das DWord auf 2#0000_0000_0000_0000_0000_0000_0000_0001 setze und den Integer Parameter auf 0 müsste das abfragen theoretisch 1 ergeben. Bleibt aber auf null! ?!?
Das liegt an der byteweisen Adressierung in S7.
Du müsstest den Int auf 24 setzen um eine 1 zu bekommen.

Grüße
Gebs
 
Wenn Du die Bits von ganz links = 0 nach ganz rechts = 31 durchnummerierst geht es so:
Code:
L  #Int
L  #DWORD
SLD

SLD1
SPP EIN
L  0
SPA TRAN
EIN: L 1
TRAN: T  #Bitzustand

Grüße
Gebs
 
Wieso klappt das immer noch nicht?
Habe es jetzt so wie oben beschrieben gemacht aber der Bitzustand ändert sich nicht

Code:
L #int
L "RECV_DATA".Data
SLD 
SLD 1
SPP EIN
L 0
SPA TRAN
EIN: L 1
TRAN: T #int2
 
Zurück
Oben