TIA Verbindungsbeschreibung variabel übergeben

Snape

Level-1
Beiträge
117
Reaktionspunkte
13
Hallo,
ich will an einen Baustein ein Variant übergeben. Dabei soll variabel (anhängig eines Schalters) entweder eine TCON_IP_v4-Struktur oder eine TCON_Configured-Struktur verwendet werden.
Mein Versuch war jetzt, dass ich eine temporäre VARIANT-Variable habe und abhängig vom Schalter, entweder die TCON-IP-v4-Struktur in den Variant schreibe oder die TCON_Configured-Struktur.
Ich habe es mit VariantPut und Move_Blk_Variant versucht, beides funktioniert nicht.

Hat jemand eine Idee?

Snape
 
Hallo Snape

Wenn ich dich richtig verstanden habe, hast du einen Baustein, welcher z.B. als Input ein Variant deklariert hat. An diesen Baustein willst du dann über das Variant entweder die Struktur TCON_IP_v4 oder TCON_Configured übergeben. In dem Baustein willst du dann erkennen, welche der Beiden Strukturen dem Variant wurde. Ist das soweit richtig? Ich gehe jetzt einmal davon aus, dass du das in SCL programmieren willst.

Falls, ja dann musst du wie folgt vorgehen. Erstelle in deinem Baustein, welcher die Auswertung machen soll jeweils eine Temp-Struktur vom Datentyp TCON_IP_v4 und TCON_Configured.

Anschliessend kannst du mit der Funktion TypeOf verwenden, um zu prüfen, ob eine der beiden gewünschten Strukturen übergeben werden und wenn, ja welche. z.B. wie folgt (Syntax stimmt vielleicht nicht 100%ig, da ich gerade kein TIA zur Hand habe)

Code:
// Struktur an Variant ist TCON_IP_v4
IF TypeOf (Input_Variant) = TypeOf (Temp_TconIpV4) THEN
[INDENT]// Struktur lokal kopieren
Temp_RetVal := VariantGet (SRC := Input_Variant, DST := Temp_TconIpV4);

// Funktion, welche damit du ausführen willst
[/INDENT]

// Struktur an Variant ist TCON_IP_v4
ELSIF TypeOf (Input_Variant) = TypeOf (Temp_TconConfigured) THEN
[INDENT]// Struktur lokal kopieren
Temp_RetVal := VariantGet (SRC := Input_Variant, DST := Temp_TconConfigured);

// Funktion, welche damit du ausführen willst

[/INDENT]
ELSE
[INDENT]// Evtl. Störung ausgeben, dass keine gültige Struktur vorhanden
[/INDENT]

END_IF;

Ich hoffe das hilft dir weiter. Ansonsten kann ich dir das Systemhandbuch zum STEP7 V13 empfehlen, da stehen einige interessante Informationen drin.

Gruss Thomas
 
Hallo Thomas,
danke für Deine Antwort.
Leider ist es nicht ganz das, was ich will. Der Baustein, an den ich die Struktur übergeben will, hat das typeof schon drin. Es geht um den Aufruf des Bausteins.
Ich will eigentlich nicht schreiben:
Code:
IF Schalter = 0 THEN
    CALL FBTest, DBTest
          myVariant: TCON_IP_v4;
ELSIF Schalter = 1 THEN
     CALL FBTest, DBTest
          myVariant: TCON_Configured;
END_IF;

sondern:
Code:
temp: 
     tempVar: VARIANT;

IF Schalter = 0 THEN
      tempVar:= TCON_IP_v4;
ELSIF Schalter = 1 THEN
      tempVar: TCON_Configured;
END_IF;

CALL FBTest, DBTest
      myVariant: tempVar;
Damit ich den Baustein-Aufruf nur 1 mal habe.
 
Zuletzt bearbeitet:
Hallo Snape

OK, jetzt versetehe ich dein Problem. Leider fällt mir da auf die Schnelle aber keine Lösung dafür ein, da meines Wissens zum einen ein Variant nicht an ein Variant übergeben werden kann (da das Variant ja auch nur eine Art Verweis auf eine Adresse ist) und zum andern ein Variant immer direkt mit dem Aufruf beschaltet werden kann. Ich kann mir vorstellen, dass dadurch eben gerade verhindert werden soll, dass zur Laufzeit eine andere Variable übergeben wird (ist aber nur eine Vermutung).

Würde denn grundsätzlich das ganze funktionieren, wenn du den Aufruf 2 Mal machst (abgesehen, dass es nicht schön ist)?

Falls mir noch etwas einfallen würde, würde ich mich wieder melden. Tut mir leid.
Falls du eine Lösung gefunden hättest, wäre schön, wenn du sie hier kurz posten könntest.

Gruss Thomas
 
Hallo Thomas,
ich habe es jetzt mit den beiden Aufrufen gemacht -abhängig des Schalters - und es funktioniert. Ist halt nicht schön, da es den Baustein aufbläht. Aber aktuell geht es wohl nicht besser.

Snape
 
"Aufblähen" ist vielleicht das falsche Wort. Der Baustein wird halt durch den doppelten Code größer. Aber es hält sich in Grenzen. Ich hätte es mir schlimmer vorgestellt.
Trotzdem ware es schön, wenn man VARIANTS variabel angeben könnte. :-)
 
Zurück
Oben