registerindirekte Adressierung

A

Anonymous

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

habe in einem Programm folgende Stelle:

L P##E_Var
LAR1
L D[AR1,P#6.0]

Die Variable E_Var ist vom Typ ANY und zeigt auf den E0.0.

Meine Frage lautet:
Was lade ich mit dem Befehl L D[AR1,P#6.0] in den Akku 1??

Vielleicht kann mir irgend jemand Helfen? Danke!

MFG
 
Beispiel: #E_Var ist P#DB10.DBX12.5 BOOL 27. Dies bedeutet: Zeiger auf 27 Bits (BOOL) in DB 10 ab Adresse DBX12.5

ANY-Aufbau
1 BYTE 0x10 (S7) (Offset 0.0)
1 BYTE Datentyp BOOL (1) (Offset 1.0)
1 WORT Wiederholungsfaktor (27) (Offset 2.0)
1 WORT DB-Nummer (10) (Offset 4.0)
1 DWORT Bereichsübergreifender Zeiger (P#DBX12.5) (Offset 6.0)

eigentliche Antwort:
L D[AR1,P#6.0] lädt den bereichsübergreifenden Zeiger (P#DBX12.5 an Offset 6.0) auf den adressierten Bereich in AKKU1.

ABER: vor dem Zugriff mit dem geladenen Zeiger den entsprechenden DB aufmachen sonst wird die SPS böse :!: und rot. Dies geschieht z.B mit

Code:
L W[AR1,P#4.0]
T LW<ein freies Lokaldatenwort>
AUF DB[LW<...>]

Wenn der ANY-Zeiger nicht auf einen Datenbereich zeigt, dann steht bei der DB-Nummer 0, es passiert also kein Fehler. Vorausgesetzt, der ANY-Zeiger wurde von jemandem erzeugt, der weiß wie's sein soll.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

danke für die Antwort. Demnach müsste ich in folgendem Beispiel das ED6 in meinen Akku 1 laden? Stimmt das?

L P##E_Var
LAR1
L D[AR1,P#6.0]

Die Variable E_Var ist vom Typ ANY und zeigt auf den E0.0.

MFG
 
Anonymous schrieb:
Demnach müsste ich in folgendem Beispiel das ED6 in meinen Akku 1 laden? Stimmt das?

L P##E_Var
LAR1
L D[AR1,P#6.0]

Die Variable E_Var ist vom Typ ANY und zeigt auf den E0.0.
Es wird ED 0 geladen. Der Offset 6 ist notwendig um auf den Zeiger in der Any-Struktur zuzugreifen (s.o. Strukturaufbau).
Code:
L P##E_Var 
LAR1
AR1 zeigt auf Any-Struktur
P#6.0 ergibt den Offset
Code:
L D[AR1,P#6.0]
lädt somit das Doppelwort auf das der Zeiger in der Any-Struktur zeigt (blöde Formulierung).
 
Zurück
Oben