520 lines
13 KiB
Plaintext
520 lines
13 KiB
Plaintext
FUNCTION_BLOCK "MAntrieb_PowerSave"
|
|
TITLE = Antriebsmodul
|
|
{ S7_Optimized_Access := 'FALSE' }
|
|
AUTHOR : IBAE
|
|
VERSION : 0.1
|
|
VAR_INPUT
|
|
Automatik { ExternalWritable := 'False'} : Bool; // Automatikbetrieb ist aktiv
|
|
Handbetrieb { ExternalWritable := 'False'} : Bool; // Handbetrieb ist aktiv
|
|
BereichErr { ExternalWritable := 'False'} : Bool := 1; // Bereichsstörung -> Antrieb stoppen
|
|
Q { ExternalWritable := 'False'} : Bool; // Eingang Motorschutz ok
|
|
Ptc { ExternalWritable := 'False'} : Bool; // Eingang Motortemperatur ok
|
|
Fu { ExternalWritable := 'False'} : Bool; // Eingang Frequenzumrichter ok
|
|
QKontroll { ExternalWritable := 'False'} : Bool; // Jetzt Q-Ok-Meldung von Frequenzumrichter (nach Netz EIN) kontrollieren
|
|
FuKontroll { ExternalWritable := 'False'} : Bool; // Jetzt Fu-Ok-Meldung von Frequenzumrichter (nach Netz EIN) kontrollieren
|
|
ErrQuit { ExternalWritable := 'False'} : Bool; // Motorschutzstörung quittieren
|
|
Kontroll_B { ExternalWritable := 'False'} : Bool; // Kontroll-Sensor für Bewegung
|
|
T_Nachlauf { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int := 60; // Nachlaufzeit (*1s)
|
|
END_VAR
|
|
|
|
VAR_OUTPUT
|
|
Antriebrueck { ExternalWritable := 'False'} : Bool; // Rückwärts-Ausgang des Antriebs
|
|
Antriebvor { ExternalWritable := 'False'} : Bool; // Vorwärts-Ausgang des Antriebs
|
|
Jog1 { ExternalWritable := 'False'} : Bool; // Frequenz 1/3 aktivieren
|
|
Jog2 { ExternalWritable := 'False'} : Bool; // Frequenz 2/3 aktivieren
|
|
Analog { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // Ausgangswort für Analogwandler
|
|
END_VAR
|
|
|
|
VAR_IN_OUT
|
|
QErr { ExternalWritable := 'False'} : Bool; // Motorschutzstörung
|
|
PtcErr { ExternalWritable := 'False'} : Bool; // Temperaturstörung
|
|
FuErr { ExternalWritable := 'False'} : Bool; // Frequenzumrichter ist gestört
|
|
Err_Antrieb_verklemmt { ExternalWritable := 'False'} : Bool; // Antrieb ist verklemmt (kein Kontroll_B oder dauernd aktiv)
|
|
END_VAR
|
|
|
|
VAR
|
|
sJog1 { ExternalWritable := 'False'} : Bool; // Frequenz 1/3 aktivieren
|
|
sJog2 { ExternalWritable := 'False'} : Bool; // Frequenz 2/3 aktivieren
|
|
sAntriebrueck { ExternalWritable := 'False'} : Bool; // Rückwärts-Ausgang des Antriebs
|
|
sAntriebvor { ExternalWritable := 'False'} : Bool; // Vorwärts-Ausgang des Antriebs
|
|
Stat { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'; S7_SetPoint := 'False'} : "UAntrieb_PowerSave"; // Status des Antriebs
|
|
END_VAR
|
|
|
|
VAR_TEMP
|
|
Antriebaktiv : Bool; // Antrieb ist aktiv
|
|
Neustart : Bool; // Antrieb wurde erneut gestartet
|
|
Frequenz : Real; // Frequenz für FC106
|
|
END_VAR
|
|
|
|
|
|
BEGIN
|
|
NETWORK
|
|
TITLE = Zeitwert laden
|
|
UN #Automatik;
|
|
ON #Stat.A_start;
|
|
SPB Nw02;
|
|
|
|
L #T_Nachlauf ;//Zeitwert laden
|
|
T #Stat.T_Zelle;
|
|
|
|
NETWORK
|
|
TITLE = Zeitwert löschen
|
|
Nw02: UN #Automatik;
|
|
O #Stat.A_vor;
|
|
O #Stat.A_rueck;
|
|
O #BereichErr;
|
|
O #QErr;
|
|
O #FuErr;
|
|
SPBN Nw03;
|
|
|
|
L 0;//Zeitwert löschen
|
|
//// T #Stat.T_Zelle
|
|
|
|
NETWORK
|
|
TITLE = Motorschutzstörung / Temperaturüberwachung
|
|
Nw03: U #ErrQuit;
|
|
R #QErr;
|
|
UN #Q;
|
|
U #QKontroll;
|
|
S #QErr;
|
|
|
|
U #ErrQuit;
|
|
R #PtcErr;
|
|
UN #Ptc;
|
|
S #PtcErr;
|
|
|
|
NETWORK
|
|
TITLE = Frequenzumrichterstörung
|
|
UN #Stat.Frequenz;
|
|
UN #Stat.Analog;
|
|
SPB en05;
|
|
|
|
U #ErrQuit;
|
|
ON #FuKontroll;
|
|
R #FuErr;
|
|
UN #Fu;
|
|
U #FuKontroll;
|
|
S #FuErr;
|
|
|
|
en05: NOP 0;
|
|
NETWORK
|
|
TITLE = Undefinierte Zustände / Befehle (alle Antriebe)
|
|
U #Automatik;//Automatik + Hand aktiv
|
|
U #Handbetrieb;
|
|
O;
|
|
UN #Automatik;//keine Betriebsart
|
|
UN #Handbetrieb;
|
|
O;
|
|
U #Stat.A_vor;//Vorwärts + Rückwärts aktiv
|
|
U #Stat.A_rueck;
|
|
O;
|
|
U #Stat.H_vor;
|
|
U #Stat.H_rueck;
|
|
O;
|
|
U #BereichErr;//Bereichsstörung
|
|
U #Automatik;//Automatik aktiv
|
|
O;
|
|
UN #Stat.Normal;//Antrieb nicht eindeutig
|
|
UN #Stat.Frequenz;
|
|
UN #Stat.Analog;
|
|
O;
|
|
U #Stat.Normal;
|
|
U(;
|
|
O #Stat.Frequenz;
|
|
O #Stat.Analog;
|
|
);
|
|
O;
|
|
U #Stat.Frequenz;
|
|
U #Stat.Analog;
|
|
O #QErr;//Motorschutzstörung
|
|
O;
|
|
U #Automatik;//Automatik aktiv
|
|
U #PtcErr;//Temperaturstörung
|
|
SPBN en06;
|
|
|
|
Stop: SET;
|
|
R #sAntriebvor;
|
|
R #sAntriebrueck;
|
|
R #Stat.T_Ausfertig;
|
|
R #sJog1;
|
|
R #sJog2;
|
|
|
|
L 0.0;//Zeitwert/Frequenz löschen
|
|
//// T #Stat.T_Zelle
|
|
T #Frequenz;//Frequenz für FC106
|
|
|
|
SPA RET;
|
|
|
|
en06: NOP 0;
|
|
NETWORK
|
|
TITLE = Undefinierte Zustände / Befehle (Fu-Zusatz)
|
|
U #Stat.Frequenz;
|
|
U(;
|
|
UN #Stat.F1;//Keine Frequenz angegeben
|
|
UN #Stat.F2;
|
|
UN #Stat.F3;
|
|
O;
|
|
U #Stat.F1;//Mehrere Frequenzen angegeben
|
|
U(;
|
|
O #Stat.F2;
|
|
O #Stat.F3;
|
|
);
|
|
O;
|
|
U #Stat.F2;//Mehrere Frequenzen angegeben
|
|
U #Stat.F3;
|
|
O #FuErr;//Frequenzumrichterstörung
|
|
ON #FuKontroll;//Frequenzumrichter ist eingeschaltet
|
|
);
|
|
SPB Stop;
|
|
NETWORK
|
|
TITLE = Undefinierte Zustände / Befehle (Analog-Zusatz)
|
|
U #Stat.Analog;
|
|
U(;
|
|
L #Stat.F;//Keine Frequenz angegeben
|
|
L 0.0;
|
|
==R;
|
|
UN #Stat.F1;//Keine Frequenz angegeben
|
|
UN #Stat.F2;
|
|
UN #Stat.F3;
|
|
O #FuErr;//Frequenzumrichterstörung
|
|
ON #FuKontroll;//Frequenzumrichter ist eingeschaltet
|
|
);
|
|
SPB Stop;
|
|
|
|
NETWORK
|
|
TITLE = Antrieb vorwärts starten
|
|
U(;
|
|
U #Automatik;//Automatik ist aktiv
|
|
UN #Stat.A_rueck;
|
|
U(;
|
|
L #Stat.T_Zelle;
|
|
L 0 ;//Nachlaufzeit vorhanden ?
|
|
<>I ;//Ja !
|
|
UN #Stat.A_PS ;//PowerSave-Mode: Bei Ausschaltverzögerung anhalten
|
|
O #Stat.A_vor ;//Einschalten
|
|
);
|
|
O;
|
|
U #Handbetrieb;//Handbetrieb aktiv
|
|
U #Stat.H_vor;//Handtaste vorwärts
|
|
);
|
|
UN #Stat.Stop_vor;//Stoppen
|
|
U #Q;//Motorschutz ok
|
|
UN #QErr;//Motorschutzstörung noch aktiv
|
|
= #sAntriebvor;
|
|
R #Stat.T_Ausfertig;
|
|
NETWORK
|
|
TITLE = Antrieb rückwärts starten
|
|
U(;
|
|
U #Automatik;//Automatik ist aktiv
|
|
U #Stat.A_rueck;//Einschalten
|
|
O;
|
|
U #Handbetrieb;//Handbetrieb aktiv
|
|
U #Stat.H_rueck;//Handtaste rückwärts
|
|
);
|
|
UN #Stat.Stop_rueck;//Stoppen
|
|
U #Q;//Motorschutz ok
|
|
UN #QErr;//Motorschutzstörung noch aktiv
|
|
UN #sAntriebvor;
|
|
= #sAntriebrueck;
|
|
R #Stat.T_Ausfertig;
|
|
NETWORK
|
|
TITLE = Frequenz übergeben (Fu-Zusatz)
|
|
UN #Stat.Frequenz;
|
|
UN #Stat.Analog;
|
|
SPB en11;
|
|
|
|
U #sAntriebvor;
|
|
UN #sAntriebrueck;
|
|
O;
|
|
UN #sAntriebvor;
|
|
U #sAntriebrueck;
|
|
= #Antriebaktiv;
|
|
|
|
U #Antriebaktiv;
|
|
U(;
|
|
O #Stat.F1;
|
|
O #Stat.F3;
|
|
);
|
|
= #sJog1;
|
|
|
|
U #Antriebaktiv;
|
|
U(;
|
|
O #Stat.F2;
|
|
O #Stat.F3;
|
|
);
|
|
= #sJog2;
|
|
|
|
UN #sJog1;//Keine Geschwindigtkeit aktiv
|
|
UN #sJog2;
|
|
UN #Stat.Analog;//falls analoge Übergabe erfolgt
|
|
R #sAntriebvor;
|
|
R #sAntriebrueck;
|
|
|
|
en11: NOP 0;
|
|
NETWORK
|
|
TITLE = Frequenz übergeben (Analog-Zusatz)
|
|
UN #Stat.Analog;
|
|
SPB en12;
|
|
|
|
U #sAntriebvor;
|
|
UN #sAntriebrueck;
|
|
O;
|
|
UN #sAntriebvor;
|
|
U #sAntriebrueck;
|
|
= #Antriebaktiv;
|
|
|
|
L 0.0;//Falls Stop erwünscht
|
|
|
|
UN #Antriebaktiv;
|
|
SPB w090;
|
|
|
|
L #Stat.F;
|
|
w090: T #Frequenz;//Frequenz für FC106
|
|
|
|
L 3000.0;//Maximal 3000 U/min ?
|
|
<=R;//Ja !
|
|
SPB w091;
|
|
|
|
T #Frequenz;//Frequenz für FC106
|
|
|
|
w091: L #Frequenz;
|
|
L 0.0;//Keine Geschwindigtkeit aktiv ?
|
|
==R;//Ja !
|
|
UN #sJog1;//Aber schon Jog-Geschwindigtkeit aktiv
|
|
UN #sJog2;
|
|
R #sAntriebvor;
|
|
R #sAntriebrueck;
|
|
|
|
en12: NOP 0;
|
|
NETWORK
|
|
TITLE = Steuersignale zurücksetzen
|
|
RET: U #Stat.A_vor ;//Übergabe an OP
|
|
= #Stat.OP_A_vor;
|
|
|
|
U #Stat.A_start;
|
|
= #Stat.OP_A_start;
|
|
|
|
U #Stat.A_PS;
|
|
= #Stat.OP_A_PS;
|
|
|
|
U #Stat.Stop_vor;
|
|
= #Stat.OP_Stop_vor;
|
|
|
|
U #Stat.Stop_rueck;
|
|
= #Stat.OP_Stop_rueck;
|
|
|
|
L #Stat.F;
|
|
T #Stat.OP_F;
|
|
|
|
U #Stat.F1;
|
|
= #Stat.OP_F1;
|
|
|
|
U #Stat.F2;
|
|
= #Stat.OP_F2;
|
|
|
|
U #Stat.F3;
|
|
= #Stat.OP_F3;
|
|
|
|
L 0.0;
|
|
T #Stat.F;
|
|
|
|
SET;
|
|
R #Stat.F1;
|
|
R #Stat.F2;
|
|
R #Stat.F3;
|
|
R #Stat.Stop_vor;
|
|
R #Stat.Stop_rueck;
|
|
R #Stat.Stop_intern;
|
|
R #Stat.A_vor;
|
|
R #Stat.A_rueck;
|
|
R #Stat.A_start;
|
|
R #Stat.A_PS;
|
|
R #Stat.H_vor;
|
|
R #Stat.H_rueck;
|
|
|
|
NETWORK
|
|
TITLE = Nachlaufzeit läuft
|
|
UN "1s-Impuls" ;//1s-Impuls
|
|
ON #sAntriebvor;//Antrieb steht
|
|
SPB Nw14;
|
|
|
|
L #Stat.T_Zelle;
|
|
L 0;//Zeit steht ?
|
|
==I;//Ja !
|
|
SPB Nw14;
|
|
|
|
L #Stat.T_Zelle;
|
|
+ -1;
|
|
T #Stat.T_Zelle;
|
|
|
|
L 0 ;//Zeit gerade abgelaufen ?
|
|
<=I;//Ja !
|
|
S #Stat.T_Ausfertig;
|
|
SPBN Nw14;
|
|
|
|
T #Stat.T_Zelle;
|
|
|
|
NETWORK
|
|
TITLE = Analog-Signal wandeln
|
|
Nw14: UN #Stat.Analog;
|
|
SPB en14;
|
|
|
|
CALL UNSCALE
|
|
( IN := #Frequenz ,
|
|
HI_LIM := 200.0 ,
|
|
LO_LIM := 0.0 ,
|
|
BIPOLAR := FALSE ,
|
|
RET_VAL := #Stat.RET_VAL_FC106 ,
|
|
OUT := #Analog
|
|
);
|
|
|
|
L #Stat.RET_VAL_FC106;
|
|
L 0;//Fehler vorhanden ?
|
|
<>I;//Ja !
|
|
R #sAntriebvor;//Antrieb stoppen
|
|
R #sAntriebrueck;
|
|
|
|
en14: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = Ausgänge an OP übergeben
|
|
U #sAntriebvor;
|
|
UN #Stat.OP_Out_Mvor;//beim letzten Zyklus war Motor nicht eingeschaltet
|
|
O;
|
|
U #sAntriebrueck;
|
|
UN #Stat.OP_Out_Mrueck;//beim letzten Zyklus war Motor nicht eingeschaltet
|
|
= #Neustart;//Antrieb wurde erneut gestartet
|
|
|
|
U #sAntriebvor;
|
|
= #Stat.OP_Out_Mvor;
|
|
|
|
U #sAntriebrueck;
|
|
= #Stat.OP_Out_Mrueck;
|
|
|
|
NETWORK
|
|
TITLE = Verklemm-Kontrolle
|
|
UN #Stat.Kontroll_B_verbaut;//Parameter 4: Kontroll-Sensor für Bewegung ist eingebaut
|
|
R #Err_Antrieb_verklemmt;//Antrieb ist verklemmt (kein Kontroll_B oder dauernd aktiv)
|
|
SPB en16;
|
|
|
|
U #ErrQuit;
|
|
U #Err_Antrieb_verklemmt;//Antrieb ist verklemmt (kein Kontroll_B oder dauernd aktiv)
|
|
SPB w161;
|
|
|
|
|
|
U #Err_Antrieb_verklemmt;//Antrieb ist verklemmt (kein Kontroll_B oder dauernd aktiv)
|
|
R #sAntriebvor;//Antrieb anhalten
|
|
R #sAntriebrueck;
|
|
SPB en16;
|
|
|
|
UN #Kontroll_B;//Sensor ist nicht aktiv
|
|
SPB w160;
|
|
|
|
//Also Sensor aktiv:
|
|
L 0;//Inaktiv-Zeit nullen
|
|
T #Stat.Raster_B_inaktiv;
|
|
|
|
UN #sAntriebvor;//Antrieb steht
|
|
UN #sAntriebrueck;
|
|
ON "100ms-Impuls";//0,1s-Impuls
|
|
SPB en16;
|
|
|
|
L #Stat.Raster_B_aktiv;
|
|
L "MW2";//Anzahl der 100ms-Takte
|
|
+I;
|
|
T #Stat.Raster_B_aktiv;
|
|
L 20;//2s erreicht ?
|
|
>=I;//Ja !
|
|
S #Err_Antrieb_verklemmt;//Antrieb ist verklemmt (kein Kontroll_B oder dauernd aktiv)
|
|
|
|
SPA en16;
|
|
|
|
//Sensor inaktiv:
|
|
w160: L 0;//Aktiv-Zeit nullen
|
|
T #Stat.Raster_B_aktiv;
|
|
|
|
UN #sAntriebvor;//Antrieb steht
|
|
UN #sAntriebrueck;
|
|
ON "100ms-Impuls";//0,1s-Impuls
|
|
SPB en16;
|
|
|
|
L #Stat.Raster_B_inaktiv;
|
|
L "MW2";//Anzahl der 100ms-Takte
|
|
+I;
|
|
T #Stat.Raster_B_inaktiv;
|
|
L 20;//2s erreicht ?
|
|
>=I;//Ja !
|
|
S #Err_Antrieb_verklemmt;//Antrieb ist verklemmt (kein Kontroll_B oder dauernd aktiv)
|
|
|
|
SPA en16;
|
|
|
|
w161: L 0;
|
|
T #Stat.Raster_B_aktiv;//Aktiv-Zeit nullen
|
|
T #Stat.Raster_B_inaktiv;//Inaktiv-Zeit nullen
|
|
|
|
SET;
|
|
R #Err_Antrieb_verklemmt;//Antrieb ist verklemmt (kein Kontroll_B oder dauernd aktiv)
|
|
|
|
en16: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = Anzahl der Einschaltungen speichern
|
|
UN #Neustart;//Antrieb wurde erneut gestartet
|
|
SPB en17;
|
|
|
|
L #Stat.Statistik.Einschaltungen;
|
|
+ DINT#1;//Anzahl der Einschaltungen +1
|
|
T #Stat.Statistik.Einschaltungen;
|
|
|
|
en17: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = Ausgangsvariablen schreiben
|
|
U #sAntriebvor;
|
|
= #Antriebvor;
|
|
|
|
U #sAntriebrueck;
|
|
= #Antriebrueck;
|
|
|
|
U #sJog1;
|
|
= #Jog1;
|
|
|
|
U #sJog2;
|
|
= #Jog2;
|
|
|
|
NETWORK
|
|
TITLE = Gesamt-Laufzeit aufaddieren
|
|
UN #sAntriebvor;//Antrieb steht
|
|
UN #sAntriebrueck;
|
|
ON "1s-Impuls";//1s-Impuls
|
|
BEB;
|
|
|
|
L #Stat.Statistik.Laufzeit_s;
|
|
+ 1;//Laufzeit des Antriebs in Sekunden+1
|
|
T #Stat.Statistik.Laufzeit_s;
|
|
L 60;//Eine Minte erreicht ?
|
|
<I;//Nein !
|
|
BEB;
|
|
|
|
L 0;
|
|
T #Stat.Statistik.Laufzeit_s;
|
|
L #Stat.Statistik.Laufzeit_m;
|
|
+ 1;//Laufzeit des Antriebs in Minuten+1
|
|
T #Stat.Statistik.Laufzeit_m;
|
|
L 60;//Eine Stunde erreicht ?
|
|
<I;//Nein !
|
|
BEB;
|
|
|
|
L 0;
|
|
T #Stat.Statistik.Laufzeit_m;
|
|
L #Stat.Statistik.Laufzeit_h;
|
|
+ 1;//Laufzeit des Antriebs in Stunden+1
|
|
T #Stat.Statistik.Laufzeit_h;
|
|
|
|
NETWORK
|
|
TITLE = Ende
|
|
BE;
|
|
|
|
END_FUNCTION_BLOCK
|
|
|