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

Ergebnis 1 bis 5 von 5

Thema: Pointer für lokale Variablen erstellen

  1. #1
    Registriert seit
    04.10.2006
    Beiträge
    10
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    möchte einen Zeiger wie in dem nachfolgenden Muster für den Zugriff auf lokale (temp) Variablen erstellen. Das Beispiel ist für den Zugriff für einen DB.

    Code:
     AUF   DB [#SchnittstellenDB]
          LAR1  P##Source
          L     B#16#10                     //  10h für S7
          T     LB [AR1,P#0.0]
          L     B#16#2                      //  Datentyp
          T     LB [AR1,P#1.0]
          L     1                           // Wiederholungsfaktor
          T     LW [AR1,P#2.0]
          L     DBNO                        // DB-Nummer
          T     LW [AR1,P#4.0]
          L     B#16#84                     // Codierung der Speicher bereiche  (DB)
          T     LB [AR1,P#6.0]
     
          L     0
          SRW   13                          // Schiebe rechts Wort um nur auf die Byteadresse zu schreiben
          T     LB [AR1,P#7.0]
          L     0
          SLW   3                           // Schiebe links Wort wegen Bit Adresse
          T     LW [AR1,P#8.0]
    Dieses ist der Zeiger wenn ich ihn selber erstelle.

    Code:
    P#L 22.0 BYTE 1
    Da sich die Werte aber ändern möchte ich das so wie in dem oberen Beispiel machen.
    Was muß dafür in dem oberen Beispiel geändert werden?
    Zitieren Zitieren Pointer für lokale Variablen erstellen  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.697 Danke für 1.949 Beiträge

    Standard

    Hier mal aus der Siemens-Hilfe kopiert:

    Format des Parametertyps POINTER

    STEP 7 speichert den Parametertyp POINTER in 6 Bytes (48 Bits). Nachfolgendes Bild zeigt die Art der Daten, die in jedem Byte gespeichert werden.


    Der Parametertyp POINTER speichert die folgenden Informationen:
    • <LI style="FONT-SIZE: 10pt">DB-Nummer (bzw. 0, wenn die Daten nicht in einem DB gespeichert werden)
    • Speicherbereich in der CPU (Nachfolgende Tabelle zeigt die Hexadezimalcodes der Speicherbereiche für den Parametertyp POINTER)
    Hexa dezimal code
    Speicher bereich
    Beschrei bung
    b#16#81
    E
    Speicher bereich der Eingänge
    b#16#82
    A
    Speicher bereich der Ausgänge
    b#16#83
    M
    Speicher bereich der Merker
    b#16#84
    DB
    Daten baustein
    b#16#85
    DI
    Instanz-Daten baustein
    b#16#86
    L
    Lokal daten (L-Stack)
    b#16#87
    V
    Vorherige Lokal daten


    • Adresse der Daten (im Format Byte.Bit)
      • STEP 7 bietet das Pointer-Format: p#Speicherbereich Byte.Bit_Adresse. (Wenn der Formalparameter als Parametertyp POINTER deklariert wurde, dann brauchen Sie nur den Speicherbereich und die Adresse anzugeben. STEP 7 formatiert Ihren Eintrag dann automatisch in das Pointer-Format um.) Die folgenden Beispiele zeigen, wie Sie den Parametertyp POINTER für die Daten, die bei M50.0 beginnen, eingeben:

    • <LI style="FONT-SIZE: 10pt">P#M50.0
    • M50.0 (wenn der Formalparameter als POINTER deklariert wurde)
    Mit den Hex-Werten für Speicherbereich sollte man sich dann doch den Pointer zusammenbauen können, oder?

    PS: Schade, beim Einfügen sieht es noch wie im Original aus, recht aber so.
    Geändert von Ralle (10.10.2006 um 11:04 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  3. #3
    Registriert seit
    19.09.2006
    Beiträge
    49
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Auszug aus der Siemens AWL Hilfe:


    Hinweis
    Bei vielen Anwendungen können Sie sowohl die registerindirekte bereichsinterne als auch die registerindirekte bereichsübergreifende Adressierung verwenden.
    Falls Sie registerindirekt auf
    · den eigenen Lokaldatenbereich zugreifen wollen, so geht das nur bereichsintern.
    · Variablen vom Typ "POINTER" oder "ANY" oder auf den Lokaldatenbereich des aufrufenden Bausteins zugreifen wollen, so geht das nur bereichsübergreifend.





    wenn du nun wirklich nur einen Zugriff auf ein einzelnes Bytes machen willst (oder auch Wort und D-Wort) kannst du das auch anders lösen

    nämlich indirekt übers AR.

    Beispiel:

    L variabler_Offset
    sld 3
    tar1

    L LB[ar1,p#0.0]


    ansonsten solltest du dir eine Struktur im Temporären Teil anlegen damit du einen Grundpointer bekommst bei dem du mit deinem variablen Offset den tatsächlichen Zugriff ändern kannst... dazu müsste ich jetzt aber tiefer greiffen und warte mal ob es dir auch so helfen kann.

    lg
    Stefan

  4. #4
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.697 Danke für 1.949 Beiträge

    Standard

    @stma77

    Das ist der einfache und bessere Weg, aber ich denke, er will den Pointer als Parameter an eine weiter Funktion übergeben, sonst würde das ja keinen Sinn machen.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  5. #5
    Registriert seit
    18.09.2006
    Beiträge
    231
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ..............................
    .
    mfg KALEL

    Wer über gewisse Dinge nicht den Verstand verliert, der hat keinen zu verlieren.
    Gottfried Ephraim Lessing

Ähnliche Themen

  1. Lokale Variablen und Instanz DBs ersetzen
    Von zandour im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 22.05.2011, 17:39
  2. Aktionen zu FB's und Lokale Variablen
    Von Majestic_1987 im Forum CODESYS und IEC61131
    Antworten: 8
    Letzter Beitrag: 10.03.2010, 10:52
  3. lokale Variablen auf Client
    Von derwestermann im Forum HMI
    Antworten: 0
    Letzter Beitrag: 06.03.2009, 13:47
  4. Lokale Variablen
    Von Mujo im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 23.08.2007, 18:53
  5. Lokale Variablen in SCL
    Von Climber im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 05.02.2007, 11:57

Lesezeichen

Berechtigungen

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