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

Ergebnis 1 bis 8 von 8

Thema: Verständnisproblem Zeiger/AWL

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    Ich versuche grade Bytes, die zu einem CHAR-Array gehören in ein anderes CHAR-Array zu kopieren. Eigentlich recht elementar, jedoch entäuscht mit das Ergebnis:

    Zunächst wird der Stringzeiger geladen.
    STR1 : CHAR[1..32] ist Statisch im FB

    L P##STR1
    LAR1#

    L LB[AR1,P#0.0] // Leider wird hier schon etwas anderes Ausgelesen als in STR1 steht - was mach ich verkehrt ?

    AUF DB[DB_NR2]
    T DBB153

    STR1 läßt sich im Intstanzbaustein wunderbar mit dem Zeichen '0' beobachten.

    MFG

    Frank
    Zitieren Zitieren Verständnisproblem Zeiger/AWL  

  2. #2
    Registriert seit
    08.03.2006
    Beiträge
    44
    Danke
    2
    Erhielt 4 Danke für 2 Beiträge

    Standard

    Hallo,

    dein Problem ist der Befehl 'L LB[AR1,P#0.0]'!

    Falls deine Zeichen im Instanz-DB in einem Array of Char stehen,
    dann musst du die Char auch aus dem Instanz-DB laden und nicht
    aus den temporären Lokaldaten.

    In deinem Fall benötigtst du den Befehl 'L DIB[AR1,P#0.0]'!

    Gruß Eumel

  3. #3
    Registriert seit
    06.10.2003
    Beiträge
    3.411
    Danke
    451
    Erhielt 504 Danke für 407 Beiträge

    Standard

    Hallo,

    Code:
    L B[AR1,P#0.0]
    sollte auch schon reichen. Nach LAR1 müsste der Pointer schon auf "DI" zeigen.


    Gruß, Onkel
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  4. #4
    Avatar von kiestumpe
    kiestumpe ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2005
    Ort
    kl.Odenwald
    Beiträge
    716
    Danke
    111
    Erhielt 85 Danke für 71 Beiträge

    Standard

    Danke Onkel Dagobert,

    mit L B...scheint's im FB zu funktionieren
    Im FC scheitert jedoch noch das Rausschreiben auf den Ausgang

    L P##WERT
    LAR1
    L P##WERT_AUS // Zeiger auf Ausgangsstring
    LAR2

    L B[AR1,P#3.0]
    T B[AR2,P#6.0]

    Warum kann für den Ausgangsstring keine Dimension angeben, sonder nur mit der Länge 254 arbeiten?


    Gibt's da eigentlich e systematische Referenz auf die Kennzeichen DI,LB, B usw.? Im AWL-Hanbuch-Index findet sich leider nicht viel zu diesem Thema.

    MfG

    Frank
    Geändert von kiestumpe (14.06.2006 um 11:05 Uhr)

  5. #5
    Avatar von kiestumpe
    kiestumpe ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2005
    Ort
    kl.Odenwald
    Beiträge
    716
    Danke
    111
    Erhielt 85 Danke für 71 Beiträge

    Standard

    Hallo nochmal,

    hab mich leider etwas zu früh gefreut.

    An anderen Stellen wird ein Integer in eine String umgewandelt.
    Das ganze geschieht per Aufruf eines Multiinstanz-FB's innerhalb meines FBs

    Wenn ich den Baustein alleine, also ohne Multiinstanz aufrufe, funzt die Sache einwandfrei.
    Jedoch nicht mehr als Multiinstanz, erhalt ich als Ergebnis immer 0

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

    Hab ich aus einem anderen Beitrag von Volker mal ebend rauskopiert:

    • s7 verwendet bei multiinstanzfähigen funktionsbausteienen das ar2 als basisadressregister für instanzdaten. beim aufruf einer instanz steht p#dbx0.0 im ar2 und alle zugriffe auf bausteinparameter oder statische lokaldaten im fb verwenden die registerindirekte bereichsinterne adressierung mit dem operandenbereich di über dieses register. ein aufruf eine lokalinstanz erhöht mit +ar2 p#y.x die basisadresse, so dass innerhalb des aufgerufenen fb, der den instanz-db des aufgerufenen fb verwendet, relativ zu dieser adresse zugeriffen werden kann. auf diese weise können fb sowohl als eigenständige instanz als auch als lokalinstanz(und hier an beliebiger stelle in einem fb, auch mehrfach) aufgerufen werden.
    Sich doch mal im Forum unter "Multiinstanz"
    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

  7. #7
    Avatar von kiestumpe
    kiestumpe ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2005
    Ort
    kl.Odenwald
    Beiträge
    716
    Danke
    111
    Erhielt 85 Danke für 71 Beiträge

    Unglücklich

    Hallo Ralle,

    habe das mit Ar2 ausprobiert, Wie kann ich diesen Wert Addieren, bzw. nutzen?

    Wenn ich
    L P##Wert
    TAR2
    +D

    LAR1

    und dann Zugriff mit
    T B [Ar1,P#0.0]
    macht die CPU die Krätsche und geht in Stopp

    Gruss
    Frank

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


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hab mich mit dem Thema erst rel. wenig auseinandergesetzt, da ich die Multiinstanzen nicht so toll finde (ständig Probleme bei Programmänderungen, DB muß übersetzt werden etc.)

    Hier mal noch etwas, eas ich mit extra mal aus einem Post gezogen hatte und den Adressoffset betrifft:

    Code:
     
    // Adressregister sichern und Offset ermitteln
          
          TAR1  #SaveAR1      // Adressregister 1 sichern #SaveAR1 <-- Temporärer Variable vom Typ DWord
          TAR2         // Adressoffset ermitteln
          L     DW#16#FFFFFF
          UD    
          T     #AdrOffset  // Adressoffset auf temporärer Variable ablegen #AdrOffset vom Typ DWord
          
          
          // Zeiger aufschlüsseln
          
          L     P##Zeiger_DB  // Zeiger laden Input-Variable vom Typ Pointer
          L     #AdrOffset  // Adressoffset dazuaddieren
          +D    
          LAR1         // Adresse ins Adressregister 1 laden
    // Datenbausteinnummer herausziehen
          L     W [AR1,P#0.0] // Datenbausteinnummer aus Zeiger herausholen und in den Akku laden
          T     #DBNr     // Datenbausteinnummer auf Temporärer Variable ablegen #DBNr vom Typ Word
    // Adresse herausziehen und ins Adressregister kopieren
          L     D [AR1,P#2.0] // Adresse aus Zeiger herausholen und in den Akku laden
          LAR1         // Adresse in das Adressregister laden
    // Datenbaustein aufschlagen
          AUF   DB [#DBNr]    // zuvor ermittelten Datenbaustein aufschlagen
          
          
          
    // Auf DB-Daten zugreifen Beispiele
       L     W [AR1,P#2.0]   // lädt im Datenbaustein bzw. Ab der angegebenen Adresse im Datenbaustein das 2. Wort      
       L     D [AR1,P#4.0]   // lädt im Datenbaustein bzw. ab der angegebenen Adresse im Datenbaustein das 2. Doppelwort
       
    // Adressregister innerhalb des DB´s inkrementieren
       L     1              // Wert 1 in den Akku laden
       +AR1                 // Wert im Akku zum Adressregister dazuaddieren
       
    
    //---------------------------------------------------------------------------   
    // mit Schleife auf DB-Inhalte zugreifen Beispiel
    //---------------------------------------------------------------------------
    
    // Schleifenzaehler initialisieren
          L     0
          T     #Schleifenzaehler  // Temporärer Variable #Schleifenzaehler vom Typ INT
    // Schleifenzaehler
    Loop: L     #Schleifenzaehler
          L     15
          >=I   
          SPB   Ende
    // Daten aus DB holen
    
          L     W [AR1,P#0.0]               // 1. Wort
    
          L     W [AR1,P#2.0]               // 2. Wort
          
    // Schleifenzaehler und Adressregister erhoehen
          L     #Schleifenzaehler
          L     1
          +I    
          T     #Schleifenzaehler
          L     P#4.0
          +AR1  
          SPA   Loop
    
    Ende: NOP   0
    
       
       
    // Am Ende des FB´s muss das Adressregister 1 zurückgesichert werden !
          LAR1  #SaveAR1     // Adressregister 1 zurücksichern
    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

Ähnliche Themen

  1. Verständnisproblem bei DB aufruf im FC
    Von S7online im Forum Simatic
    Antworten: 17
    Letzter Beitrag: 13.02.2017, 13:57
  2. Verständnisproblem S7 400 H FH usw.
    Von Bender25 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 09.06.2015, 21:24
  3. Zyklus-Verständnisproblem in SCL
    Von anne im Forum Simatic
    Antworten: 23
    Letzter Beitrag: 02.02.2011, 16:25
  4. AWL Verständnisproblem
    Von invoices im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 12.08.2010, 11:35
  5. Verständnisproblem mit pointer ?
    Von Waelder im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 03.08.2009, 09:02

Lesezeichen

Berechtigungen

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