Autor Thema: Temperaturerfassungsbaustein  (Gelesen 3445 mal)

Offline radar17892

  • Full Member
  • ***
  • Beiträge: 430
  • Think easy!
Temperaturerfassungsbaustein
« am: Oktober 25, 2014, 17:57:28 Nachmittag »
Hallo Leute,
hier ein Beispiel für einen FB zur Verarbeitung von Temperatursensoren

FUNCTION_BLOCK Signalwandler
(*
##################################################################################
Programmbeschreibung:
Beruhigung des Sensorwertes und Umwandlung der INT Analogsignale auf den entspechenden Messbereich
Fehlerausgabe wenn EN=1 bei überschreiten der Grenzwerte
Drahtbruch ist von EN unabhängig
Unabhängig von Emergancy-Telegrammen des Feldbuses
Benötigte Bibliothek: util.lib; easy800d.lib
##################################################################################
Änderungsindex
Name: TL Datum: 30.09.2012
Grund:   für alle INT Analogwerte (Temperaturen) verwendbar
##################################################################################
*)
VAR_INPUT
IN: INT; (*Analogeingang*)
MBu: INT; (*Messbereich unten in 0,1°C*)
MBo: INT; (*Messbereich oben in 0,1°C*)
GWu: INT; (*Grenzwert unten bezogen auf  output*)
GWo: INT; (*Grenzwert oben bezogen auf  output*)
EN: BOOL; (*Bei EN=0 Unterdrückung OL/UL Fehler*)
Offset: SINT; (*Offset zum Ausgangswert in 0,1°C*)
END_VAR
VAR_OUTPUT
out: INT; (*Skalierter Sensorwert in 0,1°C*)
E_GWu: BOOL; (*1=Meldung Grenzwertunterschreitung*)
E_GWo: BOOL; (*1=Meldung Grenzwertüberschreitung*)
Err: BOOL; (*1=Sensorfehler/ Drahtbruch/Überlauf*)
END_VAR
VAR
Trafo: LIN_TRAFO; (*Signalanpassung*)
Alarm: LIMITALARM; (*Grenzwertüberwachung*)
Filter: FT; (*PT1 Signalfilter für analogen Rohwert(easy800d.lib)*)
Err_Level: INT := 5; (*Grenzwert für Erkennung Sensorfehler/Drahtbruch*)
END_VAR
############################################################

(*Messwertberuhigung*)
Filter(
EN:= TRUE,
I1:= IN,
TG:= 60,
KP:= 100,
Dummy=> ,
QV=> );
(*Scalierung(16Bit) (bei 10Bit EC4P AI IN_MAX ->1023 ändern)*)
Trafo(
IN:= Filter.QV,
IN_MIN:= 0,
IN_MAX:= 32767,
OUT_MIN:= MBu,
OUT_MAX:= MBo,
OUT=> ,
ERROR=> );
(*Wert mit Offset ausgeben*)
out:=Offset + REAL_TO_INT (Trafo.OUT);
(*Drahtbruchüberwachung*)
IF (Filter.QV < Err_Level) OR Trafo.ERROR THEN
Err:= TRUE;
ELSE
Err:= FALSE;
END_IF
(*Grenzwertüberwachung*)
Alarm(
IN:= out,
HIGH:= GWo,
LOW:= GWu,
O=> ,
U=> ,
IL=> );
E_GWo:=EN AND Alarm.O;(*1=GWo überschritten*)
E_GWu:=EN AND Alarm.U;(*1=GWu unterschritten*)

Have a lot of fun!
« Letzte Änderung: Juni 27, 2015, 23:32:09 Nachmittag von radar17892 »
Weil Einfach einfach Einfach ist!

Offline radar17892

  • Full Member
  • ***
  • Beiträge: 430
  • Think easy!
Re:Temperaturerfassungsbaustein
« Antwort #1 am: Juni 27, 2015, 23:39:11 Nachmittag »
Eine überarbeitete Version mit Grenzwerthysterese und eigenem PT1-Filter

FUNCTION_BLOCK Signalwandler
(*
##################################################################################
Programmbeschreibung:
Umwandlung der INT Analogsignale auf den entspechenden Messbereich
und Fehlerausgabe wenn EN=1 bei überschreiten der Grenzwerte
Drahtbruch ist von EN unabhängig
benötigt: FB PT1_Filter, util.lib
Getestet auf XV100
##################################################################################
Änderungsindex
Name: TL Datum: 31.05.2013 Version:0.2 Grund:   für alle Analogwerte verwendbar
Name: TL Datum: 20.06.2013 Version:0.3 Grund:   Hysterese für Grenzwerte + real_out eingefügt
##################################################################################
*)
VAR_INPUT
IN: INT; (*Analogeingang*)
MBu: INT; (*Messbereich unten*)
MBo: INT; (*Messbereich oben*)
GWu: INT; (*Grenzwert unten bezogen auf  output*)
GWo: INT; (*Grenzwert oben bezogen auf  output*)
EN: BOOL; (*Bei EN=0 Unterdrückung OT/UT Fehler*)
Offset: SINT; (*Offset zum Ausgangswert*)
Cy: INT; (*Zykluszeit in ms*)
END_VAR
VAR_OUTPUT
out: INT; (*Skalierter Sensorwert INT*)
Out_real: REAL; (*Skalierter Sensorwert REAL*)
E_GWu: BOOL; (*1=Meldung Grenzwertunterschreitung*)
E_GWo: BOOL; (*1=Meldung Grenzwertüberschreitung*)
Err: BOOL; (*1=Sensorfehler/ Drahtbruch*)
END_VAR
VAR
Trafo: LIN_TRAFO; (*Signalanpassung*)
Filter: PT1_Filter; (*PT1 Signalfilter für analogen Rohwert*)
OL: HYSTERESIS; (*Grenzwertüberwachung oberes Limit*)
UL: HYSTERESIS; (*Grenzwertüberwachung unteres Limit*)
Err_Level: INT := 5; (*Grenzwert für Erkennung Sensorfehler/Drahtbruch*)
GW_Hyst: INT :=10; (*Grenzwerthysterese*)
END_VAR

##########################################################
(*Messwertberuhigung*)
Filter(
EN:= TRUE,
IN:= IN,
TC:= 6,
Cycle:= Cy,
OUT=> );
(*Scalierung(XN/XNE 16Bit) (bei 10Bit EC4P AI IN_MAX ->1023 ändern)*)
Trafo(
IN:= Filter.OUT,
IN_MIN:= 0,
IN_MAX:= 32767,
OUT_MIN:= MBu,
OUT_MAX:= MBo,
OUT=> ,
ERROR=> );
(*Wert mit Offset ausgeben*)
Out_real:=Trafo.OUT + SINT_TO_REAL (Offset);
out:=REAL_TO_INT(Out_real);
(*Drahtbruchüberwachung: (Messwert fällt unter einen Wert, den er praktisch nie erreichen sollte
oder Überlauf Scalierung)*)
IF (Filter.OUT < Err_Level) OR Trafo.ERROR THEN
Err:= TRUE;
ELSE
Err:= FALSE;
END_IF
(*Grenzwertüberwachung*)
OL(IN:= out, HIGH:= GWo, LOW:= (GWo - GW_Hyst), OUT=> ); (*oberes Limit mit Hysterese*)
UL(IN:= out, HIGH:= (GWu + GW_Hyst), LOW:= GWu, OUT=> ); (*unteres Limit mit Hysterese*)
E_GWo:=EN AND NOT OL.OUT; (*1=GWo überschritten*)
E_GWu:=EN AND UL.OUT; (*1=GWu unterschritten*)

Im Bild ein Bsp. der Außenschnittstelle des FB in CFC
In dieser Konfiguration ein PT100 über Messverstärker 0-200°C / 4-20mA auf einem Analogeingang XNE8U/I/PT Modul
« Letzte Änderung: Juni 20, 2016, 10:28:23 Vormittag von radar17892 »
Weil Einfach einfach Einfach ist!