Frage: Wie kann ich über ein Interface den FB direkt aufrufen/ausführen? (also nicht eine Methode des FB!)
Interface:
INTERFACEitfFBPROPERTYiVarA:INTMETHODdoWork:bool;
Funktionsblock:
[/FUNCTION_BLOCK fbAIMPLEMENTSitfFBVAR_OUTPUT  iVarB:INT;END_VARVAR  _iVarA:INT;END_VARiVarB:=_iVarA;  METHODdoWork:bool    THIS^();
Set-Implementierung des Interfaces itfFB in den fbA:
  _iVarA:=iVarA;
PRG:
VAR  fbA1:=fbA;  itfFB1:=itfFB:=fbA1;END_VARitfFB1.iVarA:=5;itfFB1();  //->FehlerfbA1();  //->geht(fbA1.iVarBist5),istabernichtgewollt,daderFBnurüberInterfaceangesprochenwerdensoll/mussitfFB1.doWork();  //->hatkeinen Effekt, (fbA1.iVarBist0)
Klar könnte der FB auch eine Methode doWork mit dem Code "iVarB := _iVarA ;" beinhalten, Ziel ist es aber den Code des FB's selbst auszuführen.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Mein Vorschlag:
Erweitere dein Interface um eine Referenz-Variable vom Typ deines FBs.
PROPERTYrFbThis:REFERENCETOFB_MyFB
Dieses Property wird dann im Get'er des FBs mit THIS^ beschrieben
rFbThisREF=THIS^;
Anschließend kann dann via Interface auf die Instanz des FBs zugegriffen werden:
IF__ISVALIDREF(ifMy.rFbThis)THEN
  ifMy.rFbThis();END_IF
Allerdings wiederspricht m.E. diese Vorgehensweise etwas den OOP-Grundgedanken.
Demnach sollten nur Methoden verwendet werden und ein Body bleibt leer.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Frage: Wie kann ich über ein Interface den FB direkt aufrufen/ausführen? (also nicht eine Methode des FB!)
Interface:
Funktionsblock:
Set-Implementierung des Interfaces itfFB in den fbA:
PRG:
Klar könnte der FB auch eine Methode doWork mit dem Code "iVarB := _iVarA ;" beinhalten, Ziel ist es aber den Code des FB's selbst auszuführen.
Hi Nina
Mein Vorschlag:
Erweitere dein Interface um eine Referenz-Variable vom Typ deines FBs.
Dieses Property wird dann im Get'er des FBs mit THIS^ beschrieben
Anschließend kann dann via Interface auf die Instanz des FBs zugegriffen werden:
Allerdings wiederspricht m.E. diese Vorgehensweise etwas den OOP-Grundgedanken.
Demnach sollten nur Methoden verwendet werden und ein Body bleibt leer.