OOP: Methode mit States - Vererbung

raphaelbulla

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

in meinem TC3 Projekt habe ich einige Methoden (beispielsweise: schreiben neiner Report dabei) die mehrere Schritte beinhalten. Das war bisher auch kein Problem, ich hatte einen Input parameter wie beispielsweise bStart und die die Methode selbst hat einigige VAR_INST (z.B. auch eine eState) die dann im im Falle von bStart = TRUE wieder auf "Initial" gesetzt wurden.

Der Aufruf der Methode aus meiner Schrittkette heraus war dann in etwa so:

IF METHODE(ePrevState <> CurrState) THEN
eNextState := ....
END_IF

Die Methode liefert TRUE sobald diese abgearbeitet ist und dann geht meine hauptschrittkette in den nächsten Schritt. Alles super.

Jetzt habe ich allerdings einen Abgeleiteten FB meines Basisbausteins in dem ich die Methode write_file überladen/überschrieben habe. Alles soweit gut - Twincat hat Inputs / Outputs automatisch vorgeschlagen und im Deklarationsteil auch die VAR_INST aus der Methode des Basisbausteins den ich EXTENDED habe übernommen. Wenn ich dann allerdings plain auf kompilieren drücke bekomme ich eine Fehlermeldung:

error: Mehrfachdefinition von Variable '__PROCESSCARRIER__ESTATE' in Funktionsbaustein 'FB_LULv1' und in Basis 'FB_Station'
error: Mehrfachdefinition von Variable '__PROCESSCARRIER__ENEXTSTATE' in Funktionsbaustein 'FB_LULv1' und in Basis 'FB_Station'
error: Mehrfachdefinition von Variable '__PROCESSCARRIER__ERESULT' in Funktionsbaustein 'FB_LULv1' und in Basis 'FB_Station'
error: Mehrfachdefinition von Variable '__PROCESSCARRIER__ASTATEHISTORY' in Funktionsbaustein 'FB_LULv1' und in Basis 'FB_Station'

Es wird quasi gemeckert das meine State-Variablen bereits in der Basisklasse existieren. Nur wie kann in der abgeleiteten Methode nun darauf zugreifen?

Generell gefragt: Ist mein Ansatz überhaupt richtig?

Eine Alternative wäre eState direkt im FB Deklarationsteils zu deklarieren - das klappt aber auch nicht da manchmal auch Methoden noch weitere internal methoden aufrufen und ich nicht nur einen State führen kann. Zudem sind die State_Enums auch ganz andere.

Bin gerade etwas ratlos - das einzige das wirklich funktioniert sind in der abgeleiteten Methode ein anderes Naming in den VAR_INST zu verwenden - das kann meiner Meinung nach aber nicht die Lösung sein.

Bin für Jede Hilfe lösbar

Vielen Dank euch!
 
Edit:

Das scheint wohl auch einfach nur ein Twincat Problem zu sein?

Ich habe bei Codesys V3.5 folgendes gemacht

FB_BASE mit der methode process mit VAR_INST iState: INT; END_VAR

FB_CHILD EXTENDS FB_BASE mit der gleichen Methode process und ebenfalls mit VAR_INST iState : INT; END_VAR

Lässt sich problemlos komplieren obwohl beide Bausteine instanziert sind in PRG.

Bei Twincat beim kompilieren:

: Mehrfachdefinition von Variable '__PROCESSCARRIER__ISTATE' ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@raphaelbulla : Welche SP von CoDeSys nutzt du?

Hintergrund: Das Verhalten ist CoDeSys basiert. TwinCAT läuft aktuell den SPs von CoDeSys etwas hinterher. Mit jeder TwinCAT Hauptversion
(aktuell 4022) werden diese integriert und auf den Stand gebracht . Die nächste Hauptversion könnte Gerüchten zufolge als Weihnachtsgeschenck Ende 2018 kommen.


Guga
 
@raphaelbulla : Welche SP von CoDeSys nutzt du?

Hintergrund: Das Verhalten ist CoDeSys basiert. TwinCAT läuft aktuell den SPs von CoDeSys etwas hinterher. Mit jeder TwinCAT Hauptversion
(aktuell 4022) werden diese integriert und auf den Stand gebracht . Die nächste Hauptversion könnte Gerüchten zufolge als Weihnachtsgeschenck Ende 2018 kommen.


Guga

Hi, also meine Codesys ist die V3.5 SP12 Patch 4 - hat TwinCat 3.1 4022 einen älteren Stand?

lg Raphael
 
Ohne Gewähr: Ich meine zu Wissen das in der 4022 die SP10 drinnensteckt. Wie gesagt wird mit den Hauptversionen der CoDeSys Anteil mit hochgezogen.
 
Zurück
Oben