Warum generell? Es kommt doch darauf an ... will man abfragen, ob ... oder sicherstellen, dass ... der Wert in einem bestimmten Bereich liegt!?
Er will...sicherstellen, dass...
Moin Berni,
dennoch vermutet meine Glaskugel, dass Du "nur" abfragen willst, ob der Istwert im Bereich Sollwert ± Toleranz liegt.
Will sagen, dass Du auf der Suche nach einem BOOLeschen Ausdruck bist, der Dir Deine Frage, ob der Istwert zwischen Sollwert - Toleranz und Sollwert + Toleranz liegt, mit Ja (True) bzw. Nein (False) beantwortet.
Dafür hatte ich in SCL einen LösungsVorschlag angegeben.
Mein Tipp für "Frischlinge": bitte nicht denken "oh, das ist ja SCL und das verstehe ich sowieso [noch] nicht", sondern einfach lesen und versuchen, zu verstehen.
Manchmal bis oft gelingt das auf Anhieb - auch ohne Vorkenntnisse!
Für ProgrammierAnfänger ist es wichtig, den Begriff 'WertZuweisung' (Darstellung in SCL ':=') kennenzulernen und zu verstehen.
'x := x + 1' z.B. ist keine Formel, die darauf wartet, nach 'x' aufgelöst zu werden, sondern eine WertZuweisung, die dem Computer sagt, er soll das, was rechts von ':=' steht, ausrechnen und dann das Ergebnis in die Variable 'x' speichern.
Es ist also nicht eine Gleichung gemeint, die ja in diesem Fall ( x = x + 1 ) so gar nicht stimmen kann.
Für "Umsteiger" von einer "HochSprache" (was auch immer das sein mag) auf die SPS-Programmierung ist auch folgende Erkenntnis wichtig *) :
BOOLesche Werte lassen sich nicht nur in Abfragen ('IF', 'CASE', 'WHILE' u.s.w.) verwenden, sondern man kann damit "rechnen".
Zwar nicht wie mit Zahlen, aber in 'logischen Verknüpfungen' (mit 'NOT', 'AND', 'OR' oder mit daraus zusammengesetzten Operatoren 'NAND, 'NOR', 'XOR' u.s.w.).
Und als Operanden kommen dafür auch alle Funktionen in Frage, die einen BOOLeschen Wert "zurückgeben", z.B. und insbesondere VergleichsErgebnisse ('x > y', 'x >= y', 'x < y', 'x <= y', 'x <> y' und 'x = y').
Wird damit klar, was ich mit 'passt := ((Soll - x) <= Ist) AND (Ist <= (Soll + x)) ;' gemeint habe (habe hier noch zusätzliche Klammern eingefügt)?
Übrigens: die "umgangssprachliche" Formulierung 'der IstWert ist grösser oder gleich dem Sollwert minus Toleranz und kleiner oder gleich dem Sollwert plus Toleranz' wird nicht toleriert - wo wir schonmal von Toleranz sprechen.
Der Istwert soll nämlich mit zwei anderen Werten verglichen werden und muss deshalb auch in beiden Vergleichen vorkommen:
'der IstWert ist grösser oder gleich dem Sollwert minus Toleranz und
der IstWert ist kleiner oder gleich dem Sollwert plus Toleranz' muss es also korrekterweise heissen.
Sooo, das war das Thema "abfragen". Was ich mit "sicherstellen" gemeint hatte, ist anscheinend falsch "rübergekommen".
Die Funktion LIMIT gibt keinen BOOLeschen Wert zurück. Sie stellt sicher, dass der ZahlenWert des Ergebnisses im vorgegebenen ZahlenBereich liegt. Sie begrenzt das Ergebnis.
Nur, wenn der Istwert im vorgegebenen Bereich ((Sollwert - Toleranz) <= Istwert <= (Sollwert + Toleranz)) liegt, wird er unverändert "durchgereicht".
Ist er jedoch kleiner als der untere Grenzwert, so erscheint als Ergebnis der untere Grenzwert.
Ist er grösser als der obere Grenzwert, so erscheint als Ergebnis der obere Grenzwert. Das Ergebnis der LIMIT-Funktion liegt immer im ToleranzBereich.
Das Ergebnis ist also so noch keine Antwort auf die Frage 'liegt der Istwert im ToleranzBereich?'. Um das zu erreichen, müsste man das Ergebnis der LIMIT-Funktion noch mit dem Istwert vergleichen.
Sorry vielstmals, wenn ich mich im Ton vergriffen hatte und Du Dich auf die Füsse getreten gefühlt hast. Ich klinge vielleicht hin und wieder etwas bissig, bin es aber gar nicht!
Selbstverständlich darfst Du Dich gerne wieder mit Fragen/Aufgaben ans Forum wenden - schliesslich sind wir alle Anfänger ... nicht auf allen, aber auf vielen Gebieten!
Gruss, Heinileini
*) Eigentlich liegt es nicht an den "HochSprachen" selbst, die dies normalerweise auch alle können - irgendwie scheitert's daran, dass diese Fähigkeiten ziemlich regelmässig in Programmier-Kursen und -Unterlagen zu kurz kommen oder ganz verschwiegen werden.