ST Anfänger braucht Hilfe

fstoiber

Level-1
Beiträge
27
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, habe ein Anfänger Problem...
wer kann mir bitte kurz helfen?

wie muss ich das = 1, >=2 oder = 0 eingeben, damit kein Fehler kommt?

Code:
FUNCTION_BLOCK FB_test
VAR_INPUT
    ausgangIntern: BOOL;
    ausgangExtern: BOOL;
END_VAR
VAR_OUTPUT
    ausgangInternOK: INT;
    ausgangExternOK: INT;
    ArtOK: BOOL;
END_VAR
VAR
    ArtOKZahl: INT;
END_VAR
Code:
IF ausgangIntern = TRUE THEN ausgangInternOK  :=1;
ELSIF ausgangIntern = FALSE THEN ausgangInternOK  :=0;  END_IF;

IF ausgangExtern = TRUE THEN ausgangExternOK  :=1;
ELSIF ausgangExtern = FALSE THEN ausgangExternOK  :=0;  END_IF;

IF ausgangExternOK ADD ausgangInternOK THEN ArtOKZahl END_IF;
IF ArtOKZahl = 1 THEN ArtOK = TRUE
ELSIF ArtOKZahl = 0 OR >=2 THEN  ArtOK = FALSE  END_IF;

MfG Florian
 
Boolsche Variablen brauchen nicht auf "= True" oder "= FALSE" abgefragt werden, um ein Vergleichsergebnis TRUE oder FALSE zu erhalten. Sie stellen selber schon TRUE oder FALSE dar.
Es reicht also die Kurzform:
Code:
IF ausgangIntern THEN ...

bzw. für FALSE:
Code:
IF NOT ausgangIntern THEN ...


Für die reine Übertragung des Bool-Wertes in eine INT-Variable ist ein aufwendiges IF-Konstrukt auch nicht nötig:
Code:
ausgangInternOK  := Bool_To_Int (ausgangIntern);


Bei mehreren Vergleichen muss jeder für sich voll ausgeschrieben werden:
Code:
...
ELSIF ArtOKZahl = 0 OR ArtOKZahl >=2 THEN ...
wobei sich dass in Deinem Fall vermutlich auch wieder schon automatisch durch den TRUE-Vergleich ergibt.
Einer boolschen Variablen kann man nur TRUE oder FALSE zuweisen. Welchen Wert soll sie denn annehmen, wenn ArtOKZahl kleiner 0 ist?
Ich vermute mal, dass dieser Fall gar nicht vorkommen soll. Wenn dem so ist, braucht man wieder kein IF-Konstrukt, sondern eine einfache Zuweisung:
Code:
ArtOK := ArtOKZahl = 1;
Wenn ArtOKZahl einen anderen Wert als 1 hat, ist ArtOK durch die Zuweisung FALSE.


PS: Es ist immer gut, sich zu überlegen, ob man überhaupt ein IF benötigt oder sich das durch 'ne Zuweisung nicht einfacher lösen läßt.
IF wird leider in viel zu vielen Programmen geradezu inflationär verwendet und stellt in meinen Augen ein modernes "GOTO" dar.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Super danke,

habe es jetzt so angepasst.

Code:
ausgangInternOK  := BOOL_TO_INT (ausgangIntern);
ausgangExternOK  := BOOL_TO_INT (ausgangExtern);

ArtOKZahl := ausgangExternOK + ausgangInternOK;
ArtOK := ArtOKZahl = 1;

MfG Florian
 
Brauchst Du die INT-Werte noch für was anderes?
Ansonsten wäre das doch ein einfaches XOR:
Code:
ArtOK := ausgangIntern XOR ausgangExtern;


PS: Dein Code ist doch schon um ein vielfaches besser lesbar als das IF-Gewurstel oben, oder?
;)
 
Zuletzt bearbeitet:
Zurück
Oben