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

Ergebnis 1 bis 2 von 2

Thema: Zugriff auf IN_OUT-Variable mit Pointer

  1. #1
    Registriert seit
    05.03.2015
    Beiträge
    7
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich suche nun seit Tagen erfolglos nach einem Lösungsansatz und hoffe, mir kann hier jemand weiterhelfen.

    Ich habe einen FC, dem ich zwei Blöcke aus einem Datenbaustein übergebe will. (das ganze wird am Ende knapp 100mal aufgerufen)
    Die Blöcke sind ihrer Struktur nach identisch und als UDT definiert.

    Dem FC übergebe ich nun diese beiden Blöcke jeweils als IN_OUT-Variable, da bei Prüfung bestimmter Inhalte der Blöcke der eine Block auf den anderen kopiert werden soll und anschließend der Ausgangsblock mit neuen Standarddaten überschrieben wird.

    Leider kann ich die Einzelbestandteile des UDT innerhalb des FC nicht einfach mit L ... T... kopieren, da DATE_AND_TIME-Variablen in der UDT enthalten sind.

    Der SFC20 will sich aber nicht mit einem Verweis auf die Variablen füttern lassen und ich finde bislang keinen Weg, einen Pointer auf meine Variablen zusammenzubauen, die ich dem SFC20 übergeben kann.

    kann mir da jemand weiterhelfen?

    Vielen Dank schon mal im Voraus
    Zitieren Zitieren Zugriff auf IN_OUT-Variable mit Pointer  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.314
    Danke
    932
    Erhielt 3.329 Danke für 2.688 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Mußt Du auch auf einzelne Member der UDTs zugreifen? Dann mache es am besten in SCL, da wird das sehr übersichtlich. (allerdings erzeugt der SCL-Compiler nicht besonders effizienten Code)

    Code:
    FUNCTION FCxxx : VOID
    
    VAR_IN_OUT
      IN : UDT123;
      OUT : UDT123;
    END_VAR
    VAR_TEMP
      temp : UDT123;
    END_VAR
    
      //gesamten UDT von IN nach OUT kopieren (SCL-Compiler compiliert das sehr umständlich)
      OUT := IN;
    
      //gesamten UDT von IN nach OUT kopieren (für SCL-Compiler optimiert)
      temp := IN;
      OUT := temp;
    
      //auf einzelne UDT-Member zugreifen und kopieren
      OUT.TimeStamp := IN.TimeStamp;  //eine DATE_AND_TIME-Variable kopieren
    
    END_FUNCTION
    Alternativ: In AWL kannst Du in TEMP ANY-Variablen zusammenbasteln, diese kannst Du dann an SFC20 anlegen. Dies wird aber furchtbar unleserlich. Hinweis: UDT an IN_OUT werden als 48-Bit-Pointer übergeben (16-Bit-DB-Nr + 32-Bit-Bereichsadresse).

    Wie groß ist Dein UDT?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. Step 7 Pointer IN_OUT Schnittstelle
    Von MM_TTE3 im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 25.06.2015, 14:36
  2. B&R: Zugriff auf Pointer
    Von Jochen Kühner im Forum Sonstige Steuerungen
    Antworten: 1
    Letzter Beitrag: 29.04.2015, 23:53
  3. Zugriff auf Adressen mittels Pointer
    Von Jiss im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 11.12.2009, 07:56
  4. Zugriff auf Variable über String mit Var-Namen
    Von grosser_marco im Forum CODESYS und IEC61131
    Antworten: 14
    Letzter Beitrag: 03.09.2009, 07:43
  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
  •