Ich möchte aus einem Funktionsblock (FB_2), der in einem Funktionsblock (FB_1) aufgerufen wird, auf eine lokale Variable des aufrufenen Bausteins (FB_1 zugreifen.
Geht das? Und wenn ja, wie sieht die Syntax aus?
Danke im voraus...
Jörg
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
es gibt glaube ich die Möglichkeit der Variablen einen bestimmten Speicherbereich zuzuordnen mit der AT deklaration. Auf den müsste man dann zugreifen können. Wie das aber genau aussieht weiß ich nicht.
gruß
Michael
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
wenn er in FB2 auf eine Variable von FB1 zugreift und FB2 von FB1 aufrufen lässt, kann er diesen Aufruf nur einmal machen, wenn er die Variable in Verbindung mit dem Instanznamen von FB1 nach FB2 übergibt und dann kann man es sich sparen den Code in einen FB zu packen, da dieser nur funktiniert, wenn die Instanz von FB1 einen bsetimmten Namen hat.
gruß
Michael
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
guerillero hat geschrieben:
...wenn er in FB2 auf eine Variable von FB1 zugreift und FB2 von FB1 aufrufen lässt, kann er diesen Aufruf nur einmal machen,.....
.... da dieser nur funktioniert, wenn die Instanz von FB1 einen bestimmten Namen hat.
Hallo Michael
Du scheinst mein kleines Problem richtig erkannt zu haben.
Der hier benannte FB2 soll natürlich in verschiedenen Instanzen des FB1 auf die jeweilig 'offene' Instanz zugreifen.
Die absolute Adressierung auf die Instanz-Variable ist ja trivial.
Noch jemand Ideen?
Jörg
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Nehmen wir an, ich hab einen Funktionsbaustein 'FB_Pumpe'. In diesem Baustein rufe ich einen weiteren FB auf z.B. 'FB_PID_Druck'. Jetzt deklariere ich für jeden Aufruf eine Instanz von 'FB_Pumpe'.
Pumpe1 : FB_Pumpe;
Pumpe2 : FB_Pumpe;
Pumpe3 : FB_Pumpe;
Der Funktionsbaustein 'FB_PID_Druck', der ja im 'FB_Pumpe' aufgerufen wird, soll nur mit den Werten der aktuellen Instanz versorgt werden.
Innerhalb von 'FB'_PID_Druck' kann ich ja nicht sagen:
diVARxyz := Pumpe1.diSollwert; ( das Funktioniert ja nur in der 1. Instanz)
Jörg
.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Danke für eure Hilfe. Was ich aus euren Vorschlägen erkennen kann ist, dass ich wohl nicht daran vorbei komme alle Variablen, die ich im 'FB2' benötige, als VAR_IN, VAR_OUT oder VAR_IN_Out zu deklarieren. Das ist schade, werde ich aber jetzt so machen.
Ich sehe diesen Thread dann mal als erledigt an, danke nochmal an alle.
Jörg
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo Gemeinde
Ich möchte aus einem Funktionsblock (FB_2), der in einem Funktionsblock (FB_1) aufgerufen wird, auf eine lokale Variable des aufrufenen Bausteins (FB_1 zugreifen.
Geht das? Und wenn ja, wie sieht die Syntax aus?
Danke im voraus...
Jörg
Hi,
du müsstest die Variable beim Aufruf übergeben
InstFB2(InputVariableFB2:=VariableFB1);
oder so ähnlich. Habs nicht getestet, würde ich aber so versuchen.
bis denn
Michael
Dass ich die Variable übegeben kann, weiß ich. Aber gibt es noch eine Möglichkeit direkt auf sie zu zugreifen?
Anders. Kann ich eine Datenherkunft (Variable) indirekt adressieren?
Jörg
Hi,
es gibt glaube ich die Möglichkeit der Variablen einen bestimmten Speicherbereich zuzuordnen mit der AT deklaration. Auf den müsste man dann zugreifen können. Wie das aber genau aussieht weiß ich nicht.
gruß
Michael
Hallo, das müsste eingelich gehen.
Wenn du den Bausteinamen nimmst und dann einen Punkt setzt werden dir alle Variablen des Bausteins angezeigt.
z.B.: FB1.Var1
gruß bonatus
fast richtig...
es ist genau genommen:
Instanzname.Variablenbezeichnung
Wenn du z.B. auf Variable test aus FB1 den du mit dem Instanznamen Foerderband versehen hast aufrufen willst musst du eintippen:
Foerderband.test
MfG
Marcel
mein ich doch - angeber
Hi,
wenn er in FB2 auf eine Variable von FB1 zugreift und FB2 von FB1 aufrufen lässt, kann er diesen Aufruf nur einmal machen, wenn er die Variable in Verbindung mit dem Instanznamen von FB1 nach FB2 übergibt und dann kann man es sich sparen den Code in einen FB zu packen, da dieser nur funktiniert, wenn die Instanz von FB1 einen bsetimmten Namen hat.
gruß
Michael
Hallo Michael
Du scheinst mein kleines Problem richtig erkannt zu haben.
Der hier benannte FB2 soll natürlich in verschiedenen Instanzen des FB1 auf die jeweilig 'offene' Instanz zugreifen.
Die absolute Adressierung auf die Instanz-Variable ist ja trivial.
Noch jemand Ideen?
Jörg
OK, aber warum?
.
Ok nochmal zum Verständnis
Nehmen wir an, ich hab einen Funktionsbaustein 'FB_Pumpe'. In diesem Baustein rufe ich einen weiteren FB auf z.B. 'FB_PID_Druck'. Jetzt deklariere ich für jeden Aufruf eine Instanz von 'FB_Pumpe'.
Pumpe1 : FB_Pumpe;
Pumpe2 : FB_Pumpe;
Pumpe3 : FB_Pumpe;
Der Funktionsbaustein 'FB_PID_Druck', der ja im 'FB_Pumpe' aufgerufen wird, soll nur mit den Werten der aktuellen Instanz versorgt werden.
Innerhalb von 'FB'_PID_Druck' kann ich ja nicht sagen:
diVARxyz := Pumpe1.diSollwert; ( das Funktioniert ja nur in der 1. Instanz)
Jörg
.
Hi Jörg,
dann musst du es über die Input Variable machen.
FB_PID_Druck instanzierst du im FB_Pumpe und übergibst die Variable beim aufruf im FB_Pumpe. Was spricht dagegen?
gruß
Michael
Du rufst den Baustein FB2 einfach in FB1 auf, vergibst ihm einen Namen.
Die Ein und Ausgangsvariablen dieses FB verknüpfst du mit Variablen in dem FB1 und dein Problem ist gelöst.
MfG
Marcel
Mahlzeit
Schon mal über VAR_IN_OUT nachgedacht ?
Oder Pointer (was prinzipiell das selbe ist).
Oder du nennst deinen Pumpe1 eben Pumpe[1] (Deklaration als ARRAY[1..3]) und übergibst der Instanz die entsprechende Nummer 1 - 3.
Gruß
Erik
Hallo Leute
Danke für eure Hilfe. Was ich aus euren Vorschlägen erkennen kann ist, dass ich wohl nicht daran vorbei komme alle Variablen, die ich im 'FB2' benötige, als VAR_IN, VAR_OUT oder VAR_IN_Out zu deklarieren. Das ist schade, werde ich aber jetzt so machen.
Ich sehe diesen Thread dann mal als erledigt an, danke nochmal an alle.
Jörg