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

Ergebnis 1 bis 1 von 1

Thema: Zugriff auf Lokaldaten in einem FC/FB [AWL/KUP]

  1. #1
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Eins vorweg, um AWL kommen wir nicht drumrum!

    Des Öfteren wird gefragt, wie man auf einzelne Bits oder größere Bereiche der Lokaldaten, also IN, OUT, INOUT, STAT (nur FB) und TEMP zugreifen kann, um sie zu beeinflußen bzw. die Schnittstelle beim Aufruf so übersichtlich wie möglich zu halten.

    Praktische Anwendung findet sowas z.B. bei der Auswertung von Statuswörtern von Frequenzumrichtern, aber es gibt der Anwendungsfälle sehr sehr viele.

    Die Grundlagen:

    In einem FB können alle Bereiche mit den im folgenden erläuterten Vorgehensweisen angesprochen werden. In einem FC können nur TEMP-Bereiche so angesprochen werden, da nur diese eine Adresse zugeordnet bekommen.

    Das heißt: in einem FC muß teilweise vorher in den TEMP-Bereich kopiert werden.

    Es wird folgender Ablauf vorgeschlagen, ein zusammengesetzer Datentyp wird zusammenhängend übergeben bzw. ist bereits vorhanden. z.B. ein WORD. Der Zugriff auf die einzelnen Bits soll nun erreicht werden um diese einzeln zu beeinflußen und zum guten Schluß soll das so beeinflußte WORD an die Außenwelt gegeben werden.
    Dafür bieten sich zwei(drei) vorgehensweisen an, die im wesentlichen aber die selbe Grundstruktur zu Grunde liegen haben. Das zu zerlegende WORD wird in eine Struktur kopiert, die dem Zielaufbau entspricht, also

    1. ein ARRAY[0..15] of bool
    2. ein STRUCT mit 16 bits (oder vielleicht auch 8bits und 1byte - also flexibler als ein array! die einzelnen Elemente können unterschiedlich benannt werden!)
    3. eine UDT (ebenso flexibel wie ein struct, aber in mehreren Bausteinen verfügbar)

    Diese wird im STAT oder TEMP Bereich angelegt und stellt später die Grundlage für jede weitere Bearbeitung der einzelnen Elemente dar.

    Nun muß eigentlich nur noch das Eingangswort in die Struktur gepresst werden.

    Wie Eingangs erwähnt: AWL und in FCs müßen wir in dem TEMP-Bereich kopieren.

    Für einen FC mit einem STRUCT stTemp

    Code:
      stTemp : STRUCT     
       xBit0_0 : BOOL ;    
       xBit0_1 : BOOL ;    
       xBit0_2 : BOOL ;    
       xBit0_3 : BOOL ;    
       xBit0_4 : BOOL ;    
       xBit0_5 : BOOL ;    
       xBit0_6 : BOOL ;    
       xBit0_7 : BOOL ;    
       xBit1_0 : BOOL ;    
       xBit1_1 : BOOL ;    
       xBit1_2 : BOOL ;    
       xBit1_3 : BOOL ;    
       xBit1_4 : BOOL ;    
       xBit1_5 : BOOL ;    
       xBit1_6 : BOOL ;    
       xBit1_7 : BOOL ;    
      END_STRUCT ;
    z.B.:
    Code:
    *
          TAR1  #dTempAR1                   //Adressregister retten
          TAR2  #dTempAR2
    
          L     #wInput                     //das eingangswort
          T     #wTempInput                 //in den Temp-bereich kopieren, damit er indirekt adressiert werden kann
    
          LAR1  P##wTempInput               //startadrese der quelle in AR1
          LAR2  P##stTemp                   //startadresse des ziels in AR2
    
          L     W [AR1,P#0.0]               //wTempInput nach
          T     W [AR2,P#0.0]               //stTemp schreiben
    
          LAR1  #dTempAR1
          LAR2  #dTempAR2                   //Adressregister zurückschreiben
    Für einen FB z.B.:
    Code:
    *
          TAR1  #dTempAR1                   //Adressregister retten
          TAR2  #dTempAR2
    
          
          LAR1  P##wInput                   //startadrese der quelle in AR1
          LAR2  P##stTemp                   //startadresse des ziels in AR2
    
          L     W [AR1,P#0.0]               //wTempInput nach
          T     W [AR2,P#0.0]               //stTemp schreiben
    
          LAR1  #dTempAR1
          LAR2  #dTempAR2                   //Adressregister zurückschreiben
    Nun kann im folgenden auf die Structur-Elemente in den Sprachen KOP FUP und AWL zugegriffen werden ohne das eine absolute Adressierung benötigt wird.

    also z.B.:

    Code:
    *
          U     #stTemp.xBit0_0
          U     #stTemp.xBit1_2
          =     #xOut
    Sind alle Operationen ausgeführt, kopiert man das, um am Beispiel zu bleiben in den OUT-Bereich Typ WORD.

    Für einen FC mit einem STRUCT stTemp z.B.:
    Code:
    *
          TAR1  #dTempAR1                   //Adressregister retten
          TAR2  #dTempAR2
    
          LAR1  P##stTemp                   //startadrese der quelle in AR1
          LAR2  P##wTempOutput              //startadresse des ziels in AR2
    
          L     W [AR1,P#0.0]               //stTemp nach
          T     W [AR2,P#0.0]               //wTempOutput schreiben
    
          LAR1  #dTempAR1
          LAR2  #dTempAR2                   //Adressregister zurückschreiben
    
          L     #wTempOutput                //aus dem Temp-Bereich
          T     #wOutput                    //auf den Ausgang kopieren
    Für einen FB z.B.:
    Code:
    *
          TAR1  #dTempAR1                   //Adressregister retten
          TAR2  #dTempAR2
    
          LAR1  P##stTemp                   //startadrese der quelle in AR1
          LAR2  P##wOutput                  //startadresse des ziels in AR2
    
          L     W [AR1,P#0.0]               //stTemp nach
          T     W [AR2,P#0.0]               //wTempOutput schreiben
    
          LAR1  #dTempAR1
          LAR2  #dTempAR2                   //Adressregister zurückschreiben
    Natürlich funktioniert das ganze auch für Byte und DWord und entsprechenden Zusammensetzungen und man muß auch nicht vorn rein und hinten wieder raus

    Viel Spaß und gutes gelingen!
    Geändert von vierlagig (13.11.2008 um 13:19 Uhr)
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]
    Zitieren Zitieren Zugriff auf Lokaldaten in einem FC/FB [AWL/KUP]  

  2. Folgende 18 Benutzer sagen Danke zu vierlagig für den nützlichen Beitrag:

    alfonso (16.12.2008),BlemaTue (06.12.2016),dennisbz (06.02.2009),don_looney (24.11.2015),emilio1248 (28.11.2011),Ganz (01.02.2009),Hoyt (19.04.2011),ich988 (07.04.2012),jabba (11.12.2008),logo78 (28.03.2009),Michael Müller (20.05.2014),mkd (23.04.2010),rostiger Nagel (12.09.2011),SIGGI (26.03.2009),StefanK (28.02.2009),Sven_HH (28.05.2009),Toki0604 (18.01.2011),vita-2002 (04.02.2009)

Ähnliche Themen

  1. Zugriff auf Lokaldaten
    Von Züttu im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 19.07.2010, 12:07
  2. Antworten: 3
    Letzter Beitrag: 07.10.2009, 16:12
  3. Zugriff auf Lokaldaten in einem FC/FB
    Von Move im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 02.03.2009, 11:29
  4. Indirekter Zugriff auf Lokaldaten des Vorgänger
    Von Senator42 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 24.03.2007, 14:17
  5. Problem mit BLKMOV bei Zugriff auf V-Lokaldaten
    Von armadillo im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 11.02.2006, 06:38

Lesezeichen

Berechtigungen

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