Ich habe ein Problem mit der LIMIT-Funktion zum Begrenzen eines Wertebereichs:
Ich benutze diese Funktion, um den Wertebereich bei einer Eingabe zu limitieren. Die Eingangsvariable ist als BYTE deklariert, die Bedienung erfolgt mittels
AUF-/AB- Tasten zwischen 0 und 9 (ich kann systembedingt die tollen Eingabemöglichkeiten auf der VISU nicht nutzen, darum werden schlicht 2 Tasten
abgefragt).
Mein Problem besteht nun darin, dass bei einer Beschränkung der unteren Grenze auf "0" der Wert dennoch unterschritten werden kann, und der Wert auf
"9" (obere Grenze) springt. Das passiert tatsächlich immer nur bei einer Grenze "0", bei allen anderen Werten klappt das immer!
Der Code für die beiden Tasten sieht so aus:
CASE M_KEY OF ( Abfrage der Eingabetasten )
1: X:= LIMIT(0, X + 1, 9); ( Aufwärtszähler )
2: X:= LIMIT(0, X - 1, 9); ( Abwärtszähler )
END_CASE
Wie kann ich diesen Fehler abfangen?
Grüße aus dem Alpenland!
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo an die Runde!
Ich habe ein Problem mit der LIMIT-Funktion zum Begrenzen eines Wertebereichs:
Ich benutze diese Funktion, um den Wertebereich bei einer Eingabe zu limitieren. Die Eingangsvariable ist als BYTE deklariert, die Bedienung erfolgt mittels
AUF-/AB- Tasten zwischen 0 und 9 (ich kann systembedingt die tollen Eingabemöglichkeiten auf der VISU nicht nutzen, darum werden schlicht 2 Tasten
abgefragt).
Mein Problem besteht nun darin, dass bei einer Beschränkung der unteren Grenze auf "0" der Wert dennoch unterschritten werden kann, und der Wert auf
"9" (obere Grenze) springt. Das passiert tatsächlich immer nur bei einer Grenze "0", bei allen anderen Werten klappt das immer!
Der Code für die beiden Tasten sieht so aus:
CASE M_KEY OF ( Abfrage der Eingabetasten )
1: X:= LIMIT(0, X + 1, 9); ( Aufwärtszähler )
2: X:= LIMIT(0, X - 1, 9); ( Abwärtszähler )
END_CASE
Wie kann ich diesen Fehler abfangen?
Grüße aus dem Alpenland!
Hallo Hepo,
das Problem ist das vorzeichenlose Byte, denn
0 - 1 = 255 und in deinem Fall oben auf 9 begrenzt.
Wenn du SINT verwendest, funktioniert es.
Oder du schreibst es so:
IF M_KEY = 1 AND X < 9 THEN
X:=X+1;
END_IF
IF M_KEY = 2 AND X > 0 THEN
X:=X-1;
END_IF
Grüße
Frank