Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

Vererbung von Variablen in Var_In_Out

sysV3
2012-05-09
2012-05-10
  • sysV3 - 2012-05-09

    Habe folgenden Fehler, dass ich keine struct vererben kann!Oder liegt dies an der Var_In_Out, wo die Variablen deklariert ist?
    "Die Fehlermeldung VAR_IN_OUT 'Farbe_1' muss in Aufruf von 'Kind zugewiesen werden"!! Bitte um Lösung...

    So wurde deklariert:

    gelb : Struktur;
    umwelt : Kind;

    Die Struktur

    TYPE Struktur :
    STRUCT
    ......
    END_STRUCT
    END_TYPE

    Die Vaterklasse

    Basis
    Var_in_out
    Farbe : Struktur;
    end_var

    Die Kindklasse:

    Kind extends Basis
    Var_in_out
    Farbe_1 :Struktur;
    end_var

    Codeteil der Kindklasse:
    super^.(Farbe:=Farbe_1)

    PLC-Aufruf

    umwelt (farbe_1:=gelb);

     
  • Patmo1 - 2012-05-10

    Die Fehlermeldung sagt dir ja schon, was du machen musst:

    Beim Aufruf von

    umwelt (farbe_1:=gelb);
    

    musst du ALLE In-Out-Variablen angeben. Richtig wäre also

    umwelt (farbe_1:=gelb, farbe := gelb);
    

    Das hat nichts mit der Vererbung zu tun, sondern In-Out-Variablen müssen immer angegeben werden beim Aufruf (war auch in V2 schon so). Alle Eingangs-/Ausgangs-Variablen des Vaters gelten natürlich auch für das Kind. Deshalb muss die In-Out-Variable des Vaters beim Kindaufruf mit angegeben werden.

    So wie dein Beispiel ist, macht es sowieso wenig Sinn, dass in der Kindklasse nochmal der Eingang "Farbe_1" vorhanden ist und du den Eingang einfach auf den Eingang des Vaters schreibst (für den Fall, dass du noch irgendwelche Anpassungen innerhalb von Kind vor der Übergabe an Vater machst, macht es natürlich schon Sinn).
    Du brauchst in dem Fall in der Kindklasse gar keinen zusätzlichen Eingang "Farbe_1" deklarieren, sondern immer nur mit dem Eingang "Farbe" arbeiten.

    Der Aufruf der Kindklasse sieht dann so aus:

    umwelt (farbe := gelb);
    

    Innerhalb der Kindklasse kannst du immer mit "farbe" arbeiten, da in der Kindklasse alle Variablen der Vaterklasse zur Verfügung stehen.

    PS:
    "super^.(Farbe:=Farbe_1)" ist vermutlich nur ein Schreibfehler, aber der Punkt muss natürlich weg.

     

Log in to post a comment.