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

Ergebnis 1 bis 3 von 3

Thema: [TwinCat3] Frage zu objektorientiertem Programmieren

  1. #1
    Registriert seit
    14.08.2004
    Beiträge
    824
    Danke
    45
    Erhielt 73 Danke für 66 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    So nach 2 Tagen wälzen von INFOSYS, sind noch Fragen übriggeblieben:

    Ich hab ein Interface für einen Antrieb definiert und dazu einen FB1 der alles vom Interface implementiert. Dann habe ich einen FB2, der alles von FB1 erbt.

    Das Vererben bräuchte ich mit dem Interface-Konzept doch eigentlich nicht, wenn ich jeweils das Interface implementiere? Denn

    ADR(FB1)^.MoveTo(1)

    wird genauso ausgeführt wie

    ADR(FB2)^.MoveTo(1)

    ???

    Vererben ist schöner, aber ich frag, wegen um Missverständnisse zu vermeiden.

    Der Hintergrund ist der, das ich für eine Anlage verschiedene Antriebe verwenden will, aber diese nicht per Kompilieren fest verdrahten will. Dh. dachte ich mir, nur den Pointer auf einen Antriebs-FB zu übergeben.

    Wenn dann alle Antriebs-FB nur das Interface implementieren, aber aber keine gemeinsame Oberklasse haben, welchen Typ muss dann der Pointer haben? Der muss dann ein POINTER TO I_AntriebInterface sein?
    Geändert von drfunfrock (05.10.2013 um 22:16 Uhr)
    Zitieren Zitieren [TwinCat3] Frage zu objektorientiertem Programmieren  

  2. #2
    Registriert seit
    24.04.2008
    Ort
    Lübeck
    Beiträge
    324
    Danke
    8
    Erhielt 63 Danke für 62 Beiträge

    Standard

    Die Instanz eines Interfaces ist bereits ein Pointer. Dies ist ein häufiges Missverständniss und in die IEC 61131-3 3rd Edition meines Erachtens schlecht umgesetzt:

    Du definierst das Interface (I_A) inklusive der Methoden. Dann definierst du einen Funktionblock (FB_A), welcher dieses Interface implementiert.
    Nun erzeugst du eine Instanz vom Funktionsblock (fbA) und kannst diese einem Interface-Pointer zuweisen:

    Code:
    VAR
        fbA : FB_A;
        ipA : I_A;
    END_VAR
    
    ipA := fbA; // Eigentlich ipA := ADR(fbA);
    
    ipA.MoveTo(x); // Eigentlich ipA^.MoveTo(x);
    Nun könntest du einen zweiten Funktionsblock (FB_A2) erzeugen, welcher auch das Interface implementiert.
    Wenn du einen der beiden Bausteine an einen anderen Funktionsblock übergeben möchtest, verwende einfach den Interface-Pointer als VAR_INPUT.

    Code:
    FUNCTION_BLOCK FB_Use
    VAR_INPUT
        ipA : I_A;
    END_VAR
    
    ipA.MoveTo(x);

  3. Folgender Benutzer sagt Danke zu Neals für den nützlichen Beitrag:

    drfunfrock (06.10.2013)

  4. #3
    drfunfrock ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.08.2004
    Beiträge
    824
    Danke
    45
    Erhielt 73 Danke für 66 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke!

    Nachdem ich dann noch ein bisschen gespielt habe, stellte ich dann fest, dass es nur eine Oberklasse geben kann, weil auf die Variablen immer mit

    SUPER^.<var>

    zugegriffen werden muss. Dh. klassisches OOP funktioniert nicht so einfach. In jedem Fall erfordert es eine genaue Planung, wie das Interface aussehen soll, sonst fliegt einem alles um die Ohren, weil jede Änderung im Interface auch massive Änderungen in den Klassen nach sich zieht. Ich bin mir im Augenblick nicht wirklich sicher, ob OOP hier wirklich einen Vorteil bringt. Mit OOP würde ich daran arbeiten Antriebe als FB mit Methoden zu formulieren, die alles abdecken, so dass ich eine Bibliothek für die Wiederverwendung hätte. Es kann aber nur eine Oberklasse geben, die dann genau ausgearbeitet werden muss und die Gefahr, dass man hier an allen möglichen Enden flicken muss, ist nicht klein.

Ähnliche Themen

  1. BC9000 mit TwinCAT3 programmieren?
    Von Macbeth im Forum CODESYS und IEC61131
    Antworten: 6
    Letzter Beitrag: 13.09.2013, 14:13
  2. Visualisierung ausdrucken TwinCat3
    Von haukehansen im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 05.07.2013, 10:59
  3. TwinCat3: OOP, C++
    Von moon im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 07.10.2012, 18:33
  4. Frage zu Simatic Kurs Programmieren 1 (ST-PRO1)
    Von DennisBerger im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 27.09.2012, 08:02
  5. Datenbankanbindung unter TwinCat3
    Von SteffenP im Forum CODESYS und IEC61131
    Antworten: 8
    Letzter Beitrag: 30.05.2012, 20:14

Lesezeichen

Berechtigungen

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