IF Befehl wird als Fehler angezeigt

benschi_1605

Level-1
Beiträge
1
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
Ich bin gerade dabei für meine Abschlussarbeit ein Projekt zu Programmieren im B&R Automation Studio V4.11

und hier verwende ich IF und ELSIF Befehle.
Mein Problem: bei dem ELSIF und END_IF befehl wird mir dies als Fehler angezeigt und ich weiß nicht weshalb. Weiß jemand den Grund dafür?
Programmfehler 3.PNG
 
= FALSE und = TRUE Abfragen kannst du dir "sparen"

für = TRUE brauchst du nur IF <Variable> THEN
für = FALSE kannst du einfach IF (NOT <Variable>) verwenden

Nach dem END_IF brauchst du noch ein Semikolon.. also END_IF;

Mehr Infos zu ST unter B&R findest du hier
 
Beim END_IF fehlt das Semikolon, also: END_IF;

Logisch macht das ELSIF allerdings keinen Sinn, weil es schon komplett durch die IF-Bedingung abgedeckt ist und daher die ELSIF-Bedingung nie erfüllt werden kann.

Warum hast du deine Frage unter SIEMENS Simatic gepostet? Dein Programm ist doch für B&R Automation Studio V4.11? Oder nicht?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zeile 5: =>kenne ich nur von Ausgangsparametern. Vermutlich bei Dir :=
Zeile 8: Du schreibst im Kommentar von 5s, also PT:=T#5s, darüber hinaus: was soll im Namen dann TON_10ms? Außerdem ist das anscheinend nur eine einmalige Einschaltverzögerung. Soll das so sein bei "Schrankenbetrieb"?

Bezüglich Deinem Takt: Du bist Dir schon im Klaren, daß Du damit den Takt im Zyklus-Takt des Programm änderst? Wenn das eine Hupe ansteuern soll, ist das vermutlich viel zu schnell...
Du könntest das übrigens besser so schreiben:


Code:
IF Waage > 0 AND NOT Schranken THEN
   Takt := NOT Takt;
END_IF;

So wie Du das geschrieben hast, wird die ELSIF-Bedingung niemals ausgeführt.

Wenn Du aber tatsächlich einen Takt haben möchtest für eine Ausgabe, nutze lieber einen Timer, mit dem Du genaue Taktlängen angeben kannst.
 
Logisch macht das ELSIF allerdings keinen Sinn, weil es schon komplett durch die IF-Bedingung abgedeckt ist und daher die ELSIF-Bedingung nie erfüllt werden kann.
ELSIF ist aber nicht so unnütz, wie es manchmal erscheinen mag:
Code:
// Folgendes funktioniert NICHT ...
IF gemeinsames THEN
    X := Y ; // ... weil dieser Zweig IMMER durchlaufen wird, wenn 'gemeinsames'
ELSIF gemeinsames AND spezielles THEN
    X := Z ; // ... weil dieser Zweig NIE durchlaufen wird wegen siehe IF
END_IF ;

// aber Folgendes funktioniert ...
IF gemeinsames AND spezielles THEN
    X := Z ;
ELSIF gemeinsames THEN
    X := Y ; // ... denn dieser Zweig wird durchlaufen, wenn 'gemeinsames AND NOT spezielles'
END_IF ;

// und sogar Folgendes funktioniert (trotz "sparsamerer" Abfragen) ...
IF NOT gemeinsames THEN
    ; // nix tun und fertig! ;o)
ELSIF spezielles THEN
    X := Z ; // ... denn dieser Zweig wird durchlaufen, wenn 'gemeinsames AND spezielles'
ELSE
    X := Y ; // ... denn dieser Zweig wird durchlaufen, wenn 'gemeinsames AND NOT spezielles'
END_IF ;
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die rote Farbe ELSIF bedeutet das du ein ungültiges Schlüsselwort benutzt.
Du hast bei der Programmauswahl "Automation Basic" als Sprache ausgewählt. In der Programmsprache gibt es ELSIF nicht.
Ziehe einfach ein neues "ST Programm" in dein Projekt und kopiere deinen Code dort ein.
Oder wenn du ein All in One Programm aus gewählt hast kannst die Main.ab einfach in Main.st umbennen.

PS: Bei B&R benötigt END_IF kein Semikolon am Ende
 
Zurück
Oben