Problem mit FB in SCL

broesel

Level-1
Beiträge
29
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Einem FB(Stack) mit Instanz-DB(Weg_erfassung) übergebe ich die in der Klammer angegegebenen Werte.

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
 
Könnte es daran liegen, dass "Adr_in" als DWORD deklariert ist und nur ein Wort übergeben wird?
Heisst es nicht auch "DB1.DBW0"?

Gruß
raika
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe ich geändert. Doch das war es auch nicht.
Ich vermute es liegt an den Abfragen in der IF_ANweisung.

Mit den Anweisungen habe ich jetzt auch schon rumgespielt,
doch die Variablen (N, K, Empty,...) werden im PLCSIM
nicht angezeigt.

Letzte änderung in der IF-Anweisung waren:

Code:
IF Adr_insert=true AND Adr_remove=false AND full=false THEN

Wenn die Bedingungen erfüllt sind, dann springe in die Anweisung

Trotzdem Danke!!
 
Zurück
Oben