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

Ergebnis 1 bis 8 von 8

Thema: Vorgänger-Lokaldaten auswerten

  1. #1
    Registriert seit
    03.05.2011
    Beiträge
    21
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Moin,

    ich weiß, das Thema wurde schon öfter behandelt. Ich muss aber leider zugeben, dass ich es immer noch nicht wirklich verstanden habe. Und zwar geht es um folgendes:

    Ich habe eine Funktion FC1, welche eine Funktion FC2 aufruft.
    In FC1 initialisiere ich mir eine temporäre Variable (z.B. L 20, T #temp).
    Auf diese lokale Variable möchte ich dann im FC2 zugreifen. Dies ist ja scheinbar mit einem ANY-Pointer machbar. Dieser Pointer wird im FC1 implementiert und zeigt auf die lokale Variable. Diesen Zeiger gebe ich dann beim Aufruf der FC2 als IN-Parameter weiter.
    Meine Frage ist jetzt, wie ich diesen überreichten Pointer im FC2 auswerten kann, so dass mir der Wert der lokalen Variablen angezeigt wird? Also dass ich dann wirklich den Inhalt von #temp (z.B. 20) sehen kann. Ich bekomme es nämlich einfach nicht hin... Bekomme es nur hin die Daten des Pointers auszulesen (Datentyp, Wiederholfaktor, Speicherbereich,...). Das ist aber nicht für mich relevant.

    Dass dies auch mit "normaler" Schnittstellen Parameter-Übergabe möglich ist, ist mir klar. Darum soll es hier aber nicht gehen.

    Schonmal im vorraus Danke für eure Antworten

    Gruß Oele
    Zitieren Zitieren Vorgänger-Lokaldaten auswerten  

  2. #2
    Registriert seit
    19.06.2008
    Ort
    Ostalbkreis
    Beiträge
    3.140
    Danke
    201
    Erhielt 553 Danke für 498 Beiträge

    Standard

    Hallo,

    "vorherige Lokaldaten"
    Angehängte Grafiken Angehängte Grafiken
    • Dateityp: jpg lok.jpg (403,9 KB, 110x aufgerufen)

  3. #3
    Oele ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    03.05.2011
    Beiträge
    21
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Das mit dem "Codierung der Speicherbereiche" habe ich ja auch benutzt.

    Im Anhang befindet sich mein Programm. Vielleicht wird meine Frage dann etwas klarer.
    Angehängte Dateien Angehängte Dateien
    Zitieren Zitieren Mein Programm bislang...  

  4. #4
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    In Deinem Programm übergibst Du für den Speicherbereich die Kennung für Lokaldaten (L-Stack):

    Code:
          L     B#16#86                     // Lokaldaten
          T     LB [AR1,P#6.0]
    Du musst aber für den Speicherbereich die Kennung für vorherigen Lokaldaten (V-Stack) übergeben:

    Code:
          L     B#16#87                     // vorherige Lokaldaten
          T     LB [AR1,P#6.0]
    Gruß Kai

  5. #5
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Siehe dazu auch die folgende Siemens-FAQ:

    ID5669592 ANY-Pointer an eine Funktion übergeben

    Gruß Kai

  6. #6
    Oele ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    03.05.2011
    Beiträge
    21
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Vielen Dank Kai.

    So konnte es ja nicht klappen...

    Aber wie kann ich jetzt im FC2 mit der lokalen Variablen aus FC1 weiterarbeiten? Der ANY-Pointer wird mir mit seinen Eigenschaften ja angezeigt (siehe Anhang).
    Die 50 hex entsteht ja durch das verschieben der 10 hex um 3 Bits nach links. Die lokale Variable liegt ja bei LW 10 im FC1. Wie kann ich jetzt auf deren Inhalt im FC2 zugreifen?
    Stehe gerade voll auf dem Schlauch...
    Angehängte Dateien Angehängte Dateien
    Zitieren Zitieren Ziel fast erreicht...  

  7. #7
    Oele ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    03.05.2011
    Beiträge
    21
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich habs nun raus.
    Ganz zum Schluss steht nun die Adresse der vorherigen lokalen Variablen im Adressregister 1. Dieses muss ich dann nur noch indirekt adressiert laden:

    Code:
     
     L W [AR1,P#0.0] 
     T MW 60
    Das hatte ich die ganze Zeit gesucht. War nur nicht darauf gekommen.

    Nochmals vielen Dank
    Zitieren Zitieren *Glühbirne*  

  8. #8
    Oele ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    03.05.2011
    Beiträge
    21
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Eine Frage hätte ich jetzt aber doch noch.

    Und zwar funktioniert dies bislang nur mit mit einzelnen/mehreren Bytes, Wörter, DWs... Kann man diese Methodik auch benutzen, um einen ganzen String / Array mit dem Pointer zu referenzieren und dann im aufgerufenen Baustein seine Elemente einzeln per indirekter Adressierung anzusprechen? Datentyp String entspricht B#16#13. Nur welche Wiederholungszahl muss ich dann eingeben? Der String hat beispielsweise 32 Elemente. Und was wäre bei einem Array? Den Datentyp gibt es scheinbar nicht für ANY-Pointer...
    Zitieren Zitieren und noch ein Problemchen  

Ähnliche Themen

  1. Lokaldaten
    Von S7 Frischling im Forum Programmierstrategien
    Antworten: 9
    Letzter Beitrag: 12.08.2013, 14:20
  2. ECad 8.0 oder Vorgänger
    Von Pontifex im Forum Stammtisch
    Antworten: 3
    Letzter Beitrag: 23.07.2008, 03:38
  3. SCL und Lokaldaten
    Von derwestermann im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 14.03.2008, 11:53
  4. Vorgänger Lokaldaten...
    Von Jochen Kühner im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 06.06.2007, 07:37
  5. Indirekter Zugriff auf Lokaldaten des Vorgänger
    Von Senator42 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 24.03.2007, 14:17

Stichworte

Lesezeichen

Berechtigungen

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