CoDeSys 3.2: Schlüsselwort "SUPER"

lothar
2008-06-07
2008-06-10
  • lothar - 2008-06-07

    Hallo,

    zum Thema "Erweiterung eines Funktionsblocks" sagt die Doku, bezugnehmend auf das dort dargestellte Beispiel:

    "fbA Variablen und Methoden können innerhalb des Gültigkeitsbereichs von fbB durch Verwendung des Schlüsselwortes "SUPER" (SUPER^.<method>).direkt angesprochen werden."</method>

    Mein Verständnisproblem:

    die Variablen welcher fbA-Instanz erhält man denn dann? (z.B. mit SUPER^.Variable_Aus_fbA). Irgendwie muss man doch Bezug auf eine Instanz nehmen, oder?

    Doku und eigene Versuche haben bisher keine Klarheit gebracht.

    Hat sowas schon mal jemand erfolgreich verwendet?

    Gruss

    Lothar

     
  • J Schohaus - 2008-06-09

    Hallo lothar

    Schwer zu erklären da dieses sich auf andere neue Möglichkeiten bezieht.

    Folgende Situation

    Du hast ein BausteinA der eine Methode oder Variable X hat.

    Von diese wird eine zweiter BausteinB abgeleitet.

    Dann sind alle Methoden oder Variablen auch in BausteinB vorhanden.

    In BausteinB wird nun auch eine Methode oder Variable X definiert dann wird die Methode oder Funktion von A Verschattet. Jetzt möchte aber der Programmierer von BausteinB die Methode aus BausteinA benutzen dann ist dieses über Super^ möglich.

    Zitat:
    Mein Verständnisproblem:
    die Variablen welcher fbA-Instanz erhält man denn dann? (z.B. mit SUPER^.Variable_Aus_fbA). Irgendwie muss man doch Bezug auf eine Instanz nehmen, oder?

    Also bezieht sich dieses auf eine Ableitung. Es gibt keine verschiedene Instanzen.

     
  • lothar - 2008-06-10

    Vielen Dank für die Antwort,

    tatsächlich erhält man aber, um bei Deinem Beispiel zu bleiben, mit Super^.Variable_X (programmiert in BausteinB) den Wert der Variable_X aus BausteinB. Also identisch zu BausteinB.Variable_X.

    Und dafür braucht man kein SUPER^.

    Insofern erschliesst sich mir das Thema nicht so recht.

    Gruss

    Lothar

     
  • Anonymous - 2008-06-10

    Originally created by: Bernhard Werner

    Hallo Lothar,

    Vorsicht mit Variablen. Für den Zugriff auf Variablen benötigt man tatsächlich kein Super^. Der Grund ist, das Variablen nicht überschrieben werden können.

    Grundsätzlich gilt, der abgeleitete Funktionsblock hat auf alle Variablen und Methoden der Basis den gleichen Zugriff wie auf seine eigenen Variablen und Methoden. Auch ohne SUPER.

    Super kommt ins Spiel wenn man eine Methode überschrieben hat, also dieselbe Methode im abgeleiteten Funktionsblock verwendet. Dabei kommt häufig der Fall vor, dass man die Methodenimplementation der Basisklasse aufrufen will.

    Also ein Beispiel: ein FB definiert eine Methode Reset, in dieser Methode werden alle Variablen in einen definierten Reset-Zustand gesetzt. Ein davon abgeleiteter FB hat eigene Variablen die er auch bei Reset zurücksetzen will, dann kann er die Methode überschreiben, in der Methode SUPER^.Reset() aufrufen um die Basismember zu initialisieren und danach noch seine eigenen Variablen initialisieren.

    Ziemlich genau dafür ist SUPER da.

    Grüsse,

    Bernhard Werner

     

Log in to post a comment.