Hallo Leute,
ich stelle euch einen weiteren Baustein aus meiner Sammlung vor.
Er ist zum überwachen von INT- Analogwerten auf Ober- und Umtergrenze gedacht, kann aber auch als Schwellwertschalter mit zwei Schaltpunkten genutzt werden. Durch die einstellbare Hysterese ist er vielseitig verwendbar.
Die Sollwerte werden einfach auf logische Korrektheit überwacht.
FUNCTION_BLOCK OU_Grenzwert
(*
##################################################################################
Programmbeschreibung:
Grenzwertüberwachung eines INT-Wertes Oben+Unten mit Hysterese
vereint die Funtionen von LIMITALARM und HYSTERESIS
Wirkungsweise: überschreitet IN HL, so wird OL true und IL false. Erst wenn IN kleiner als HL-HY wird,
schaltet OL wieder auf false. Nach unten funktioniert es in gleicher Weise.
Hinweis: OL-HY > UL+HY und HY >0 wird Fehler überwacht
benötigt:
##################################################################################
Änderungsindex
Name: TL Datum: 14.03.2015 Version:0.1 Grund: neu
##################################################################################
*)
VAR_INPUT
IN: INT; (*Input*)
HL: INT; (*Obergrenze*)
LL: INT; (*Untergrenze*)
HY: USINT := 1; (*Hysterese 1-255*)
END_VAR
VAR_OUTPUT
OL: BOOL; (*Grenzwert überschritten*)
IL: BOOL; (*Im Limit*)
UL: BOOL; (*Grenzwert unterschritten*)
Err: BOOL; (*Fehler*)
END_VAR
VAR
H: INT; (*obere Schaltschwelle*)
L: INT; (*untere Schaltschwelle*)
END_VAR
##############################################
(*Begrenzung Wertebereich und Fehlerüberwachung*)
H:=LIMIT(-32768, HL - HY, 32767);
L:=LIMIT(-32768, LL + HY, 32767);
IF (H > L) AND (HY > 0)
THEN Err:= FALSE;
ELSE Err:= TRUE; RETURN;
END_IF
(*obere Schaltschwelle*)
IF IN >= HL
THEN OL:= TRUE;
ELSIF IN < H
THEN OL:= FALSE;
ELSE ;
END_IF
(*Im Limit*)
IF (IN < HL AND IN > LL) AND NOT (UL OR OL)
THEN IL:= TRUE;
ELSE IL:= FALSE;
END_IF
(*untere Schaltschwelle*)
IF IN <= LL
THEN UL:= TRUE;
ELSIF IN > L
THEN UL:= FALSE;
ELSE ;
END_IF
Viel Spass damit!
LG Thomas