FUNCTION "FC85 AE_Scale" : WORD
TITLE =Analogwert einlesen und normieren
//Der FC85 "Analogwert einlesen und normieren" unterscheidet sich von Standard
//FC105 dadurch, dass die Normierung auch bei Über- bzw. Unterschreitung des
//Nennbereiches noch funktioniert. Es wird nur (ab ca. der Mitte des Über- bzw.
//Untersteuerungsbereiches) eine Meldung ausgegeben:
//- BIE (Binärergebnis) wird auf "0" gesetzt
//- Ret_Val wird auf W#16#0008 gesetzt (wie bei FC105)
//
//Formel:
//OUT = [((FLOAT (IN) – K1)/(K2–K1)) * (HI_LIM–LO_LIM)] + LO_LIM
//
//K1 bipolar = -27648
//K1 unipolar = 0
//K2 = 27648
//K3 = K2-K1 K3 biploar = 0 K3 unipolar = 27648
//
//(c) Peter Wahlen
AUTHOR : Wahlen
NAME : Ana_Ein
VERSION : 1.0
VAR_INPUT
In : INT ; //Analog-Eingang
max : REAL ; //oberer Grenzwert (bei max. Nennbereicheingang)
min : REAL ; //unter Grenzwert (bei min. Nennbereicheingang)
Bipolar : BOOL ; //0=unipolar (0 bis 10V), 1=bipolar (-10 bis +10V)
END_VAR
VAR_OUTPUT
Out : REAL ; //normierter Analogwert
END_VAR
VAR_TEMP
K1 : REAL ; //Konstante 1 (unipolar: 0, Bipolar: -27648)
K3 : REAL ; //Konstante 3 (K2-K1)
MaxMin : REAL ; //HM Max Grenzwert - Min Grenzwert
gr_min : INT ; //HM Minimaler Grenzwert
END_VAR
BEGIN
NETWORK
TITLE =Konstanten zur Berechnung setzen
U #Bipolar; // Bipolar angewählt
SPB bipo; // dann Sprung
L 0.000000e+000; // K1 auf 0
T #K1;
L 2.764800e+004; // K3 auf 27648
T #K3;
L -2000; // Minimaler Grenzwert auf -2000
SPA kon3;
bipo: L -2.764800e+004; // K1 auf -27648
T #K1;
L 0.000000e+000; // K3 auf 0
T #K3;
L -30000; // Minimaler Grenzwert auf -30000
kon3: T #gr_min; // Minimaler Grenzwert setzen
NETWORK
TITLE =Eingangswert normieren
L #max; // HM Max Grenzwert - Min Grenzwert
L #min;
-R ;
T #MaxMin;
L #In; // Eingangswert nach Real wandeln
ITD ;
DTR ;
L #K1;
-R ;
L #K3;
/R ;
L #MaxMin;
*R ;
L #min;
+R ;
T #Out;
NETWORK
TITLE =Grenzwertüberprüfung
U( ;
L 30000; // Obergrenze
L #In;
>I ;
) ;
U( ;
L #gr_min; // Untergrenze
>I ;
) ;
SPBB io;
L W#16#8;
SPA ende;
io: L 0;
ende: T #RET_VAL;
END_FUNCTION