DB-Nummer und Offset aus Symbol auslesen

Das geht so nicht, die CPU kennt keine Symbolik. Einen @-operator gibt es auch nicht in S7. Das einzige was vielleicht noch etwas helfen könnte ist SFC 24. Mehr fällt mir dazu auch nicht ein (hatte vor längerem mal eine ähnliche Frage hier gestellt.) Gruss k.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen

Ich möchte aus einem Symbol (z.B. db_hmi_data.zeitbereich1) die DB nummer und den Offset auslesen. Wie zum Geier bringe ich dies zu stande???
Wann und wo soll dies geschehen? Im AWL-Code lautet der Zugriff ja DBxx.DBByy (präziser Auf DBxx, L DBByy). In der SPS gibt es keine Symbole.
 
... naja, wenn du die Variable z.B. über einen ANY-Pointer übergibst, dann erhält / enthält dieser schlußendlich schon die korrekte Adresse. Man muss sich das dann nur wie zu einem benutzbaren Pointer umbauen ...

Gruß
LL
 
Na ja du kriegst zumindest die DB Nummer raus indem du deine Variable lädst und danach den aufgeschlagenen DB abfragst ( L DBNO ). Darf man fragen wofür du das brauchst?

Gruss Sven...
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Pointer zerlegen

Hallo,

probiers mal damit:

// Informationen aus Any-Pointer (Read-Bereich) auslesen
// Details siehe Online Hilfe Siemens
L P##RECV
LAR1 // Any-Pointer laden
L W [AR1,P#2.0] // Anzahl Byte auslesen
T #DATENLAENGE

L W [AR1,P#4.0] // DB-Nummer ermitteln
T #DATENBAUSTEIN // Lokaler Datenbaustein

L D [AR1,P#6.0] // Bereichszeiger laden
L DW#16#FFFFFF
UD // Kodierung Speicherbereich löschen

SRD 3 // Bitadresse entfernen
T #DATENWORD // 1. Datenword im lokalen Datenbaustein


#RECV ist eine IN-Variable vom Typ any, der symbol. der DB und die UDT des DB übergeben wird.

Weitere Details findest Du in der S7 Hilfe unter "ANY"

Gruß
 
Einen Any-Pointer laden

Die Var. #RECV ist bei mir eine lokale Var. eines Bausteins (FC), vom Typ ANY.
Dieser Variablen wird beim Bausteinaufruf folgendes übergeben:

DB_Symb.READ

Wobei READ ein UDT (Struktur) mit insgesamt 60 Byte ist.
Durch die Übergabe an den ANY Pointer (RECV) kann nun mit den folgenden Zeilen
a) die Anzahl der Bytes (Größe der Struktur) ermittelt werden
b) die DB-Nr ermittelt werden
b) die Startadresse im DB ermittelt werden.

Wie schon gesagt in der S7 Hilfe unter ANY stehen alle Details zum ANY-Pointer.

Der Ladebefehl könnte evtl. auch wie folgt aussehen

L P# DB_Symb.READ


Ich hoffe das hilft.
 
Zurück
Oben