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

Ergebnis 1 bis 3 von 3

Thema: Pointer als Out Variable Daten schreiben

  1. #1
    Registriert seit
    19.12.2006
    Beiträge
    185
    Danke
    25
    Erhielt 26 Danke für 21 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich habe in einer Funktion Daten einer in Variable (Typ Pointer), möchte diese Daten bearbeiten und das Ergebnis in eine Out Variable (Typ Pointer) schreiben.

    Zuerst habe ich den ersten Schritt programmiert, also das Lesen und bearbeiten des IN Parameters.
    Das Ergebnis wird hier in DB1.DBD8...15 geschrieben.

    Code:
         L     P##DATEN
          LAR1  
          L     D [AR1,P#2.0]
          T     #temp
    
          L     #temp
          LAR1  
    
    
    
          L     D [AR1,P#0.0]
          T     DB1.DBD    8               
    
    
          L     D [AR1,P#4.0]
          UD    DW#16#FFFFFFF7         //z.B.     
          T     DB1.DBD   12
    Soweit funktioniert alles wie gewünscht.
    Jetzt möchte ich die Daten flexibel in den DB schreiben. Also in eine Out Variable (Datentyp Pointer).

    Code:
         L     P##OB1_Date_Time
          LAR1  
          L     D [AR1,P#2.0]
          T     #temp
    
          L     #temp
          LAR1  
    
    //geht nicht!!!
          L     P##DATE_TIME_PLC
          LAR2  
          L     D [AR2,P#0.0]
          T     #temp
    
          L     #temp
          LAR2  
    
    
    
          L     D [AR1,P#0.0]
          T     D [AR2,P#0.0]
    
          L     D [AR1,P#4.0]
          UD   DW#16#FFFFFFF7             //z.B.
          T     D [AR2,P#4.0]

    Wenn ich den Code so in die Steuerung lade, geht die CPU mit der Meldung "Bereichlängenfehler beim schreiben" in Stop.

    Ja, ich habe das mit den Pointern wohl nicht ganz verstanden

    Wie könnte ich das Problem lösen / was mache ich falsch?



    Gruß
    Daniel
    Zitieren Zitieren Pointer als Out Variable Daten schreiben  

  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

    Zitat Zitat von mkd Beitrag anzeigen
    Hallo,

    ich habe in einer Funktion Daten einer in Variable (Typ Pointer), möchte diese Daten bearbeiten und das Ergebnis in eine Out Variable (Typ Pointer) schreiben.

    Zuerst habe ich den ersten Schritt programmiert, also das Lesen und bearbeiten des IN Parameters.
    Das Ergebnis wird hier in DB1.DBD8...15 geschrieben.

    Code:
         L     P##DATEN
          LAR1  
          L     D [AR1,P#2.0]
          T     #temp
    
          L     #temp
          LAR1  
    
    
    
          L     D [AR1,P#0.0]
          T     DB1.DBD    8               
    
    
          L     D [AR1,P#4.0]
          UD    DW#16#FFFFFFF7         //z.B.     
          T     DB1.DBD   12
    Soweit funktioniert alles wie gewünscht.
    Jetzt möchte ich die Daten flexibel in den DB schreiben. Also in eine Out Variable (Datentyp Pointer).

    Code:
         L     P##OB1_Date_Time
          LAR1  
          L     D [AR1,P#2.0]
          T     #temp
    
          L     #temp
          LAR1  
    
    //geht nicht!!!
          L     P##DATE_TIME_PLC
          LAR2  
          L     D [AR2,P#0.0]
          T     #temp
    
          L     #temp
          LAR2  
    
    
    
          L     D [AR1,P#0.0]
          T     D [AR2,P#0.0]
    
          L     D [AR1,P#4.0]
          UD   DW#16#FFFFFFF7             //z.B.
          T     D [AR2,P#4.0]

    Wenn ich den Code so in die Steuerung lade, geht die CPU mit der Meldung "Bereichlängenfehler beim schreiben" in Stop.

    Ja, ich habe das mit den Pointern wohl nicht ganz verstanden

    Wie könnte ich das Problem lösen / was mache ich falsch?

    Gruß
    Daniel
    Siehe rotes Zeichen.
    Außerdem steht im Wort P#0.0 die DB-Nummer und du mußt noch den richtigen DB öffnen, falls die angelegten Pointer unterschiedliche DB adressieren!
    Siehe auch hier: http://www.sps-forum.de/showthread.php?t=8663

    Achtung, Falls du das mal in einem FB nutzen willst, ist bei Verwendung von AR2 auf einiges zu achten.
    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:

    mkd (28.10.2009)

  4. #3
    mkd ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.12.2006
    Beiträge
    185
    Danke
    25
    Erhielt 26 Danke für 21 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi Ralle,

    o.k. das rote zeichen war ein Tippfehler im Beitrag aber nicht im Programm.

    So läuft es:

    Code:
          L     P##Daten
          LAR1  
          L     D [AR1,P#2.0]
          T     #temp
    
          L     #temp
          LAR1  
    
    //Erst einmal Pointer auf Datenbaustein kontrollieren
    
          L     P##DATE_TIME_PLC            // Andresse des Eingangs- Bits, aus Pointer lesen
          LAR2                              // Adresspointer adressieren
          L     W [AR2,P#0.0]               // erstes Wort eines Pointers enthält DB-Nr.
          T     #temp_DB_NR
          L     0                           // Wenn DB-Nr = 0, dann kein D sondern E/A/M
          ==I   
          SPB   noDB
    
          AUF   DB [#temp_DB_NR]            // Wenn DB-Nr <>0, dann DB öffnen
    
    noDB: NOP   0
    
    
          L     P##DATE_TIME_PLC
          LAR2  
          L     D [AR2,P#2.0]
          T     #temp
    
          L     #temp
          LAR2  
    
    
          L     D [AR1,P#0.0]
          T     D [AR2,P#0.0]               
    
          L     D [AR1,P#4.0]
          UD    DW#16#FFFFFFF7              
          T     D [AR2,P#4.0]
    SUPER! DANKE!

    Da ich immer, soweit möglich, auf FB verzichte brauche ich mir bei der Verwndung mit dem AR2 ja keine Gedanken zu machen.
    Der oben stehende Code wird in einem FC verwendet.


    Gruß
    Daniel

Ähnliche Themen

  1. Array in DB schreiben(any-pointer)
    Von Limette im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 28.10.2011, 22:17
  2. Antworten: 6
    Letzter Beitrag: 11.03.2010, 07:50
  3. Antworten: 24
    Letzter Beitrag: 31.01.2010, 21:32
  4. Variable schreiben
    Von stricky im Forum CODESYS und IEC61131
    Antworten: 15
    Letzter Beitrag: 06.02.2009, 20:27
  5. IEC-61131 Pointer mit Index auf BOOL Variable
    Von Stussi im Forum CODESYS und IEC61131
    Antworten: 21
    Letzter Beitrag: 14.12.2007, 09:11

Lesezeichen

Berechtigungen

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