Programmierfrage in ST, Integer in Menge enthalten

Blubblub

Level-1
Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

auf die Gefahr hin, eine sehr einfache Frage zu stellen:

Ich würde gerne im Programm abfragen, ob eine Variable einen von mehreren möglichen Werten angenommen hat. Dies würde so funktionieren, ist aber umständlich:

IF (x=1 OR x=5 OR x=13 OR x=14 OR x=22 OR x=46) THEN bedingung:=TRUE; END_IF;

Gibt es für den Ausdruck in der Klammer noch einen eleganteren Weg?

Ich bin mir sicher, dass es eine einfache Lösung gibt, aber ich hab es nicht gefunden.
Vielen Dank
 
Case sollte für eine Int auch gehen:

Code:
MyBool := False;

[COLOR=#333333]case x of[/COLOR]

[COLOR=#333333]   1, 5, 13, 14, 22, 46: MyBool := True;[/COLOR]

[COLOR=#333333]end_case;[/COLOR]
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Gefällt mir, die Antwort von Ralle. Insbesondere die MyBool Variable am Anfang sicher auf false zu setzen, somit leicht erweiterbar ohne Gefahr den ELSE Zweig zu vergessen.

Falls es aber um Speed geht, empfiehlt es sich eine ggf. tief geschachtelte IF ELSE Einzelabfrage Konstruktion zu machen, wo man die wahrscheinlichst häufigsten Fälle an den Anfang stellt.
 
Insbesondere die MyBool Variable am Anfang sicher auf false zu setzen ...
Das FALSE-Setzen entspricht aber nicht dem Code des TE.

Kann ja schließlich auch sein, dass das Rücksetzen durch eine ganz andere Bedingung erfolgt, als das Nichtvorhandensein der Setz-Bedingung.
Die wirkliche Bedingung für's Rücksetzen des Bits ist aus dem Code des TE nicht ersichtlich.
;)
 
Gefällt mir, die Antwort von Ralle. Insbesondere die MyBool Variable am Anfang sicher auf false zu setzen, somit leicht erweiterbar ohne Gefahr den ELSE Zweig zu vergessen.

Falls es aber um Speed geht, empfiehlt es sich eine ggf. tief geschachtelte IF ELSE Einzelabfrage Konstruktion zu machen, wo man die wahrscheinlichst häufigsten Fälle an den Anfang stellt.


In den IEC61131-3 Programmierkonventionen bei Beckhoff heisst es deswegen ja auch, dass man immer den Else -Zweig mit anfügen soll, auch wenn er keinen Code enthält. Vom lesen des Programms her wäre der Else-Zweig hier meiner Meinung nach auch die sauberere Lösung.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hätte auch einen Else Pfad aufgemacht,
Entweder einer der Bedingungen oder sonst false.
Der Code Editor schlägt es einen in TIA sogar so vor.

Case sollte für eine Int auch gehen:

Code:
[COLOR=#333333]case x of[/COLOR]

[COLOR=#333333]   1, 5, 13, 14, 22, 46: MyBool := True;[/COLOR]

Else

  MyBool := False;

[COLOR=#333333]end_case;[/COLOR]
 
Entweder einer der Bedingungen oder sonst false.
Das gibt der Code des TEs bis dato nicht vor.
Es könnte z.B. auch so aussehen:
Code:
CASE x OF
   1, 5, 13, 14, 22, 46: MyBool := True;
   3, 10:   MyBool := False;
END_CASE;
Reine Spekulation, alles möglich und völlig andere Funktion.
Wie die Rücksetzbedingung wirklich lautet, weiß nur der TE.


Alles, was der Code des TE bisher vorgibt:
IF (x=1 OR x=5 OR x=13 OR x=14 OR x=22 OR x=46) THEN bedingung:=TRUE; END_IF;
Code:
CASE x OF
   1, 5, 13, 14, 22, 46: bedingung := True;
END_CASE;
 
Also das hilft mir auf jeden fall weiter.
ich habe die ELSE-Bedingung nicht beigefügt, da es nicht Teil meines Problems ist und ich die Sache so einfach und klar wie möglich darzustellen.

Vielen Dank an die zahlreichen Helfer!
 
Zurück
Oben