Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 8 von 8

Thema: DB-Nummer und Offset aus Symbol auslesen

  1. #1
    Registriert seit
    12.02.2008
    Beiträge
    31
    Danke
    3
    Erhielt 3 Danke für 3 Beiträge

    Standard


    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???
    Zitieren Zitieren DB-Nummer und Offset aus Symbol auslesen  

  2. #2
    Registriert seit
    22.11.2005
    Ort
    kl.Odenwald
    Beiträge
    716
    Danke
    111
    Erhielt 85 Danke für 71 Beiträge

    Standard

    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.
    "Das Leben ist viel zu kurz, um schlecht zu essen !"
    (Johann Lafer zur SWR3 Grillparty)

  3. #3
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Zitat Zitat von nobby_nobbs Beitrag anzeigen
    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.
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.404 Danke für 2.002 Beiträge

    Standard

    ... 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

  5. #5
    Registriert seit
    29.12.2007
    Beiträge
    71
    Danke
    1
    Erhielt 7 Danke für 7 Beiträge

    Standard

    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...
    Geändert von tonga (14.08.2008 um 10:47 Uhr)

  6. #6
    Registriert seit
    19.05.2008
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    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ß
    Zitieren Zitieren Pointer zerlegen  

  7. #7
    Registriert seit
    22.11.2005
    Ort
    kl.Odenwald
    Beiträge
    716
    Danke
    111
    Erhielt 85 Danke für 71 Beiträge

    Standard

    hmm, bei mir gibt das obige nen Bereichsfehler.

    was genau meinst du mit:

    L P##RECV
    "Das Leben ist viel zu kurz, um schlecht zu essen !"
    (Johann Lafer zur SWR3 Grillparty)

  8. #8
    Registriert seit
    19.05.2008
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    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.
    Zitieren Zitieren Einen Any-Pointer laden  

Ähnliche Themen

  1. Indradrive CS Kommutierungs-Offset
    Von Scorch89 im Forum Antriebstechnik
    Antworten: 1
    Letzter Beitrag: 10.06.2011, 16:53
  2. Array Offset
    Von forellengarten im Forum CODESYS und IEC61131
    Antworten: 6
    Letzter Beitrag: 04.04.2011, 22:22
  3. Offset auf S7-Zeit für WinCCflexible (MP377)????
    Von Inbetriebnehmer im Forum HMI
    Antworten: 3
    Letzter Beitrag: 02.02.2011, 19:26
  4. Pointer und Offset
    Von SPSTorsten im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 14.01.2009, 21:42
  5. FB-Nummer in Step7 auslesen
    Von MKP im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 09.07.2007, 10:53

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •