SCL Problem mit Abarbeitung

Licht9885

Level-1
Beiträge
346
Reaktionspunkte
18
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo ich habe da irgendwie ein Fehler in meiner Programmierung gemacht könnte mir bitte einer Helfen?
Hier ist der Baustein den ich Programmiert habe

Es soll in Abhängikeit von Start und voll und Pumpe ein Zyklus um 1 erhöht werden wenn der Zyklus 100 ist soll der wert der Var Leer = 0 und Voll = 1 werden und bei der 2 Anweisung genau andersrum desweiteren soll der wert von Zyklus an den Int Niveau übergeben werden.

Ich Möchte keine Lösung sondern nur ein Schubs in die Richtige Richtung haben.
Da ich SCL betreffend eher Anfänger bin und es mir grad Aneignen will.
VAR_INPUT
Start: BOOL;
Voll: BOOL;
Leer: BOOL;
Ventil: BOOL;
Pumpe: BOOL;
END_VAR
VAR_OUTPUT
Niveau: INT;
END_VAR
VAR
Zyklus: INT;

END_VAR


IF Start AND Leer AND Pumpe THEN
Zyklus:=Zyklus+1;
IF Zyklus >100 THEN
Zyklus:=100;
Voll:=True;
Leer:=False;
Zyklus:=Niveau;
END_IF;
ELSE
IF Start AND Voll AND Ventil THEN
Zyklus:=Zyklus-1;
IF Zyklus<0 THEN
Zyklus:=0;
Voll:=False;
Leer:=True;
Zyklus:=Niveau;
END_IF;
END_IF;
END_FUNCTION_BLOCK

Nun wenn ich auf Übersetzen gehe kommen 3 Fehler
Unbekannte Anweisung
Unbekannte Anweisung
Baustein nicht korrekt

Wenn ich mit Doppelklick auf die Fehler gehe Springt er immer zu dem Begriff END_Function_Block

Ich danke schonmal im Vorraus
 
Du hast 4 If Funktionen aber nur 3x End_If.
Wenn ich das so sehe brauchst du gar keine Else Funktion. Die Funktionen können doch eigentlich unabhängig voneinander arbeiten. Also nach jeder IF auch ein End_If setzten.

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ausserdem hast du "Voll" und "Leer" als Input deklariert, greifst aber schreibend darauf zu.
Die Zuweisung von Zyklus := 100 bzw. Zyklus := 0 ist auch nutzlos, da in beiden Fällen danach Zyklus:=Niveau kommt.
Niveau hast du als Output deklariert, weist aber nirgends einen Wert zu.

Gruß
Dieter
 
Hallo ich habe da irgendwie ein Fehler in meiner Programmierung gemacht könnte mir bitte einer Helfen?
Hier ist der Baustein den ich Programmiert habe

Es soll in Abhängikeit von Start und voll und Pumpe ein Zyklus um 1 erhöht werden wenn der Zyklus 100 ist soll der wert der Var Leer = 0 und Voll = 1 werden und bei der 2 Anweisung genau andersrum desweiteren soll der wert von Zyklus an den Int Niveau übergeben werden.

Ich Möchte keine Lösung sondern nur ein Schubs in die Richtige Richtung haben.
Da ich SCL betreffend eher Anfänger bin und es mir grad Aneignen will.

...

Nun wenn ich auf Übersetzen gehe kommen 3 Fehler
Unbekannte Anweisung
Unbekannte Anweisung
Baustein nicht korrekt

Wenn ich mit Doppelklick auf die Fehler gehe Springt er immer zu dem Begriff END_Function_Block

Ich danke schonmal im Vorraus

Ohne auf Syntaxfehler o.a. zu schauen, fällt mir Folgendes ins Auge:

Code:
VAR_INPUT
    Start: BOOL;
    Voll: BOOL;
    Leer: BOOL;
    Ventil: BOOL;
    Pumpe: BOOL;
END_VAR
VAR_OUTPUT
    Niveau: INT;
END_VAR
VAR
    Zyklus: INT;
END_VAR


IF Start AND Leer AND Pumpe THEN
    Zyklus:=Zyklus+1;
    IF Zyklus >100 THEN
        Zyklus:=100;
        Voll:=True;
        Leer:=False;
[B][COLOR=#ff0000]         Zyklus:=Niveau; // << Kann es sein, dass du hier Niveau den Wert von Zyklus zuweisen willst und nicht anders herum. >>
[/COLOR][/B]    END_IF;
ELSE
    IF Start AND Voll AND Ventil THEN
        Zyklus:=Zyklus-1;
        IF Zyklus<0 THEN
            Zyklus:=0;
            Voll:=False;
            Leer:=True;
[B][COLOR=#ff0000]            Zyklus:=Niveau; // << s.O. >>[/COLOR][/B] 
        END_IF;
    END_IF;
[COLOR=#ff0000] [B]// << Hier fehlt was... >>[/B][/COLOR]
END_FUNCTION_BLOCK
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die Denkanstösse
habe es jetzt richtig gemacht
Niveau ist ein interner Wert welcher zu Test bzw. Simulationszwecken benötigt wird und es war totaler unsinn von mir nicht gleich mit niveau zu arbeiten
Voll und Leer sind output Variablen und nicht wie bei mir Inputs
Also im Groben und ganzen habe ich einiges Verstanden werde aber vermutlich noch öfters mal ne Frage stellen müssen
 
Zurück
Oben