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

Ergebnis 1 bis 7 von 7

Thema: Variabler Datentyp

  1. #1
    Registriert seit
    09.09.2010
    Beiträge
    76
    Danke
    10
    Erhielt 8 Danke für 8 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo liebe SPS-Gemeinde,

    ich bin gerade bei nem schönen Bierchen am Bausteine schreiben und dachte mir
    "Mensch, der neue ADD-Baustein im TIA Portal hat so ne super tolle 'Variabler Datentyp'-Funktion, das programmier ich mir jetzt auch rein..."

    Leider hab ich keinen Schimmer wie... Ist es uns Usern überhaupt schon gestattet, dieses Feature zu nutzen?
    Und wenn ja, wo finde ich dazu Informationen?

    Wer nicht genau was ich meine, siehe Anhang.

    mfg EliteGurke
    Angehängte Grafiken Angehängte Grafiken
    Zitieren Zitieren Variabler Datentyp  

  2. #2
    Registriert seit
    22.07.2007
    Beiträge
    86
    Danke
    16
    Erhielt 25 Danke für 19 Beiträge

    Standard

    Hallo Gurke,

    afaik ist dieses Feature nicht in eigenen Bausteinen realisierbar.

    Was dem am nächsten kommt, ist die Verwendung des Variant-"Pointers" in der Bausteinschnittstelle.

    Schau dir einfach mal die Onlinehilfe->Index->Variant (SCL) an.


    Gruß Semo

  3. #3
    Registriert seit
    09.09.2010
    Beiträge
    76
    Danke
    10
    Erhielt 8 Danke für 8 Beiträge

    Standard

    Variant hat leider den Nachteil, dass man weder Ausgänge noch Statische Variablen damit anlegen kann.
    Dann bleib ich halt fürs Erste bei UDT und MOVE_BLK_VARIANT. Nicht ganz so schön und mehr Arbeit für die CPU, aber es wird schon gehen.

  4. #4
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.618
    Danke
    776
    Erhielt 646 Danke für 492 Beiträge

    Standard

    Zitat Zitat von EliteGurke Beitrag anzeigen
    Variant hat leider den Nachteil, dass man weder Ausgänge noch Statische Variablen damit anlegen kann.
    Wer sagt denn sowas?
    Kleines Beispiel

    Code:
    FUNCTION "SKAL" : Void
    TITLE = 'scaling Peripherical Input words'
    { S7_Optimized_Access := 'TRUE' }
    AUTHOR : VoR
    FAMILY : Peripher
    NAME : W_skal_R
    VERSION : 1.6
    // Input will be converted directly from PEW to AUSG_REAL and AUSG_INT
    // the Linearity is calculatet from UGR_IN to UGR_Out and OGR_IN to OGR_OUT
       VAR_INPUT 
          EING : Variant;   // Input. IF Word then PEW scal unipolar
          OGR_IN : Real;   // Upper limit input in format REAL
          UGR_IN : Real;   // Lower limit input in format REAL
          UGR_OUT : Real;   // Lower Output = Lower Input
          OGR_OUT : Real;   // Upper Output = Upper Input
          INT_FACTOR : Real;   // Faktor for the Integer Input (Normaly 10.0) means 13.7 REAL out is 137 for INT
          OBJ_AH : Bool;   // Manualoverride aktiv inaktiv
       END_VAR
    
    
       VAR_OUTPUT 
          FE : Bool;   // Fehler bei PEW Wandlung
       END_VAR
    
    
       VAR_IN_OUT 
          AUSG : Variant;   // Output scaled (Format REAL)
       END_VAR
    
    
       VAR_TEMP 
          OGR_IN_MAX : Bool;   // Input >= Upper limit input
          UGR_IN_MAX : Bool;   // Input <= Upper limit input
          EING_REAL : Real;   // Input im format REAL
          EING_WORD : Word;
          EING_INT : Int;
          LIMIT_R : Real;   // limited input (for calculation)
          LIM_X_UG : Real;   // temporary VAR for limiter
          LIM_X_OG : Real;   // Dito
          Status : Word;
          Ausg_REAL : Real;
          EING_REAL_PEW : Real;
       END_VAR
    
    
    
    
    BEGIN
    	CASE TypeOf(#EING) OF
    	    Word: // Wenn Wort, dann behandeln wie einen Analogeingang
    	        VariantGet(SRC := #EING,
    	                   DST => #EING_WORD);
    	        #Status := SCALE(IN := WORD_TO_INT(#EING_WORD), HI_LIM := #OGR_OUT, LO_LIM := #UGR_OUT, BIPOLAR := 0, OUT => #EING_REAL_PEW);
    	        #FE := #Status <> 0;
    	    Int: // Wenn Int dann in REAL wandeln
    	        VariantGet(SRC := #EING,
    	                   DST => #EING_INT);
    	        #EING_REAL := INT_TO_REAL(#EING_INT);
    	        #FE := 0;
    	    Real: // Wenn Real dann So übernehmen
    	        VariantGet(SRC := #EING,
    	                   DST => #EING_REAL);
    	        #FE := 0;
    	    ELSE
    	        #FE := 1;
    	        #Status := 12; // Nicht unterstütztes Format
    	END_CASE;
    	
    	(*sorting limits for calculation*) 
    	IF #UGR_IN < #OGR_IN THEN
    	    #LIM_X_UG := #UGR_IN;
    	    #LIM_X_OG := #OGR_IN;
    	    
    	ELSIF #OGR_IN <= #UGR_IN THEN
    	    #LIM_X_UG := #OGR_IN;
    	    #LIM_X_OG := #UGR_IN;
    	END_IF;
    	
    	(*input should be limited*)
    	#LIMIT_R := LIMIT(MN := #LIM_X_UG, IN := #EING_REAL, MX := #LIM_X_OG);
    	
    	(*calculating limited data*)
    	IF NOT #OBJ_AH THEN
    	    IF NOT (TypeOf(#EING) = Word) THEN
    	        #Ausg_REAL := ((#OGR_OUT - #UGR_OUT) / (#OGR_IN - #UGR_IN)
    	        * #LIMIT_R
    	        + (#OGR_OUT - (#OGR_OUT - #UGR_OUT)
    	        / (#OGR_IN - #UGR_IN) * #OGR_IN));
    	    ELSE
    	        #Ausg_REAL := #EING_REAL_PEW;
    	    END_IF;
    	    
    	    CASE TypeOf(#AUSG) OF
    	        Real:
    	            VariantPut(SRC := #Ausg_REAL,
    	                       DST := #AUSG);
    	        Int:
    	            VariantPut(SRC := REAL_TO_INT(#INT_FACTOR * #Ausg_REAL),
    	                       DST := #AUSG);
    	    END_CASE;
    	END_IF;
    	
    	
    END_FUNCTION
    mfG René
    Geändert von vollmi (09.11.2015 um 21:43 Uhr)

  5. #5
    Registriert seit
    09.09.2010
    Beiträge
    76
    Danke
    10
    Erhielt 8 Danke für 8 Beiträge

    Standard

    Okay, ich probiere das morgen nochmal.

    Mir hat er bei meiner Output- sowie meiner Static-Variablen, welche mit Variant definiert sind, das Datentypfeld rot hinterlegt...

    Programmiere aktuell mit TIA V13 SP1 UPD5.

    Dein Code sieht aber Step 7 5.5 SCL aus...
    Wurde der Baustein eventuell migriert?

  6. #6
    Registriert seit
    09.09.2010
    Beiträge
    76
    Danke
    10
    Erhielt 8 Danke für 8 Beiträge

    Standard

    Also es ist tatsächlich so.
    TIA SCL mag kein Variant als Out, Stat oder Const, wobei ich Const noch verstehen kann.

    VarDeklTIASCL.jpg

    Edith meint:
    Bei FBs ist es definitiv so. Bei FCs ist es möglich Output als Variant zu deklarieren. Allerdings brauche in meinem konkreten Fall den IDB. Verhext!
    Geändert von EliteGurke (10.11.2015 um 09:26 Uhr)

  7. #7
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.618
    Danke
    776
    Erhielt 646 Danke für 492 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Das Out und Stat nicht funktionieren ist ja irgendwie auch klar. Woher soll er denn denn den Typ im Stat kriegen, das ist ja eigentlich ein Pointer (ein Verweis), kein wirklicher Inhalt im Instanzdb.
    Out ist eher speziell denn die Typerkennung geht ja von Aussen nach innen, wohingegen der Inhalt der Variable dann wieder von Innen nach Aussen geht.

Ähnliche Themen

  1. Step 7 Variabler Inputbereich
    Von gout im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 13.09.2013, 15:16
  2. Variabler DB Aufruf
    Von lounsome im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 20.07.2010, 08:57
  3. Variabler Bausteinaufruf in SCL
    Von eugenhuber im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 18.05.2010, 16:55
  4. Freilaufender variabler Taktgeber
    Von S7-User im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 20.09.2009, 02:08
  5. Variabler Timer
    Von wuerfelzinker im Forum Simatic
    Antworten: 16
    Letzter Beitrag: 17.11.2007, 23:35

Stichworte

Lesezeichen

Berechtigungen

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