DB-Nr vom Instanz-DB bei Anypointern?

Mangokind

Level-1
Beiträge
73
Reaktionspunkte
9
Zuviel Werbung?
-> Hier kostenlos registrieren
Muss man bei S7 Anypointern eine DB-Nummer angeben, wenn man auf ein Objekt in einem Instanz-DB zeigen möchte oder nimmt er den aktuellen wert im DI-register?

was passiert eigentlich, wenn ich als speicherbereich DB statt DI einstelle und den Instanz-DB mit seiner richtigen nummer wie einen DB anspreche?
klappt das?

danke
 
Hallo Mangokind,

Muss man bei S7 Anypointern eine DB-Nummer angeben, wenn man auf ein Objekt in einem Instanz-DB zeigen möchte oder nimmt er den aktuellen wert im DI-register?

Das kann ich nicht mit Sicherheit sagen. Aber ich würde die DI-Nummer und den Speicherbereich sicherheitshalber an den Pointer übergeben.

was passiert eigentlich, wenn ich als speicherbereich DB statt DI einstelle und den Instanz-DB mit seiner richtigen nummer wie einen DB anspreche?
klappt das?

Das funktioniert.

Grüße
Gebs
 
Wir programmieren das so:
Code:
    LAR1  P##E_A_Adresse              // Lade ins AR1 die Adresse des Pointers ( aus der Variablendeklaration des Bausteines )
      TAR2                              // Transferiere AR2 in den AKKU1 !!  ( Im AR2 wird die Adresse der Multiinstanz verwaltet !! )
      +AR1                              // Addiere AR1 und AKKU1 ( Adresse des Pointers im Baustein + Adresse des Bausteins in der Multiinstanz )
      L     D [AR1,P#2.0]               // Lade das Doppelwort aus eben errechneter Adresse des Instanzdbs
      L     DW#16#FFFFFF                // nur die abs. Adresse verwenden
      UD    
      LAR1

wobeo die Variable E_A_Adresse bereits als Imput-Pointer angelegt ist.

Um die Frage zu beantworten:
Du MUSST die DB-Nummer angeben.

hoffe gehholfen haben zu könneb dtsclipper
 
da fällt mir doch gleich noch eine frage ein:

http://support.automation.siemens.c...load=content&csQuery0=block_fc&subtype=130000

Beispiel 3:
[...]
Weitere Anweisungen bezüglich Aufschlagen von Datenbausteinen bei der speicherindirekten Adressierung sind möglich mit AUF DB[DBW <Nr.>] und AUF DB[DIW <Nr.>].

nicht, dass ich das jetz unbedingt wissen müsste, da ich eigentlich immer so wie in deren beispiel2 programmiere, aber mir drängt sich die frage auf, WO das DBW bzw DIW hergenommen wird und was da drin stehen soll

mal angenommen, im DB register steht gerade ne 34 und im DB34.DBW 12 davon steht jetz eine 75

und jetz will ich den DB 75 öffnen bzw die 75 ins DB register laden.

schreibe ich dann
AUF DB[DBW 12]
und der holt sich die 75 aus dem DB34.DBW 12 ?

oder wie ist das zu verstehen?

danke :D
 
Hallo Mangokind,

ganz so funktioniert das nicht. Du musst erst den Inhalt des DBW12 in eine
Temp-Variable transferieren und dann mit dieser den DB öffnen:

Code:
L DB34.DBW 12
T #DB_Nr

AUF DB [#DB_NR]

Grüße
Gebs
 
Zurück
Oben