FUNCTION_BLOCK "SYS_SIM_TEGESLICHT"
TITLE =SYS SYM TAGESLICHT
VERSION : 0.1
VAR_INPUT
ENABLE : BOOL ; //Freigabe Licht
HAND : BOOL ; //Licht Händisch ein
EINSCHALTDAUER : REAL ; //Dauer die das Licht leuchten soll in h(bei der hälfte ist 100% erreicht)
CYCLE : INT ; //Aktuelle Zykluszeit
END_VAR
VAR_OUTPUT
ON_OFF : BOOL ; //Ausgang Licht (Schütz odgl)
VALUE : INT ; //Ansteuerung Analogmodul
IST : INT ; //Istwert Licht in %
END_VAR
VAR_IN_OUT
START : BOOL ; //Start Automatik
END_VAR
VAR
_flanke : ARRAY [1 .. 8 ] OF BOOL ;
TEMP_SOLL : REAL ;
GAIN : REAL ;
TEMP_DAUER : REAL ;
AUS : BOOL ;
END_VAR
VAR_TEMP
_real : REAL ;
END_VAR
BEGIN
NETWORK
TITLE =Keine Freigabe Sollwert abnullen Licht aus
UN #ENABLE;
UN #HAND;
SPBN _001;
L 0;
T #VALUE;
T #IST;
L 0.000000e+000;
T #GAIN;
T #TEMP_SOLL;
T #TEMP_DAUER;
SET ;
R #ON_OFF;
R #AUS;
R #START;
SAVE ;
BEB ;
_001: NOP 0;
NETWORK
TITLE =Licht Händisch ansteuerun aif 100%
U #HAND;
SPBN _002;
L 27648;
T #VALUE;
L 100;
T #IST;
SET ;
= #ON_OFF;
SAVE ;
BEB ;
_002: NOP 0;
NETWORK
TITLE =Platzhalter
//--------------------------------------------------------------------------------
// Ablauf Automatik
//--------------------------------------------------------------------------------
//
NETWORK
TITLE =Start Licht ein
U #START;
FP #_flanke[1];
= L 4.0;
U L 4.0;
SPBNB _003;
L 0.000000e+000;
T #TEMP_SOLL;
_003: NOP 0;
U L 4.0;
SPBNB _004;
L 0.000000e+000;
T #GAIN;
_004: NOP 0;
U L 4.0;
SPBNB _005;
L 0.000000e+000;
T #TEMP_DAUER;
_005: NOP 0;
U L 4.0;
SPBNB _006;
L 0.000000e+000;
T #_real;
_006: NOP 0;
U L 4.0;
BLD 102;
R #AUS;
NETWORK
TITLE =Leuchtdauer Halbe
U( ;
U #START;
SPBNB _007;
L #EINSCHALTDAUER;
L 2.000000e+000;
/R ;
T #TEMP_DAUER;
UN OV;
SAVE ;
CLR ;
_007: U BIE;
) ;
SPBNB _008;
L #TEMP_DAUER;
L 3.600000e+006;
*R ;
T #TEMP_DAUER;
_008: NOP 0;
NETWORK
TITLE =Schrittweite
U #START;
SPBNB _009;
L 2.764800e+004;
L #TEMP_DAUER;
/R ;
T #GAIN;
_009: NOP 0;
NETWORK
TITLE =Aktuele Zykluszeit einbeziehen
CLR ;
L #CYCLE;
ITD ;
DTR ;
L #GAIN;
*R ;
T #_real;
NETWORK
TITLE =Ausgang Aufsummieren Einschalten
U #START;
UN #AUS;
SPBNB _00a;
L #TEMP_SOLL;
L #_real;
+R ;
T #TEMP_SOLL;
_00a: NOP 0;
NETWORK
TITLE =Ausgang Subtrahieren Auschalten
U #START;
U #AUS;
SPBNB _00b;
L #TEMP_SOLL;
L #_real;
-R ;
T #TEMP_SOLL;
_00b: NOP 0;
NETWORK
TITLE =100% erreicht beginnen abrampen
U #START;
U( ;
L #TEMP_SOLL;
L 2.764800e+004;
>=R ;
) ;
S #AUS;
NETWORK
TITLE =0% erreicht Auschalten beenden
U #START;
U( ;
L #TEMP_SOLL;
L 0.000000e+000;
<=R ;
) ;
R #AUS;
R #START;
NETWORK
TITLE =Sollwert Prüfen Überlauf
U( ;
L #TEMP_SOLL;
L 2.764800e+004;
>=R ;
) ;
SPBNB _00c;
L 2.764800e+004;
T #TEMP_SOLL;
_00c: NOP 0;
NETWORK
TITLE =Sollwert Prüfen Unterlauf
U( ;
L #TEMP_SOLL;
L 0.000000e+000;
<=R ;
) ;
SPBNB _00d;
L 0.000000e+000;
T #TEMP_SOLL;
_00d: NOP 0;
NETWORK
TITLE =Lampe Einschalten
L #TEMP_SOLL;
L 0.000000e+000;
<>R ;
= #ON_OFF;
NETWORK
TITLE =Sollwert Ausgeben
U( ;
U( ;
U #START;
SPBNB _00e;
L #TEMP_SOLL;
RND ;
T #VALUE;
UN OV;
SAVE ;
CLR ;
_00e: U BIE;
) ;
NOT ;
SPBNB _00f;
L 0;
T #VALUE;
SET ;
SAVE ;
CLR ;
_00f: U BIE;
) ;
SPBNB _010;
L 0.000000e+000;
T #TEMP_SOLL;
_010: NOP 0;
NETWORK
TITLE =Istwert in Prozent
CLR ;
L #TEMP_SOLL;
L 1.000000e+002;
*R ;
L 2.764800e+004;
/R ;
RND ;
T #IST;
SET ;
SAVE ;
END_FUNCTION_BLOCK