FrankTheTank
Level-1
- Beiträge
- 41
- Reaktionspunkte
- 0
FUNCTION_BLOCK FB61
VAR
parallel_executable : BOOL := TRUE
END_VAR;
...
IF (DB62.gen1_currentState = 3) & (DB63.gen2_currentState = 1) THEN
parallel_executable := TRUE
END_IF;
...
END_FUNCTION_BLOCK;
FUNCTION_BLOCK FB62
VAR
gen1_currentState : INT := 1;
END_VAR;
...
END_FUNCTION_BLOCK;
FUNCTION_BLOCK FB63
VAR
gen2_currentState : INT := 1;
END_VAR;
...
END_FUNCTION_BLOCK;
FUNCTION_BLOCK FB61
VAR
parallel_executable : BOOL := TRUE;
END_VAR;
IF (DB62.gen1_currentState = 3) & (DB63.gen2_currentState = 1) THEN
parallel_executable := TRUE;
END_IF;
END_FUNCTION_BLOCK
DATA_BLOCK DB61 FB61
BEGIN
END_DATA_BLOCK
FUNCTION_BLOCK FB62
VAR
gen1_currentState : INT := 1;
END_VAR;
;
END_FUNCTION_BLOCK
DATA_BLOCK DB62 FB62
BEGIN
END_DATA_BLOCK
FUNCTION_BLOCK FB63
VAR
gen2_currentState : INT := 1;
END_VAR;
;
END_FUNCTION_BLOCK
DATA_BLOCK DB63 FB63
BEGIN
END_DATA_BLOCK
Hallo allerseits!
Der Übersetzer meckert mal wieder und ich verstehe nicht warum.
Hier ist der Teil, über den er sich beschwert:
Bei der IF Abfrage im FB61 sagt er:Code:FUNCTION_BLOCK FB61 VAR parallel_executable : BOOL := TRUE END_VAR; ... IF (DB62.gen1_currentState = 3) & (DB63.gen2_currentState = 1) THEN parallel_executable := TRUE[COLOR=red];[/COLOR] END_IF; ... END_FUNCTION_BLOCK; FUNCTION_BLOCK FB62 VAR gen1_currentState : INT := 1; END_VAR; ... END_FUNCTION_BLOCK; FUNCTION_BLOCK FB63 VAR gen2_currentState : INT := 1; END_VAR; ... END_FUNCTION_BLOCK;
Ungültiger Eingangs-, Ausgangs- oder Durchgangsparameter.
Der Ausdruck muss vom Datentyp BOOL sein.
Weiss jemand woran das liegt?
mfg,
Frank
Danke! Daran hat es gelegen. Das fehlende Semikolon war nur ein Abtippfehler.Habe allerdings erst das If Statement auskommentiert, damit alle DBs erzeugt werden.
Lässt sich das irgendwie so verbauen, dass man nicht erst die IF Statement ausbauen muss, übersetzen, IF Statements reinbauen, nochmal übersetzen?
Das Programm soll ohne irgendwelche Fummeleien vom Benutzer einfach übersetzt werden können ohne dass er noch was am SCL Code verändern muss.
FB62.DB62();
VAR
myFB : FB62 ;
End_Var ;
... und im Programm rufst du dann "myFB" auf ...
Klar geht das, dafür sind die Schnittstellen ja da. Die Instanz-FBs müssen natürlich dann bevor sie in einem anderen FB verwendet werden bekannt sein.Muss ich dazu FB62 und FB63 von FB61 aus aufrufen? Werden die benötigten Variablen von FB61 dann zu FB62/63 "durchgereicht"? Und kennt dann FB61 die Variablen seiner "Kinder"? Das würde nämlich mein Problem lösen.
(***********************************)
FUNCTION_BLOCK FB62
VAR_INPUT
conf : int;
END_VAR
VAR_OUTPUT
currentState : INT;
END_VAR
BEGIN
currentState := 1;
END_FUNCTION_BLOCK
(***********************************)
FUNCTION_BLOCK FB63
VAR_INPUT
conf : int;
END_VAR
VAR_OUTPUT
currentState : INT;
END_VAR
BEGIN
currentState := 1;
END_FUNCTION_BLOCK
(***********************************)
FUNCTION_BLOCK FB61
VAR
parallel_executable : BOOL := TRUE;
gen1 : FB62;
gen2 : FB63;
END_VAR
BEGIN
(* Bausteine aufrufen *)
gen1(conf := 123);
gen2(conf := 456);
IF (gen1.currentState = 3) & (gen2.currentState = 1) THEN
parallel_executable := TRUE;
END_IF;
END_FUNCTION_BLOCK
(***********************************)
ORGANIZATION_BLOCK OB1
VAR_TEMP
info : ARRAY[0..19] OF BYTE;
END_VAR
BEGIN
(* FB61 aufrufen, mit Instanz-DB61 *)
FB61.DB61();
END_ORGANIZATION_BLOCK
FUNCTION_BLOCK FB61
VAR
ParExecutable : BOOL;
Gen1 : FB62;
Gen2 : FB63;
END_VAR
Gen1;
Gen2;
END_FUNCTION_BLOCK;
DATA_BLOCK DB61
BEGIN
FB61
END_DATA_BLOCK;
FUNCTION_BLOCK FB62
VAR
StateGen1 : INT := 1;
END_VAR
...
END_FUNCTION_BLOCK;
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?