Files
HundM_awl/=A01+UH07-KF00/Programmbausteine/Module/MZylinder.awl
T

214 lines
4.7 KiB
Plaintext

FUNCTION_BLOCK "MZylinder"
TITLE = Zylinder mit 3/2 oder 5/2+3- Wegeventil und Endlagensimulation
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : IBAE
VERSION : 0.1
VAR_INPUT
Automatik : Bool; // Automatikbetrieb ist aktiv
Handbetrieb : Bool; // Handbetrieb ist aktiv
T_Ast : Int := 5; // Zeit bis AST erreicht ist (*100ms)
T_Gst : Int := 5; // Zeit bis GST erreicht ist (*100ms)
END_VAR
VAR_OUTPUT
ZylAst : Bool; // Vorwärts-Ausgang des Antriebs
ZylGst : Bool; // Rückwärts-Ausgang des Antriebs
END_VAR
VAR
Stat : "UZylinder";
END_VAR
BEGIN
NETWORK
TITLE = Zeitwert löschen
U #ZylAst;//Zylinder fährt nach AST
U(;
O #Stat.B_AST;//Hat Endstellung erreicht
ON #Stat.Old_Ast;//Fuhr letzten Zyklus anders
);
O;
UN #ZylAst;//Zylinder fährt nach GST
U(;
O #Stat.B_GST;//Hat Endstellung erreicht
O #Stat.Old_Ast;//Fuhr letzten Zyklus anders
);
SPBN Nw02;
tdel: L 0;//Zeitwert löschen
T #Stat.T_Zelle;
U #ZylAst;//Zylinder fährt nach AST
= #Stat.Old_Ast;//Fuhr letzten Zyklus nach AST
SPA Nw05;
NETWORK
TITLE = AST-Erreichtzeit abgelaufen ?
Nw02: L #Stat.T_AST_Akt;//Gewollter Zeitwert
L 9999;//angegeben ?
<>I;//Ja !
SPB w020;
L #T_Ast;//Sollwert übergeben
T #Stat.T_AST_Akt;//Gewollter Zeitwert
w020: U #ZylAst;//Zylinder fährt nach AST ?
SPBN en02;
SET;
R #Stat.B_GST;
L #Stat.T_Zelle;//Aktueller Zeitwert
L #Stat.T_AST_Akt;//Gewollter Zeitwert erreicht ?
>=I;
S #Stat.B_AST;//Zylinder hat AST erreicht
SPB tdel;//Zeit nullen
SPA Nw03;
en02: UN #Stat.Typ5_3;//Zylinder hält seine Stellung !
R #Stat.B_AST;
NETWORK
TITLE = GST-Erreichtzeit abgelaufen ?
Nw03: L #Stat.T_GST_Akt;//Gewollter Zeitwert
L 9999;//angegeben ?
<>I;//Ja !
SPB w030;
L #T_Gst;//Sollwert übergeben
T #Stat.T_GST_Akt;//Gewollter Zeitwert
w030: U(;//Zylinder fährt nach GST ?
O #Stat.Typ5_2;//Zylinder mit 2-facher Ansteuerung
O #Stat.Typ5_3;
);
U #ZylGst;
O;
U #Stat.Typ3_2;//Zylinder mit 1-facher Ansteuerung
UN #ZylAst;
SPBN en03;
SET;
R #Stat.B_AST;
L #Stat.T_Zelle;//Aktueller Zeitwert
L #Stat.T_GST_Akt;//Gewollter Zeitwert erreicht ?
>=I;
S #Stat.B_GST;//Zylinder hat GST erreicht
SPB tdel;//Zeit nullen
SPA Nw04;
en03: UN #Stat.Typ5_3;//Zylinder hält seine Stellung !
R #Stat.B_GST;
NETWORK
TITLE = Zeit läuft
Nw04: U(;//Zylinder fährt nach GST ?
O #Stat.Typ5_2;//Zylinder mit 2-facher Ansteuerung
O #Stat.Typ5_3;
);
UN #ZylGst;//Zylinder wird nicht angesteuert
UN #ZylAst;
ON "100ms-Impuls";//nur als Impuls
SPB Nw05;
L #Stat.T_Zelle;
L "MW2" ;//100ms-Takte
+I;
T #Stat.T_Zelle;
NETWORK
TITLE = Undefinierte Zustände / Befehle
Nw05: U #Automatik;//Automatik + Hand aktiv
U #Handbetrieb;
O;
UN #Automatik;//keine Betriebsart
UN #Handbetrieb;
O;
U #Stat.Ast;//Arbeitsstellung- + Grundstellungfahren aktiv
U #Stat.Gst;
O;
UN #Stat.Typ3_2;//Undefinierter Ventil-Typ
UN #Stat.Typ5_2;
UN #Stat.Typ5_3;
O;
U #Stat.Typ3_2;
U(;
O #Stat.Typ5_2;
O #Stat.Typ5_3;
);
O;
U #Stat.Typ5_2;
U #Stat.Typ5_3;
SPBN en06;//Zylinderstellung bleibt eingefroren
U #Stat.Typ5_3;//Zylinder hält seine Stellung !
R #Stat.Ast;//Bewegungsbits löschen
R #Stat.Gst;
BEA;
en06: NOP 0;
NETWORK
TITLE = Zylinder auf Arbeitstellung fahren
U #Stat.Ast;
= #ZylAst;
NETWORK
TITLE = Zylinder auf Grundstellung fahren
U(;
O #Stat.Typ5_2;
O #Stat.Typ5_3;
);
U #Stat.Gst;
= #ZylGst;
NETWORK
TITLE = Daten, die zurückgesetzt werden
U #Stat.Typ5_3;//Zylinder hält seine Stellung !
R #Stat.Ast;//Bewegungsbits löschen
R #Stat.Gst;
U #Stat.Typ3_2;
R #Stat.Gst;//Es gibt kein GST fahren !
NETWORK
TITLE = Ausgänge übergeben an OP übergeben
U #ZylGst;
= #Stat.OP_Out_GST;
U #ZylAst;
= #Stat.OP_Out_AST;
NETWORK
TITLE = Statistik
U #ZylAst;
FP #Stat.FP_AST;
SPBN AST2;
L #Stat.Statistik.AST_Schaltungen;
L DINT#1;
+D;
T #Stat.Statistik.AST_Schaltungen;
AST2: U #ZylGst;
U #Stat.Typ5_3;
FP #Stat.FP_AST2;
SPBN StatEnde;
L #Stat.Statistik.AST2_Schaltungen;
L DINT#1;
+D;
T #Stat.Statistik.AST2_Schaltungen;
StatEnde: NOP 0;
NETWORK
TITLE = Ende
BE;
END_FUNCTION_BLOCK