FUNCTION_BLOCK FB 5000
TITLE =Tank Instrumentation
AUTHOR : WN
FAMILY : Tank
VERSION : 0.3
VAR_INPUT
Level_Transmitter : INT ;
Temp_Transmitter : INT ;
LAHHH_dig_IN : BOOL ;
LAHH_dig_IN : BOOL ;
LAH_dig_IN : BOOL ;
LAL_dig_IN : BOOL ;
LALL_dig_IN : BOOL ;
LALLL_dig_IN : BOOL ;
END_VAR
VAR_OUTPUT
LAHHH_out : BOOL ;
LAHH_out : BOOL ;
LAH_out : BOOL ;
LAL_out : BOOL ;
LALL_out : BOOL ;
LALLL_out : BOOL ;
TAHHH_out : BOOL ;
TAHH_out : BOOL ;
TAH_out : BOOL ;
TAL_out : BOOL ;
TALL_out : BOOL ;
TALLL_out : BOOL ;
Level : REAL ;
Percent : REAL ;
next : BOOL ;
END_VAR
VAR
LAHHH_analog : REAL := -1.000000e+000;
LAHH_analog : REAL := -1.000000e+000;
LAH_analog : REAL := -1.000000e+000;
LAL_analog : REAL := -1.000000e+000;
LALL_analog : REAL := -1.000000e+000;
LALLL_analog : REAL := -1.000000e+000;
LAHHH_digital : BOOL ;
LAHH_digital : BOOL ;
LAH_digital : BOOL ;
LAL_digital : BOOL ;
LALL_digital : BOOL ;
LALLL_digital : BOOL ;
LAHHH_delay : S5TIME := S5T#2S;
LAHH_delay : S5TIME := S5T#2S;
LAH_delay : S5TIME := S5T#2S;
LAL_delay : S5TIME := S5T#2S;
LALL_delay : S5TIME := S5T#2S;
LALLL_delay : S5TIME := S5T#2S;
LAHHH_hysteresis : REAL := 1.000000e+001;
LAHH_hysteresis : REAL := 1.000000e+001;
LAH_hysteresis : REAL := 1.000000e+001;
LAL_hysteresis : REAL := 1.000000e+001;
LALL_hysteresis : REAL := 1.000000e+001;
LALLL_hysteresis : REAL := 1.000000e+001;
TAHHH : REAL := -1.000000e+000;
TAHH : REAL := -1.000000e+000;
TAH : REAL := -1.000000e+000;
TAL : REAL := -1.000000e+000;
TALL : REAL := -1.000000e+000;
TALLL : REAL := -1.000000e+000;
LAHHH_dig_enable : BOOL ;
LAHH_dig_enable : BOOL ;
LAH_dig_enable : BOOL ;
LAL_dig_enable : BOOL ;
LALL_dig_enable : BOOL ;
LALLL_dig_enable : BOOL ;
TAHHH_enable : BOOL ;
TAHH_enable : BOOL ;
TAH_enable : BOOL ;
TAL_enable : BOOL ;
TALL_enable : BOOL ;
TALLL_enable : BOOL ;
max_level : REAL := 1.000000e+000;
min_level : REAL ;
max_temp : REAL := 1.000000e+002;
min_temp : REAL ;
Timer1 : "TON";
Timer2 : "TON";
Timer3 : "TON";
Timer4 : "TON";
Timer5 : "TON";
Timer6 : "TON";
END_VAR
VAR_TEMP
Level_Transmitter_Merker : REAL ;
Merker1 : REAL ;
Merker2 : INT ;
TEMP13 : BOOL ;
Temp_Transmitter_Merker : REAL ;
delay1 : BOOL ;
delay2 : BOOL ;
delay3 : BOOL ;
delay4 : BOOL ;
delay5 : BOOL ;
delay6 : BOOL ;
hysteresis1 : REAL ;
hysteresis2 : REAL ;
hysteresis3 : REAL ;
hysteresis4 : REAL ;
hysteresis5 : REAL ;
hysteresis6 : REAL ;
Merker_Timer1 : BOOL ;
Merker2_Timer1 : BOOL ;
Merker_Timer2 : BOOL ;
Merker_Timer3 : BOOL ;
Merker_Timer4 : BOOL ;
Merker_Timer5 : BOOL ;
Merker_Timer6 : BOOL ;
END_VAR
BEGIN
NETWORK
TITLE =Pre Transmitter & Pre Calculation
// Scale Level_Transmitter
CALL FC 105 (
IN := #Level_Transmitter,
HI_LIM := #max_level,
LO_LIM := #min_level,
BIPOLAR := FALSE,
RET_VAL := MW 0,
OUT := #Level_Transmitter_Merker);
// Scale Temp_Transmitter
CALL FC 105 (
IN := #Temp_Transmitter,
HI_LIM := #max_temp,
LO_LIM := #min_temp,
BIPOLAR := FALSE,
RET_VAL := MW 8,
OUT := #Temp_Transmitter_Merker);
//Load and Calulate the Level and the Percent
L #Level_Transmitter_Merker;
T #Level;
L #max_level;
L 1.000000e+003;
>=R ;
SPB M001;
L #max_level;
L 1.000000e+002;
>=R ;
SPB M002;
L #max_level;
L 1.000000e+001;
>=R ;
SPB M003;
L #max_level;
L 1.000000e+000;
>=R ;
SPB M004;
L #max_level;
L 1.000000e-001;
>=R ;
SPB M005;
L #max_level;
L 1.000000e-002;
>=R ;
SPB M006;
L #max_level;
L 1.000000e-003;
>=R ;
SPB M007;
M001: NOP 0;
L #Level;
L 1.000000e-001;
*R ;
T #Percent;
SPA M008;
// aus platzgründen entfernt. Prozent umrechnungen
M007: NOP 0;
L #Level;
L 1.000000e+005;
*R ;
T #Percent;
SPA M008;
M008: NOP 0;
//Set the delay function
L #LAHHH_delay;
L 0;
>I ;
= #delay1;
L #LAHH_delay;
L 0;
>I ;
= #delay2;
L #LAH_delay;
L 0;
>I ;
= #delay3;
L #LAL_delay;
L 0;
>I ;
= #delay4;
L #LALL_delay;
L 0;
>I ;
= #delay5;
L #LALLL_delay;
L 0;
>I ;
= #delay6;
//Set the hysteresis
L #LAHHH_hysteresis;
L 1.000000e+002;
/R ;
L #max_level;
*R ;
L #LAHHH_analog;
TAK ;
-R ;
T #hysteresis1;
L #LAHH_hysteresis;
L 1.000000e+002;
/R ;
L #max_level;
*R ;
L #LAHH_analog;
TAK ;
-R ;
T #hysteresis2;
L #LAH_hysteresis;
L 1.000000e+002;
/R ;
L #max_level;
*R ;
L #LAH_analog;
TAK ;
-R ;
T #hysteresis3;
L #LAL_hysteresis;
L 1.000000e+002;
/R ;
L #max_level;
*R ;
L #LAL_analog;
TAK ;
+R ;
T #hysteresis4;
L #LALL_hysteresis;
L 1.000000e+002;
/R ;
L #max_level;
*R ;
L #LALL_analog;
TAK ;
+R ;
T #hysteresis5;
L #LALLL_hysteresis;
L 1.000000e+002;
/R ;
L #max_level;
*R ;
L #LALLL_analog;
TAK ;
+R ;
T #hysteresis6;
NETWORK
TITLE =Mixing + Temperature ( Konfiguration 3) - Analog + digital
M015: NOP 0;
L -1.000000e+000;
L #LAHHH_analog;
>=R ;
SPB M030;
L #Level_Transmitter_Merker;
L #LAHHH_analog;
>=R ;
L #LAHHH_delay;
SE "Delay_Timer_HHH_analog";
U "Delay_Timer_HHH_analog";
S #LAHHH_out;
// Neu ausgetestet
// S #Merker_Timer1
// CALL FC 500
// Input :=#Merker_Timer1
// Zeit :=#LAHHH_delay
// Output:=#Merker2_Timer1
// U #Merker2_Timer1
// S #LAHHH_out
// CALL "TON" , DB2
// IN:=#Merker_Timer1
// PT:=#LAHHH_delay
// Q :=#LAHHH_out
// ET:=
L #Level_Transmitter_Merker;
L #hysteresis1;
<=R ;
R #LAHHH_out;
M030: NOP 0;
L -1.000000e+000;
L #LAHH_analog;
>=R ;
SPB M031;
L #Level_Transmitter_Merker;
L #LAHH_analog;
>=R ;
S #LAHH_out;
// CALL #Timer2
// IN:=#Merker_Timer2
// PT:=#LAHH_delay
// Q :=#LAHH_out
// ET:=
L #Level_Transmitter_Merker;
L #hysteresis2;
<=R ;
R #LAHH_out;
M031: NOP 0;
L -1.000000e+000;
L #LAH_analog;
>=R ;
SPB M032;
L #Level_Transmitter_Merker;
L #LAH_analog;
>=R ;
S #LAH_out;
// CALL #Timer3
// IN:=#Merker_Timer3
// PT:=#LAH_delay
// Q :=#LAH_out
// ET:=
L #Level_Transmitter_Merker;
L #hysteresis3;
<=R ;
R #LAH_out;
M032: NOP 0;
L -1.000000e+000;
L #LAL_analog;
>=R ;
SPB M033;
L #Level_Transmitter_Merker;
L #LAL_analog;
<=R ;
S #Merker_Timer4;
// CALL #Timer4
// IN:=#Merker_Timer4
// PT:=#LAL_delay
// Q :=#LAL_out
// ET:=
L #Level_Transmitter_Merker;
L #hysteresis4;
>=R ;
R #Merker_Timer4;
M033: NOP 0;
L -1.000000e+000;
L #LALL_analog;
>=R ;
SPB M034;
L #Level_Transmitter_Merker;
L #LALL_analog;
<=R ;
S #Merker_Timer5;
// CALL #Timer5
// IN:=#Merker_Timer5
// PT:=#LALL_delay
// Q :=#LALL_out
// ET:=
L #Level_Transmitter_Merker;
L #hysteresis5;
>=R ;
R #Merker_Timer5;
M034: NOP 0;
L -1.000000e+000;
L #LALLL_analog;
>=R ;
SPB M035;
L #Level_Transmitter_Merker;
L #LALLL_analog;
<=R ;
S #Merker_Timer6;
// CALL #Timer6
// IN:=#Merker_Timer6
// PT:=#LALLL_delay
// Q :=#LALLL_out
// ET:=
L #Level_Transmitter_Merker;
L #hysteresis6;
>=R ;
R #Merker_Timer6;
M035: NOP 0;
S #next;
BE ;
END_FUNCTION_BLOCK