-> Hier kostenlos registrieren
Einem FB(Stack) mit Instanz-DB(Weg_erfassung) übergebe ich die in der Klammer angegegebenen Werte.
Aufruf des FBs:
Jetzt sollte beim Simulieren doch in den Variablen der IF-Anweisungzumindest irgend etwas angezeigt werden.
Anscheinend springt er erst gar nicht in die IF-Anweisung.
Warum nicht. Alle Parameter wurden doch übergeben!
Aufruf des FBs:
Code:
Stack.Weg_erfassung(Adr_in:=DB1.DW0,Adr_insert:=TRUE,Adr_remove:=FALSE);
Jetzt sollte beim Simulieren doch in den Variablen der IF-Anweisungzumindest irgend etwas angezeigt werden.
Anscheinend springt er erst gar nicht in die IF-Anweisung.
Warum nicht. Alle Parameter wurden doch übergeben!
Code:
FUNCTION_BLOCK Stack
VAR_INPUT
Adr_in : DWORD;
Adr_insert : BOOL;
Adr_remove : BOOL;
// Reset : BOOL;
END_VAR
VAR_OUTPUT
empty : BOOL;
full : BOOL;
Adr_return : DWORD; //Rückgabe der aktuellen Adresse
END_VAR
VAR
Stack : ARRAY[0..31] OF DWORD; //Stack(Das Array mit den Wegelementen, die den Weg beschreiben
All : ARRAY[0..31] OF DWORD; //Alle Aufgerufenen Elemente im Array "ALL"
N : INT := -1; //Zählervariable für den STACK
K : INT := -1; //Zählervariable für ALL
top : INT := 31;
END_VAR
VAR_IN_OUT
END_VAR
(*IF Reset=true THEN
(* reset Stack *)
N := -1;
empty := TRUE;
full := FALSE;*)
IF Adr_insert AND Adr_remove=false AND NOT full=false THEN
(* schreibe in den Stack *)
N := N + 1;
K := K + 1;
IF N = top THEN full := TRUE; END_IF; (*Die Adresse im letzten Feld soll gelöscht bzw. eine Null in*)
empty := FALSE; (*das Feld geschrieben und der Zähler um einen zurück gesetzt*)
stack[N] := Adr_in; //Schreibe Adresse ins Array "STACK"
all[K] := Adr_in; //Schreibe Adresse ins Array "ALL"
Adr_return:=Adr_in; //Rückgabe der akt. Adresse an die aufrufende Funktion