Erstmal überlegen, welche (Fehler-)Fälle denkbar sind, die zu deutlich anderen Werten führen, als die Fälle des NormalBetriebs.
Normalerweise ist es sinnvoll, die Über- oder Unterschreitung der Werte für eine gewisse (nicht zu lange) Zeit zu tolerieren.
Wahrscheinlich wirst Du nicht mit dem Vergleich auf einen MinimalWert und auf einen MaximalWert auskommen.
Hierbei können wir Dir nicht helfen. Das kannst nur Du bzw. jemand entscheiden, der die SollZustände und die entsprechenden ToleranzBereiche der Maschine/Anlage kennt. Evtl. sind dabei verschiedene Situationen zu unterscheiden, z.B. Unterschiede zwischen Automatik- und HandBetrieb.
Du schreibst, Du sollst mehrere AnalogWerte prüfen. Wahrscheinlich geht es dabei um mehrere ganz verschiedene Sachverhalte/physikalische Grössen, so dass Du nicht alle nach demselben Schema "abfertigen" kannst.
Bei den Gradienten geht es um die ÄnderungsGeschwindigkeit der AnalogWerte. Hier gilt auch, dass Du Dich an den Gegebenheiten der Maschine/Anlage orientieren musst und nicht an einem von uns erdachten "PatentRezept".
Ich sehe eigentlich auch nicht, warum man strikt nach Plausibilität und Gradient sortieren sollte. Auch zur Überwachung von Gradienten dürften meistens PlausibilitätsPrüfungen sinnvoll bis unerlässlich sein.
Zur Programmierweise Deiner Beispiele:
Statt ...
Code:
IF Messwert <= -500 THEN
Unterschreitung_Fehler := TRUE ; // (Drahtbruch)
ELSE
Unterschreitung_Fehler := FALSE ;
END_IF ;
... kann man einfacher ...
Code:
Unterschreitung_Fehler := Messwert <= -500 ; // (Drahtbruch)
... schreiben. Es gibt keinen Grund, hier den Umweg über IF und ELSE zu wählen.
Ich schreibe Dein Beispiel mal etwas anders, vielleicht wird es dadurch klarer:
Code:
Bedingung := Messwert <= -500 ;
IF Bedingung THEN
Unterschreitung_Fehler := Bedingung ; // (Drahtbruch)
ELSE
Unterschreitung_Fehler := Bedingung ;
END_IF ;