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

Ergebnis 1 bis 8 von 8

Thema: ANY-Pointer Adresse Symbolisch

  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
    Hallo alle zusammen,

    ich möchte einen ANY-Pointer auf einen String zeigen lassen. Dieser String beginnt ab dem Lokalwort 10. Ich möchte den String wortweise auswerten. Dies geht ja wie folgt:

    Code:
       
          LAR1  P##Zeiger_auf_String
          L       B#16#10                     // Syntax-ID
          T       LB [AR1,P#0.0]
          L       B#16#4                      // WORD
          T       LB [AR1,P#1.0]
          L       8                              // 8 WORD
          T       LW [AR1,P#2.0]
          L       10                            // LW 10
          SLD    3
          T       LD [AR1,P#6.0]
          L       B#16#83                   // Merker
          T       LB [AR1,P#6.0]
    Meine Frage ist nun:
    Vor dem SLD gebe ich ja die Anfangsadresse des Strings an. Ist dies auch symbolisch möglich? Ich möchte dies aber nicht als IN der Funktion haben. Es soll also nicht absolut adressiert sein. Denn wenn ich vor dem String eine neue temporäre Variable einfüge, zeigt der Pointer auf den falschen Bereich. Dies möchte ich verhindern. Wie kann ich also "L 10" ersetzen?
    Ich würde da gerne sowas in der Art haben:

    Code:
    LAR1 P##String 
    T       LD [AR1,P#6.0]
     
    statt
     
      L       10                            // LW 10
      SLD    3
      T       LD [AR1,P#6.0]
    Oder ist das so ähnlich nicht möglich?

    Ich hoffe, ich habe mich einigermaßen verständlich ausgedrückt.

    Gruß Oele
    Zitieren Zitieren ANY-Pointer Adresse Symbolisch  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Das könnte schon so gehen.
    Ich würde vor dem Bau des Any-Pointers die Adresse des Ziels in einer Zwischenvariable vom Typ DWord speichern.

    Code:
    LAR1 P##MyString
    T adr_MyString
    und dann im Code:
    Code:
     LAR1  P##Zeiger_auf_String
          L       B#16#10                     // Syntax-ID
          T       LB [AR1,P#0.0]
          L       B#16#4                      // WORD
          T       LB [AR1,P#1.0]
          L       8                              // 8 WORD
          T       LW [AR1,P#2.0]
          L       adr_MyString                            // LW 10
    //      SLD    3                     //brauchst du dann nicht, ist ja schon in der Variable als Adresse
          T       LD [AR1,P#6.0]
          L       B#16#83                   // Merker
          T       LB [AR1,P#6.0]
    Aber die 83 würde ich durch 86 ersetzen, du willst doch auf den Lokaldaten-Bereich zugreifen oder?
    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. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    Oele (12.07.2011)

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

    Also so wie du es vorgeschlagen hast, hatte ich es auch bereits schon versucht. Das funktioniert so leider nicht, siehe Anhang.

    Bei der absoluten Adressierung wird der Wert 50 errechnet.
    Mit deinem Vorschlag wird was ganz anderes errechnet...

    Wo liegt der Fehler? Ich sehe gerad den Wald vor lauter Bäume nicht...
    Angehängte Dateien Angehängte Dateien
    Zitieren Zitieren Das klappt auch noch nicht...  

  5. #4
    Registriert seit
    19.07.2010
    Beiträge
    1.288
    Danke
    213
    Erhielt 267 Danke für 233 Beiträge

    Standard

    Das ist schon richtig was da passiert. Im Beispiel von Ralle ist das SLD 3 auskommentiert
    mfG Aventinus

  6. Folgender Benutzer sagt Danke zu Aventinus für den nützlichen Beitrag:

    Oele (12.07.2011)

  7. #5
    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 erklärt einiges.

    Habs getestet. Ist ja auch logisch, dass man nun "SLD 3" nicht mehr benötigt.
    Naja, der Wald und die vielen Bäume ne^^

    Vielen Dank für eure Antworten!

    Gruß Oele

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

    Und wie müsste ich das jetzt machen, wenn der String sich in einem Datenbaustein befinden würde?

    String beginnt bei DBB0. Den Header des Strings will ich nicht auslesen. Deswegen starte ich bei DBB2.

    Code:
      
     
        L     #DB_NR
        AUF   DB [#DB_NR]                 // Öffne DB
    LAR1 P#DBB2                             // Dies will der Editor so nicht... Hier möchte ich dann z.B. MyString[1] angeben können
        T     #adr_DB_String
     
    // ....
     
          LAR1  P##Zeiger_auf_String
          L     B#16#10                     // Syntax-ID
          T     LB [AR1,P#0.0]
          L     B#16#6                      // DWORD
          T     LB [AR1,P#1.0]
          L     8                               // 8 DWORD
          T     LW [AR1,P#2.0]
          L     #adr_DB_String
          T     LD [AR1,P#6.0]
          L     B#16#84                     // DB
          T     LB [AR1,P#6.0]
    Geändert von Oele (12.07.2011 um 15:34 Uhr)
    Zitieren Zitieren Nun String in Datenbaustein  

  9. #7
    Registriert seit
    19.07.2010
    Beiträge
    1.288
    Danke
    213
    Erhielt 267 Danke für 233 Beiträge

    Standard

    Probiers damit:
    Code:
         LAR1   P#2.0
    Den Speicherbereich trägst du ja sowieso selber ein.
    mfG Aventinus

  10. #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
    mh, okay das müsste natürlich klappen.

    Nur dann würde ich ja trotzdem fest das DBB2 als Anfangsadresse ansprechen. Dies wäre ja dann immer noch abolut adressiert. Wenn ich im Datenbaustein ein neues Element am Datenbaustein Anfang einfüge, greife ich ja dann auf den falschen Bereich zu. Würde das also lieber symbolisch machen.
    Also z.B. LAR1 STRING_DB[1]
    Ist dies in dieser Art irgendwie möglich?

Ähnliche Themen

  1. Antworten: 15
    Letzter Beitrag: 09.09.2011, 10:56
  2. Adresse an Pointer übergeben
    Von schuld im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 17.11.2010, 12:42
  3. DB's symbolisch adressieren
    Von erwin36 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 11.11.2009, 21:23
  4. Speichrzugriff über Adresse aus ANY-Pointer
    Von MarkusP210 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 24.09.2009, 11:26
  5. Antworten: 7
    Letzter Beitrag: 11.03.2008, 10:54

Stichworte

Lesezeichen

Berechtigungen

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