FUNCTION_BLOCK "Sicherheit"
TITLE =Sicherheit
//Sicherheitsrelais schalten und Meldung "Sicherheit" ausgeben
VERSION : 0.1
VAR_INPUT
Anforderung : BOOL ; //Anforderung Sicherheitsrelais
T_Ein : TIME := T#5S; //Verzögerung Meldung "Sicherheit"
T_Aus : TIME := T#2S; //Nachlauf Sicherheitsrelais
END_VAR
VAR_OUTPUT
Relais : BOOL ;
Sichherheit : BOOL ;
END_VAR
VAR
TOF_Aus : "TOF"; //Nachlauf Sicherheitsrelais
TON_Sicher : "TON"; //Verzögerung Ausgabe "Sicherheit"
END_VAR
BEGIN
NETWORK
TITLE =Relais
//Relais "Abschaltung Vorort-Taster" einschalten
//Nachlauf bei Abschaltung der Anforderung
U #Anforderung;
= L 0.0;
BLD 103;
CALL #TOF_Aus (
IN := L 0.0,
PT := #T_Aus,
Q := #Relais);
NOP 0;
NETWORK
TITLE =Sicherheit
//Meldung "Sicherheit" mit Verzögerung ausgeben
U #Anforderung;
= L 0.0;
BLD 103;
CALL #TON_Sicher (
IN := L 0.0,
PT := #T_Ein,
Q := #Sichherheit);
NOP 0;
END_FUNCTION_BLOCK
FUNCTION_BLOCK "Rollo"
TITLE =Rollo
//Zentrale Ansteuerung für Rollo
VERSION : 0.1
VAR_INPUT
OK : BOOL ; //Sicherheit hergestellt
Auf1 : BOOL ; //Rollladen auffahren (1. Fahrzeit)
Ab1 : BOOL ; //Rollladen abfahren (1. Fahrzeit)
Aktiv2 : BOOL ; //Fahrbefehle mit Laufzeiten 2 aktivieren
Auf2 : BOOL ; //Rollladen auffahren (2. Fahrzeit)
Ab2 : BOOL ; //Rollladen abfahren (2. Fahrzeit)
Reset : BOOL ; //Fahrbefehl löschen
T1_Auf : TIME := T#40S; //Laufzeit 1 Auffahren
T1_Ab : TIME := T#40S; //Laufzeit 1 Abfahren
T2_Auf : TIME := T#14S; //Laufzeit 2 Auffahren
T2_Ab : TIME := T#15S; //Laufzeit 2 Abfahren
END_VAR
VAR_OUTPUT
Sicherheit : BOOL ; //Sicherheit anfordern
F_Auf : BOOL ; //Fahrbefehl aufwärts
F_Ab : BOOL ; //Fahrbefehl abwärts
END_VAR
VAR
FM : ARRAY [1 .. 4 ] OF //Flankenmerker Eingänge
BOOL ;
Richtung : ARRAY [1 .. 4 ] OF //Flankenmerker Eingänge
BOOL ;
Fahrbefehl : BOOL ;
LZ : TIME ;
TON_FZ : "TON"; //maximale Fahrzeit
END_VAR
VAR_TEMP
Fahren : BOOL ;
END_VAR
BEGIN
NETWORK
TITLE =Eingang Auf 1
//Fahrtrichtung 1 speichern
U #Auf1;
FP #FM[1];
= L 1.0;
U L 1.0;
BLD 102;
S #Richtung[1];
U L 1.0;
SPBNB _001;
L #T1_Auf;
T #LZ;
_001: NOP 0;
NETWORK
TITLE =Eingang Ab 1
//Fahrtrichtung 2 speichern
U #Ab1;
FP #FM[2];
= L 1.0;
U L 1.0;
BLD 102;
S #Richtung[2];
U L 1.0;
SPBNB _002;
L #T1_Ab;
T #LZ;
_002: NOP 0;
NETWORK
TITLE =Eingang Auf 2
//Fahrtrichtung 3 speichern
U #Auf2;
U #Aktiv2;
FP #FM[3];
= L 1.0;
U L 1.0;
BLD 102;
S #Richtung[3];
U L 1.0;
SPBNB _003;
L #T2_Auf;
T #LZ;
_003: NOP 0;
NETWORK
TITLE =Eingang Ab 2
//Fahrtrichtung 4 speichern
U #Ab2;
U #Aktiv2;
FP #FM[4];
= L 1.0;
U L 1.0;
BLD 102;
S #Richtung[4];
U L 1.0;
SPBNB _004;
L #T2_Ab;
T #LZ;
_004: NOP 0;
NETWORK
TITLE =Fahrbefehl setzen
//
O #Richtung[1];
O #Richtung[2];
O #Richtung[3];
O #Richtung[4];
S #Fahrbefehl;
NETWORK
TITLE =Aufhebung Fahrbefehl und Richtung
//gegensätzliche Fahrtrichtungen
//Ablauf Zeit oder Reset
U #Richtung[1];
U #Richtung[2];
O ;
U #Richtung[1];
U #Richtung[4];
O ;
U #Richtung[3];
U #Richtung[2];
O ;
U #Richtung[3];
U #Richtung[4];
O #Reset;
O #TON_FZ.Q;
R #Fahrbefehl;
R #Richtung[1];
R #Richtung[2];
R #Richtung[3];
R #Richtung[4];
NETWORK
TITLE =Sicherheit anfordern
//Sicherheitsrelais anfordern
U #Fahrbefehl;
= #Sicherheit;
NETWORK
TITLE =Fahrbeginn
//Fahrbefehl + Sicherheit OK
U #Fahrbefehl;
U #OK;
= #Fahren;
NETWORK
TITLE =Auffahren
//Fahrtrichtung 1 + 3
U( ;
O #Richtung[1];
O #Richtung[3];
) ;
U #Fahren;
= #F_Auf;
NETWORK
TITLE =Abfahren
//Fahrtrichtung 2 + 4
U( ;
O #Richtung[2];
O #Richtung[4];
) ;
U #Fahren;
= #F_Ab;
NETWORK
TITLE =Fahrzeit
//
U #Fahren;
= L 1.0;
BLD 103;
CALL #TON_FZ (
IN := L 1.0,
PT := #LZ);
NOP 0;
END_FUNCTION_BLOCK
FUNCTION_BLOCK "Rollos_EG"
TITLE =
VERSION : 0.1
VAR
Sicherheit : ARRAY [1 .. 2 ] OF //Anforderungen Sicherheit
BOOL ;
Sicherheit_OK : BOOL ;
FB_Rollo_WZ : "Rollo";
FB_Rollo_SZ : "Rollo";
FB_Sicherheit : "Sicherheit";
END_VAR
BEGIN
NETWORK
TITLE =Sicherheit
//
U( ;
O #Sicherheit[1];
O #Sicherheit[2];
) ;
= L 0.0;
BLD 103;
CALL #FB_Sicherheit (
Anforderung := L 0.0,
T_Ein := T#5S,
T_Aus := T#2S,
Relais := "+UV1/1K9",
Sichherheit := #Sicherheit_OK);
NOP 0;
NETWORK
TITLE =Rollo SZ
//
U #Sicherheit_OK;
= L 0.0;
BLD 103;
U( ;
O "DB Rollo EG".EG_Schaltuhr_hoch;
O "DB Rollo EG".SZ_hoch;
) ;
= L 0.1;
BLD 103;
U( ;
O "DB Rollo EG".SZ_runter;
O "DB Rollo EG".EG_Schaltuhr_runter;
) ;
= L 0.2;
BLD 103;
CALL #FB_Rollo_SZ (
OK := L 0.0,
Auf1 := L 0.1,
Ab1 := L 0.2,
T1_Auf := T#30S,
T1_Ab := T#30S,
Sicherheit := #Sicherheit[1],
F_Auf := "+UV1/1K1",
F_Ab := "+UV1/1K2");
NOP 0;
NETWORK
TITLE =Rollo WZ
//
U #Sicherheit_OK;
= L 0.0;
BLD 103;
U "DB Rollo EG".EG_Schaltuhr_hoch;
= L 0.1;
BLD 103;
U "DB Rollo EG".EG_Schaltuhr_runter;
= L 0.2;
BLD 103;
U "Weihnachtszeit";
= L 0.3;
BLD 103;
U "DB Allgemein".EG_Std_Fenster_Frueh;
= L 0.4;
BLD 103;
U "DB Allgemein".EG_Std_Fenster_Spaet;
= L 0.5;
BLD 103;
CALL #FB_Rollo_WZ (
OK := L 0.0,
Auf1 := L 0.1,
Ab1 := L 0.2,
Aktiv2 := L 0.3,
Auf2 := L 0.4,
Ab2 := L 0.5,
T1_Auf := T#40S,
T1_Ab := T#40S,
T2_Auf := T#14S,
T2_Ab := T#15S,
Sicherheit := #Sicherheit[2],
F_Auf := "+UV1/1K3",
F_Ab := "+UV1/1K4");
NOP 0;
END_FUNCTION_BLOCK
DATA_BLOCK "IDB_Rollos_EG"
TITLE =
VERSION : 0.0
"Rollos_EG"
BEGIN
Sicherheit[1] := FALSE;
Sicherheit[2] := FALSE;
Sicherheit_OK := FALSE;
FB_Rollo_WZ.OK := FALSE;
FB_Rollo_WZ.Auf1 := FALSE;
FB_Rollo_WZ.Ab1 := FALSE;
FB_Rollo_WZ.Aktiv2 := FALSE;
FB_Rollo_WZ.Auf2 := FALSE;
FB_Rollo_WZ.Ab2 := FALSE;
FB_Rollo_WZ.Reset := FALSE;
FB_Rollo_WZ.T1_Auf := T#40S;
FB_Rollo_WZ.T1_Ab := T#40S;
FB_Rollo_WZ.T2_Auf := T#14S;
FB_Rollo_WZ.T2_Ab := T#15S;
FB_Rollo_WZ.Sicherheit := FALSE;
FB_Rollo_WZ.F_Auf := FALSE;
FB_Rollo_WZ.F_Ab := FALSE;
FB_Rollo_WZ.FM[1] := FALSE;
FB_Rollo_WZ.FM[2] := FALSE;
FB_Rollo_WZ.FM[3] := FALSE;
FB_Rollo_WZ.FM[4] := FALSE;
FB_Rollo_WZ.Richtung[1] := FALSE;
FB_Rollo_WZ.Richtung[2] := FALSE;
FB_Rollo_WZ.Richtung[3] := FALSE;
FB_Rollo_WZ.Richtung[4] := FALSE;
FB_Rollo_WZ.Fahrbefehl := FALSE;
FB_Rollo_WZ.LZ := T#0MS;
FB_Rollo_WZ.TON_FZ.IN := FALSE;
FB_Rollo_WZ.TON_FZ.PT := T#0MS;
FB_Rollo_WZ.TON_FZ.Q := FALSE;
FB_Rollo_WZ.TON_FZ.ET := T#0MS;
FB_Rollo_WZ.TON_FZ.STATE := B#16#0;
FB_Rollo_WZ.TON_FZ.STIME := T#0MS;
FB_Rollo_WZ.TON_FZ.ATIME := T#0MS;
FB_Rollo_SZ.OK := FALSE;
FB_Rollo_SZ.Auf1 := FALSE;
FB_Rollo_SZ.Ab1 := FALSE;
FB_Rollo_SZ.Aktiv2 := FALSE;
FB_Rollo_SZ.Auf2 := FALSE;
FB_Rollo_SZ.Ab2 := FALSE;
FB_Rollo_SZ.Reset := FALSE;
FB_Rollo_SZ.T1_Auf := T#40S;
FB_Rollo_SZ.T1_Ab := T#40S;
FB_Rollo_SZ.T2_Auf := T#14S;
FB_Rollo_SZ.T2_Ab := T#15S;
FB_Rollo_SZ.Sicherheit := FALSE;
FB_Rollo_SZ.F_Auf := FALSE;
FB_Rollo_SZ.F_Ab := FALSE;
FB_Rollo_SZ.FM[1] := FALSE;
FB_Rollo_SZ.FM[2] := FALSE;
FB_Rollo_SZ.FM[3] := FALSE;
FB_Rollo_SZ.FM[4] := FALSE;
FB_Rollo_SZ.Richtung[1] := FALSE;
FB_Rollo_SZ.Richtung[2] := FALSE;
FB_Rollo_SZ.Richtung[3] := FALSE;
FB_Rollo_SZ.Richtung[4] := FALSE;
FB_Rollo_SZ.Fahrbefehl := FALSE;
FB_Rollo_SZ.LZ := T#0MS;
FB_Rollo_SZ.TON_FZ.IN := FALSE;
FB_Rollo_SZ.TON_FZ.PT := T#0MS;
FB_Rollo_SZ.TON_FZ.Q := FALSE;
FB_Rollo_SZ.TON_FZ.ET := T#0MS;
FB_Rollo_SZ.TON_FZ.STATE := B#16#0;
FB_Rollo_SZ.TON_FZ.STIME := T#0MS;
FB_Rollo_SZ.TON_FZ.ATIME := T#0MS;
FB_Sicherheit.Anforderung := FALSE;
FB_Sicherheit.T_Ein := T#5S;
FB_Sicherheit.T_Aus := T#2S;
FB_Sicherheit.Relais := FALSE;
FB_Sicherheit.Sichherheit := FALSE;
FB_Sicherheit.TOF_Aus.IN := FALSE;
FB_Sicherheit.TOF_Aus.PT := T#0MS;
FB_Sicherheit.TOF_Aus.Q := FALSE;
FB_Sicherheit.TOF_Aus.ET := T#0MS;
FB_Sicherheit.TOF_Aus.STATE := B#16#0;
FB_Sicherheit.TOF_Aus.STIME := T#0MS;
FB_Sicherheit.TOF_Aus.ATIME := T#0MS;
FB_Sicherheit.TON_Sicher.IN := FALSE;
FB_Sicherheit.TON_Sicher.PT := T#0MS;
FB_Sicherheit.TON_Sicher.Q := FALSE;
FB_Sicherheit.TON_Sicher.ET := T#0MS;
FB_Sicherheit.TON_Sicher.STATE := B#16#0;
FB_Sicherheit.TON_Sicher.STIME := T#0MS;
FB_Sicherheit.TON_Sicher.ATIME := T#0MS;
END_DATA_BLOCK