Autor Thema: FB Grenzwertüberwachung mit Hysterese  (Gelesen 10650 mal)

Offline radar17892

  • Sr. Member
  • ****
  • Beiträge: 789
  • Think easy!
    • mollgruppe
FB Grenzwertüberwachung mit Hysterese
« am: März 17, 2017, 18:12:19 Nachmittag »
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
« Letzte Änderung: März 17, 2017, 18:13:52 Nachmittag von radar17892 »
Weil Einfach einfach Einfach ist!