UH07 Original .awl Bausteine von Andi importiert

This commit is contained in:
2026-07-08 12:13:12 +02:00
parent 6c1a343fa8
commit 2cf730b338
125 changed files with 49373 additions and 41019 deletions
@@ -1,169 +1,286 @@
=== FB 199: HWtoVP_Antriebe [STL] ===
INTERFACE:
Input:
Output:
InOut:
Static:
MA0200 : "MAntrieb_PowerSave"
MA0201 : "MAntrieb_PowerSave"
MA0260 : "MAntrieb_PowerSave"
MA0261 : "MAntrieb_PowerSave"
MA0262 : "MAntrieb_PowerSave"
MA0263 : "MAntrieb_PowerSave"
MA0140 : "MAntrieb_PowerSave"
MA0141 : "MAntrieb_PowerSave"
MA0142 : "MAntrieb_PowerSave"
MA0143 : "MAntrieb_PowerSave"
MA0144 : "MAntrieb_PowerSave"
Temp:
Auto : Bool // Automatik Linie ist aktiv
Hand : Bool // Hand Linie ist aktiv
BereichErr : Bool // Bereichsstörung -> Antrieb stoppen
QKontroll : Bool // Frequenzumrichter schon 3s Netz EIN
FuKontroll : Bool // Frequenzumrichter schon 3s Netz EIN
Quit : Bool // Motorschutz-Störung quittieren
Qok : Bool // Motorschutz ok
Jog1 : Bool // Geschwindigkeit 1
Jog2 : Bool // Geschwindigkeit 2
Betrieb : Bool // Betriebsart aktiv
FC105_RET : Word // Returnwert von FC105
Antrieb1 : Bool // Antrieb dazuschalten
Antrieb2 : Bool // Antrieb dazuschalten
F1 : Bool // Geschwindigkeit 1 aktiviert
F2 : Bool // Geschwindigkeit 2 aktiviert
F3 : Bool // Geschwindigkeit 3 aktiviert
Constant:
FUNCTION_BLOCK "HWtoVP_Antriebe"
TITLE = Antriebe HW > VP
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : IBAE
VERSION : 0.1
VAR
MA0200 : "MAntrieb_PowerSave";
MA0201 : "MAntrieb_PowerSave";
MA0260 : "MAntrieb_PowerSave";
MA0261 : "MAntrieb_PowerSave";
MA0262 : "MAntrieb_PowerSave";
MA0263 : "MAntrieb_PowerSave";
MA0140 : "MAntrieb_PowerSave";
MA0141 : "MAntrieb_PowerSave";
MA0142 : "MAntrieb_PowerSave";
MA0143 : "MAntrieb_PowerSave";
MA0144 : "MAntrieb_PowerSave";
END_VAR
--- NW 1: Übergabe des Bereichstatus System UC072/A01 ---
A "DOutbound_Bereich".A01_UH07.Automatik
AN "DOutbound_Bereich".A01_UH07.Handbetrieb
= Auto
A(
A "DOutbound_Bereich".A01_UC072.BereichErr
O "DOutbound_Bereich".A01_UZ7201.Area_Stop
O "DOutbound_Bereich".A01_UZ7202.Area_Stop
)
AN "SGes".Simulation_ohne_HW_aktiv
= BereichErr
AN BereichErr
L S5T#1S
OnDelay "T192"
A "T192"
= QKontroll
= FuKontroll
A "DOutbound_Bereich".A01_UC072.StOk_aktiv
= Quit
VAR_TEMP
Auto : Bool; // Automatik Linie ist aktiv
Hand : Bool; // Hand Linie ist aktiv
BereichErr : Bool; // Bereichsstörung -> Antrieb stoppen
QKontroll : Bool; // Frequenzumrichter schon 3s Netz EIN
FuKontroll : Bool; // Frequenzumrichter schon 3s Netz EIN
Quit : Bool; // Motorschutz-Störung quittieren
Qok : Bool; // Motorschutz ok
Jog1 : Bool; // Geschwindigkeit 1
Jog2 : Bool; // Geschwindigkeit 2
Betrieb : Bool; // Betriebsart aktiv
FC105_RET : Word; // Returnwert von FC105
Antrieb1 : Bool; // Antrieb dazuschalten
Antrieb2 : Bool; // Antrieb dazuschalten
F1 : Bool; // Geschwindigkeit 1 aktiviert
F2 : Bool; // Geschwindigkeit 2 aktiviert
F3 : Bool; // Geschwindigkeit 3 aktiviert
END_VAR
--- NW 2: MA0200 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0200", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0200", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0200, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
BEGIN
NETWORK
TITLE = Übergabe des Bereichstatus System UC072/A01
U "DOutbound_Bereich".A01_UH07.Automatik;
UN "DOutbound_Bereich".A01_UH07.Handbetrieb;
= #Auto;
U(;
U "DOutbound_Bereich".A01_UC072.BereichErr;
O "DOutbound_Bereich".A01_UZ7201.Area_Stop;
O "DOutbound_Bereich".A01_UZ7202.Area_Stop;
);
UN "SGes".Simulation_ohne_HW_aktiv;
= #BereichErr;
UN #BereichErr;
L S5T#1S;
SE "T192";
U "T192";
= #QKontroll;
= #FuKontroll;
U "DOutbound_Bereich".A01_UC072.StOk_aktiv;
= #Quit;
NETWORK
TITLE = MA0200
CALL #MA0200
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0200" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0200" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0200
);
--- NW 3: MA0201 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0201", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0201", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0201, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
NETWORK
TITLE = MA0201
CALL #MA0201
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0201" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0201" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0201
);
NETWORK
TITLE = Übergabe des Bereichstatus System UC073/A01
U "DOutbound_Bereich".A01_UH07.Automatik;
UN "DOutbound_Bereich".A01_UH07.Handbetrieb;
= #Auto;
--- NW 4: Übergabe des Bereichstatus System UC073/A01 ---
A "DOutbound_Bereich".A01_UH07.Automatik
AN "DOutbound_Bereich".A01_UH07.Handbetrieb
= Auto
CLR;
= #Hand;
CLR
= Hand
U "DOutbound_Bereich".A01_UC073.BereichErr;
UN "SGes".Simulation_ohne_HW_aktiv;
= #BereichErr;
A "DOutbound_Bereich".A01_UC073.BereichErr
AN "SGes".Simulation_ohne_HW_aktiv
= BereichErr
UN #BereichErr;
L S5T#1S;
SE "T193";
AN BereichErr
L S5T#1S
OnDelay "T193"
U "T193";
= #QKontroll;
= #FuKontroll;
A "T193"
= QKontroll
= FuKontroll
U "DOutbound_Bereich".A01_UC073.StOk_aktiv;
= #Quit;
A "DOutbound_Bereich".A01_UC073.StOk_aktiv
= Quit
NETWORK
TITLE = MA0260
CALL #MA0260
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0260" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0260" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0260
);
--- NW 5: MA0260 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0260", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0260", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0260, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
NETWORK
TITLE = MA0261
CALL #MA0261
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0261" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0261" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0261
);
--- NW 6: MA0261 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0261", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0261", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0261, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
NETWORK
TITLE = MA0262
CALL #MA0262
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0262" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0262" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0262
);
--- NW 7: MA0262 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0262", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0262", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0262, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
NETWORK
TITLE = MA0263
CALL #MA0263
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0263" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0263" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0263
);
NETWORK
TITLE = Übergabe des Bereichstatus System UC071/A01
U "DOutbound_Bereich".A01_UH07.Automatik;
UN "DOutbound_Bereich".A01_UH07.Handbetrieb;
= #Auto;
--- NW 8: MA0263 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0263", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0263", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0263, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
CLR;
= #Hand;
U(;
O "DOutbound_Bereich".A01_UC071.BereichErr;
O "DOutbound_Bereich".A01_UZ7102.Area_Stop;
);
UN "SGes".Simulation_ohne_HW_aktiv;
= #BereichErr;
UN #BereichErr;
L S5T#1S;
SE "T191";
U "T191";
= #QKontroll;
= #FuKontroll;
U "DOutbound_Bereich".A01_UC071.StOk_aktiv;
= #Quit;
NETWORK
TITLE = MA0140
CALL #MA0140
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0140" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0140" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0140
);
--- NW 9: Übergabe des Bereichstatus System UC071/A01 ---
A "DOutbound_Bereich".A01_UH07.Automatik
AN "DOutbound_Bereich".A01_UH07.Handbetrieb
= Auto
CLR
= Hand
A(
O "DOutbound_Bereich".A01_UC071.BereichErr
O "DOutbound_Bereich".A01_UZ7102.Area_Stop
)
AN "SGes".Simulation_ohne_HW_aktiv
= BereichErr
AN BereichErr
L S5T#1S
OnDelay "T191"
A "T191"
= QKontroll
= FuKontroll
A "DOutbound_Bereich".A01_UC071.StOk_aktiv
= Quit
NETWORK
TITLE = MA0141
CALL #MA0141
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0141" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0141" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0141
);
--- NW 10: MA0140 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0140", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0140", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0140, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
NETWORK
TITLE = MA0142
CALL #MA0142
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0142" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0142" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0142
);
--- NW 11: MA0141 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0141", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0141", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0141, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
NETWORK
TITLE = MA0143
CALL #MA0143
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0143" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0143" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0143
);
NETWORK
TITLE = MA0144
CALL #MA0144
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0144" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0144" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0144
);
--- NW 12: MA0142 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0142", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0142", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0142, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
NETWORK
TITLE = Ende
BE;
--- NW 13: MA0143 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0143", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0143", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0143, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
--- NW 14: MA0144 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0144", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0144", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0144, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
--- NW 15: Ende ---
BE
END_FUNCTION_BLOCK
@@ -1,111 +1,244 @@
=== FB 190: HWtoVP_Sensoren [STL] ===
INTERFACE:
Input:
Output:
InOut:
Static:
Stau_BG3730 : "MSensoren" // Stau am Sensor Einfahrt MA0201
Stau_BG4202 : "MSensoren" // Stau am Sensor Einfahrt MA0261
Stau_BG4204 : "MSensoren" // Stau am Sensor Einfahrt MA0262
Stau_BG4206 : "MSensoren" // Stau am Sensor Einfahrt MA0263
Stau_BG4210 : "MSensoren" // Stau am Sensor Weiche MB4210
Stau_BG4211 : "MSensoren" // Stau am Sensor Weiche MB4210
Stau_BG4213 : "MSensoren" // Stau am Sensor
Stau_BG4215 : "MSensoren" // Stau am Sensor Einfahrt MA140
Stau_BG3144 : "MSensoren" // Stau am Sensor Einfahrt Schleuse3144
Stau_BG3142 : "MSensoren" // Stau am Sensor Einfahrt Schleuse3142
Stau_BG3130 : "MSensoren" // Stau am Sensor Einfahrt Schleuse3130
Stau_BG3127 : "MSensoren" // Stau am Sensor Einfahrt Schleuse3127
Stau_BG3132 : "MSensoren" // Stau am Sensor Einfahrt Schleuse3132
Stau_BG3133 : "MSensoren" // Stau am Sensor Einfahrt Schleuse3132
Stau_BG3135 : "MSensoren" // Stau am Sensor Einfahrt Schleuse3135
Stau_BG4216 : "MSensoren" // Stau am Sensor Einfahrt MA140
Stau_BG3724 : "MSensoren" // Stau am Sensor Einfahrt MA200
Stau_BG4201 : "MSensoren" // Stau am Sensor hinter BST2
Temp:
T_Ein : Int // Vorgabe Einschaltverzögerung
T_Aus : Int // Zwischenspeicher Ausschaltverzögerung
F1 : Bool // Geschwindigkeit 1 aktiviert
F2 : Bool // Geschwindigkeit 2 aktiviert
F3 : Bool // Geschwindigkeit 3 aktiviert
ESensor : Bool // Sensoren
Antrieb : Bool
VReal : Real // GeschwindigkeitinReal
Zeit : Int // Zeit für Ausschaltverzögerung LT1100
Aktiv : Bool // Zeit aktivieren
Constant:
FUNCTION_BLOCK "HWtoVP_Sensoren"
TITLE = Sensoren Outbound: HW > VP
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : IBAE
VERSION : 0.1
VAR
Stau_BG3730 : "MSensoren"; // Stau am Sensor Einfahrt MA0201
Stau_BG4202 : "MSensoren"; // Stau am Sensor Einfahrt MA0261
Stau_BG4204 : "MSensoren"; // Stau am Sensor Einfahrt MA0262
Stau_BG4206 : "MSensoren"; // Stau am Sensor Einfahrt MA0263
Stau_BG4210 : "MSensoren"; // Stau am Sensor Weiche MB4210
Stau_BG4211 : "MSensoren"; // Stau am Sensor Weiche MB4210
Stau_BG4213 : "MSensoren"; // Stau am Sensor
Stau_BG4215 : "MSensoren"; // Stau am Sensor Einfahrt MA140
Stau_BG3144 : "MSensoren"; // Stau am Sensor Einfahrt Schleuse3144
Stau_BG3142 : "MSensoren"; // Stau am Sensor Einfahrt Schleuse3142
Stau_BG3130 : "MSensoren"; // Stau am Sensor Einfahrt Schleuse3130
Stau_BG3127 : "MSensoren"; // Stau am Sensor Einfahrt Schleuse3127
Stau_BG3132 : "MSensoren"; // Stau am Sensor Einfahrt Schleuse3132
Stau_BG3133 : "MSensoren"; // Stau am Sensor Einfahrt Schleuse3132
Stau_BG3135 : "MSensoren"; // Stau am Sensor Einfahrt Schleuse3135
Stau_BG4216 : "MSensoren"; // Stau am Sensor Einfahrt MA140
Stau_BG3724 : "MSensoren"; // Stau am Sensor Einfahrt MA200
Stau_BG4201 : "MSensoren"; // Stau am Sensor hinter BST2
END_VAR
--- NW 1: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3730", T_Ein:=1, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
VAR_TEMP
T_Ein : Int; // Vorgabe Einschaltverzögerung
T_Aus : Int; // Zwischenspeicher Ausschaltverzögerung
F1 : Bool; // Geschwindigkeit 1 aktiviert
F2 : Bool; // Geschwindigkeit 2 aktiviert
F3 : Bool; // Geschwindigkeit 3 aktiviert
ESensor : Bool; // Sensoren
Antrieb : Bool;
VReal : Real; // GeschwindigkeitinReal
Zeit : Int; // Zeit für Ausschaltverzögerung LT1100
Aktiv : Bool; // Zeit aktivieren
END_VAR
--- NW 2: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4202", T_Ein:=1, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
BEGIN
NETWORK
TITLE = Stau am Sensor Einfahrt MA0201
//Sensoren entprellen
CALL #Stau_BG3730
( ESensor := "BG3730" ,
T_Ein := 1 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau am Sensor Einfahrt MA0261
//Sensoren entprellen
CALL #Stau_BG4202
( ESensor := "BG4202" ,
T_Ein := 1 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 3: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4204", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Stau am Sensor Einfahrt MA0262
//Sensoren entprellen
CALL #Stau_BG4204
( ESensor := "BG4204" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau am Sensor Einfahrt MA0263
//Sensoren entprellen
CALL #Stau_BG4206
( ESensor := "BG4206" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 4: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4206", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Stau am Sensor vor Weiche MB4210
//Sensoren entprellen
CALL #Stau_BG4210
( ESensor := "BG4210" ,
T_Ein := 80 ,
T_Aus := 101 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau am Sensor nach Weiche MB4210
//Sensoren entprellen
CALL #Stau_BG4211
( ESensor := "BG4211" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 5: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4210", T_Ein:=80, T_Aus:=101, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Stau am Sensor Weiche MB4213
//Sensoren entprellen
CALL #Stau_BG4213
( ESensor := "BG4213" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau am Sensor Einfahrt MA0140
//Sensoren entprellen
CALL #Stau_BG4215
( ESensor := "BG4215" ,
T_Ein := 1 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 6: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4211", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Stau am Sensor Einfahrt Schleuse3144
//Sensoren entprellen
CALL #Stau_BG3144
( ESensor := "BG3144" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau am Sensor Einfahrt Schleuse3142
//Sensoren entprellen
CALL #Stau_BG3142
( ESensor := "BG3142" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := True
);
--- NW 7: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4213", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Stau am Sensor Einfahrt Schleuse3130
//Sensoren entprellen
CALL #Stau_BG3130
( ESensor := "BG3130" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := True
);
NETWORK
TITLE = Stau am Sensor Einfahrt Schleuse3127
//Sensoren entprellen
CALL #Stau_BG3127
( ESensor := "BG3127" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 8: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4215", T_Ein:=1, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Stau am Sensor Einfahrt Schleuse3132
//Sensoren entprellen
CALL #Stau_BG3132
( ESensor := "BG3132" ,
T_Ein := 1 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau am Sensor Einfahrt Schleuse3133
//Sensoren entprellen
CALL #Stau_BG3133
( ESensor := "BG3133" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 9: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3144", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Stau am Sensor Einfahrt Schleuse3135
//Sensoren entprellen
CALL #Stau_BG3135
( ESensor := "BG3135" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau am Sensor Einfahrt Schleuse4207
//Sensoren entprellen
CALL #Stau_BG4216
( ESensor := "BG4216" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 10: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3142", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=True)
NETWORK
TITLE = Stau am Sensor Einfahrt MA0200
//Sensoren entprellen
CALL #Stau_BG3724
( ESensor := "BG3724" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau am Sensor hinter BST2
//Sensoren entprellen
CALL #Stau_BG4201
( ESensor := "BG4201" ,
T_Ein := 1 ,
T_Aus := 30 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 11: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3130", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=True)
NETWORK
TITLE = Ende
BE;
--- NW 12: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3127", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
--- NW 13: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3132", T_Ein:=1, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
--- NW 14: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3133", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
--- NW 15: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3135", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
--- NW 16: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4216", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
--- NW 17: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3724", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
--- NW 18: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4201", T_Ein:=1, T_Aus:=30, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
--- NW 19: Ende ---
BE
END_FUNCTION_BLOCK
@@ -1,117 +1,202 @@
=== FB 192: HWtoVP_Zylinder [STL] ===
INTERFACE:
Input:
Output:
InOut:
Static:
Schleuse_3725 : "MZylinder" //
Schleuse_4200 : "MZylinder"
Schleuse_4207 : "MZylinder"
Schleuse_4212 : "MZylinder"
Schleuse_4214 : "MZylinder"
Schleuse_3143 : "MZylinder" //
Schleuse_3141 : "MZylinder" //
Weiche_3137 : "MZylinder" //
Weiche_3140 : "MZylinder" //
Schleuse_3131 : "MZylinder" //
Schleuse_3134 : "MZylinder" //
Schleuse_3136 : "MZylinder" //
Schleuse_4217 : "MZylinder" //
Temp:
Auto : Bool // Automatik ist aktiv
Hand : Bool // Hand ist aktiv
ZylAst : Bool // Zylinder ansteuern
Constant:
FUNCTION_BLOCK "HWtoVP_Zylinder"
TITLE = Zylinder Outbound Highway > Vollpuffer
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : AE
VERSION : 0.1
VAR
Schleuse_3725 : "MZylinder"; //
Schleuse_4200 : "MZylinder";
Schleuse_4207 : "MZylinder";
Schleuse_4212 : "MZylinder";
Schleuse_4214 : "MZylinder";
Schleuse_3143 : "MZylinder"; //
Schleuse_3141 : "MZylinder"; //
Weiche_3137 : "MZylinder"; //
Weiche_3140 : "MZylinder"; //
Schleuse_3131 : "MZylinder"; //
Schleuse_3134 : "MZylinder"; //
Schleuse_3136 : "MZylinder"; //
Schleuse_4217 : "MZylinder"; //
END_VAR
--- NW 1: Übergabe des Bereichstatus System UC072/A01 ---
A "DOutbound_Bereich".A01_UH07.Automatik
AN "DOutbound_Bereich".A01_UH07.Handbetrieb
= Auto
A(
A "DOutbound_Bereich".A01_UC072.BereichErr
O "DOutbound_Bereich".A01_UZ7201.Area_Stop
O "DOutbound_Bereich".A01_UZ7202.Area_Stop
)
AN "SGes".Simulation_ohne_HW_aktiv
JC Next // Zylinder-Stellung nicht mehr ändern
VAR_TEMP
Auto : Bool; // Automatik ist aktiv
Hand : Bool; // Hand ist aktiv
ZylAst : Bool; // Zylinder ansteuern
END_VAR
--- NW 2: Schleuse_3725 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3725", ZylGst:=?)
BEGIN
NETWORK
TITLE = Übergabe des Bereichstatus System UC072/A01
U "DOutbound_Bereich".A01_UH07.Automatik;
UN "DOutbound_Bereich".A01_UH07.Handbetrieb;
= #Auto;
U(;
U "DOutbound_Bereich".A01_UC072.BereichErr;
O "DOutbound_Bereich".A01_UZ7201.Area_Stop;
O "DOutbound_Bereich".A01_UZ7202.Area_Stop;
);
UN "SGes".Simulation_ohne_HW_aktiv;
SPB Next ;//Zylinder-Stellung nicht mehr ändern
--- NW 3: Übergabe des Bereichstatus System UC073/A01 ---
Next: A "DOutbound_Bereich".A01_UH07.Automatik
AN "DOutbound_Bereich".A01_UH07.Handbetrieb
= Auto
NETWORK
TITLE = Schleuse_3725
CALL #Schleuse_3725
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3725"
);
A "DOutbound_Bereich".A01_UC073.BereichErr
AN "SGes".Simulation_ohne_HW_aktiv
JC Next2 // Zylinder-Stellung nicht mehr ändern
NETWORK
TITLE = Übergabe des Bereichstatus System UC073/A01
Next: U "DOutbound_Bereich".A01_UH07.Automatik;
UN "DOutbound_Bereich".A01_UH07.Handbetrieb;
= #Auto;
U "DOutbound_Bereich".A01_UC073.BereichErr;
UN "SGes".Simulation_ohne_HW_aktiv;
SPB Next2 ;//Zylinder-Stellung nicht mehr ändern
--- NW 4: Schleuse_4200 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB4200", ZylGst:=?)
NETWORK
TITLE = Schleuse_4200
CALL #Schleuse_4200
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB4200"
);
NETWORK
TITLE = Schleuse_4207
CALL #Schleuse_4207
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB4207"
);
--- NW 5: Schleuse_4207 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB4207", ZylGst:=?)
NETWORK
TITLE = Schleuse_4212
CALL #Schleuse_4212
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB4212"
);
NETWORK
TITLE = Schleuse_4214
CALL #Schleuse_4214
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB4214"
);
--- NW 6: Schleuse_4212 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB4212", ZylGst:=?)
NETWORK
TITLE = Übergabe des Bereichstatus System UC071/A01
Next2: U "DOutbound_Bereich".A01_UH07.Automatik;
UN "DOutbound_Bereich".A01_UH07.Handbetrieb;
= #Auto;
U(;
O "DOutbound_Bereich".A01_UC071.BereichErr;
O "DOutbound_Bereich".A01_UZ7102.Area_Stop;
);
UN "SGes".Simulation_ohne_HW_aktiv;
SPB Next3 ;//Zylinder-Stellung nicht mehr ändern
--- NW 7: Schleuse_4214 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB4214", ZylGst:=?)
NETWORK
TITLE = Schleuse_3143
CALL #Schleuse_3143
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3143"
);
NETWORK
TITLE = Schleuse_3141
CALL #Schleuse_3141
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3141"
);
--- NW 8: Übergabe des Bereichstatus System UC071/A01 ---
Next2: A "DOutbound_Bereich".A01_UH07.Automatik
AN "DOutbound_Bereich".A01_UH07.Handbetrieb
= Auto
NETWORK
TITLE = Weiche_3137
CALL #Weiche_3137
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3137"
);
A(
O "DOutbound_Bereich".A01_UC071.BereichErr
O "DOutbound_Bereich".A01_UZ7102.Area_Stop
)
AN "SGes".Simulation_ohne_HW_aktiv
JC Next3 // Zylinder-Stellung nicht mehr ändern
NETWORK
TITLE = Weiche_3140
CALL #Weiche_3140
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3140"
);
NETWORK
TITLE = Schleuse_3131
CALL #Schleuse_3131
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3131"
);
--- NW 9: Schleuse_3143 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3143", ZylGst:=?)
NETWORK
TITLE = Schleuse_3134
CALL #Schleuse_3134
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3134"
);
NETWORK
TITLE = Schleuse_3136
CALL #Schleuse_3136
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3136"
);
--- NW 10: Schleuse_3141 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3141", ZylGst:=?)
NETWORK
TITLE = Schleuse_4217
CALL #Schleuse_4217
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB4217"
);
NETWORK
TITLE = Ende
Next3: BE;
--- NW 11: Weiche_3137 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3137", ZylGst:=?)
--- NW 12: Weiche_3140 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3140", ZylGst:=?)
--- NW 13: Schleuse_3131 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3131", ZylGst:=?)
--- NW 14: Schleuse_3134 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3134", ZylGst:=?)
--- NW 15: Schleuse_3136 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3136", ZylGst:=?)
--- NW 16: Schleuse_4217 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB4217", ZylGst:=?)
--- NW 17: Ende ---
Next3: BE
END_FUNCTION_BLOCK
@@ -1,23 +1,22 @@
=== FC 100: HWtoOB_Bereich [STL] ===
INTERFACE:
Input:
Output:
InOut:
Temp:
Constant:
Return:
Ret_Val : Void
FUNCTION "HWtoOB_Bereich" : Void
TITLE = Bereich Outbound: HW > VP
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
--- NW 1: Baustein-Aufrufe ---
CALL FB "HWtoVP_Sensoren" ,
BEGIN
NETWORK
TITLE = Baustein-Aufrufe
CALL "HWtoVP_Sensoren", "DHWtoVP_Sensoren";
CALL FB "HWtoVP_OmniFahren" ,
CALL "HWtoVP_OmniFahren", "DHWtoVP_OmniFahren";
CALL FB "HWtoVP_Zylinder" ,
CALL "HWtoVP_Zylinder", "DHWtoVP_Zylinder";
CALL FB "HWtoVP_Antriebe" ,
CALL "HWtoVP_Antriebe", "DHWtoVP_Antriebe";
NETWORK
TITLE = Ende
BE;
--- NW 2: Ende ---
BE
END_FUNCTION
@@ -1,84 +1,104 @@
=== FC 182: HWtoVP_Draussen [STL] ===
INTERFACE:
Input:
Output:
InOut:
Temp:
Error.Bit : Bool
Constant:
Return:
Ret_Val : Void
--- NW 1: Rückmeldung ---
SET // Rückmeldungen erst mal resetten
R "M180.6" // Weiterfahrt von Ziel-FC erlaubt
FUNCTION "HWtoVP_Draussen" : Void
TITLE = Draussen-FC: HW > VP
{ S7_Optimized_Access := 'FALSE' ; S7_Pass_Registers := 'TRUE' }
AUTHOR : AE
VERSION : 0.1
VAR_TEMP
"Error.Bit" : Bool;
END_VAR
--- NW 2: Schleuse 4207 (Vor ByPass vom LP): Ausgefahren ? ---
L "MW190"
L 4207 // Aufruf von Schleuse 4207?
<>I // Nein!
JC X4207E
BEGIN
NETWORK
TITLE = Rückmeldung
SET;//Rückmeldungen erst mal resetten
R "M180.6";//Weiterfahrt von Ziel-FC erlaubt
L "DLPtoHW_OmniFahren".Schleuse_4221.Dyn.Weichen_Ziel
L 16#4224 // Gerade ? Also zum AMR-Bereich?
==I // Ja !
BEC
NETWORK
TITLE = Schleuse 4207 (Vor ByPass vom LP): Ausgefahren ?
L "MW190";
L 4207 ;//Aufruf von Schleuse 4207?
<>I;//Nein!
SPB X4207E;
// Partner-Trolley will zu VP fahren:
// Bei Partner (Schleuse 4221) wieder mit Schritt 0 beginnen (erneuter Ziel-FC-Aufruf)
L 0
T "DLPtoHW_OmniFahren".Schleuse_4221.Dyn.Sk.Akt_Schritt
L "DLPtoHW_OmniFahren".Schleuse_4221.Dyn.Weichen_Ziel;
L 16#4224 ;//Gerade ? Also zum AMR-Bereich?
==I ;//Ja !
BEB;
X4207E: NOP 0
//Partner-Trolley will zu VP fahren:
//Bei Partner (Schleuse 4221) wieder mit Schritt 0 beginnen (erneuter Ziel-FC-Aufruf)
L 0;
T "DLPtoHW_OmniFahren".Schleuse_4221.Dyn.Sk.Akt_Schritt;
X4207E: NOP 0;
--- NW 3: Schleuse 3141: (Vor Einfahrt Kontrollplatz) ---
L "MW190"
L 3141 // Aufruf von Schleuse 3141 ?
<>I // Nein!
JC X3141E
NETWORK
TITLE = Schleuse 3141: (Vor Einfahrt Kontrollplatz)
L "MW190";
L 3141 ;//Aufruf von Schleuse 3141 ?
<>I;//Nein!
SPB X3141E;
// Bei Partner (Schleuse 3136) wieder mit Schritt 0 beginnen (erneuter Ziel-FC-Aufruf)
L 0
T "DHWtoVP_OmniFahren".Schleuse_3136.Dyn.Sk.Akt_Schritt
//Bei Partner (Schleuse 3136) wieder mit Schritt 0 beginnen (erneuter Ziel-FC-Aufruf)
L 0;
T "DHWtoVP_OmniFahren".Schleuse_3136.Dyn.Sk.Akt_Schritt;
// Leerer Trolley vom Leerpuffer?
L "MD182" // ShopGroup
L DINT#-1 // Leer-Trolley?
==D // Ja !
BEC // Kein Telegramm!
//Leerer Trolley vom Leerpuffer?
L "MD182" ;//ShopGroup
L DINT#-1 ;//Leer-Trolley?
==D ;//Ja !
BEB;//Kein Telegramm!
// GOHDUM an Host senden:
L "DHWtoVP_OmniFahren".Schleuse_3141.Dyn.Weichen_Ziel
BTI
T "Daten_für_SendFIFO".Puffer_LinienNr
//GOHDUM an Host senden:
L "DHWtoVP_OmniFahren".Schleuse_3141.Dyn.Weichen_Ziel;
BTI;
T "Daten_für_SendFIFO".Puffer_LinienNr;
CALL FB "Daten_in_SendFIFO_speichern" , (TelegrammKennung[1]:='G', TelegrammKennung[2]:='O', TelegrammKennung[3]:='H', TelegrammKennung[4]:='D', TelegrammKennung[5]:='U', TelegrammKennung[6]:='M', TelegrammKennung[7]:=?, TelegrammKennung[8]:=?, TelegrammKennung[9]:=?, TelegrammKennung[10]:=?, TrolleyID:="DHWtoVP_OmniFahren".Schleuse_3141.Dyn.TrolleyID_Schleuse, StationsNr:=3141, Puffer_LinienNr:=?, StoreGroup:=?, Status_1_Int:=?, Status_2_Bit[0]:=?, Status_2_Bit[1]:=?, Status_2_Bit[2]:=?, Status_2_Bit[3]:=?, Status_2_Bit[4]:=?, Status_2_Bit[5]:=?, Status_2_Bit[6]:=?, Status_2_Bit[7]:=?, Reserve[1]_Int:=?, Reserve[2]_Int:=?, Port:=2, Ret_Val_FIFO_IN:="MB199", Error:="Error.Bit")
CALL "Daten_in_SendFIFO_speichern", "Daten_für_SendFIFO"
( "TelegrammKennung[1]" := 'G' ,
"TelegrammKennung[2]" := 'O' ,
"TelegrammKennung[3]" := 'H' ,
"TelegrammKennung[4]" := 'D' ,
"TelegrammKennung[5]" := 'U' ,
"TelegrammKennung[6]" := 'M' ,
TrolleyID := "DHWtoVP_OmniFahren".Schleuse_3141.Dyn.TrolleyID_Schleuse ,
StationsNr := 3141 ,
Port := 2 ,
Ret_Val_FIFO_IN := "MB199" ,
Error := #"Error.Bit"
);
// Endziel wieder nullen:
CALL FC "Trolleydaten_ändern" (Gesamt_Trolley_DL:=1000, TrolleyID:="DHWtoVP_OmniFahren".Schleuse_3141.Dyn.TrolleyID_Schleuse, Endziel:=W#16#0, ShopGroup:=0)
//Endziel wieder nullen:
CALL "Trolleydaten_ändern"
( Gesamt_Trolley_DL := 1000 ,
TrolleyID := "DHWtoVP_OmniFahren".Schleuse_3141.Dyn.TrolleyID_Schleuse ,
Endziel := 0 ,
ShopGroup := 0
);
BEU
BEA;
X3141E: NOP 0
X3141E: NOP 0;
NETWORK
TITLE = Schleuse 3136: (Vor Einfahrt Kontrollplatz)
L "MW190";
L 3136 ;//Aufruf von Schleuse 3136 ?
<>I;//Nein!
SPB X3136E;
--- NW 4: Schleuse 3136: (Vor Einfahrt Kontrollplatz) ---
L "MW190"
L 3136 // Aufruf von Schleuse 3136 ?
<>I // Nein!
JC X3136E
//Bei Partner (Schleuse 3141) wieder mit Schritt 0 beginnen (erneuter Ziel-FC-Aufruf)
L 0;
T "DHWtoVP_OmniFahren".Schleuse_3141.Dyn.Sk.Akt_Schritt;
// Bei Partner (Schleuse 3141) wieder mit Schritt 0 beginnen (erneuter Ziel-FC-Aufruf)
L 0
T "DHWtoVP_OmniFahren".Schleuse_3141.Dyn.Sk.Akt_Schritt
BEA;
BEU
X3136E: NOP 0;
X3136E: NOP 0
NETWORK
TITLE = Ende
BE;
--- NW 5: Ende ---
BE
END_FUNCTION
@@ -1,101 +1,120 @@
=== FC 180: HWtoVP_Leser_FC [STL] ===
INTERFACE:
Input:
Output:
InOut:
Temp:
Zielebene : Word
Constant:
Return:
Ret_Val : Void
--- NW 1: Rückmeldung ---
// Keine
L 0 // Evtl. Zwischenziel (MW196)
T "MW196"
FUNCTION "HWtoVP_Leser_FC" : Void
TITLE = Leser-FC: ZG
{ S7_Optimized_Access := 'FALSE' ; S7_Pass_Registers := 'TRUE' }
AUTHOR : AE
VERSION : 0.1
VAR_TEMP
Zielebene : Word;
END_VAR
--- NW 2: Schleuse 3143: (Anfrage KontrollPlatz) ---
L "MW190" // Schleusen-Nr.
L 3143 // Aufruf von Schleuse ?
<>I // Nein!
JC X3143E
BEGIN
NETWORK
TITLE = Rückmeldung
AN "M180.0" // Lesefehler
JC Y3143
//Keine
L 0;//Evtl. Zwischenziel (MW196)
T "MW196";
BEU
NETWORK
TITLE = Schleuse 3143: (Anfrage KontrollPlatz)
L "MW190" ;//Schleusen-Nr.
L 3143 ;//Aufruf von Schleuse ?
<>I;//Nein!
SPB X3143E;
Y3143: AN "M180.1" // unbekannt in TrolleysDL
BEC
UN "M180.0";//Lesefehler
SPB Y3143;
// Daten in Datenbank erzeugen:
L "DHWtoVP_OmniFahren".Schleuse_3143.Dyn.TrolleyID_Schleuse
L DINT#0 // ID bekannt?
==D // Nein
BEC
BEA;
CALL FC "Trolleydaten_neu_anlegen" (Gesamt_Trolley_DL:="DHWtoVP_OmniFahren".Schleuse_3143.Schleuse.Gesamt_Trolley_DL, TrolleyID:="DHWtoVP_OmniFahren".Schleuse_3143.Dyn.TrolleyID_Schleuse, Endziel:=16#B000, ShopGroup:=DINT#0) // Voll-Puffer-Bereich
Y3143: UN "M180.1" ;//unbekannt in TrolleysDL
BEB;
BEU
//Daten in Datenbank erzeugen:
L "DHWtoVP_OmniFahren".Schleuse_3143.Dyn.TrolleyID_Schleuse;
L DINT#0 ;//ID bekannt?
==D;//Nein
BEB;
X3143E: NOP 0
CALL "Trolleydaten_neu_anlegen"
( Gesamt_Trolley_DL := "DHWtoVP_OmniFahren".Schleuse_3143.Schleuse.Gesamt_Trolley_DL ,
TrolleyID := "DHWtoVP_OmniFahren".Schleuse_3143.Dyn.TrolleyID_Schleuse ,
Endziel := 16#B000 , //Voll-Puffer-Bereich
ShopGroup := DINT#0
);
BEA;
--- NW 3: Schleuse 3141: (Vor Einfahrt KontrollPlatz) ---
L "MW190" // Schleusen-Nr.
L 3141 // Aufruf von Schleuse ?
<>I // Nein!
JC X3141E
X3143E: NOP 0;
AN "M180.0" // Lesefehler
JC Y3141
NETWORK
TITLE = Schleuse 3141: (Vor Einfahrt KontrollPlatz)
L "MW190" ;//Schleusen-Nr.
L 3141 ;//Aufruf von Schleuse ?
<>I;//Nein!
SPB X3141E;
BEU
UN "M180.0";//Lesefehler
SPB Y3141;
Y3141: AN "M180.1" // unbekannt in TrolleysDL
BEC
BEA;
// Daten in Datenbank erzeugen:
L "DHWtoVP_OmniFahren".Schleuse_3141.Dyn.TrolleyID_Schleuse
L DINT#0 // ID bekannt?
==D // Nein
BEC
Y3141: UN "M180.1" ;//unbekannt in TrolleysDL
BEB;
CALL FC "Trolleydaten_neu_anlegen" (Gesamt_Trolley_DL:="DHWtoVP_OmniFahren".Schleuse_3141.Schleuse.Gesamt_Trolley_DL, TrolleyID:="DHWtoVP_OmniFahren".Schleuse_3141.Dyn.TrolleyID_Schleuse, Endziel:=16#B000, ShopGroup:=DINT#0) // Voll-Puffer-Bereich
//Daten in Datenbank erzeugen:
L "DHWtoVP_OmniFahren".Schleuse_3141.Dyn.TrolleyID_Schleuse;
L DINT#0 ;//ID bekannt?
==D;//Nein
BEB;
BEU
CALL "Trolleydaten_neu_anlegen"
( Gesamt_Trolley_DL := "DHWtoVP_OmniFahren".Schleuse_3141.Schleuse.Gesamt_Trolley_DL ,
TrolleyID := "DHWtoVP_OmniFahren".Schleuse_3141.Dyn.TrolleyID_Schleuse ,
Endziel := 16#B000 , //Voll-Puffer-Bereich
ShopGroup := DINT#0
);
X3141E: NOP 0
BEA;
X3141E: NOP 0;
--- NW 4: Schleuse 3134: (KontrollPlatz) ---
L "MW190" // Schleusen-Nr.
L 3134 // Aufruf von Schleuse ?
<>I // Nein!
JC X3134E
NETWORK
TITLE = Schleuse 3134: (KontrollPlatz)
L "MW190" ;//Schleusen-Nr.
L 3134 ;//Aufruf von Schleuse ?
<>I;//Nein!
SPB X3134E;
AN "M180.0" // Lesefehler
JC Y3134
UN "M180.0";//Lesefehler
SPB Y3134;
BEU
BEA;
Y3134: AN "M180.1" // unbekannt in TrolleysDL
BEC
Y3134: UN "M180.1" ;//unbekannt in TrolleysDL
BEB;
// Daten in Datenbank erzeugen:
L "DHWtoVP_OmniFahren".Schleuse_3134.Dyn.TrolleyID_Schleuse
L DINT#0 // ID bekannt?
==D // Nein
BEC
//Daten in Datenbank erzeugen:
L "DHWtoVP_OmniFahren".Schleuse_3134.Dyn.TrolleyID_Schleuse;
L DINT#0 ;//ID bekannt?
==D;//Nein
BEB;
CALL FC "Trolleydaten_neu_anlegen" (Gesamt_Trolley_DL:="DHWtoVP_OmniFahren".Schleuse_3134.Schleuse.Gesamt_Trolley_DL, TrolleyID:="DHWtoVP_OmniFahren".Schleuse_3134.Dyn.TrolleyID_Schleuse, Endziel:=16#B000, ShopGroup:=DINT#0) // Voll-Puffer-Bereich
CALL "Trolleydaten_neu_anlegen"
( Gesamt_Trolley_DL := "DHWtoVP_OmniFahren".Schleuse_3134.Schleuse.Gesamt_Trolley_DL ,
TrolleyID := "DHWtoVP_OmniFahren".Schleuse_3134.Dyn.TrolleyID_Schleuse ,
Endziel := 16#B000 , //Voll-Puffer-Bereich
ShopGroup := DINT#0
);
BEU
BEA;
X3134E: NOP 0
X3134E: NOP 0;
NETWORK
TITLE = Ende
BE;
--- NW 5: Ende ---
BE
END_FUNCTION
@@ -1,284 +1,320 @@
=== FC 181: HWtoVP_Ziel_FC [STL] ===
INTERFACE:
Input:
Output:
InOut:
Temp:
Ziel_hex : Word
Ziel_int : Int
Zielebene : Word
Error : Byte
Position : Int
Lager_DB : Int
Lager_DW : Int
AR1Zeiger : DWord // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
AR1Start : DInt // Startwert mit Offset 0
SSDW : Int
EndZiel : Word
Variante : Int
AbrufID : DInt
Fahrlisten_TrolleyID : DInt
Fahrlisten_AbrufID : DInt
Fahrlisten_Lager : Int
Trolley_unbekannt : Bool // Trolley ist nicht in DL
Express_Abruf : Bool
Error.Bit : Bool
Constant:
Return:
Ret_Val : Void
--- NW 1: Rückmeldung ---
SET // Rückmeldungen erst mal resetten
R "M180.6" // Weiterfahrt von Ziel-FC erlaubt
--- NW 2: Schleuse 3731: (BST 2) ---
L "MW190"
L 3731 // Aufruf von Schleuse XXXX?
<>I // Nein!
JC X3731E
SET
S "M180.6" // Weiterfahrt ist erlaubt
FUNCTION "HWtoVP_Ziel_FC" : Void
TITLE = Ziel-FC: HW>VP_OmniFahren
{ S7_Optimized_Access := 'FALSE' ; S7_Pass_Registers := 'TRUE' }
AUTHOR : AE
VERSION : 0.1
VAR_TEMP
Ziel_hex : Word;
Ziel_int : Int;
Zielebene : Word;
Error : Byte;
Position : Int;
Lager_DB : Int;
Lager_DW : Int;
AR1Zeiger : DWord; // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
AR1Start : DInt; // Startwert mit Offset 0
SSDW : Int;
EndZiel : Word;
Variante : Int;
AbrufID : DInt;
Fahrlisten_TrolleyID : DInt;
Fahrlisten_AbrufID : DInt;
Fahrlisten_Lager : Int;
Trolley_unbekannt : Bool; // Trolley ist nicht in DL
Express_Abruf : Bool;
"Error.Bit" : Bool;
END_VAR
BEGIN
NETWORK
TITLE = Rückmeldung
SET;//Rückmeldungen erst mal resetten
R "M180.6";//Weiterfahrt von Ziel-FC erlaubt
NETWORK
TITLE = Schleuse 3731: (BST 2)
L "MW190";
L 3731 ;//Aufruf von Schleuse XXXX?
<>I;//Nein!
SPB X3731E;
SET;
S "M180.6" ;//Weiterfahrt ist erlaubt
BEA;
X3731E: NOP 0;
NETWORK
TITLE = Bereich 4203: Weiterfahren erlaubt ? (AFS von BST)
L "MW190";
L 4203 ;//Aufruf von Schleuse 4203 ?
<>I;//Nein!
SPB X4203E;
SET;
S "M180.6" ;//Weiterfahrt ist erlaubt
BEA;
X4203E: NOP 0;
NETWORK
TITLE = Schleuse 4207: (Vor BypPass von LP)
L "MW190";
L 4207 ;//Aufruf von Schleuse XXXX?
<>I;//Nein!
SPB X4207E;
//Quell-Steuerung:
L "DLPtoHW_OmniFahren".Weiche_4223.Dyn.Weichen_Ziel;
L 16#4211;//Fahren Trolleys zu BG4211?
==I;//Ja!
O "MB4223";//Weiche ist auf Abzweig
O "DLPtoHW_OmniFahren".Weiche_4223.Dyn.Status.Reset_aktiv;
BEB;//Warten !
//Ziel-Check:
UN "MB4223" ;//Weiche Einfahrt ByPass
UN "MB4210";
UN "DHWtoVP_Sensoren".Stau_BG4210.Stat.B_Akt;
UN "DHWtoVP_Sensoren".Stau_BG4211.Stat.B_Akt;
S "M180.6" ;//Weiterfahrt ist erlaubt
BEA;
X4207E: NOP 0;
NETWORK
TITLE = Bereich 3145: Weiterfahren erlaubt ? (AFS von 1.Ebene)
L "MW190";
L 3145 ;//Aufruf von Schleuse 3145 ?
<>I;//Nein!
SPB X3145E;
SET;
S "M180.6" ;//Weiterfahrt ist erlaubt
BEA;
X3145E: NOP 0;
NETWORK
TITLE = Schleuse 3143: (Anfrage KontrollPlatz)
L "MW190";
L 3143 ;//Aufruf von Schleuse XXXX?
<>I;//Nein!
SPB X3143E;
L "MD182" ;//ShopGroup
L DINT#-1 ;//Leer-Trolley?
==D ;//Ja !
S "M180.6" ;//Weiterfahrt ist erlaubt
BEB;//Kein Telegramm!
U "SGes".Ohne_PC_Fahren;//Also ohne Anfrage
S "M180.6" ;//Weiterfahrt ist erlaubt
SPB N3143;
//GOHDReqM an Host senden:
U "DHWtoVP_OmniFahren".Schleuse_3143.Status2.Telegramm_gesendet;
S "M180.6" ;//Weiterfahrt ist erlaubt
BEB;
L "DHWtoVP_OmniFahren".Schleuse_3143.Dyn.TrolleyID_Schleuse;
L 0;//Barcode bekannt?
==D;//Nein!
BEB;//Warten!
CALL "Daten_in_SendFIFO_speichern", "Daten_für_SendFIFO"
( "TelegrammKennung[1]" := 'G' ,
"TelegrammKennung[2]" := 'O' ,
"TelegrammKennung[3]" := 'H' ,
"TelegrammKennung[4]" := 'D' ,
"TelegrammKennung[5]" := 'R' ,
"TelegrammKennung[6]" := 'e' ,
"TelegrammKennung[7]" := 'q' ,
"TelegrammKennung[8]" := 'M' ,
TrolleyID := "DHWtoVP_OmniFahren".Schleuse_3143.Dyn.TrolleyID_Schleuse ,
StationsNr := 3143 ,
Port := 2 ,
Ret_Val_FIFO_IN := "MB199" ,
Error := #"Error.Bit"
);
UN #"Error.Bit";
S "DHWtoVP_OmniFahren".Schleuse_3143.Status2.Telegramm_gesendet;
//Trolleydaten neu anlegen: (Falls noch als Daten-Leiche vorhanden war)
N3143: CALL "Trolleydaten_neu_anlegen"
( Gesamt_Trolley_DL := "DHWtoVP_OmniFahren".Schleuse_3143.Schleuse.Gesamt_Trolley_DL ,
TrolleyID := "DHWtoVP_OmniFahren".Schleuse_3143.Dyn.TrolleyID_Schleuse ,
Endziel := 16#0000 , //Kein Ziel
ShopGroup := DINT#0
);
BEA;
X3143E: NOP 0;
NETWORK
TITLE = Schleuse 3141: (Vor Einfahrt Kontrollplatz)
L "MW190";
L 3141 ;//Aufruf von Schleuse XXXX?
<>I;//Nein!
SPB X3141E;
//Quell-Steuerung:
L "DHWtoVP_OmniFahren".Schleuse_3136.Dyn.Raus_Trolleys;
L 0;
>I;//Weiche von 2.Quelle schon belegt
O "MB3136" ;//Andere Quelle aktiv
BEB;
//Leerer Trolley vom Leerpuffer?
L "MD182" ;//ShopGroup
L DINT#-1 ;//Leer-Trolley?
==D ;//Ja !
O "SGes".Ohne_PC_Fahren;//Also Ziel simulieren
SPB G3141;//Kein Telegramm!
//Telegramm schon gesendet?
L "MW194" ;//Endziel
L 16#3130 ;//sinnvoll?
<>I ;//Nein! (nochmalige Anfrage)
U(;
TAK;
L 16#3127 ;//sinnvoll?
<>I ;//Nein! (nochmalige Anfrage)
);
UN "DHWtoVP_OmniFahren".Schleuse_3141.Status2.Telegramm_gesendet;
SPB T3141;
//Ziel-Check:
L "MW194";//EndZiel (wurde über Host-Telegramm in Datenbank eingetragen)
L 16#3130 ;//Kontroll-Platz?
==I;//Ja !
SPB A3141 ;//Abzweig fahren
TAK;
L 16#3127 ;//Zum VP?
==I;//Ja !
SPB G3141;
U "10s-Impuls";//Nach 10s
R "DHWtoVP_OmniFahren".Schleuse_3141.Status2.Telegramm_gesendet;//Erneute Anfrage
BEA;
A3141: L 16#3130;
T "MW198" ;//Weichenziel
UN "DHWtoVP_Sensoren".Stau_BG3130.Stat.B_Akt;
S "M180.6" ;//Weiterfahrt ist erlaubt
BEA;
G3141: L 16#3127;
T "MW198" ;//Weichenziel
UN "DHWtoVP_Sensoren".Stau_BG3127.Stat.B_Akt;
S "M180.6" ;//Weiterfahrt ist erlaubt
BEA;
//GOHDReqM an Host senden:
T3141: L "DHWtoVP_OmniFahren".Schleuse_3141.Dyn.TrolleyID_Schleuse;
L 0;//Barcode bekannt?
==D;//Nein!
BEB;//Warten!
CALL "Daten_in_SendFIFO_speichern", "Daten_für_SendFIFO"
( "TelegrammKennung[1]" := 'G' ,
"TelegrammKennung[2]" := 'O' ,
"TelegrammKennung[3]" := 'H' ,
"TelegrammKennung[4]" := 'D' ,
"TelegrammKennung[5]" := 'R' ,
"TelegrammKennung[6]" := 'e' ,
"TelegrammKennung[7]" := 'q' ,
"TelegrammKennung[8]" := 'M' ,
TrolleyID := "DHWtoVP_OmniFahren".Schleuse_3141.Dyn.TrolleyID_Schleuse ,
StationsNr := 3143 , //3141
Port := 2 ,
Ret_Val_FIFO_IN := "MB199" ,
Error := #"Error.Bit"
);
UN #"Error.Bit";
S "DHWtoVP_OmniFahren".Schleuse_3141.Status2.Telegramm_gesendet;
BEA;
X3141E: NOP 0;
NETWORK
TITLE = Schleuse 3134: (Kontrollplatz)
L "MW190";
L 3134 ;//Aufruf von Schleuse XXXX?
<>I;//Nein!
SPB X3134E;
//Trolley kann gestartet werden: (Vorerst immer)
U "BG3134" ;//Trolley ist in Schleuse
U "Clock_2Hz";
= "PF0136";
//Ausfahren mit Taste:
U "SF0136";
S "M180.6" ;//Weiterfahrt ist erlaubt
BEA;
X3134E: NOP 0;
NETWORK
TITLE = Schleuse 3136: (Vor Ausfahrt Kontrollplatz)
L "MW190";
L 3136 ;//Aufruf von Schleuse XXXX?
<>I;//Nein!
SPB X3136E;
BEU
X3731E: NOP 0
//Quell-Steuerung:
L "DHWtoVP_OmniFahren".Schleuse_3141.Dyn.Raus_Trolleys;
L 0;
>I;//Weiche von 2.Quelle schon belegt
O "MB3141" ;//Andere Quelle aktiv
BEB;
//Ziel-Check:
L #EndZiel;
L 16#BAAA ;//Kontroll-Platz?
==I;//Ja !
SPB A3136 ;//Abzweig fahren
--- NW 3: Bereich 4203: Weiterfahren erlaubt ? (AFS von BST) ---
L "MW190"
L 4203 // Aufruf von Schleuse 4203 ?
<>I // Nein!
JC X4203E
SET
S "M180.6" // Weiterfahrt ist erlaubt
BEU
X4203E: NOP 0
--- NW 4: Schleuse 4207: (Vor BypPass von LP) ---
L "MW190"
L 4207 // Aufruf von Schleuse XXXX?
<>I // Nein!
JC X4207E
// Quell-Steuerung:
L "DLPtoHW_OmniFahren".Weiche_4223.Dyn.Weichen_Ziel
L 16#4211 // Fahren Trolleys zu BG4211?
==I // Ja!
O "MB4223" // Weiche ist auf Abzweig
O "DLPtoHW_OmniFahren".Weiche_4223.Dyn.Status.Reset_aktiv
BEC // Warten !
// Ziel-Check:
AN "MB4223" // Weiche Einfahrt ByPass
AN "MB4210"
AN "DHWtoVP_Sensoren".Stau_BG4210.Stat.B_Akt
AN "DHWtoVP_Sensoren".Stau_BG4211.Stat.B_Akt
S "M180.6" // Weiterfahrt ist erlaubt
BEU
X4207E: NOP 0
--- NW 5: Bereich 3145: Weiterfahren erlaubt ? (AFS von 1.Ebene) ---
L "MW190"
L 3145 // Aufruf von Schleuse 3145 ?
<>I // Nein!
JC X3145E
SET
S "M180.6" // Weiterfahrt ist erlaubt
BEU
X3145E: NOP 0
--- NW 6: Schleuse 3143: (Anfrage KontrollPlatz) ---
L "MW190"
L 3143 // Aufruf von Schleuse XXXX?
<>I // Nein!
JC X3143E
L "MD182" // ShopGroup
L DINT#-1 // Leer-Trolley?
==D // Ja !
S "M180.6" // Weiterfahrt ist erlaubt
BEC // Kein Telegramm!
A "SGes".Ohne_PC_Fahren // Also ohne Anfrage
S "M180.6" // Weiterfahrt ist erlaubt
JC N3143
SPA G3136;
// GOHDReqM an Host senden:
A "DHWtoVP_OmniFahren".Schleuse_3143.Status2.Telegramm_gesendet
S "M180.6" // Weiterfahrt ist erlaubt
BEC
A3136: L 16#3130;
T "MW198" ;//Weichenziel
L "DHWtoVP_OmniFahren".Schleuse_3143.Dyn.TrolleyID_Schleuse
L 0 // Barcode bekannt?
==D // Nein!
BEC // Warten!
UN "DHWtoVP_Sensoren".Stau_BG3130.Stat.B_Akt;
S "M180.6" ;//Weiterfahrt ist erlaubt
CALL FB "Daten_in_SendFIFO_speichern" , (TelegrammKennung[1]:='G', TelegrammKennung[2]:='O', TelegrammKennung[3]:='H', TelegrammKennung[4]:='D', TelegrammKennung[5]:='R', TelegrammKennung[6]:='e', TelegrammKennung[7]:='q', TelegrammKennung[8]:='M', TelegrammKennung[9]:=?, TelegrammKennung[10]:=?, TrolleyID:="DHWtoVP_OmniFahren".Schleuse_3143.Dyn.TrolleyID_Schleuse, StationsNr:=3143, Puffer_LinienNr:=?, StoreGroup:=?, Status_1_Int:=?, Status_2_Bit[0]:=?, Status_2_Bit[1]:=?, Status_2_Bit[2]:=?, Status_2_Bit[3]:=?, Status_2_Bit[4]:=?, Status_2_Bit[5]:=?, Status_2_Bit[6]:=?, Status_2_Bit[7]:=?, Reserve[1]_Int:=?, Reserve[2]_Int:=?, Port:=2, Ret_Val_FIFO_IN:="MB199", Error:="Error.Bit")
BEA;
AN "Error.Bit"
S "DHWtoVP_OmniFahren".Schleuse_3143.Status2.Telegramm_gesendet
G3136: L 16#3127;
T "MW198" ;//Weichenziel
// Trolleydaten neu anlegen: (Falls noch als Daten-Leiche vorhanden war)
N3143: CALL FC "Trolleydaten_neu_anlegen" (Gesamt_Trolley_DL:="DHWtoVP_OmniFahren".Schleuse_3143.Schleuse.Gesamt_Trolley_DL, TrolleyID:="DHWtoVP_OmniFahren".Schleuse_3143.Dyn.TrolleyID_Schleuse, Endziel:=16#0000, ShopGroup:=DINT#0) // Kein Ziel
UN "DHWtoVP_Sensoren".Stau_BG3127.Stat.B_Akt;
S "M180.6" ;//Weiterfahrt ist erlaubt
BEU
BEA;
X3143E: NOP 0
X3136E: NOP 0;
NETWORK
TITLE = Ende
BE;
--- NW 7: Schleuse 3141: (Vor Einfahrt Kontrollplatz) ---
L "MW190"
L 3141 // Aufruf von Schleuse XXXX?
<>I // Nein!
JC X3141E
// Quell-Steuerung:
L "DHWtoVP_OmniFahren".Schleuse_3136.Dyn.Raus_Trolleys
L 0
>I // Weiche von 2.Quelle schon belegt
O "MB3136" // Andere Quelle aktiv
BEC
// Leerer Trolley vom Leerpuffer?
L "MD182" // ShopGroup
L DINT#-1 // Leer-Trolley?
==D // Ja !
O "SGes".Ohne_PC_Fahren // Also Ziel simulieren
JC G3141 // Kein Telegramm!
// Telegramm schon gesendet?
L "MW194" // Endziel
L 16#3130 // sinnvoll?
<>I // Nein! (nochmalige Anfrage)
A(
CAC
L 16#3127 // sinnvoll?
<>I // Nein! (nochmalige Anfrage)
)
AN "DHWtoVP_OmniFahren".Schleuse_3141.Status2.Telegramm_gesendet
JC T3141
// Ziel-Check:
L "MW194" // EndZiel (wurde über Host-Telegramm in Datenbank eingetragen)
L 16#3130 // Kontroll-Platz?
==I // Ja !
JC A3141 // Abzweig fahren
CAC
L 16#3127 // Zum VP?
==I // Ja !
JC G3141
A "10s-Impuls" // Nach 10s
R "DHWtoVP_OmniFahren".Schleuse_3141.Status2.Telegramm_gesendet // Erneute Anfrage
BEU
A3141: L 16#3130
T "MW198" // Weichenziel
AN "DHWtoVP_Sensoren".Stau_BG3130.Stat.B_Akt
S "M180.6" // Weiterfahrt ist erlaubt
BEU
G3141: L 16#3127
T "MW198" // Weichenziel
AN "DHWtoVP_Sensoren".Stau_BG3127.Stat.B_Akt
S "M180.6" // Weiterfahrt ist erlaubt
BEU
// GOHDReqM an Host senden:
T3141: L "DHWtoVP_OmniFahren".Schleuse_3141.Dyn.TrolleyID_Schleuse
L 0 // Barcode bekannt?
==D // Nein!
BEC // Warten!
CALL FB "Daten_in_SendFIFO_speichern" , (TelegrammKennung[1]:='G', TelegrammKennung[2]:='O', TelegrammKennung[3]:='H', TelegrammKennung[4]:='D', TelegrammKennung[5]:='R', TelegrammKennung[6]:='e', TelegrammKennung[7]:='q', TelegrammKennung[8]:='M', TelegrammKennung[9]:=?, TelegrammKennung[10]:=?, TrolleyID:="DHWtoVP_OmniFahren".Schleuse_3141.Dyn.TrolleyID_Schleuse, StationsNr:=3143, Puffer_LinienNr:=?, StoreGroup:=?, Status_1_Int:=?, Status_2_Bit[0]:=?, Status_2_Bit[1]:=?, Status_2_Bit[2]:=?, Status_2_Bit[3]:=?, Status_2_Bit[4]:=?, Status_2_Bit[5]:=?, Status_2_Bit[6]:=?, Status_2_Bit[7]:=?, Reserve[1]_Int:=?, Reserve[2]_Int:=?, Port:=2, Ret_Val_FIFO_IN:="MB199", Error:="Error.Bit") // 3141
AN "Error.Bit"
S "DHWtoVP_OmniFahren".Schleuse_3141.Status2.Telegramm_gesendet
BEU
X3141E: NOP 0
--- NW 8: Schleuse 3134: (Kontrollplatz) ---
L "MW190"
L 3134 // Aufruf von Schleuse XXXX?
<>I // Nein!
JC X3134E
// Trolley kann gestartet werden: (Vorerst immer)
A "BG3134" // Trolley ist in Schleuse
A "Clock_2Hz"
= "PF0136"
// Ausfahren mit Taste:
A "SF0136"
S "M180.6" // Weiterfahrt ist erlaubt
BEU
X3134E: NOP 0
--- NW 9: Schleuse 3136: (Vor Ausfahrt Kontrollplatz) ---
L "MW190"
L 3136 // Aufruf von Schleuse XXXX?
<>I // Nein!
JC X3136E
// Quell-Steuerung:
L "DHWtoVP_OmniFahren".Schleuse_3141.Dyn.Raus_Trolleys
L 0
>I // Weiche von 2.Quelle schon belegt
O "MB3141" // Andere Quelle aktiv
BEC
// Ziel-Check:
L EndZiel
L 16#BAAA // Kontroll-Platz?
==I // Ja !
JC A3136 // Abzweig fahren
JU G3136
A3136: L 16#3130
T "MW198" // Weichenziel
AN "DHWtoVP_Sensoren".Stau_BG3130.Stat.B_Akt
S "M180.6" // Weiterfahrt ist erlaubt
BEU
G3136: L 16#3127
T "MW198" // Weichenziel
AN "DHWtoVP_Sensoren".Stau_BG3127.Stat.B_Akt
S "M180.6" // Weiterfahrt ist erlaubt
BEU
X3136E: NOP 0
--- NW 10: Ende ---
BE
END_FUNCTION
@@ -1,103 +1,160 @@
=== FB 1199: VP_Antriebe [STL] ===
INTERFACE:
Input:
Output:
InOut:
Static:
MA0145 : "MAntrieb_PowerSave"
MA0146 : "MAntrieb_PowerSave"
MA0147 : "MAntrieb_PowerSave"
MA0150 : "MAntrieb_PowerSave"
MA0152 : "MAntrieb_PowerSave"
Temp:
Auto : Bool // Automatik Linie ist aktiv
Hand : Bool // Hand Linie ist aktiv
BereichErr : Bool // Bereichsstörung -> Antrieb stoppen
QKontroll : Bool // Frequenzumrichter schon 3s Netz EIN
FuKontroll : Bool // Frequenzumrichter schon 3s Netz EIN
Quit : Bool // Motorschutz-Störung quittieren
Qok : Bool // Motorschutz ok
Jog1 : Bool // Geschwindigkeit 1
Jog2 : Bool // Geschwindigkeit 2
Betrieb : Bool // Betriebsart aktiv
FC105_RET : Word // Returnwert von FC105
Antrieb1 : Bool // Antrieb dazuschalten
Antrieb2 : Bool // Antrieb dazuschalten
F1 : Bool // Geschwindigkeit 1 aktiviert
F2 : Bool // Geschwindigkeit 2 aktiviert
F3 : Bool // Geschwindigkeit 3 aktiviert
BereichErr_Zusatz_7102 : Bool // Bereichsstörung -> Antrieb stoppen
BereichErr_Zusatz_7104 : Bool // Bereichsstörung -> Antrieb stoppen
BereichErr_Zusatz_7102_7104 : Bool // Bereichsstörung -> Antrieb stoppen
Constant:
FUNCTION_BLOCK "VP_Antriebe"
TITLE = Antriebe UC071
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : IBAE
VERSION : 0.1
VAR
MA0145 : "MAntrieb_PowerSave";
MA0146 : "MAntrieb_PowerSave";
MA0147 : "MAntrieb_PowerSave";
MA0150 : "MAntrieb_PowerSave";
MA0152 : "MAntrieb_PowerSave";
END_VAR
--- NW 1: Übergabe des Bereichstatus System UC071/A01 ---
A "DOutbound_Bereich".A01_UH07.Automatik
AN "DOutbound_Bereich".A01_UH07.Handbetrieb
= Auto
CLR
= Hand
A "DOutbound_Bereich".A01_UC071.BereichErr
= BereichErr
// Bereichhalte:
A(
O BereichErr
O "DOutbound_Bereich".A01_UZ7102.Area_Stop
)
AN "SGes".Simulation_ohne_HW_aktiv
= BereichErr_Zusatz_7102
A(
O BereichErr
O "DOutbound_Bereich".A01_UZ7104.Area_Stop
)
AN "SGes".Simulation_ohne_HW_aktiv
= BereichErr_Zusatz_7104
A(
O BereichErr
O BereichErr_Zusatz_7102
O BereichErr_Zusatz_7104
)
AN "SGes".Simulation_ohne_HW_aktiv
= BereichErr_Zusatz_7102_7104
A "T191"
= QKontroll
= FuKontroll
A "DOutbound_Bereich".A01_UC071.StOk_aktiv
= Quit
VAR_TEMP
Auto : Bool; // Automatik Linie ist aktiv
Hand : Bool; // Hand Linie ist aktiv
BereichErr : Bool; // Bereichsstörung -> Antrieb stoppen
QKontroll : Bool; // Frequenzumrichter schon 3s Netz EIN
FuKontroll : Bool; // Frequenzumrichter schon 3s Netz EIN
Quit : Bool; // Motorschutz-Störung quittieren
Qok : Bool; // Motorschutz ok
Jog1 : Bool; // Geschwindigkeit 1
Jog2 : Bool; // Geschwindigkeit 2
Betrieb : Bool; // Betriebsart aktiv
FC105_RET : Word; // Returnwert von FC105
Antrieb1 : Bool; // Antrieb dazuschalten
Antrieb2 : Bool; // Antrieb dazuschalten
F1 : Bool; // Geschwindigkeit 1 aktiviert
F2 : Bool; // Geschwindigkeit 2 aktiviert
F3 : Bool; // Geschwindigkeit 3 aktiviert
BereichErr_Zusatz_7102 : Bool; // Bereichsstörung -> Antrieb stoppen
BereichErr_Zusatz_7104 : Bool; // Bereichsstörung -> Antrieb stoppen
BereichErr_Zusatz_7102_7104 : Bool; // Bereichsstörung -> Antrieb stoppen
END_VAR
--- NW 2: MA0145 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr_Zusatz_7102, Q:="FC0145", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0145", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0145, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
BEGIN
NETWORK
TITLE = Übergabe des Bereichstatus System UC071/A01
U "DOutbound_Bereich".A01_UH07.Automatik;
UN "DOutbound_Bereich".A01_UH07.Handbetrieb;
= #Auto;
CLR;
= #Hand;
U "DOutbound_Bereich".A01_UC071.BereichErr;
= #BereichErr;
//Bereichhalte:
U(;
O #BereichErr;
O "DOutbound_Bereich".A01_UZ7102.Area_Stop;
);
UN "SGes".Simulation_ohne_HW_aktiv;
= #BereichErr_Zusatz_7102;
U(;
O #BereichErr;
O "DOutbound_Bereich".A01_UZ7104.Area_Stop;
);
UN "SGes".Simulation_ohne_HW_aktiv;
= #BereichErr_Zusatz_7104;
U(;
O #BereichErr;
O #BereichErr_Zusatz_7102;
O #BereichErr_Zusatz_7104;
);
UN "SGes".Simulation_ohne_HW_aktiv;
= #BereichErr_Zusatz_7102_7104;
U "T191";
= #QKontroll;
= #FuKontroll;
U "DOutbound_Bereich".A01_UC071.StOk_aktiv;
= #Quit;
NETWORK
TITLE = MA0145
CALL #MA0145
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr_Zusatz_7102 ,
Q := "FC0145" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0145" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0145
);
--- NW 3: MA0146 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr_Zusatz_7102, Q:="FC0146", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0146", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0146, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
NETWORK
TITLE = MA0146
CALL #MA0146
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr_Zusatz_7102 ,
Q := "FC0146" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0146" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0146
);
--- NW 4: MA0147 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr_Zusatz_7104, Q:="FC0147", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0147", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0147, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
NETWORK
TITLE = MA0147
CALL #MA0147
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr_Zusatz_7104 ,
Q := "FC0147" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0147" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0147
);
--- NW 5: MA0150 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr_Zusatz_7104, Q:="FC0150", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0150", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0150, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
NETWORK
TITLE = MA0150
CALL #MA0150
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr_Zusatz_7104 ,
Q := "FC0150" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0150" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0150
);
--- NW 6: MA0152 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr_Zusatz_7102_7104, Q:="FC0152", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0152", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0152, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
NETWORK
TITLE = MA0152
CALL #MA0152
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr_Zusatz_7102_7104 ,
Q := "FC0152" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0152" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0152
);
NETWORK
TITLE = Ende
BE;
--- NW 7: Ende ---
BE
END_FUNCTION_BLOCK
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,84 +1,94 @@
=== FC 1182: VP_Draussen_FC [STL] ===
INTERFACE:
Input:
Output:
InOut:
Temp:
Constant:
Return:
Ret_Val : Void
FUNCTION "VP_Draussen_FC" : Void
TITLE = Draussen-FC: VollPuffer
{ S7_Optimized_Access := 'FALSE' ; S7_Pass_Registers := 'TRUE' }
AUTHOR : AE
VERSION : 0.1
--- NW 1: Rückmeldung ---
SET // Rückmeldungen erst mal resetten
R "M180.6" // Weiterfahrt von Ziel-FC erlaubt
BEGIN
NETWORK
TITLE = Rückmeldung
SET;//Rückmeldungen erst mal resetten
R "M180.6";//Weiterfahrt von Ziel-FC erlaubt
NETWORK
TITLE = Schleuse 3121 (Sorter VP_A von KontrollPlatz): Ausgefahren ?
L "MW190";
L 3121 ;//Aufruf von Schleuse 3121 ?
<>I;//Nein!
SPB X3121E;
--- NW 2: Schleuse 3121 (Sorter VP_A von KontrollPlatz): Ausgefahren ? ---
L "MW190"
L 3121 // Aufruf von Schleuse 3121 ?
<>I // Nein!
JC X3121E
L "MD182" ;//ShopGroup
L "MD182" // ShopGroup
L "DVP_Sorter_A".Sorter_MB3121.Dyn.Scanner.Rec_IDX;
L "DVP_Sorter_A".Sorter_MB3121.Dyn.Scanner.Rec_IDX
CALL "Reservierung_in_Puffer_eintragen"
( TrolleyID := "DVP_Sorter_A".Sorter_MB3121.Dyn.Scanner.Rec_IDX ,
Ziel := "DVP_Sorter_A".Sorter_MB3121.Dyn.Scanner.Rec_DEST_Ziel ,
ShopGroup := "MD182" ,
Gesamt_Trolley_DL := 1000
);
CALL FC "Reservierung_in_Puffer_eintragen" (TrolleyID:="DVP_Sorter_A".Sorter_MB3121.Dyn.Scanner.Rec_IDX, Ziel:="DVP_Sorter_A".Sorter_MB3121.Dyn.Scanner.Rec_DEST_Ziel, ShopGroup:="MD182", Gesamt_Trolley_DL:=1000)
//Daten in Sep 3121 löschen:
L DINT#0;
T "DVP_Sorter_A".Sorter_MB3121.Dyn.Scanner.Rec_IDX;//IDX
L 0;
T "DVP_Sorter_A".Sorter_MB3121.Dyn.Scanner.Rec_DEST_Ziel;
// Daten in Sep 3121 löschen:
L DINT#0
T "DVP_Sorter_A".Sorter_MB3121.Dyn.Scanner.Rec_IDX // IDX
L 0
T "DVP_Sorter_A".Sorter_MB3121.Dyn.Scanner.Rec_DEST_Ziel
//Bei Partner (Schleuse 3123) wieder mit Schritt 0 beginnen (erneuter Ziel-FC-Aufruf)
L 0;
T "DVP_OmniFahren".Schleuse_3123.Dyn.Sk.Akt_Schritt;
// Bei Partner (Schleuse 3123) wieder mit Schritt 0 beginnen (erneuter Ziel-FC-Aufruf)
L 0
T "DVP_OmniFahren".Schleuse_3123.Dyn.Sk.Akt_Schritt
L DINT#0;
T "DVP_Sorter_A".Sorter_MB3123.Dyn.Scanner.Rec_IDX;//IDX
L 0;
T "DVP_Sorter_A".Sorter_MB3123.Dyn.Scanner.Rec_DEST_Ziel;
L DINT#0
T "DVP_Sorter_A".Sorter_MB3123.Dyn.Scanner.Rec_IDX // IDX
L 0
T "DVP_Sorter_A".Sorter_MB3123.Dyn.Scanner.Rec_DEST_Ziel
BEA;
BEU
X3121E: NOP 0;
X3121E: NOP 0
NETWORK
TITLE = Schleuse 3123 (Sorter VP_A von RückführStrecke): Ausgefahren ?
L "MW190";
L 3123 ;//Aufruf von Schleuse 3123 ?
<>I;//Nein!
SPB X3123E;
SET;
/// R "M83.1"
--- NW 3: Schleuse 3123 (Sorter VP_A von RückführStrecke): Ausgefahren ? ---
L "MW190"
L 3123 // Aufruf von Schleuse 3123 ?
<>I // Nein!
JC X3123E
L "MD182" ;//ShopGroup
L "DVP_OmniFahren".Schleuse_3123.Dyn.Trolley_ShopGroup;//Shop-Gruppe
SET
// / R "M83.1"
CALL "Reservierung_in_Puffer_eintragen"
( TrolleyID := "DVP_Sorter_A".Sorter_MB3123.Dyn.Scanner.Rec_IDX ,
Ziel := "DVP_Sorter_A".Sorter_MB3123.Dyn.Scanner.Rec_DEST_Ziel ,
ShopGroup := "MD182" ,
Gesamt_Trolley_DL := 1000
);
L "MD182" // ShopGroup
L "DVP_OmniFahren".Schleuse_3123.Dyn.Trolley_ShopGroup // Shop-Gruppe
//Daten in Sep 3123 löschen:
L DINT#0;
T "DVP_Sorter_A".Sorter_MB3123.Dyn.Scanner.Rec_IDX;//IDX
L 0;
T "DVP_Sorter_A".Sorter_MB3123.Dyn.Scanner.Rec_DEST_Ziel;
CALL FC "Reservierung_in_Puffer_eintragen" (TrolleyID:="DVP_Sorter_A".Sorter_MB3123.Dyn.Scanner.Rec_IDX, Ziel:="DVP_Sorter_A".Sorter_MB3123.Dyn.Scanner.Rec_DEST_Ziel, ShopGroup:="MD182", Gesamt_Trolley_DL:=1000)
//Bei Partner (Schleuse 3121) wieder mit Schritt 0 beginnen (erneuter Ziel-FC-Aufruf)
L 0;
T "DVP_OmniFahren".Schleuse_3121.Dyn.Sk.Akt_Schritt;
// Daten in Sep 3123 löschen:
L DINT#0
T "DVP_Sorter_A".Sorter_MB3123.Dyn.Scanner.Rec_IDX // IDX
L 0
T "DVP_Sorter_A".Sorter_MB3123.Dyn.Scanner.Rec_DEST_Ziel
L DINT#0;
T "DVP_Sorter_A".Sorter_MB3121.Dyn.Scanner.Rec_IDX;//IDX
L 0;
T "DVP_Sorter_A".Sorter_MB3121.Dyn.Scanner.Rec_DEST_Ziel;
// Bei Partner (Schleuse 3121) wieder mit Schritt 0 beginnen (erneuter Ziel-FC-Aufruf)
L 0
T "DVP_OmniFahren".Schleuse_3121.Dyn.Sk.Akt_Schritt
BEA;
L DINT#0
T "DVP_Sorter_A".Sorter_MB3121.Dyn.Scanner.Rec_IDX // IDX
L 0
T "DVP_Sorter_A".Sorter_MB3121.Dyn.Scanner.Rec_DEST_Ziel
X3123E: NOP 0;
BEU
NETWORK
TITLE = Ende
BE;
X3123E: NOP 0
--- NW 4: Ende ---
BE
END_FUNCTION
@@ -1,101 +1,120 @@
=== FC 1180: VP_Leser_FC [STL] ===
INTERFACE:
Input:
Output:
InOut:
Temp:
Zielebene : Word
Constant:
Return:
Ret_Val : Void
--- NW 1: Rückmeldung ---
// Keine
L 0 // Evtl. Zwischenziel (MW196)
T "MW196"
FUNCTION "VP_Leser_FC" : Void
TITLE = Leser-FC: Vollpuffer
{ S7_Optimized_Access := 'FALSE' ; S7_Pass_Registers := 'TRUE' }
AUTHOR : AE
VERSION : 0.1
VAR_TEMP
Zielebene : Word;
END_VAR
--- NW 2: Schleuse 3121: (Sorter VP A / KontrollPlatz) ---
L "MW190" // Schleusen-Nr.
L 3121 // Aufruf von Schleuse ?
<>I // Nein!
JC X3121E
BEGIN
NETWORK
TITLE = Rückmeldung
AN "M180.0" // Lesefehler
JC Y3121
//Keine
L 0;//Evtl. Zwischenziel (MW196)
T "MW196";
BEU
NETWORK
TITLE = Schleuse 3121: (Sorter VP A / KontrollPlatz)
L "MW190" ;//Schleusen-Nr.
L 3121 ;//Aufruf von Schleuse ?
<>I;//Nein!
SPB X3121E;
Y3121: AN "M180.1" // unbekannt in TrolleysDL
BEC
UN "M180.0";//Lesefehler
SPB Y3121;
// Daten in Datenbank erzeugen:
L "DVP_OmniFahren".Schleuse_3121.Dyn.TrolleyID_Schleuse
L DINT#0 // ID bekannt?
==D // Nein
BEC
BEA;
// /In Zukunft Anfrage bei Host!
CALL FC "Trolleydaten_neu_anlegen" (Gesamt_Trolley_DL:="DVP_OmniFahren".Schleuse_3121.Schleuse.Gesamt_Trolley_DL, TrolleyID:="DVP_OmniFahren".Schleuse_3121.Dyn.TrolleyID_Schleuse, Endziel:=16#0000, ShopGroup:=DINT#815) // /
Y3121: UN "M180.1" ;//unbekannt in TrolleysDL
BEB;
BEU
//Daten in Datenbank erzeugen:
L "DVP_OmniFahren".Schleuse_3121.Dyn.TrolleyID_Schleuse;
L DINT#0 ;//ID bekannt?
==D;//Nein
BEB;
X3121E: NOP 0
///In Zukunft Anfrage bei Host!
CALL "Trolleydaten_neu_anlegen"
( Gesamt_Trolley_DL := "DVP_OmniFahren".Schleuse_3121.Schleuse.Gesamt_Trolley_DL ,
TrolleyID := "DVP_OmniFahren".Schleuse_3121.Dyn.TrolleyID_Schleuse ,
Endziel := 16#0000 ,
ShopGroup := DINT#815 ///
);
BEA;
--- NW 3: Schleuse 3123: (Sorter VP A / RückführStecke) ---
L "MW190" // Schleusen-Nr.
L 3123 // Aufruf von Schleuse ?
<>I // Nein!
JC X3123E
X3121E: NOP 0;
AN "M180.0" // Lesefehler
JC Y3123
NETWORK
TITLE = Schleuse 3123: (Sorter VP A / RückführStecke)
L "MW190" ;//Schleusen-Nr.
L 3123 ;//Aufruf von Schleuse ?
<>I;//Nein!
SPB X3123E;
BEU
UN "M180.0";//Lesefehler
SPB Y3123;
Y3123: AN "M180.1" // unbekannt in TrolleysDL
BEC
BEA;
// Daten in Datenbank erzeugen:
L "DVP_OmniFahren".Schleuse_3123.Dyn.TrolleyID_Schleuse
L DINT#0 // ID bekannt?
==D // Nein
BEC
Y3123: UN "M180.1" ;//unbekannt in TrolleysDL
BEB;
// /In Zukunft Anfrage bei Host!
CALL FC "Trolleydaten_neu_anlegen" (Gesamt_Trolley_DL:="DVP_OmniFahren".Schleuse_3123.Schleuse.Gesamt_Trolley_DL, TrolleyID:="DVP_OmniFahren".Schleuse_3123.Dyn.TrolleyID_Schleuse, Endziel:=16#0000, ShopGroup:=DINT#815) // /
//Daten in Datenbank erzeugen:
L "DVP_OmniFahren".Schleuse_3123.Dyn.TrolleyID_Schleuse;
L DINT#0 ;//ID bekannt?
==D;//Nein
BEB;
BEU
///In Zukunft Anfrage bei Host!
CALL "Trolleydaten_neu_anlegen"
( Gesamt_Trolley_DL := "DVP_OmniFahren".Schleuse_3123.Schleuse.Gesamt_Trolley_DL ,
TrolleyID := "DVP_OmniFahren".Schleuse_3123.Dyn.TrolleyID_Schleuse ,
Endziel := 16#0000 ,
ShopGroup := DINT#815 ///
);
X3123E: NOP 0
BEA;
X3123E: NOP 0;
--- NW 4: Schleuse 3244: (nach Puffer-Ausfahrt) ---
L "MW190" // Schleusen-Nr.
L 3244 // Aufruf von Schleuse ?
<>I // Nein!
JC X3244E
NETWORK
TITLE = Schleuse 3244: (nach Puffer-Ausfahrt)
L "MW190" ;//Schleusen-Nr.
L 3244 ;//Aufruf von Schleuse ?
<>I;//Nein!
SPB X3244E;
AN "M180.0" // Lesefehler
JC Y3244
UN "M180.0";//Lesefehler
SPB Y3244;
SET
// / S "DVP_OmniFahren".Schleuse_3244.Dyn.HMI.Abzweig_fahren///
SET;
/// S "DVP_OmniFahren".Schleuse_3244.Dyn.HMI.Abzweig_fahren///
BEU
BEA;
Y3244: AN "M180.1" // unbekannt in TrolleysDL
BEC
Y3244: UN "M180.1" ;//unbekannt in TrolleysDL
BEB;
// /In Zukunft Anfrage bei Host!
CALL FC "Trolleydaten_neu_anlegen" (Gesamt_Trolley_DL:="DVP_OmniFahren".Schleuse_3244.Schleuse.Gesamt_Trolley_DL, TrolleyID:="DVP_OmniFahren".Schleuse_3244.Dyn.TrolleyID_Schleuse, Endziel:=16#0000, ShopGroup:=815) // Erst mal, da kein Host! | /
///In Zukunft Anfrage bei Host!
CALL "Trolleydaten_neu_anlegen"//Erst mal, da kein Host!
( Gesamt_Trolley_DL := "DVP_OmniFahren".Schleuse_3244.Schleuse.Gesamt_Trolley_DL ,
TrolleyID := "DVP_OmniFahren".Schleuse_3244.Dyn.TrolleyID_Schleuse ,
Endziel := 16#0000 ,
ShopGroup := 815 ///
);
BEU
BEA;
X3244E: NOP 0
X3244E: NOP 0;
NETWORK
TITLE = Ende
BE;
--- NW 5: Ende ---
BE
END_FUNCTION
@@ -1,191 +1,270 @@
=== FB 1128: VP_OmniFahren [STL] ===
INTERFACE:
Input:
Output:
InOut:
Static:
Schleuse_3121 : "MHMOmniSchleuse"
Schleuse_3123 : "MHMOmniSchleuse"
Schleuse_3244 : "MHMOmniSchleuse_Plus"
Weiche_3245 : "MHMOmniWeiche_Plus"
Trolleys_starten : Struct
Flanke : Bool
Wartezeit_aktiv : Bool
Timer_Wartenzeit : Int
Einfahrt_VP : Struct
3121_stop : Bool
3123_stop : Bool
3121_Ziel : Int
3123_Ziel : Int
Ausfahrt_VP : Struct
3244_stop : Bool
3244_Ziel : Word
Temp:
ErrQuit : Bool
ErrAnz : Bool
Stau_raus : Bool
Start_ok : Bool
B_aktiv : Bool
B_vor_Schleuse : Bool
B_nach_Schleuse : Bool
Antrieb_aktiv : Bool
Antrieb_vor : Bool
Antrieb_stop : Bool
Fahren_Ok : Bool
PS_aktivieren : Bool
Constant:
FUNCTION_BLOCK "VP_OmniFahren"
TITLE = Omnifahren Outbound Vollpuffer
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
VAR
Schleuse_3121 { S7_SetPoint := 'False'} : "MHMOmniSchleuse";
Schleuse_3123 { S7_SetPoint := 'False'} : "MHMOmniSchleuse";
Schleuse_3244 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus";
Weiche_3245 : "MHMOmniWeiche_Plus";
Trolleys_starten : Struct
Flanke : Bool;
Wartezeit_aktiv : Bool;
Timer_Wartenzeit { S7_SetPoint := 'True'} : Int;
END_STRUCT;
Einfahrt_VP : Struct
"3121_stop" : Bool;
"3123_stop" : Bool;
"3121_Ziel" : Int;
"3123_Ziel" : Int;
END_STRUCT;
Ausfahrt_VP : Struct
"3244_stop" : Bool;
"3244_Ziel" : Word;
END_STRUCT;
END_VAR
--- NW 1: Systemzeug ---
// VollPuffer-Bereich:
A "DOutbound_Bereich".A01_UH07.AnlageEin
= Schleuse_3121.Dyn.Sk.Auto_akt
= Schleuse_3123.Dyn.Sk.Auto_akt
= Schleuse_3244.Dyn.Sk.Auto_akt
= Weiche_3245.Dyn.Status.Auto_akt
AN "DOutbound_Bereich".A01_UC071.BereichErr
= Schleuse_3121.Dyn.Sk.Bereich_ok
= Schleuse_3123.Dyn.Sk.Bereich_ok
= Schleuse_3244.Dyn.Sk.Bereich_ok
= Weiche_3245.Dyn.Status.Bereich_ok
VAR_TEMP
ErrQuit : Bool;
ErrAnz : Bool;
Stau_raus : Bool;
Start_ok : Bool;
B_aktiv : Bool;
B_vor_Schleuse : Bool;
B_nach_Schleuse : Bool;
Antrieb_aktiv : Bool;
Antrieb_vor : Bool;
Antrieb_stop : Bool;
Fahren_Ok : Bool;
PS_aktivieren : Bool;
END_VAR
--- NW 2: Störungen quittieren UZ7102 ---
A "DOutbound_Bereich".A01_UZ7102.StOk_aktiv
O "DOutbound_Bereich".A01_UC071.StOk_aktiv
O "DOutbound_Bereich".A01_UH07.StOk_aktiv
= ErrQuit
BEGIN
NETWORK
TITLE = Systemzeug
//VollPuffer-Bereich:
U "DOutbound_Bereich".A01_UH07.AnlageEin;
= #Schleuse_3121.Dyn.Sk.Auto_akt;
= #Schleuse_3123.Dyn.Sk.Auto_akt;
= #Schleuse_3244.Dyn.Sk.Auto_akt;
= #Weiche_3245.Dyn.Status.Auto_akt;
--- NW 3: Schleuse 3121 ---
CALL FB "None" , (Schleusen_Nr:=3121, ErrQuit:=ErrQuit, B_VorSchleuse:="BG3127", B_InSchleuse:="BG3121", B_AusSchleuse:=?, B_Stau_raus:=?, Start_Ok:=?, Antrieb_Schleuse_aktiv:="MA0144", Antrieb_plus_aktiv:=?, Schleuse_geöffnet:="MB3121", RestZeit_Bereich_plus:=?, Y_Schleuse_Auf:=?, Error:=DB708.DBW500, Antrieb_Schleuse_vor:="DHWtoVP_Antriebe".MA0144.Stat.A_vor, Antrieb_Schleuse_start:="DHWtoVP_Antriebe".MA0144.Stat.A_start, Antrieb_Schleuse_stop:="DHWtoVP_Antriebe".MA0144.Stat.Stop_vor, Antrieb_Schleuse_PS:="DHWtoVP_Antriebe".MA0144.Stat.A_PS, Antrieb_plus_vor:=?, Antrieb_plus_start:=?, hStOk:=ErrAnz) // weiterfahrt über Sorter-Sep | weiterfahrt über Sorter-Sep
UN "DOutbound_Bereich".A01_UC071.BereichErr;
= #Schleuse_3121.Dyn.Sk.Bereich_ok;
= #Schleuse_3123.Dyn.Sk.Bereich_ok;
= #Schleuse_3244.Dyn.Sk.Bereich_ok;
= #Weiche_3245.Dyn.Status.Bereich_ok;
AN Schleuse_3121.Dyn.Status.Reset_aktiv
JC NoR3121
NETWORK
TITLE = Störungen quittieren UZ7102
U "DOutbound_Bereich".A01_UZ7102.StOk_aktiv;
O "DOutbound_Bereich".A01_UC071.StOk_aktiv;
O "DOutbound_Bereich".A01_UH07.StOk_aktiv;
= #ErrQuit;
L DINT#0
T "DVP_Sorter_A".Sorter_MB3121.Dyn.Scanner.Rec_IDX // IDX
L 0
T "DVP_Sorter_A".Sorter_MB3121.Separator.Default_Ziel
T "DVP_Sorter_A".Sorter_MB3121.Dyn.Scanner.Rec_DEST_Ziel
NETWORK
TITLE = Schleuse 3121
CALL #Schleuse_3121
( Schleusen_Nr := 3121 ,
ErrQuit := #ErrQuit ,
B_VorSchleuse := "BG3127" ,
B_InSchleuse := "BG3121" ,
B_AusSchleuse := , //weiterfahrt über Sorter-Sep
Antrieb_Schleuse_aktiv := "MA0144" ,
Schleuse_geöffnet := "MB3121" ,
Y_Schleuse_Auf := , //weiterfahrt über Sorter-Sep
Error := %DB708.DBW500 ,
Antrieb_Schleuse_vor := "DHWtoVP_Antriebe".MA0144.Stat.A_vor ,
Antrieb_Schleuse_start := "DHWtoVP_Antriebe".MA0144.Stat.A_start ,
Antrieb_Schleuse_stop := "DHWtoVP_Antriebe".MA0144.Stat.Stop_vor ,
Antrieb_Schleuse_PS := "DHWtoVP_Antriebe".MA0144.Stat.A_PS ,
hStOk := #ErrAnz
);
NoR3121: NOP 0
UN #Schleuse_3121.Dyn.Status.Reset_aktiv;
SPB NoR3121;
L DINT#0;
T "DVP_Sorter_A".Sorter_MB3121.Dyn.Scanner.Rec_IDX;//IDX
L 0;
T "DVP_Sorter_A".Sorter_MB3121.Separator.Default_Ziel;
T "DVP_Sorter_A".Sorter_MB3121.Dyn.Scanner.Rec_DEST_Ziel;
--- NW 4: Schleuse 3123 ---
CALL FB "None" , (Schleusen_Nr:=3123, ErrQuit:=ErrQuit, B_VorSchleuse:="BG3243", B_InSchleuse:="BG3123", B_AusSchleuse:=?, B_Stau_raus:=?, Start_Ok:=?, Antrieb_Schleuse_aktiv:="MA0152", Antrieb_plus_aktiv:=?, Schleuse_geöffnet:="MB3123", RestZeit_Bereich_plus:=?, Y_Schleuse_Auf:=?, Error:=DB708.DBW502, Antrieb_Schleuse_vor:="DVP_Antriebe".MA0152.Stat.A_vor, Antrieb_Schleuse_start:="DVP_Antriebe".MA0152.Stat.A_start, Antrieb_Schleuse_stop:="DVP_Antriebe".MA0152.Stat.Stop_vor, Antrieb_Schleuse_PS:="DVP_Antriebe".MA0152.Stat.A_PS, Antrieb_plus_vor:=?, Antrieb_plus_start:=?, hStOk:=ErrAnz) // weiterfahrt über Sorter-Sep | weiterfahrt über Sorter-Sep
NoR3121: NOP 0;
AN Schleuse_3123.Dyn.Status.Reset_aktiv
JC NoR3123
NETWORK
TITLE = Schleuse 3123
CALL #Schleuse_3123
( Schleusen_Nr := 3123 ,
ErrQuit := #ErrQuit ,
B_VorSchleuse := "BG3243" ,
B_InSchleuse := "BG3123" ,
B_AusSchleuse := , //weiterfahrt über Sorter-Sep
Antrieb_Schleuse_aktiv := "MA0152" ,
Schleuse_geöffnet := "MB3123" ,
Y_Schleuse_Auf := , //weiterfahrt über Sorter-Sep
Error := %DB708.DBW502 ,
Antrieb_Schleuse_vor := "DVP_Antriebe".MA0152.Stat.A_vor ,
Antrieb_Schleuse_start := "DVP_Antriebe".MA0152.Stat.A_start ,
Antrieb_Schleuse_stop := "DVP_Antriebe".MA0152.Stat.Stop_vor ,
Antrieb_Schleuse_PS := "DVP_Antriebe".MA0152.Stat.A_PS ,
hStOk := #ErrAnz
);
L DINT#0
T "DVP_Sorter_A".Sorter_MB3123.Dyn.Scanner.Rec_IDX // IDX
L 0
T "DVP_Sorter_A".Sorter_MB3123.Separator.Default_Ziel
T "DVP_Sorter_A".Sorter_MB3123.Dyn.Scanner.Rec_DEST_Ziel
UN #Schleuse_3123.Dyn.Status.Reset_aktiv;
SPB NoR3123;
NoR3123: NOP 0
L DINT#0;
T "DVP_Sorter_A".Sorter_MB3123.Dyn.Scanner.Rec_IDX;//IDX
L 0;
T "DVP_Sorter_A".Sorter_MB3123.Separator.Default_Ziel;
T "DVP_Sorter_A".Sorter_MB3123.Dyn.Scanner.Rec_DEST_Ziel;
NoR3123: NOP 0;
--- NW 5: Störungen anzeigen UZ7102 ---
A ErrAnz
R ErrAnz
S "DOutbound_Bereich".A01_UZ7102.StOk_blinken
S "DOutbound_Bereich".A01_UC071.StOk_blinken
S "DOutbound_Bereich".A01_UH07.StOk_blinken
NETWORK
TITLE = Störungen anzeigen UZ7102
U #ErrAnz;
R #ErrAnz;
S "DOutbound_Bereich".A01_UZ7102.StOk_blinken;
S "DOutbound_Bereich".A01_UC071.StOk_blinken;
S "DOutbound_Bereich".A01_UH07.StOk_blinken;
NETWORK
TITLE = Störungen quittieren UZ7105
U "DOutbound_Bereich".A01_UZ7105.StOk_aktiv;
O "DOutbound_Bereich".A01_UC071.StOk_aktiv;
O "DOutbound_Bereich".A01_UH07.StOk_aktiv;
= #ErrQuit;
--- NW 6: Störungen quittieren UZ7105 ---
A "DOutbound_Bereich".A01_UZ7105.StOk_aktiv
O "DOutbound_Bereich".A01_UC071.StOk_aktiv
O "DOutbound_Bereich".A01_UH07.StOk_aktiv
= ErrQuit
NETWORK
TITLE = Wartezeit bis erneuter Trolleystart sinnvoll (wegen Staubildung)
U "MB3244";
FP #Trolleys_starten.Flanke;
S #Trolleys_starten.Wartezeit_aktiv;
SPBN Warten ;//Negierter Sprung
L 15 ;//Wartezeit in Sekunden
T #Trolleys_starten.Timer_Wartenzeit;
--- NW 7: Wartezeit bis erneuter Trolleystart sinnvoll (wegen Staubildung) ---
A "MB3244"
Rise Trolleys_starten.Flanke
S Trolleys_starten.Wartezeit_aktiv
JCN Warten // Negierter Sprung
Warten: UN #Trolleys_starten.Wartezeit_aktiv;
O;
U "MB3244";//Schleuse offen
UN "MA0150";//Aber Trolley fährt nicht
ON "1s-Impuls";
SPB Wait;
L 15 // Wartezeit in Sekunden
T Trolleys_starten.Timer_Wartenzeit
L #Trolleys_starten.Timer_Wartenzeit;
+ -1;
T #Trolleys_starten.Timer_Wartenzeit;
L 0;
>I;
SPB Wait;
Warten: AN Trolleys_starten.Wartezeit_aktiv
O
A "MB3244" // Schleuse offen
AN "MA0150" // Aber Trolley fährt nicht
ON "1s-Impuls"
JC Wait
SET;
R #Trolleys_starten.Wartezeit_aktiv;
L Trolleys_starten.Timer_Wartenzeit
+ -1
T Trolleys_starten.Timer_Wartenzeit
L 0
>I
JC Wait
Wait: NOP 0;
SET
R Trolleys_starten.Wartezeit_aktiv
NETWORK
TITLE = Schleuse 3244
SET;
R #PS_aktivieren;
Wait: NOP 0
UN #Trolleys_starten.Wartezeit_aktiv;
= #Fahren_Ok;
CALL #Schleuse_3244
( Schleusen_Nr := 3244 ,
ErrQuit := #ErrQuit ,
B_VorSchleuse := "BG3242" ,
B_InSchleuse := "BG3244" ,
B_Zähl := , //Über Weiche +1
B_Stau_raus := , //Ziel-FC
Start_Ok := #Fahren_Ok ,
Antrieb_Schleuse_aktiv := "MA0150" ,
Antrieb_plus_aktiv := "MA0152" ,
Schleuse_geöffnet := "MB3244" ,
Y_Schleuse_Auf := "DVP_Zylinder".Schleuse_3244.Stat.Ast ,
Error := %DB708.DBW516 ,
Antrieb_Schleuse_vor := "DVP_Antriebe".MA0150.Stat.A_vor ,
Antrieb_Schleuse_start := "DVP_Antriebe".MA0150.Stat.A_start ,
Antrieb_Schleuse_stop := "DVP_Antriebe".MA0150.Stat.Stop_vor ,
Antrieb_Schleuse_PS := #PS_aktivieren ,
Antrieb_plus_vor := "DVP_Antriebe".MA0152.Stat.A_vor ,
Antrieb_plus_start := "DVP_Antriebe".MA0152.Stat.A_start ,
hStOk := #ErrAnz
);
--- NW 8: Schleuse 3244 ---
SET
R PS_aktivieren
U #PS_aktivieren;
L s5t#40s;
SE "T28";
AN Trolleys_starten.Wartezeit_aktiv
= Fahren_Ok
U "T28";
= "DVP_Antriebe".MA0150.Stat.A_PS;
CALL FB "None" , (Schleusen_Nr:=3244, ErrQuit:=ErrQuit, B_VorSchleuse:="BG3242", B_InSchleuse:="BG3244", B_Zähl:=?, B_Stau_raus:=?, Start_Ok:=Fahren_Ok, Antrieb_Schleuse_aktiv:="MA0150", Antrieb_plus_aktiv:="MA0152", Schleuse_geöffnet:="MB3244", RestZeit_Bereich_plus:=?, Y_Schleuse_Auf:="DVP_Zylinder".Schleuse_3244.Stat.Ast, Error:=DB708.DBW516, Antrieb_Schleuse_vor:="DVP_Antriebe".MA0150.Stat.A_vor, Antrieb_Schleuse_start:="DVP_Antriebe".MA0150.Stat.A_start, Antrieb_Schleuse_stop:="DVP_Antriebe".MA0150.Stat.Stop_vor, Antrieb_Schleuse_PS:=PS_aktivieren, Antrieb_plus_vor:="DVP_Antriebe".MA0152.Stat.A_vor, Antrieb_plus_start:="DVP_Antriebe".MA0152.Stat.A_start, hStOk:=ErrAnz) // Über Weiche +1 | Ziel-FC
NETWORK
TITLE = Weiche 3245
U "MA0150";
U "MA0152";
= #Antrieb_aktiv;
SET;
R #Antrieb_vor;
R #Antrieb_stop;
A PS_aktivieren
L s5t#40s
OnDelay "T28"
CALL #Weiche_3245
( Weichen_Nr := 3245 ,
ErrQuit := #ErrQuit ,
Fahren_Ok := 1 ,
B_Ziel_gerade := "BG3246" ,
B_Ziel_abzweig := "BG3243" ,
Antrieb_Weiche_aktiv := #Antrieb_aktiv ,
Antrieb_Gerade_aktiv := "MA0151" ,
Antrieb_Abzweig_aktiv := "MA0152" ,
Weiche_ist_AST := "MB3245" ,
Y_Weiche_abzweig := "DVP_Zylinder".Weiche_3245.Stat.Ast ,
Error := %DB708.DBW518 ,
Antrieb_Weiche_vor := #Antrieb_vor ,
Antrieb_Weiche_stop := #Antrieb_stop ,
Antrieb_Weiche_gerade_vor := "DVPtoEP_Antriebe".MA0151.Stat.A_vor ,
Antrieb_Weiche_gerade_stop := "DVPtoEP_Antriebe".MA0151.Stat.Stop_vor ,
Antrieb_Weiche_abzweig_vor := "DVP_Antriebe".MA0152.Stat.A_vor ,
Antrieb_Weiche_abzweig_stop := "DVP_Antriebe".MA0152.Stat.Stop_vor ,
hStOk := #ErrAnz
);
A "T28"
= "DVP_Antriebe".MA0150.Stat.A_PS
U #Antrieb_vor;
U(;
UN "MB3245";//Weiche gerade
UN "DVP_Sensoren".Stau_BG3246.Stat.B_Akt;
O;
U "MB3245" ;//Weiche auf Abzweig
UN "DVP_Sensoren".Stau_BG3243.Stat.B_Akt;
);
S "DVP_Antriebe".MA0150.Stat.A_vor;
U #Antrieb_vor;
S "DVP_Antriebe".MA0152.Stat.A_vor;
S "DVP_Antriebe".MA0150.Stat.A_start;
S "DVP_Antriebe".MA0152.Stat.A_start;
--- NW 9: Weiche 3245 ---
A "MA0150"
A "MA0152"
= Antrieb_aktiv
SET
R Antrieb_vor
R Antrieb_stop
U #Antrieb_stop;
S "DVP_Antriebe".MA0150.Stat.Stop_vor;
/// S "DVP_Antriebe".MA0152.Stat.Stop_vor //Sonst Blockade
CALL FB "None" , (Weichen_Nr:=3245, ErrQuit:=ErrQuit, Fahren_Ok:=1, B_Ziel_gerade:="BG3246", B_Ziel_abzweig:="BG3243", Antrieb_Weiche_aktiv:=Antrieb_aktiv, Antrieb_Gerade_aktiv:="MA0151", Antrieb_Abzweig_aktiv:="MA0152", Weiche_ist_AST:="MB3245", Y_Weiche_gerade:=?, Y_Weiche_abzweig:="DVP_Zylinder".Weiche_3245.Stat.Ast, Error:=DB708.DBW518, Antrieb_Weiche_vor:=Antrieb_vor, Antrieb_Weiche_stop:=Antrieb_stop, Antrieb_Weiche_gerade_vor:="DVPtoEP_Antriebe".MA0151.Stat.A_vor, Antrieb_Weiche_gerade_stop:="DVPtoEP_Antriebe".MA0151.Stat.Stop_vor, Antrieb_Weiche_abzweig_vor:="DVP_Antriebe".MA0152.Stat.A_vor, Antrieb_Weiche_abzweig_stop:="DVP_Antriebe".MA0152.Stat.Stop_vor, hStOk:=ErrAnz)
NETWORK
TITLE = Störungen anzeigen UZ7105
U #ErrAnz;
R #ErrAnz;
S "DOutbound_Bereich".A01_UZ7105.StOk_blinken;
S "DOutbound_Bereich".A01_UC071.StOk_blinken;
S "DOutbound_Bereich".A01_UH07.StOk_blinken;
A Antrieb_vor
A(
AN "MB3245" // Weiche gerade
AN "DVP_Sensoren".Stau_BG3246.Stat.B_Akt
O
A "MB3245" // Weiche auf Abzweig
AN "DVP_Sensoren".Stau_BG3243.Stat.B_Akt
)
S "DVP_Antriebe".MA0150.Stat.A_vor
NETWORK
TITLE = Ende
BE;
A Antrieb_vor
S "DVP_Antriebe".MA0152.Stat.A_vor
S "DVP_Antriebe".MA0150.Stat.A_start
S "DVP_Antriebe".MA0152.Stat.A_start
A Antrieb_stop
S "DVP_Antriebe".MA0150.Stat.Stop_vor
// / S "DVP_Antriebe".MA0152.Stat.Stop_vor //Sonst Blockade
--- NW 10: Störungen anzeigen UZ7105 ---
A ErrAnz
R ErrAnz
S "DOutbound_Bereich".A01_UZ7105.StOk_blinken
S "DOutbound_Bereich".A01_UC071.StOk_blinken
S "DOutbound_Bereich".A01_UH07.StOk_blinken
--- NW 11: Ende ---
BE
END_FUNCTION_BLOCK
@@ -1,424 +1,487 @@
=== FC 1181: VP_Ziel_FC [STL] ===
INTERFACE:
Input:
Output:
InOut:
Temp:
Ziel_hex : Word
Ziel_int : Int
Zielebene : Word
Error : Byte
Position : Int
Lager_DB : Int
Lager_DW : Int
AR1Zeiger : DWord // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
AR1Start : DInt // Startwert mit Offset 0
SSDW : Int
EndZiel : Word
Variante : Int
AbrufID : DInt
Fahrlisten_TrolleyID : DInt
Fahrlisten_AbrufID : DInt
Fahrlisten_Lager : Int
ZielGruppe : Word
Trolley_unbekannt : Bool // Trolley ist nicht in DL
Express_Abruf : Bool
Error.Bit : Bool
Constant:
Return:
Ret_Val : Void
--- NW 1: Rückmeldung ---
SET // Rückmeldungen erst mal resetten
R "M180.6" // Weiterfahrt von Ziel-FC erlaubt
--- NW 2: Schleuse 3121: Weiterfahren erlaubt ? (Sorter VP_A von KontrollPlatz) ---
L "MW190"
L 3121 // Aufruf von Schleuse 3121 ?
<>I // Nein!
JC X3121E
L "VP_TravelFIFO_A".Travel_FIFO_BG3120.FIFO.ANZAHL
L 0 // Daten noch im Travel-FIFO?
<>I // Ja !
O "MB3121" // Trolley fährt schon
O "DVP_OmniFahren".Einfahrt_VP."3121_stop"
BEC
L 0
T Ziel_hex
A "SGes".Ohne_PC_Fahren // Also Ziel simulieren
JC Sim3121
AN "DVP_OmniFahren".Schleuse_3121.Status2.Telegramm_gesendet
JC T3121
// Shop-Group definiert ?
L "MD182" // ShopGroup
L DINT#0 // bekannt?
<>D // Ja !
A(
CAC
L DINT#0815 // bekannt?
<>D // Ja !
O "SGes".Ohne_PC_Fahren // 815 nur ohne PC fahren Ok!
)
JC VP3121
// Erneute Anfrage bei Host!
A "10s-Impuls"
R "DVP_OmniFahren".Schleuse_3121.Status2.Telegramm_gesendet
BEU
// Voll-Puffer ermitteln oder Ziel schon fest?
VP3121: L Ziel_hex // Evtl. von Simulation
L 16#0 // schon angegeben?
<>I // Ja!
JC ZielFest3121
CALL FC "ShopGroup to Rein-Lager ermitteln" (ShopGroup:="MD182", Puffer:=Ziel_hex)
// Ziel = Voll-Lager?
ZielFest3121: L Ziel_hex
L 16#F000
AW
L 16#B000 // Ziel = VollLager ?
==I // Ja!
R "7_HMI_Err_UH07_OB".Logistik.Kein_Platz_im_VollLager
JC LagerOk_3121
SET
S "7_HMI_Err_UH07_OB".Logistik.Kein_Platz_im_VollLager
BEU // Nicht ins Lager fahren !
LagerOk_3121: L Ziel_hex
L 16#FFF
AW
BTI // Damit Int 101-151 als Ziel !
T Ziel_int
// Check, ob Ziel-Lager Inilauf aktiv hat:
T "MW220"
CALL FC "DatenOut" (SSDB:=275, SSDW:=0, PARA:=16#0000, SEARCHDATEN:=P#M220.0, RE_VAL:="MB199", OUTDATEN:=P#M220.0, Position:=Position) // Eintrag lesen
L "MB199"
L 2#1111111 // Bit 7 ausblenden
AW
L 0 // Fehler vorhanden?
<>I // Ja
BEC
L "MW224"
T Lager_DB
L "MW226"
T Lager_DW
ITD
T AR1Start // Startwert mit Offset 0
L AR1Start // Startwert mit Offset 0
+ DINT#28 // Offset Status2 (Bit 7: Inilauf)
SLD 3
L 7 // Damit DBX_Bit 7
OD
T AR1Zeiger // Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
OPN DB[Lager_DB] // Lager-DB öffnen
A DBX [AR1Zeiger] // Lager hat Inilauf aktiv
BEC // Sonst kann der Inilauf nie beendet werden!
// Check, ob Ziel-Lager Platz hat:
L AR1Start // Startwert mit Offset 0
+ DINT#28 // Offset Status2 (Bit 1: Piuffer hat Platz_IN)
SLD 3
L 1 // Damit DBX_Bit 1
OD
T AR1Zeiger // Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
OPN DB[Lager_DB] // Lager-DB öffnen
AN DBX [AR1Zeiger] // Lager hat keinen Platz
BEC
// Ziel übergeben:
L Ziel_int
T "DVP_Sorter_A".Sorter_MB3121.Separator.Default_Ziel
T "DVP_Sorter_A".Sorter_MB3121.Dyn.Scanner.Rec_DEST_Ziel
// Scanner-IDX übergeben:
L "DVP_OmniFahren".Schleuse_3121.Dyn.TrolleyID_Schleuse
T "DVP_Sorter_A".Sorter_MB3121.Dyn.Scanner.Rec_IDX // IDX
CLR // Wird über MSorterRein (FB1423/5) gestartet!
S "M180.6" // Weiterfahrt ist erlaubt
BEU
// GOHDReqM an Host senden:
T3121: L "DVP_OmniFahren".Schleuse_3121.Dyn.TrolleyID_Schleuse
L 0 // Barcode bekannt?
==D // Nein!
BEC // Warten!
CALL FB "Daten_in_SendFIFO_speichern" , (TelegrammKennung[1]:='G', TelegrammKennung[2]:='O', TelegrammKennung[3]:='H', TelegrammKennung[4]:='D', TelegrammKennung[5]:='R', TelegrammKennung[6]:='e', TelegrammKennung[7]:='q', TelegrammKennung[8]:='M', TelegrammKennung[9]:=?, TelegrammKennung[10]:=?, TrolleyID:="DVP_OmniFahren".Schleuse_3121.Dyn.TrolleyID_Schleuse, StationsNr:=3121, Puffer_LinienNr:=?, StoreGroup:=?, Status_1_Int:=?, Status_2_Bit[0]:=?, Status_2_Bit[1]:=?, Status_2_Bit[2]:=?, Status_2_Bit[3]:=?, Status_2_Bit[4]:=?, Status_2_Bit[5]:=?, Status_2_Bit[6]:=?, Status_2_Bit[7]:=?, Reserve[1]_Int:=?, Reserve[2]_Int:=?, Port:=2, Ret_Val_FIFO_IN:="MB199", Error:="Error.Bit")
FUNCTION "VP_Ziel_FC" : Void
TITLE = Ziel-FC: Vollpuffer_OmniFahren
{ S7_Optimized_Access := 'FALSE' ; S7_Pass_Registers := 'TRUE' }
AUTHOR : AE
VERSION : 0.1
VAR_TEMP
Ziel_hex : Word;
Ziel_int : Int;
Zielebene : Word;
Error : Byte;
Position : Int;
Lager_DB : Int;
Lager_DW : Int;
AR1Zeiger : DWord; // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
AR1Start : DInt; // Startwert mit Offset 0
SSDW : Int;
EndZiel : Word;
Variante : Int;
AbrufID : DInt;
Fahrlisten_TrolleyID : DInt;
Fahrlisten_AbrufID : DInt;
Fahrlisten_Lager : Int;
ZielGruppe : Word;
Trolley_unbekannt : Bool; // Trolley ist nicht in DL
Express_Abruf : Bool;
"Error.Bit" : Bool;
END_VAR
BEGIN
NETWORK
TITLE = Rückmeldung
SET;//Rückmeldungen erst mal resetten
R "M180.6";//Weiterfahrt von Ziel-FC erlaubt
NETWORK
TITLE = Schleuse 3121: Weiterfahren erlaubt ? (Sorter VP_A von KontrollPlatz)
L "MW190";
L 3121 ;//Aufruf von Schleuse 3121 ?
<>I;//Nein!
SPB X3121E;
L "VP_TravelFIFO_A".Travel_FIFO_BG3120.FIFO.ANZAHL;
L 0;//Daten noch im Travel-FIFO?
<>I;//Ja !
O "MB3121" ;//Trolley fährt schon
O "DVP_OmniFahren".Einfahrt_VP."3121_stop";
BEB;
L 0;
T #Ziel_hex;
U "SGes".Ohne_PC_Fahren;//Also Ziel simulieren
SPB Sim3121;
UN "DVP_OmniFahren".Schleuse_3121.Status2.Telegramm_gesendet;
SPB T3121;
//Shop-Group definiert ?
L "MD182" ;//ShopGroup
L DINT#0;//bekannt?
<>D;//Ja !
U(;
TAK;
L DINT#0815 ;//bekannt?
<>D;//Ja !
O "SGes".Ohne_PC_Fahren;//815 nur ohne PC fahren Ok!
);
SPB VP3121;
//Erneute Anfrage bei Host!
U "10s-Impuls";
R "DVP_OmniFahren".Schleuse_3121.Status2.Telegramm_gesendet;
BEA;
//Voll-Puffer ermitteln oder Ziel schon fest?
VP3121: L #Ziel_hex ;//Evtl. von Simulation
L 16#0 ;//schon angegeben?
<>I;//Ja!
SPB ZielFest3121;
CALL "ShopGroup_Rein-Lager ermitteln"
( ShopGroup := "MD182" ,
Puffer := #Ziel_hex
);
//Ziel = Voll-Lager?
ZielFest3121: L #Ziel_hex;
L 16#F000;
UW;
L 16#B000 ;//Ziel = VollLager ?
==I ;//Ja!
R "7_HMI_Err_UH07_OB".Logistik.Kein_Platz_im_VollLager;
SPB LagerOk_3121;
SET;
S "7_HMI_Err_UH07_OB".Logistik.Kein_Platz_im_VollLager;
BEA;//Nicht ins Lager fahren !
LagerOk_3121: L #Ziel_hex;
L 16#FFF;
UW;
BTI ;//Damit Int 101-151 als Ziel !
T #Ziel_int;
//Check, ob Ziel-Lager Inilauf aktiv hat:
T "MW220";
CALL "DatenOut"
( SSDB := 275 ,
SSDW := 0 ,
PARA := 16#0000 , //Eintrag lesen
SEARCHDATEN := P#M220.0 ,
RE_VAL := "MB199" ,
OUTDATEN := P#M220.0 ,
Position := #Position
);
L "MB199";
L 2#1111111 ;//Bit 7 ausblenden
UW;
L 0;//Fehler vorhanden?
<>I;//Ja
BEB;
L "MW224";
T #Lager_DB;
L "MW226";
T #Lager_DW;
ITD;
T #AR1Start ;//Startwert mit Offset 0
L #AR1Start;//Startwert mit Offset 0
+ DINT#28 ;//Offset Status2 (Bit 7: Inilauf)
SLD 3;
L 7 ;//Damit DBX_Bit 7
OD;
T #AR1Zeiger;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
AUF DB[ #Lager_DB] ;//Lager-DB öffnen
U DBX[ #AR1Zeiger] ;//Lager hat Inilauf aktiv
BEB;//Sonst kann der Inilauf nie beendet werden!
//Check, ob Ziel-Lager Platz hat:
L #AR1Start;//Startwert mit Offset 0
+ DINT#28 ;//Offset Status2 (Bit 1: Piuffer hat Platz_IN)
SLD 3;
L 1 ;//Damit DBX_Bit 1
OD;
T #AR1Zeiger;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
AUF DB[ #Lager_DB] ;//Lager-DB öffnen
UN DBX[ #AR1Zeiger] ;//Lager hat keinen Platz
BEB;
//Ziel übergeben:
L #Ziel_int;
T "DVP_Sorter_A".Sorter_MB3121.Separator.Default_Ziel;
T "DVP_Sorter_A".Sorter_MB3121.Dyn.Scanner.Rec_DEST_Ziel;
//Scanner-IDX übergeben:
L "DVP_OmniFahren".Schleuse_3121.Dyn.TrolleyID_Schleuse;
T "DVP_Sorter_A".Sorter_MB3121.Dyn.Scanner.Rec_IDX;//IDX
CLR ;//Wird über MSorterRein (FB1423/5) gestartet!
S "M180.6" ;//Weiterfahrt ist erlaubt
BEA;
//GOHDReqM an Host senden:
T3121: L "DVP_OmniFahren".Schleuse_3121.Dyn.TrolleyID_Schleuse;
L 0;//Barcode bekannt?
==D;//Nein!
BEB;//Warten!
CALL "Daten_in_SendFIFO_speichern", "Daten_für_SendFIFO"
( "TelegrammKennung[1]" := 'G' ,
"TelegrammKennung[2]" := 'O' ,
"TelegrammKennung[3]" := 'H' ,
"TelegrammKennung[4]" := 'D' ,
"TelegrammKennung[5]" := 'R' ,
"TelegrammKennung[6]" := 'e' ,
"TelegrammKennung[7]" := 'q' ,
"TelegrammKennung[8]" := 'M' ,
TrolleyID := "DVP_OmniFahren".Schleuse_3121.Dyn.TrolleyID_Schleuse ,
StationsNr := 3121 ,
Port := 2 ,
Ret_Val_FIFO_IN := "MB199" ,
Error := #"Error.Bit"
);
UN #"Error.Bit";
S "DVP_OmniFahren".Schleuse_3121.Status2.Telegramm_gesendet;
BEA;
///Zum Testen bei Inbetriebnahme:
Sim3121: L "DVP_OmniFahren".Einfahrt_VP."3121_Ziel";
T #Ziel_hex;
//Shop-Group definiert ?
L "MD182" ;//ShopGroup
L DINT#0;//bekannt?
<>D;//Ja !
SPB VP3121;
CALL "Trolleydaten_neu_anlegen"
( Gesamt_Trolley_DL := "DVP_OmniFahren".Schleuse_3121.Schleuse.Gesamt_Trolley_DL ,
TrolleyID := "DVP_OmniFahren".Schleuse_3121.Dyn.TrolleyID_Schleuse ,
Endziel := 16#0000 ,
ShopGroup := DINT#815 ///
);
BEA;
X3121E: NOP 0;
NETWORK
TITLE = Schleuse 3123: Weiterfahren erlaubt ? (Sorter VP_A von RückführStrecke)
L "MW190";
L 3123 ;//Aufruf von Schleuse 3123 ?
<>I;//Nein!
SPB X3123E;
L "VP_TravelFIFO_A".Travel_FIFO_BG3120.FIFO.ANZAHL;
L 0;//Daten noch im Travel-FIFO?
<>I;//Ja !
O "MB3123" ;//Trolley fährt schon
O "DVP_OmniFahren".Einfahrt_VP."3123_stop";
BEB;
L 0;
T #Ziel_hex;
U "SGes".Ohne_PC_Fahren;//Also Ziel simulieren
SPB Sim3123;
UN "DVP_OmniFahren".Schleuse_3123.Status2.Telegramm_gesendet;
SPB T3123;
//Shop-Group definiert ?
L "MD182" ;//ShopGroup
L DINT#0;//bekannt?
<>D;//Ja !
U(;
TAK;
L DINT#0815 ;//bekannt?
<>D;//Ja !
O "SGes".Ohne_PC_Fahren;//815 nur ohne PC fahren Ok!
);
SPB VP3123;
//Erneute Anfrage bei Host!
U "10s-Impuls";
R "DVP_OmniFahren".Schleuse_3123.Status2.Telegramm_gesendet;
BEA;
//Voll-Puffer ermitteln oder Ziel schon fest?
VP3123: L #Ziel_hex ;//Evtl. von Simulation
L 16#0 ;//schon angegeben?
<>I;//Ja!
SPB ZielFest3123;
CALL "ShopGroup_Rein-Lager ermitteln"
( ShopGroup := "MD182" ,
Puffer := #Ziel_hex
);
//Ziel = Voll-Lager?
ZielFest3123: L #Ziel_hex;
L 16#F000;
UW;
L 16#B000 ;//Ziel = VollLager ?
==I ;//Ja!
R "7_HMI_Err_UH07_OB".Logistik.Kein_Platz_im_VollLager;
SPB LagerOk_3123;
SET;
S "7_HMI_Err_UH07_OB".Logistik.Kein_Platz_im_VollLager;
//Im Kreis nur fahren, falls Stau in Rückführstrecke:
UN "DVP_Sensoren".Stau_BG3243.Stat.B_Akt;
BEB ;//Nicht ins Lager fahren !
L 16#B151 ;///Vorerst immer Lager 51 fahren
T #Ziel_hex;
LagerOk_3123: L #Ziel_hex;
L 16#FFF;
UW;
BTI ;//Damit Int101-151 als Ziel !
T #Ziel_int;
//Check, ob Ziel-Lager Inilauf aktiv hat:
T "MW220";
CALL "DatenOut"
( SSDB := 275 ,
SSDW := 0 ,
PARA := 16#0000 , //Eintrag lesen
SEARCHDATEN := P#M220.0 ,
RE_VAL := "MB199" ,
OUTDATEN := P#M220.0 ,
Position := #Position
);
L "MB199";
L 2#1111111 ;//Bit 7 ausblenden
UW;
L 0;//Fehler vorhanden?
<>I;//Ja
BEB;
L "MW224";
T #Lager_DB;
L "MW226";
T #Lager_DW;
ITD;
T #AR1Start;//Startwert mit Offset 0
L #AR1Start;//Startwert mit Offset 0
+ DINT#28 ;//Offset Status2 (Bit 7: Inilauf)
SLD 3;
L 7 ;//Damit DBX_Bit 7
OD;
T #AR1Zeiger;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
AUF DB[ #Lager_DB] ;//Lager-DB öffnen
U DBX[ #AR1Zeiger] ;//Lager hat Inilauf aktiv
BEB;//Sonst kann der Inilauf nie beendet werden!
//Check, ob Ziel-Lager Platz hat:
L #AR1Start;//Startwert mit Offset 0
+ DINT#28 ;//Offset Status2 (Bit 1: Puffer hat Platz_IN)
SLD 3;
L 1 ;//Damit DBX_Bit 1
OD;
T #AR1Zeiger;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
AUF DB[ #Lager_DB] ;//Lager-DB öffnen
UN DBX[ #AR1Zeiger] ;//Lager hat keinen Platz
BEB;//Sonst kann der Inilauf nie beendet werden!
//Ziel übergeben:
L #Ziel_int;
T "DVP_Sorter_A".Sorter_MB3123.Separator.Default_Ziel;
T "DVP_Sorter_A".Sorter_MB3123.Dyn.Scanner.Rec_DEST_Ziel;
//Scanner-IDX übergeben:
L "DVP_OmniFahren".Schleuse_3123.Dyn.TrolleyID_Schleuse;
T "DVP_Sorter_A".Sorter_MB3123.Dyn.Scanner.Rec_IDX;//IDX
CLR ;//Wird über MSorterRein (FB1423/5) gestartet!
S "M180.6" ;//Weiterfahrt ist erlaubt
BEA;
//GOHDReqM an Host senden:
T3123: L "DVP_OmniFahren".Schleuse_3123.Dyn.TrolleyID_Schleuse;
L 0;//Barcode bekannt?
==D;//Nein!
BEB;//Warten!
CALL "Daten_in_SendFIFO_speichern", "Daten_für_SendFIFO"
( "TelegrammKennung[1]" := 'G' ,
"TelegrammKennung[2]" := 'O' ,
"TelegrammKennung[3]" := 'H' ,
"TelegrammKennung[4]" := 'D' ,
"TelegrammKennung[5]" := 'R' ,
"TelegrammKennung[6]" := 'e' ,
"TelegrammKennung[7]" := 'q' ,
"TelegrammKennung[8]" := 'M' ,
TrolleyID := "DVP_OmniFahren".Schleuse_3123.Dyn.TrolleyID_Schleuse ,
StationsNr := 3123 ,
Port := 2 ,
Ret_Val_FIFO_IN := "MB199" ,
Error := #"Error.Bit"
);
UN #"Error.Bit";
S "DVP_OmniFahren".Schleuse_3123.Status2.Telegramm_gesendet;
BEA;
///Zum Testen bei Inbetriebnahme:
Sim3123: L "DVP_OmniFahren".Einfahrt_VP."3123_Ziel";
T #Ziel_hex;
//Shop-Group definiert ?
L "MD182" ;//ShopGroup
L DINT#0;//bekannt?
<>D;//Ja !
SPB VP3123;
CALL "Trolleydaten_neu_anlegen"
( Gesamt_Trolley_DL := "DVP_OmniFahren".Schleuse_3123.Schleuse.Gesamt_Trolley_DL ,
TrolleyID := "DVP_OmniFahren".Schleuse_3123.Dyn.TrolleyID_Schleuse ,
Endziel := 16#0000 ,
ShopGroup := DINT#815 ///
);
BEA;
X3123E: NOP 0;
NETWORK
TITLE = Schleuse 3244: (Nach LagerAusfahrt)
L "MW190";
L 3244 ;//Aufruf von Schleuse XXXX?
<>I;//Nein!
SPB PS5E;
U "DVP_OmniFahren".Ausfahrt_VP."3244_stop";
BEB;
L "DVP_OmniFahren".Ausfahrt_VP."3244_Ziel";
L 16#0;//Vorgabe?
==I;//Nein!
SPB N3244;
TAK;
L 16#B000;//Vollpuffer
==I;//Ja!
SPB A3244;
TAK;
L 16#E000 ;//Entnahmepuffer
==I;//Ja!
SPB G3244;
BEA;
//Aufgrund der Daten fahren:
N3244: NOP 0;
//EndZiel = Entnahmepuffer?
L "MW194";//EndZiel
L 16#F000;
UW;
T #ZielGruppe;
L 16#E000 ;//Entnahme-Puffer
==I;//Ja !
SPB G3244 ;//Gerade fahren
//Leer-Trolley?:
L "DVP_OmniFahren".Schleuse_3244.Dyn.Trolley_ShopGroup;
L DINT#-1 ;//leerer Trolley ?
==D ;//Ja !
U(;
L "DLLeerPuffer_leer".Datenlistenkopf.AnzahlEintraege;
L 5 ;//Genügend Platz vorhanden ?
>=I ;//Ja !
);
SPB G3244;//Gerade fahren
SPA A3244 ;//Rest Abzweig fahren
A3244: L 16#3243;
T "MW198" ;//Weichenziel
UN "DVP_Sensoren".Stau_BG3243.Stat.B_Akt;
S "M180.6" ;//Weiterfahrt ist erlaubt
BEA;
G3244: L 16#3246;
T "MW198" ;//Weichenziel
UN "DVP_Sensoren".Stau_BG3246.Stat.B_Akt;
S "M180.6" ;//Weiterfahrt ist erlaubt
BEA;
PS5E: NOP 0;
NETWORK
TITLE = Ende
BE;
AN "Error.Bit"
S "DVP_OmniFahren".Schleuse_3121.Status2.Telegramm_gesendet
BEU
// /Zum Testen bei Inbetriebnahme:
Sim3121: L "DVP_OmniFahren".Einfahrt_VP."3121_Ziel"
T Ziel_hex
// Shop-Group definiert ?
L "MD182" // ShopGroup
L DINT#0 // bekannt?
<>D // Ja !
JC VP3121
CALL FC "Trolleydaten_neu_anlegen" (Gesamt_Trolley_DL:="DVP_OmniFahren".Schleuse_3121.Schleuse.Gesamt_Trolley_DL, TrolleyID:="DVP_OmniFahren".Schleuse_3121.Dyn.TrolleyID_Schleuse, Endziel:=16#0000, ShopGroup:=DINT#815) // /
BEU
X3121E: NOP 0
--- NW 3: Schleuse 3123: Weiterfahren erlaubt ? (Sorter VP_A von RückführStrecke) ---
L "MW190"
L 3123 // Aufruf von Schleuse 3123 ?
<>I // Nein!
JC X3123E
L "VP_TravelFIFO_A".Travel_FIFO_BG3120.FIFO.ANZAHL
L 0 // Daten noch im Travel-FIFO?
<>I // Ja !
O "MB3123" // Trolley fährt schon
O "DVP_OmniFahren".Einfahrt_VP."3123_stop"
BEC
L 0
T Ziel_hex
A "SGes".Ohne_PC_Fahren // Also Ziel simulieren
JC Sim3123
AN "DVP_OmniFahren".Schleuse_3123.Status2.Telegramm_gesendet
JC T3123
// Shop-Group definiert ?
L "MD182" // ShopGroup
L DINT#0 // bekannt?
<>D // Ja !
A(
CAC
L DINT#0815 // bekannt?
<>D // Ja !
O "SGes".Ohne_PC_Fahren // 815 nur ohne PC fahren Ok!
)
JC VP3123
// Erneute Anfrage bei Host!
A "10s-Impuls"
R "DVP_OmniFahren".Schleuse_3123.Status2.Telegramm_gesendet
BEU
// Voll-Puffer ermitteln oder Ziel schon fest?
VP3123: L Ziel_hex // Evtl. von Simulation
L 16#0 // schon angegeben?
<>I // Ja!
JC ZielFest3123
CALL FC "ShopGroup to Rein-Lager ermitteln" (ShopGroup:="MD182", Puffer:=Ziel_hex)
// Ziel = Voll-Lager?
ZielFest3123: L Ziel_hex
L 16#F000
AW
L 16#B000 // Ziel = VollLager ?
==I // Ja!
R "7_HMI_Err_UH07_OB".Logistik.Kein_Platz_im_VollLager
JC LagerOk_3123
SET
S "7_HMI_Err_UH07_OB".Logistik.Kein_Platz_im_VollLager
// Im Kreis nur fahren, falls Stau in Rückführstrecke:
AN "DVP_Sensoren".Stau_BG3243.Stat.B_Akt
BEC // Nicht ins Lager fahren !
L 16#B151 // /Vorerst immer Lager 51 fahren
T Ziel_hex
LagerOk_3123: L Ziel_hex
L 16#FFF
AW
BTI // Damit Int101-151 als Ziel !
T Ziel_int
// Check, ob Ziel-Lager Inilauf aktiv hat:
T "MW220"
CALL FC "DatenOut" (SSDB:=275, SSDW:=0, PARA:=16#0000, SEARCHDATEN:=P#M220.0, RE_VAL:="MB199", OUTDATEN:=P#M220.0, Position:=Position) // Eintrag lesen
L "MB199"
L 2#1111111 // Bit 7 ausblenden
AW
L 0 // Fehler vorhanden?
<>I // Ja
BEC
L "MW224"
T Lager_DB
L "MW226"
T Lager_DW
ITD
T AR1Start // Startwert mit Offset 0
L AR1Start // Startwert mit Offset 0
+ DINT#28 // Offset Status2 (Bit 7: Inilauf)
SLD 3
L 7 // Damit DBX_Bit 7
OD
T AR1Zeiger // Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
OPN DB[Lager_DB] // Lager-DB öffnen
A DBX [AR1Zeiger] // Lager hat Inilauf aktiv
BEC // Sonst kann der Inilauf nie beendet werden!
// Check, ob Ziel-Lager Platz hat:
L AR1Start // Startwert mit Offset 0
+ DINT#28 // Offset Status2 (Bit 1: Puffer hat Platz_IN)
SLD 3
L 1 // Damit DBX_Bit 1
OD
T AR1Zeiger // Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
OPN DB[Lager_DB] // Lager-DB öffnen
AN DBX [AR1Zeiger] // Lager hat keinen Platz
BEC // Sonst kann der Inilauf nie beendet werden!
// Ziel übergeben:
L Ziel_int
T "DVP_Sorter_A".Sorter_MB3123.Separator.Default_Ziel
T "DVP_Sorter_A".Sorter_MB3123.Dyn.Scanner.Rec_DEST_Ziel
// Scanner-IDX übergeben:
L "DVP_OmniFahren".Schleuse_3123.Dyn.TrolleyID_Schleuse
T "DVP_Sorter_A".Sorter_MB3123.Dyn.Scanner.Rec_IDX // IDX
CLR // Wird über MSorterRein (FB1423/5) gestartet!
S "M180.6" // Weiterfahrt ist erlaubt
BEU
// GOHDReqM an Host senden:
T3123: L "DVP_OmniFahren".Schleuse_3123.Dyn.TrolleyID_Schleuse
L 0 // Barcode bekannt?
==D // Nein!
BEC // Warten!
CALL FB "Daten_in_SendFIFO_speichern" , (TelegrammKennung[1]:='G', TelegrammKennung[2]:='O', TelegrammKennung[3]:='H', TelegrammKennung[4]:='D', TelegrammKennung[5]:='R', TelegrammKennung[6]:='e', TelegrammKennung[7]:='q', TelegrammKennung[8]:='M', TelegrammKennung[9]:=?, TelegrammKennung[10]:=?, TrolleyID:="DVP_OmniFahren".Schleuse_3123.Dyn.TrolleyID_Schleuse, StationsNr:=3123, Puffer_LinienNr:=?, StoreGroup:=?, Status_1_Int:=?, Status_2_Bit[0]:=?, Status_2_Bit[1]:=?, Status_2_Bit[2]:=?, Status_2_Bit[3]:=?, Status_2_Bit[4]:=?, Status_2_Bit[5]:=?, Status_2_Bit[6]:=?, Status_2_Bit[7]:=?, Reserve[1]_Int:=?, Reserve[2]_Int:=?, Port:=2, Ret_Val_FIFO_IN:="MB199", Error:="Error.Bit")
AN "Error.Bit"
S "DVP_OmniFahren".Schleuse_3123.Status2.Telegramm_gesendet
BEU
// /Zum Testen bei Inbetriebnahme:
Sim3123: L "DVP_OmniFahren".Einfahrt_VP."3123_Ziel"
T Ziel_hex
// Shop-Group definiert ?
L "MD182" // ShopGroup
L DINT#0 // bekannt?
<>D // Ja !
JC VP3123
CALL FC "Trolleydaten_neu_anlegen" (Gesamt_Trolley_DL:="DVP_OmniFahren".Schleuse_3123.Schleuse.Gesamt_Trolley_DL, TrolleyID:="DVP_OmniFahren".Schleuse_3123.Dyn.TrolleyID_Schleuse, Endziel:=16#0000, ShopGroup:=DINT#815) // /
BEU
X3123E: NOP 0
--- NW 4: Schleuse 3244: (Nach LagerAusfahrt) ---
L "MW190"
L 3244 // Aufruf von Schleuse XXXX?
<>I // Nein!
JC PS5E
A "DVP_OmniFahren".Ausfahrt_VP."3244_stop"
BEC
L "DVP_OmniFahren".Ausfahrt_VP."3244_Ziel"
L 16#0 // Vorgabe?
==I // Nein!
JC N3244
CAC
L 16#B000 // Vollpuffer
==I // Ja!
JC A3244
CAC
L 16#E000 // Entnahmepuffer
==I // Ja!
JC G3244
BEU
// Aufgrund der Daten fahren:
N3244: NOP 0
// EndZiel = Entnahmepuffer?
L "MW194" // EndZiel
L 16#F000
AW
T ZielGruppe
L 16#E000 // Entnahme-Puffer
==I // Ja !
JC G3244 // Gerade fahren
// Leer-Trolley?:
L "DVP_OmniFahren".Schleuse_3244.Dyn.Trolley_ShopGroup
L DINT#-1 // leerer Trolley ?
==D // Ja !
A(
L "DLLeerPuffer_leer".Datenlistenkopf.AnzahlEintraege
L 5 // Genügend Platz vorhanden ?
>=I // Ja !
)
JC G3244 // Gerade fahren
JU A3244 // Rest Abzweig fahren
A3244: L 16#3243
T "MW198" // Weichenziel
AN "DVP_Sensoren".Stau_BG3243.Stat.B_Akt
S "M180.6" // Weiterfahrt ist erlaubt
BEU
G3244: L 16#3246
T "MW198" // Weichenziel
AN "DVP_Sensoren".Stau_BG3246.Stat.B_Akt
S "M180.6" // Weiterfahrt ist erlaubt
BEU
PS5E: NOP 0
--- NW 5: Ende ---
BE
END_FUNCTION
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,33 +1,32 @@
=== FC 1100: VP_Bereich [STL] ===
INTERFACE:
Input:
Output:
InOut:
Temp:
Constant:
Return:
Ret_Val : Void
FUNCTION "VP_Bereich" : Void
TITLE = Bereich Outbound: Vollpuffer
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
--- NW 1: Baustein-Aufrufe ---
CALL FB "VP_Sensoren" ,
BEGIN
NETWORK
TITLE = Baustein-Aufrufe
CALL "VP_Sensoren", "DVP_Sensoren";
CALL FB "VP_OmniFahren" ,
CALL "VP_OmniFahren", "DVP_OmniFahren";
CALL FB "VollPufferStreckenA" ,
CALL "VollPufferStrecken_A", "DVollPufferStrecken_A";
CALL FB "VollPufferStreckenB" ,
CALL "VollPufferStrecken_B", "DVollPufferStrecken_B";
CALL FB "VP_Sorter_A" ,
CALL "VP_Sorter_A", "DVP_Sorter_A";
CALL FB "VP_Sorter_B" ,
CALL "VP_Sorter_B", "DVP_Sorter_B";
CALL FB "VPAuslagern" ,
CALL "VP_Auslagern", "DVP_Auslagern";
CALL FB "VP_Zylinder" ,
CALL "VP_Zylinder", "DVP_Zylinder";
CALL FB "VP_Antriebe" ,
CALL "VP_Antriebe", "DVP_Antriebe";
NETWORK
TITLE = Ende
BE;
--- NW 2: Ende ---
BE
END_FUNCTION
@@ -1,156 +1,255 @@
=== FB 2199: VPtoEP_Antriebe [STL] ===
INTERFACE:
Input:
Output:
InOut:
Static:
MA0151 : "MAntrieb_PowerSave"
MA0060 : "MAntrieb_PowerSave"
MA0061 : "MAntrieb_PowerSave"
MA0320 : "MAntrieb_PowerSave"
MA0321 : "MAntrieb_PowerSave"
MA0322 : "MAntrieb_PowerSave"
MA0323 : "MAntrieb_PowerSave"
MA0324 : "MAntrieb_PowerSave"
MA0325 : "MAntrieb_PowerSave"
Temp:
Auto : Bool // Automatik Linie ist aktiv
Hand : Bool // Hand Linie ist aktiv
BereichErr : Bool // Bereichsstörung -> Antrieb stoppen
QKontroll : Bool // Frequenzumrichter schon 3s Netz EIN
FuKontroll : Bool // Frequenzumrichter schon 3s Netz EIN
Quit : Bool // Motorschutz-Störung quittieren
Qok : Bool // Motorschutz ok
Jog1 : Bool // Geschwindigkeit 1
Jog2 : Bool // Geschwindigkeit 2
Betrieb : Bool // Betriebsart aktiv
FC105_RET : Word // Returnwert von FC105
Antrieb1 : Bool // Antrieb dazuschalten
Antrieb2 : Bool // Antrieb dazuschalten
F1 : Bool // Geschwindigkeit 1 aktiviert
F2 : Bool // Geschwindigkeit 2 aktiviert
F3 : Bool // Geschwindigkeit 3 aktiviert
Constant:
FUNCTION_BLOCK "VPtoEP_Antriebe"
TITLE = Antriebe Outbound Vollpuffer > Entnahmepuffer
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : IBAE
VERSION : 0.1
VAR
MA0151 : "MAntrieb_PowerSave";
MA0060 : "MAntrieb_PowerSave";
MA0061 : "MAntrieb_PowerSave";
MA0320 : "MAntrieb_PowerSave";
MA0321 : "MAntrieb_PowerSave";
MA0322 : "MAntrieb_PowerSave";
MA0323 : "MAntrieb_PowerSave";
MA0324 : "MAntrieb_PowerSave";
MA0325 : "MAntrieb_PowerSave";
END_VAR
--- NW 1: Übergabe des Bereichstatus System UC071/A01 ---
A "DOutbound_Bereich".A01_UH07.Automatik
AN "DOutbound_Bereich".A01_UH07.Handbetrieb
= Auto
CLR
= Hand
A(
O "DOutbound_Bereich".A01_UC071.BereichErr
O "DOutbound_Bereich".A01_UZ7104.Area_Stop
)
AN "SGes".Simulation_ohne_HW_aktiv
= BereichErr
A "T191"
= QKontroll
= FuKontroll
A "DOutbound_Bereich".A01_UC071.StOk_aktiv
= Quit
VAR_TEMP
Auto : Bool; // Automatik Linie ist aktiv
Hand : Bool; // Hand Linie ist aktiv
BereichErr : Bool; // Bereichsstörung -> Antrieb stoppen
QKontroll : Bool; // Frequenzumrichter schon 3s Netz EIN
FuKontroll : Bool; // Frequenzumrichter schon 3s Netz EIN
Quit : Bool; // Motorschutz-Störung quittieren
Qok : Bool; // Motorschutz ok
Jog1 : Bool; // Geschwindigkeit 1
Jog2 : Bool; // Geschwindigkeit 2
Betrieb : Bool; // Betriebsart aktiv
FC105_RET : Word; // Returnwert von FC105
Antrieb1 : Bool; // Antrieb dazuschalten
Antrieb2 : Bool; // Antrieb dazuschalten
F1 : Bool; // Geschwindigkeit 1 aktiviert
F2 : Bool; // Geschwindigkeit 2 aktiviert
F3 : Bool; // Geschwindigkeit 3 aktiviert
END_VAR
--- NW 2: MA0151 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0151", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=120, Antriebrueck:=?, Antriebvor:="MA0151", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0151, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
BEGIN
NETWORK
TITLE = Übergabe des Bereichstatus System UC071/A01
U "DOutbound_Bereich".A01_UH07.Automatik;
UN "DOutbound_Bereich".A01_UH07.Handbetrieb;
= #Auto;
CLR;
= #Hand;
U(;
O "DOutbound_Bereich".A01_UC071.BereichErr;
O "DOutbound_Bereich".A01_UZ7104.Area_Stop;
);
UN "SGes".Simulation_ohne_HW_aktiv;
= #BereichErr;
U "T191";
= #QKontroll;
= #FuKontroll;
U "DOutbound_Bereich".A01_UC071.StOk_aktiv;
= #Quit;
NETWORK
TITLE = MA0151
CALL #MA0151
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0151" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
T_Nachlauf := 120 ,
Antriebvor := "MA0151" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0151
);
NETWORK
TITLE = Übergabe des Bereichstatus System UH07/A01
U "DOutbound_Bereich".A01_UH07.Automatik;
UN "DOutbound_Bereich".A01_UH07.Handbetrieb;
= #Auto;
--- NW 3: Übergabe des Bereichstatus System UH07/A01 ---
A "DOutbound_Bereich".A01_UH07.Automatik
AN "DOutbound_Bereich".A01_UH07.Handbetrieb
= Auto
CLR;
= #Hand;
CLR
= Hand
U "DOutbound_Bereich".A01_UH07.BereichErr;
UN "SGes".Simulation_ohne_HW_aktiv;
= #BereichErr;
A "DOutbound_Bereich".A01_UH07.BereichErr
AN "SGes".Simulation_ohne_HW_aktiv
= BereichErr
UN #BereichErr;
L S5T#1S;
SE "T197";
AN BereichErr
L S5T#1S
OnDelay "T197"
U "T197";
= #QKontroll;
= #FuKontroll;
A "T197"
= QKontroll
= FuKontroll
U "DOutbound_Bereich".A01_UH07.StOk_aktiv;
= #Quit;
A "DOutbound_Bereich".A01_UH07.StOk_aktiv
= Quit
NETWORK
TITLE = MA0060
CALL #MA0060
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0060" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0060" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0060
);
--- NW 4: MA0060 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0060", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0060", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0060, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
NETWORK
TITLE = MA0061
CALL #MA0061
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0061" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0061" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0061
);
NETWORK
TITLE = Übergabe des Bereichstatus System UC074/A01
U "DOutbound_Bereich".A01_UH07.Automatik;
UN "DOutbound_Bereich".A01_UH07.Handbetrieb;
= #Auto;
--- NW 5: MA0061 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0061", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0061", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0061, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
CLR;
= #Hand;
U "DOutbound_Bereich".A01_UC074.BereichErr;
UN "SGes".Simulation_ohne_HW_aktiv;
= #BereichErr;
UN #BereichErr;
L S5T#1S;
SE "T194";
U "T194";
= #QKontroll;
= #FuKontroll;
U "DOutbound_Bereich".A01_UC074.StOk_aktiv;
= #Quit;
NETWORK
TITLE = MA0320
CALL #MA0320
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0320" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0320" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0320
);
--- NW 6: Übergabe des Bereichstatus System UC074/A01 ---
A "DOutbound_Bereich".A01_UH07.Automatik
AN "DOutbound_Bereich".A01_UH07.Handbetrieb
= Auto
CLR
= Hand
A "DOutbound_Bereich".A01_UC074.BereichErr
AN "SGes".Simulation_ohne_HW_aktiv
= BereichErr
AN BereichErr
L S5T#1S
OnDelay "T194"
A "T194"
= QKontroll
= FuKontroll
A "DOutbound_Bereich".A01_UC074.StOk_aktiv
= Quit
NETWORK
TITLE = MA0321
CALL #MA0321
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0321" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0321" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0321
);
--- NW 7: MA0320 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0320", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0320", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0320, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
NETWORK
TITLE = MA0322
CALL #MA0322
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0322" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
T_Nachlauf := 90 ,
Antriebvor := "MA0322" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0322
);
--- NW 8: MA0321 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0321", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0321", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0321, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
NETWORK
TITLE = MA0323
CALL #MA0323
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0323" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0323" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0323
);
--- NW 9: MA0322 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0322", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=90, Antriebrueck:=?, Antriebvor:="MA0322", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0322, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
NETWORK
TITLE = MA0324
CALL #MA0324
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0324" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0324" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0324
);
NETWORK
TITLE = MA0325
CALL #MA0325
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0325" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0325" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0325
);
--- NW 10: MA0323 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0323", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0323", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0323, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
/// U "M902.0"
/// UN "DEP_Sorter".Sync_BG4527.Dyn.Error.Keine_TeachPktdaten
/// S "MA0325" //Zusätzlich im Lastbaustein VP>EP_Antriebe, da Aufruf vor Sorter-FB
NETWORK
TITLE = Ende
BE;
--- NW 11: MA0324 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0324", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0324", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0324, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
--- NW 12: MA0325 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0325", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0325", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0325, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
// / U "M902.0"
// / UN "DEP_Sorter".Sync_BG4527.Dyn.Error.Keine_TeachPktdaten
// / S "MA0325" //Zusätzlich im Lastbaustein VP>EP_Antriebe, da Aufruf vor Sorter-FB
--- NW 13: Ende ---
BE
END_FUNCTION_BLOCK
@@ -1,104 +1,216 @@
=== FB 2190: VPtoEP_Sensoren [STL] ===
INTERFACE:
Input:
Output:
InOut:
Static:
Stau_BG3246 : "MSensoren" // Stau am Sensor Einfahrt MA0151
Stau_BG3251 : "MSensoren" // Stau am Sensor Mitte MA0151
Stau_BG3274 : "MSensoren" // Stau am Sensor Einfahrt MA0060
Stau_BG3362 : "MSensoren" // Stau am Sensor Einfahrt MA0061
Stau_BG3364 : "MSensoren" // Stau am Sensor Mitte MA0061
Stau_BG4440 : "MSensoren" // Stau am Sensor nach BST1
Stau_BG4442 : "MSensoren" // Stau am Sensor Einfahrt MA321
Sack_BG4444 : "MSensoren" // Sack erkannt
Stau_BG4445 : "MSensoren" // Stau am Sensor Mitte MA321
Stau_BG4447 : "MSensoren" // Stau am Sensor hinter Weiche4445
Stau_BG4451 : "MSensoren" // Stau am Sensor Ausfahrt Schleuse4450
Stau_BG4453 : "MSensoren" // Stau am Sensor Einfahrt MA0323
Stau_BG4500 : "MSensoren" // Stau am Sensor Einfahrt MA0324
Stau_BG4530 : "MSensoren" // Stau am Sensor Mitte MA0324
Stau_BG4502 : "MSensoren" // Stau am Sensor Einfahrt MA0325
Temp:
T_Ein : Int // Vorgabe Einschaltverzögerung
T_Aus : Int // Zwischenspeicher Ausschaltverzögerung
F1 : Bool // Geschwindigkeit 1 aktiviert
F2 : Bool // Geschwindigkeit 2 aktiviert
F3 : Bool // Geschwindigkeit 3 aktiviert
ESensor : Bool // Sensoren
Antrieb : Bool
VReal : Real // GeschwindigkeitinReal
Zeit : Int // Zeit für Ausschaltverzögerung LT1100
Aktiv : Bool // Zeit aktivieren
Constant:
FUNCTION_BLOCK "VPtoEP_Sensoren"
TITLE = Sensoren Outbound: VP > EP
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : IBAE
VERSION : 0.1
VAR
Stau_BG3246 : "MSensoren"; // Stau am Sensor Einfahrt MA0151
Stau_BG3251 : "MSensoren"; // Stau am Sensor Mitte MA0151
Stau_BG3274 : "MSensoren"; // Stau am Sensor Einfahrt MA0060
Stau_BG3362 : "MSensoren"; // Stau am Sensor Einfahrt MA0061
Stau_BG3364 : "MSensoren"; // Stau am Sensor Mitte MA0061
Stau_BG4440 : "MSensoren"; // Stau am Sensor nach BST1
Stau_BG4442 : "MSensoren"; // Stau am Sensor Einfahrt MA321
Sack_BG4444 : "MSensoren"; // Sack erkannt
Stau_BG4445 : "MSensoren"; // Stau am Sensor Mitte MA321
Stau_BG4447 : "MSensoren"; // Stau am Sensor hinter Weiche4445
Stau_BG4451 : "MSensoren"; // Stau am Sensor Ausfahrt Schleuse4450
Stau_BG4453 : "MSensoren"; // Stau am Sensor Einfahrt MA0323
Stau_BG4500 : "MSensoren"; // Stau am Sensor Einfahrt MA0324
Stau_BG4530 : "MSensoren"; // Stau am Sensor Mitte MA0324
Stau_BG4502 : "MSensoren"; // Stau am Sensor Einfahrt MA0325
END_VAR
--- NW 1: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3246", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
VAR_TEMP
T_Ein : Int; // Vorgabe Einschaltverzögerung
T_Aus : Int; // Zwischenspeicher Ausschaltverzögerung
F1 : Bool; // Geschwindigkeit 1 aktiviert
F2 : Bool; // Geschwindigkeit 2 aktiviert
F3 : Bool; // Geschwindigkeit 3 aktiviert
ESensor : Bool; // Sensoren
Antrieb : Bool;
VReal : Real; // GeschwindigkeitinReal
Zeit : Int; // Zeit für Ausschaltverzögerung LT1100
Aktiv : Bool; // Zeit aktivieren
END_VAR
--- NW 2: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3251", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
BEGIN
NETWORK
TITLE = Stau am Sensor Einfahrt MA0151
//Sensoren entprellen
CALL #Stau_BG3246
( ESensor := "BG3246" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau am Sensor Mitte MA0151
//Sensoren entprellen
CALL #Stau_BG3251
( ESensor := "BG3251" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 3: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3274", T_Ein:=1, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Stau am Sensor Einfahrt MA0060
//Sensoren entprellen
CALL #Stau_BG3274
( ESensor := "BG3274" ,
T_Ein := 1 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau am Sensor Einfahrt MA0061
//Sensoren entprellen
CALL #Stau_BG3362
( ESensor := "BG3362" ,
T_Ein := 1 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 4: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3362", T_Ein:=1, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Stau am Sensor Mitte MA0061
//Sensoren entprellen
CALL #Stau_BG3364
( ESensor := "BG3364" ,
T_Ein := 80 ,
T_Aus := 21 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau am Sensor hinter BST1
//Sensoren entprellen
CALL #Stau_BG4440
( ESensor := "BG4440" ,
T_Ein := 1 ,
T_Aus := 30 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 5: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3364", T_Ein:=80, T_Aus:=21, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Stau am Sensor Einfahrt MA0321
//Sensoren entprellen
CALL #Stau_BG4442
( ESensor := "BG4442" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Sack in Schleuse 4221 erkannt (Vor ByPass zu VP)
//Sensoren entprellen
UN "MB4443" ;//Alt-Trolley noch beim Ausfahren
U(;
O "MA0321";
O "BG4443";
);
= #Aktiv;
--- NW 6: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4440", T_Ein:=1, T_Aus:=30, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
CALL #Sack_BG4444
( ESensor := "BG4444" ,
T_Ein := 1 ,
T_Aus := 11 ,
tein_aktiv := #Aktiv ,
taus_aktiv := "MB4443"
);
NETWORK
TITLE = Stau am Sensor Mitte MA0321
//Sensoren entprellen
CALL #Stau_BG4445
( ESensor := "BG4445" ,
T_Ein := 1 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 7: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4442", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Stau am Sensor hinter Weiche4445
//Sensoren entprellen
CALL #Stau_BG4447
( ESensor := "BG4447" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau am Sensor Ausfahrt Schleuse4450
//Sensoren entprellen
CALL #Stau_BG4451
( ESensor := "BG4451" ,
T_Ein := 1 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 8: Sensoren entprellen ---
AN "MB4443" // Alt-Trolley noch beim Ausfahren
A(
O "MA0321"
O "BG4443"
)
= Aktiv
NETWORK
TITLE = Stau am Sensor Einfahrt MA0323
//Sensoren entprellen
CALL #Stau_BG4453
( ESensor := "BG4453" ,
T_Ein := 1 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
CALL FB "None" , (ESensor:="BG4444", T_Ein:=1, T_Aus:=11, tein_aktiv:=Aktiv, taus_aktiv:="MB4443")
NETWORK
TITLE = Stau am Sensor Einfahrt MA0324
//Sensoren entprellen
CALL #Stau_BG4500
( ESensor := "BG4500" ,
T_Ein := 1 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau am Sensor Mitte MA0324
//Sensoren entprellen
CALL #Stau_BG4530
( ESensor := "BG4530" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 9: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4445", T_Ein:=1, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Stau am Sensor Einfahrt MA0325
//Sensoren entprellen
CALL #Stau_BG4502
( ESensor := "BG4502" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Ende
BE;
--- NW 10: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4447", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
--- NW 11: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4451", T_Ein:=1, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
--- NW 12: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4453", T_Ein:=1, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
--- NW 13: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4500", T_Ein:=1, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
--- NW 14: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4530", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
--- NW 15: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4502", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
--- NW 16: Ende ---
BE
END_FUNCTION_BLOCK
@@ -1,86 +1,135 @@
=== FB 2192: VPtoEP_Zylinder [STL] ===
INTERFACE:
Input:
Output:
InOut:
Static:
Schleuse_3247 : "MZylinder" //
Schleuse_3275 : "MZylinder" //
Schleuse_3363 : "MZylinder"
Schleuse_3366 : "MZylinder"
Schleuse_4443 : "MZylinder"
Weiche_4445 : "MZylinder" //
Schleuse_4450 : "MZylinder" //
Temp:
Auto : Bool // Automatik ist aktiv
Hand : Bool // Hand ist aktiv
ZylAst : Bool // Zylinder ansteuern
Constant:
FUNCTION_BLOCK "VPtoEP_Zylinder"
TITLE = Zylinder Outbound Vollpuffer > Entnahmepuffer
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : AE
VERSION : 0.1
VAR
Schleuse_3247 : "MZylinder"; //
Schleuse_3275 : "MZylinder"; //
Schleuse_3363 : "MZylinder";
Schleuse_3366 : "MZylinder";
Schleuse_4443 : "MZylinder";
Weiche_4445 : "MZylinder"; //
Schleuse_4450 : "MZylinder"; //
END_VAR
--- NW 1: Übergabe des Bereichstatus System UC071/A01 ---
A "DOutbound_Bereich".A01_UH07.Automatik
AN "DOutbound_Bereich".A01_UH07.Handbetrieb
= Auto
A(
O "DOutbound_Bereich".A01_UC071.BereichErr
O "DOutbound_Bereich".A01_UZ7104.Area_Stop
)
AN "SGes".Simulation_ohne_HW_aktiv
JC Next // Zylinder-Stellung nicht mehr ändern
VAR_TEMP
Auto : Bool; // Automatik ist aktiv
Hand : Bool; // Hand ist aktiv
ZylAst : Bool; // Zylinder ansteuern
END_VAR
--- NW 2: Schleuse_3247 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3247", ZylGst:=?)
BEGIN
NETWORK
TITLE = Übergabe des Bereichstatus System UC071/A01
U "DOutbound_Bereich".A01_UH07.Automatik;
UN "DOutbound_Bereich".A01_UH07.Handbetrieb;
= #Auto;
U(;
O "DOutbound_Bereich".A01_UC071.BereichErr;
O "DOutbound_Bereich".A01_UZ7104.Area_Stop;
);
UN "SGes".Simulation_ohne_HW_aktiv;
SPB Next ;//Zylinder-Stellung nicht mehr ändern
--- NW 3: Schleuse_3275 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3275", ZylGst:=?)
NETWORK
TITLE = Schleuse_3247
CALL #Schleuse_3247
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3247"
);
NETWORK
TITLE = Schleuse_3275
CALL #Schleuse_3275
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3275"
);
--- NW 4: Übergabe des Bereichstatus System UH07/A01 ---
Next: A "DOutbound_Bereich".A01_UH07.Automatik
AN "DOutbound_Bereich".A01_UH07.Handbetrieb
= Auto
NETWORK
TITLE = Übergabe des Bereichstatus System UH07/A01
Next: U "DOutbound_Bereich".A01_UH07.Automatik;
UN "DOutbound_Bereich".A01_UH07.Handbetrieb;
= #Auto;
A "DOutbound_Bereich".A01_UH07.BereichErr
AN "SGes".Simulation_ohne_HW_aktiv
JC Next1 // Zylinder-Stellung nicht mehr ändern
U "DOutbound_Bereich".A01_UH07.BereichErr;
UN "SGes".Simulation_ohne_HW_aktiv;
SPB Next1 ;//Zylinder-Stellung nicht mehr ändern
NETWORK
TITLE = Schleuse_3363
CALL #Schleuse_3363
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3363"
);
--- NW 5: Schleuse_3363 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3363", ZylGst:=?)
NETWORK
TITLE = Schleuse_3366
CALL #Schleuse_3366
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3366"
);
NETWORK
TITLE = Übergabe des Bereichstatus System UC074/A01
Next1: U "DOutbound_Bereich".A01_UH07.Automatik;
UN "DOutbound_Bereich".A01_UH07.Handbetrieb;
= #Auto;
--- NW 6: Schleuse_3366 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3366", ZylGst:=?)
U "DOutbound_Bereich".A01_UC074.BereichErr;
UN "SGes".Simulation_ohne_HW_aktiv;
SPB Next2 ;//Zylinder-Stellung nicht mehr ändern
NETWORK
TITLE = Schleuse_4443
CALL #Schleuse_4443
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB4443"
);
--- NW 7: Übergabe des Bereichstatus System UC074/A01 ---
Next1: A "DOutbound_Bereich".A01_UH07.Automatik
AN "DOutbound_Bereich".A01_UH07.Handbetrieb
= Auto
NETWORK
TITLE = Weiche_4445
CALL #Weiche_4445
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB4445"
);
A "DOutbound_Bereich".A01_UC074.BereichErr
AN "SGes".Simulation_ohne_HW_aktiv
JC Next2 // Zylinder-Stellung nicht mehr ändern
U "MB4445";
= "MB4457";
NETWORK
TITLE = Schleuse_4450
CALL #Schleuse_4450
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB4450"
);
--- NW 8: Schleuse_4443 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB4443", ZylGst:=?)
NETWORK
TITLE = Ende
Next2: BE;
--- NW 9: Weiche_4445 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB4445", ZylGst:=?)
A "MB4445"
= "MB4457"
--- NW 10: Schleuse_4450 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB4450", ZylGst:=?)
--- NW 11: Ende ---
Next2: BE
END_FUNCTION_BLOCK
@@ -1,49 +1,57 @@
=== FC 2182: VPtoEP_Draussen_FC [STL] ===
INTERFACE:
Input:
Output:
InOut:
Temp:
Constant:
Return:
Ret_Val : Void
FUNCTION "VPtoEP_Draussen_FC" : Void
TITLE = Draussen-FC: VollPuffer
{ S7_Optimized_Access := 'FALSE' ; S7_Pass_Registers := 'TRUE' }
AUTHOR : AE
VERSION : 0.1
--- NW 1: Rückmeldung ---
SET // Rückmeldungen erst mal resetten
R "M180.6" // Weiterfahrt von Ziel-FC erlaubt
BEGIN
NETWORK
TITLE = Rückmeldung
SET;//Rückmeldungen erst mal resetten
R "M180.6";//Weiterfahrt von Ziel-FC erlaubt
NETWORK
TITLE = Schleuse 4443 (Vor ByPass zum LP): Ausgefahren ?
L "MW190";
L 4443 ;//Aufruf von Schleuse 4443 ?
<>I;//Nein!
SPB X4443E;
--- NW 2: Schleuse 4443 (Vor ByPass zum LP): Ausgefahren ? ---
L "MW190"
L 4443 // Aufruf von Schleuse 4443 ?
<>I // Nein!
JC X4443E
//Evtl. erkannten Sack löschen:
SET;
R "DVPtoEP_Sensoren".Sack_BG4444.Stat.B_Akt;
// Evtl. erkannten Sack löschen:
SET
R "DVPtoEP_Sensoren".Sack_BG4444.Stat.B_Akt
L "DVPtoEP_OmniFahren".Schleuse_4443.Dyn.Weichen_Ziel;
L 16#4461;//Abzweig ?
<>I;//Nein !
SPB EP;
L "DVPtoEP_OmniFahren".Schleuse_4443.Dyn.Weichen_Ziel
L 16#4461 // Abzweig ?
<>I // Nein !
JC EP
//Trolley fährt zum LP:
//Trolleydaten in DB1000 löschen, da zum LP fährt und danach kein Leser mehr!
CALL "Trolleydaten_löschen"
( Gesamt_Trolley_DL := 1000 ,
TrolleyID := "DVPtoEP_OmniFahren".Schleuse_4443.Dyn.TrolleyID_Schleuse //IDX"DLP>HW_OmniFahren".Schleuse_4221.Dyn.TrolleyID_Schleuse
);
// Trolley fährt zum LP:
// Trolleydaten in DB1000 löschen, da zum LP fährt und danach kein Leser mehr!
CALL FC "Trolleydaten_löschen" (Gesamt_Trolley_DL:=1000, TrolleyID:="DVPtoEP_OmniFahren".Schleuse_4443.Dyn.TrolleyID_Schleuse) // IDX"DLP>HW_OmniFahren".Schleuse_4221.Dyn.TrolleyID_Schleuse
//Bei Partner (Schleuse 4466) wieder mit Schritt 0 beginnen (erneuter Ziel-FC-Aufruf)
L 0;
T "DEPtoLP_OmniFahren".Schleuse_4466.Dyn.Sk.Akt_Schritt;
// Bei Partner (Schleuse 4466) wieder mit Schritt 0 beginnen (erneuter Ziel-FC-Aufruf)
L 0
T "DEPtoLP_OmniFahren".Schleuse_4466.Dyn.Sk.Akt_Schritt
BEA;
BEU
//Trolleydaten in DB1000 ändern:
EP: CALL "Trolleydaten_ändern"
( Gesamt_Trolley_DL := 1000 ,
TrolleyID := "DVPtoEP_OmniFahren".Schleuse_4443.Dyn.TrolleyID_Schleuse , //IDX
Endziel := 16#E000 , //Entnahmepuffer
ShopGroup := DINT#0
);
// Trolleydaten in DB1000 ändern:
EP: CALL FC "Trolleydaten_ändern" (Gesamt_Trolley_DL:=1000, TrolleyID:="DVPtoEP_OmniFahren".Schleuse_4443.Dyn.TrolleyID_Schleuse, Endziel:=16#E000, ShopGroup:=DINT#0) // IDX | Entnahmepuffer
X4443E: NOP 0;
X4443E: NOP 0
NETWORK
TITLE = Ende
BE;
--- NW 3: Ende ---
BE
END_FUNCTION
@@ -1,47 +1,56 @@
=== FC 2180: VPtoEP_Leser_FC [STL] ===
INTERFACE:
Input:
Output:
InOut:
Temp:
Zielebene : Word
Constant:
Return:
Ret_Val : Void
--- NW 1: Rückmeldung ---
// Keine
L 0 // Evtl. Zwischenziel (MW196)
T "MW196"
FUNCTION "VPtoEP_Leser_FC" : Void
TITLE = Leser-FC: VP>EP
{ S7_Optimized_Access := 'FALSE' ; S7_Pass_Registers := 'TRUE' }
AUTHOR : AE
VERSION : 0.1
VAR_TEMP
Zielebene : Word;
END_VAR
--- NW 2: Schleuse 4443: (Vor ByPass zurück zu LP) ---
L "MW190" // Schleusen-Nr.
L 4443 // Aufruf von Schleuse ?
<>I // Nein!
JC X4443E
BEGIN
NETWORK
TITLE = Rückmeldung
AN "M180.0" // Lesefehler
JC Y4443
//Keine
L 0;//Evtl. Zwischenziel (MW196)
T "MW196";
BEU
NETWORK
TITLE = Schleuse 4443: (Vor ByPass zurück zu LP)
L "MW190" ;//Schleusen-Nr.
L 4443 ;//Aufruf von Schleuse ?
<>I;//Nein!
SPB X4443E;
Y4443: AN "M180.1" // unbekannt in TrolleysDL
BEC
UN "M180.0";//Lesefehler
SPB Y4443;
// Daten in Datenbank erzeugen:
L "DVPtoEP_OmniFahren".Schleuse_4443.Dyn.TrolleyID_Schleuse
L DINT#0 // ID bekannt?
==D // Nein
BEC
BEA;
CALL FC "Trolleydaten_neu_anlegen" (Gesamt_Trolley_DL:="DVPtoEP_OmniFahren".Schleuse_4443.Schleuse.Gesamt_Trolley_DL, TrolleyID:="DVPtoEP_OmniFahren".Schleuse_4443.Dyn.TrolleyID_Schleuse, Endziel:=16#C000, ShopGroup:=DINT#0) // Entnahme-Puffer-Bereich
Y4443: UN "M180.1" ;//unbekannt in TrolleysDL
BEB;
BEU
//Daten in Datenbank erzeugen:
L "DVPtoEP_OmniFahren".Schleuse_4443.Dyn.TrolleyID_Schleuse;
L DINT#0 ;//ID bekannt?
==D;//Nein
BEB;
X4443E: NOP 0
CALL "Trolleydaten_neu_anlegen"
( Gesamt_Trolley_DL := "DVPtoEP_OmniFahren".Schleuse_4443.Schleuse.Gesamt_Trolley_DL ,
TrolleyID := "DVPtoEP_OmniFahren".Schleuse_4443.Dyn.TrolleyID_Schleuse ,
Endziel := 16#C000 , //Entnahme-Puffer-Bereich
ShopGroup := DINT#0
);
BEA;
--- NW 3: Ende ---
BE
X4443E: NOP 0;
NETWORK
TITLE = Ende
BE;
END_FUNCTION
@@ -1,251 +1,460 @@
=== FB 2128: VPtoEP_OmniFahren [STL] ===
INTERFACE:
Input:
Output:
InOut:
Static:
Schleuse_3247 : "MHMOmniSchleuse_Plus"
Schleuse_3275 : "MHMOmniSchleuse"
Bereich_3361 : "MHMOmniBereich_Plus"
Schleuse_3363 : "MHMOmniSchleuse"
Schleuse_3366 : "MHMOmniSchleuse"
Bereich_4441 : "MHMOmniBereich_Plus"
Schleuse_4443 : "MHMOmniSchleuse_Plus"
Weiche_4445 : "MHMOmniWeiche_Plus"
Schleuse_4450 : "MHMOmniSchleuse_Plus"
Bereich_4454 : "MHMOmniBereich_Plus"
Übergang_4501 : "MHMÜbergang_ohne_Schleuse"
Temp:
ErrQuit : Bool
ErrAnz : Bool
Stau_raus : Bool
Start_ok : Bool
B_aktiv : Bool
B_vor_Schleuse : Bool
B_nach_Schleuse : Bool
Antrieb_aktiv : Bool
Antrieb_vor : Bool
Antrieb_stop : Bool
Fahren_Ok : Bool
Antrieb_nicht_stoppen : Bool
Constant:
FUNCTION_BLOCK "VPtoEP_OmniFahren"
TITLE = Omnifahren Outbound Vollpuffer > Entnahmepuffer
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
VAR
Schleuse_3247 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus";
Schleuse_3275 { S7_SetPoint := 'False'} : "MHMOmniSchleuse";
Bereich_3361 : "MHMOmniBereich_Plus";
Schleuse_3363 { S7_SetPoint := 'False'} : "MHMOmniSchleuse";
Schleuse_3366 { S7_SetPoint := 'False'} : "MHMOmniSchleuse";
Bereich_4441 : "MHMOmniBereich_Plus";
Schleuse_4443 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus";
Weiche_4445 : "MHMOmniWeiche_Plus";
Schleuse_4450 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus";
Bereich_4454 : "MHMOmniBereich_Plus";
Übergang_4501 { S7_SetPoint := 'False'} : "MHMÜbergang_ohne_Schleuse";
END_VAR
--- NW 1: Systemzeug ---
// Verschiedene Bereiche:
A "DOutbound_Bereich".A01_UH07.AnlageEin
= Schleuse_3247.Dyn.Sk.Auto_akt
= Schleuse_3275.Dyn.Sk.Auto_akt
= Bereich_3361.Dyn.Sk.Auto_akt
= Schleuse_3363.Dyn.Sk.Auto_akt
= Schleuse_3366.Dyn.Sk.Auto_akt
= Bereich_4441.Dyn.Sk.Auto_akt
= Schleuse_4443.Dyn.Sk.Auto_akt
= Weiche_4445.Dyn.Status.Auto_akt
= Schleuse_4450.Dyn.Sk.Auto_akt
= Bereich_4454.Dyn.Sk.Auto_akt
AN "DOutbound_Bereich".A01_UC071.BereichErr
= Schleuse_3247.Dyn.Sk.Bereich_ok
= Schleuse_3275.Dyn.Sk.Bereich_ok
AN "DOutbound_Bereich".A01_UH07.BereichErr
= Bereich_3361.Dyn.Sk.Bereich_ok
= Schleuse_3363.Dyn.Sk.Bereich_ok
= Schleuse_3366.Dyn.Sk.Bereich_ok
AN "DOutbound_Bereich".A01_UC074.BereichErr
= Bereich_4441.Dyn.Sk.Bereich_ok
= Schleuse_4443.Dyn.Sk.Bereich_ok
= Weiche_4445.Dyn.Status.Bereich_ok
= Schleuse_4450.Dyn.Sk.Bereich_ok
= Bereich_4454.Dyn.Sk.Bereich_ok
VAR_TEMP
ErrQuit : Bool;
ErrAnz : Bool;
Stau_raus : Bool;
Start_ok : Bool;
B_aktiv : Bool;
B_vor_Schleuse : Bool;
B_nach_Schleuse : Bool;
Antrieb_aktiv : Bool;
Antrieb_vor : Bool;
Antrieb_stop : Bool;
Fahren_Ok : Bool;
Antrieb_nicht_stoppen : Bool;
END_VAR
--- NW 2: Störungen quittieren UZ7105 ---
A "DOutbound_Bereich".A01_UZ7105.StOk_aktiv
O "DOutbound_Bereich".A01_UC071.StOk_aktiv
O "DOutbound_Bereich".A01_UH07.StOk_aktiv
= ErrQuit
BEGIN
NETWORK
TITLE = Systemzeug
//Verschiedene Bereiche:
U "DOutbound_Bereich".A01_UH07.AnlageEin;
= #Schleuse_3247.Dyn.Sk.Auto_akt;
= #Schleuse_3275.Dyn.Sk.Auto_akt;
= #Bereich_3361.Dyn.Sk.Auto_akt;
= #Schleuse_3363.Dyn.Sk.Auto_akt;
= #Schleuse_3366.Dyn.Sk.Auto_akt;
= #Bereich_4441.Dyn.Sk.Auto_akt;
= #Schleuse_4443.Dyn.Sk.Auto_akt;
= #Weiche_4445.Dyn.Status.Auto_akt;
= #Schleuse_4450.Dyn.Sk.Auto_akt;
= #Bereich_4454.Dyn.Sk.Auto_akt;
UN "DOutbound_Bereich".A01_UC071.BereichErr;
= #Schleuse_3247.Dyn.Sk.Bereich_ok;
= #Schleuse_3275.Dyn.Sk.Bereich_ok;
UN "DOutbound_Bereich".A01_UH07.BereichErr;
= #Bereich_3361.Dyn.Sk.Bereich_ok;
= #Schleuse_3363.Dyn.Sk.Bereich_ok;
= #Schleuse_3366.Dyn.Sk.Bereich_ok;
UN "DOutbound_Bereich".A01_UC074.BereichErr;
= #Bereich_4441.Dyn.Sk.Bereich_ok;
= #Schleuse_4443.Dyn.Sk.Bereich_ok;
= #Weiche_4445.Dyn.Status.Bereich_ok;
= #Schleuse_4450.Dyn.Sk.Bereich_ok;
= #Bereich_4454.Dyn.Sk.Bereich_ok;
NETWORK
TITLE = Störungen quittieren UZ7105
U "DOutbound_Bereich".A01_UZ7105.StOk_aktiv;
O "DOutbound_Bereich".A01_UC071.StOk_aktiv;
O "DOutbound_Bereich".A01_UH07.StOk_aktiv;
= #ErrQuit;
NETWORK
TITLE = Schleuse 3247
CALL #Schleuse_3247
( Schleusen_Nr := 3247 ,
ErrQuit := #ErrQuit ,
B_VorSchleuse := "BG3246" ,
B_InSchleuse := "BG3247" ,
B_Zähl := "BG3251" ,
B_Stau_raus := "DVPtoEP_Sensoren".Stau_BG3251.Stat.B_Akt ,
Start_Ok := 1 ,
Antrieb_Schleuse_aktiv := "MA0151" ,
Antrieb_plus_aktiv := "MA0151" ,
Schleuse_geöffnet := "MB3247" ,
Y_Schleuse_Auf := "DVPtoEP_Zylinder".Schleuse_3247.Stat.Ast ,
Error := %DB708.DBW520 ,
Antrieb_Schleuse_vor := "DVPtoEP_Antriebe".MA0151.Stat.A_vor ,
Antrieb_Schleuse_start := "DVPtoEP_Antriebe".MA0151.Stat.A_start ,
Antrieb_Schleuse_stop := "DVPtoEP_Antriebe".MA0151.Stat.Stop_vor ,
Antrieb_Schleuse_PS := "DVPtoEP_Antriebe".MA0151.Stat.A_PS ,
Antrieb_plus_vor := , //Identisch
hStOk := #ErrAnz
);
NETWORK
TITLE = Schleuse 3275
CALL #Schleuse_3275
( Schleusen_Nr := 3275 ,
ErrQuit := #ErrQuit ,
B_VorSchleuse := "BG3251" ,
B_InSchleuse := "BG3275" ,
B_AusSchleuse := "BG3274" ,
B_Stau_raus := "DVPtoEP_Sensoren".Stau_BG3274.Stat.B_Akt ,
Start_Ok := #Bereich_3361.Dyn.Sk.Bereich_ok ,
Antrieb_Schleuse_aktiv := "MA0151" ,
Antrieb_plus_aktiv := "MA0060" ,
Schleuse_geöffnet := "MB3275" ,
RestZeit_Bereich_plus := #Bereich_3361.Dyn.Restzeit ,
Y_Schleuse_Auf := "DVPtoEP_Zylinder".Schleuse_3275.Stat.Ast ,
Error := %DB708.DBW570 ,
Antrieb_Schleuse_vor := "DVPtoEP_Antriebe".MA0151.Stat.A_vor ,
Antrieb_Schleuse_start := "DVPtoEP_Antriebe".MA0151.Stat.A_start ,
Antrieb_Schleuse_stop := "DVPtoEP_Antriebe".MA0151.Stat.Stop_vor ,
Antrieb_Schleuse_PS := "DVPtoEP_Antriebe".MA0151.Stat.A_PS ,
Antrieb_plus_vor := #Bereich_3361.Dyn.Status.Trolley_kommt_in_Bereich ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Störungen anzeigen UZ7105
U #ErrAnz;
R #ErrAnz;
S "DOutbound_Bereich".A01_UZ7105.StOk_blinken;
S "DOutbound_Bereich".A01_UC071.StOk_blinken;
S "DOutbound_Bereich".A01_UH07.StOk_blinken;
NETWORK
TITLE = Störungen quittieren UZ7105/0701
U "DOutbound_Bereich".A01_UZ7105.StOk_aktiv;
O "DOutbound_Bereich".A01_UZ0701.StOk_aktiv;
O "DOutbound_Bereich".A01_UC071.StOk_aktiv;
O "DOutbound_Bereich".A01_UH07.StOk_aktiv;
= #ErrQuit;
NETWORK
TITLE = Bereich 3361
U "BG3274";
U "MB3275";
= #B_vor_Schleuse;
CALL #Bereich_3361
( Bereichs_Nr := 3361 ,
ErrQuit := #ErrQuit ,
B_BereichsAnfang := #B_vor_Schleuse ,
B_BereichsEnde := "BG3361" ,
B_Zähl := "BG3362" ,
B_Stau_raus := "DVPtoEP_Sensoren".Stau_BG3362.Stat.B_Akt ,
Start_Ok := 1 ,
Antrieb_Bereich_aktiv := "MA0060" ,
Antrieb_plus_aktiv := "MA0061" ,
Antrieb_Bereich_vor := "DVPtoEP_Antriebe".MA0060.Stat.A_vor ,
Antrieb_Bereich_stop := "DVPtoEP_Antriebe".MA0060.Stat.Stop_vor ,
Error := %DB708.DBW454 ,
Antrieb_Bereich_start := "DVPtoEP_Antriebe".MA0060.Stat.A_start ,
Antrieb_plus_vor := "DVPtoEP_Antriebe".MA0061.Stat.A_vor ,
Antrieb_plus_start := "DVPtoEP_Antriebe".MA0061.Stat.A_start ,
Antrieb_minus_vor := "DVPtoEP_Antriebe".MA0151.Stat.A_vor ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Störungen anzeigen UZ7105/0701
U #ErrAnz;
R #ErrAnz;
S "DOutbound_Bereich".A01_UZ7105.StOk_blinken;
S "DOutbound_Bereich".A01_UZ0701.StOk_blinken;
S "DOutbound_Bereich".A01_UC071.StOk_blinken;
S "DOutbound_Bereich".A01_UH07.StOk_blinken;
NETWORK
TITLE = Störungen quittieren UZ0701
U "DOutbound_Bereich".A01_UZ0701.StOk_aktiv;
O "DOutbound_Bereich".A01_UH07.StOk_aktiv;
= #ErrQuit;
NETWORK
TITLE = Schleuse 3363
CALL #Schleuse_3363
( Schleusen_Nr := 3363 ,
ErrQuit := #ErrQuit ,
B_VorSchleuse := "BG3362" ,
B_InSchleuse := "BG3363" ,
B_AusSchleuse := "BG3364" ,
B_Stau_raus := "DVPtoEP_Sensoren".Stau_BG3364.Stat.B_Akt ,
Start_Ok := 1 ,
Antrieb_Schleuse_aktiv := "MA0061" ,
Antrieb_plus_aktiv := "MA0061" ,
Schleuse_geöffnet := "MB3363" ,
Y_Schleuse_Auf := "DVPtoEP_Zylinder".Schleuse_3363.Stat.Ast ,
Error := %DB708.DBW528 ,
Antrieb_Schleuse_vor := "DVPtoEP_Antriebe".MA0061.Stat.A_vor ,
Antrieb_Schleuse_start := "DVPtoEP_Antriebe".MA0061.Stat.A_start ,
Antrieb_Schleuse_stop := "DVPtoEP_Antriebe".MA0061.Stat.Stop_vor ,
Antrieb_Schleuse_PS := "DVPtoEP_Antriebe".MA0061.Stat.A_PS ,
Antrieb_plus_vor := , //Identisch
hStOk := #ErrAnz
);
--- NW 3: Schleuse 3247 ---
CALL FB "None" , (Schleusen_Nr:=3247, ErrQuit:=ErrQuit, B_VorSchleuse:="BG3246", B_InSchleuse:="BG3247", B_Zähl:="BG3251", B_Stau_raus:="DVPtoEP_Sensoren".Stau_BG3251.Stat.B_Akt, Start_Ok:=1, Antrieb_Schleuse_aktiv:="MA0151", Antrieb_plus_aktiv:="MA0151", Schleuse_geöffnet:="MB3247", RestZeit_Bereich_plus:=?, Y_Schleuse_Auf:="DVPtoEP_Zylinder".Schleuse_3247.Stat.Ast, Error:=DB708.DBW520, Antrieb_Schleuse_vor:="DVPtoEP_Antriebe".MA0151.Stat.A_vor, Antrieb_Schleuse_start:="DVPtoEP_Antriebe".MA0151.Stat.A_start, Antrieb_Schleuse_stop:="DVPtoEP_Antriebe".MA0151.Stat.Stop_vor, Antrieb_Schleuse_PS:="DVPtoEP_Antriebe".MA0151.Stat.A_PS, Antrieb_plus_vor:=?, Antrieb_plus_start:=?, hStOk:=ErrAnz) // Identisch
NETWORK
TITLE = Schleuse 3366 (vor BST 1)
UN "7_HMI_Err_UH07_OB".System.Gesamt_Feueralarm_Halle3;
UN "7_HMI_Err_UH07_OB".System.Gesamt_Feueralarm_Halle4;
UN "7_HMI_Err_UH07_OB".System.BST1_Feueralarm;
UN "7_HMI_Err_UH07_OB".System.BST1_Geschlossen;
UN "7_HMI_Err_UH07_OB".System.BST1_Störung;
U #Bereich_4441.Dyn.Sk.Bereich_ok;
= #Fahren_Ok;
CALL #Schleuse_3366
( Schleusen_Nr := 3366 ,
ErrQuit := #ErrQuit ,
B_VorSchleuse := "BG3364" ,
B_InSchleuse := "BG3366" ,
B_AusSchleuse := "BG4440" ,
B_Stau_raus := "DVPtoEP_Sensoren".Stau_BG4440.Stat.B_Akt ,
Start_Ok := #Fahren_Ok ,
Antrieb_Schleuse_aktiv := "MA0061" ,
Antrieb_plus_aktiv := "MA0320" ,
Schleuse_geöffnet := "MB3366" ,
RestZeit_Bereich_plus := #Bereich_4441.Dyn.Restzeit ,
Y_Schleuse_Auf := "DVPtoEP_Zylinder".Schleuse_3366.Stat.Ast ,
Error := %DB708.DBW530 ,
Antrieb_Schleuse_vor := "DVPtoEP_Antriebe".MA0061.Stat.A_vor ,
Antrieb_Schleuse_start := "DVPtoEP_Antriebe".MA0061.Stat.A_start ,
Antrieb_Schleuse_stop := "DVPtoEP_Antriebe".MA0061.Stat.Stop_vor ,
Antrieb_Schleuse_PS := "DVPtoEP_Antriebe".MA0061.Stat.A_PS ,
Antrieb_plus_vor := #Bereich_4441.Dyn.Status.Trolley_kommt_in_Bereich ,
hStOk := #ErrAnz
);
--- NW 4: Schleuse 3275 ---
CALL FB "None" , (Schleusen_Nr:=3275, ErrQuit:=ErrQuit, B_VorSchleuse:="BG3251", B_InSchleuse:="BG3275", B_AusSchleuse:="BG3274", B_Stau_raus:="DVPtoEP_Sensoren".Stau_BG3274.Stat.B_Akt, Start_Ok:=Bereich_3361.Dyn.Sk.Bereich_ok, Antrieb_Schleuse_aktiv:="MA0151", Antrieb_plus_aktiv:="MA0060", Schleuse_geöffnet:="MB3275", RestZeit_Bereich_plus:=Bereich_3361.Dyn.Restzeit, Y_Schleuse_Auf:="DVPtoEP_Zylinder".Schleuse_3275.Stat.Ast, Error:=DB708.DBW570, Antrieb_Schleuse_vor:="DVPtoEP_Antriebe".MA0151.Stat.A_vor, Antrieb_Schleuse_start:="DVPtoEP_Antriebe".MA0151.Stat.A_start, Antrieb_Schleuse_stop:="DVPtoEP_Antriebe".MA0151.Stat.Stop_vor, Antrieb_Schleuse_PS:="DVPtoEP_Antriebe".MA0151.Stat.A_PS, Antrieb_plus_vor:=Bereich_3361.Dyn.Status.Trolley_kommt_in_Bereich, Antrieb_plus_start:=?, hStOk:=ErrAnz)
NETWORK
TITLE = Störungen anzeigen UZ0701
U #ErrAnz;
R #ErrAnz;
S "DOutbound_Bereich".A01_UZ0701.StOk_blinken;
S "DOutbound_Bereich".A01_UH07.StOk_blinken;
NETWORK
TITLE = Störungen quittieren UZ7401
U "DOutbound_Bereich".A01_UZ7401.StOk_aktiv;
O "DOutbound_Bereich".A01_UC074.StOk_aktiv;
O "DOutbound_Bereich".A01_UH07.StOk_aktiv;
= #ErrQuit;
--- NW 5: Störungen anzeigen UZ7105 ---
A ErrAnz
R ErrAnz
S "DOutbound_Bereich".A01_UZ7105.StOk_blinken
S "DOutbound_Bereich".A01_UC071.StOk_blinken
S "DOutbound_Bereich".A01_UH07.StOk_blinken
NETWORK
TITLE = Bereich 4441 (hinter BST 1)
//Falls Trolley hinter BST noch gespeichert
U "DVPtoEP_Sensoren".Stau_BG4440.Stat.B_Akt;
S "DVPtoEP_Antriebe".MA0320.Stat.A_start;
--- NW 6: Störungen quittieren UZ7105/0701 ---
A "DOutbound_Bereich".A01_UZ7105.StOk_aktiv
O "DOutbound_Bereich".A01_UZ0701.StOk_aktiv
O "DOutbound_Bereich".A01_UC071.StOk_aktiv
O "DOutbound_Bereich".A01_UH07.StOk_aktiv
= ErrQuit
U "BG4440";
U "MB3366";
= #B_vor_Schleuse;
CALL #Bereich_4441
( Bereichs_Nr := 4441 ,
ErrQuit := #ErrQuit ,
B_BereichsAnfang := #B_vor_Schleuse ,
B_BereichsEnde := "BG4441" ,
B_Zähl := "BG4442" ,
B_Stau_raus := "DVPtoEP_Sensoren".Stau_BG4442.Stat.B_Akt ,
Start_Ok := 1 ,
Antrieb_Bereich_aktiv := "MA0320" ,
Antrieb_plus_aktiv := "MA0321" ,
Antrieb_Bereich_vor := "DVPtoEP_Antriebe".MA0320.Stat.A_vor ,
Antrieb_Bereich_stop := "DVPtoEP_Antriebe".MA0320.Stat.Stop_vor ,
Error := %DB708.DBW474 ,
Antrieb_Bereich_start := "DVPtoEP_Antriebe".MA0320.Stat.A_start ,
Antrieb_plus_vor := "DVPtoEP_Antriebe".MA0321.Stat.A_vor ,
Antrieb_plus_start := "DVPtoEP_Antriebe".MA0321.Stat.A_start ,
hStOk := #ErrAnz
);
--- NW 7: Bereich 3361 ---
A "BG3274"
A "MB3275"
= B_vor_Schleuse
NETWORK
TITLE = Schleuse 4443
CALL #Schleuse_4443
( Schleusen_Nr := 4443 ,
ErrQuit := #ErrQuit ,
B_VorSchleuse := "BG4442" ,
B_InSchleuse := "BG4443" ,
B_Zähl := , //über Weiche
B_Stau_raus := "DVPtoEP_Sensoren".Stau_BG4445.Stat.B_Akt ,
Start_Ok := 1 ,
Antrieb_Schleuse_aktiv := "MA0321" ,
Antrieb_plus_aktiv := , //über Weiche
Schleuse_geöffnet := "MB4443" ,
Y_Schleuse_Auf := "DVPtoEP_Zylinder".Schleuse_4443.Stat.Ast ,
Error := %DB708.DBW554 ,
Antrieb_Schleuse_vor := "DVPtoEP_Antriebe".MA0321.Stat.A_vor ,
Antrieb_Schleuse_start := "DVPtoEP_Antriebe".MA0321.Stat.A_start ,
Antrieb_Schleuse_stop := "DVPtoEP_Antriebe".MA0321.Stat.Stop_vor ,
Antrieb_Schleuse_PS := "DVPtoEP_Antriebe".MA0321.Stat.A_PS ,
Antrieb_plus_vor := , //über Weiche
hStOk := #ErrAnz
);
CALL FB "None" , (Bereichs_Nr:=3361, ErrQuit:=ErrQuit, B_BereichsAnfang:=B_vor_Schleuse, B_BereichsEnde:="BG3361", B_Zähl:="BG3362", B_Stau_raus:="DVPtoEP_Sensoren".Stau_BG3362.Stat.B_Akt, Start_Ok:=1, Antrieb_Bereich_aktiv:="MA0060", Antrieb_plus_aktiv:="MA0061", RestZeit_Bereich_plus:=?, Antrieb_Bereich_vor:="DVPtoEP_Antriebe".MA0060.Stat.A_vor, Antrieb_Bereich_stop:="DVPtoEP_Antriebe".MA0060.Stat.Stop_vor, Error:=DB708.DBW454, Antrieb_Bereich_start:="DVPtoEP_Antriebe".MA0060.Stat.A_start, Antrieb_plus_vor:="DVPtoEP_Antriebe".MA0061.Stat.A_vor, Antrieb_plus_start:="DVPtoEP_Antriebe".MA0061.Stat.A_start, Antrieb_minus_vor:="DVPtoEP_Antriebe".MA0151.Stat.A_vor, hStOk:=ErrAnz)
NETWORK
TITLE = Weiche 4445
U "MA0321";
U "MA0332";
= #Antrieb_aktiv;
SET;
R #Antrieb_vor;
R #Antrieb_stop;
--- NW 8: Störungen anzeigen UZ7105/0701 ---
A ErrAnz
R ErrAnz
S "DOutbound_Bereich".A01_UZ7105.StOk_blinken
S "DOutbound_Bereich".A01_UZ0701.StOk_blinken
S "DOutbound_Bereich".A01_UC071.StOk_blinken
S "DOutbound_Bereich".A01_UH07.StOk_blinken
CALL #Weiche_4445
( Weichen_Nr := 4445 ,
ErrQuit := #ErrQuit ,
Fahren_Ok := 1 ,
B_Ziel_gerade := "BG4447" ,
B_Ziel_abzweig := "BG4461" ,
Antrieb_Weiche_aktiv := #Antrieb_aktiv ,
Antrieb_Gerade_aktiv := "MA0322" ,
Antrieb_Abzweig_aktiv := "MA0331" ,
Weiche_ist_AST := "MB4445" ,
Y_Weiche_abzweig := "DVPtoEP_Zylinder".Weiche_4445.Stat.Ast ,
Error := %DB708.DBW556 ,
Antrieb_Weiche_vor := #Antrieb_vor , //da 2 Antriebe notwendig
Antrieb_Weiche_stop := #Antrieb_stop ,
Antrieb_Weiche_gerade_vor := "DVPtoEP_Antriebe".MA0322.Stat.A_vor ,
Antrieb_Weiche_gerade_stop := "DVPtoEP_Antriebe".MA0322.Stat.Stop_vor ,
Antrieb_Weiche_abzweig_vor := "DEPtoLP_Antriebe".MA0331.Stat.A_vor ,
Antrieb_Weiche_abzweig_stop := "DEPtoLP_Antriebe".MA0331.Stat.Stop_vor ,
hStOk := #ErrAnz
);
U #Antrieb_vor;
S "DVPtoEP_Antriebe".MA0321.Stat.A_vor;
S "DEPtoLP_Antriebe".MA0332.Stat.A_vor;
S "DVPtoEP_Antriebe".MA0321.Stat.A_start;
S "DEPtoLP_Antriebe".MA0332.Stat.A_start;
--- NW 9: Störungen quittieren UZ0701 ---
A "DOutbound_Bereich".A01_UZ0701.StOk_aktiv
O "DOutbound_Bereich".A01_UH07.StOk_aktiv
= ErrQuit
U #Antrieb_stop;
S "DVPtoEP_Antriebe".MA0321.Stat.Stop_vor;
U #Antrieb_stop;
U "MB4445";//Nur bei Abzweig
S "DEPtoLP_Antriebe".MA0332.Stat.Stop_vor;
--- NW 10: Schleuse 3363 ---
CALL FB "None" , (Schleusen_Nr:=3363, ErrQuit:=ErrQuit, B_VorSchleuse:="BG3362", B_InSchleuse:="BG3363", B_AusSchleuse:="BG3364", B_Stau_raus:="DVPtoEP_Sensoren".Stau_BG3364.Stat.B_Akt, Start_Ok:=1, Antrieb_Schleuse_aktiv:="MA0061", Antrieb_plus_aktiv:="MA0061", Schleuse_geöffnet:="MB3363", RestZeit_Bereich_plus:=?, Y_Schleuse_Auf:="DVPtoEP_Zylinder".Schleuse_3363.Stat.Ast, Error:=DB708.DBW528, Antrieb_Schleuse_vor:="DVPtoEP_Antriebe".MA0061.Stat.A_vor, Antrieb_Schleuse_start:="DVPtoEP_Antriebe".MA0061.Stat.A_start, Antrieb_Schleuse_stop:="DVPtoEP_Antriebe".MA0061.Stat.Stop_vor, Antrieb_Schleuse_PS:="DVPtoEP_Antriebe".MA0061.Stat.A_PS, Antrieb_plus_vor:=?, Antrieb_plus_start:=?, hStOk:=ErrAnz) // Identisch
//Damit Partner fahren kann:
U #Weiche_4445.Dyn.Status.Weiche_frei;
R "DVPtoEP_Zylinder".Weiche_4445.Stat.Ast;
NETWORK
TITLE = Schleuse 4450
SET;
R #Antrieb_vor;
CALL #Schleuse_4450
( Schleusen_Nr := 4450 ,
ErrQuit := #ErrQuit ,
B_VorSchleuse := "BG4447" ,
B_InSchleuse := "BG4450" ,
B_Zähl := "BG4451" ,
B_Stau_raus := "DVPtoEP_Sensoren".Stau_BG4451.Stat.B_Akt ,
Start_Ok := 1 ,
Antrieb_Schleuse_aktiv := "MA0322" ,
Antrieb_plus_aktiv := "MA0323" ,
Schleuse_geöffnet := "MB4450" ,
RestZeit_Bereich_plus := #Bereich_4454.Dyn.Restzeit ,
Y_Schleuse_Auf := "DVPtoEP_Zylinder".Schleuse_4450.Stat.Ast ,
Error := %DB708.DBW558 ,
Antrieb_Schleuse_vor := "DVPtoEP_Antriebe".MA0322.Stat.A_vor ,
Antrieb_Schleuse_start := "DVPtoEP_Antriebe".MA0322.Stat.A_start ,
Antrieb_Schleuse_stop := "DVPtoEP_Antriebe".MA0322.Stat.Stop_vor ,
Antrieb_Schleuse_PS := "DVPtoEP_Antriebe".MA0322.Stat.A_PS ,
Antrieb_plus_vor := #Antrieb_vor ,
hStOk := #ErrAnz
);
--- NW 11: Schleuse 3366 (vor BST 1) ---
AN "7_HMI_Err_UH07_OB".System.Gesamt_Feueralarm_Halle3
AN "7_HMI_Err_UH07_OB".System.Gesamt_Feueralarm_Halle4
AN "7_HMI_Err_UH07_OB".System.BST1_Feueralarm
AN "7_HMI_Err_UH07_OB".System.BST1_Geschlossen
AN "7_HMI_Err_UH07_OB".System."BST1_Störung"
A Bereich_4441.Dyn.Sk.Bereich_ok
= Fahren_Ok
U #Antrieb_vor;
S "DVPtoEP_Antriebe".MA0322.Stat.A_vor;
S #Bereich_4454.Dyn.Status.Trolley_kommt_in_Bereich;
CALL FB "None" , (Schleusen_Nr:=3366, ErrQuit:=ErrQuit, B_VorSchleuse:="BG3364", B_InSchleuse:="BG3366", B_AusSchleuse:="BG4440", B_Stau_raus:="DVPtoEP_Sensoren".Stau_BG4440.Stat.B_Akt, Start_Ok:=Fahren_Ok, Antrieb_Schleuse_aktiv:="MA0061", Antrieb_plus_aktiv:="MA0320", Schleuse_geöffnet:="MB3366", RestZeit_Bereich_plus:=Bereich_4441.Dyn.Restzeit, Y_Schleuse_Auf:="DVPtoEP_Zylinder".Schleuse_3366.Stat.Ast, Error:=DB708.DBW530, Antrieb_Schleuse_vor:="DVPtoEP_Antriebe".MA0061.Stat.A_vor, Antrieb_Schleuse_start:="DVPtoEP_Antriebe".MA0061.Stat.A_start, Antrieb_Schleuse_stop:="DVPtoEP_Antriebe".MA0061.Stat.Stop_vor, Antrieb_Schleuse_PS:="DVPtoEP_Antriebe".MA0061.Stat.A_PS, Antrieb_plus_vor:=Bereich_4441.Dyn.Status.Trolley_kommt_in_Bereich, Antrieb_plus_start:=?, hStOk:=ErrAnz)
NETWORK
TITLE = Störungen anzeigen UZ7401
U #ErrAnz;
R #ErrAnz;
S "DOutbound_Bereich".A01_UZ7401.StOk_blinken;
S "DOutbound_Bereich".A01_UC074.StOk_blinken;
S "DOutbound_Bereich".A01_UH07.StOk_blinken;
NETWORK
TITLE = Störungen quittieren UZ7401/7402
U "DOutbound_Bereich".A01_UZ7401.StOk_aktiv;
O "DOutbound_Bereich".A01_UZ7402.StOk_aktiv;
O "DOutbound_Bereich".A01_UC074.StOk_aktiv;
O "DOutbound_Bereich".A01_UH07.StOk_aktiv;
= #ErrQuit;
--- NW 12: Störungen anzeigen UZ0701 ---
A ErrAnz
R ErrAnz
S "DOutbound_Bereich".A01_UZ0701.StOk_blinken
S "DOutbound_Bereich".A01_UH07.StOk_blinken
NETWORK
TITLE = Bereich 4454
U "BG4453";
U "MB4450";
= #B_vor_Schleuse;
U "DVPtoEP_Sensoren".Stau_BG4500.Stat.B_Akt;
O "DVPtoEP_Sensoren".Stau_BG4530.Stat.B_Akt;
O "DVPtoEP_Sensoren".Stau_BG4502.Stat.B_Akt;
= #Stau_raus;
--- NW 13: Störungen quittieren UZ7401 ---
A "DOutbound_Bereich".A01_UZ7401.StOk_aktiv
O "DOutbound_Bereich".A01_UC074.StOk_aktiv
O "DOutbound_Bereich".A01_UH07.StOk_aktiv
= ErrQuit
CALL #Bereich_4454
( Bereichs_Nr := 4454 ,
ErrQuit := #ErrQuit ,
B_BereichsAnfang := #B_vor_Schleuse ,
B_BereichsEnde := "BG4454" ,
B_Zähl := "BG4500" ,
B_Stau_raus := #Stau_raus ,
Start_Ok := 1 ,
Antrieb_Bereich_aktiv := "MA0323" ,
Antrieb_plus_aktiv := "MA0324" ,
Antrieb_Bereich_vor := "DVPtoEP_Antriebe".MA0323.Stat.A_vor ,
Antrieb_Bereich_stop := "DVPtoEP_Antriebe".MA0323.Stat.Stop_vor ,
Error := %DB708.DBW476 ,
Antrieb_Bereich_start := "DVPtoEP_Antriebe".MA0323.Stat.A_start ,
Antrieb_plus_vor := "DVPtoEP_Antriebe".MA0324.Stat.A_vor ,
Antrieb_plus_start := "DVPtoEP_Antriebe".MA0324.Stat.A_start ,
Antrieb_minus_vor := "DVPtoEP_Antriebe".MA0322.Stat.A_vor ,
hStOk := #ErrAnz
);
NETWORK
TITLE = MA0324 / Übergang 4501
U "BG4500";
O "BG4530";
= #B_vor_Schleuse;
--- NW 14: Bereich 4441 (hinter BST 1) ---
// Falls Trolley hinter BST noch gespeichert
A "DVPtoEP_Sensoren".Stau_BG4440.Stat.B_Akt
S "DVPtoEP_Antriebe".MA0320.Stat.A_start
CALL #Übergang_4501
( ErrQuit := #ErrQuit ,
B_Anfang := #B_vor_Schleuse ,
B_Am_Übergang := "BG4501" ,
B_Stau_Antrieb_plus := "BG4502" ,
Antrieb_aktiv := "MA0324" ,
Antrieb_plus_aktiv := "MA0325" ,
Antrieb_vor := "DVPtoEP_Antriebe".MA0324.Stat.A_vor ,
Antrieb_start := "DVPtoEP_Antriebe".MA0324.Stat.A_start ,
Antrieb_stop := "DVPtoEP_Antriebe".MA0324.Stat.A_PS ,
Antrieb_plus_vor := "DVPtoEP_Antriebe".MA0325.Stat.A_vor ,
Antrieb_plus_start := "DVPtoEP_Antriebe".MA0325.Stat.A_start
);
A "BG4440"
A "MB3366"
= B_vor_Schleuse
NETWORK
TITLE = Störungen anzeigen UZ7401/7402
U #ErrAnz;
R #ErrAnz;
S "DOutbound_Bereich".A01_UZ7401.StOk_blinken;
S "DOutbound_Bereich".A01_UZ7402.StOk_blinken;
S "DOutbound_Bereich".A01_UC074.StOk_blinken;
S "DOutbound_Bereich".A01_UH07.StOk_blinken;
CALL FB "None" , (Bereichs_Nr:=4441, ErrQuit:=ErrQuit, B_BereichsAnfang:=B_vor_Schleuse, B_BereichsEnde:="BG4441", B_Zähl:="BG4442", B_Stau_raus:="DVPtoEP_Sensoren".Stau_BG4442.Stat.B_Akt, Start_Ok:=1, Antrieb_Bereich_aktiv:="MA0320", Antrieb_plus_aktiv:="MA0321", RestZeit_Bereich_plus:=?, Antrieb_Bereich_vor:="DVPtoEP_Antriebe".MA0320.Stat.A_vor, Antrieb_Bereich_stop:="DVPtoEP_Antriebe".MA0320.Stat.Stop_vor, Error:=DB708.DBW474, Antrieb_Bereich_start:="DVPtoEP_Antriebe".MA0320.Stat.A_start, Antrieb_plus_vor:="DVPtoEP_Antriebe".MA0321.Stat.A_vor, Antrieb_plus_start:="DVPtoEP_Antriebe".MA0321.Stat.A_start, Antrieb_minus_vor:=?, hStOk:=ErrAnz)
NETWORK
TITLE = Ende
BE;
--- NW 15: Schleuse 4443 ---
CALL FB "None" , (Schleusen_Nr:=4443, ErrQuit:=ErrQuit, B_VorSchleuse:="BG4442", B_InSchleuse:="BG4443", B_Zähl:=?, B_Stau_raus:="DVPtoEP_Sensoren".Stau_BG4445.Stat.B_Akt, Start_Ok:=1, Antrieb_Schleuse_aktiv:="MA0321", Antrieb_plus_aktiv:=?, Schleuse_geöffnet:="MB4443", RestZeit_Bereich_plus:=?, Y_Schleuse_Auf:="DVPtoEP_Zylinder".Schleuse_4443.Stat.Ast, Error:=DB708.DBW554, Antrieb_Schleuse_vor:="DVPtoEP_Antriebe".MA0321.Stat.A_vor, Antrieb_Schleuse_start:="DVPtoEP_Antriebe".MA0321.Stat.A_start, Antrieb_Schleuse_stop:="DVPtoEP_Antriebe".MA0321.Stat.Stop_vor, Antrieb_Schleuse_PS:="DVPtoEP_Antriebe".MA0321.Stat.A_PS, Antrieb_plus_vor:=?, Antrieb_plus_start:=?, hStOk:=ErrAnz) // über Weiche | über Weiche | über Weiche
--- NW 16: Weiche 4445 ---
A "MA0321"
A "MA0332"
= Antrieb_aktiv
SET
R Antrieb_vor
R Antrieb_stop
CALL FB "None" , (Weichen_Nr:=4445, ErrQuit:=ErrQuit, Fahren_Ok:=1, B_Ziel_gerade:="BG4447", B_Ziel_abzweig:="BG4461", Antrieb_Weiche_aktiv:=Antrieb_aktiv, Antrieb_Gerade_aktiv:="MA0322", Antrieb_Abzweig_aktiv:="MA0331", Weiche_ist_AST:="MB4445", Y_Weiche_gerade:=?, Y_Weiche_abzweig:="DVPtoEP_Zylinder".Weiche_4445.Stat.Ast, Error:=DB708.DBW556, Antrieb_Weiche_vor:=Antrieb_vor, Antrieb_Weiche_stop:=Antrieb_stop, Antrieb_Weiche_gerade_vor:="DVPtoEP_Antriebe".MA0322.Stat.A_vor, Antrieb_Weiche_gerade_stop:="DVPtoEP_Antriebe".MA0322.Stat.Stop_vor, Antrieb_Weiche_abzweig_vor:="DEPtoLP_Antriebe".MA0331.Stat.A_vor, Antrieb_Weiche_abzweig_stop:="DEPtoLP_Antriebe".MA0331.Stat.Stop_vor, hStOk:=ErrAnz) // da 2 Antriebe notwendig
A Antrieb_vor
S "DVPtoEP_Antriebe".MA0321.Stat.A_vor
S "DEPtoLP_Antriebe".MA0332.Stat.A_vor
S "DVPtoEP_Antriebe".MA0321.Stat.A_start
S "DEPtoLP_Antriebe".MA0332.Stat.A_start
A Antrieb_stop
S "DVPtoEP_Antriebe".MA0321.Stat.Stop_vor
A Antrieb_stop
A "MB4445" // Nur bei Abzweig
S "DEPtoLP_Antriebe".MA0332.Stat.Stop_vor
// Damit Partner fahren kann:
A Weiche_4445.Dyn.Status.Weiche_frei
R "DVPtoEP_Zylinder".Weiche_4445.Stat.Ast
--- NW 17: Schleuse 4450 ---
SET
R Antrieb_vor
CALL FB "None" , (Schleusen_Nr:=4450, ErrQuit:=ErrQuit, B_VorSchleuse:="BG4447", B_InSchleuse:="BG4450", B_Zähl:="BG4451", B_Stau_raus:="DVPtoEP_Sensoren".Stau_BG4451.Stat.B_Akt, Start_Ok:=1, Antrieb_Schleuse_aktiv:="MA0322", Antrieb_plus_aktiv:="MA0323", Schleuse_geöffnet:="MB4450", RestZeit_Bereich_plus:=Bereich_4454.Dyn.Restzeit, Y_Schleuse_Auf:="DVPtoEP_Zylinder".Schleuse_4450.Stat.Ast, Error:=DB708.DBW558, Antrieb_Schleuse_vor:="DVPtoEP_Antriebe".MA0322.Stat.A_vor, Antrieb_Schleuse_start:="DVPtoEP_Antriebe".MA0322.Stat.A_start, Antrieb_Schleuse_stop:="DVPtoEP_Antriebe".MA0322.Stat.Stop_vor, Antrieb_Schleuse_PS:="DVPtoEP_Antriebe".MA0322.Stat.A_PS, Antrieb_plus_vor:=Antrieb_vor, Antrieb_plus_start:=?, hStOk:=ErrAnz)
A Antrieb_vor
S "DVPtoEP_Antriebe".MA0322.Stat.A_vor
S Bereich_4454.Dyn.Status.Trolley_kommt_in_Bereich
--- NW 18: Störungen anzeigen UZ7401 ---
A ErrAnz
R ErrAnz
S "DOutbound_Bereich".A01_UZ7401.StOk_blinken
S "DOutbound_Bereich".A01_UC074.StOk_blinken
S "DOutbound_Bereich".A01_UH07.StOk_blinken
--- NW 19: Störungen quittieren UZ7401/7402 ---
A "DOutbound_Bereich".A01_UZ7401.StOk_aktiv
O "DOutbound_Bereich".A01_UZ7402.StOk_aktiv
O "DOutbound_Bereich".A01_UC074.StOk_aktiv
O "DOutbound_Bereich".A01_UH07.StOk_aktiv
= ErrQuit
--- NW 20: Bereich 4454 ---
A "BG4453"
A "MB4450"
= B_vor_Schleuse
A "DVPtoEP_Sensoren".Stau_BG4500.Stat.B_Akt
O "DVPtoEP_Sensoren".Stau_BG4530.Stat.B_Akt
O "DVPtoEP_Sensoren".Stau_BG4502.Stat.B_Akt
= Stau_raus
CALL FB "None" , (Bereichs_Nr:=4454, ErrQuit:=ErrQuit, B_BereichsAnfang:=B_vor_Schleuse, B_BereichsEnde:="BG4454", B_Zähl:="BG4500", B_Stau_raus:=Stau_raus, Start_Ok:=1, Antrieb_Bereich_aktiv:="MA0323", Antrieb_plus_aktiv:="MA0324", RestZeit_Bereich_plus:=?, Antrieb_Bereich_vor:="DVPtoEP_Antriebe".MA0323.Stat.A_vor, Antrieb_Bereich_stop:="DVPtoEP_Antriebe".MA0323.Stat.Stop_vor, Error:=DB708.DBW476, Antrieb_Bereich_start:="DVPtoEP_Antriebe".MA0323.Stat.A_start, Antrieb_plus_vor:="DVPtoEP_Antriebe".MA0324.Stat.A_vor, Antrieb_plus_start:="DVPtoEP_Antriebe".MA0324.Stat.A_start, Antrieb_minus_vor:="DVPtoEP_Antriebe".MA0322.Stat.A_vor, hStOk:=ErrAnz)
--- NW 21: MA0324 / Übergang 4501 ---
A "BG4500"
O "BG4530"
= B_vor_Schleuse
CALL FB "None" , (ErrQuit:=ErrQuit, B_Anfang:=B_vor_Schleuse, B_Am_Übergang:="BG4501", B_Stau_Antrieb_plus:="BG4502", Antrieb_aktiv:="MA0324", Antrieb_plus_aktiv:="MA0325", Antrieb_vor:="DVPtoEP_Antriebe".MA0324.Stat.A_vor, Antrieb_start:="DVPtoEP_Antriebe".MA0324.Stat.A_start, Antrieb_stop:="DVPtoEP_Antriebe".MA0324.Stat.A_PS, Antrieb_plus_vor:="DVPtoEP_Antriebe".MA0325.Stat.A_vor, Antrieb_plus_start:="DVPtoEP_Antriebe".MA0325.Stat.A_start)
--- NW 22: Störungen anzeigen UZ7401/7402 ---
A ErrAnz
R ErrAnz
S "DOutbound_Bereich".A01_UZ7401.StOk_blinken
S "DOutbound_Bereich".A01_UZ7402.StOk_blinken
S "DOutbound_Bereich".A01_UC074.StOk_blinken
S "DOutbound_Bereich".A01_UH07.StOk_blinken
--- NW 23: Ende ---
BE
END_FUNCTION_BLOCK
@@ -1,120 +1,123 @@
=== FC 2181: VPtoEP_Ziel_FC [STL] ===
INTERFACE:
Input:
Output:
InOut:
Temp:
Ziel_hex : Word
Ziel_int : Int
Zielebene : Word
Error : Byte
Position : Int
Lager_DB : Int
Lager_DW : Int
AR1Zeiger : DWord // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
AR1Start : DInt // Startwert mit Offset 0
SSDW : Int
EndZiel : Word
Variante : Int
AbrufID : DInt
Fahrlisten_TrolleyID : DInt
Fahrlisten_AbrufID : DInt
Fahrlisten_Lager : Int
Trolley_unbekannt : Bool // Trolley ist nicht in DL
Express_Abruf : Bool
Constant:
Return:
Ret_Val : Void
--- NW 1: Rückmeldung ---
SET // Rückmeldungen erst mal resetten
R "M180.6" // Weiterfahrt von Ziel-FC erlaubt
FUNCTION "VPtoEP_Ziel_FC" : Void
TITLE = Ziel-FC: VP>EP
{ S7_Optimized_Access := 'FALSE' ; S7_Pass_Registers := 'TRUE' }
AUTHOR : AE
VERSION : 0.1
VAR_TEMP
Ziel_hex : Word;
Ziel_int : Int;
Zielebene : Word;
Error : Byte;
Position : Int;
Lager_DB : Int;
Lager_DW : Int;
AR1Zeiger : DWord; // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
AR1Start : DInt; // Startwert mit Offset 0
SSDW : Int;
EndZiel : Word;
Variante : Int;
AbrufID : DInt;
Fahrlisten_TrolleyID : DInt;
Fahrlisten_AbrufID : DInt;
Fahrlisten_Lager : Int;
Trolley_unbekannt : Bool; // Trolley ist nicht in DL
Express_Abruf : Bool;
END_VAR
--- NW 2: Bereich 3361: Weiterfahren erlaubt ? (Ende MA0060) ---
L "MW190"
L 3361 // Aufruf von Schleuse 3361 ?
<>I // Nein!
JC X3361E
BEGIN
NETWORK
TITLE = Rückmeldung
SET;//Rückmeldungen erst mal resetten
R "M180.6";//Weiterfahrt von Ziel-FC erlaubt
AN "DVPtoEP_Sensoren".Stau_BG3362.Stat.B_Akt
S "M180.6" // Weiterfahrt ist erlaubt
NETWORK
TITLE = Bereich 3361: Weiterfahren erlaubt ? (Ende MA0060)
L "MW190";
L 3361 ;//Aufruf von Schleuse 3361 ?
<>I;//Nein!
SPB X3361E;
BEU
UN "DVPtoEP_Sensoren".Stau_BG3362.Stat.B_Akt;
S "M180.6" ;//Weiterfahrt ist erlaubt
X3361E: NOP 0
BEA;
X3361E: NOP 0;
--- NW 3: Schleuse 3366: (BST 1) ---
L "MW190"
L 3366 // Aufruf von Schleuse XXXX?
<>I // Nein!
JC X3366E
NETWORK
TITLE = Schleuse 3366: (BST 1)
L "MW190";
L 3366 ;//Aufruf von Schleuse XXXX?
<>I;//Nein!
SPB X3366E;
SET
S "M180.6" // Weiterfahrt ist erlaubt
SET;
S "M180.6" ;//Weiterfahrt ist erlaubt
BEU
BEA;
X3366E: NOP 0
X3366E: NOP 0;
NETWORK
TITLE = Bereich 4441: Weiterfahren erlaubt ? (Ende MA0320)
L "MW190";
L 4441 ;//Aufruf von Schleuse 4441 ?
<>I;//Nein!
SPB X4441E;
--- NW 4: Bereich 4441: Weiterfahren erlaubt ? (Ende MA0320) ---
L "MW190"
L 4441 // Aufruf von Schleuse 4441 ?
<>I // Nein!
JC X4441E
UN "DVPtoEP_Sensoren".Stau_BG4442.Stat.B_Akt;
S "M180.6" ;//Weiterfahrt ist erlaubt
AN "DVPtoEP_Sensoren".Stau_BG4442.Stat.B_Akt
S "M180.6" // Weiterfahrt ist erlaubt
BEA;
BEU
X4441E: NOP 0;
X4441E: NOP 0
NETWORK
TITLE = Schleuse 4443: (Vor ByPass zurück zu LP)
L "MW190";
L 4443 ;//Aufruf von Schleuse XXXX?
<>I;//Nein!
SPB PS5E;
//Ziel-Check:
L "DVPtoEP_OmniFahren".Schleuse_4443.Dyn.Trolley_ShopGroup;
L DINT#-1 ;//leerer Trolley ?
==D ;//Ja !
UN "DVPtoEP_Sensoren".Sack_BG4444.Stat.B_Akt;//Kein Sack erkannt
SPB A4443 ;//Abzweig fahren
--- NW 5: Schleuse 4443: (Vor ByPass zurück zu LP) ---
L "MW190"
L 4443 // Aufruf von Schleuse XXXX?
<>I // Nein!
JC PS5E
SPA G4443 ;//Rest Gerade fahren
// Ziel-Check:
L "DVPtoEP_OmniFahren".Schleuse_4443.Dyn.Trolley_ShopGroup
L DINT#-1 // leerer Trolley ?
==D // Ja !
AN "DVPtoEP_Sensoren".Sack_BG4444.Stat.B_Akt // Kein Sack erkannt
JC A4443 // Abzweig fahren
A4443: L 16#4461;
T "MW198" ;//Weichenziel
JU G4443 // Rest Gerade fahren
//Quell-Steuerung:
L "DEPtoLP_OmniFahren".Schleuse_4466.Dyn.Raus_Trolleys;
L 0 ;//Sind Trolleys zur Weiche MB4210 unterwegs?
>I;//Ja!
O "DEPtoLP_OmniFahren".Schleuse_4466.Dyn.Status.Reset_aktiv;
O "MB4466" ;//Andere Quelle aktiv
BEB;
A4443: L 16#4461
T "MW198" // Weichenziel
UN "DEPtoLP_Sensoren".Stau_BG4461.Stat.B_Akt;
S "M180.6" ;//Weiterfahrt ist erlaubt
// Quell-Steuerung:
L "DEPtoLP_OmniFahren".Schleuse_4466.Dyn.Raus_Trolleys
L 0 // Sind Trolleys zur Weiche MB4210 unterwegs?
>I // Ja!
O "DEPtoLP_OmniFahren".Schleuse_4466.Dyn.Status.Reset_aktiv
O "MB4466" // Andere Quelle aktiv
BEC
BEA;
AN "DEPtoLP_Sensoren".Stau_BG4461.Stat.B_Akt
S "M180.6" // Weiterfahrt ist erlaubt
G4443: L 16#4447;
T "MW198" ;//Weichenziel
BEU
UN "DVPtoEP_Sensoren".Stau_BG4447.Stat.B_Akt;
S "M180.6" ;//Weiterfahrt ist erlaubt
G4443: L 16#4447
T "MW198" // Weichenziel
BEA;
AN "DVPtoEP_Sensoren".Stau_BG4447.Stat.B_Akt
S "M180.6" // Weiterfahrt ist erlaubt
PS5E: NOP 0;
BEU
NETWORK
TITLE = Ende
BE;
PS5E: NOP 0
--- NW 6: Ende ---
BE
END_FUNCTION
@@ -1,23 +1,22 @@
=== FC 2100: VPtoEP_Bereich [STL] ===
INTERFACE:
Input:
Output:
InOut:
Temp:
Constant:
Return:
Ret_Val : Void
FUNCTION "VPtoEP_Bereich" : Void
TITLE = Bereich Outbound: VP > EP
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
--- NW 1: Baustein-Aufrufe ---
CALL FB "VPtoEP_Sensoren" ,
BEGIN
NETWORK
TITLE = Baustein-Aufrufe
CALL "VPtoEP_Sensoren", "DVPtoEP_Sensoren";
CALL FB "VPtoEP_OmniFahren" ,
CALL "VPtoEP_OmniFahren", "DVPtoEP_OmniFahren";
CALL FB "VPtoEP_Zylinder" ,
CALL "VPtoEP_Zylinder", "DVPtoEP_Zylinder";
CALL FB "VPtoEP_Antriebe" ,
CALL "VPtoEP_Antriebe", "DVPtoEP_Antriebe";
NETWORK
TITLE = Ende
BE;
--- NW 2: Ende ---
BE
END_FUNCTION
@@ -1,42 +1,77 @@
=== FB 3190: EP_Sensoren [STL] ===
INTERFACE:
Input:
Output:
InOut:
Static:
Stau_EP1 : "MSensoren"
Stau_EP2 : "MSensoren"
Stau_EP3 : "MSensoren"
Stau_EP4 : "MSensoren"
Temp:
T_Ein : Int // Vorgabe Einschaltverzögerung
T_Aus : Int // Zwischenspeicher Ausschaltverzögerung
F1 : Bool // Geschwindigkeit 1 aktiviert
F2 : Bool // Geschwindigkeit 2 aktiviert
F3 : Bool // Geschwindigkeit 3 aktiviert
ESensor : Bool // Sensoren
Antrieb : Bool
VReal : Real // GeschwindigkeitinReal
Zeit : Int // Zeit für Ausschaltverzögerung LT1100
Aktiv : Bool // Zeit aktivieren
Constant:
FUNCTION_BLOCK "EP_Sensoren"
TITLE = Einige Sensoren entprellen EntnahmePuffer
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : IBAE
VERSION : 0.1
VAR
Stau_EP1 : "MSensoren";
Stau_EP2 : "MSensoren";
Stau_EP3 : "MSensoren";
Stau_EP4 : "MSensoren";
END_VAR
--- NW 1: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4504", T_Ein:=100, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
VAR_TEMP
T_Ein : Int; // Vorgabe Einschaltverzögerung
T_Aus : Int; // Zwischenspeicher Ausschaltverzögerung
F1 : Bool; // Geschwindigkeit 1 aktiviert
F2 : Bool; // Geschwindigkeit 2 aktiviert
F3 : Bool; // Geschwindigkeit 3 aktiviert
ESensor : Bool; // Sensoren
Antrieb : Bool;
VReal : Real; // GeschwindigkeitinReal
Zeit : Int; // Zeit für Ausschaltverzögerung LT1100
Aktiv : Bool; // Zeit aktivieren
END_VAR
--- NW 2: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4505", T_Ein:=100, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
BEGIN
NETWORK
TITLE = Stau EntnahmePuffer
//Sensoren entprellen
CALL #Stau_EP1
( ESensor := "BG4504" ,
T_Ein := 100 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau EntnahmePuffer
//Sensoren entprellen
CALL #Stau_EP2
( ESensor := "BG4505" ,
T_Ein := 100 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 3: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4506", T_Ein:=100, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Stau EntnahmePuffer
//Sensoren entprellen
CALL #Stau_EP3
( ESensor := "BG4506" ,
T_Ein := 100 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau EntnahmePuffer
//Sensoren entprellen
CALL #Stau_EP4
( ESensor := "BG4507" ,
T_Ein := 100 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 4: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4507", T_Ein:=100, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Ende
BE;
--- NW 5: Ende ---
BE
END_FUNCTION_BLOCK
@@ -1,50 +1,86 @@
=== FB 3192: EP_Zylinder [STL] ===
INTERFACE:
Input:
Output:
InOut:
Static:
Sorter_4503 : "MZylinder" //
Weiche_EP1 : "MZylinder" //
Weiche_EP2 : "MZylinder"
Weiche_EP3 : "MZylinder"
Weiche_EP4 : "MZylinder"
Temp:
Auto : Bool // Automatik ist aktiv
Hand : Bool // Hand ist aktiv
ZylAst : Bool // Zylinder ansteuern
Constant:
FUNCTION_BLOCK "EP_Zylinder"
TITLE = Zylinder Outbound Entnahmepuffer
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : AE
VERSION : 0.1
VAR
Sorter_4503 : "MZylinder"; //
Weiche_EP1 : "MZylinder"; //
Weiche_EP2 : "MZylinder";
Weiche_EP3 : "MZylinder";
Weiche_EP4 : "MZylinder";
END_VAR
--- NW 1: Übergabe des Bereichstatus System UC074/A01 ---
A "DOutbound_Bereich".A01_UH07.Automatik
AN "DOutbound_Bereich".A01_UH07.Handbetrieb
= Auto
A "DOutbound_Bereich".A01_UC074.BereichErr
AN "SGes".Simulation_ohne_HW_aktiv
JC Next // Zylinder-Stellung nicht mehr ändern
VAR_TEMP
Auto : Bool; // Automatik ist aktiv
Hand : Bool; // Hand ist aktiv
ZylAst : Bool; // Zylinder ansteuern
END_VAR
--- NW 2: Schleuse_4503 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB4503", ZylGst:=?)
BEGIN
NETWORK
TITLE = Übergabe des Bereichstatus System UC074/A01
U "DOutbound_Bereich".A01_UH07.Automatik;
UN "DOutbound_Bereich".A01_UH07.Handbetrieb;
= #Auto;
U "DOutbound_Bereich".A01_UC074.BereichErr;
UN "SGes".Simulation_ohne_HW_aktiv;
SPB Next ;//Zylinder-Stellung nicht mehr ändern
--- NW 3: Weiche_EP1 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB4504", ZylGst:=?)
NETWORK
TITLE = Schleuse_4503
CALL #Sorter_4503
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB4503"
);
NETWORK
TITLE = Weiche_EP1
CALL #Weiche_EP1
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB4504"
);
--- NW 4: Weiche_EP2 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB4505", ZylGst:=?)
NETWORK
TITLE = Weiche_EP2
CALL #Weiche_EP2
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB4505"
);
NETWORK
TITLE = Weiche_EP3
CALL #Weiche_EP3
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB4506"
);
--- NW 5: Weiche_EP3 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB4506", ZylGst:=?)
NETWORK
TITLE = Weiche_EP4
CALL #Weiche_EP4
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5
);
NETWORK
TITLE = Ende
Next: BE;
--- NW 6: Weiche_EP4 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:=?, ZylGst:=?)
--- NW 7: Ende ---
Next: BE
END_FUNCTION_BLOCK
@@ -1,25 +1,24 @@
=== FC 3100: EP_Bereich [STL] ===
INTERFACE:
Input:
Output:
InOut:
Temp:
Constant:
Return:
Ret_Val : Void
FUNCTION "EP_Bereich" : Void
TITLE = Bereich Outbound: EntnahmePuffer
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
--- NW 1: Baustein-Aufrufe ---
CALL FB "EP_Sensoren" ,
BEGIN
NETWORK
TITLE = Baustein-Aufrufe
CALL "EP_Sensoren", "DEP_Sensoren";
CALL FB "EP_OmniFahren" ,
CALL "EP_OmniFahren", "DEP_OmniFahren";
CALL FB "EntnahmePufferStrecken" ,
CALL "EntnahmePufferStrecken", "DEntnahmePufferStrecken";
CALL FB "EP_Sorter" ,
CALL "EP_Sorter", "DEP_Sorter";
CALL FB "EP_Zylinder" ,
CALL "EP_Zylinder", "DEP_Zylinder";
NETWORK
TITLE = Ende
BE;
--- NW 2: Ende ---
BE
END_FUNCTION
@@ -1,38 +1,41 @@
=== FC 3182: EP_Draussen_FC [STL] ===
INTERFACE:
Input:
Output:
InOut:
Temp:
Constant:
Return:
Ret_Val : Void
FUNCTION "EP_Draussen_FC" : Void
TITLE = Draussen-FC: EntnahmePuffer
{ S7_Optimized_Access := 'FALSE' ; S7_Pass_Registers := 'TRUE' }
AUTHOR : AE
VERSION : 0.1
--- NW 1: Rückmeldung ---
SET // Rückmeldungen erst mal resetten
R "M180.6" // Weiterfahrt von Ziel-FC erlaubt
BEGIN
NETWORK
TITLE = Rückmeldung
SET;//Rückmeldungen erst mal resetten
R "M180.6";//Weiterfahrt von Ziel-FC erlaubt
NETWORK
TITLE = Schleuse 4503 (Sorter EP): Ausgefahren ?
L "MW190";
L 4503 ;//Aufruf von Schleuse 4503 ?
<>I;//Nein!
SPB X4503E;
--- NW 2: Schleuse 4503 (Sorter EP): Ausgefahren ? ---
L "MW190"
L 4503 // Aufruf von Schleuse 4503 ?
<>I // Nein!
JC X4503E
//Trolleydaten in DB1000 löschen, da danach zum LP fährt und dann kein Leser mehr!
CALL "Trolleydaten_löschen"
( Gesamt_Trolley_DL := 1000 ,
TrolleyID := "DEP_Sorter".Sorter_MB4503.Dyn.Scanner.Rec_IDX //IDX
);
// Trolleydaten in DB1000 löschen, da danach zum LP fährt und dann kein Leser mehr!
CALL FC "Trolleydaten_löschen" (Gesamt_Trolley_DL:=1000, TrolleyID:="DEP_Sorter".Sorter_MB4503.Dyn.Scanner.Rec_IDX) // IDX
//Daten in Sep 4503 löschen:
L DINT#0;
T "DEP_Sorter".Sorter_MB4503.Dyn.Scanner.Rec_IDX;//IDX
L 0;
T "DEP_Sorter".Sorter_MB4503.Dyn.Scanner.Rec_DEST_Ziel;
// Daten in Sep 4503 löschen:
L DINT#0
T "DEP_Sorter".Sorter_MB4503.Dyn.Scanner.Rec_IDX // IDX
L 0
T "DEP_Sorter".Sorter_MB4503.Dyn.Scanner.Rec_DEST_Ziel
BEA;
BEU
X4503E: NOP 0;
X4503E: NOP 0
NETWORK
TITLE = Ende
BE;
--- NW 3: Ende ---
BE
END_FUNCTION
@@ -1,42 +1,51 @@
=== FC 3180: EP_Leser_FC [STL] ===
INTERFACE:
Input:
Output:
InOut:
Temp:
Zielebene : Word
Constant:
Return:
Ret_Val : Void
--- NW 1: Rückmeldung ---
// Keine
L 0 // Evtl. Zwischenziel (MW196)
T "MW196"
FUNCTION "EP_Leser_FC" : Void
TITLE = Leser-FC: EntnahmePuffer
{ S7_Optimized_Access := 'FALSE' ; S7_Pass_Registers := 'TRUE' }
AUTHOR : AE
VERSION : 0.1
VAR_TEMP
Zielebene : Word;
END_VAR
--- NW 2: Schleuse 4503: (Sorter EP) ---
L "MW190" // Schleusen-Nr.
L 4503 // Aufruf von Schleuse ?
<>I // Nein!
JC X4503E
BEGIN
NETWORK
TITLE = Rückmeldung
AN "M180.0" // Lesefehler
JC Y4503
//Keine
L 0;//Evtl. Zwischenziel (MW196)
T "MW196";
BEU
NETWORK
TITLE = Schleuse 4503: (Sorter EP)
L "MW190" ;//Schleusen-Nr.
L 4503 ;//Aufruf von Schleuse ?
<>I;//Nein!
SPB X4503E;
Y4503: AN "M180.1" // unbekannt in TrolleysDL
BEC
UN "M180.0";//Lesefehler
SPB Y4503;
// /In Zukunft Anfrage bei Host!
CALL FC "Trolleydaten_neu_anlegen" (Gesamt_Trolley_DL:="DEP_OmniFahren".Schleuse_4503.Schleuse.Gesamt_Trolley_DL, TrolleyID:="DEP_OmniFahren".Schleuse_4503.Dyn.TrolleyID_Schleuse, Endziel:=16#E201, ShopGroup:=0) // Erst mal, da kein Host! | Entnahme-Puffer 1
BEA;
BEU
Y4503: UN "M180.1" ;//unbekannt in TrolleysDL
BEB;
X4503E: NOP 0
///In Zukunft Anfrage bei Host!
CALL "Trolleydaten_neu_anlegen"//Erst mal, da kein Host!
( Gesamt_Trolley_DL := "DEP_OmniFahren".Schleuse_4503.Schleuse.Gesamt_Trolley_DL ,
TrolleyID := "DEP_OmniFahren".Schleuse_4503.Dyn.TrolleyID_Schleuse ,
Endziel := 16#E201 , //Entnahme-Puffer 1
ShopGroup := 0
);
BEA;
--- NW 3: Ende ---
BE
X4503E: NOP 0;
NETWORK
TITLE = Ende
BE;
END_FUNCTION
@@ -1,68 +1,89 @@
=== FB 3128: EP_OmniFahren [STL] ===
INTERFACE:
Input:
Output:
InOut:
Static:
Schleuse_4503 : "MHMOmniSchleuse"
EP_1_voll : Bool
EP_2_voll : Bool
EP_3_voll : Bool
EP_4_voll : Bool
Temp:
ErrQuit : Bool
ErrAnz : Bool
Stau_raus : Bool
Start_ok : Bool
B_aktiv : Bool
B_vor_Schleuse : Bool
B_nach_Schleuse : Bool
Antrieb_aktiv : Bool
Antrieb_start : Bool
Antrieb_stop : Bool
Fahren_Ok : Bool
Antrieb_nicht_stoppen : Bool
Constant:
FUNCTION_BLOCK "EP_OmniFahren"
TITLE = Omnifahren Outbound EntnahmePuffer
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
VAR
Schleuse_4503 { S7_SetPoint := 'False'} : "MHMOmniSchleuse";
EP_1_voll { S7_SetPoint := 'True'} : Bool;
EP_2_voll { S7_SetPoint := 'True'} : Bool;
EP_3_voll { S7_SetPoint := 'True'} : Bool;
EP_4_voll { S7_SetPoint := 'True'} : Bool;
END_VAR
--- NW 1: Systemzeug ---
// VollPuffer-Bereich:
A "DOutbound_Bereich".A01_UH07.AnlageEin
= Schleuse_4503.Dyn.Sk.Auto_akt
AN "DOutbound_Bereich".A01_UC074.BereichErr
= Schleuse_4503.Dyn.Sk.Bereich_ok
VAR_TEMP
ErrQuit : Bool;
ErrAnz : Bool;
Stau_raus : Bool;
Start_ok : Bool;
B_aktiv : Bool;
B_vor_Schleuse : Bool;
B_nach_Schleuse : Bool;
Antrieb_aktiv : Bool;
Antrieb_start : Bool;
Antrieb_stop : Bool;
Fahren_Ok : Bool;
Antrieb_nicht_stoppen : Bool;
END_VAR
--- NW 2: Störungen quittieren UZ7402 ---
A "DOutbound_Bereich".A01_UZ7402.StOk_aktiv
O "DOutbound_Bereich".A01_UC074.StOk_aktiv
O "DOutbound_Bereich".A01_UH07.StOk_aktiv
= ErrQuit
BEGIN
NETWORK
TITLE = Systemzeug
//VollPuffer-Bereich:
U "DOutbound_Bereich".A01_UH07.AnlageEin;
= #Schleuse_4503.Dyn.Sk.Auto_akt;
--- NW 3: Schleuse 4503 ---
CALL FB "None" , (Schleusen_Nr:=4503, ErrQuit:=ErrQuit, B_VorSchleuse:="BG4502", B_InSchleuse:="BG4503", B_AusSchleuse:=?, B_Stau_raus:=?, Start_Ok:=?, Antrieb_Schleuse_aktiv:="MA0325", Antrieb_plus_aktiv:=?, Schleuse_geöffnet:="MB4503", RestZeit_Bereich_plus:=?, Y_Schleuse_Auf:=?, Error:=DB708.DBW564, Antrieb_Schleuse_vor:="DVPtoEP_Antriebe".MA0325.Stat.A_vor, Antrieb_Schleuse_start:="DVPtoEP_Antriebe".MA0325.Stat.A_start, Antrieb_Schleuse_stop:="DVPtoEP_Antriebe".MA0325.Stat.Stop_vor, Antrieb_Schleuse_PS:="DVPtoEP_Antriebe".MA0325.Stat.A_PS, Antrieb_plus_vor:=?, Antrieb_plus_start:=?, hStOk:=ErrAnz) // weiterfahrt über Sorter-Sep
UN "DOutbound_Bereich".A01_UC074.BereichErr;
= #Schleuse_4503.Dyn.Sk.Bereich_ok;
AN Schleuse_4503.Dyn.Status.Reset_aktiv
JC NoR4503
NETWORK
TITLE = Störungen quittieren UZ7402
U "DOutbound_Bereich".A01_UZ7402.StOk_aktiv;
O "DOutbound_Bereich".A01_UC074.StOk_aktiv;
O "DOutbound_Bereich".A01_UH07.StOk_aktiv;
= #ErrQuit;
L DINT#0
T "DEP_Sorter".Sorter_MB4503.Dyn.Scanner.Rec_IDX // IDX
L 0
T "DEP_Sorter".Sorter_MB4503.Separator.Default_Ziel
T "DEP_Sorter".Sorter_MB4503.Dyn.Scanner.Rec_DEST_Ziel
NETWORK
TITLE = Schleuse 4503
CALL #Schleuse_4503
( Schleusen_Nr := 4503 ,
ErrQuit := #ErrQuit ,
B_VorSchleuse := "BG4502" ,
B_InSchleuse := "BG4503" ,
B_AusSchleuse := , //weiterfahrt über Sorter-Sep
Antrieb_Schleuse_aktiv := "MA0325" ,
Schleuse_geöffnet := "MB4503" ,
Error := %DB708.DBW564 ,
Antrieb_Schleuse_vor := "DVPtoEP_Antriebe".MA0325.Stat.A_vor ,
Antrieb_Schleuse_start := "DVPtoEP_Antriebe".MA0325.Stat.A_start ,
Antrieb_Schleuse_stop := "DVPtoEP_Antriebe".MA0325.Stat.Stop_vor ,
Antrieb_Schleuse_PS := "DVPtoEP_Antriebe".MA0325.Stat.A_PS ,
hStOk := #ErrAnz
);
NoR4503: NOP 0
UN #Schleuse_4503.Dyn.Status.Reset_aktiv;
SPB NoR4503;
L DINT#0;
T "DEP_Sorter".Sorter_MB4503.Dyn.Scanner.Rec_IDX;//IDX
L 0;
T "DEP_Sorter".Sorter_MB4503.Separator.Default_Ziel;
T "DEP_Sorter".Sorter_MB4503.Dyn.Scanner.Rec_DEST_Ziel;
--- NW 4: Störungen anzeigen UZ7402 ---
A ErrAnz
R ErrAnz
S "DOutbound_Bereich".A01_UZ7402.StOk_blinken
S "DOutbound_Bereich".A01_UC074.StOk_blinken
S "DOutbound_Bereich".A01_UH07.StOk_blinken
NoR4503: NOP 0;
NETWORK
TITLE = Störungen anzeigen UZ7402
U #ErrAnz;
R #ErrAnz;
S "DOutbound_Bereich".A01_UZ7402.StOk_blinken;
S "DOutbound_Bereich".A01_UC074.StOk_blinken;
S "DOutbound_Bereich".A01_UH07.StOk_blinken;
--- NW 5: Ende ---
BE
NETWORK
TITLE = Ende
BE;
END_FUNCTION_BLOCK
@@ -1,165 +1,185 @@
=== FC 3181: EP_Ziel_FC [STL] ===
INTERFACE:
Input:
Output:
InOut:
Temp:
Ziel_hex : Word
Ziel_int : Int
Zielebene : Word
Error : Byte
Position : Int
Lager_DB : Int
Lager_DW : Int
AR1Zeiger : DWord // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
AR1Start : DInt // Startwert mit Offset 0
SSDW : Int
EndZiel : Word
Variante : Int
AbrufID : DInt
Fahrlisten_TrolleyID : DInt
Fahrlisten_AbrufID : DInt
Fahrlisten_Lager : Int
Trolley_unbekannt : Bool // Trolley ist nicht in DL
Express_Abruf : Bool
Error.Bit : Bool
Constant:
Return:
Ret_Val : Void
--- NW 1: Rückmeldung ---
SET // Rückmeldungen erst mal resetten
R "M180.6" // Weiterfahrt von Ziel-FC erlaubt
FUNCTION "EP_Ziel_FC" : Void
TITLE = Ziel-FC: EntnahmePuffer_OmniFahren
{ S7_Optimized_Access := 'FALSE' ; S7_Pass_Registers := 'TRUE' }
AUTHOR : AE
VERSION : 0.1
VAR_TEMP
Ziel_hex : Word;
Ziel_int : Int;
Zielebene : Word;
Error : Byte;
Position : Int;
Lager_DB : Int;
Lager_DW : Int;
AR1Zeiger : DWord; // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
AR1Start : DInt; // Startwert mit Offset 0
SSDW : Int;
EndZiel : Word;
Variante : Int;
AbrufID : DInt;
Fahrlisten_TrolleyID : DInt;
Fahrlisten_AbrufID : DInt;
Fahrlisten_Lager : Int;
Trolley_unbekannt : Bool; // Trolley ist nicht in DL
Express_Abruf : Bool;
"Error.Bit" : Bool;
END_VAR
--- NW 2: Schleuse 4503: Weiterfahren erlaubt ? (Sorter EP) ---
L "MW190"
L 4503 // Aufruf von Schleuse 4503 ?
<>I // Nein!
JC X4503E
BEGIN
NETWORK
TITLE = Rückmeldung
SET;//Rückmeldungen erst mal resetten
R "M180.6";//Weiterfahrt von Ziel-FC erlaubt
L "EP_TravelFIFO".Travel_FIFO_BG4527.FIFO.ANZAHL
L 0 // Daten noch im Travel-FIFO?
<>I // Ja !
O "MB4503" // Trolley fährt schon
BEC
NETWORK
TITLE = Schleuse 4503: Weiterfahren erlaubt ? (Sorter EP)
L "MW190";
L 4503 ;//Aufruf von Schleuse 4503 ?
<>I;//Nein!
SPB X4503E;
A "SGes".Ohne_PC_Fahren // Also Ziel simulieren
JC Sim
L "EP_TravelFIFO".Travel_FIFO_BG4527.FIFO.ANZAHL;
L 0;//Daten noch im Travel-FIFO?
<>I;//Ja !
O "MB4503" ;//Trolley fährt schon
BEB;
// Telegramm schon gesendet?
AN "DEP_OmniFahren".Schleuse_4503.Status2.Telegramm_gesendet
JC T4503
U "SGes".Ohne_PC_Fahren;//Also Ziel simulieren
SPB Sim;
SimOk: CALL FC "BCD (4stellig)_to_INT" (BCD_Wert:="MW194", Int_Wert:=Ziel_int)
//Telegramm schon gesendet?
UN "DEP_OmniFahren".Schleuse_4503.Status2.Telegramm_gesendet;
SPB T4503;
// Ziel-Überprüfung auf voll:
L Ziel_int
L 1
==I
AN "DEP_Sensoren".Stau_EP1.Stat.B_Akt
JC ZielOk
SimOk: CALL "BCD (4stellig)_to_INT"
( BCD_Wert := "MW194" ,
Int_Wert := #Ziel_int
);
CAC
L 2
==I
AN "DEP_Sensoren".Stau_EP2.Stat.B_Akt
JC ZielOk
//Ziel-Überprüfung auf voll:
L #Ziel_int;
L 1;
==I;
UN "DEP_Sensoren".Stau_EP1.Stat.B_Akt;
SPB ZielOk;
CAC
L 3
==I
AN "DEP_Sensoren".Stau_EP3.Stat.B_Akt
JC ZielOk
TAK;
L 2;
==I;
UN "DEP_Sensoren".Stau_EP2.Stat.B_Akt;
SPB ZielOk;
CAC
L 4
==I
AN "DEP_Sensoren".Stau_EP4.Stat.B_Akt
JC ZielOk
TAK;
L 3;
==I;
UN "DEP_Sensoren".Stau_EP3.Stat.B_Akt;
SPB ZielOk;
A "10s-Impuls" // Nach 10s
R "DEP_OmniFahren".Schleuse_4503.Status2.Telegramm_gesendet // Erneute Anfrage
TAK;
L 4;
==I;
UN "DEP_Sensoren".Stau_EP4.Stat.B_Akt;
SPB ZielOk;
BEU // Warten, da Ziel unklar oder voll
U "10s-Impuls";//Nach 10s
R "DEP_OmniFahren".Schleuse_4503.Status2.Telegramm_gesendet;//Erneute Anfrage
ZielOk: L Ziel_int
+ 200
T "DEP_Sorter".Sorter_MB4503.Separator.Default_Ziel
T "DEP_Sorter".Sorter_MB4503.Dyn.Scanner.Rec_DEST_Ziel
BEA;//Warten, da Ziel unklar oder voll
// Scanner-IDX übergeben:
L "DEP_OmniFahren".Schleuse_4503.Dyn.TrolleyID_Schleuse
T "DEP_Sorter".Sorter_MB4503.Dyn.Scanner.Rec_IDX // IDX
ZielOk: L #Ziel_int;
+ 200;
T "DEP_Sorter".Sorter_MB4503.Separator.Default_Ziel;
T "DEP_Sorter".Sorter_MB4503.Dyn.Scanner.Rec_DEST_Ziel;
CLR // Wird über MSorterRein (FB1423/5) gestartet!
S "M180.6" // Weiterfahrt ist erlaubt
//Scanner-IDX übergeben:
L "DEP_OmniFahren".Schleuse_4503.Dyn.TrolleyID_Schleuse;
T "DEP_Sorter".Sorter_MB4503.Dyn.Scanner.Rec_IDX;//IDX
BEU
CLR ;//Wird über MSorterRein (FB1423/5) gestartet!
S "M180.6" ;//Weiterfahrt ist erlaubt
// GOHDReqM an Host senden:
T4503: L "DEP_OmniFahren".Schleuse_4503.Dyn.TrolleyID_Schleuse
L 0 // Barcode bekannt?
==D // Nein!
BEC // Warten!
BEA;
// Pufferstatus (Stau) ermitteln:
A "DEP_Sensoren".Stau_EP1.Stat.B_Akt
= "Daten_für_SendFIFO"."Status_2_Bit[0]"
A "DEP_Sensoren".Stau_EP2.Stat.B_Akt
= "Daten_für_SendFIFO"."Status_2_Bit[1]"
A "DEP_Sensoren".Stau_EP3.Stat.B_Akt
= "Daten_für_SendFIFO"."Status_2_Bit[2]"
A "DEP_Sensoren".Stau_EP4.Stat.B_Akt
= "Daten_für_SendFIFO"."Status_2_Bit[3]"
//GOHDReqM an Host senden:
T4503: L "DEP_OmniFahren".Schleuse_4503.Dyn.TrolleyID_Schleuse;
L 0;//Barcode bekannt?
==D;//Nein!
BEB;//Warten!
CALL FB "Daten_in_SendFIFO_speichern" , (TelegrammKennung[1]:='G', TelegrammKennung[2]:='O', TelegrammKennung[3]:='H', TelegrammKennung[4]:='D', TelegrammKennung[5]:='R', TelegrammKennung[6]:='e', TelegrammKennung[7]:='q', TelegrammKennung[8]:='M', TelegrammKennung[9]:=?, TelegrammKennung[10]:=?, TrolleyID:="DEP_OmniFahren".Schleuse_4503.Dyn.TrolleyID_Schleuse, StationsNr:=4503, Puffer_LinienNr:=?, StoreGroup:=?, Status_1_Int:=?, Status_2_Bit[0]:=?, Status_2_Bit[1]:=?, Status_2_Bit[2]:=?, Status_2_Bit[3]:=?, Status_2_Bit[4]:=?, Status_2_Bit[5]:=?, Status_2_Bit[6]:=?, Status_2_Bit[7]:=?, Reserve[1]_Int:=?, Reserve[2]_Int:=?, Port:=2, Ret_Val_FIFO_IN:="MB199", Error:="Error.Bit")
//Pufferstatus (Stau) ermitteln:
U "DEP_Sensoren".Stau_EP1.Stat.B_Akt;
= "Daten_für_SendFIFO"."Status_2_Bit[0]";
U "DEP_Sensoren".Stau_EP2.Stat.B_Akt;
= "Daten_für_SendFIFO"."Status_2_Bit[1]";
U "DEP_Sensoren".Stau_EP3.Stat.B_Akt;
= "Daten_für_SendFIFO"."Status_2_Bit[2]";
U "DEP_Sensoren".Stau_EP4.Stat.B_Akt;
= "Daten_für_SendFIFO"."Status_2_Bit[3]";
AN "Error.Bit"
S "DEP_OmniFahren".Schleuse_4503.Status2.Telegramm_gesendet
CALL "Daten_in_SendFIFO_speichern", "Daten_für_SendFIFO"
( "TelegrammKennung[1]" := 'G' ,
"TelegrammKennung[2]" := 'O' ,
"TelegrammKennung[3]" := 'H' ,
"TelegrammKennung[4]" := 'D' ,
"TelegrammKennung[5]" := 'R' ,
"TelegrammKennung[6]" := 'e' ,
"TelegrammKennung[7]" := 'q' ,
"TelegrammKennung[8]" := 'M' ,
TrolleyID := "DEP_OmniFahren".Schleuse_4503.Dyn.TrolleyID_Schleuse ,
StationsNr := 4503 ,
Port := 2 ,
Ret_Val_FIFO_IN := "MB199" ,
Error := #"Error.Bit"
);
BEU
UN #"Error.Bit";
S "DEP_OmniFahren".Schleuse_4503.Status2.Telegramm_gesendet;
// /Zum Testen bei Inbetriebnahme ohne PC:
Sim: A "DEP_Sensoren".Stau_EP1.Stat.B_Akt
S "DEP_OmniFahren".EP_1_voll
L 16#1 // /Tests mit Puffer 1
AN "DEP_OmniFahren".EP_1_voll
JC StartSim
BEA;
A "DEP_Sensoren".Stau_EP2.Stat.B_Akt
S "DEP_OmniFahren".EP_2_voll
L 16#2 // /Tests mit Puffer 2
AN "DEP_OmniFahren".EP_2_voll
JC StartSim
///Zum Testen bei Inbetriebnahme ohne PC:
Sim: U "DEP_Sensoren".Stau_EP1.Stat.B_Akt;
S "DEP_OmniFahren".EP_1_voll;
L 16#1 ;///Tests mit Puffer 1
UN "DEP_OmniFahren".EP_1_voll;
SPB StartSim;
A "DEP_Sensoren".Stau_EP3.Stat.B_Akt
S "DEP_OmniFahren".EP_3_voll
L 16#3 // /Tests mit Puffer 3
AN "DEP_OmniFahren".EP_3_voll
JC StartSim
U "DEP_Sensoren".Stau_EP2.Stat.B_Akt;
S "DEP_OmniFahren".EP_2_voll;
L 16#2 ;///Tests mit Puffer 2
UN "DEP_OmniFahren".EP_2_voll;
SPB StartSim;
A "DEP_Sensoren".Stau_EP4.Stat.B_Akt
S "DEP_OmniFahren".EP_4_voll
L 16#4 // /Tests mit Puffer 4
AN "DEP_OmniFahren".EP_4_voll
JC StartSim
U "DEP_Sensoren".Stau_EP3.Stat.B_Akt;
S "DEP_OmniFahren".EP_3_voll;
L 16#3 ;///Tests mit Puffer 3
UN "DEP_OmniFahren".EP_3_voll;
SPB StartSim;
SET
R "DEP_OmniFahren".EP_1_voll
R "DEP_OmniFahren".EP_2_voll
R "DEP_OmniFahren".EP_3_voll
R "DEP_OmniFahren".EP_4_voll
U "DEP_Sensoren".Stau_EP4.Stat.B_Akt;
S "DEP_OmniFahren".EP_4_voll;
L 16#4 ;///Tests mit Puffer 4
UN "DEP_OmniFahren".EP_4_voll;
SPB StartSim;
BEU
SET;
R "DEP_OmniFahren".EP_1_voll;
R "DEP_OmniFahren".EP_2_voll;
R "DEP_OmniFahren".EP_3_voll;
R "DEP_OmniFahren".EP_4_voll;
StartSim: T "MW194"
BEA;
JU SimOk
StartSim: T "MW194";
X4503E: NOP 0
SPA SimOk;
X4503E: NOP 0;
--- NW 3: Ende ---
BE
NETWORK
TITLE = Ende
BE;
END_FUNCTION
@@ -1,296 +1,409 @@
=== FB 3423: EP_Sorter [STL] ===
INTERFACE:
Input:
Output:
InOut:
Static:
Sorter_MB4503 : "MSepSorterRein"
Sync_BG4527 : "MStartSync"
Weiche_EP1 : "MWeiche_Sorter_EP"
Weiche_EP2 : "MWeiche_Sorter_EP"
Weiche_EP3 : "MWeiche_Sorter_EP"
Weiche_EP4 : "MWeiche_Sorter_EP"
Impuls_BG4526 : "MImpulsGeber"
Ohne_PC_fahren : Bool
SorterReset : Bool
Temp:
ErrQuit : Bool
ErrAnz : Bool
Antrieb : Bool
Stau : Bool
Start_Ok : Bool
Error_aktiv : Bool
Leer : Bool
Err_DW : DInt
Err_Bits : Int
Constant:
--- NW 1: Systemzeug ---
A "DOutbound_Bereich".A01_UH07.AnlageEin
= Sorter_MB4503.Dyn.Sk.Auto_akt
AN "DOutbound_Bereich".A01_UC074.BereichErr
= Sorter_MB4503.Dyn.Sk.Bereich_ok
// Bereichshalt:
CLR // nicht verbaut
R Sorter_MB4503.Dyn.Sk.Bereich_ok
// Sonderbetriebsarten Weichen:
CLR
= Weiche_EP1.Dyn.Status.Weichentest_aktiv
= Weiche_EP2.Dyn.Status.Weichentest_aktiv
= Weiche_EP3.Dyn.Status.Weichentest_aktiv
= Weiche_EP4.Dyn.Status.Weichentest_aktiv
A Sync_BG4527.Dyn.Status.TeachModus_Aktiv
= Weiche_EP1.Dyn.Status.TeachModus_aktiv
= Weiche_EP2.Dyn.Status.TeachModus_aktiv
= Weiche_EP3.Dyn.Status.TeachModus_aktiv
= Weiche_EP4.Dyn.Status.TeachModus_aktiv
CLR
= Sorter_MB4503.Dyn.Error.Korrektur_Modus_aktiv
L 3474 // DLSeps
T "MW174"
L 3478 // DLWeichen
T "MW178"
// Nach neuen Daten suchen:
A "1s-Impuls"
= "Weiche_NewData"
--- NW 2: Linien mit PLC_Ziel anfahren ---
A Ohne_PC_fahren
JCN En03
A "MB4503"
CU "Z102"
L "Z102"
L 1
<I
A(
L Sorter_MB4503.Separator.Default_Ziel
L 0 // Bekannt ?
>I // Ja !
)
JC En03
SET
R "Z102"
L Sorter_MB4503.Separator.Default_Ziel
L 0 // unbekannt ?
==I
L 101 // Beginn mit Ausfahrziel 1.Puffer
JC X399
// Nächste Weiche suchen:
L Sorter_MB4503.Separator.Default_Ziel
T "MW200"
CALL FC "DatenOut" (SSDB:="MW178", SSDW:=0, PARA:=WORD#16#0E00, SEARCHDATEN:=P#M200.0, RE_VAL:="MB199", OUTDATEN:=P#M200.0, Position:="MW196") // Nach angegeben Datenbyte suchen (Abzweig-Ziel)
AN "M199.7" // Datensatz ist nicht vorhanden
O "M208.0" // Letzte Weiche
L 0 // Neubeginn
JC X400
X398: CALL FC "DatenOut" (SSDB:="MW178", SSDW:=0, PARA:=WORD#16#FF00, SEARCHDATEN:=P#M200.0, RE_VAL:="MB199", OUTDATEN:=P#M200.0, Position:="MW196") // Nächsten Datensatz lesen
L "MW206" // Weichentyp
L 178 // Sorterweiche ?
<>I // Nein!
O "M199.2" // Ende erreicht
L 0
JC X400
A "M208.5" // Weiche für PLC-Ziel disabled !
JC X398
L "MW226"
T Sorter_MB4503.Separator.Default_Ziel
JU En03
// 1.Weiche checken:
X399: T "MW200"
CALL FC "DatenOut" (SSDB:="MW178", SSDW:=0, PARA:=WORD#16#0E00, SEARCHDATEN:=P#M200.0, RE_VAL:="MB199", OUTDATEN:=P#M200.0, Position:="MW196") // Nach angegeben Datenbyte suchen (Abzweig-Ziel)
AN "M199.7" // Datensatz ist nicht vorhanden
JC En03
A "M208.5" // Weiche für PLC-Ziel disabled !
JC X398
L "MW226"
X400: T Sorter_MB4503.Separator.Default_Ziel
En03: NOP 0
--- NW 3: Störung aktiv? ---
CALL FC "Err_vorhanden" (Check_DB:=708, Anfangs_DW:=DINT#154, Ende_DW:=DINT#162, Stoerung:=Error_aktiv, ErrDW:=Err_DW, ErrBits:=Err_Bits) // Störungsanzeige
A Error_aktiv // s.o.
= Error_aktiv // Sorter Lager Weichen-Störung (Sorter-Antrieb gestoppt!)
A "BG4527" // Verlassen-Sensor
L S5T#250MS
OffDelay "T340"
--- NW 4: Störung quittieren UZ7402 ---
A "DOutbound_Bereich".A01_UZ7402.StOk_aktiv
= ErrQuit
--- NW 5: Sorter-GesamtReset ---
// Sorter-Reset starten:
A "DEP_OmniFahren".Schleuse_4503.Dyn.Status.Reset_aktiv // Bei Schleusen-Reset -> Sorter mit resetten!
S "DEP_Sorter".Sorter_MB4503.Dyn.GesamtSorterReset
--- NW 6: Separator 4503 vor Sorter ---
L DB708.DBW152 // Err beim Synchronisieren
L 0 // Störung vorhanden ?
==I // Nein !
AN Sync_BG4527.Dyn.Stop // Rein-Separator stoppen
AN Error_aktiv // Sorter Batch Weichen-Störung (Sorter-Antrieb gestoppt!)
AN Sorter_MB4503.Dyn.GesamtSorterReset_aktiv
= Start_Ok
SET // Da Leiste im Sep und Zusatz-Zylinder im Separator -> BT steht sofort sauber im Sep
S Sorter_MB4503.Dyn.BT_beruhigt // 1. einfahrender BügelTräger ist im Sep
A "T340"
= Sorter_MB4503.B_AusSep // Entprellung Verlassen-Sensor
// Triggern / Scanner-Auswertung über EP_Omnifahren (FC3128/3)
// Ziel über Default-Ziel (EP_Ziel_FC, FC3181)
CALL FB "None" , (Separator_Nr:=4503, ErrQuit:=ErrQuit, B_VorSep:=?, B_ImSep:="BG4503", B_AusSep:=?, B_Beladen_im_Sep:=?, B_Pinsensor:="BG4526", B_Beladen_nach_Sep:=?, Start_Ok:=Start_Ok, Antrieb_aktiv:="MA0325", Antrieb_plus_aktiv:="MA0325", Y_Sep_Auf:="DEP_Zylinder".Sorter_4503.Stat.Ast, K_Sanner_triggern:=?, Sorter_Reset:=SorterReset, Error:=DB708.DBW150, Antrieb_start:="DVPtoEP_Antriebe".MA0325.Stat.A_vor, Antrieb_plus_start:=?, Antrieb_stoppen:="DVPtoEP_Antriebe".MA0325.Stat.Stop_vor, hStOk:=ErrAnz)
// Default-Ziel jeden Zyklus neu!:
L 0
T Sorter_MB4503.Separator.Default_Ziel
--- NW 7: Reset ist aktiv ---
A Sorter_MB4503.Dyn.GesamtSorterReset_aktiv
= "7_HMI_Err_UH07_OB".Sorter_MB4503.Reset_aktiv
A Sorter_MB4503.Dyn.GesamtSorterReset_aktiv
= Weiche_EP1.Dyn.Ohne_VerklemmKontrolle
= Weiche_EP2.Dyn.Ohne_VerklemmKontrolle
= Weiche_EP3.Dyn.Ohne_VerklemmKontrolle
= Weiche_EP4.Dyn.Ohne_VerklemmKontrolle
// Diesen Sorterbereich zurücksetzen:
A SorterReset // Ein Zyklus
S Sync_BG4527.Dyn.Reset
S Weiche_EP1.Dyn.Status.Reset
S Weiche_EP2.Dyn.Status.Reset
S Weiche_EP3.Dyn.Status.Reset
S Weiche_EP4.Dyn.Status.Reset
--- NW 8: Inkremente über Zahnrad-Sensor ---
CALL FB "None" , (Ink_DB:=3483, B_Zaehlen:="BG4526", Antrieb_aktiv:="MA0325", Quit:=ErrQuit, Zeit_Signal_zu_lang:=?, Zeit_Kein_Signal:=?, Signal:=?, Err_Kein_Signal:="7_HMI_Err_UH07_OB".Impulsgeber_4526.Kein_Signal, Err_Signal_zu_lang:="7_HMI_Err_UH07_OB".Impulsgeber_4526.Signal_zu_lang)
A(
O "7_HMI_Err_UH07_OB".Impulsgeber_4526.Kein_Signal
O "7_HMI_Err_UH07_OB".Impulsgeber_4526.Signal_zu_lang
)
AN ErrQuit
S "DVPtoEP_Antriebe".MA0325.Stat.Stop_vor
A(
O "7_HMI_Err_UH07_OB".Impulsgeber_4526.Kein_Signal
O "7_HMI_Err_UH07_OB".Impulsgeber_4526.Signal_zu_lang
)
S ErrAnz
--- NW 9: Trolley synchronisieren BG4527 ---
// Teachen: Ref-Sensor ueber Sync-Sensor
A "BG4527"
AN Sync_BG4527.Dyn.Refpunkt_ok // Nur eimalige Auswertung
= Sync_BG4527.B_RefPunkt // uebergabe fuer unten
A "MA0325"
L S5T#500ms
OffDelay "T343"
A "T343"
AN Sync_BG4527.Dyn.Status.TeachModus_Aktiv // sonst Probleme bei Doppelimpuls
O
A "MA0325"
A Sync_BG4527.Dyn.Status.TeachModus_Aktiv // sonst Probleme bei Doppelimpuls
= Antrieb
// Keine Hauptstrangdaten vorhanden ? (Fuer Sync-Pkt):
L "EP_HS_oF".Datensortkopf.AnzahlEintraege
L "EP_HS_mF".Datensortkopf.AnzahlEintraege
+I
L 0 // Daten vorhanden ?
==I // Nein !
= "Hauptstrang_leer" // Keine Haupstrangdaten vorhanden -> Verklemm-Errors löschen
A "BG4527"
L s5t#500ms // Da trotz Entprellung Doppel-Impulse
OffDelay "T344"
A "T344"
= Sync_BG4527.B_BT_da
CALL FB "None" , (Sync_Nr:=4527, ErrQuit:=ErrQuit, B_BT_da:=?, B_RefPunkt:=?, B_TeachPunk:="BG4504", Antrieb_aktiv:=Antrieb, Error:=DB708.DBW152, Antrieb_start:="DVPtoEP_Antriebe".MA0325.Stat.A_start, hStOk:=ErrAnz) // Teach-Sensor
A Sync_BG4527.Dyn.Error.Inkrementalgeber
S "DVPtoEP_Antriebe".MA0325.Stat.Stop_vor
// Keine Hauptstrangdaten vorhanden ?:
L "EP_HS_oF".Datensortkopf.AnzahlEintraege
L "EP_HS_mF".Datensortkopf.AnzahlEintraege
+I
L 0 // Daten vorhanden ?
==I // Nein !
= "Hauptstrang_leer" // Keine Haupstrangdaten vorhanden -> Verklemm-Errors löschen
// Spezial, da Sorter-Antrieb über SorterRein-Sep geht!: (Sonst Antriebs-Stop wegen PS)
AN "Hauptstrang_leer" // Keine Haupstrangdaten vorhanden -> Verklemm-Errors löschen
O "MB4503" // Neuer Sort-Trolley kommt
O "BG4527"
L s5t#20s
OffDelay "T341"
A "T341" // Alle Sort-Trolleys sind ins Puffer ausgefahren
S "DVPtoEP_Antriebe".MA0325.Stat.A_vor
--- NW 10: Weiche 4504 / EntnahmePuffer EP1 ---
CALL FB "None" , (Weichen_Nr:=1, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:=0, B_Gerade:=?, B_Ausfahrt:="BG4504", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DEP_Zylinder".Weiche_EP1.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW154, Antrieb_start:="DVPtoEP_Antriebe".MA0325.Stat.A_start, Antrieb_stoppen:="DVPtoEP_Antriebe".MA0325.Stat.Stop_vor, hStOk:=ErrAnz) // "DEP_Sensoren".Stau_EP1.Stat.B_Akt
--- NW 11: Weiche 4505 / EntnahmePuffer EP2 ---
CALL FB "None" , (Weichen_Nr:=2, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:=0, B_Gerade:=?, B_Ausfahrt:="BG4505", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DEP_Zylinder".Weiche_EP2.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW156, Antrieb_start:="DVPtoEP_Antriebe".MA0325.Stat.A_start, Antrieb_stoppen:="DVPtoEP_Antriebe".MA0325.Stat.Stop_vor, hStOk:=ErrAnz) // "DEP_Sensoren".Stau_EP2.Stat.B_Akt
--- NW 12: Weiche 4506 / EntnahmePuffer EP3 ---
CALL FB "None" , (Weichen_Nr:=3, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:=0, B_Gerade:=?, B_Ausfahrt:="BG4506", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DEP_Zylinder".Weiche_EP3.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW158, Antrieb_start:="DVPtoEP_Antriebe".MA0325.Stat.A_start, Antrieb_stoppen:="DVPtoEP_Antriebe".MA0325.Stat.Stop_vor, hStOk:=ErrAnz) // "DEP_Sensoren".Stau_EP3.Stat.B_Akt
--- NW 13: Pseudo-Weiche / EntnahmePuffer EP4 ---
CALL FB "None" , (Weichen_Nr:=4, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:=0, B_Gerade:=?, B_Ausfahrt:="BG4507", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DEP_Zylinder".Weiche_EP4.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW160, Antrieb_start:="DVPtoEP_Antriebe".MA0325.Stat.A_start, Antrieb_stoppen:="DVPtoEP_Antriebe".MA0325.Stat.Stop_vor, hStOk:=ErrAnz) // "DEP_Sensoren".Stau_EP4.Stat.B_Akt
--- NW 14: Störungen anzeigen UZ7102/7103 ---
A ErrAnz
S "DOutbound_Bereich".A01_UZ7102.StOk_blinken
S "DOutbound_Bereich".A01_UZ7103.StOk_blinken
--- NW 15: Ende ---
BE
FUNCTION_BLOCK "EP_Sorter"
TITLE = Sorter EntnahmePuffer 1-4
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : IBAE
VERSION : 0.1
VAR
Sorter_MB4503 : "MSepSorterRein";
Sync_BG4527 : "MStartSync";
Weiche_EP1 : "MWeiche_Sorter_EP";
Weiche_EP2 : "MWeiche_Sorter_EP";
Weiche_EP3 : "MWeiche_Sorter_EP";
Weiche_EP4 : "MWeiche_Sorter_EP";
Impuls_BG4526 : "MImpulsGeber";
Ohne_PC_fahren { S7_SetPoint := 'True'} : Bool;
SorterReset { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
END_VAR
VAR_TEMP
ErrQuit : Bool;
ErrAnz : Bool;
Antrieb : Bool;
Stau : Bool;
Start_Ok : Bool;
Error_aktiv : Bool;
Leer : Bool;
Err_DW : DInt;
Err_Bits : Int;
END_VAR
BEGIN
NETWORK
TITLE = Systemzeug
U "DOutbound_Bereich".A01_UH07.AnlageEin;
= #Sorter_MB4503.Dyn.Sk.Auto_akt;
UN "DOutbound_Bereich".A01_UC074.BereichErr;
= #Sorter_MB4503.Dyn.Sk.Bereich_ok;
//Bereichshalt:
CLR;//nicht verbaut
R #Sorter_MB4503.Dyn.Sk.Bereich_ok;
//Sonderbetriebsarten Weichen:
CLR;
= #Weiche_EP1.Dyn.Status.Weichentest_aktiv;
= #Weiche_EP2.Dyn.Status.Weichentest_aktiv;
= #Weiche_EP3.Dyn.Status.Weichentest_aktiv;
= #Weiche_EP4.Dyn.Status.Weichentest_aktiv;
U #Sync_BG4527.Dyn.Status.TeachModus_Aktiv;
= #Weiche_EP1.Dyn.Status.TeachModus_aktiv;
= #Weiche_EP2.Dyn.Status.TeachModus_aktiv;
= #Weiche_EP3.Dyn.Status.TeachModus_aktiv;
= #Weiche_EP4.Dyn.Status.TeachModus_aktiv;
CLR;
= #Sorter_MB4503.Dyn.Error.Korrektur_Modus_aktiv;
L 3474 ;//DLSeps
T "MW174";
L 3478 ;//DLWeichen
T "MW178";
//Nach neuen Daten suchen:
U "1s-Impuls";
= "Weiche_NewData";
NETWORK
TITLE = Linien mit PLC_Ziel anfahren
U #Ohne_PC_fahren;
SPBN En03;
U "MB4503";
ZV "Z102";
L "Z102";
L 1;
<I;
U(;
L #Sorter_MB4503.Separator.Default_Ziel;
L 0;//Bekannt ?
>I;//Ja !
);
SPB En03;
SET;
R "Z102";
L #Sorter_MB4503.Separator.Default_Ziel;
L 0 ;//unbekannt ?
==I;
L 101 ;//Beginn mit Ausfahrziel 1.Puffer
SPB X399;
//Nächste Weiche suchen:
L #Sorter_MB4503.Separator.Default_Ziel;
T "MW200";
CALL "DatenOut"
( SSDB := "MW178" ,
SSDW := 0 ,
PARA := WORD#16#0E00 , //Nach angegeben Datenbyte suchen (Abzweig-Ziel)
SEARCHDATEN := P#M200.0 ,
RE_VAL := "MB199" ,
OUTDATEN := P#M200.0 ,
Position := "MW196"
);
UN "M199.7" ;//Datensatz ist nicht vorhanden
O "M208.0" ;//Letzte Weiche
L 0;//Neubeginn
SPB X400;
X398: CALL "DatenOut"
( SSDB := "MW178" ,
SSDW := 0 ,
PARA := WORD#16#FF00 , //Nächsten Datensatz lesen
SEARCHDATEN := P#M200.0 ,
RE_VAL := "MB199" ,
OUTDATEN := P#M200.0 ,
Position := "MW196"
);
L "MW206";//Weichentyp
L 178;//Sorterweiche ?
<>I;//Nein!
O "M199.2" ;//Ende erreicht
L 0;
SPB X400;
U "M208.5" ;//Weiche für PLC-Ziel disabled !
SPB X398;
L "MW226";
T #Sorter_MB4503.Separator.Default_Ziel;
SPA En03;
//1.Weiche checken:
X399: T "MW200";
CALL "DatenOut"
( SSDB := "MW178" ,
SSDW := 0 ,
PARA := WORD#16#0E00 , //Nach angegeben Datenbyte suchen (Abzweig-Ziel)
SEARCHDATEN := P#M200.0 ,
RE_VAL := "MB199" ,
OUTDATEN := P#M200.0 ,
Position := "MW196"
);
UN "M199.7" ;//Datensatz ist nicht vorhanden
SPB En03;
U "M208.5" ;//Weiche für PLC-Ziel disabled !
SPB X398;
L "MW226";
X400: T #Sorter_MB4503.Separator.Default_Ziel;
En03: NOP 0;
NETWORK
TITLE = Störung aktiv?
CALL "Err_vorhanden" //Störungsanzeige
( Check_DB := 708 ,
Anfangs_DW := DINT#154 ,
Ende_DW := DINT#162 ,
Stoerung := #Error_aktiv ,
ErrDW := #Err_DW ,
ErrBits := #Err_Bits
);
U #Error_aktiv ;//s.o.
= #Error_aktiv ;//Sorter Lager Weichen-Störung (Sorter-Antrieb gestoppt!)
U "BG4527" ;//Verlassen-Sensor
L S5T#250MS;
SA "T340";
NETWORK
TITLE = Störung quittieren UZ7402
U "DOutbound_Bereich".A01_UZ7402.StOk_aktiv;
= #ErrQuit;
NETWORK
TITLE = Sorter-GesamtReset
//Sorter-Reset starten:
U "DEP_OmniFahren".Schleuse_4503.Dyn.Status.Reset_aktiv;//Bei Schleusen-Reset -> Sorter mit resetten!
S "DEP_Sorter".Sorter_MB4503.Dyn.GesamtSorterReset;
NETWORK
TITLE = Separator 4503 vor Sorter
L %DB708.DBW152 ;//Err beim Synchronisieren
L 0;//Störung vorhanden ?
==I;//Nein !
UN #Sync_BG4527.Dyn.Stop;//Rein-Separator stoppen
UN #Error_aktiv;//Sorter Batch Weichen-Störung (Sorter-Antrieb gestoppt!)
UN #Sorter_MB4503.Dyn.GesamtSorterReset_aktiv;
= #Start_Ok;
SET ;//Da Leiste im Sep und Zusatz-Zylinder im Separator -> BT steht sofort sauber im Sep
S #Sorter_MB4503.Dyn.BT_beruhigt;//1. einfahrender BügelTräger ist im Sep
U "T340";
= #Sorter_MB4503.B_AusSep;//Entprellung Verlassen-Sensor
//Triggern / Scanner-Auswertung über EP_Omnifahren (FC3128/3)
//Ziel über Default-Ziel (EP_Ziel_FC, FC3181)
CALL #Sorter_MB4503
( Separator_Nr := 4503 ,
ErrQuit := #ErrQuit ,
B_ImSep := "BG4503" ,
B_Pinsensor := "BG4526" ,
Start_Ok := #Start_Ok ,
Antrieb_aktiv := "MA0325" ,
Antrieb_plus_aktiv := "MA0325" ,
Y_Sep_Auf := "DEP_Zylinder".Sorter_4503.Stat.Ast ,
Sorter_Reset := #SorterReset ,
Error := %DB708.DBW150 ,
Antrieb_start := "DVPtoEP_Antriebe".MA0325.Stat.A_vor ,
Antrieb_stoppen := "DVPtoEP_Antriebe".MA0325.Stat.Stop_vor ,
hStOk := #ErrAnz
);
//Default-Ziel jeden Zyklus neu!:
L 0;
T #Sorter_MB4503.Separator.Default_Ziel;
NETWORK
TITLE = Reset ist aktiv
U #Sorter_MB4503.Dyn.GesamtSorterReset_aktiv;
= "7_HMI_Err_UH07_OB".Sorter_MB4503.Reset_aktiv;
U #Sorter_MB4503.Dyn.GesamtSorterReset_aktiv;
= #Weiche_EP1.Dyn.Ohne_VerklemmKontrolle;
= #Weiche_EP2.Dyn.Ohne_VerklemmKontrolle;
= #Weiche_EP3.Dyn.Ohne_VerklemmKontrolle;
= #Weiche_EP4.Dyn.Ohne_VerklemmKontrolle;
//Diesen Sorterbereich zurücksetzen:
U #SorterReset;//Ein Zyklus
S #Sync_BG4527.Dyn.Reset;
S #Weiche_EP1.Dyn.Status.Reset;
S #Weiche_EP2.Dyn.Status.Reset;
S #Weiche_EP3.Dyn.Status.Reset;
S #Weiche_EP4.Dyn.Status.Reset;
NETWORK
TITLE = Inkremente über Zahnrad-Sensor
CALL #Impuls_BG4526
( Ink_DB := 3483 ,
B_Zaehlen := "BG4526" ,
Antrieb_aktiv := "MA0325" ,
Quit := #ErrQuit ,
Err_Kein_Signal := "7_HMI_Err_UH07_OB".Impulsgeber_4526.Kein_Signal ,
Err_Signal_zu_lang := "7_HMI_Err_UH07_OB".Impulsgeber_4526.Signal_zu_lang
);
U(;
O "7_HMI_Err_UH07_OB".Impulsgeber_4526.Kein_Signal;
O "7_HMI_Err_UH07_OB".Impulsgeber_4526.Signal_zu_lang;
);
UN #ErrQuit;
S "DVPtoEP_Antriebe".MA0325.Stat.Stop_vor;
U(;
O "7_HMI_Err_UH07_OB".Impulsgeber_4526.Kein_Signal;
O "7_HMI_Err_UH07_OB".Impulsgeber_4526.Signal_zu_lang;
);
S #ErrAnz;
NETWORK
TITLE = Trolley synchronisieren BG4527
//Teachen: Ref-Sensor ueber Sync-Sensor
U "BG4527";
UN #Sync_BG4527.Dyn.Refpunkt_ok;//Nur eimalige Auswertung
= #Sync_BG4527.B_RefPunkt;//uebergabe fuer unten
U "MA0325";
L S5T#500ms;
SA "T343";
U "T343";
UN #Sync_BG4527.Dyn.Status.TeachModus_Aktiv;//sonst Probleme bei Doppelimpuls
O;
U "MA0325";
U #Sync_BG4527.Dyn.Status.TeachModus_Aktiv;//sonst Probleme bei Doppelimpuls
= #Antrieb;
//Keine Hauptstrangdaten vorhanden ? (Fuer Sync-Pkt):
L "EP_HS_oF".Datensortkopf.AnzahlEintraege;
L "EP_HS_mF".Datensortkopf.AnzahlEintraege;
+I;
L 0;//Daten vorhanden ?
==I;//Nein !
= "Hauptstrang_leer";//Keine Haupstrangdaten vorhanden -> Verklemm-Errors löschen
U "BG4527";
L s5t#500ms;//Da trotz Entprellung Doppel-Impulse
SA "T344";
U "T344";
= #Sync_BG4527.B_BT_da;
CALL #Sync_BG4527
( Sync_Nr := 4527 ,
ErrQuit := #ErrQuit ,
B_TeachPunk := "BG4504" , //Teach-Sensor
Antrieb_aktiv := #Antrieb ,
Error := %DB708.DBW152 ,
Antrieb_start := "DVPtoEP_Antriebe".MA0325.Stat.A_start ,
hStOk := #ErrAnz
);
U #Sync_BG4527.Dyn.Error.Inkrementalgeber;
S "DVPtoEP_Antriebe".MA0325.Stat.Stop_vor;
//Keine Hauptstrangdaten vorhanden ?:
L "EP_HS_oF".Datensortkopf.AnzahlEintraege;
L "EP_HS_mF".Datensortkopf.AnzahlEintraege;
+I;
L 0;//Daten vorhanden ?
==I;//Nein !
= "Hauptstrang_leer" ;//Keine Haupstrangdaten vorhanden -> Verklemm-Errors löschen
//Spezial, da Sorter-Antrieb über SorterRein-Sep geht!: (Sonst Antriebs-Stop wegen PS)
UN "Hauptstrang_leer" ;//Keine Haupstrangdaten vorhanden -> Verklemm-Errors löschen
O "MB4503" ;//Neuer Sort-Trolley kommt
O "BG4527";
L s5t#20s;
SA "T341";
U "T341" ;//Alle Sort-Trolleys sind ins Puffer ausgefahren
S "DVPtoEP_Antriebe".MA0325.Stat.A_vor;
NETWORK
TITLE = Weiche 4504 / EntnahmePuffer EP1
CALL #Weiche_EP1
( Weichen_Nr := 1 ,
ErrQuit := #ErrQuit ,
Stau_Ausfahrtbereich := 0 , //"DEP_Sensoren".Stau_EP1.Stat.B_Akt
B_Ausfahrt := "BG4504" ,
Antrieb_aktiv := #Antrieb ,
Y_Weiche_abzweigen := "DEP_Zylinder".Weiche_EP1.Stat.Ast ,
Error := %DB708.DBW154 ,
Antrieb_start := "DVPtoEP_Antriebe".MA0325.Stat.A_start ,
Antrieb_stoppen := "DVPtoEP_Antriebe".MA0325.Stat.Stop_vor ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Weiche 4505 / EntnahmePuffer EP2
CALL #Weiche_EP2
( Weichen_Nr := 2 ,
ErrQuit := #ErrQuit ,
Stau_Ausfahrtbereich := 0 , //"DEP_Sensoren".Stau_EP2.Stat.B_Akt
B_Ausfahrt := "BG4505" ,
Antrieb_aktiv := #Antrieb ,
Y_Weiche_abzweigen := "DEP_Zylinder".Weiche_EP2.Stat.Ast ,
Error := %DB708.DBW156 ,
Antrieb_start := "DVPtoEP_Antriebe".MA0325.Stat.A_start ,
Antrieb_stoppen := "DVPtoEP_Antriebe".MA0325.Stat.Stop_vor ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Weiche 4506 / EntnahmePuffer EP3
CALL #Weiche_EP3
( Weichen_Nr := 3 ,
ErrQuit := #ErrQuit ,
Stau_Ausfahrtbereich := 0 , //"DEP_Sensoren".Stau_EP3.Stat.B_Akt
B_Ausfahrt := "BG4506" ,
Antrieb_aktiv := #Antrieb ,
Y_Weiche_abzweigen := "DEP_Zylinder".Weiche_EP3.Stat.Ast ,
Error := %DB708.DBW158 ,
Antrieb_start := "DVPtoEP_Antriebe".MA0325.Stat.A_start ,
Antrieb_stoppen := "DVPtoEP_Antriebe".MA0325.Stat.Stop_vor ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Pseudo-Weiche / EntnahmePuffer EP4
CALL #Weiche_EP4
( Weichen_Nr := 4 ,
ErrQuit := #ErrQuit ,
Stau_Ausfahrtbereich := 0 , //"DEP_Sensoren".Stau_EP4.Stat.B_Akt
B_Ausfahrt := "BG4507" ,
Antrieb_aktiv := #Antrieb ,
Y_Weiche_abzweigen := "DEP_Zylinder".Weiche_EP4.Stat.Ast ,
Error := %DB708.DBW160 ,
Antrieb_start := "DVPtoEP_Antriebe".MA0325.Stat.A_start ,
Antrieb_stoppen := "DVPtoEP_Antriebe".MA0325.Stat.Stop_vor ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Störungen anzeigen UZ7102/7103
U #ErrAnz;
S "DOutbound_Bereich".A01_UZ7102.StOk_blinken;
S "DOutbound_Bereich".A01_UZ7103.StOk_blinken;
NETWORK
TITLE = Ende
BE;
END_FUNCTION_BLOCK
@@ -1,125 +1,222 @@
=== FB 4199: EPtoLP_Antriebe [STL] ===
INTERFACE:
Input:
Output:
InOut:
Static:
MA0326 : "MAntrieb_PowerSave"
MA0327 : "MAntrieb_PowerSave"
MA0330 : "MAntrieb_PowerSave"
MA0331 : "MAntrieb_PowerSave"
MA0332 : "MAntrieb_PowerSave"
MA0333 : "MAntrieb_PowerSave"
MA0062 : "MAntrieb_PowerSave"
MA0063 : "MAntrieb_PowerSave"
MA0064 : "MAntrieb_PowerSave"
Temp:
Auto : Bool // Automatik Linie ist aktiv
Hand : Bool // Hand Linie ist aktiv
BereichErr : Bool // Bereichsstörung -> Antrieb stoppen
QKontroll : Bool // Frequenzumrichter schon 3s Netz EIN
FuKontroll : Bool // Frequenzumrichter schon 3s Netz EIN
Quit : Bool // Motorschutz-Störung quittieren
Qok : Bool // Motorschutz ok
Jog1 : Bool // Geschwindigkeit 1
Jog2 : Bool // Geschwindigkeit 2
Betrieb : Bool // Betriebsart aktiv
FC105_RET : Word // Returnwert von FC105
Antrieb1 : Bool // Antrieb dazuschalten
Antrieb2 : Bool // Antrieb dazuschalten
F1 : Bool // Geschwindigkeit 1 aktiviert
F2 : Bool // Geschwindigkeit 2 aktiviert
F3 : Bool // Geschwindigkeit 3 aktiviert
Constant:
FUNCTION_BLOCK "EPtoLP_Antriebe"
TITLE = Antriebe UC074
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : IBAE
VERSION : 0.1
VAR
MA0326 : "MAntrieb_PowerSave";
MA0327 : "MAntrieb_PowerSave";
MA0330 : "MAntrieb_PowerSave";
MA0331 : "MAntrieb_PowerSave";
MA0332 : "MAntrieb_PowerSave";
MA0333 : "MAntrieb_PowerSave";
MA0062 : "MAntrieb_PowerSave";
MA0063 : "MAntrieb_PowerSave";
MA0064 : "MAntrieb_PowerSave";
END_VAR
--- NW 1: Übergabe des Bereichstatus System UC074/A01 ---
A "DOutbound_Bereich".A01_UH07.Automatik
AN "DOutbound_Bereich".A01_UH07.Handbetrieb
= Auto
CLR
= Hand
A "DOutbound_Bereich".A01_UC074.BereichErr
AN "SGes".Simulation_ohne_HW_aktiv
= BereichErr
A "T194"
= QKontroll
= FuKontroll
A "DOutbound_Bereich".A01_UC074.StOk_aktiv
= Quit
VAR_TEMP
Auto : Bool; // Automatik Linie ist aktiv
Hand : Bool; // Hand Linie ist aktiv
BereichErr : Bool; // Bereichsstörung -> Antrieb stoppen
QKontroll : Bool; // Frequenzumrichter schon 3s Netz EIN
FuKontroll : Bool; // Frequenzumrichter schon 3s Netz EIN
Quit : Bool; // Motorschutz-Störung quittieren
Qok : Bool; // Motorschutz ok
Jog1 : Bool; // Geschwindigkeit 1
Jog2 : Bool; // Geschwindigkeit 2
Betrieb : Bool; // Betriebsart aktiv
FC105_RET : Word; // Returnwert von FC105
Antrieb1 : Bool; // Antrieb dazuschalten
Antrieb2 : Bool; // Antrieb dazuschalten
F1 : Bool; // Geschwindigkeit 1 aktiviert
F2 : Bool; // Geschwindigkeit 2 aktiviert
F3 : Bool; // Geschwindigkeit 3 aktiviert
END_VAR
--- NW 2: MA0326 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0326", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0326", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0326, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
BEGIN
NETWORK
TITLE = Übergabe des Bereichstatus System UC074/A01
U "DOutbound_Bereich".A01_UH07.Automatik;
UN "DOutbound_Bereich".A01_UH07.Handbetrieb;
= #Auto;
CLR;
= #Hand;
U "DOutbound_Bereich".A01_UC074.BereichErr;
UN "SGes".Simulation_ohne_HW_aktiv;
= #BereichErr;
U "T194";
= #QKontroll;
= #FuKontroll;
U "DOutbound_Bereich".A01_UC074.StOk_aktiv;
= #Quit;
NETWORK
TITLE = MA0326
CALL #MA0326
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0326" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0326" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0326
);
--- NW 3: MA0327 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0327", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0327", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0327, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
NETWORK
TITLE = MA0327
CALL #MA0327
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0327" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0327" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0327
);
--- NW 4: MA0330 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0330", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0330", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0330, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
NETWORK
TITLE = MA0330
CALL #MA0330
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0330" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0330" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0330
);
--- NW 5: MA0331 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0331", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0331", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0331, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
NETWORK
TITLE = MA0331
CALL #MA0331
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0331" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0331" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0331
);
--- NW 6: MA0332 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0332", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0332", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0332, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
NETWORK
TITLE = MA0332
CALL #MA0332
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0332" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0332" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0332
);
--- NW 7: MA0333 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0333", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0333", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0333, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
NETWORK
TITLE = MA0333
CALL #MA0333
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0333" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0333" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0333
);
NETWORK
TITLE = Übergabe des Bereichstatus System UH07/A01
U "DOutbound_Bereich".A01_UH07.Automatik;
UN "DOutbound_Bereich".A01_UH07.Handbetrieb;
= #Auto;
--- NW 8: Übergabe des Bereichstatus System UH07/A01 ---
A "DOutbound_Bereich".A01_UH07.Automatik
AN "DOutbound_Bereich".A01_UH07.Handbetrieb
= Auto
CLR;
= #Hand;
CLR
= Hand
U "DOutbound_Bereich".A01_UH07.BereichErr;
UN "SGes".Simulation_ohne_HW_aktiv;
= #BereichErr;
A "DOutbound_Bereich".A01_UH07.BereichErr
AN "SGes".Simulation_ohne_HW_aktiv
= BereichErr
U "T197";
= #QKontroll;
= #FuKontroll;
A "T197"
= QKontroll
= FuKontroll
U "DOutbound_Bereich".A01_UH07.StOk_aktiv;
= #Quit;
A "DOutbound_Bereich".A01_UH07.StOk_aktiv
= Quit
NETWORK
TITLE = MA0062
CALL #MA0062
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0062" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0062" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0062
);
--- NW 9: MA0062 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0062", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0062", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0062, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
NETWORK
TITLE = MA0063
CALL #MA0063
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0063" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0063" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0063
);
NETWORK
TITLE = MA0064
CALL #MA0064
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0064" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0064" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0064
);
--- NW 10: MA0063 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0063", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0063", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0063, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
/// U "M900.0"
/// UN "DLP_Sorter".Sync_BG3306.Dyn.Error.Keine_TeachPktdaten
/// S "MA0064"
NETWORK
TITLE = Ende
BE;
--- NW 11: MA0064 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0064", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0064", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0064, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
// / U "M900.0"
// / UN "DLP_Sorter".Sync_BG3306.Dyn.Error.Keine_TeachPktdaten
// / S "MA0064"
--- NW 12: Ende ---
BE
END_FUNCTION_BLOCK
@@ -1,107 +1,233 @@
=== FB 4190: EPtoLP_Sensoren [STL] ===
INTERFACE:
Input:
Output:
InOut:
Static:
Stau_BG4531 : "MSensoren" // Stau am Sensor Einfahrt MA0326
Stau_BG4513 : "MSensoren" // Stau am Sensor Mitte MA0326
Stau_BG4515 : "MSensoren" // Stau am Sensor Einfahrt MA0327
Stau_BG4517 : "MSensoren" // Stau am Sensor Mitte MA0327
Stau_BG4521 : "MSensoren" // Stau am Sensor Ende MA0327
Stau_BG4455 : "MSensoren" // Stau am Sensor Einfahrt MA0330
Stau_BG4457 : "MSensoren" // Stau am Sensor Einfahrt MA0331
Stau_BG4467 : "MSensoren" // Stau am Sensor Mitte MA0331
Stau_BG4461 : "MSensoren" // Stau am Sensor Einfahrt MA0332
Stau_BG4460 : "MSensoren" // Stau am Sensor Mitte MA0332
Stau_BG4464 : "MSensoren" // Stau am Sensor Einfahrt MA0330
Stau_BG3367 : "MSensoren" // Stau am hinter BST 1
Stau_BG3371 : "MSensoren" // Stau am Sensor Einfahrt MA0063
Stau_BG3372 : "MSensoren" // Stau am Sensor Einfahrt MA0063
Stau_BG3376 : "MSensoren" // Stau am Sensor Einfahrt MA0064
Stau_BG3377 : "MSensoren" // Stau am Sensor Mitte MA0064
Stau_BG3304 : "MSensoren" // Stau am Sensor vor Schleuse MB3305
Temp:
T_Ein : Int // Vorgabe Einschaltverzögerung
T_Aus : Int // Zwischenspeicher Ausschaltverzögerung
F1 : Bool // Geschwindigkeit 1 aktiviert
F2 : Bool // Geschwindigkeit 2 aktiviert
F3 : Bool // Geschwindigkeit 3 aktiviert
ESensor : Bool // Sensoren
Antrieb : Bool
VReal : Real // GeschwindigkeitinReal
Zeit : Int // Zeit für Ausschaltverzögerung LT1100
Aktiv : Bool // Zeit aktivieren
Constant:
FUNCTION_BLOCK "EPtoLP_Sensoren"
TITLE = Sensoren Outbound: EP > LP
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : IBAE
VERSION : 0.1
VAR
Stau_BG4531 : "MSensoren"; // Stau am Sensor Einfahrt MA0326
Stau_BG4513 : "MSensoren"; // Stau am Sensor Mitte MA0326
Stau_BG4515 : "MSensoren"; // Stau am Sensor Einfahrt MA0327
Stau_BG4517 : "MSensoren"; // Stau am Sensor Mitte MA0327
Stau_BG4521 : "MSensoren"; // Stau am Sensor Ende MA0327
Stau_BG4455 : "MSensoren"; // Stau am Sensor Einfahrt MA0330
Stau_BG4457 : "MSensoren"; // Stau am Sensor Einfahrt MA0331
Stau_BG4467 : "MSensoren"; // Stau am Sensor Mitte MA0331
Stau_BG4461 : "MSensoren"; // Stau am Sensor Einfahrt MA0332
Stau_BG4460 : "MSensoren"; // Stau am Sensor Mitte MA0332
Stau_BG4464 : "MSensoren"; // Stau am Sensor Einfahrt MA0330
Stau_BG3367 : "MSensoren"; // Stau am hinter BST 1
Stau_BG3371 : "MSensoren"; // Stau am Sensor Einfahrt MA0063
Stau_BG3372 : "MSensoren"; // Stau am Sensor Einfahrt MA0063
Stau_BG3376 : "MSensoren"; // Stau am Sensor Einfahrt MA0064
Stau_BG3377 : "MSensoren"; // Stau am Sensor Mitte MA0064
Stau_BG3304 : "MSensoren"; // Stau am Sensor vor Schleuse MB3305
END_VAR
--- NW 1: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4531", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
VAR_TEMP
T_Ein : Int; // Vorgabe Einschaltverzögerung
T_Aus : Int; // Zwischenspeicher Ausschaltverzögerung
F1 : Bool; // Geschwindigkeit 1 aktiviert
F2 : Bool; // Geschwindigkeit 2 aktiviert
F3 : Bool; // Geschwindigkeit 3 aktiviert
ESensor : Bool; // Sensoren
Antrieb : Bool;
VReal : Real; // GeschwindigkeitinReal
Zeit : Int; // Zeit für Ausschaltverzögerung LT1100
Aktiv : Bool; // Zeit aktivieren
END_VAR
--- NW 2: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4513", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
BEGIN
NETWORK
TITLE = Stau am Sensor nach Schleuse 4512
//Sensoren entprellen
CALL #Stau_BG4531
( ESensor := "BG4531" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau am Sensor nach Schleuse 4532
//Sensoren entprellen
CALL #Stau_BG4513
( ESensor := "BG4513" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 3: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4515", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Stau am Sensor Einfahrt MA0327
//Sensoren entprellen
CALL #Stau_BG4515
( ESensor := "BG4515" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau am Sensor Mitte MA0327
//Sensoren entprellen
CALL #Stau_BG4517
( ESensor := "BG4517" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 4: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4517", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Stau am Sensor Ende MA0327
//Sensoren entprellen
CALL #Stau_BG4521
( ESensor := "BG4521" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau am Sensor Einfahrt MA0330
//Sensoren entprellen
CALL #Stau_BG4455
( ESensor := "BG4455" ,
T_Ein := 1 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 5: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4521", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Stau am Sensor Einfahrt MA0331
//Sensoren entprellen
CALL #Stau_BG4457
( ESensor := "BG4457" ,
T_Ein := 1 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau am Sensor Mitte MA0331
//Sensoren entprellen
CALL #Stau_BG4467
( ESensor := "BG4467" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 6: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4455", T_Ein:=1, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Stau am Sensor Einfahrt MA0332
//Sensoren entprellen
CALL #Stau_BG4461
( ESensor := "BG4461" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau am Sensor Ende MA0332
//Sensoren entprellen
CALL #Stau_BG4460
( ESensor := "BG4460" ,
T_Ein := 1 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 7: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4457", T_Ein:=1, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Stau am Sensor Anfang MA0333
//Sensoren entprellen
CALL #Stau_BG4464
( ESensor := "BG4464" ,
T_Ein := 1 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau am Sensor hinter BST1
//Sensoren entprellen
CALL #Stau_BG3367
( ESensor := "BG3367" ,
T_Ein := 1 ,
T_Aus := 30 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 8: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4467", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Stau am Sensor vor MA0063
//Sensoren entprellen
CALL #Stau_BG3371
( ESensor := "BG3371" ,
T_Ein := 1 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau am Sensor Anfang MA0063
//Sensoren entprellen
CALL #Stau_BG3372
( ESensor := "BG3372" ,
T_Ein := 1 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 9: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4461", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Stau am Sensor Einfahrt MA0064
//Sensoren entprellen
CALL #Stau_BG3376
( ESensor := "BG3376" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau am Sensor Mitte MA0064
//Sensoren entprellen
CALL #Stau_BG3377
( ESensor := "BG3377" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 10: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4460", T_Ein:=1, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Stau am Sensor Mitte MA0064 (vor Schleuse 3305)
//Sensoren entprellen
CALL #Stau_BG3304
( ESensor := "BG3304" ,
T_Ein := 1 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Ende
BE;
--- NW 11: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4464", T_Ein:=1, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
--- NW 12: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3367", T_Ein:=1, T_Aus:=30, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
--- NW 13: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3371", T_Ein:=1, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
--- NW 14: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3372", T_Ein:=1, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
--- NW 15: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3376", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
--- NW 16: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3377", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
--- NW 17: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3304", T_Ein:=1, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
--- NW 18: Ende ---
BE
END_FUNCTION_BLOCK
@@ -1,85 +1,152 @@
=== FB 4192: EPtoLP_Zylinder [STL] ===
INTERFACE:
Input:
Output:
InOut:
Static:
Schleuse_4512 : "MZylinder" //
Schleuse_4532 : "MZylinder"
Schleuse_4516 : "MZylinder" //
Schleuse_4522 : "MZylinder" //
Schleuse_4520 : "MZylinder"
Schleuse_4466 : "MZylinder"
Schleuse_4462 : "MZylinder"
Schleuse_4463 : "MZylinder"
Schleuse_3370 : "MZylinder"
Schleuse_3303 : "MZylinder"
Temp:
Auto : Bool // Automatik ist aktiv
Hand : Bool // Hand ist aktiv
ZylAst : Bool // Zylinder ansteuern
Constant:
FUNCTION_BLOCK "EPtoLP_Zylinder"
TITLE = Zylinder Outbound Entnahmepuffer > Leerpuffer
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : AE
VERSION : 0.1
VAR
Schleuse_4512 : "MZylinder"; //
Schleuse_4532 : "MZylinder";
Schleuse_4516 : "MZylinder"; //
Schleuse_4522 : "MZylinder"; //
Schleuse_4520 : "MZylinder";
Schleuse_4466 : "MZylinder";
Schleuse_4462 : "MZylinder";
Schleuse_4463 : "MZylinder";
Schleuse_3370 : "MZylinder";
Schleuse_3303 : "MZylinder";
END_VAR
--- NW 1: Übergabe des Bereichstatus System UC074/A01 ---
A "DOutbound_Bereich".A01_UH07.Automatik
AN "DOutbound_Bereich".A01_UH07.Handbetrieb
= Auto
A "DOutbound_Bereich".A01_UC074.BereichErr
AN "SGes".Simulation_ohne_HW_aktiv
JC Next // Zylinder-Stellung nicht mehr ändern
VAR_TEMP
Auto : Bool; // Automatik ist aktiv
Hand : Bool; // Hand ist aktiv
ZylAst : Bool; // Zylinder ansteuern
END_VAR
--- NW 2: Schleuse_4512 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB4512", ZylGst:=?)
BEGIN
NETWORK
TITLE = Übergabe des Bereichstatus System UC074/A01
U "DOutbound_Bereich".A01_UH07.Automatik;
UN "DOutbound_Bereich".A01_UH07.Handbetrieb;
= #Auto;
U "DOutbound_Bereich".A01_UC074.BereichErr;
UN "SGes".Simulation_ohne_HW_aktiv;
SPB Next ;//Zylinder-Stellung nicht mehr ändern
--- NW 3: Schleuse_4532 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB4532", ZylGst:=?)
NETWORK
TITLE = Schleuse_4512
CALL #Schleuse_4512
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB4512"
);
NETWORK
TITLE = Schleuse_4532
CALL #Schleuse_4532
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB4532"
);
--- NW 4: Schleuse_4516 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB4516", ZylGst:=?)
NETWORK
TITLE = Schleuse_4516
CALL #Schleuse_4516
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB4516"
);
NETWORK
TITLE = Schleuse_4522
CALL #Schleuse_4522
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB4522"
);
--- NW 5: Schleuse_4522 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB4522", ZylGst:=?)
NETWORK
TITLE = Schleuse_4520
CALL #Schleuse_4520
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB4520"
);
NETWORK
TITLE = Schleuse_4466
CALL #Schleuse_4466
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB4466"
);
--- NW 6: Schleuse_4520 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB4520", ZylGst:=?)
NETWORK
TITLE = Schleuse_4462
CALL #Schleuse_4462
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB4462"
);
NETWORK
TITLE = Übergabe des Bereichstatus System UH07/A01
Next: U "DOutbound_Bereich".A01_UH07.Automatik;
UN "DOutbound_Bereich".A01_UH07.Handbetrieb;
= #Auto;
--- NW 7: Schleuse_4466 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB4466", ZylGst:=?)
U "DOutbound_Bereich".A01_UH07.BereichErr;
UN "SGes".Simulation_ohne_HW_aktiv;
SPB Next1 ;//Zylinder-Stellung nicht mehr ändern
NETWORK
TITLE = Schleuse_4463
CALL #Schleuse_4463
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB4463"
);
--- NW 8: Schleuse_4462 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB4462", ZylGst:=?)
NETWORK
TITLE = Schleuse_3370
CALL #Schleuse_3370
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3370"
);
NETWORK
TITLE = Schleuse_3303
CALL #Schleuse_3303
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3303"
);
--- NW 9: Übergabe des Bereichstatus System UH07/A01 ---
Next: A "DOutbound_Bereich".A01_UH07.Automatik
AN "DOutbound_Bereich".A01_UH07.Handbetrieb
= Auto
NETWORK
TITLE = Ende
Next1: BE;
A "DOutbound_Bereich".A01_UH07.BereichErr
AN "SGes".Simulation_ohne_HW_aktiv
JC Next1 // Zylinder-Stellung nicht mehr ändern
--- NW 10: Schleuse_4463 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB4463", ZylGst:=?)
--- NW 11: Schleuse_3370 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3370", ZylGst:=?)
--- NW 12: Schleuse_3303 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3303", ZylGst:=?)
--- NW 13: Ende ---
Next1: BE
END_FUNCTION_BLOCK
@@ -1,23 +1,22 @@
=== FC 4100: EPtoLP_Bereich [STL] ===
INTERFACE:
Input:
Output:
InOut:
Temp:
Constant:
Return:
Ret_Val : Void
FUNCTION "EPtoLP_Bereich" : Void
TITLE = Bereich Outbound: EP > LP
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
--- NW 1: Baustein-Aufrufe ---
CALL FB "EPtoLP_Sensoren" ,
BEGIN
NETWORK
TITLE = Baustein-Aufrufe
CALL "EPtoLP_Sensoren", "DEPtoLP_Sensoren";
CALL FB "EPtoLP_OmniFahren" ,
CALL "EPtoLP_OmniFahren", "DEPtoLP_OmniFahren";
CALL FB "EPtoLP_Zylinder" ,
CALL "EPtoLP_Zylinder", "DEPtoLP_Zylinder";
CALL FB "EPtoLP_Antriebe" ,
CALL "EPtoLP_Antriebe", "DEPtoLP_Antriebe";
NETWORK
TITLE = Ende
BE;
--- NW 2: Ende ---
BE
END_FUNCTION
@@ -1,38 +1,41 @@
=== FC 4182: EPtoLP_Draussen [STL] ===
INTERFACE:
Input:
Output:
InOut:
Temp:
Error.Bit : Bool
Constant:
Return:
Ret_Val : Void
--- NW 1: Rückmeldung ---
SET // Rückmeldungen erst mal resetten
R "M180.6" // Weiterfahrt von Ziel-FC erlaubt
FUNCTION "EPtoLP_Draussen" : Void
TITLE = Draussen-FC: EP > LP
{ S7_Optimized_Access := 'FALSE' ; S7_Pass_Registers := 'TRUE' }
AUTHOR : AE
VERSION : 0.1
VAR_TEMP
"Error.Bit" : Bool;
END_VAR
--- NW 2: Schleuse 4466 (Vor ByPass vom VP): Ausgefahren ? ---
L "MW190"
L 4466 // Aufruf von Schleuse 4466?
<>I // Nein!
JC X4466E
BEGIN
NETWORK
TITLE = Rückmeldung
SET;//Rückmeldungen erst mal resetten
R "M180.6";//Weiterfahrt von Ziel-FC erlaubt
L "DVPtoEP_OmniFahren".Schleuse_4443.Dyn.Weichen_Ziel
L 16#4461 // Abzweig ?
<>I // Nein !
BEC
NETWORK
TITLE = Schleuse 4466 (Vor ByPass vom VP): Ausgefahren ?
L "MW190";
L 4466 ;//Aufruf von Schleuse 4466?
<>I;//Nein!
SPB X4466E;
// Partner-Trolley will zu LP fahren:
// Bei Partner (Schleuse 4443) wieder mit Schritt 0 beginnen (erneuter Ziel-FC-Aufruf)
L 0
T "DVPtoEP_OmniFahren".Schleuse_4443.Dyn.Sk.Akt_Schritt
L "DVPtoEP_OmniFahren".Schleuse_4443.Dyn.Weichen_Ziel;
L 16#4461;//Abzweig ?
<>I;//Nein !
BEB;
X4466E: NOP 0
//Partner-Trolley will zu LP fahren:
//Bei Partner (Schleuse 4443) wieder mit Schritt 0 beginnen (erneuter Ziel-FC-Aufruf)
L 0;
T "DVPtoEP_OmniFahren".Schleuse_4443.Dyn.Sk.Akt_Schritt;
X4466E: NOP 0;
--- NW 3: Ende ---
BE
NETWORK
TITLE = Ende
BE;
END_FUNCTION
@@ -1,303 +1,568 @@
=== FB 4128: EPtoLP_OmniFahren [STL] ===
INTERFACE:
Input:
Output:
InOut:
Static:
Schleuse_4512 : "MHMOmniSchleuse_Plus"
Schleuse_4532 : "MHMOmniSchleuse_Plus"
Schleuse_4516 : "MHMOmniSchleuse"
Schleuse_4520 : "MHMOmniSchleuse"
Bereich_4456 : "MHMOmniBereich_Plus"
Schleuse_4466 : "MHMOmniSchleuse_Plus"
Schleuse_4462 : "MHMOmniSchleuse_Plus"
Bereich_4465 : "MHMOmniBereich_Plus"
Schleuse_3370 : "MHMOmniSchleuse"
Bereich_3373 : "MHMOmniBereich_Plus"
Schleuse_3303 : "MHMOmniSchleuse"
Schleuse_4522 : "MHMOmniSchleuse"
Schleuse_4463 : "MHMOmniSchleuse"
Übergang_4514 : "MHMÜbergang_ohne_Schleuse"
Trolleys_starten : Struct
Flanke : Bool
Wartezeit_aktiv : Bool
Timer_Wartenzeit : Int
Temp:
ErrQuit : Bool
ErrAnz : Bool
Stau_raus : Bool
Start_ok : Bool
B_aktiv : Bool
B_vor_Schleuse : Bool
B_nach_Schleuse : Bool
Antrieb_aktiv : Bool
Antrieb_start : Bool
Antrieb_stop : Bool
Fahren_Ok : Bool
Antrieb_nicht_stoppen : Bool
Constant:
--- NW 1: Systemzeug ---
// Verschiedene Bereiche:
A "DOutbound_Bereich".A01_UH07.AnlageEin
= Schleuse_4512.Dyn.Sk.Auto_akt
= Schleuse_4532.Dyn.Sk.Auto_akt
= Schleuse_4516.Dyn.Sk.Auto_akt
= Schleuse_4522.Dyn.Sk.Auto_akt
= Schleuse_4520.Dyn.Sk.Auto_akt
= Bereich_4456.Dyn.Sk.Auto_akt
= Schleuse_4466.Dyn.Sk.Auto_akt
= Schleuse_4462.Dyn.Sk.Auto_akt
= Schleuse_4463.Dyn.Sk.Auto_akt
= Bereich_4465.Dyn.Sk.Auto_akt
= Schleuse_3370.Dyn.Sk.Auto_akt
= Bereich_3373.Dyn.Sk.Auto_akt
= Schleuse_3303.Dyn.Sk.Auto_akt
AN "DOutbound_Bereich".A01_UC074.BereichErr
= Schleuse_4512.Dyn.Sk.Bereich_ok
= Schleuse_4532.Dyn.Sk.Bereich_ok
= Schleuse_4516.Dyn.Sk.Bereich_ok
= Schleuse_4522.Dyn.Sk.Bereich_ok
= Schleuse_4520.Dyn.Sk.Bereich_ok
= Bereich_4456.Dyn.Sk.Bereich_ok
= Schleuse_4466.Dyn.Sk.Bereich_ok
= Schleuse_4462.Dyn.Sk.Bereich_ok
= Schleuse_4463.Dyn.Sk.Bereich_ok
= Bereich_4465.Dyn.Sk.Bereich_ok
AN "DOutbound_Bereich".A01_UH07.BereichErr
= Schleuse_3370.Dyn.Sk.Bereich_ok
= Bereich_3373.Dyn.Sk.Bereich_ok
= Schleuse_3303.Dyn.Sk.Bereich_ok
--- NW 2: Störungen quittieren UZ7402/7403 ---
A "DOutbound_Bereich".A01_UZ7402.StOk_aktiv
O "DOutbound_Bereich".A01_UZ7403.StOk_aktiv
O "DOutbound_Bereich".A01_UC074.StOk_aktiv
O "DOutbound_Bereich".A01_UH07.StOk_aktiv
= ErrQuit
--- NW 3: Schleuse 4512 ---
CALL FB "None" , (Schleusen_Nr:=4512, ErrQuit:=ErrQuit, B_VorSchleuse:="BG4511", B_InSchleuse:="BG4512", B_Zähl:="BG4531", B_Stau_raus:="DEPtoLP_Sensoren".Stau_BG4531.Stat.B_Akt, Start_Ok:=1, Antrieb_Schleuse_aktiv:="MA0326", Antrieb_plus_aktiv:=?, Schleuse_geöffnet:="MB4512", RestZeit_Bereich_plus:=?, Y_Schleuse_Auf:="DEPtoLP_Zylinder".Schleuse_4512.Stat.Ast, Error:=DB708.DBW576, Antrieb_Schleuse_vor:="DEPtoLP_Antriebe".MA0326.Stat.A_vor, Antrieb_Schleuse_start:="DEPtoLP_Antriebe".MA0326.Stat.A_start, Antrieb_Schleuse_stop:="DEPtoLP_Antriebe".MA0326.Stat.Stop_vor, Antrieb_Schleuse_PS:="DEPtoLP_Antriebe".MA0326.Stat.A_PS, Antrieb_plus_vor:=?, Antrieb_plus_start:=?, hStOk:=ErrAnz) // Identisch
--- NW 4: Schleuse 4532 ---
A "DEPtoLP_Sensoren".Stau_BG4513.Stat.B_Akt
// / O "DEP>LP_Sensoren".Stau_BG4515.Stat.B_Akt
= Stau_raus
CALL FB "None" , (Schleusen_Nr:=4532, ErrQuit:=ErrQuit, B_VorSchleuse:="BG4531", B_InSchleuse:="BG4532", B_Zähl:="BG4513", B_Stau_raus:=Stau_raus, Start_Ok:=1, Antrieb_Schleuse_aktiv:="MA0326", Antrieb_plus_aktiv:="MA0326", Schleuse_geöffnet:="MB4532", RestZeit_Bereich_plus:=?, Y_Schleuse_Auf:="DEPtoLP_Zylinder".Schleuse_4532.Stat.Ast, Error:=DB708.DBW578, Antrieb_Schleuse_vor:="DEPtoLP_Antriebe".MA0326.Stat.A_vor, Antrieb_Schleuse_start:="DEPtoLP_Antriebe".MA0326.Stat.A_start, Antrieb_Schleuse_stop:="DEPtoLP_Antriebe".MA0326.Stat.Stop_vor, Antrieb_Schleuse_PS:="DEPtoLP_Antriebe".MA0326.Stat.A_PS, Antrieb_plus_vor:=?, Antrieb_plus_start:=?, hStOk:=ErrAnz)
--- NW 5: MA0326 / Übergang 4514 ---
CALL FB "None" , (ErrQuit:=ErrQuit, B_Anfang:="BG4513", B_Am_Übergang:="BG4514", B_Stau_Antrieb_plus:="BG4515", Antrieb_aktiv:="MA0326", Antrieb_plus_aktiv:="MA0327", Antrieb_vor:="DEPtoLP_Antriebe".MA0326.Stat.A_vor, Antrieb_start:="DEPtoLP_Antriebe".MA0326.Stat.A_start, Antrieb_stop:="DEPtoLP_Antriebe".MA0326.Stat.A_PS, Antrieb_plus_vor:="DEPtoLP_Antriebe".MA0327.Stat.A_vor, Antrieb_plus_start:="DEPtoLP_Antriebe".MA0327.Stat.A_start)
--- NW 6: Schleuse 4516 ---
CALL FB "None" , (Schleusen_Nr:=4516, ErrQuit:=ErrQuit, B_VorSchleuse:="BG4515", B_InSchleuse:="BG4516", B_AusSchleuse:="BG4517", B_Stau_raus:="DEPtoLP_Sensoren".Stau_BG4517.Stat.B_Akt, Start_Ok:=1, Antrieb_Schleuse_aktiv:="MA0327", Antrieb_plus_aktiv:="MA0327", Schleuse_geöffnet:="MB4516", RestZeit_Bereich_plus:=?, Y_Schleuse_Auf:="DEPtoLP_Zylinder".Schleuse_4516.Stat.Ast, Error:=DB708.DBW566, Antrieb_Schleuse_vor:="DEPtoLP_Antriebe".MA0327.Stat.A_vor, Antrieb_Schleuse_start:="DEPtoLP_Antriebe".MA0327.Stat.A_start, Antrieb_Schleuse_stop:="DEPtoLP_Antriebe".MA0327.Stat.Stop_vor, Antrieb_Schleuse_PS:="DEPtoLP_Antriebe".MA0327.Stat.A_PS, Antrieb_plus_vor:=?, Antrieb_plus_start:=?, hStOk:=ErrAnz) // Identisch
--- NW 7: Schleuse 4522 ---
CALL FB "None" , (Schleusen_Nr:=4522, ErrQuit:=ErrQuit, B_VorSchleuse:="BG4517", B_InSchleuse:="BG4522", B_AusSchleuse:="BG4521", B_Stau_raus:="DEPtoLP_Sensoren".Stau_BG4521.Stat.B_Akt, Start_Ok:=1, Antrieb_Schleuse_aktiv:="MA0327", Antrieb_plus_aktiv:="MA0327", Schleuse_geöffnet:="MB4522", RestZeit_Bereich_plus:=?, Y_Schleuse_Auf:="DEPtoLP_Zylinder".Schleuse_4522.Stat.Ast, Error:=DB708.DBW582, Antrieb_Schleuse_vor:="DEPtoLP_Antriebe".MA0327.Stat.A_vor, Antrieb_Schleuse_start:="DEPtoLP_Antriebe".MA0327.Stat.A_start, Antrieb_Schleuse_stop:="DEPtoLP_Antriebe".MA0327.Stat.Stop_vor, Antrieb_Schleuse_PS:="DEPtoLP_Antriebe".MA0327.Stat.A_PS, Antrieb_plus_vor:=?, Antrieb_plus_start:=?, hStOk:=ErrAnz) // Identisch
--- NW 8: Wartezeit bis erneuter Trolleystart sinnvoll (wegen Staubildung) ---
A "MB4520"
Rise Trolleys_starten.Flanke
S Trolleys_starten.Wartezeit_aktiv
JCN Warten // Negierter Sprung
L 15 // Wartezeit in Sekunden
T Trolleys_starten.Timer_Wartenzeit
Warten: AN Trolleys_starten.Wartezeit_aktiv
O
A "MB4520" // Schleuse offen
AN "MA0327" // Aber Trolley fährt nicht
ON "1s-Impuls"
JC Wait
L Trolleys_starten.Timer_Wartenzeit
+ -1
T Trolleys_starten.Timer_Wartenzeit
L 0
>I
JC Wait
SET
R Trolleys_starten.Wartezeit_aktiv
Wait: NOP 0
--- NW 9: Schleuse 4520 ---
AN Trolleys_starten.Wartezeit_aktiv
= Fahren_Ok
A "BG4517"
O "BG4521"
= B_vor_Schleuse
CALL FB "None" , (Schleusen_Nr:=4520, ErrQuit:=ErrQuit, B_VorSchleuse:=B_vor_Schleuse, B_InSchleuse:="BG4520", B_AusSchleuse:="BG4455", B_Stau_raus:="DEPtoLP_Sensoren".Stau_BG4455.Stat.B_Akt, Start_Ok:=Fahren_Ok, Antrieb_Schleuse_aktiv:="MA0327", Antrieb_plus_aktiv:="MA0330", Schleuse_geöffnet:="MB4520", RestZeit_Bereich_plus:=Bereich_4456.Dyn.Restzeit, Y_Schleuse_Auf:="DEPtoLP_Zylinder".Schleuse_4520.Stat.Ast, Error:=DB708.DBW568, Antrieb_Schleuse_vor:="DEPtoLP_Antriebe".MA0327.Stat.A_vor, Antrieb_Schleuse_start:="DEPtoLP_Antriebe".MA0327.Stat.A_start, Antrieb_Schleuse_stop:="DEPtoLP_Antriebe".MA0327.Stat.Stop_vor, Antrieb_Schleuse_PS:="DEPtoLP_Antriebe".MA0327.Stat.A_PS, Antrieb_plus_vor:=Bereich_4456.Dyn.Status.Trolley_kommt_in_Bereich, Antrieb_plus_start:=?, hStOk:=ErrAnz)
--- NW 10: Störungen anzeigen UZ7402/7403 ---
A ErrAnz
R ErrAnz
S "DOutbound_Bereich".A01_UZ7402.StOk_blinken
S "DOutbound_Bereich".A01_UZ7403.StOk_blinken
S "DOutbound_Bereich".A01_UC074.StOk_blinken
S "DOutbound_Bereich".A01_UH07.StOk_blinken
--- NW 11: Störungen quittieren UZ7402/7401 ---
A "DOutbound_Bereich".A01_UZ7402.StOk_aktiv
O "DOutbound_Bereich".A01_UZ7401.StOk_aktiv
O "DOutbound_Bereich".A01_UC074.StOk_aktiv
O "DOutbound_Bereich".A01_UH07.StOk_aktiv
= ErrQuit
--- NW 12: Bereich 4456 ---
A "MB4520"
A "BG4455"
= B_vor_Schleuse
A "DEPtoLP_Sensoren".Stau_BG4457.Stat.B_Akt
O "DEPtoLP_Sensoren".Stau_BG4467.Stat.B_Akt
= Stau_raus
CALL FB "None" , (Bereichs_Nr:=4456, ErrQuit:=ErrQuit, B_BereichsAnfang:=B_vor_Schleuse, B_BereichsEnde:="BG4456", B_Zähl:="BG4467", B_Stau_raus:=Stau_raus, Start_Ok:=1, Antrieb_Bereich_aktiv:="MA0330", Antrieb_plus_aktiv:="MA0331", RestZeit_Bereich_plus:=?, Antrieb_Bereich_vor:="DEPtoLP_Antriebe".MA0330.Stat.A_vor, Antrieb_Bereich_stop:="DEPtoLP_Antriebe".MA0330.Stat.Stop_vor, Error:=DB708.DBW478, Antrieb_Bereich_start:="DEPtoLP_Antriebe".MA0330.Stat.A_start, Antrieb_plus_vor:="DEPtoLP_Antriebe".MA0331.Stat.A_vor, Antrieb_plus_start:="DEPtoLP_Antriebe".MA0331.Stat.A_start, Antrieb_minus_vor:="DEPtoLP_Antriebe".MA0327.Stat.A_vor, hStOk:=ErrAnz)
--- NW 13: Störungen anzeigen UZ7402/7401 ---
A ErrAnz
R ErrAnz
S "DOutbound_Bereich".A01_UZ7402.StOk_blinken
S "DOutbound_Bereich".A01_UZ7401.StOk_blinken
S "DOutbound_Bereich".A01_UC074.StOk_blinken
S "DOutbound_Bereich".A01_UH07.StOk_blinken
--- NW 14: Störungen quittieren UZ7401 ---
A "DOutbound_Bereich".A01_UZ7401.StOk_aktiv
O "DOutbound_Bereich".A01_UC074.StOk_aktiv
O "DOutbound_Bereich".A01_UH07.StOk_aktiv
= ErrQuit
--- NW 15: Schleuse 4466 ---
AN "MB4445" // Weiche Einfahrt ByPass
AN "MB4457"
= Start_ok
CALL FB "None" , (Schleusen_Nr:=4466, ErrQuit:=ErrQuit, B_VorSchleuse:="BG4457", B_InSchleuse:="BG4466", B_Zähl:="BG4461", B_Stau_raus:="DEPtoLP_Sensoren".Stau_BG4461.Stat.B_Akt, Start_Ok:=Start_ok, Antrieb_Schleuse_aktiv:="MA0331", Antrieb_plus_aktiv:="MA0332", Schleuse_geöffnet:="MB4466", RestZeit_Bereich_plus:=?, Y_Schleuse_Auf:="DEPtoLP_Zylinder".Schleuse_4466.Stat.Ast, Error:=DB708.DBW562, Antrieb_Schleuse_vor:="DEPtoLP_Antriebe".MA0331.Stat.A_vor, Antrieb_Schleuse_start:="DEPtoLP_Antriebe".MA0331.Stat.A_start, Antrieb_Schleuse_stop:="DEPtoLP_Antriebe".MA0331.Stat.Stop_vor, Antrieb_Schleuse_PS:="DEPtoLP_Antriebe".MA0331.Stat.A_PS, Antrieb_plus_vor:="DEPtoLP_Antriebe".MA0332.Stat.A_vor, Antrieb_plus_start:="DEPtoLP_Antriebe".MA0332.Stat.A_start, hStOk:=ErrAnz)
--- NW 16: Schleuse 4462 ---
CALL FB "None" , (Schleusen_Nr:=4462, ErrQuit:=ErrQuit, B_VorSchleuse:="BG4461", B_InSchleuse:="BG4462", B_Zähl:="BG4460", B_Stau_raus:="DEPtoLP_Sensoren".Stau_BG4460.Stat.B_Akt, Start_Ok:=1, Antrieb_Schleuse_aktiv:="MA0332", Antrieb_plus_aktiv:=?, Schleuse_geöffnet:="MB4462", RestZeit_Bereich_plus:=?, Y_Schleuse_Auf:="DEPtoLP_Zylinder".Schleuse_4462.Stat.Ast, Error:=DB708.DBW560, Antrieb_Schleuse_vor:="DEPtoLP_Antriebe".MA0332.Stat.A_vor, Antrieb_Schleuse_start:="DEPtoLP_Antriebe".MA0332.Stat.A_start, Antrieb_Schleuse_stop:="DEPtoLP_Antriebe".MA0332.Stat.Stop_vor, Antrieb_Schleuse_PS:="DEPtoLP_Antriebe".MA0332.Stat.A_PS, Antrieb_plus_vor:=?, Antrieb_plus_start:=?, hStOk:=ErrAnz)
--- NW 17: Schleuse 4463 ---
CALL FB "None" , (Schleusen_Nr:=4463, ErrQuit:=ErrQuit, B_VorSchleuse:="BG4460", B_InSchleuse:="BG4463", B_AusSchleuse:="BG4464", B_Stau_raus:="DEPtoLP_Sensoren".Stau_BG4464.Stat.B_Akt, Start_Ok:=1, Antrieb_Schleuse_aktiv:="MA0332", Antrieb_plus_aktiv:="MA0333", Schleuse_geöffnet:="MB4463", RestZeit_Bereich_plus:=Bereich_4465.Dyn.Restzeit, Y_Schleuse_Auf:="DEPtoLP_Zylinder".Schleuse_4463.Stat.Ast, Error:=DB708.DBW584, Antrieb_Schleuse_vor:="DEPtoLP_Antriebe".MA0332.Stat.A_vor, Antrieb_Schleuse_start:="DEPtoLP_Antriebe".MA0332.Stat.A_start, Antrieb_Schleuse_stop:="DEPtoLP_Antriebe".MA0332.Stat.Stop_vor, Antrieb_Schleuse_PS:="DEPtoLP_Antriebe".MA0332.Stat.A_PS, Antrieb_plus_vor:=Bereich_4465.Dyn.Status.Trolley_kommt_in_Bereich, Antrieb_plus_start:=?, hStOk:=ErrAnz)
--- NW 18: Bereich 4465 (vor BST 1) ---
AN "7_HMI_Err_UH07_OB".System.Gesamt_Feueralarm_Halle3
AN "7_HMI_Err_UH07_OB".System.Gesamt_Feueralarm_Halle4
AN "7_HMI_Err_UH07_OB".System.BST1_Feueralarm
AN "7_HMI_Err_UH07_OB".System.BST1_Geschlossen
AN "7_HMI_Err_UH07_OB".System."BST1_Störung"
A Schleuse_3370.Dyn.Sk.Bereich_ok
= Fahren_Ok
CALL FB "None" , (Bereichs_Nr:=4465, ErrQuit:=ErrQuit, B_BereichsAnfang:="BG4464", B_BereichsEnde:="BG4465", B_Zähl:="BG3367", B_Stau_raus:="DEPtoLP_Sensoren".Stau_BG3367.Stat.B_Akt, Start_Ok:=Fahren_Ok, Antrieb_Bereich_aktiv:="MA0333", Antrieb_plus_aktiv:="MA0062", RestZeit_Bereich_plus:=?, Antrieb_Bereich_vor:="DEPtoLP_Antriebe".MA0333.Stat.A_vor, Antrieb_Bereich_stop:="DEPtoLP_Antriebe".MA0333.Stat.Stop_vor, Error:=DB708.DBW480, Antrieb_Bereich_start:="DEPtoLP_Antriebe".MA0333.Stat.A_start, Antrieb_plus_vor:="DEPtoLP_Antriebe".MA0062.Stat.A_vor, Antrieb_plus_start:="DEPtoLP_Antriebe".MA0062.Stat.A_start, Antrieb_minus_vor:="DEPtoLP_Antriebe".MA0332.Stat.A_vor, hStOk:=ErrAnz)
--- NW 19: Störungen anzeigen UZ7401 ---
A ErrAnz
R ErrAnz
S "DOutbound_Bereich".A01_UZ7401.StOk_blinken
S "DOutbound_Bereich".A01_UC074.StOk_blinken
S "DOutbound_Bereich".A01_UH07.StOk_blinken
--- NW 20: Störungen quittieren UZ0701 ---
A "DOutbound_Bereich".A01_UZ0701.StOk_aktiv
O "DOutbound_Bereich".A01_UH07.StOk_aktiv
= ErrQuit
--- NW 21: Schleuse 3370 (hinter BST 1) ---
// Hinter BST freiräumen:
A Bereich_4465.Dyn.Status."Trolley_fährt_aus"
O
A "DEPtoLP_Sensoren".Stau_BG3367.Stat.B_Akt
AN "BG3370"
S "DEPtoLP_Antriebe".MA0062.Stat.A_vor
A "DEPtoLP_Sensoren".Stau_BG3371.Stat.B_Akt
O "DEPtoLP_Sensoren".Stau_BG3372.Stat.B_Akt
O "DEPtoLP_Sensoren".Stau_BG3377.Stat.B_Akt // Stau hinter ASF im EG
= Stau_raus
CALL FB "None" , (Schleusen_Nr:=3370, ErrQuit:=ErrQuit, B_VorSchleuse:="DEPtoLP_Sensoren".Stau_BG3367.Stat.B_Akt, B_InSchleuse:="BG3370", B_AusSchleuse:="BG3372", B_Stau_raus:=Stau_raus, Start_Ok:=1, Antrieb_Schleuse_aktiv:="MA0062", Antrieb_plus_aktiv:="MA0063", Schleuse_geöffnet:="MB3370", RestZeit_Bereich_plus:=Bereich_3373.Dyn.Restzeit, Y_Schleuse_Auf:="DEPtoLP_Zylinder".Schleuse_3370.Stat.Ast, Error:=DB708.DBW532, Antrieb_Schleuse_vor:="DEPtoLP_Antriebe".MA0062.Stat.A_vor, Antrieb_Schleuse_start:="DEPtoLP_Antriebe".MA0062.Stat.A_start, Antrieb_Schleuse_stop:="DEPtoLP_Antriebe".MA0062.Stat.Stop_vor, Antrieb_Schleuse_PS:="DEPtoLP_Antriebe".MA0062.Stat.A_PS, Antrieb_plus_vor:=Bereich_3373.Dyn.Status.Trolley_kommt_in_Bereich, Antrieb_plus_start:=?, hStOk:=ErrAnz)
--- NW 22: Störungen anzeigen UZ0701 ---
A ErrAnz
R ErrAnz
S "DOutbound_Bereich".A01_UZ0701.StOk_blinken
S "DOutbound_Bereich".A01_UH07.StOk_blinken
--- NW 23: Störungen quittieren UZ0701/0702 ---
A "DOutbound_Bereich".A01_UZ0701.StOk_aktiv
O "DOutbound_Bereich".A01_UZ0702.StOk_aktiv
O "DOutbound_Bereich".A01_UH07.StOk_aktiv
= ErrQuit
--- NW 24: Bereich 3373 (Runter ins EG) ---
A "MB3370"
A "BG3372"
= B_vor_Schleuse
A "DEPtoLP_Sensoren".Stau_BG3376.Stat.B_Akt
O "DEPtoLP_Sensoren".Stau_BG3377.Stat.B_Akt
= Stau_raus
CALL FB "None" , (Bereichs_Nr:=3373, ErrQuit:=ErrQuit, B_BereichsAnfang:=B_vor_Schleuse, B_BereichsEnde:="BG3373", B_Zähl:="BG3377", B_Stau_raus:=Stau_raus, Start_Ok:=1, Antrieb_Bereich_aktiv:="MA0063", Antrieb_plus_aktiv:="MA0064", RestZeit_Bereich_plus:=?, Antrieb_Bereich_vor:="DEPtoLP_Antriebe".MA0063.Stat.A_vor, Antrieb_Bereich_stop:="DEPtoLP_Antriebe".MA0063.Stat.Stop_vor, Error:=DB708.DBW456, Antrieb_Bereich_start:="DEPtoLP_Antriebe".MA0063.Stat.A_start, Antrieb_plus_vor:="DEPtoLP_Antriebe".MA0064.Stat.A_vor, Antrieb_plus_start:="DEPtoLP_Antriebe".MA0064.Stat.A_start, Antrieb_minus_vor:="DEPtoLP_Antriebe".MA0062.Stat.A_vor, hStOk:=ErrAnz)
--- NW 25: Störungen anzeigen UZ0701/0702 ---
A ErrAnz
R ErrAnz
S "DOutbound_Bereich".A01_UZ0701.StOk_blinken
S "DOutbound_Bereich".A01_UZ0702.StOk_blinken
S "DOutbound_Bereich".A01_UH07.StOk_blinken
--- NW 26: Störungen quittieren UZ0702 ---
A "DOutbound_Bereich".A01_UZ0702.StOk_aktiv
O "DOutbound_Bereich".A01_UH07.StOk_aktiv
= ErrQuit
--- NW 27: Schleuse 3303 ---
CALL FB "None" , (Schleusen_Nr:=3303, ErrQuit:=ErrQuit, B_VorSchleuse:="BG3377", B_InSchleuse:="BG3303", B_AusSchleuse:="BG3304", B_Stau_raus:="DEPtoLP_Sensoren".Stau_BG3304.Stat.B_Akt, Start_Ok:=1, Antrieb_Schleuse_aktiv:="MA0064", Antrieb_plus_aktiv:="MA0064", Schleuse_geöffnet:="MB3303", RestZeit_Bereich_plus:=?, Y_Schleuse_Auf:="DEPtoLP_Zylinder".Schleuse_3303.Stat.Ast, Error:=DB708.DBW522, Antrieb_Schleuse_vor:="DEPtoLP_Antriebe".MA0064.Stat.A_vor, Antrieb_Schleuse_start:="DEPtoLP_Antriebe".MA0064.Stat.A_start, Antrieb_Schleuse_stop:="DEPtoLP_Antriebe".MA0064.Stat.Stop_vor, Antrieb_Schleuse_PS:="DEPtoLP_Antriebe".MA0064.Stat.A_PS, Antrieb_plus_vor:=?, Antrieb_plus_start:=?, hStOk:=ErrAnz) // wie oben
--- NW 28: Störungen anzeigen UZ0702 ---
A ErrAnz
R ErrAnz
S "DOutbound_Bereich".A01_UZ0702.StOk_blinken
S "DOutbound_Bereich".A01_UH07.StOk_blinken
--- NW 29: Ende ---
BE
FUNCTION_BLOCK "EPtoLP_OmniFahren"
TITLE = Omnifahren Outbound Entnahmepuffer > Leerpuffer
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
VAR
Schleuse_4512 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus";
Schleuse_4532 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus";
Schleuse_4516 { S7_SetPoint := 'False'} : "MHMOmniSchleuse";
Schleuse_4520 { S7_SetPoint := 'False'} : "MHMOmniSchleuse";
Bereich_4456 : "MHMOmniBereich_Plus";
Schleuse_4466 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus";
Schleuse_4462 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus";
Bereich_4465 : "MHMOmniBereich_Plus";
Schleuse_3370 { S7_SetPoint := 'False'} : "MHMOmniSchleuse";
Bereich_3373 : "MHMOmniBereich_Plus";
Schleuse_3303 { S7_SetPoint := 'False'} : "MHMOmniSchleuse";
Schleuse_4522 { S7_SetPoint := 'False'} : "MHMOmniSchleuse";
Schleuse_4463 { S7_SetPoint := 'False'} : "MHMOmniSchleuse";
Übergang_4514 { S7_SetPoint := 'False'} : "MHMÜbergang_ohne_Schleuse";
Trolleys_starten : Struct
Flanke : Bool;
Wartezeit_aktiv : Bool;
Timer_Wartenzeit { S7_SetPoint := 'True'} : Int;
END_STRUCT;
END_VAR
VAR_TEMP
ErrQuit : Bool;
ErrAnz : Bool;
Stau_raus : Bool;
Start_ok : Bool;
B_aktiv : Bool;
B_vor_Schleuse : Bool;
B_nach_Schleuse : Bool;
Antrieb_aktiv : Bool;
Antrieb_start : Bool;
Antrieb_stop : Bool;
Fahren_Ok : Bool;
Antrieb_nicht_stoppen : Bool;
END_VAR
BEGIN
NETWORK
TITLE = Systemzeug
//Verschiedene Bereiche:
U "DOutbound_Bereich".A01_UH07.AnlageEin;
= #Schleuse_4512.Dyn.Sk.Auto_akt;
= #Schleuse_4532.Dyn.Sk.Auto_akt;
= #Schleuse_4516.Dyn.Sk.Auto_akt;
= #Schleuse_4522.Dyn.Sk.Auto_akt;
= #Schleuse_4520.Dyn.Sk.Auto_akt;
= #Bereich_4456.Dyn.Sk.Auto_akt;
= #Schleuse_4466.Dyn.Sk.Auto_akt;
= #Schleuse_4462.Dyn.Sk.Auto_akt;
= #Schleuse_4463.Dyn.Sk.Auto_akt;
= #Bereich_4465.Dyn.Sk.Auto_akt;
= #Schleuse_3370.Dyn.Sk.Auto_akt;
= #Bereich_3373.Dyn.Sk.Auto_akt;
= #Schleuse_3303.Dyn.Sk.Auto_akt;
UN "DOutbound_Bereich".A01_UC074.BereichErr;
= #Schleuse_4512.Dyn.Sk.Bereich_ok;
= #Schleuse_4532.Dyn.Sk.Bereich_ok;
= #Schleuse_4516.Dyn.Sk.Bereich_ok;
= #Schleuse_4522.Dyn.Sk.Bereich_ok;
= #Schleuse_4520.Dyn.Sk.Bereich_ok;
= #Bereich_4456.Dyn.Sk.Bereich_ok;
= #Schleuse_4466.Dyn.Sk.Bereich_ok;
= #Schleuse_4462.Dyn.Sk.Bereich_ok;
= #Schleuse_4463.Dyn.Sk.Bereich_ok;
= #Bereich_4465.Dyn.Sk.Bereich_ok;
UN "DOutbound_Bereich".A01_UH07.BereichErr;
= #Schleuse_3370.Dyn.Sk.Bereich_ok;
= #Bereich_3373.Dyn.Sk.Bereich_ok;
= #Schleuse_3303.Dyn.Sk.Bereich_ok;
NETWORK
TITLE = Störungen quittieren UZ7402/7403
U "DOutbound_Bereich".A01_UZ7402.StOk_aktiv;
O "DOutbound_Bereich".A01_UZ7403.StOk_aktiv;
O "DOutbound_Bereich".A01_UC074.StOk_aktiv;
O "DOutbound_Bereich".A01_UH07.StOk_aktiv;
= #ErrQuit;
NETWORK
TITLE = Schleuse 4512
CALL #Schleuse_4512
( Schleusen_Nr := 4512 ,
ErrQuit := #ErrQuit ,
B_VorSchleuse := "BG4511" ,
B_InSchleuse := "BG4512" ,
B_Zähl := "BG4531" ,
B_Stau_raus := "DEPtoLP_Sensoren".Stau_BG4531.Stat.B_Akt ,
Start_Ok := 1 ,
Antrieb_Schleuse_aktiv := "MA0326" ,
Schleuse_geöffnet := "MB4512" ,
Y_Schleuse_Auf := "DEPtoLP_Zylinder".Schleuse_4512.Stat.Ast ,
Error := %DB708.DBW576 ,
Antrieb_Schleuse_vor := "DEPtoLP_Antriebe".MA0326.Stat.A_vor ,
Antrieb_Schleuse_start := "DEPtoLP_Antriebe".MA0326.Stat.A_start ,
Antrieb_Schleuse_stop := "DEPtoLP_Antriebe".MA0326.Stat.Stop_vor ,
Antrieb_Schleuse_PS := "DEPtoLP_Antriebe".MA0326.Stat.A_PS ,
Antrieb_plus_vor := , //Identisch
hStOk := #ErrAnz
);
NETWORK
TITLE = Schleuse 4532
U "DEPtoLP_Sensoren".Stau_BG4513.Stat.B_Akt;
/// O "DEP>LP_Sensoren".Stau_BG4515.Stat.B_Akt
= #Stau_raus;
CALL #Schleuse_4532
( Schleusen_Nr := 4532 ,
ErrQuit := #ErrQuit ,
B_VorSchleuse := "BG4531" ,
B_InSchleuse := "BG4532" ,
B_Zähl := "BG4513" ,
B_Stau_raus := #Stau_raus ,
Start_Ok := 1 ,
Antrieb_Schleuse_aktiv := "MA0326" ,
Antrieb_plus_aktiv := "MA0326" ,
Schleuse_geöffnet := "MB4532" ,
Y_Schleuse_Auf := "DEPtoLP_Zylinder".Schleuse_4532.Stat.Ast ,
Error := %DB708.DBW578 ,
Antrieb_Schleuse_vor := "DEPtoLP_Antriebe".MA0326.Stat.A_vor ,
Antrieb_Schleuse_start := "DEPtoLP_Antriebe".MA0326.Stat.A_start ,
Antrieb_Schleuse_stop := "DEPtoLP_Antriebe".MA0326.Stat.Stop_vor ,
Antrieb_Schleuse_PS := "DEPtoLP_Antriebe".MA0326.Stat.A_PS ,
hStOk := #ErrAnz
);
NETWORK
TITLE = MA0326 / Übergang 4514
CALL #Übergang_4514
( ErrQuit := #ErrQuit ,
B_Anfang := "BG4513" ,
B_Am_Übergang := "BG4514" ,
B_Stau_Antrieb_plus := "BG4515" ,
Antrieb_aktiv := "MA0326" ,
Antrieb_plus_aktiv := "MA0327" ,
Antrieb_vor := "DEPtoLP_Antriebe".MA0326.Stat.A_vor ,
Antrieb_start := "DEPtoLP_Antriebe".MA0326.Stat.A_start ,
Antrieb_stop := "DEPtoLP_Antriebe".MA0326.Stat.A_PS ,
Antrieb_plus_vor := "DEPtoLP_Antriebe".MA0327.Stat.A_vor ,
Antrieb_plus_start := "DEPtoLP_Antriebe".MA0327.Stat.A_start
);
NETWORK
TITLE = Schleuse 4516
CALL #Schleuse_4516
( Schleusen_Nr := 4516 ,
ErrQuit := #ErrQuit ,
B_VorSchleuse := "BG4515" ,
B_InSchleuse := "BG4516" ,
B_AusSchleuse := "BG4517" ,
B_Stau_raus := "DEPtoLP_Sensoren".Stau_BG4517.Stat.B_Akt ,
Start_Ok := 1 ,
Antrieb_Schleuse_aktiv := "MA0327" ,
Antrieb_plus_aktiv := "MA0327" ,
Schleuse_geöffnet := "MB4516" ,
Y_Schleuse_Auf := "DEPtoLP_Zylinder".Schleuse_4516.Stat.Ast ,
Error := %DB708.DBW566 ,
Antrieb_Schleuse_vor := "DEPtoLP_Antriebe".MA0327.Stat.A_vor ,
Antrieb_Schleuse_start := "DEPtoLP_Antriebe".MA0327.Stat.A_start ,
Antrieb_Schleuse_stop := "DEPtoLP_Antriebe".MA0327.Stat.Stop_vor ,
Antrieb_Schleuse_PS := "DEPtoLP_Antriebe".MA0327.Stat.A_PS ,
Antrieb_plus_vor := , //Identisch
hStOk := #ErrAnz
);
NETWORK
TITLE = Schleuse 4522
CALL #Schleuse_4522
( Schleusen_Nr := 4522 ,
ErrQuit := #ErrQuit ,
B_VorSchleuse := "BG4517" ,
B_InSchleuse := "BG4522" ,
B_AusSchleuse := "BG4521" ,
B_Stau_raus := "DEPtoLP_Sensoren".Stau_BG4521.Stat.B_Akt ,
Start_Ok := 1 ,
Antrieb_Schleuse_aktiv := "MA0327" ,
Antrieb_plus_aktiv := "MA0327" ,
Schleuse_geöffnet := "MB4522" ,
Y_Schleuse_Auf := "DEPtoLP_Zylinder".Schleuse_4522.Stat.Ast ,
Error := %DB708.DBW582 ,
Antrieb_Schleuse_vor := "DEPtoLP_Antriebe".MA0327.Stat.A_vor ,
Antrieb_Schleuse_start := "DEPtoLP_Antriebe".MA0327.Stat.A_start ,
Antrieb_Schleuse_stop := "DEPtoLP_Antriebe".MA0327.Stat.Stop_vor ,
Antrieb_Schleuse_PS := "DEPtoLP_Antriebe".MA0327.Stat.A_PS ,
Antrieb_plus_vor := , //Identisch
hStOk := #ErrAnz
);
NETWORK
TITLE = Wartezeit bis erneuter Trolleystart sinnvoll (wegen Staubildung)
U "MB4520";
FP #Trolleys_starten.Flanke;
S #Trolleys_starten.Wartezeit_aktiv;
SPBN Warten ;//Negierter Sprung
L 15 ;//Wartezeit in Sekunden
T #Trolleys_starten.Timer_Wartenzeit;
Warten: UN #Trolleys_starten.Wartezeit_aktiv;
O;
U "MB4520" ;//Schleuse offen
UN "MA0327" ;//Aber Trolley fährt nicht
ON "1s-Impuls";
SPB Wait;
L #Trolleys_starten.Timer_Wartenzeit;
+ -1;
T #Trolleys_starten.Timer_Wartenzeit;
L 0;
>I;
SPB Wait;
SET;
R #Trolleys_starten.Wartezeit_aktiv;
Wait: NOP 0;
NETWORK
TITLE = Schleuse 4520
UN #Trolleys_starten.Wartezeit_aktiv;
= #Fahren_Ok;
U "BG4517";
O "BG4521";
= #B_vor_Schleuse;
CALL #Schleuse_4520
( Schleusen_Nr := 4520 ,
ErrQuit := #ErrQuit ,
B_VorSchleuse := #B_vor_Schleuse ,
B_InSchleuse := "BG4520" ,
B_AusSchleuse := "BG4455" ,
B_Stau_raus := "DEPtoLP_Sensoren".Stau_BG4455.Stat.B_Akt ,
Start_Ok := #Fahren_Ok ,
Antrieb_Schleuse_aktiv := "MA0327" ,
Antrieb_plus_aktiv := "MA0330" ,
Schleuse_geöffnet := "MB4520" ,
RestZeit_Bereich_plus := #Bereich_4456.Dyn.Restzeit ,
Y_Schleuse_Auf := "DEPtoLP_Zylinder".Schleuse_4520.Stat.Ast ,
Error := %DB708.DBW568 ,
Antrieb_Schleuse_vor := "DEPtoLP_Antriebe".MA0327.Stat.A_vor ,
Antrieb_Schleuse_start := "DEPtoLP_Antriebe".MA0327.Stat.A_start ,
Antrieb_Schleuse_stop := "DEPtoLP_Antriebe".MA0327.Stat.Stop_vor ,
Antrieb_Schleuse_PS := "DEPtoLP_Antriebe".MA0327.Stat.A_PS ,
Antrieb_plus_vor := #Bereich_4456.Dyn.Status.Trolley_kommt_in_Bereich ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Störungen anzeigen UZ7402/7403
U #ErrAnz;
R #ErrAnz;
S "DOutbound_Bereich".A01_UZ7402.StOk_blinken;
S "DOutbound_Bereich".A01_UZ7403.StOk_blinken;
S "DOutbound_Bereich".A01_UC074.StOk_blinken;
S "DOutbound_Bereich".A01_UH07.StOk_blinken;
NETWORK
TITLE = Störungen quittieren UZ7402/7401
U "DOutbound_Bereich".A01_UZ7402.StOk_aktiv;
O "DOutbound_Bereich".A01_UZ7401.StOk_aktiv;
O "DOutbound_Bereich".A01_UC074.StOk_aktiv;
O "DOutbound_Bereich".A01_UH07.StOk_aktiv;
= #ErrQuit;
NETWORK
TITLE = Bereich 4456
U "MB4520";
U "BG4455";
= #B_vor_Schleuse;
U "DEPtoLP_Sensoren".Stau_BG4457.Stat.B_Akt;
O "DEPtoLP_Sensoren".Stau_BG4467.Stat.B_Akt;
= #Stau_raus;
CALL #Bereich_4456
( Bereichs_Nr := 4456 ,
ErrQuit := #ErrQuit ,
B_BereichsAnfang := #B_vor_Schleuse ,
B_BereichsEnde := "BG4456" ,
B_Zähl := "BG4467" ,
B_Stau_raus := #Stau_raus ,
Start_Ok := 1 ,
Antrieb_Bereich_aktiv := "MA0330" ,
Antrieb_plus_aktiv := "MA0331" ,
Antrieb_Bereich_vor := "DEPtoLP_Antriebe".MA0330.Stat.A_vor ,
Antrieb_Bereich_stop := "DEPtoLP_Antriebe".MA0330.Stat.Stop_vor ,
Error := %DB708.DBW478 ,
Antrieb_Bereich_start := "DEPtoLP_Antriebe".MA0330.Stat.A_start ,
Antrieb_plus_vor := "DEPtoLP_Antriebe".MA0331.Stat.A_vor ,
Antrieb_plus_start := "DEPtoLP_Antriebe".MA0331.Stat.A_start ,
Antrieb_minus_vor := "DEPtoLP_Antriebe".MA0327.Stat.A_vor ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Störungen anzeigen UZ7402/7401
U #ErrAnz;
R #ErrAnz;
S "DOutbound_Bereich".A01_UZ7402.StOk_blinken;
S "DOutbound_Bereich".A01_UZ7401.StOk_blinken;
S "DOutbound_Bereich".A01_UC074.StOk_blinken;
S "DOutbound_Bereich".A01_UH07.StOk_blinken;
NETWORK
TITLE = Störungen quittieren UZ7401
U "DOutbound_Bereich".A01_UZ7401.StOk_aktiv;
O "DOutbound_Bereich".A01_UC074.StOk_aktiv;
O "DOutbound_Bereich".A01_UH07.StOk_aktiv;
= #ErrQuit;
NETWORK
TITLE = Schleuse 4466
UN "MB4445" ;//Weiche Einfahrt ByPass
UN "MB4457";
= #Start_ok;
CALL #Schleuse_4466
( Schleusen_Nr := 4466 ,
ErrQuit := #ErrQuit ,
B_VorSchleuse := "BG4457" ,
B_InSchleuse := "BG4466" ,
B_Zähl := "BG4461" ,
B_Stau_raus := "DEPtoLP_Sensoren".Stau_BG4461.Stat.B_Akt ,
Start_Ok := #Start_ok ,
Antrieb_Schleuse_aktiv := "MA0331" ,
Antrieb_plus_aktiv := "MA0332" ,
Schleuse_geöffnet := "MB4466" ,
Y_Schleuse_Auf := "DEPtoLP_Zylinder".Schleuse_4466.Stat.Ast ,
Error := %DB708.DBW562 ,
Antrieb_Schleuse_vor := "DEPtoLP_Antriebe".MA0331.Stat.A_vor ,
Antrieb_Schleuse_start := "DEPtoLP_Antriebe".MA0331.Stat.A_start ,
Antrieb_Schleuse_stop := "DEPtoLP_Antriebe".MA0331.Stat.Stop_vor ,
Antrieb_Schleuse_PS := "DEPtoLP_Antriebe".MA0331.Stat.A_PS ,
Antrieb_plus_vor := "DEPtoLP_Antriebe".MA0332.Stat.A_vor ,
Antrieb_plus_start := "DEPtoLP_Antriebe".MA0332.Stat.A_start ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Schleuse 4462
CALL #Schleuse_4462
( Schleusen_Nr := 4462 ,
ErrQuit := #ErrQuit ,
B_VorSchleuse := "BG4461" ,
B_InSchleuse := "BG4462" ,
B_Zähl := "BG4460" ,
B_Stau_raus := "DEPtoLP_Sensoren".Stau_BG4460.Stat.B_Akt ,
Start_Ok := 1 ,
Antrieb_Schleuse_aktiv := "MA0332" ,
Schleuse_geöffnet := "MB4462" ,
Y_Schleuse_Auf := "DEPtoLP_Zylinder".Schleuse_4462.Stat.Ast ,
Error := %DB708.DBW560 ,
Antrieb_Schleuse_vor := "DEPtoLP_Antriebe".MA0332.Stat.A_vor ,
Antrieb_Schleuse_start := "DEPtoLP_Antriebe".MA0332.Stat.A_start ,
Antrieb_Schleuse_stop := "DEPtoLP_Antriebe".MA0332.Stat.Stop_vor ,
Antrieb_Schleuse_PS := "DEPtoLP_Antriebe".MA0332.Stat.A_PS ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Schleuse 4463
CALL #Schleuse_4463
( Schleusen_Nr := 4463 ,
ErrQuit := #ErrQuit ,
B_VorSchleuse := "BG4460" ,
B_InSchleuse := "BG4463" ,
B_AusSchleuse := "BG4464" ,
B_Stau_raus := "DEPtoLP_Sensoren".Stau_BG4464.Stat.B_Akt ,
Start_Ok := 1 ,
Antrieb_Schleuse_aktiv := "MA0332" ,
Antrieb_plus_aktiv := "MA0333" ,
Schleuse_geöffnet := "MB4463" ,
RestZeit_Bereich_plus := #Bereich_4465.Dyn.Restzeit ,
Y_Schleuse_Auf := "DEPtoLP_Zylinder".Schleuse_4463.Stat.Ast ,
Error := %DB708.DBW584 ,
Antrieb_Schleuse_vor := "DEPtoLP_Antriebe".MA0332.Stat.A_vor ,
Antrieb_Schleuse_start := "DEPtoLP_Antriebe".MA0332.Stat.A_start ,
Antrieb_Schleuse_stop := "DEPtoLP_Antriebe".MA0332.Stat.Stop_vor ,
Antrieb_Schleuse_PS := "DEPtoLP_Antriebe".MA0332.Stat.A_PS ,
Antrieb_plus_vor := #Bereich_4465.Dyn.Status.Trolley_kommt_in_Bereich ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Bereich 4465 (vor BST 1)
UN "7_HMI_Err_UH07_OB".System.Gesamt_Feueralarm_Halle3;
UN "7_HMI_Err_UH07_OB".System.Gesamt_Feueralarm_Halle4;
UN "7_HMI_Err_UH07_OB".System.BST1_Feueralarm;
UN "7_HMI_Err_UH07_OB".System.BST1_Geschlossen;
UN "7_HMI_Err_UH07_OB".System.BST1_Störung;
U #Schleuse_3370.Dyn.Sk.Bereich_ok;
= #Fahren_Ok;
CALL #Bereich_4465
( Bereichs_Nr := 4465 ,
ErrQuit := #ErrQuit ,
B_BereichsAnfang := "BG4464" ,
B_BereichsEnde := "BG4465" ,
B_Zähl := "BG3367" ,
B_Stau_raus := "DEPtoLP_Sensoren".Stau_BG3367.Stat.B_Akt ,
Start_Ok := #Fahren_Ok ,
Antrieb_Bereich_aktiv := "MA0333" ,
Antrieb_plus_aktiv := "MA0062" ,
Antrieb_Bereich_vor := "DEPtoLP_Antriebe".MA0333.Stat.A_vor ,
Antrieb_Bereich_stop := "DEPtoLP_Antriebe".MA0333.Stat.Stop_vor ,
Error := %DB708.DBW480 ,
Antrieb_Bereich_start := "DEPtoLP_Antriebe".MA0333.Stat.A_start ,
Antrieb_plus_vor := "DEPtoLP_Antriebe".MA0062.Stat.A_vor ,
Antrieb_plus_start := "DEPtoLP_Antriebe".MA0062.Stat.A_start ,
Antrieb_minus_vor := "DEPtoLP_Antriebe".MA0332.Stat.A_vor ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Störungen anzeigen UZ7401
U #ErrAnz;
R #ErrAnz;
S "DOutbound_Bereich".A01_UZ7401.StOk_blinken;
S "DOutbound_Bereich".A01_UC074.StOk_blinken;
S "DOutbound_Bereich".A01_UH07.StOk_blinken;
NETWORK
TITLE = Störungen quittieren UZ0701
U "DOutbound_Bereich".A01_UZ0701.StOk_aktiv;
O "DOutbound_Bereich".A01_UH07.StOk_aktiv;
= #ErrQuit;
NETWORK
TITLE = Schleuse 3370 (hinter BST 1)
//Hinter BST freiräumen:
U #Bereich_4465.Dyn.Status.Trolley_fährt_aus;
O;
U "DEPtoLP_Sensoren".Stau_BG3367.Stat.B_Akt;
UN "BG3370";
S "DEPtoLP_Antriebe".MA0062.Stat.A_vor;
U "DEPtoLP_Sensoren".Stau_BG3371.Stat.B_Akt;
O "DEPtoLP_Sensoren".Stau_BG3372.Stat.B_Akt;
O "DEPtoLP_Sensoren".Stau_BG3377.Stat.B_Akt;//Stau hinter ASF im EG
= #Stau_raus;
CALL #Schleuse_3370
( Schleusen_Nr := 3370 ,
ErrQuit := #ErrQuit ,
B_VorSchleuse := "DEPtoLP_Sensoren".Stau_BG3367.Stat.B_Akt ,
B_InSchleuse := "BG3370" ,
B_AusSchleuse := "BG3372" ,
B_Stau_raus := #Stau_raus ,
Start_Ok := 1 ,
Antrieb_Schleuse_aktiv := "MA0062" ,
Antrieb_plus_aktiv := "MA0063" ,
Schleuse_geöffnet := "MB3370" ,
RestZeit_Bereich_plus := #Bereich_3373.Dyn.Restzeit ,
Y_Schleuse_Auf := "DEPtoLP_Zylinder".Schleuse_3370.Stat.Ast ,
Error := %DB708.DBW532 ,
Antrieb_Schleuse_vor := "DEPtoLP_Antriebe".MA0062.Stat.A_vor ,
Antrieb_Schleuse_start := "DEPtoLP_Antriebe".MA0062.Stat.A_start ,
Antrieb_Schleuse_stop := "DEPtoLP_Antriebe".MA0062.Stat.Stop_vor ,
Antrieb_Schleuse_PS := "DEPtoLP_Antriebe".MA0062.Stat.A_PS ,
Antrieb_plus_vor := #Bereich_3373.Dyn.Status.Trolley_kommt_in_Bereich ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Störungen anzeigen UZ0701
U #ErrAnz;
R #ErrAnz;
S "DOutbound_Bereich".A01_UZ0701.StOk_blinken;
S "DOutbound_Bereich".A01_UH07.StOk_blinken;
NETWORK
TITLE = Störungen quittieren UZ0701/0702
U "DOutbound_Bereich".A01_UZ0701.StOk_aktiv;
O "DOutbound_Bereich".A01_UZ0702.StOk_aktiv;
O "DOutbound_Bereich".A01_UH07.StOk_aktiv;
= #ErrQuit;
NETWORK
TITLE = Bereich 3373 (Runter ins EG)
U "MB3370";
U "BG3372";
= #B_vor_Schleuse;
U "DEPtoLP_Sensoren".Stau_BG3376.Stat.B_Akt;
O "DEPtoLP_Sensoren".Stau_BG3377.Stat.B_Akt;
= #Stau_raus;
CALL #Bereich_3373
( Bereichs_Nr := 3373 ,
ErrQuit := #ErrQuit ,
B_BereichsAnfang := #B_vor_Schleuse ,
B_BereichsEnde := "BG3373" ,
B_Zähl := "BG3377" ,
B_Stau_raus := #Stau_raus ,
Start_Ok := 1 ,
Antrieb_Bereich_aktiv := "MA0063" ,
Antrieb_plus_aktiv := "MA0064" ,
Antrieb_Bereich_vor := "DEPtoLP_Antriebe".MA0063.Stat.A_vor ,
Antrieb_Bereich_stop := "DEPtoLP_Antriebe".MA0063.Stat.Stop_vor ,
Error := %DB708.DBW456 ,
Antrieb_Bereich_start := "DEPtoLP_Antriebe".MA0063.Stat.A_start ,
Antrieb_plus_vor := "DEPtoLP_Antriebe".MA0064.Stat.A_vor ,
Antrieb_plus_start := "DEPtoLP_Antriebe".MA0064.Stat.A_start ,
Antrieb_minus_vor := "DEPtoLP_Antriebe".MA0062.Stat.A_vor ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Störungen anzeigen UZ0701/0702
U #ErrAnz;
R #ErrAnz;
S "DOutbound_Bereich".A01_UZ0701.StOk_blinken;
S "DOutbound_Bereich".A01_UZ0702.StOk_blinken;
S "DOutbound_Bereich".A01_UH07.StOk_blinken;
NETWORK
TITLE = Störungen quittieren UZ0702
U "DOutbound_Bereich".A01_UZ0702.StOk_aktiv;
O "DOutbound_Bereich".A01_UH07.StOk_aktiv;
= #ErrQuit;
NETWORK
TITLE = Schleuse 3303
CALL #Schleuse_3303
( Schleusen_Nr := 3303 ,
ErrQuit := #ErrQuit ,
B_VorSchleuse := "BG3377" ,
B_InSchleuse := "BG3303" ,
B_AusSchleuse := "BG3304" ,
B_Stau_raus := "DEPtoLP_Sensoren".Stau_BG3304.Stat.B_Akt ,
Start_Ok := 1 ,
Antrieb_Schleuse_aktiv := "MA0064" ,
Antrieb_plus_aktiv := "MA0064" ,
Schleuse_geöffnet := "MB3303" ,
Y_Schleuse_Auf := "DEPtoLP_Zylinder".Schleuse_3303.Stat.Ast ,
Error := %DB708.DBW522 ,
Antrieb_Schleuse_vor := "DEPtoLP_Antriebe".MA0064.Stat.A_vor ,
Antrieb_Schleuse_start := "DEPtoLP_Antriebe".MA0064.Stat.A_start ,
Antrieb_Schleuse_stop := "DEPtoLP_Antriebe".MA0064.Stat.Stop_vor ,
Antrieb_Schleuse_PS := "DEPtoLP_Antriebe".MA0064.Stat.A_PS ,
Antrieb_plus_vor := , //wie oben
hStOk := #ErrAnz
);
NETWORK
TITLE = Störungen anzeigen UZ0702
U #ErrAnz;
R #ErrAnz;
S "DOutbound_Bereich".A01_UZ0702.StOk_blinken;
S "DOutbound_Bereich".A01_UH07.StOk_blinken;
NETWORK
TITLE = Ende
BE;
END_FUNCTION_BLOCK
@@ -1,74 +1,77 @@
=== FC 4181: EPtoLP_Ziel_FC [STL] ===
INTERFACE:
Input:
Output:
InOut:
Temp:
Ziel_hex : Word
Ziel_int : Int
Zielebene : Word
Error : Byte
Position : Int
Lager_DB : Int
Lager_DW : Int
AR1Zeiger : DWord // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
AR1Start : DInt // Startwert mit Offset 0
SSDW : Int
EndZiel : Word
Variante : Int
AbrufID : DInt
Fahrlisten_TrolleyID : DInt
Fahrlisten_AbrufID : DInt
Fahrlisten_Lager : Int
Trolley_unbekannt : Bool // Trolley ist nicht in DL
Express_Abruf : Bool
Constant:
Return:
Ret_Val : Void
--- NW 1: Rückmeldung ---
SET // Rückmeldungen erst mal resetten
R "M180.6" // Weiterfahrt von Ziel-FC erlaubt
FUNCTION "EPtoLP_Ziel_FC" : Void
TITLE = Ziel-FC: EP>LP_OmniFahren
{ S7_Optimized_Access := 'FALSE' ; S7_Pass_Registers := 'TRUE' }
AUTHOR : AE
VERSION : 0.1
VAR_TEMP
Ziel_hex : Word;
Ziel_int : Int;
Zielebene : Word;
Error : Byte;
Position : Int;
Lager_DB : Int;
Lager_DW : Int;
AR1Zeiger : DWord; // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
AR1Start : DInt; // Startwert mit Offset 0
SSDW : Int;
EndZiel : Word;
Variante : Int;
AbrufID : DInt;
Fahrlisten_TrolleyID : DInt;
Fahrlisten_AbrufID : DInt;
Fahrlisten_Lager : Int;
Trolley_unbekannt : Bool; // Trolley ist nicht in DL
Express_Abruf : Bool;
END_VAR
--- NW 2: Bereich 4465: (BST 1) ---
L "MW190"
L 4465 // Aufruf von Schleuse XXXX?
<>I // Nein!
JC X4465E
BEGIN
NETWORK
TITLE = Rückmeldung
SET;//Rückmeldungen erst mal resetten
R "M180.6";//Weiterfahrt von Ziel-FC erlaubt
SET
S "M180.6" // Weiterfahrt ist erlaubt
NETWORK
TITLE = Bereich 4465: (BST 1)
L "MW190";
L 4465 ;//Aufruf von Schleuse XXXX?
<>I;//Nein!
SPB X4465E;
BEU
SET;
S "M180.6" ;//Weiterfahrt ist erlaubt
X4465E: NOP 0
BEA;
X4465E: NOP 0;
--- NW 3: Schleuse 4466: (Vor Einfahrt ByPass) ---
L "MW190"
L 4466 // Aufruf von Schleuse XXXX?
<>I // Nein!
JC X4466E
NETWORK
TITLE = Schleuse 4466: (Vor Einfahrt ByPass)
L "MW190";
L 4466 ;//Aufruf von Schleuse XXXX?
<>I;//Nein!
SPB X4466E;
// Quell-Steuerung:
L "DVPtoEP_OmniFahren".Weiche_4445.Dyn.Weichen_Ziel
L 16#4461 // Fahren Trolleys zu BG4461?
==I // Ja!
O "MB4445" // Weiche ist auf Abzweig
O "DVPtoEP_OmniFahren".Weiche_4445.Dyn.Status.Reset_aktiv
BEC // Warten !
//Quell-Steuerung:
L "DVPtoEP_OmniFahren".Weiche_4445.Dyn.Weichen_Ziel;
L 16#4461 ;//Fahren Trolleys zu BG4461?
==I;//Ja!
O "MB4445" ;//Weiche ist auf Abzweig
O "DVPtoEP_OmniFahren".Weiche_4445.Dyn.Status.Reset_aktiv;
BEB;//Warten !
AN "MB4445" // Weiche Einfahrt ByPass
AN "MB4457"
AN "DEPtoLP_Sensoren".Stau_BG4461.Stat.B_Akt
S "M180.6" // Weiterfahrt ist erlaubt
UN "MB4445" ;//Weiche Einfahrt ByPass
UN "MB4457";
UN "DEPtoLP_Sensoren".Stau_BG4461.Stat.B_Akt;
S "M180.6" ;//Weiterfahrt ist erlaubt
BEU
BEA;
X4466E: NOP 0
X4466E: NOP 0;
NETWORK
TITLE = Ende
BE;
--- NW 4: Ende ---
BE
END_FUNCTION
@@ -1,82 +1,173 @@
=== FB 5190: LP_Sensoren [STL] ===
INTERFACE:
Input:
Output:
InOut:
Static:
Stau_LP1 : "MSensoren"
Stau_LP2 : "MSensoren"
Stau_LP3 : "MSensoren"
Stau_LP4 : "MSensoren"
Stau_LP5 : "MSensoren"
Stau_LP6 : "MSensoren"
Stau_LP7 : "MSensoren"
Stau_LP8 : "MSensoren"
Stau_LP9 : "MSensoren"
Stau_LP10 : "MSensoren"
Stau_BG3322 : "MSensoren" // Stau am Sensor Einfahrt MA0065
Stau_BG3327 : "MSensoren" // Stau am Sensor Einfahrt MA0065
Temp:
T_Ein : Int // Vorgabe Einschaltverzögerung
T_Aus : Int // Zwischenspeicher Ausschaltverzögerung
F1 : Bool // Geschwindigkeit 1 aktiviert
F2 : Bool // Geschwindigkeit 2 aktiviert
F3 : Bool // Geschwindigkeit 3 aktiviert
ESensor : Bool // Sensoren
Antrieb : Bool
VReal : Real // GeschwindigkeitinReal
Zeit : Int // Zeit für Ausschaltverzögerung LT1100
Aktiv : Bool // Zeit aktivieren
Constant:
FUNCTION_BLOCK "LP_Sensoren"
TITLE = Einige Sensoren entprellen Outbound Leerpuffer
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : IBAE
VERSION : 0.1
VAR
Stau_LP1 : "MSensoren";
Stau_LP2 : "MSensoren";
Stau_LP3 : "MSensoren";
Stau_LP4 : "MSensoren";
Stau_LP5 : "MSensoren";
Stau_LP6 : "MSensoren";
Stau_LP7 : "MSensoren";
Stau_LP8 : "MSensoren";
Stau_LP9 : "MSensoren";
Stau_LP10 : "MSensoren";
Stau_BG3322 : "MSensoren"; // Stau am Sensor Einfahrt MA0065
Stau_BG3327 : "MSensoren"; // Stau am Sensor Einfahrt MA0065
END_VAR
--- NW 1: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3320", T_Ein:=01, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
VAR_TEMP
T_Ein : Int; // Vorgabe Einschaltverzögerung
T_Aus : Int; // Zwischenspeicher Ausschaltverzögerung
F1 : Bool; // Geschwindigkeit 1 aktiviert
F2 : Bool; // Geschwindigkeit 2 aktiviert
F3 : Bool; // Geschwindigkeit 3 aktiviert
ESensor : Bool; // Sensoren
Antrieb : Bool;
VReal : Real; // GeschwindigkeitinReal
Zeit : Int; // Zeit für Ausschaltverzögerung LT1100
Aktiv : Bool; // Zeit aktivieren
END_VAR
--- NW 2: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3317", T_Ein:=01, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
BEGIN
NETWORK
TITLE = Stau LeerPuffer
//Sensoren entprellen
CALL #Stau_LP1
( ESensor := "BG3320" ,
T_Ein := 01 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau LeerPuffer
//Sensoren entprellen
CALL #Stau_LP2
( ESensor := "BG3317" ,
T_Ein := 01 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 3: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3316", T_Ein:=01, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Stau LeerPuffer
//Sensoren entprellen
CALL #Stau_LP3
( ESensor := "BG3316" ,
T_Ein := 01 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau LeerPuffer
//Sensoren entprellen
CALL #Stau_LP4
( ESensor := "BG3315" ,
T_Ein := 01 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 4: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3315", T_Ein:=01, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Stau LeerPuffer
//Sensoren entprellen
CALL #Stau_LP5
( ESensor := "BG3314" ,
T_Ein := 01 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau LeerPuffer
//Sensoren entprellen
CALL #Stau_LP6
( ESensor := "BG3313" ,
T_Ein := 01 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 5: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3314", T_Ein:=01, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Stau LeerPuffer
//Sensoren entprellen
CALL #Stau_LP7
( ESensor := "BG3312" ,
T_Ein := 01 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau LeerPuffer
//Sensoren entprellen
CALL #Stau_LP8
( ESensor := "BG3311" ,
T_Ein := 01 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 6: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3313", T_Ein:=01, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Stau LeerPuffer
//Sensoren entprellen
CALL #Stau_LP9
( ESensor := "BG3310" ,
T_Ein := 01 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau LeerPuffer
//Sensoren entprellen
CALL #Stau_LP10
( ESensor := "BG3307" ,
T_Ein := 01 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 7: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3312", T_Ein:=01, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Stau am Sensor vor Beladung
//Sensoren entprellen
CALL #Stau_BG3322
( ESensor := "BG3322" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau am Sensor Steigung vor Beladung
//Sensoren entprellen
CALL #Stau_BG3327
( ESensor := "BG3327" ,
T_Ein := 1 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 8: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3311", T_Ein:=01, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Ende
BE;
--- NW 9: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3310", T_Ein:=01, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
--- NW 10: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3307", T_Ein:=01, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
--- NW 11: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3322", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
--- NW 12: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3327", T_Ein:=1, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
--- NW 13: Ende ---
BE
END_FUNCTION_BLOCK
@@ -1,130 +1,262 @@
=== FB 5192: LP_Zylinder [STL] ===
INTERFACE:
Input:
Output:
InOut:
Static:
Sorter_3305 : "MZylinder" //
Weiche_LP1 : "MZylinder" //
Weiche_LP2 : "MZylinder"
Weiche_LP3 : "MZylinder"
Weiche_LP4 : "MZylinder"
Weiche_LP5 : "MZylinder"
Weiche_LP6 : "MZylinder"
Weiche_LP7 : "MZylinder"
Weiche_LP8 : "MZylinder"
Weiche_LP9 : "MZylinder"
Weiche_LP10 : "MZylinder"
Schleuse_Ausfahrt_LP1 : "MZylinder" //
Schleuse_Ausfahrt_LP2 : "MZylinder"
Schleuse_Ausfahrt_LP3 : "MZylinder"
Schleuse_Ausfahrt_LP4 : "MZylinder"
Schleuse_Ausfahrt_LP5 : "MZylinder"
Schleuse_Ausfahrt_LP6 : "MZylinder"
Schleuse_Ausfahrt_LP7 : "MZylinder"
Schleuse_Ausfahrt_LP8 : "MZylinder"
Schleuse_Ausfahrt_LP9 : "MZylinder"
Schleuse_Ausfahrt_LP10 : "MZylinder"
Temp:
Auto : Bool // Automatik ist aktiv
Hand : Bool // Hand ist aktiv
ZylAst : Bool // Zylinder ansteuern
Constant:
FUNCTION_BLOCK "LP_Zylinder"
TITLE = Zylinder Outbound Leerpuffer
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : AE
VERSION : 0.1
VAR
Sorter_3305 : "MZylinder"; //
Weiche_LP1 : "MZylinder"; //
Weiche_LP2 : "MZylinder";
Weiche_LP3 : "MZylinder";
Weiche_LP4 : "MZylinder";
Weiche_LP5 : "MZylinder";
Weiche_LP6 : "MZylinder";
Weiche_LP7 : "MZylinder";
Weiche_LP8 : "MZylinder";
Weiche_LP9 : "MZylinder";
Weiche_LP10 : "MZylinder";
Schleuse_Ausfahrt_LP1 : "MZylinder"; //
Schleuse_Ausfahrt_LP2 : "MZylinder";
Schleuse_Ausfahrt_LP3 : "MZylinder";
Schleuse_Ausfahrt_LP4 : "MZylinder";
Schleuse_Ausfahrt_LP5 : "MZylinder";
Schleuse_Ausfahrt_LP6 : "MZylinder";
Schleuse_Ausfahrt_LP7 : "MZylinder";
Schleuse_Ausfahrt_LP8 : "MZylinder";
Schleuse_Ausfahrt_LP9 : "MZylinder";
Schleuse_Ausfahrt_LP10 : "MZylinder";
END_VAR
--- NW 1: Übergabe des Bereichstatus System UH07/A01 ---
A "DOutbound_Bereich".A01_UH07.Automatik
AN "DOutbound_Bereich".A01_UH07.Handbetrieb
= Auto
A "DOutbound_Bereich".A01_UH07.BereichErr
AN "SGes".Simulation_ohne_HW_aktiv
JC Next // Zylinder-Stellung nicht mehr ändern
VAR_TEMP
Auto : Bool; // Automatik ist aktiv
Hand : Bool; // Hand ist aktiv
ZylAst : Bool; // Zylinder ansteuern
END_VAR
--- NW 2: Schleuse_3305 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3305", ZylGst:=?)
BEGIN
NETWORK
TITLE = Übergabe des Bereichstatus System UH07/A01
U "DOutbound_Bereich".A01_UH07.Automatik;
UN "DOutbound_Bereich".A01_UH07.Handbetrieb;
= #Auto;
U "DOutbound_Bereich".A01_UH07.BereichErr;
UN "SGes".Simulation_ohne_HW_aktiv;
SPB Next ;//Zylinder-Stellung nicht mehr ändern
--- NW 3: Weiche_LP1 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3320", ZylGst:=?)
NETWORK
TITLE = Schleuse_3305
CALL #Sorter_3305
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3305"
);
NETWORK
TITLE = Weiche_LP1
CALL #Weiche_LP1
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3320"
);
--- NW 4: Weiche_LP2 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3317", ZylGst:=?)
NETWORK
TITLE = Weiche_LP2
CALL #Weiche_LP2
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3317"
);
NETWORK
TITLE = Weiche_LP3
CALL #Weiche_LP3
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3316"
);
--- NW 5: Weiche_LP3 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3316", ZylGst:=?)
NETWORK
TITLE = Weiche_LP4
CALL #Weiche_LP4
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3315"
);
NETWORK
TITLE = Weiche_LP5
CALL #Weiche_LP5
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3314"
);
--- NW 6: Weiche_LP4 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3315", ZylGst:=?)
NETWORK
TITLE = Weiche_LP6
CALL #Weiche_LP6
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3313"
);
NETWORK
TITLE = Weiche_LP7
CALL #Weiche_LP7
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3312"
);
--- NW 7: Weiche_LP5 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3314", ZylGst:=?)
NETWORK
TITLE = Weiche_LP8
CALL #Weiche_LP8
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3311"
);
NETWORK
TITLE = Weiche_LP9
CALL #Weiche_LP9
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3310"
);
--- NW 8: Weiche_LP6 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3313", ZylGst:=?)
NETWORK
TITLE = Weiche_LP10
CALL #Weiche_LP10
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5
);
NETWORK
TITLE = Schleuse_Ausfahrt_LP1
CALL #Schleuse_Ausfahrt_LP1
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3341"
);
--- NW 9: Weiche_LP7 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3312", ZylGst:=?)
NETWORK
TITLE = Schleuse_Ausfahrt_LP2
CALL #Schleuse_Ausfahrt_LP2
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3340"
);
NETWORK
TITLE = Schleuse_Ausfahrt_LP3
CALL #Schleuse_Ausfahrt_LP3
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3337"
);
--- NW 10: Weiche_LP8 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3311", ZylGst:=?)
NETWORK
TITLE = Schleuse_Ausfahrt_LP4
CALL #Schleuse_Ausfahrt_LP4
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3336"
);
NETWORK
TITLE = Schleuse_Ausfahrt_LP5
CALL #Schleuse_Ausfahrt_LP5
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3335"
);
--- NW 11: Weiche_LP9 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3310", ZylGst:=?)
NETWORK
TITLE = Schleuse_Ausfahrt_LP6
CALL #Schleuse_Ausfahrt_LP6
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3334"
);
NETWORK
TITLE = Schleuse_Ausfahrt_LP7
CALL #Schleuse_Ausfahrt_LP7
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3333"
);
--- NW 12: Weiche_LP10 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:=?, ZylGst:=?)
NETWORK
TITLE = Schleuse_Ausfahrt_LP8
CALL #Schleuse_Ausfahrt_LP8
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3332"
);
NETWORK
TITLE = Schleuse_Ausfahrt_LP9
CALL #Schleuse_Ausfahrt_LP9
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3331"
);
--- NW 13: Schleuse_Ausfahrt_LP1 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3341", ZylGst:=?)
NETWORK
TITLE = Schleuse_Ausfahrt_LP10
CALL #Schleuse_Ausfahrt_LP10
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3330"
);
NETWORK
TITLE = Ende
Next: BE;
--- NW 14: Schleuse_Ausfahrt_LP2 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3340", ZylGst:=?)
--- NW 15: Schleuse_Ausfahrt_LP3 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3337", ZylGst:=?)
--- NW 16: Schleuse_Ausfahrt_LP4 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3336", ZylGst:=?)
--- NW 17: Schleuse_Ausfahrt_LP5 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3335", ZylGst:=?)
--- NW 18: Schleuse_Ausfahrt_LP6 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3334", ZylGst:=?)
--- NW 19: Schleuse_Ausfahrt_LP7 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3333", ZylGst:=?)
--- NW 20: Schleuse_Ausfahrt_LP8 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3332", ZylGst:=?)
--- NW 21: Schleuse_Ausfahrt_LP9 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3331", ZylGst:=?)
--- NW 22: Schleuse_Ausfahrt_LP10 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3330", ZylGst:=?)
--- NW 23: Ende ---
Next: BE
END_FUNCTION_BLOCK
@@ -1,30 +1,30 @@
=== FC 5100: LP_Bereich [STL] ===
INTERFACE:
Input:
Output:
InOut:
Temp:
Constant:
Return:
Ret_Val : Void
FUNCTION "LP_Bereich" : Void
TITLE = Bereich Outbound: Leerpuffer
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
--- NW 1: Durchfahr- / Saugmodus ---
// In LeerPufferStrecken [FB5431] /Nw8ff
BEGIN
NETWORK
TITLE = Durchfahr- / Saugmodus
--- NW 2: Baustein-Aufrufe ---
CALL FB "LP_Sensoren" ,
//In LeerPufferStrecken [FB5431] /Nw8ff
NETWORK
TITLE = Baustein-Aufrufe
CALL "LP_Sensoren", "DLP_Sensoren";
CALL FB "LP_OmniFahren" ,
CALL "LP_OmniFahren", "DLP_OmniFahren";
CALL FB "LeerPufferStrecken" ,
CALL "LeerPufferStrecken", "DLeerPufferStrecken";
CALL FB "LP_Sorter" ,
CALL "LP_Sorter", "DLP_Sorter";
CALL FB "LP_Auslagern" ,
CALL "LP_Auslagern", "DLP_Auslagern";
CALL FB "LP_Zylinder" ,
CALL "LP_Zylinder", "DLP_Zylinder";
NETWORK
TITLE = Ende
BE;
--- NW 3: Ende ---
BE
END_FUNCTION
@@ -1,37 +1,42 @@
=== FC 5182: LP_Draussen_FC [STL] ===
INTERFACE:
Input:
Output:
InOut:
Temp:
Constant:
Return:
Ret_Val : Void
FUNCTION "LP_Draussen_FC" : Void
TITLE = Draussen-FC: LeerPuffer
{ S7_Optimized_Access := 'FALSE' ; S7_Pass_Registers := 'TRUE' }
AUTHOR : AE
VERSION : 0.1
--- NW 1: Rückmeldung ---
SET // Rückmeldungen erst mal resetten
R "M180.6" // Weiterfahrt von Ziel-FC erlaubt
BEGIN
NETWORK
TITLE = Rückmeldung
SET;//Rückmeldungen erst mal resetten
R "M180.6";//Weiterfahrt von Ziel-FC erlaubt
NETWORK
TITLE = Schleuse 3305 (vor Sorter LP): Ausgefahren ?
L "MW190";
L 3305 ;//Aufruf von Schleuse 3305 ?
<>I;//Nein!
SPB X3305E;
--- NW 2: Schleuse 3305 (vor Sorter LP): Ausgefahren ? ---
L "MW190"
L 3305 // Aufruf von Schleuse 3305 ?
<>I // Nein!
JC X3305E
CALL "Reservierung_in_Puffer_eintragen"
( TrolleyID := "DLP_Sorter".Sorter_MB3305.Dyn.Scanner.Rec_IDX ,
Ziel := "DLP_Sorter".Sorter_MB3305.Dyn.Scanner.Rec_DEST_Ziel ,
ShopGroup := DINT#0 ,
Gesamt_Trolley_DL := 0
);
CALL FC "Reservierung_in_Puffer_eintragen" (TrolleyID:="DLP_Sorter".Sorter_MB3305.Dyn.Scanner.Rec_IDX, Ziel:="DLP_Sorter".Sorter_MB3305.Dyn.Scanner.Rec_DEST_Ziel, ShopGroup:=DINT#0, Gesamt_Trolley_DL:=0)
//Daten in Sep 3305 löschen:
L DINT#0;
T "DLP_Sorter".Sorter_MB3305.Dyn.Scanner.Rec_IDX;//IDX
L 0;
T "DLP_Sorter".Sorter_MB3305.Dyn.Scanner.Rec_DEST_Ziel;
// Daten in Sep 3305 löschen:
L DINT#0
T "DLP_Sorter".Sorter_MB3305.Dyn.Scanner.Rec_IDX // IDX
L 0
T "DLP_Sorter".Sorter_MB3305.Dyn.Scanner.Rec_DEST_Ziel
BEA;
BEU
X3305E: NOP 0;
X3305E: NOP 0
NETWORK
TITLE = Ende
BE;
--- NW 3: Ende ---
BE
END_FUNCTION
@@ -1,62 +1,83 @@
=== FB 5128: LP_OmniFahren [STL] ===
INTERFACE:
Input:
Output:
InOut:
Static:
Schleuse_3305 : "MHMOmniSchleuse"
Temp:
ErrQuit : Bool
ErrAnz : Bool
Stau_raus : Bool
Start_ok : Bool
B_aktiv : Bool
B_vor_Schleuse : Bool
B_nach_Schleuse : Bool
Antrieb_aktiv : Bool
Antrieb_start : Bool
Antrieb_stop : Bool
Fahren_Ok : Bool
Antrieb_nicht_stoppen : Bool
Constant:
FUNCTION_BLOCK "LP_OmniFahren"
TITLE = Omnifahren Outbound Leerpuffer
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
VAR
Schleuse_3305 { S7_SetPoint := 'False'} : "MHMOmniSchleuse";
END_VAR
--- NW 1: Systemzeug ---
// Verschiedene Bereiche:
A "DOutbound_Bereich".A01_UH07.AnlageEin
= Schleuse_3305.Dyn.Sk.Auto_akt
AN "DOutbound_Bereich".A01_UH07.BereichErr
= Schleuse_3305.Dyn.Sk.Bereich_ok
VAR_TEMP
ErrQuit : Bool;
ErrAnz : Bool;
Stau_raus : Bool;
Start_ok : Bool;
B_aktiv : Bool;
B_vor_Schleuse : Bool;
B_nach_Schleuse : Bool;
Antrieb_aktiv : Bool;
Antrieb_start : Bool;
Antrieb_stop : Bool;
Fahren_Ok : Bool;
Antrieb_nicht_stoppen : Bool;
END_VAR
--- NW 2: Störungen quittieren UZ0702 ---
A "DOutbound_Bereich".A01_UZ0702.StOk_aktiv
O "DOutbound_Bereich".A01_UH07.StOk_aktiv
= ErrQuit
BEGIN
NETWORK
TITLE = Systemzeug
//Verschiedene Bereiche:
U "DOutbound_Bereich".A01_UH07.AnlageEin;
= #Schleuse_3305.Dyn.Sk.Auto_akt;
--- NW 3: Schleuse 3305 ---
CALL FB "None" , (Schleusen_Nr:=3305, ErrQuit:=ErrQuit, B_VorSchleuse:="BG3304", B_InSchleuse:="BG3305", B_AusSchleuse:=?, B_Stau_raus:=?, Start_Ok:=?, Antrieb_Schleuse_aktiv:="MA0064", Antrieb_plus_aktiv:=?, Schleuse_geöffnet:="MB3305", RestZeit_Bereich_plus:=?, Y_Schleuse_Auf:=?, Error:=DB708.DBW524, Antrieb_Schleuse_vor:="DEPtoLP_Antriebe".MA0064.Stat.A_vor, Antrieb_Schleuse_start:="DEPtoLP_Antriebe".MA0064.Stat.A_start, Antrieb_Schleuse_stop:="DEPtoLP_Antriebe".MA0064.Stat.Stop_vor, Antrieb_Schleuse_PS:="DEPtoLP_Antriebe".MA0064.Stat.A_PS, Antrieb_plus_vor:=?, Antrieb_plus_start:=?, hStOk:=ErrAnz) // weiterfahrt über Sorter-Sep
UN "DOutbound_Bereich".A01_UH07.BereichErr;
= #Schleuse_3305.Dyn.Sk.Bereich_ok;
AN Schleuse_3305.Dyn.Status.Reset_aktiv
JC NoR3305
NETWORK
TITLE = Störungen quittieren UZ0702
U "DOutbound_Bereich".A01_UZ0702.StOk_aktiv;
O "DOutbound_Bereich".A01_UH07.StOk_aktiv;
= #ErrQuit;
L DINT#0
T "DLP_Sorter".Sorter_MB3305.Dyn.Scanner.Rec_IDX // IDX
L 0
T "DLP_Sorter".Sorter_MB3305.Separator.Default_Ziel
T "DLP_Sorter".Sorter_MB3305.Dyn.Scanner.Rec_DEST_Ziel
NETWORK
TITLE = Schleuse 3305
CALL #Schleuse_3305
( Schleusen_Nr := 3305 ,
ErrQuit := #ErrQuit ,
B_VorSchleuse := "BG3304" ,
B_InSchleuse := "BG3305" ,
B_AusSchleuse := , //weiterfahrt über Sorter-Sep
Antrieb_Schleuse_aktiv := "MA0064" ,
Schleuse_geöffnet := "MB3305" ,
Error := %DB708.DBW524 ,
Antrieb_Schleuse_vor := "DEPtoLP_Antriebe".MA0064.Stat.A_vor ,
Antrieb_Schleuse_start := "DEPtoLP_Antriebe".MA0064.Stat.A_start ,
Antrieb_Schleuse_stop := "DEPtoLP_Antriebe".MA0064.Stat.Stop_vor ,
Antrieb_Schleuse_PS := "DEPtoLP_Antriebe".MA0064.Stat.A_PS ,
hStOk := #ErrAnz
);
NoR3305: NOP 0
UN #Schleuse_3305.Dyn.Status.Reset_aktiv;
SPB NoR3305;
L DINT#0;
T "DLP_Sorter".Sorter_MB3305.Dyn.Scanner.Rec_IDX;//IDX
L 0;
T "DLP_Sorter".Sorter_MB3305.Separator.Default_Ziel;
T "DLP_Sorter".Sorter_MB3305.Dyn.Scanner.Rec_DEST_Ziel;
--- NW 4: Störungen anzeigen UZ0702 ---
A ErrAnz
R ErrAnz
S "DOutbound_Bereich".A01_UZ0702.StOk_blinken
S "DOutbound_Bereich".A01_UH07.StOk_blinken
NoR3305: NOP 0;
NETWORK
TITLE = Störungen anzeigen UZ0702
U #ErrAnz;
R #ErrAnz;
S "DOutbound_Bereich".A01_UZ0702.StOk_blinken;
S "DOutbound_Bereich".A01_UH07.StOk_blinken;
--- NW 5: Ende ---
BE
NETWORK
TITLE = Ende
BE;
END_FUNCTION_BLOCK
@@ -1,119 +1,132 @@
=== FC 5181: LP_Ziel_FC [STL] ===
INTERFACE:
Input:
Output:
InOut:
Temp:
Ziel_hex : Word
Ziel_int : Int
Zielebene : Word
Error : Byte
Position : Int
Lager_DB : Int
Lager_DW : Int
AR1Zeiger : DWord // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
AR1Start : DInt // Startwert mit Offset 0
SSDW : Int
EndZiel : Word
Variante : Int
AbrufID : DInt
Fahrlisten_TrolleyID : DInt
Fahrlisten_AbrufID : DInt
Fahrlisten_Lager : Int
Trolley_unbekannt : Bool // Trolley ist nicht in DL
Express_Abruf : Bool
Constant:
Return:
Ret_Val : Void
--- NW 1: Rückmeldung ---
SET // Rückmeldungen erst mal resetten
R "M180.6" // Weiterfahrt von Ziel-FC erlaubt
FUNCTION "LP_Ziel_FC" : Void
TITLE = Ziel-FC: LeerPuffer_OmniFahren
{ S7_Optimized_Access := 'FALSE' ; S7_Pass_Registers := 'TRUE' }
AUTHOR : AE
VERSION : 0.1
VAR_TEMP
Ziel_hex : Word;
Ziel_int : Int;
Zielebene : Word;
Error : Byte;
Position : Int;
Lager_DB : Int;
Lager_DW : Int;
AR1Zeiger : DWord; // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
AR1Start : DInt; // Startwert mit Offset 0
SSDW : Int;
EndZiel : Word;
Variante : Int;
AbrufID : DInt;
Fahrlisten_TrolleyID : DInt;
Fahrlisten_AbrufID : DInt;
Fahrlisten_Lager : Int;
Trolley_unbekannt : Bool; // Trolley ist nicht in DL
Express_Abruf : Bool;
END_VAR
--- NW 2: Schleuse 3305: Weiterfahren erlaubt ? (Sorter LP) ---
L "MW190"
L 3305 // Aufruf von Schleuse 3305 ?
<>I // Nein!
JC X3305E
BEGIN
NETWORK
TITLE = Rückmeldung
SET;//Rückmeldungen erst mal resetten
R "M180.6";//Weiterfahrt von Ziel-FC erlaubt
A "MB3305"
BEC
NETWORK
TITLE = Schleuse 3305: Weiterfahren erlaubt ? (Sorter LP)
L "MW190";
L 3305 ;//Aufruf von Schleuse 3305 ?
<>I;//Nein!
SPB X3305E;
// Leer-Puffer ermitteln:
CALL FC "Leerpuffer to Rein-Lager ermitteln" (Puffer:=Ziel_hex)
U "MB3305";
BEB;
// Ziel = Leer-Lager?
L Ziel_hex
L 16#f000
AW
L 16#A000 // Ziel = Leer-Lager ?
==I // Ja!
JC LagerOk_3305
//Leer-Puffer ermitteln:
CALL "Leerpuffer_Rein-Lager ermitteln"
( Puffer := #Ziel_hex
);
BEU // Kein Lager frei!
//Ziel = Leer-Lager?
L #Ziel_hex;
L 16#f000;
UW;
L 16#A000 ;//Ziel = Leer-Lager ?
==I ;//Ja!
SPB LagerOk_3305;
LagerOk_3305: L Ziel_hex
L 16#FF
AW
BTI // Damit Int 1-10 als Ziel !
T Ziel_int
BEA ;//Kein Lager frei!
// Check, ob Ziel-Lager Inilauf aktiv hat:
T "MW220"
LagerOk_3305: L #Ziel_hex;
L 16#FF;
UW;
BTI ;//Damit Int 1-10 als Ziel !
T #Ziel_int;
CALL FC "DatenOut" (SSDB:=275, SSDW:=0, PARA:=16#0000, SEARCHDATEN:=P#M220.0, RE_VAL:="MB199", OUTDATEN:=P#M220.0, Position:=Position) // Eintrag lesen
//Check, ob Ziel-Lager Inilauf aktiv hat:
T "MW220";
L "MB199"
L 2#1111111 // Bit 7 ausblenden
AW
L 0 // Fehler vorhanden?
<>I // Ja
JC Egal
CALL "DatenOut"
( SSDB := 275 ,
SSDW := 0 ,
PARA := 16#0000 , //Eintrag lesen
SEARCHDATEN := P#M220.0 ,
RE_VAL := "MB199" ,
OUTDATEN := P#M220.0 ,
Position := #Position
);
L "MW224"
T Lager_DB
L "MW226"
T Lager_DW
ITD
T AR1Start // Startwert mit Offset 0
L "MB199";
L 2#1111111 ;//Bit 7 ausblenden
UW;
L 0;//Fehler vorhanden?
<>I;//Ja
SPB Egal;
L AR1Start // Startwert mit Offset 0
+ DINT#70 // Offset Status (Bit 7: Inilauf)
SLD 3
L 7 // Damit DBX_Bit 7
OD
T AR1Zeiger // Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
L "MW224";
T #Lager_DB;
L "MW226";
T #Lager_DW;
ITD;
T #AR1Start;//Startwert mit Offset 0
OPN DB[Lager_DB] // Lager-DB öffnen
L #AR1Start;//Startwert mit Offset 0
+ DINT#70 ;//Offset Status (Bit 7: Inilauf)
SLD 3;
L 7 ;//Damit DBX_Bit 7
OD;
T #AR1Zeiger;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
A DBX [AR1Zeiger] // Lager hat Inilauf aktiv
BEC // Sonst kann der Inilauf nie beendet werden!
AUF DB[ #Lager_DB] ;//Lager-DB öffnen
Egal: L Ziel_int
T "DLP_Sorter".Sorter_MB3305.Separator.Default_Ziel
T "DLP_Sorter".Sorter_MB3305.Dyn.Scanner.Rec_DEST_Ziel
U DBX[ #AR1Zeiger] ;//Lager hat Inilauf aktiv
BEB;//Sonst kann der Inilauf nie beendet werden!
// Pseudo-IDX übergeben:
L "DLP_Sorter".Sorter_MB3305.Dyn.Scanner.Rec_IDX // IDX
L DINT#0 // Daten schon erzeugt?
<>D // Ja!
BEC
Egal: L #Ziel_int;
T "DLP_Sorter".Sorter_MB3305.Separator.Default_Ziel;
T "DLP_Sorter".Sorter_MB3305.Dyn.Scanner.Rec_DEST_Ziel;
L "DLP_Sorter".Pseudo_IDX // Da kein Leser verbaut
L dint#1
+D
T "DLP_Sorter".Pseudo_IDX
T "DLP_Sorter".Sorter_MB3305.Dyn.Scanner.Rec_IDX // IDX
//Pseudo-IDX übergeben:
L "DLP_Sorter".Sorter_MB3305.Dyn.Scanner.Rec_IDX;//IDX
L DINT#0 ;//Daten schon erzeugt?
<>D;//Ja!
BEB;
CLR // Wird über MSorterRein (FB5423/5) gestartet!
S "M180.6" // Weiterfahrt ist erlaubt
L "DLP_Sorter".Pseudo_IDX;//Da kein Leser verbaut
L dint#1;
+D;
T "DLP_Sorter".Pseudo_IDX;
T "DLP_Sorter".Sorter_MB3305.Dyn.Scanner.Rec_IDX;//IDX
BEU
CLR ;//Wird über MSorterRein (FB5423/5) gestartet!
S "M180.6" ;//Weiterfahrt ist erlaubt
X3305E: NOP 0
BEA;
X3305E: NOP 0;
--- NW 3: Ende ---
BE
NETWORK
TITLE = Ende
BE;
END_FUNCTION
@@ -1,358 +1,532 @@
=== FB 5423: LP_Sorter [STL] ===
INTERFACE:
Input:
Output:
InOut:
Static:
Sorter_MB3305 : "MSepSorterRein"
Sync_BG3306 : "MStartSync"
Weiche_LP1 : "MWeiche_Sorter"
Weiche_LP2 : "MWeiche_Sorter"
Weiche_LP3 : "MWeiche_Sorter"
Weiche_LP4 : "MWeiche_Sorter"
Weiche_LP5 : "MWeiche_Sorter"
Weiche_LP6 : "MWeiche_Sorter"
Weiche_LP7 : "MWeiche_Sorter"
Weiche_LP8 : "MWeiche_Sorter"
Weiche_LP9 : "MWeiche_Sorter"
Weiche_LP10 : "MWeiche_Sorter"
Impuls_BG3374 : "MImpulsGeber"
Pseudo_IDX : DInt // Pseudo-Trolley-Nr. da kein Leser vor Sorter
Ohne_PC_fahren : Bool
Input:
Output:
InOut:
Static:
Dyn : Struct
GesamtSorterReset : Bool := 1
Temp:
ErrQuit : Bool
ErrAnz : Bool
Antrieb : Bool
Stau : Bool
Start_Ok : Bool
SorterReset : Bool
Error_aktiv : Bool
Leer : Bool
Err_DW : DInt
Err_Bits : Int
Constant:
--- NW 1: Systemzeug ---
A "DOutbound_Bereich".A01_UH07.AnlageEin
= Sorter_MB3305.Dyn.Sk.Auto_akt
AN "DOutbound_Bereich".A01_UH07.BereichErr
= Sorter_MB3305.Dyn.Sk.Bereich_ok
// Bereichshalt:
CLR // nicht verbaut
R Sorter_MB3305.Dyn.Sk.Bereich_ok
// Sonderbetriebsarten Weichen:
CLR
= Weiche_LP1.Dyn.Status.Weichentest_aktiv
= Weiche_LP2.Dyn.Status.Weichentest_aktiv
= Weiche_LP3.Dyn.Status.Weichentest_aktiv
= Weiche_LP4.Dyn.Status.Weichentest_aktiv
= Weiche_LP5.Dyn.Status.Weichentest_aktiv
= Weiche_LP6.Dyn.Status.Weichentest_aktiv
= Weiche_LP7.Dyn.Status.Weichentest_aktiv
= Weiche_LP8.Dyn.Status.Weichentest_aktiv
= Weiche_LP9.Dyn.Status.Weichentest_aktiv
= Weiche_LP10.Dyn.Status.Weichentest_aktiv
A Sync_BG3306.Dyn.Status.TeachModus_Aktiv
= Weiche_LP1.Dyn.Status.TeachModus_aktiv
= Weiche_LP2.Dyn.Status.TeachModus_aktiv
= Weiche_LP3.Dyn.Status.TeachModus_aktiv
= Weiche_LP4.Dyn.Status.TeachModus_aktiv
= Weiche_LP5.Dyn.Status.TeachModus_aktiv
= Weiche_LP6.Dyn.Status.TeachModus_aktiv
= Weiche_LP7.Dyn.Status.TeachModus_aktiv
= Weiche_LP8.Dyn.Status.TeachModus_aktiv
= Weiche_LP9.Dyn.Status.TeachModus_aktiv
= Weiche_LP10.Dyn.Status.TeachModus_aktiv
CLR
= Sorter_MB3305.Dyn.Error.Korrektur_Modus_aktiv
L 5474 // DLSeps
T "MW174"
L 5478 // DLWeichen
T "MW178"
// Nach neuen Daten suchen:
A "1s-Impuls"
= "Weiche_NewData"
--- NW 2: Linien mit PLC_Ziel anfahren ---
A Ohne_PC_fahren
JCN En03
A "MB3121"
O "MB3123"
CU "Z102"
L "Z102"
L 1
<I
A(
L Sorter_MB3305.Separator.Default_Ziel
L 0 // Bekannt ?
>I // Ja !
)
JC En03
SET
R "Z102"
L Sorter_MB3305.Separator.Default_Ziel
L 0 // unbekannt ?
==I
L 5030 // Beginn mit Ausfahrziel 1.Puffer
JC X399
// Nächste Weiche suchen:
L Sorter_MB3305.Separator.Default_Ziel
T "MW200"
CALL FC "DatenOut" (SSDB:="MW178", SSDW:=0, PARA:=WORD#16#0E00, SEARCHDATEN:=P#M200.0, RE_VAL:="MB199", OUTDATEN:=P#M200.0, Position:="MW196") // Nach angegeben Datenbyte suchen (Abzweig-Ziel)
AN "M199.7" // Datensatz ist nicht vorhanden
O "M208.0" // Letzte Weiche
L 0 // Neubeginn
JC X400
X398: CALL FC "DatenOut" (SSDB:="MW178", SSDW:=0, PARA:=WORD#16#FF00, SEARCHDATEN:=P#M200.0, RE_VAL:="MB199", OUTDATEN:=P#M200.0, Position:="MW196") // Nächsten Datensatz lesen
L "MW206" // Weichentyp
L 178 // Sorterweiche ?
<>I // Nein!
O "M199.2" // Ende erreicht
L 0
JC X400
A "M208.5" // Weiche für PLC-Ziel disabled !
JC X398
L "MW226"
T Sorter_MB3305.Separator.Default_Ziel
JU En03
// 1.Weiche checken:
X399: T "MW200"
CALL FC "DatenOut" (SSDB:="MW178", SSDW:=0, PARA:=WORD#16#0E00, SEARCHDATEN:=P#M200.0, RE_VAL:="MB199", OUTDATEN:=P#M200.0, Position:="MW196") // Nach angegeben Datenbyte suchen (Abzweig-Ziel)
AN "M199.7" // Datensatz ist nicht vorhanden
JC En03
A "M208.5" // Weiche für PLC-Ziel disabled !
JC X398
L "MW226"
X400: T Sorter_MB3305.Separator.Default_Ziel
En03: NOP 0
--- NW 3: Störung vorhanden ? ---
CALL FC "Err_vorhanden" (Check_DB:=708, Anfangs_DW:=DINT#100, Ende_DW:=DINT#122, Stoerung:=Error_aktiv, ErrDW:=Err_DW, ErrBits:=Err_Bits) // Störungsanzeige
A Error_aktiv // s.o.
= Error_aktiv // Sorter Lager Weichen-Störung (Sorter-Antrieb gestoppt!)
A "BG3306" // Verlassen-Sensor
L S5T#250MS
OffDelay "T540"
--- NW 4: Störung quittieren UH07 ---
A "DOutbound_Bereich".A01_UH07.StOk_aktiv
= ErrQuit
--- NW 5: Sorter-GesamtReset ---
// Sorter-Reset starten:
A "DLP_OmniFahren".Schleuse_3305.Dyn.Status.Reset_aktiv // Bei Schleusen-Reset -> Sorter mit resetten!
AN "DLP_Sorter".Sorter_MB3305.Dyn.GesamtSorterReset_aktiv
S "DLP_Sorter".Sorter_MB3305.Dyn.GesamtSorterReset
--- NW 6: Separator 3305 vor Sorter ---
L DB708.DBW102 // Err beim Synchronisieren
L 0 // Störung vorhanden ?
==I // Nein !
AN Sync_BG3306.Dyn.Stop // Rein-Separator stoppen
AN Error_aktiv // Sorter Batch Weichen-Störung (Sorter-Antrieb gestoppt!)
AN Sorter_MB3305.Dyn.GesamtSorterReset_aktiv
= Start_Ok
SET // Da Leiste im Sep und Zusatz-Zylinder im Separator -> BT steht sofort sauber im Sep
S Sorter_MB3305.Dyn.BT_beruhigt // 1. einfahrender BügelTräger ist im Sep
A "T540"
= Sorter_MB3305.B_AusSep // Entprellung Verlassen-Sensor
// Triggern / Scanner-Auswertung über HW>VP_Omnifahren (FC128/27)
// Ziel über Default-Ziel (HW>VP_Ziel_FC, FC181)
CALL FB "None" , (Separator_Nr:=3305, ErrQuit:=ErrQuit, B_VorSep:=?, B_ImSep:="BG3305", B_AusSep:=?, B_Beladen_im_Sep:=?, B_Pinsensor:="BG3374", B_Beladen_nach_Sep:=?, Start_Ok:=Start_Ok, Antrieb_aktiv:="MA0064", Antrieb_plus_aktiv:="MA0064", Y_Sep_Auf:="DLP_Zylinder".Sorter_3305.Stat.Ast, K_Sanner_triggern:=?, Sorter_Reset:=SorterReset, Error:=DB708.DBW100, Antrieb_start:="DEPtoLP_Antriebe".MA0064.Stat.A_start, Antrieb_plus_start:="DEPtoLP_Antriebe".MA0064.Stat.A_vor, Antrieb_stoppen:="DEPtoLP_Antriebe".MA0064.Stat.Stop_vor, hStOk:=ErrAnz)
// Default-Ziel jeden Zyklus neu!:
L 0
T Sorter_MB3305.Separator.Default_Ziel
--- NW 7: Reset ist aktiv ---
A Sorter_MB3305.Dyn.GesamtSorterReset_aktiv
= "7_HMI_Err_UH07_OB".Sorter_MB3305.Reset_aktiv
A Sorter_MB3305.Dyn.GesamtSorterReset_aktiv
= Weiche_LP1.Dyn.Ohne_VerklemmKontrolle
= Weiche_LP2.Dyn.Ohne_VerklemmKontrolle
= Weiche_LP3.Dyn.Ohne_VerklemmKontrolle
= Weiche_LP4.Dyn.Ohne_VerklemmKontrolle
= Weiche_LP5.Dyn.Ohne_VerklemmKontrolle
= Weiche_LP6.Dyn.Ohne_VerklemmKontrolle
= Weiche_LP7.Dyn.Ohne_VerklemmKontrolle
= Weiche_LP8.Dyn.Ohne_VerklemmKontrolle
= Weiche_LP9.Dyn.Ohne_VerklemmKontrolle
= Weiche_LP10.Dyn.Ohne_VerklemmKontrolle
// Diesen Sorterbereich zurücksetzen:
A SorterReset // Ein Zyklus
S Sync_BG3306.Dyn.Reset
S Weiche_LP1.Dyn.Status.Reset
S Weiche_LP2.Dyn.Status.Reset
S Weiche_LP3.Dyn.Status.Reset
S Weiche_LP4.Dyn.Status.Reset
S Weiche_LP5.Dyn.Status.Reset
S Weiche_LP6.Dyn.Status.Reset
S Weiche_LP7.Dyn.Status.Reset
S Weiche_LP8.Dyn.Status.Reset
S Weiche_LP9.Dyn.Status.Reset
S Weiche_LP10.Dyn.Status.Reset
--- NW 8: Inkremente über Zahnrad-Sensor ---
CALL FB "None" , (Ink_DB:=5483, B_Zaehlen:="BG3374", Antrieb_aktiv:="MA0064", Quit:=ErrQuit, Zeit_Signal_zu_lang:=?, Zeit_Kein_Signal:=?, Signal:=?, Err_Kein_Signal:="7_HMI_Err_UH07_OB".Impulsgeber_3374.Kein_Signal, Err_Signal_zu_lang:="7_HMI_Err_UH07_OB".Impulsgeber_3374.Signal_zu_lang)
A(
O "7_HMI_Err_UH07_OB".Impulsgeber_3374.Kein_Signal
O "7_HMI_Err_UH07_OB".Impulsgeber_3374.Signal_zu_lang
)
AN ErrQuit
S "DEPtoLP_Antriebe".MA0064.Stat.Stop_vor
A(
O "7_HMI_Err_UH07_OB".Impulsgeber_3374.Kein_Signal
O "7_HMI_Err_UH07_OB".Impulsgeber_3374.Signal_zu_lang
)
S ErrAnz
--- NW 9: Trolley synchronisieren BG3306 ---
// Teachen: Ref-Sensor ueber Sync-Sensor
A "BG3306"
AN Sync_BG3306.Dyn.Refpunkt_ok // Nur eimalige Auswertung
= Sync_BG3306.B_RefPunkt // uebergabe fuer unten
A "MA0064"
L S5T#500ms
OffDelay "T543"
A "T543"
AN Sync_BG3306.Dyn.Status.TeachModus_Aktiv // sonst Probleme bei Doppelimpuls
O
A "MA0064"
A Sync_BG3306.Dyn.Status.TeachModus_Aktiv // sonst Probleme bei Doppelimpuls
= Antrieb
// Keine Hauptstrangdaten vorhanden ? (Fuer Sync-Pkt):
L "LP_HS_oF".Datensortkopf.AnzahlEintraege
L "LP_HS_mF".Datensortkopf.AnzahlEintraege
+I
L 0 // Daten vorhanden ?
==I // Nein !
= "Hauptstrang_leer" // Keine Haupstrangdaten vorhanden -> Verklemm-Errors löschen
A "BG3306"
L s5t#500ms // Da trotz Entprellung Doppel-Impulse
OffDelay "T544"
A "T544"
= Sync_BG3306.B_BT_da
CALL FB "None" , (Sync_Nr:=3306, ErrQuit:=ErrQuit, B_BT_da:=?, B_RefPunkt:=?, B_TeachPunk:=?, Antrieb_aktiv:=Antrieb, Error:=DB708.DBW102, Antrieb_start:="DEPtoLP_Antriebe".MA0064.Stat.A_start, hStOk:=ErrAnz) // Teach-Sensor
A Sync_BG3306.Dyn.Error.Inkrementalgeber
S "DEPtoLP_Antriebe".MA0064.Stat.Stop_vor
// Keine Hauptstrangdaten vorhanden ?:
L "LP_HS_oF".Datensortkopf.AnzahlEintraege
L "LP_HS_mF".Datensortkopf.AnzahlEintraege
+I
L 0 // Daten vorhanden ?
==I // Nein !
= "Hauptstrang_leer" // Keine Haupstrangdaten vorhanden -> Verklemm-Errors löschen
// Spezial, da Sorter-Antrieb über SorterRein-Sep geht!: (Sonst Antriebs-Stop wegen PS)
AN "Hauptstrang_leer" // Keine Haupstrangdaten vorhanden -> Verklemm-Errors löschen
O "MB3305" // Neuer Sort-Trolley kommt
O "BG3306"
L s5t#20s
OffDelay "T541"
A "T541" // Alle Sort-Trolleys sind ins Puffer ausgefahren
S "DEPtoLP_Antriebe".MA0064.Stat.A_vor
--- NW 10: Weiche 3320 / Leerpuffer LP1 ---
CALL FB "None" , (Weichen_Nr:=1, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DLP_Sensoren".Stau_LP1.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3320", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DLP_Zylinder".Weiche_LP1.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW104, Antrieb_start:="DEPtoLP_Antriebe".MA0064.Stat.A_start, Antrieb_stoppen:="DEPtoLP_Antriebe".MA0064.Stat.Stop_vor, hStOk:=ErrAnz)
--- NW 11: Weiche 3317 / Leerpuffer LP2 ---
CALL FB "None" , (Weichen_Nr:=2, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DLP_Sensoren".Stau_LP2.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3317", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DLP_Zylinder".Weiche_LP2.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW106, Antrieb_start:="DEPtoLP_Antriebe".MA0064.Stat.A_start, Antrieb_stoppen:="DEPtoLP_Antriebe".MA0064.Stat.Stop_vor, hStOk:=ErrAnz)
--- NW 12: Weiche 3316 / Leerpuffer LP3 ---
CALL FB "None" , (Weichen_Nr:=3, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DLP_Sensoren".Stau_LP3.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3316", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DLP_Zylinder".Weiche_LP3.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW108, Antrieb_start:="DEPtoLP_Antriebe".MA0064.Stat.A_start, Antrieb_stoppen:="DEPtoLP_Antriebe".MA0064.Stat.Stop_vor, hStOk:=ErrAnz)
--- NW 13: Weiche 3315 / Leerpuffer LP4 ---
CALL FB "None" , (Weichen_Nr:=4, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DLP_Sensoren".Stau_LP4.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3315", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DLP_Zylinder".Weiche_LP4.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW110, Antrieb_start:="DEPtoLP_Antriebe".MA0064.Stat.A_start, Antrieb_stoppen:="DEPtoLP_Antriebe".MA0064.Stat.Stop_vor, hStOk:=ErrAnz)
--- NW 14: Weiche 3314 / Leerpuffer LP5 ---
CALL FB "None" , (Weichen_Nr:=5, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DLP_Sensoren".Stau_LP5.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3314", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DLP_Zylinder".Weiche_LP5.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW112, Antrieb_start:="DEPtoLP_Antriebe".MA0064.Stat.A_start, Antrieb_stoppen:="DEPtoLP_Antriebe".MA0064.Stat.Stop_vor, hStOk:=ErrAnz)
--- NW 15: Weiche 3313 / Leerpuffer LP6 ---
CALL FB "None" , (Weichen_Nr:=6, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DLP_Sensoren".Stau_LP6.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3313", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DLP_Zylinder".Weiche_LP6.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW114, Antrieb_start:="DEPtoLP_Antriebe".MA0064.Stat.A_start, Antrieb_stoppen:="DEPtoLP_Antriebe".MA0064.Stat.Stop_vor, hStOk:=ErrAnz)
--- NW 16: Weiche 3312 / Leerpuffer LP7 ---
CALL FB "None" , (Weichen_Nr:=7, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DLP_Sensoren".Stau_LP7.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3312", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DLP_Zylinder".Weiche_LP7.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW116, Antrieb_start:="DEPtoLP_Antriebe".MA0064.Stat.A_start, Antrieb_stoppen:="DEPtoLP_Antriebe".MA0064.Stat.Stop_vor, hStOk:=ErrAnz)
--- NW 17: Weiche 3311 / Leerpuffer LP8 ---
CALL FB "None" , (Weichen_Nr:=8, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DLP_Sensoren".Stau_LP8.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3311", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DLP_Zylinder".Weiche_LP8.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW118, Antrieb_start:="DEPtoLP_Antriebe".MA0064.Stat.A_start, Antrieb_stoppen:="DEPtoLP_Antriebe".MA0064.Stat.Stop_vor, hStOk:=ErrAnz)
--- NW 18: Weiche 3310 / Leerpuffer LP9 ---
CALL FB "None" , (Weichen_Nr:=9, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DLP_Sensoren".Stau_LP9.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3310", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DLP_Zylinder".Weiche_LP9.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW120, Antrieb_start:="DEPtoLP_Antriebe".MA0064.Stat.A_start, Antrieb_stoppen:="DEPtoLP_Antriebe".MA0064.Stat.Stop_vor, hStOk:=ErrAnz)
--- NW 19: Pseudo-Weiche / Leerpuffer LP10 ---
CALL FB "None" , (Weichen_Nr:=10, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DLP_Sensoren".Stau_LP10.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3307", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DLP_Zylinder".Weiche_LP10.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW122, Antrieb_start:="DEPtoLP_Antriebe".MA0064.Stat.A_start, Antrieb_stoppen:="DEPtoLP_Antriebe".MA0064.Stat.Stop_vor, hStOk:=ErrAnz)
--- NW 20: Störungen anzeigen UH07 ---
A ErrAnz
S "DOutbound_Bereich".A01_UH07.StOk_blinken
--- NW 21: Ende ---
BE
FUNCTION_BLOCK "LP_Sorter"
TITLE = Sorter Leerpuffer 1-10
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : IBAE
VERSION : 0.1
VAR
Sorter_MB3305 : "MSepSorterRein";
Sync_BG3306 : "MStartSync";
Weiche_LP1 : "MWeiche_Sorter";
Weiche_LP2 : "MWeiche_Sorter";
Weiche_LP3 : "MWeiche_Sorter";
Weiche_LP4 : "MWeiche_Sorter";
Weiche_LP5 : "MWeiche_Sorter";
Weiche_LP6 : "MWeiche_Sorter";
Weiche_LP7 : "MWeiche_Sorter";
Weiche_LP8 : "MWeiche_Sorter";
Weiche_LP9 : "MWeiche_Sorter";
Weiche_LP10 : "MWeiche_Sorter";
Impuls_BG3374 : "MImpulsGeber";
Pseudo_IDX { S7_SetPoint := 'True'} : DInt; // Pseudo-Trolley-Nr. da kein Leser vor Sorter
Ohne_PC_fahren { S7_SetPoint := 'True'} : Bool;
END_VAR
VAR_TEMP
ErrQuit : Bool;
ErrAnz : Bool;
Antrieb : Bool;
Stau : Bool;
Start_Ok : Bool;
SorterReset : Bool;
Error_aktiv : Bool;
Leer : Bool;
Err_DW : DInt;
Err_Bits : Int;
END_VAR
BEGIN
NETWORK
TITLE = Systemzeug
U "DOutbound_Bereich".A01_UH07.AnlageEin;
= #Sorter_MB3305.Dyn.Sk.Auto_akt;
UN "DOutbound_Bereich".A01_UH07.BereichErr;
= #Sorter_MB3305.Dyn.Sk.Bereich_ok;
//Bereichshalt:
CLR;//nicht verbaut
R #Sorter_MB3305.Dyn.Sk.Bereich_ok;
//Sonderbetriebsarten Weichen:
CLR;
= #Weiche_LP1.Dyn.Status.Weichentest_aktiv;
= #Weiche_LP2.Dyn.Status.Weichentest_aktiv;
= #Weiche_LP3.Dyn.Status.Weichentest_aktiv;
= #Weiche_LP4.Dyn.Status.Weichentest_aktiv;
= #Weiche_LP5.Dyn.Status.Weichentest_aktiv;
= #Weiche_LP6.Dyn.Status.Weichentest_aktiv;
= #Weiche_LP7.Dyn.Status.Weichentest_aktiv;
= #Weiche_LP8.Dyn.Status.Weichentest_aktiv;
= #Weiche_LP9.Dyn.Status.Weichentest_aktiv;
= #Weiche_LP10.Dyn.Status.Weichentest_aktiv;
U #Sync_BG3306.Dyn.Status.TeachModus_Aktiv;
= #Weiche_LP1.Dyn.Status.TeachModus_aktiv;
= #Weiche_LP2.Dyn.Status.TeachModus_aktiv;
= #Weiche_LP3.Dyn.Status.TeachModus_aktiv;
= #Weiche_LP4.Dyn.Status.TeachModus_aktiv;
= #Weiche_LP5.Dyn.Status.TeachModus_aktiv;
= #Weiche_LP6.Dyn.Status.TeachModus_aktiv;
= #Weiche_LP7.Dyn.Status.TeachModus_aktiv;
= #Weiche_LP8.Dyn.Status.TeachModus_aktiv;
= #Weiche_LP9.Dyn.Status.TeachModus_aktiv;
= #Weiche_LP10.Dyn.Status.TeachModus_aktiv;
CLR;
= #Sorter_MB3305.Dyn.Error.Korrektur_Modus_aktiv;
L 5474 ;//DLSeps
T "MW174";
L 5478 ;//DLWeichen
T "MW178";
//Nach neuen Daten suchen:
U "1s-Impuls";
= "Weiche_NewData";
NETWORK
TITLE = Linien mit PLC_Ziel anfahren
U #Ohne_PC_fahren;
SPBN En03;
U "MB3121";
O "MB3123";
ZV "Z102";
L "Z102";
L 1;
<I;
U(;
L #Sorter_MB3305.Separator.Default_Ziel;
L 0;//Bekannt ?
>I;//Ja !
);
SPB En03;
SET;
R "Z102";
L #Sorter_MB3305.Separator.Default_Ziel;
L 0 ;//unbekannt ?
==I;
L 5030 ;//Beginn mit Ausfahrziel 1.Puffer
SPB X399;
//Nächste Weiche suchen:
L #Sorter_MB3305.Separator.Default_Ziel;
T "MW200";
CALL "DatenOut"
( SSDB := "MW178" ,
SSDW := 0 ,
PARA := WORD#16#0E00 , //Nach angegeben Datenbyte suchen (Abzweig-Ziel)
SEARCHDATEN := P#M200.0 ,
RE_VAL := "MB199" ,
OUTDATEN := P#M200.0 ,
Position := "MW196"
);
UN "M199.7" ;//Datensatz ist nicht vorhanden
O "M208.0" ;//Letzte Weiche
L 0;//Neubeginn
SPB X400;
X398: CALL "DatenOut"
( SSDB := "MW178" ,
SSDW := 0 ,
PARA := WORD#16#FF00 , //Nächsten Datensatz lesen
SEARCHDATEN := P#M200.0 ,
RE_VAL := "MB199" ,
OUTDATEN := P#M200.0 ,
Position := "MW196"
);
L "MW206";//Weichentyp
L 178;//Sorterweiche ?
<>I;//Nein!
O "M199.2" ;//Ende erreicht
L 0;
SPB X400;
U "M208.5" ;//Weiche für PLC-Ziel disabled !
SPB X398;
L "MW226";
T #Sorter_MB3305.Separator.Default_Ziel;
SPA En03;
//1.Weiche checken:
X399: T "MW200";
CALL "DatenOut"
( SSDB := "MW178" ,
SSDW := 0 ,
PARA := WORD#16#0E00 , //Nach angegeben Datenbyte suchen (Abzweig-Ziel)
SEARCHDATEN := P#M200.0 ,
RE_VAL := "MB199" ,
OUTDATEN := P#M200.0 ,
Position := "MW196"
);
UN "M199.7" ;//Datensatz ist nicht vorhanden
SPB En03;
U "M208.5" ;//Weiche für PLC-Ziel disabled !
SPB X398;
L "MW226";
X400: T #Sorter_MB3305.Separator.Default_Ziel;
En03: NOP 0;
NETWORK
TITLE = Störung vorhanden ?
CALL "Err_vorhanden" //Störungsanzeige
( Check_DB := 708 ,
Anfangs_DW := DINT#100 ,
Ende_DW := DINT#122 ,
Stoerung := #Error_aktiv ,
ErrDW := #Err_DW ,
ErrBits := #Err_Bits
);
U #Error_aktiv ;//s.o.
= #Error_aktiv ;//Sorter Lager Weichen-Störung (Sorter-Antrieb gestoppt!)
U "BG3306" ;//Verlassen-Sensor
L S5T#250MS;
SA "T540";
NETWORK
TITLE = Störung quittieren UH07
U "DOutbound_Bereich".A01_UH07.StOk_aktiv;
= #ErrQuit;
NETWORK
TITLE = Sorter-GesamtReset
//Sorter-Reset starten:
U "DLP_OmniFahren".Schleuse_3305.Dyn.Status.Reset_aktiv;//Bei Schleusen-Reset -> Sorter mit resetten!
UN "DLP_Sorter".Sorter_MB3305.Dyn.GesamtSorterReset_aktiv;
S "DLP_Sorter".Sorter_MB3305.Dyn.GesamtSorterReset;
NETWORK
TITLE = Separator 3305 vor Sorter
L %DB708.DBW102 ;//Err beim Synchronisieren
L 0;//Störung vorhanden ?
==I;//Nein !
UN #Sync_BG3306.Dyn.Stop;//Rein-Separator stoppen
UN #Error_aktiv;//Sorter Batch Weichen-Störung (Sorter-Antrieb gestoppt!)
UN #Sorter_MB3305.Dyn.GesamtSorterReset_aktiv;
= #Start_Ok;
SET ;//Da Leiste im Sep und Zusatz-Zylinder im Separator -> BT steht sofort sauber im Sep
S #Sorter_MB3305.Dyn.BT_beruhigt;//1. einfahrender BügelTräger ist im Sep
U "T540";
= #Sorter_MB3305.B_AusSep;//Entprellung Verlassen-Sensor
//Triggern / Scanner-Auswertung über HW>VP_Omnifahren (FC128/27)
//Ziel über Default-Ziel (HW>VP_Ziel_FC, FC181)
CALL #Sorter_MB3305
( Separator_Nr := 3305 ,
ErrQuit := #ErrQuit ,
B_ImSep := "BG3305" ,
B_Pinsensor := "BG3374" ,
Start_Ok := #Start_Ok ,
Antrieb_aktiv := "MA0064" ,
Antrieb_plus_aktiv := "MA0064" ,
Y_Sep_Auf := "DLP_Zylinder".Sorter_3305.Stat.Ast ,
Sorter_Reset := #SorterReset ,
Error := %DB708.DBW100 ,
Antrieb_start := "DEPtoLP_Antriebe".MA0064.Stat.A_start ,
Antrieb_plus_start := "DEPtoLP_Antriebe".MA0064.Stat.A_vor ,
Antrieb_stoppen := "DEPtoLP_Antriebe".MA0064.Stat.Stop_vor ,
hStOk := #ErrAnz
);
//Default-Ziel jeden Zyklus neu!:
L 0;
T #Sorter_MB3305.Separator.Default_Ziel;
NETWORK
TITLE = Reset ist aktiv
U #Sorter_MB3305.Dyn.GesamtSorterReset_aktiv;
= "7_HMI_Err_UH07_OB".Sorter_MB3305.Reset_aktiv;
U #Sorter_MB3305.Dyn.GesamtSorterReset_aktiv;
= #Weiche_LP1.Dyn.Ohne_VerklemmKontrolle;
= #Weiche_LP2.Dyn.Ohne_VerklemmKontrolle;
= #Weiche_LP3.Dyn.Ohne_VerklemmKontrolle;
= #Weiche_LP4.Dyn.Ohne_VerklemmKontrolle;
= #Weiche_LP5.Dyn.Ohne_VerklemmKontrolle;
= #Weiche_LP6.Dyn.Ohne_VerklemmKontrolle;
= #Weiche_LP7.Dyn.Ohne_VerklemmKontrolle;
= #Weiche_LP8.Dyn.Ohne_VerklemmKontrolle;
= #Weiche_LP9.Dyn.Ohne_VerklemmKontrolle;
= #Weiche_LP10.Dyn.Ohne_VerklemmKontrolle;
//Diesen Sorterbereich zurücksetzen:
U #SorterReset;//Ein Zyklus
S #Sync_BG3306.Dyn.Reset;
S #Weiche_LP1.Dyn.Status.Reset;
S #Weiche_LP2.Dyn.Status.Reset;
S #Weiche_LP3.Dyn.Status.Reset;
S #Weiche_LP4.Dyn.Status.Reset;
S #Weiche_LP5.Dyn.Status.Reset;
S #Weiche_LP6.Dyn.Status.Reset;
S #Weiche_LP7.Dyn.Status.Reset;
S #Weiche_LP8.Dyn.Status.Reset;
S #Weiche_LP9.Dyn.Status.Reset;
S #Weiche_LP10.Dyn.Status.Reset;
NETWORK
TITLE = Inkremente über Zahnrad-Sensor
CALL #Impuls_BG3374
( Ink_DB := 5483 ,
B_Zaehlen := "BG3374" ,
Antrieb_aktiv := "MA0064" ,
Quit := #ErrQuit ,
Err_Kein_Signal := "7_HMI_Err_UH07_OB".Impulsgeber_3374.Kein_Signal ,
Err_Signal_zu_lang := "7_HMI_Err_UH07_OB".Impulsgeber_3374.Signal_zu_lang
);
U(;
O "7_HMI_Err_UH07_OB".Impulsgeber_3374.Kein_Signal;
O "7_HMI_Err_UH07_OB".Impulsgeber_3374.Signal_zu_lang;
);
UN #ErrQuit;
S "DEPtoLP_Antriebe".MA0064.Stat.Stop_vor;
U(;
O "7_HMI_Err_UH07_OB".Impulsgeber_3374.Kein_Signal;
O "7_HMI_Err_UH07_OB".Impulsgeber_3374.Signal_zu_lang;
);
S #ErrAnz;
NETWORK
TITLE = Trolley synchronisieren BG3306
//Teachen: Ref-Sensor ueber Sync-Sensor
U "BG3306";
UN #Sync_BG3306.Dyn.Refpunkt_ok;//Nur eimalige Auswertung
= #Sync_BG3306.B_RefPunkt;//uebergabe fuer unten
U "MA0064";
L S5T#500ms;
SA "T543";
U "T543";
UN #Sync_BG3306.Dyn.Status.TeachModus_Aktiv;//sonst Probleme bei Doppelimpuls
O;
U "MA0064";
U #Sync_BG3306.Dyn.Status.TeachModus_Aktiv;//sonst Probleme bei Doppelimpuls
= #Antrieb;
//Keine Hauptstrangdaten vorhanden ? (Fuer Sync-Pkt):
L "LP_HS_oF".Datensortkopf.AnzahlEintraege;
L "LP_HS_mF".Datensortkopf.AnzahlEintraege;
+I;
L 0;//Daten vorhanden ?
==I;//Nein !
= "Hauptstrang_leer";//Keine Haupstrangdaten vorhanden -> Verklemm-Errors löschen
U "BG3306";
L s5t#500ms;//Da trotz Entprellung Doppel-Impulse
SA "T544";
U "T544";
= #Sync_BG3306.B_BT_da;
CALL #Sync_BG3306
( Sync_Nr := 3306 ,
ErrQuit := #ErrQuit ,
B_TeachPunk := , //Teach-Sensor
Antrieb_aktiv := #Antrieb ,
Error := %DB708.DBW102 ,
Antrieb_start := "DEPtoLP_Antriebe".MA0064.Stat.A_start ,
hStOk := #ErrAnz
);
U #Sync_BG3306.Dyn.Error.Inkrementalgeber;
S "DEPtoLP_Antriebe".MA0064.Stat.Stop_vor;
//Keine Hauptstrangdaten vorhanden ?:
L "LP_HS_oF".Datensortkopf.AnzahlEintraege;
L "LP_HS_mF".Datensortkopf.AnzahlEintraege;
+I;
L 0;//Daten vorhanden ?
==I;//Nein !
= "Hauptstrang_leer" ;//Keine Haupstrangdaten vorhanden -> Verklemm-Errors löschen
//Spezial, da Sorter-Antrieb über SorterRein-Sep geht!: (Sonst Antriebs-Stop wegen PS)
UN "Hauptstrang_leer" ;//Keine Haupstrangdaten vorhanden -> Verklemm-Errors löschen
O "MB3305" ;//Neuer Sort-Trolley kommt
O "BG3306";
L s5t#20s;
SA "T541";
U "T541" ;//Alle Sort-Trolleys sind ins Puffer ausgefahren
S "DEPtoLP_Antriebe".MA0064.Stat.A_vor;
NETWORK
TITLE = Weiche 3320 / Leerpuffer LP1
CALL #Weiche_LP1
( Weichen_Nr := 1 ,
ErrQuit := #ErrQuit ,
Stau_Ausfahrtbereich := "DLP_Sensoren".Stau_LP1.Stat.B_Akt ,
B_Ausfahrt := "BG3320" ,
Antrieb_aktiv := #Antrieb ,
Y_Weiche_abzweigen := "DLP_Zylinder".Weiche_LP1.Stat.Ast ,
Error := %DB708.DBW104 ,
Antrieb_start := "DEPtoLP_Antriebe".MA0064.Stat.A_start ,
Antrieb_stoppen := "DEPtoLP_Antriebe".MA0064.Stat.Stop_vor ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Weiche 3317 / Leerpuffer LP2
CALL #Weiche_LP2
( Weichen_Nr := 2 ,
ErrQuit := #ErrQuit ,
Stau_Ausfahrtbereich := "DLP_Sensoren".Stau_LP2.Stat.B_Akt ,
B_Ausfahrt := "BG3317" ,
Antrieb_aktiv := #Antrieb ,
Y_Weiche_abzweigen := "DLP_Zylinder".Weiche_LP2.Stat.Ast ,
Error := %DB708.DBW106 ,
Antrieb_start := "DEPtoLP_Antriebe".MA0064.Stat.A_start ,
Antrieb_stoppen := "DEPtoLP_Antriebe".MA0064.Stat.Stop_vor ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Weiche 3316 / Leerpuffer LP3
CALL #Weiche_LP3
( Weichen_Nr := 3 ,
ErrQuit := #ErrQuit ,
Stau_Ausfahrtbereich := "DLP_Sensoren".Stau_LP3.Stat.B_Akt ,
B_Ausfahrt := "BG3316" ,
Antrieb_aktiv := #Antrieb ,
Y_Weiche_abzweigen := "DLP_Zylinder".Weiche_LP3.Stat.Ast ,
Error := %DB708.DBW108 ,
Antrieb_start := "DEPtoLP_Antriebe".MA0064.Stat.A_start ,
Antrieb_stoppen := "DEPtoLP_Antriebe".MA0064.Stat.Stop_vor ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Weiche 3315 / Leerpuffer LP4
CALL #Weiche_LP4
( Weichen_Nr := 4 ,
ErrQuit := #ErrQuit ,
Stau_Ausfahrtbereich := "DLP_Sensoren".Stau_LP4.Stat.B_Akt ,
B_Ausfahrt := "BG3315" ,
Antrieb_aktiv := #Antrieb ,
Y_Weiche_abzweigen := "DLP_Zylinder".Weiche_LP4.Stat.Ast ,
Error := %DB708.DBW110 ,
Antrieb_start := "DEPtoLP_Antriebe".MA0064.Stat.A_start ,
Antrieb_stoppen := "DEPtoLP_Antriebe".MA0064.Stat.Stop_vor ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Weiche 3314 / Leerpuffer LP5
CALL #Weiche_LP5
( Weichen_Nr := 5 ,
ErrQuit := #ErrQuit ,
Stau_Ausfahrtbereich := "DLP_Sensoren".Stau_LP5.Stat.B_Akt ,
B_Ausfahrt := "BG3314" ,
Antrieb_aktiv := #Antrieb ,
Y_Weiche_abzweigen := "DLP_Zylinder".Weiche_LP5.Stat.Ast ,
Error := %DB708.DBW112 ,
Antrieb_start := "DEPtoLP_Antriebe".MA0064.Stat.A_start ,
Antrieb_stoppen := "DEPtoLP_Antriebe".MA0064.Stat.Stop_vor ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Weiche 3313 / Leerpuffer LP6
CALL #Weiche_LP6
( Weichen_Nr := 6 ,
ErrQuit := #ErrQuit ,
Stau_Ausfahrtbereich := "DLP_Sensoren".Stau_LP6.Stat.B_Akt ,
B_Ausfahrt := "BG3313" ,
Antrieb_aktiv := #Antrieb ,
Y_Weiche_abzweigen := "DLP_Zylinder".Weiche_LP6.Stat.Ast ,
Error := %DB708.DBW114 ,
Antrieb_start := "DEPtoLP_Antriebe".MA0064.Stat.A_start ,
Antrieb_stoppen := "DEPtoLP_Antriebe".MA0064.Stat.Stop_vor ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Weiche 3312 / Leerpuffer LP7
CALL #Weiche_LP7
( Weichen_Nr := 7 ,
ErrQuit := #ErrQuit ,
Stau_Ausfahrtbereich := "DLP_Sensoren".Stau_LP7.Stat.B_Akt ,
B_Ausfahrt := "BG3312" ,
Antrieb_aktiv := #Antrieb ,
Y_Weiche_abzweigen := "DLP_Zylinder".Weiche_LP7.Stat.Ast ,
Error := %DB708.DBW116 ,
Antrieb_start := "DEPtoLP_Antriebe".MA0064.Stat.A_start ,
Antrieb_stoppen := "DEPtoLP_Antriebe".MA0064.Stat.Stop_vor ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Weiche 3311 / Leerpuffer LP8
CALL #Weiche_LP8
( Weichen_Nr := 8 ,
ErrQuit := #ErrQuit ,
Stau_Ausfahrtbereich := "DLP_Sensoren".Stau_LP8.Stat.B_Akt ,
B_Ausfahrt := "BG3311" ,
Antrieb_aktiv := #Antrieb ,
Y_Weiche_abzweigen := "DLP_Zylinder".Weiche_LP8.Stat.Ast ,
Error := %DB708.DBW118 ,
Antrieb_start := "DEPtoLP_Antriebe".MA0064.Stat.A_start ,
Antrieb_stoppen := "DEPtoLP_Antriebe".MA0064.Stat.Stop_vor ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Weiche 3310 / Leerpuffer LP9
CALL #Weiche_LP9
( Weichen_Nr := 9 ,
ErrQuit := #ErrQuit ,
Stau_Ausfahrtbereich := "DLP_Sensoren".Stau_LP9.Stat.B_Akt ,
B_Ausfahrt := "BG3310" ,
Antrieb_aktiv := #Antrieb ,
Y_Weiche_abzweigen := "DLP_Zylinder".Weiche_LP9.Stat.Ast ,
Error := %DB708.DBW120 ,
Antrieb_start := "DEPtoLP_Antriebe".MA0064.Stat.A_start ,
Antrieb_stoppen := "DEPtoLP_Antriebe".MA0064.Stat.Stop_vor ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Pseudo-Weiche / Leerpuffer LP10
CALL #Weiche_LP10
( Weichen_Nr := 10 ,
ErrQuit := #ErrQuit ,
Stau_Ausfahrtbereich := "DLP_Sensoren".Stau_LP10.Stat.B_Akt ,
B_Ausfahrt := "BG3307" ,
Antrieb_aktiv := #Antrieb ,
Y_Weiche_abzweigen := "DLP_Zylinder".Weiche_LP10.Stat.Ast ,
Error := %DB708.DBW122 ,
Antrieb_start := "DEPtoLP_Antriebe".MA0064.Stat.A_start ,
Antrieb_stoppen := "DEPtoLP_Antriebe".MA0064.Stat.Stop_vor ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Störungen anzeigen UH07
U #ErrAnz;
S "DOutbound_Bereich".A01_UH07.StOk_blinken;
NETWORK
TITLE = Ende
BE;
END_FUNCTION_BLOCK
@@ -1,146 +1,244 @@
=== FB 6199: LPtoHW_Antriebe [STL] ===
INTERFACE:
Input:
Output:
InOut:
Static:
MA0065 : "MAntrieb_PowerSave"
MA0066 : "MAntrieb_PowerSave"
MA0264 : "MAntrieb_PowerSave"
MA0265 : "MAntrieb_PowerSave"
MA0266 : "MAntrieb_PowerSave"
MA0267 : "MAntrieb_PowerSave"
MA0270 : "MAntrieb_PowerSave"
MA0202 : "MAntrieb_PowerSave"
MA0203 : "MAntrieb_PowerSave"
Temp:
Auto : Bool // Automatik Linie ist aktiv
Hand : Bool // Hand Linie ist aktiv
BereichErr : Bool // Bereichsstörung -> Antrieb stoppen
QKontroll : Bool // Frequenzumrichter schon 3s Netz EIN
FuKontroll : Bool // Frequenzumrichter schon 3s Netz EIN
Quit : Bool // Motorschutz-Störung quittieren
Qok : Bool // Motorschutz ok
Jog1 : Bool // Geschwindigkeit 1
Jog2 : Bool // Geschwindigkeit 2
Betrieb : Bool // Betriebsart aktiv
FC105_RET : Word // Returnwert von FC105
Antrieb1 : Bool // Antrieb dazuschalten
Antrieb2 : Bool // Antrieb dazuschalten
F1 : Bool // Geschwindigkeit 1 aktiviert
F2 : Bool // Geschwindigkeit 2 aktiviert
F3 : Bool // Geschwindigkeit 3 aktiviert
Constant:
FUNCTION_BLOCK "LPtoHW_Antriebe"
TITLE = Antriebe UH07
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : IBAE
VERSION : 0.1
VAR
MA0065 : "MAntrieb_PowerSave";
MA0066 : "MAntrieb_PowerSave";
MA0264 : "MAntrieb_PowerSave";
MA0265 : "MAntrieb_PowerSave";
MA0266 : "MAntrieb_PowerSave";
MA0267 : "MAntrieb_PowerSave";
MA0270 : "MAntrieb_PowerSave";
MA0202 : "MAntrieb_PowerSave";
MA0203 : "MAntrieb_PowerSave";
END_VAR
--- NW 1: Übergabe des Bereichstatus System UH07/A01 ---
A "DOutbound_Bereich".A01_UH07.Automatik
AN "DOutbound_Bereich".A01_UH07.Handbetrieb
= Auto
CLR
= Hand
A "DOutbound_Bereich".A01_UH07.BereichErr
AN "SGes".Simulation_ohne_HW_aktiv
= BereichErr
A "T197"
= QKontroll
= FuKontroll
A "DOutbound_Bereich".A01_UH07.StOk_aktiv
= Quit
VAR_TEMP
Auto : Bool; // Automatik Linie ist aktiv
Hand : Bool; // Hand Linie ist aktiv
BereichErr : Bool; // Bereichsstörung -> Antrieb stoppen
QKontroll : Bool; // Frequenzumrichter schon 3s Netz EIN
FuKontroll : Bool; // Frequenzumrichter schon 3s Netz EIN
Quit : Bool; // Motorschutz-Störung quittieren
Qok : Bool; // Motorschutz ok
Jog1 : Bool; // Geschwindigkeit 1
Jog2 : Bool; // Geschwindigkeit 2
Betrieb : Bool; // Betriebsart aktiv
FC105_RET : Word; // Returnwert von FC105
Antrieb1 : Bool; // Antrieb dazuschalten
Antrieb2 : Bool; // Antrieb dazuschalten
F1 : Bool; // Geschwindigkeit 1 aktiviert
F2 : Bool; // Geschwindigkeit 2 aktiviert
F3 : Bool; // Geschwindigkeit 3 aktiviert
END_VAR
--- NW 2: MA0065 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0065", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0065", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0065, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
BEGIN
NETWORK
TITLE = Übergabe des Bereichstatus System UH07/A01
U "DOutbound_Bereich".A01_UH07.Automatik;
UN "DOutbound_Bereich".A01_UH07.Handbetrieb;
= #Auto;
CLR;
= #Hand;
U "DOutbound_Bereich".A01_UH07.BereichErr;
UN "SGes".Simulation_ohne_HW_aktiv;
= #BereichErr;
U "T197";
= #QKontroll;
= #FuKontroll;
U "DOutbound_Bereich".A01_UH07.StOk_aktiv;
= #Quit;
NETWORK
TITLE = MA0065
CALL #MA0065
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0065" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0065" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0065
);
--- NW 3: MA0066 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0066", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0066", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0066, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
NETWORK
TITLE = MA0066
CALL #MA0066
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0066" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0066" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0066
);
NETWORK
TITLE = Übergabe des Bereichstatus System UC073/A01
U "DOutbound_Bereich".A01_UH07.Automatik;
UN "DOutbound_Bereich".A01_UH07.Handbetrieb;
= #Auto;
--- NW 4: Übergabe des Bereichstatus System UC073/A01 ---
A "DOutbound_Bereich".A01_UH07.Automatik
AN "DOutbound_Bereich".A01_UH07.Handbetrieb
= Auto
CLR;
= #Hand;
CLR
= Hand
U "DOutbound_Bereich".A01_UC073.BereichErr;
UN "SGes".Simulation_ohne_HW_aktiv;
= #BereichErr;
A "DOutbound_Bereich".A01_UC073.BereichErr
AN "SGes".Simulation_ohne_HW_aktiv
= BereichErr
U "T193";
= #QKontroll;
= #FuKontroll;
A "T193"
= QKontroll
= FuKontroll
U "DOutbound_Bereich".A01_UC073.StOk_aktiv;
= #Quit;
A "DOutbound_Bereich".A01_UC073.StOk_aktiv
= Quit
NETWORK
TITLE = MA0264
CALL #MA0264
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0264" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0264" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0264
);
--- NW 5: MA0264 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0264", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0264", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0264, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
NETWORK
TITLE = MA0265
CALL #MA0265
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0265" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
T_Nachlauf := 90 ,
Antriebvor := "MA0265" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0265
);
--- NW 6: MA0265 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0265", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=90, Antriebrueck:=?, Antriebvor:="MA0265", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0265, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
NETWORK
TITLE = MA0266
CALL #MA0266
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0266" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0266" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0266
);
--- NW 7: MA0266 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0266", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0266", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0266, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
NETWORK
TITLE = MA0267
CALL #MA0267
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0267" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0267" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0267
);
--- NW 8: MA0267 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0267", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0267", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0267, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
NETWORK
TITLE = MA0270
CALL #MA0270
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0270" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0270" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0270
);
NETWORK
TITLE = Übergabe des Bereichstatus System UC072/A01
U "DOutbound_Bereich".A01_UH07.Automatik;
UN "DOutbound_Bereich".A01_UH07.Handbetrieb;
= #Auto;
--- NW 9: MA0270 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0270", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0270", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0270, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
CLR;
= #Hand;
U(;
O "DOutbound_Bereich".A01_UC072.BereichErr;
O "DOutbound_Bereich".A01_UZ7201.Area_Stop;
O "DOutbound_Bereich".A01_UZ7202.Area_Stop;
);
UN "SGes".Simulation_ohne_HW_aktiv;
= #BereichErr;
U "T192";
= #QKontroll;
= #FuKontroll;
U "DOutbound_Bereich".A01_UC072.StOk_aktiv;
= #Quit;
NETWORK
TITLE = MA0202
CALL #MA0202
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0202" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0202" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0202
);
--- NW 10: Übergabe des Bereichstatus System UC072/A01 ---
A "DOutbound_Bereich".A01_UH07.Automatik
AN "DOutbound_Bereich".A01_UH07.Handbetrieb
= Auto
CLR
= Hand
A(
O "DOutbound_Bereich".A01_UC072.BereichErr
O "DOutbound_Bereich".A01_UZ7201.Area_Stop
O "DOutbound_Bereich".A01_UZ7202.Area_Stop
)
AN "SGes".Simulation_ohne_HW_aktiv
= BereichErr
A "T192"
= QKontroll
= FuKontroll
A "DOutbound_Bereich".A01_UC072.StOk_aktiv
= Quit
NETWORK
TITLE = MA0203
CALL #MA0203
( Automatik := #Auto ,
Handbetrieb := #Hand ,
BereichErr := #BereichErr ,
Q := "FC0203" ,
Ptc := TRUE ,
QKontroll := #QKontroll ,
ErrQuit := #Quit ,
Antriebvor := "MA0203" ,
QErr := "7_HMI_Err_UH07_OB".QErr.MA0203
);
--- NW 11: MA0202 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0202", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0202", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0202, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
NETWORK
TITLE = Ende
BE;
--- NW 12: MA0203 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=Hand, BereichErr:=BereichErr, Q:="FC0203", Ptc:=TRUE, Fu:=?, QKontroll:=QKontroll, FuKontroll:=?, ErrQuit:=Quit, Kontroll_B:=?, T_Nachlauf:=?, Antriebrueck:=?, Antriebvor:="MA0203", Jog1:=?, Jog2:=?, Analog:=?, QErr:="7_HMI_Err_UH07_OB".QErr.MA0203, PtcErr:=?, FuErr:=?, Err_Antrieb_verklemmt:=?)
--- NW 13: Ende ---
BE
END_FUNCTION_BLOCK
@@ -1,145 +1,278 @@
=== FB 6190: LPtoHW_Sensoren [STL] ===
INTERFACE:
Input:
Output:
InOut:
Static:
An_BG3323 : "MSensoren" // Trolley am Sensor BG3323
Sack_BG3324 : "MSensoren" // Sack erkannt
Stau_BG3343 : "MSensoren" // Stau am Sensor Einfahrt MA0065
An_BG3343 : "MSensoren" // Stau am Sensor Einfahrt MA0065
Stau_BG3344 : "MSensoren" // Stau am Sensor Einfahrt MA0065
An_BG3344 : "MSensoren" // Stau am Sensor Einfahrt MA0065
Stau_BG3326 : "MSensoren" // Stau am Sensor Einfahrt MA0066
Stau_BG4220 : "MSensoren" // Stau am Sensor Einfahrt MA0264
Sack_BG4222 : "MSensoren" // Sack erkannt
Stau_BG4224 : "MSensoren" // Stau am Sensor Einfahrt MA0265
Stau_BG4226 : "MSensoren" // Stau am Sensor Einfahrt MA0266
Stau_BG4231 : "MSensoren" // Stau am Sensor Einfahrt MA0267
Stau_BG4233 : "MSensoren" // Stau am Sensor Einfahrt MA0270
Stau_BG4234 : "MSensoren" // Stau am Sensor Mitte MA0270
Stau_BG3720 : "MSensoren" // Stau am Sensor hinter BST2
Stau_BG3721 : "MSensoren" // Stau am Sensor Einfahrt MA0203
Stau_BG3723 : "MSensoren" // Stau am Sensor Ausfahrt MB3722
Fährt_zu_UH06 : "MSensoren"
Temp:
T_Ein : Int // Vorgabe Einschaltverzögerung
T_Aus : Int // Zwischenspeicher Ausschaltverzögerung
F1 : Bool // Geschwindigkeit 1 aktiviert
F2 : Bool // Geschwindigkeit 2 aktiviert
F3 : Bool // Geschwindigkeit 3 aktiviert
ESensor : Bool // Sensoren
Antrieb : Bool
VReal : Real // GeschwindigkeitinReal
Zeit : Int // Zeit für Ausschaltverzögerung LT1100
Aktiv : Bool // Zeit aktivieren
Constant:
FUNCTION_BLOCK "LPtoHW_Sensoren"
TITLE = Sensoren Outbound: LP > HW
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : IBAE
VERSION : 0.1
VAR
An_BG3323 : "MSensoren"; // Trolley am Sensor BG3323
Sack_BG3324 : "MSensoren"; // Sack erkannt
Stau_BG3343 : "MSensoren"; // Stau am Sensor Einfahrt MA0065
An_BG3343 : "MSensoren"; // Stau am Sensor Einfahrt MA0065
Stau_BG3344 : "MSensoren"; // Stau am Sensor Einfahrt MA0065
An_BG3344 : "MSensoren"; // Stau am Sensor Einfahrt MA0065
Stau_BG3326 : "MSensoren"; // Stau am Sensor Einfahrt MA0066
Stau_BG4220 : "MSensoren"; // Stau am Sensor Einfahrt MA0264
Sack_BG4222 : "MSensoren"; // Sack erkannt
Stau_BG4224 : "MSensoren"; // Stau am Sensor Einfahrt MA0265
Stau_BG4226 : "MSensoren"; // Stau am Sensor Einfahrt MA0266
Stau_BG4231 : "MSensoren"; // Stau am Sensor Einfahrt MA0267
Stau_BG4233 : "MSensoren"; // Stau am Sensor Einfahrt MA0270
Stau_BG4234 : "MSensoren"; // Stau am Sensor Mitte MA0270
Stau_BG3720 : "MSensoren"; // Stau am Sensor hinter BST2
Stau_BG3721 : "MSensoren"; // Stau am Sensor Einfahrt MA0203
Stau_BG3723 : "MSensoren"; // Stau am Sensor Ausfahrt MB3722
Fährt_zu_UH06 : "MSensoren";
END_VAR
--- NW 1: Sensoren entprellen ---
A "BG3323"
AN "MB3323"
= ESensor
CALL FB "None" , (ESensor:=ESensor, T_Ein:=1, T_Aus:=300, tein_aktiv:=1, taus_aktiv:=1) // Falls Trolley entnommen wurde
A "MB3323" // Beim Öffnen löschen
A "MA0065"
R "DLPtoHW_Sensoren".An_BG3323.Stat.B_Akt
VAR_TEMP
T_Ein : Int; // Vorgabe Einschaltverzögerung
T_Aus : Int; // Zwischenspeicher Ausschaltverzögerung
F1 : Bool; // Geschwindigkeit 1 aktiviert
F2 : Bool; // Geschwindigkeit 2 aktiviert
F3 : Bool; // Geschwindigkeit 3 aktiviert
ESensor : Bool; // Sensoren
Antrieb : Bool;
VReal : Real; // GeschwindigkeitinReal
Zeit : Int; // Zeit für Ausschaltverzögerung LT1100
Aktiv : Bool; // Zeit aktivieren
END_VAR
--- NW 2: Sensoren entprellen ---
AN "MB3323" // Alt-Trolley noch beim Ausfahren
A(
O "MA0065"
O "BG3323"
)
= Aktiv
BEGIN
NETWORK
TITLE = Trolley in Schleuse 3323 erkannt (Beladung)
//Sensoren entprellen
U "BG3323";
UN "MB3323";
= #ESensor;
CALL FB "None" , (ESensor:="BG3324", T_Ein:=10, T_Aus:=0, tein_aktiv:=Aktiv, taus_aktiv:=1)
CALL #An_BG3323
( ESensor := #ESensor ,
T_Ein := 1 ,
T_Aus := 300 , //Falls Trolley entnommen wurde
tein_aktiv := 1 ,
taus_aktiv := 1
);
U "MB3323";//Beim Öffnen löschen
U "MA0065";
R "DLPtoHW_Sensoren".An_BG3323.Stat.B_Akt;
--- NW 3: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3343", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Sack in Schleuse 3323 erkannt (Beladung)
//Sensoren entprellen
UN "MB3323" ;//Alt-Trolley noch beim Ausfahren
U(;
O "MA0065";
O "BG3323";
);
= #Aktiv;
CALL #Sack_BG3324
( ESensor := "BG3324" ,
T_Ein := 10 ,
T_Aus := 0 ,
tein_aktiv := #Aktiv ,
taus_aktiv := 1
);
--- NW 4: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3343", T_Ein:=1, T_Aus:=200, tein_aktiv:=TRUE, taus_aktiv:="MA0065")
NETWORK
TITLE = Stau am Sensor nach Beladung
//Sensoren entprellen
CALL #Stau_BG3343
( ESensor := "BG3343" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Trolley am Sensor nach Beladung
//Sensoren entprellen
CALL #An_BG3343
( ESensor := "BG3343" ,
T_Ein := 1 ,
T_Aus := 200 ,
tein_aktiv := TRUE ,
taus_aktiv := "MA0065"
);
--- NW 5: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3344", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Stau am Sensor nach Beladung
//Sensoren entprellen
CALL #Stau_BG3344
( ESensor := "BG3344" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Trolley am Sensor nach Beladung
//Sensoren entprellen
CALL #An_BG3344
( ESensor := "BG3344" ,
T_Ein := 1 ,
T_Aus := 200 ,
tein_aktiv := TRUE ,
taus_aktiv := "MA0065"
);
--- NW 6: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3344", T_Ein:=1, T_Aus:=200, tein_aktiv:=TRUE, taus_aktiv:="MA0065")
NETWORK
TITLE = Stau am Sensor Einfahrt MA0066
//Sensoren entprellen
CALL #Stau_BG3326
( ESensor := "BG3326" ,
T_Ein := 1 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau am Sensor Einfahrt MA0264
//Sensoren entprellen
UN "BG4221";
= #Aktiv;
--- NW 7: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3326", T_Ein:=1, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
CALL #Stau_BG4220
( ESensor := "BG4220" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := #Aktiv //Trolley wieder aus Schleuse 4221
);
NETWORK
TITLE = Sack in Schleuse 4221 erkannt (Vor ByPass zu VP)
//Sensoren entprellen
UN "MB4221";//Alt-Trolley noch beim Ausfahren
U(;
O "MA0264";
O "BG4221";
);
= #Aktiv;
--- NW 8: Sensoren entprellen ---
AN "BG4221"
= Aktiv
CALL #Sack_BG4222
( ESensor := "BG4222" ,
T_Ein := 1 ,
T_Aus := 11 ,
tein_aktiv := #Aktiv ,
taus_aktiv := "MB4221"
);
CALL FB "None" , (ESensor:="BG4220", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=Aktiv) // Trolley wieder aus Schleuse 4221
NETWORK
TITLE = Stau am Sensor Einfahrt MA0265
//Sensoren entprellen
CALL #Stau_BG4224
( ESensor := "BG4224" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau am Sensor Einfahrt MA0266
//Sensoren entprellen
CALL #Stau_BG4226
( ESensor := "BG4226" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 9: Sensoren entprellen ---
AN "MB4221" // Alt-Trolley noch beim Ausfahren
A(
O "MA0264"
O "BG4221"
)
= Aktiv
NETWORK
TITLE = Stau am Sensor Einfahrt MA0267
//Sensoren entprellen
CALL #Stau_BG4231
( ESensor := "BG4231" ,
T_Ein := 1 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
CALL FB "None" , (ESensor:="BG4222", T_Ein:=1, T_Aus:=11, tein_aktiv:=Aktiv, taus_aktiv:="MB4221")
NETWORK
TITLE = Stau am Sensor Einfahrt MA021
//Sensoren entprellen
CALL #Stau_BG4233
( ESensor := "BG4233" ,
T_Ein := 1 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau am Sensor Mitte MA021
//Sensoren entprellen
CALL #Stau_BG4234
( ESensor := "BG4234" ,
T_Ein := 1 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 10: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4224", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Stau am Sensor hinter BST2
//Sensoren entprellen
CALL #Stau_BG3720
( ESensor := "BG3720" ,
T_Ein := 1 ,
T_Aus := 30 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Stau am Sensor Einfahrt MA0203
//Sensoren entprellen
CALL #Stau_BG3721
( ESensor := "BG3721" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
--- NW 11: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4226", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Stau am Sensor Ausfahrt MB3722
//Sensoren entprellen
CALL #Stau_BG3723
( ESensor := "BG3723" ,
T_Ein := 80 ,
T_Aus := 11 ,
tein_aktiv := TRUE ,
taus_aktiv := TRUE
);
NETWORK
TITLE = Fährt zu UH06
//Sensoren entprellen
U "MB3722";
O "BG3723";
= #ESensor;
--- NW 12: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4231", T_Ein:=1, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
U "MA0203";
U "DSchnittstelle_zu_AMR".From_UH06.MA0203_aktiv;
= #Aktiv;
CALL #Fährt_zu_UH06
( ESensor := #ESensor ,
T_Ein := 1 ,
T_Aus := 300 , //30s Nachlauf
tein_aktiv := TRUE ,
taus_aktiv := #Aktiv
);
--- NW 13: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4233", T_Ein:=1, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
NETWORK
TITLE = Ende
BE;
--- NW 14: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG4234", T_Ein:=1, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
--- NW 15: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3720", T_Ein:=1, T_Aus:=30, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
--- NW 16: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3721", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
--- NW 17: Sensoren entprellen ---
CALL FB "None" , (ESensor:="BG3723", T_Ein:=80, T_Aus:=11, tein_aktiv:=TRUE, taus_aktiv:=TRUE)
--- NW 18: Sensoren entprellen ---
A "MB3722"
O "BG3723"
= ESensor
A "MA0203"
A "DSchnittstelle_zu_AMR".From_UH06.MA0203_aktiv
= Aktiv
CALL FB "None" , (ESensor:=ESensor, T_Ein:=1, T_Aus:=300, tein_aktiv:=TRUE, taus_aktiv:=Aktiv) // 30s Nachlauf
--- NW 19: Ende ---
BE
END_FUNCTION_BLOCK
@@ -1,102 +1,169 @@
=== FB 6192: LPtoHW_Zylinder [STL] ===
INTERFACE:
Input:
Output:
InOut:
Static:
Schleuse_3342 : "MZylinder" //
Schleuse_3323 : "MZylinder" //
Schleuse_3345 : "MZylinder" //
Schleuse_3325 : "MZylinder" //
Schleuse_4221 : "MZylinder"
Weiche_4223 : "MZylinder" //
Schleuse_4227 : "MZylinder" //
Schleuse_4235 : "MZylinder" //
Schleuse_3722 : "MZylinder" //
Stopper_3324 : "MZylinder" //
Temp:
Auto : Bool // Automatik ist aktiv
Hand : Bool // Hand ist aktiv
ZylAst : Bool // Zylinder ansteuern
Constant:
FUNCTION_BLOCK "LPtoHW_Zylinder"
TITLE = Zylinder Outbound Leerpuffer > Highway
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : AE
VERSION : 0.1
VAR
Schleuse_3342 : "MZylinder"; //
Schleuse_3323 : "MZylinder"; //
Schleuse_3345 : "MZylinder"; //
Schleuse_3325 : "MZylinder"; //
Schleuse_4221 : "MZylinder";
Weiche_4223 : "MZylinder"; //
Schleuse_4227 : "MZylinder"; //
Schleuse_4235 : "MZylinder"; //
Schleuse_3722 : "MZylinder"; //
Stopper_3324 : "MZylinder"; //
END_VAR
--- NW 1: Übergabe des Bereichstatus System UH07/A01 ---
A "DOutbound_Bereich".A01_UH07.Automatik
AN "DOutbound_Bereich".A01_UH07.Handbetrieb
= Auto
A "DOutbound_Bereich".A01_UH07.BereichErr
AN "SGes".Simulation_ohne_HW_aktiv
JC Next // Zylinder-Stellung nicht mehr ändern
VAR_TEMP
Auto : Bool; // Automatik ist aktiv
Hand : Bool; // Hand ist aktiv
ZylAst : Bool; // Zylinder ansteuern
END_VAR
--- NW 2: Schleuse_3342 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3342", ZylGst:=?)
BEGIN
NETWORK
TITLE = Übergabe des Bereichstatus System UH07/A01
U "DOutbound_Bereich".A01_UH07.Automatik;
UN "DOutbound_Bereich".A01_UH07.Handbetrieb;
= #Auto;
U "DOutbound_Bereich".A01_UH07.BereichErr;
UN "SGes".Simulation_ohne_HW_aktiv;
SPB Next ;//Zylinder-Stellung nicht mehr ändern
--- NW 3: Schleuse_3323 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3323", ZylGst:=?)
NETWORK
TITLE = Schleuse_3342
CALL #Schleuse_3342
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3342"
);
NETWORK
TITLE = Schleuse_3323
CALL #Schleuse_3323
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3323"
);
--- NW 4: Schleuse_3345 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3345", ZylGst:=?)
NETWORK
TITLE = Schleuse_3345
CALL #Schleuse_3345
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3345"
);
NETWORK
TITLE = Schleuse_3325
CALL #Schleuse_3325
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3325"
);
--- NW 5: Schleuse_3325 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3325", ZylGst:=?)
NETWORK
TITLE = Stopper 3324
CALL #Stopper_3324
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3324"
);
NETWORK
TITLE = Übergabe des Bereichstatus System UC073/A01
Next: U "DOutbound_Bereich".A01_UH07.Automatik;
UN "DOutbound_Bereich".A01_UH07.Handbetrieb;
= #Auto;
--- NW 6: Stopper 3324 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3324", ZylGst:=?)
U "DOutbound_Bereich".A01_UC073.BereichErr;
UN "SGes".Simulation_ohne_HW_aktiv;
SPB Next1 ;//Zylinder-Stellung nicht mehr ändern
NETWORK
TITLE = Schleuse_4221
CALL #Schleuse_4221
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB4221"
);
--- NW 7: Übergabe des Bereichstatus System UC073/A01 ---
Next: A "DOutbound_Bereich".A01_UH07.Automatik
AN "DOutbound_Bereich".A01_UH07.Handbetrieb
= Auto
NETWORK
TITLE = Weiche_4223
CALL #Weiche_4223
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB4223"
);
A "DOutbound_Bereich".A01_UC073.BereichErr
AN "SGes".Simulation_ohne_HW_aktiv
JC Next1 // Zylinder-Stellung nicht mehr ändern
U "MB4223";
= "MB4210";
NETWORK
TITLE = Schleuse_4227
CALL #Schleuse_4227
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB4227"
);
--- NW 8: Schleuse_4221 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB4221", ZylGst:=?)
NETWORK
TITLE = Schleuse_4235
CALL #Schleuse_4235
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB4235"
);
NETWORK
TITLE = Übergabe des Bereichstatus System UC072/A01
Next1: U "DOutbound_Bereich".A01_UH07.Automatik;
UN "DOutbound_Bereich".A01_UH07.Handbetrieb;
= #Auto;
--- NW 9: Weiche_4223 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB4223", ZylGst:=?)
U(;
O "DOutbound_Bereich".A01_UC072.BereichErr;
O "DOutbound_Bereich".A01_UZ7201.Area_Stop;
O "DOutbound_Bereich".A01_UZ7202.Area_Stop;
);
UN "SGes".Simulation_ohne_HW_aktiv;
SPB Next2 ;//Zylinder-Stellung nicht mehr ändern
A "MB4223"
= "MB4210"
NETWORK
TITLE = Schleuse_3722
CALL #Schleuse_3722
( Automatik := #Auto ,
Handbetrieb := FALSE ,
T_Ast := 0 ,
T_Gst := 5 ,
ZylAst := "MB3722"
);
NETWORK
TITLE = Ende
Next2: BE;
--- NW 10: Schleuse_4227 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB4227", ZylGst:=?)
--- NW 11: Schleuse_4235 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB4235", ZylGst:=?)
--- NW 12: Übergabe des Bereichstatus System UC072/A01 ---
Next1: A "DOutbound_Bereich".A01_UH07.Automatik
AN "DOutbound_Bereich".A01_UH07.Handbetrieb
= Auto
A(
O "DOutbound_Bereich".A01_UC072.BereichErr
O "DOutbound_Bereich".A01_UZ7201.Area_Stop
O "DOutbound_Bereich".A01_UZ7202.Area_Stop
)
AN "SGes".Simulation_ohne_HW_aktiv
JC Next2 // Zylinder-Stellung nicht mehr ändern
--- NW 13: Schleuse_3722 ---
CALL FB "None" , (Automatik:=Auto, Handbetrieb:=FALSE, T_Ast:=0, T_Gst:=5, ZylAst:="MB3722", ZylGst:=?)
--- NW 14: Ende ---
Next2: BE
END_FUNCTION_BLOCK
@@ -1,24 +1,23 @@
=== FC 6100: LPtoHW_Bereich [STL] ===
INTERFACE:
Input:
Output:
InOut:
Temp:
Constant:
Return:
Ret_Val : Void
FUNCTION "LPtoHW_Bereich" : Void
TITLE = Bereich Outbound: LP > HW
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
--- NW 1: Baustein-Aufrufe ---
CALL FB "LPtoHW_Sensoren" ,
BEGIN
NETWORK
TITLE = Baustein-Aufrufe
CALL "LPtoHW_Sensoren", "DLPtoHW_Sensoren";
CALL FB "LPtoHW_OmniFahren" ,
CALL "LPtoHW_OmniFahren", "DLPtoHW_OmniFahren";
CALL FB "LPtoHW_Zylinder" ,
CALL "LPtoHW_Zylinder", "DLPtoHW_Zylinder";
CALL FB "LPtoHW_Antriebe" ,
CALL "LPtoHW_Antriebe", "DLPtoHW_Antriebe";
NETWORK
TITLE = Ende
BE;
--- NW 2: Ende ---
BE
END_FUNCTION
@@ -1,96 +1,121 @@
=== FC 6182: LPtoHW_Draussen_FC [STL] ===
INTERFACE:
Input:
Output:
InOut:
Temp:
Constant:
Return:
Ret_Val : Void
FUNCTION "LPtoHW_Draussen_FC" : Void
TITLE = Draussen-FC: LP>HW
{ S7_Optimized_Access := 'FALSE' ; S7_Pass_Registers := 'TRUE' }
AUTHOR : AE
VERSION : 0.1
--- NW 1: Rückmeldung ---
SET // Rückmeldungen erst mal resetten
R "M180.6" // Weiterfahrt von Ziel-FC erlaubt
BEGIN
NETWORK
TITLE = Rückmeldung
SET;//Rückmeldungen erst mal resetten
R "M180.6";//Weiterfahrt von Ziel-FC erlaubt
NETWORK
TITLE = Schleuse 3323 (Trolley-Beladung): Ausgefahren ?
L "MW190";
L 3323 ;//Aufruf von Schleuse 3323 ?
<>I;//Nein!
SPB X3323E;
--- NW 2: Schleuse 3323 (Trolley-Beladung): Ausgefahren ? ---
L "MW190"
L 3323 // Aufruf von Schleuse 3323 ?
<>I // Nein!
JC X3323E
//Evtl. erkannten Sack löschen:
SET;
R "DLPtoHW_Sensoren".Sack_BG3324.Stat.B_Akt;
// Evtl. erkannten Sack löschen:
SET
R "DLPtoHW_Sensoren".Sack_BG3324.Stat.B_Akt
//Trolleydaten ändern:
UN "DLeerPufferStrecken".DurchfahrModus.Aktiv;
SPB SackTrolley ;//Sack-Trolleydaten erzeugen
// Trolleydaten ändern:
AN "DLeerPufferStrecken".DurchfahrModus.Aktiv
JC SackTrolley // Sack-Trolleydaten erzeugen
//Leer-Trolley für VP-Daten:
CALL "Trolleydaten_neu_anlegen"
( Gesamt_Trolley_DL := 1000 ,
TrolleyID := "DLPtoHW_OmniFahren".Schleuse_3323.Dyn.TrolleyID_Schleuse ,
Endziel := 16#B000 , //Vollpuffer
ShopGroup := DINT#-1 //ShopGroup = -1 bei Leertrolly für Vollpuffer!
);
// Leer-Trolley für VP-Daten:
CALL FC "Trolleydaten_neu_anlegen" (Gesamt_Trolley_DL:=1000, TrolleyID:="DLPtoHW_OmniFahren".Schleuse_3323.Dyn.TrolleyID_Schleuse, Endziel:=16#B000, ShopGroup:=DINT#-1) // Vollpuffer | ShopGroup = -1 bei Leertrolly für Vollpuffer!
//Standort übermitteln:
CALL "Trolley_DL_Neue_Pos"
( Gesamt_Trolley_DL := 1000 ,
TrolleyID := "DLPtoHW_OmniFahren".Schleuse_3323.Dyn.TrolleyID_Schleuse ,
Position := 16#7108 , //Leser 7108
ShopGroup := Dint#0 ,
Err := "M199.0"
);
// Standort übermitteln:
CALL FC "Trolley_DL_Neue_Pos" (Gesamt_Trolley_DL:=1000, TrolleyID:="DLPtoHW_OmniFahren".Schleuse_3323.Dyn.TrolleyID_Schleuse, Position:=16#7108, ShopGroup:=Dint#0, Err:="M199.0") // Leser 7108
L "DLeerPufferStrecken".DurchfahrModus.RestTrolleys;
+ -1;
T "DLeerPufferStrecken".DurchfahrModus.RestTrolleys;
L "DLeerPufferStrecken".DurchfahrModus.RestTrolleys
+ -1
T "DLeerPufferStrecken".DurchfahrModus.RestTrolleys
L 0;//Noch Rest-Trolleys vorhanden ?
>I;//Ja!
BEB;
L 0 // Noch Rest-Trolleys vorhanden ?
>I // Ja!
BEC
SET;
R "DLeerPufferStrecken".DurchfahrModus.Aktiv;//Erst mal beenden
SET
R "DLeerPufferStrecken".DurchfahrModus.Aktiv // Erst mal beenden
BEA;
BEU
SackTrolley: CALL "Trolleydaten_neu_anlegen"
( Gesamt_Trolley_DL := 1000 ,
TrolleyID := "DLPtoHW_OmniFahren".Schleuse_3323.Dyn.TrolleyID_Schleuse ,
Endziel := 16#AAAA , //AMR-Bereich
ShopGroup := DINT#0
);
SackTrolley: CALL FC "Trolleydaten_neu_anlegen" (Gesamt_Trolley_DL:=1000, TrolleyID:="DLPtoHW_OmniFahren".Schleuse_3323.Dyn.TrolleyID_Schleuse, Endziel:=16#AAAA, ShopGroup:=DINT#0) // AMR-Bereich
//Standort übermitteln:
CALL "Trolley_DL_Neue_Pos"
( Gesamt_Trolley_DL := 1000 ,
TrolleyID := "DLPtoHW_OmniFahren".Schleuse_3323.Dyn.TrolleyID_Schleuse ,
Position := 16#7108 , //Leser 7108
ShopGroup := Dint#0 ,
Err := "M199.0"
);
// Standort übermitteln:
CALL FC "Trolley_DL_Neue_Pos" (Gesamt_Trolley_DL:=1000, TrolleyID:="DLPtoHW_OmniFahren".Schleuse_3323.Dyn.TrolleyID_Schleuse, Position:=16#7108, ShopGroup:=Dint#0, Err:="M199.0") // Leser 7108
//Umschalten auf Durchfahr-Modus:
U "DLeerPufferStrecken".DurchfahrModus.Anmelden;
R "DLeerPufferStrecken".DurchfahrModus.Anmelden;
S "DLeerPufferStrecken".DurchfahrModus.Aktiv;
// Umschalten auf Durchfahr-Modus:
A "DLeerPufferStrecken".DurchfahrModus.Anmelden
R "DLeerPufferStrecken".DurchfahrModus.Anmelden
S "DLeerPufferStrecken".DurchfahrModus.Aktiv
BEA;
BEU
X3323E: NOP 0;
X3323E: NOP 0
NETWORK
TITLE = Schleuse 4221 (Vor ByPass zum VP): Ausgefahren ?
L "MW190";
L 4221 ;//Aufruf von Schleuse 4221?
<>I;//Nein!
SPB X4221E;
//Evtl. erkannten Sack löschen:
SET;
R "DLPtoHW_Sensoren".Sack_BG4222.Stat.B_Akt;
--- NW 3: Schleuse 4221 (Vor ByPass zum VP): Ausgefahren ? ---
L "MW190"
L 4221 // Aufruf von Schleuse 4221?
<>I // Nein!
JC X4221E
L "DLPtoHW_OmniFahren".Schleuse_4221.Dyn.Weichen_Ziel;
L 16#4224 ;//Gerade ? Also zum AMR-Bereich?
==I ;//Ja !
SPBN X4221;//Negierter Sprung
// Evtl. erkannten Sack löschen:
SET
R "DLPtoHW_Sensoren".Sack_BG4222.Stat.B_Akt
//Trolley fährt zum AMR:
//Trolleydaten in DB1000 löschen, da zum AMR fährt und danach kein Leser mehr!
CALL "Trolleydaten_löschen"
( Gesamt_Trolley_DL := 1000 ,
TrolleyID := "DLPtoHW_OmniFahren".Schleuse_4221.Dyn.TrolleyID_Schleuse
);
L "DLPtoHW_OmniFahren".Schleuse_4221.Dyn.Weichen_Ziel
L 16#4224 // Gerade ? Also zum AMR-Bereich?
==I // Ja !
JCN X4221 // Negierter Sprung
BEA;
// Trolley fährt zum AMR:
// Trolleydaten in DB1000 löschen, da zum AMR fährt und danach kein Leser mehr!
CALL FC "Trolleydaten_löschen" (Gesamt_Trolley_DL:=1000, TrolleyID:="DLPtoHW_OmniFahren".Schleuse_4221.Dyn.TrolleyID_Schleuse)
X4221: NOP 0;
//Trolley fährt zu VP:
//Bei Partner (Schleuse 4207) wieder mit Schritt 0 beginnen (erneuter Ziel-FC-Aufruf)
L 0;
T "DHWtoVP_OmniFahren".Schleuse_4207.Dyn.Sk.Akt_Schritt;
BEU
X4221E: NOP 0;
X4221: NOP 0
// Trolley fährt zu VP:
// Bei Partner (Schleuse 4207) wieder mit Schritt 0 beginnen (erneuter Ziel-FC-Aufruf)
L 0
T "DHWtoVP_OmniFahren".Schleuse_4207.Dyn.Sk.Akt_Schritt
NETWORK
TITLE = Ende
BE;
X4221E: NOP 0
--- NW 4: Ende ---
BE
END_FUNCTION
@@ -1,74 +1,88 @@
=== FC 6180: LPtoHW_Leser_FC [STL] ===
INTERFACE:
Input:
Output:
InOut:
Temp:
Zielebene : Word
Constant:
Return:
Ret_Val : Void
--- NW 1: Rückmeldung ---
// Keine
L 0 // Evtl. Zwischenziel (MW196)
T "MW196"
FUNCTION "LPtoHW_Leser_FC" : Void
TITLE = Leser-FC: LP > HW
{ S7_Optimized_Access := 'FALSE' ; S7_Pass_Registers := 'TRUE' }
AUTHOR : AE
VERSION : 0.1
VAR_TEMP
Zielebene : Word;
END_VAR
--- NW 2: Schleuse 3323: (Trolley-Beladung) ---
L "MW190" // Schleusen-Nr.
L 3323 // Aufruf von Schleuse ?
<>I // Nein!
JC X3323E
BEGIN
NETWORK
TITLE = Rückmeldung
AN "M180.0" // Lesefehler
JC Y3323
//Keine
L 0;//Evtl. Zwischenziel (MW196)
T "MW196";
BEU
NETWORK
TITLE = Schleuse 3323: (Trolley-Beladung)
L "MW190" ;//Schleusen-Nr.
L 3323 ;//Aufruf von Schleuse ?
<>I;//Nein!
SPB X3323E;
Y3323: AN "M180.1" // unbekannt in TrolleysDL
BEC
UN "M180.0";//Lesefehler
SPB Y3323;
// Daten in Datenbank erzeugen:
L "DLPtoHW_OmniFahren".Schleuse_3323.Dyn.TrolleyID_Schleuse
L DINT#0 // ID bekannt?
==D // Nein
BEC
BEA;
CALL FC "Trolleydaten_neu_anlegen" (Gesamt_Trolley_DL:="DLPtoHW_OmniFahren".Schleuse_3323.Schleuse.Gesamt_Trolley_DL, TrolleyID:="DLPtoHW_OmniFahren".Schleuse_3323.Dyn.TrolleyID_Schleuse, Endziel:=16#A000, ShopGroup:=DINT#0) // Leerpuffer-Bereich
Y3323: UN "M180.1" ;//unbekannt in TrolleysDL
BEB;
BEU
//Daten in Datenbank erzeugen:
L "DLPtoHW_OmniFahren".Schleuse_3323.Dyn.TrolleyID_Schleuse;
L DINT#0 ;//ID bekannt?
==D;//Nein
BEB;
X3323E: NOP 0
CALL "Trolleydaten_neu_anlegen"
( Gesamt_Trolley_DL := "DLPtoHW_OmniFahren".Schleuse_3323.Schleuse.Gesamt_Trolley_DL ,
TrolleyID := "DLPtoHW_OmniFahren".Schleuse_3323.Dyn.TrolleyID_Schleuse ,
Endziel := 16#A000 , //Leerpuffer-Bereich
ShopGroup := DINT#0
);
BEA;
--- NW 3: Schleuse 4221: (Vor ByPass zurück zum VP) ---
L "MW190" // Schleusen-Nr.
L 4221 // Aufruf von Schleuse ?
<>I // Nein!
JC X4221E
X3323E: NOP 0;
AN "M180.0" // Lesefehler
JC Y4221
NETWORK
TITLE = Schleuse 4221: (Vor ByPass zurück zum VP)
L "MW190" ;//Schleusen-Nr.
L 4221 ;//Aufruf von Schleuse ?
<>I;//Nein!
SPB X4221E;
BEU
UN "M180.0";//Lesefehler
SPB Y4221;
Y4221: AN "M180.1" // unbekannt in TrolleysDL
BEC
BEA;
// Daten in Datenbank erzeugen:
L "DLPtoHW_OmniFahren".Schleuse_4221.Dyn.TrolleyID_Schleuse
L DINT#0 // ID bekannt?
==D // Nein
BEC
Y4221: UN "M180.1" ;//unbekannt in TrolleysDL
BEB;
CALL FC "Trolleydaten_neu_anlegen" (Gesamt_Trolley_DL:="DLPtoHW_OmniFahren".Schleuse_4221.Schleuse.Gesamt_Trolley_DL, TrolleyID:="DLPtoHW_OmniFahren".Schleuse_4221.Dyn.TrolleyID_Schleuse, Endziel:=16#AAAA, ShopGroup:=DINT#0) // AMR-Bereich-Bereich
//Daten in Datenbank erzeugen:
L "DLPtoHW_OmniFahren".Schleuse_4221.Dyn.TrolleyID_Schleuse;
L DINT#0 ;//ID bekannt?
==D;//Nein
BEB;
BEU
CALL "Trolleydaten_neu_anlegen"
( Gesamt_Trolley_DL := "DLPtoHW_OmniFahren".Schleuse_4221.Schleuse.Gesamt_Trolley_DL ,
TrolleyID := "DLPtoHW_OmniFahren".Schleuse_4221.Dyn.TrolleyID_Schleuse ,
Endziel := 16#AAAA , //AMR-Bereich-Bereich
ShopGroup := DINT#0
);
X4221E: NOP 0
BEA;
X4221E: NOP 0;
--- NW 4: Ende ---
BE
NETWORK
TITLE = Ende
BE;
END_FUNCTION
@@ -1,353 +1,600 @@
=== FB 6128: LPtoHW_OmniFahren [STL] ===
INTERFACE:
Input:
Output:
InOut:
Static:
Schleuse_3342 : "MHMOmniSchleuse"
Schleuse_3323 : "MHMOmniSchleuse"
Schleuse_3325 : "MHMOmniSchleuse_Plus"
Bereich_4236 : "MHMOmniBereich_Plus"
Schleuse_4221 : "MHMOmniSchleuse_Plus"
Weiche_4223 : "MHMOmniWeiche_Plus"
Schleuse_4227 : "MHMOmniSchleuse"
Bereich_4232 : "MHMOmniBereich_Plus"
Schleuse_4235 : "MHMOmniSchleuse"
Bereich_3732 : "MHMOmniBereich_Plus"
Schleuse_3722 : "MHMOmniSchleuse_Plus"
Schleuse_3345 : "MHMOmniSchleuse"
Übergang_4225 : "MHMÜbergang_ohne_Schleuse"
Trolleys_starten : Struct
Flanke : Bool
Wartezeit_aktiv : Bool
Timer_Wartenzeit : Int
Temp:
ErrQuit : Bool
ErrAnz : Bool
Stau_raus : Bool
Start_ok : Bool
B_aktiv : Bool
B_vor_Schleuse : Bool
B_nach_Schleuse : Bool
Antrieb_aktiv : Bool
Antrieb_vor : Bool
Antrieb_stop : Bool
Fahren_Ok : Bool
Antrieb_nicht_stoppen : Bool
Constant:
--- NW 1: Systemzeug ---
// Verschiedene Bereiche:
A "DOutbound_Bereich".A01_UH07.AnlageEin
= Schleuse_3342.Dyn.Sk.Auto_akt
= Schleuse_3323.Dyn.Sk.Auto_akt
= Schleuse_3345.Dyn.Sk.Auto_akt
= Schleuse_3325.Dyn.Sk.Auto_akt
= Bereich_4236.Dyn.Sk.Auto_akt
= Schleuse_4221.Dyn.Sk.Auto_akt
= Weiche_4223.Dyn.Status.Auto_akt
= Schleuse_4227.Dyn.Sk.Auto_akt
= Bereich_4232.Dyn.Sk.Auto_akt
= Schleuse_4235.Dyn.Sk.Auto_akt
= Bereich_3732.Dyn.Sk.Auto_akt
= Schleuse_3722.Dyn.Sk.Auto_akt
AN "DOutbound_Bereich".A01_UH07.BereichErr
= Schleuse_3342.Dyn.Sk.Bereich_ok
= Schleuse_3323.Dyn.Sk.Bereich_ok
= Schleuse_3345.Dyn.Sk.Bereich_ok
= Schleuse_3325.Dyn.Sk.Bereich_ok
= Bereich_4236.Dyn.Sk.Bereich_ok
AN "DOutbound_Bereich".A01_UC073.BereichErr
= Schleuse_4221.Dyn.Sk.Bereich_ok
= Weiche_4223.Dyn.Status.Bereich_ok
= Schleuse_4227.Dyn.Sk.Bereich_ok
= Bereich_4232.Dyn.Sk.Bereich_ok
= Schleuse_4235.Dyn.Sk.Bereich_ok
AN "DOutbound_Bereich".A01_UC072.BereichErr
= Bereich_3732.Dyn.Sk.Bereich_ok
= Schleuse_3722.Dyn.Sk.Bereich_ok
--- NW 2: Störungen quittieren UZ0703 ---
A "DOutbound_Bereich".A01_UZ0703.StOk_aktiv
O "DOutbound_Bereich".A01_UH07.StOk_aktiv
= ErrQuit
--- NW 3: Schleuse 3342 (Vor BeladePlatz) ---
A "DLPtoHW_Sensoren".An_BG3323.Stat.B_Akt
= Stau_raus
= B_nach_Schleuse
CALL FB "None" , (Schleusen_Nr:=3342, ErrQuit:=ErrQuit, B_VorSchleuse:="BG3322", B_InSchleuse:="BG3342", B_AusSchleuse:=B_nach_Schleuse, B_Stau_raus:=Stau_raus, Start_Ok:=1, Antrieb_Schleuse_aktiv:="MA0065", Antrieb_plus_aktiv:="MA0065", Schleuse_geöffnet:="MB3342", RestZeit_Bereich_plus:=?, Y_Schleuse_Auf:="DLPtoHW_Zylinder".Schleuse_3342.Stat.Ast, Error:=DB708.DBW572, Antrieb_Schleuse_vor:="DLPtoHW_Antriebe".MA0065.Stat.A_vor, Antrieb_Schleuse_start:="DLPtoHW_Antriebe".MA0065.Stat.A_start, Antrieb_Schleuse_stop:="DLPtoHW_Antriebe".MA0065.Stat.Stop_vor, Antrieb_Schleuse_PS:="DLPtoHW_Antriebe".MA0065.Stat.A_PS, Antrieb_plus_vor:=?, Antrieb_plus_start:=?, hStOk:=ErrAnz) // Identisch
--- NW 4: Schleuse 3323 (BeladePlatz) ---
// Beladen erlaubt:
A "DOutbound_Bereich".A01_UH07.AnlageEin
A(
A "DLeerPufferStrecken".DurchfahrModus.Aktiv
A "Clock_5Hz" // Bei Durchfahrmodus blinken
ON "DLeerPufferStrecken".DurchfahrModus.Aktiv
)
= "PF0046" // Beladung bereit bei Dauerlicht
// Untere Anzeigen werden im Ziel-FC gesetzt:
L Schleuse_3323.Dyn.Sk.Akt_Schritt
L 12
<>I
R "PF0033" // Signalsäule blau
R "PF0044" // Trolley starten ok
CALL FB "None" , (Schleusen_Nr:=3323, ErrQuit:=ErrQuit, B_VorSchleuse:="MB3342", B_InSchleuse:="BG3323", B_AusSchleuse:="BG3343", B_Stau_raus:="DLPtoHW_Sensoren".Stau_BG3343.Stat.B_Akt, Start_Ok:=1, Antrieb_Schleuse_aktiv:="MA0065", Antrieb_plus_aktiv:=?, Schleuse_geöffnet:="MB3323", RestZeit_Bereich_plus:=?, Y_Schleuse_Auf:="DLPtoHW_Zylinder".Schleuse_3323.Stat.Ast, Error:=DB708.DBW526, Antrieb_Schleuse_vor:="DLPtoHW_Antriebe".MA0065.Stat.A_vor, Antrieb_Schleuse_start:="DLPtoHW_Antriebe".MA0065.Stat.A_start, Antrieb_Schleuse_stop:="DLPtoHW_Antriebe".MA0065.Stat.Stop_vor, Antrieb_Schleuse_PS:="DLPtoHW_Antriebe".MA0065.Stat.A_PS, Antrieb_plus_vor:=?, Antrieb_plus_start:=?, hStOk:=ErrAnz)
--- NW 5: Schleuse 3345 (Hinter BeladePlatz) ---
CALL FB "None" , (Schleusen_Nr:=3345, ErrQuit:=ErrQuit, B_VorSchleuse:="BG3343", B_InSchleuse:="BG3345", B_AusSchleuse:="BG3344", B_Stau_raus:="DLPtoHW_Sensoren".Stau_BG3344.Stat.B_Akt, Start_Ok:=1, Antrieb_Schleuse_aktiv:="MA0065", Antrieb_plus_aktiv:=?, Schleuse_geöffnet:="MB3345", RestZeit_Bereich_plus:=?, Y_Schleuse_Auf:="DLPtoHW_Zylinder".Schleuse_3345.Stat.Ast, Error:=DB708.DBW586, Antrieb_Schleuse_vor:="DLPtoHW_Antriebe".MA0065.Stat.A_vor, Antrieb_Schleuse_start:="DLPtoHW_Antriebe".MA0065.Stat.A_start, Antrieb_Schleuse_stop:="DLPtoHW_Antriebe".MA0065.Stat.Stop_vor, Antrieb_Schleuse_PS:="DLPtoHW_Antriebe".MA0065.Stat.A_PS, Antrieb_plus_vor:=?, Antrieb_plus_start:=?, hStOk:=ErrAnz)
--- NW 6: Wartezeit bis erneuter Trolleystart sinnvoll (wegen Staubildung) ---
A "MB3325"
Rise Trolleys_starten.Flanke
S Trolleys_starten.Wartezeit_aktiv
JCN Warten // Negierter Sprung
L 15 // Wartezeit in Sekunden
T Trolleys_starten.Timer_Wartenzeit
Warten: AN Trolleys_starten.Wartezeit_aktiv
O
A "MB3325" // Schleuse offen
AN "MA0065" // Aber Trolley fährt nicht
ON "1s-Impuls"
JC Wait
L Trolleys_starten.Timer_Wartenzeit
+ -1
T Trolleys_starten.Timer_Wartenzeit
L 0
>I
JC Wait
SET
R Trolleys_starten.Wartezeit_aktiv
Wait: NOP 0
--- NW 7: Schleuse 3325 ---
AN Trolleys_starten.Wartezeit_aktiv
= Fahren_Ok
A "BG3343"
O "BG3344"
= B_vor_Schleuse
CALL FB "None" , (Schleusen_Nr:=3325, ErrQuit:=ErrQuit, B_VorSchleuse:=B_vor_Schleuse, B_InSchleuse:="BG3325", B_Zähl:="BG3326", B_Stau_raus:="DLPtoHW_Sensoren".Stau_BG3326.Stat.B_Akt, Start_Ok:=1, Antrieb_Schleuse_aktiv:="MA0065", Antrieb_plus_aktiv:="MA0066", Schleuse_geöffnet:="MB3325", RestZeit_Bereich_plus:=Bereich_4236.Dyn.Restzeit, Y_Schleuse_Auf:="DLPtoHW_Zylinder".Schleuse_3325.Stat.Ast, Error:=DB708.DBW574, Antrieb_Schleuse_vor:="DLPtoHW_Antriebe".MA0065.Stat.A_vor, Antrieb_Schleuse_start:="DLPtoHW_Antriebe".MA0065.Stat.A_start, Antrieb_Schleuse_stop:="DLPtoHW_Antriebe".MA0065.Stat.Stop_vor, Antrieb_Schleuse_PS:="DLPtoHW_Antriebe".MA0065.Stat.A_PS, Antrieb_plus_vor:=Bereich_4236.Dyn.Status.Trolley_kommt_in_Bereich, Antrieb_plus_start:=?, hStOk:=ErrAnz)
--- NW 8: Störungen anzeigen UZ0703 ---
A ErrAnz
R ErrAnz
S "DOutbound_Bereich".A01_UZ0703.StOk_blinken
S "DOutbound_Bereich".A01_UH07.StOk_blinken
--- NW 9: Störungen quittieren UZ0703/7303 ---
A "DOutbound_Bereich".A01_UZ0703.StOk_aktiv
O "DOutbound_Bereich".A01_UZ7303.StOk_aktiv
O "DOutbound_Bereich".A01_UH07.StOk_aktiv
= ErrQuit
--- NW 10: Bereich 4236 ---
A "BG3326"
A "MB3325"
= B_vor_Schleuse
A Schleuse_4221.Dyn.Sk.Bereich_ok
AN "BG4221" // Da kein Platz für 2.Trolley wegen Kurve
= Fahren_Ok
CALL FB "None" , (Bereichs_Nr:=4236, ErrQuit:=ErrQuit, B_BereichsAnfang:=B_vor_Schleuse, B_BereichsEnde:="BG4236", B_Zähl:="BG4220", B_Stau_raus:="DLPtoHW_Sensoren".Stau_BG4220.Stat.B_Akt, Start_Ok:=Schleuse_4221.Dyn.Sk.Bereich_ok, Antrieb_Bereich_aktiv:="MA0066", Antrieb_plus_aktiv:="MA0264", RestZeit_Bereich_plus:=?, Antrieb_Bereich_vor:="DLPtoHW_Antriebe".MA0066.Stat.A_vor, Antrieb_Bereich_stop:="DLPtoHW_Antriebe".MA0066.Stat.Stop_vor, Error:=DB708.DBW472, Antrieb_Bereich_start:="DLPtoHW_Antriebe".MA0066.Stat.A_start, Antrieb_plus_vor:="DLPtoHW_Antriebe".MA0264.Stat.A_vor, Antrieb_plus_start:="DLPtoHW_Antriebe".MA0264.Stat.A_start, Antrieb_minus_vor:="DLPtoHW_Antriebe".MA0065.Stat.A_vor, hStOk:=ErrAnz)
--- NW 11: Störungen anzeigen UZ0703/7303 ---
A ErrAnz
R ErrAnz
S "DOutbound_Bereich".A01_UZ0703.StOk_blinken
S "DOutbound_Bereich".A01_UZ7303.StOk_blinken
S "DOutbound_Bereich".A01_UH07.StOk_blinken
--- NW 12: Störungen quittieren UZ7303 ---
A "DOutbound_Bereich".A01_UZ7303.StOk_aktiv
O "DOutbound_Bereich".A01_UC073.StOk_aktiv
O "DOutbound_Bereich".A01_UH07.StOk_aktiv
= ErrQuit
--- NW 13: Schleuse 4221 (vor ByPass) ---
CALL FB "None" , (Schleusen_Nr:=4221, ErrQuit:=ErrQuit, B_VorSchleuse:="BG4220", B_InSchleuse:="BG4221", B_Zähl:=?, B_Stau_raus:=?, Start_Ok:=1, Antrieb_Schleuse_aktiv:="MA0264", Antrieb_plus_aktiv:=1, Schleuse_geöffnet:="MB4221", RestZeit_Bereich_plus:=?, Y_Schleuse_Auf:="DLPtoHW_Zylinder".Schleuse_4221.Stat.Ast, Error:=DB708.DBW550, Antrieb_Schleuse_vor:="DLPtoHW_Antriebe".MA0264.Stat.A_vor, Antrieb_Schleuse_start:="DLPtoHW_Antriebe".MA0264.Stat.A_start, Antrieb_Schleuse_stop:="DLPtoHW_Antriebe".MA0264.Stat.Stop_vor, Antrieb_Schleuse_PS:="DLPtoHW_Antriebe".MA0264.Stat.A_PS, Antrieb_plus_vor:=?, Antrieb_plus_start:=?, hStOk:=ErrAnz) // über Weiche | über Weiche | über Weiche | über Weiche
--- NW 14: Weiche 4223 (ByPass zu VP) ---
SET
R Antrieb_vor
R Antrieb_stop
A "MA0264"
A "MA0265"
= Antrieb_aktiv
CALL FB "None" , (Weichen_Nr:=4223, ErrQuit:=ErrQuit, Fahren_Ok:=1, B_Ziel_gerade:="BG4224", B_Ziel_abzweig:="BG4211", Antrieb_Weiche_aktiv:=Antrieb_aktiv, Antrieb_Gerade_aktiv:="MA0265", Antrieb_Abzweig_aktiv:="MA0263", Weiche_ist_AST:="MB4223", Y_Weiche_gerade:=?, Y_Weiche_abzweig:="DLPtoHW_Zylinder".Weiche_4223.Stat.Ast, Error:=DB708.DBW546, Antrieb_Weiche_vor:=Antrieb_vor, Antrieb_Weiche_stop:=Antrieb_stop, Antrieb_Weiche_gerade_vor:=?, Antrieb_Weiche_gerade_stop:=?, Antrieb_Weiche_abzweig_vor:="DHWtoVP_Antriebe".MA0263.Stat.A_vor, Antrieb_Weiche_abzweig_stop:="DHWtoVP_Antriebe".MA0263.Stat.Stop_vor, hStOk:=ErrAnz) // schon gesetzt | schon gesetzt
A Antrieb_vor
S "DLPtoHW_Antriebe".MA0264.Stat.A_vor
S "DLPtoHW_Antriebe".MA0265.Stat.A_vor
A Antrieb_stop
S "DLPtoHW_Antriebe".MA0264.Stat.Stop_vor
S "DLPtoHW_Antriebe".MA0265.Stat.Stop_vor
// Damit Partner fahren kann:
A Weiche_4223.Dyn.Status.Weiche_frei
R "DLPtoHW_Zylinder".Weiche_4223.Stat.Ast
--- NW 15: Störungen anzeigen UZ7303 ---
A ErrAnz
R ErrAnz
S "DOutbound_Bereich".A01_UZ7303.StOk_blinken
S "DOutbound_Bereich".A01_UC073.StOk_blinken
S "DOutbound_Bereich".A01_UH07.StOk_blinken
--- NW 16: Störungen quittieren UZ7303/7302 ---
A "DOutbound_Bereich".A01_UZ7303.StOk_aktiv
O "DOutbound_Bereich".A01_UZ7302.StOk_aktiv
O "DOutbound_Bereich".A01_UC073.StOk_aktiv
O "DOutbound_Bereich".A01_UH07.StOk_aktiv
= ErrQuit
--- NW 17: MA0265 / Übergang 4225 ---
CALL FB "None" , (ErrQuit:=ErrQuit, B_Anfang:="BG4224", B_Am_Übergang:="BG4225", B_Stau_Antrieb_plus:="BG4226", Antrieb_aktiv:="MA0265", Antrieb_plus_aktiv:="MA0266", Antrieb_vor:="DLPtoHW_Antriebe".MA0265.Stat.A_vor, Antrieb_start:="DLPtoHW_Antriebe".MA0265.Stat.A_start, Antrieb_stop:="DLPtoHW_Antriebe".MA0265.Stat.A_PS, Antrieb_plus_vor:="DLPtoHW_Antriebe".MA0266.Stat.A_vor, Antrieb_plus_start:="DLPtoHW_Antriebe".MA0266.Stat.A_start)
--- NW 18: Schleuse 4227 ---
CALL FB "None" , (Schleusen_Nr:=4227, ErrQuit:=ErrQuit, B_VorSchleuse:="BG4225", B_InSchleuse:="BG4227", B_AusSchleuse:="BG4231", B_Stau_raus:="DLPtoHW_Sensoren".Stau_BG4231.Stat.B_Akt, Start_Ok:=1, Antrieb_Schleuse_aktiv:="MA0266", Antrieb_plus_aktiv:="MA0267", Schleuse_geöffnet:="MB4227", RestZeit_Bereich_plus:=Bereich_4232.Dyn.Restzeit, Y_Schleuse_Auf:="DLPtoHW_Zylinder".Schleuse_4227.Stat.Ast, Error:=DB708.DBW548, Antrieb_Schleuse_vor:="DLPtoHW_Antriebe".MA0266.Stat.A_vor, Antrieb_Schleuse_start:="DLPtoHW_Antriebe".MA0266.Stat.A_start, Antrieb_Schleuse_stop:="DLPtoHW_Antriebe".MA0266.Stat.Stop_vor, Antrieb_Schleuse_PS:="DLPtoHW_Antriebe".MA0266.Stat.A_PS, Antrieb_plus_vor:=Bereich_4232.Dyn.Status.Trolley_kommt_in_Bereich, Antrieb_plus_start:=?, hStOk:=ErrAnz)
--- NW 19: Störungen anzeigen UZ7303/7302 ---
A ErrAnz
R ErrAnz
S "DOutbound_Bereich".A01_UZ7303.StOk_blinken
S "DOutbound_Bereich".A01_UZ7302.StOk_blinken
S "DOutbound_Bereich".A01_UC073.StOk_blinken
S "DOutbound_Bereich".A01_UH07.StOk_blinken
--- NW 20: Störungen quittieren UZ7302 ---
A "DOutbound_Bereich".A01_UZ7302.StOk_aktiv
O "DOutbound_Bereich".A01_UC073.StOk_aktiv
O "DOutbound_Bereich".A01_UH07.StOk_aktiv
= ErrQuit
--- NW 21: Bereich 4232 ---
A "BG4231"
A "MB4227"
= B_vor_Schleuse
A "DLPtoHW_Sensoren".Stau_BG4233.Stat.B_Akt
O "DLPtoHW_Sensoren".Stau_BG4234.Stat.B_Akt
= Stau_raus
CALL FB "None" , (Bereichs_Nr:=4232, ErrQuit:=ErrQuit, B_BereichsAnfang:=B_vor_Schleuse, B_BereichsEnde:="BG4232", B_Zähl:="BG4233", B_Stau_raus:=Stau_raus, Start_Ok:=1, Antrieb_Bereich_aktiv:="MA0267", Antrieb_plus_aktiv:="MA0270", RestZeit_Bereich_plus:=?, Antrieb_Bereich_vor:="DLPtoHW_Antriebe".MA0267.Stat.A_vor, Antrieb_Bereich_stop:="DLPtoHW_Antriebe".MA0267.Stat.Stop_vor, Error:=DB708.DBW470, Antrieb_Bereich_start:="DLPtoHW_Antriebe".MA0267.Stat.A_start, Antrieb_plus_vor:="DLPtoHW_Antriebe".MA0270.Stat.A_vor, Antrieb_plus_start:="DLPtoHW_Antriebe".MA0270.Stat.A_start, Antrieb_minus_vor:="DLPtoHW_Antriebe".MA0266.Stat.A_vor, hStOk:=ErrAnz)
--- NW 22: Schleuse 4235 (vor BST 2) ---
AN "7_HMI_Err_UH07_OB".System.Gesamt_Feueralarm_Halle3
AN "7_HMI_Err_UH07_OB".System.Gesamt_Feueralarm_Halle4
AN "7_HMI_Err_UH07_OB".System.BST2_Feueralarm
AN "7_HMI_Err_UH07_OB".System.BST2_Geschlossen
AN "7_HMI_Err_UH07_OB".System."BST2_Störung"
A Bereich_3732.Dyn.Sk.Bereich_ok
= Fahren_Ok
CALL FB "None" , (Schleusen_Nr:=4235, ErrQuit:=ErrQuit, B_VorSchleuse:="BG4233", B_InSchleuse:="BG4235", B_AusSchleuse:="BG3720", B_Stau_raus:="DLPtoHW_Sensoren".Stau_BG3720.Stat.B_Akt, Start_Ok:=Fahren_Ok, Antrieb_Schleuse_aktiv:="MA0270", Antrieb_plus_aktiv:="MA0202", Schleuse_geöffnet:="MB4235", RestZeit_Bereich_plus:=Bereich_3732.Dyn.Restzeit, Y_Schleuse_Auf:="DLPtoHW_Zylinder".Schleuse_4235.Stat.Ast, Error:=DB708.DBW552, Antrieb_Schleuse_vor:="DLPtoHW_Antriebe".MA0270.Stat.A_vor, Antrieb_Schleuse_start:="DLPtoHW_Antriebe".MA0270.Stat.A_start, Antrieb_Schleuse_stop:="DLPtoHW_Antriebe".MA0270.Stat.Stop_vor, Antrieb_Schleuse_PS:="DLPtoHW_Antriebe".MA0270.Stat.A_PS, Antrieb_plus_vor:=Bereich_3732.Dyn.Status.Trolley_kommt_in_Bereich, Antrieb_plus_start:=?, hStOk:=ErrAnz)
--- NW 23: Störungen anzeigen UZ7302 ---
A ErrAnz
R ErrAnz
S "DOutbound_Bereich".A01_UZ7302.StOk_blinken
S "DOutbound_Bereich".A01_UC073.StOk_blinken
S "DOutbound_Bereich".A01_UH07.StOk_blinken
--- NW 24: Störungen quittieren UZ7202 ---
A "DOutbound_Bereich".A01_UZ7202.StOk_aktiv
O "DOutbound_Bereich".A01_UC072.StOk_aktiv
O "DOutbound_Bereich".A01_UH07.StOk_aktiv
= ErrQuit
--- NW 25: Bereich 3732 (hinter BST 2) ---
A "BG3720"
A "MB4235"
= B_vor_Schleuse
CALL FB "None" , (Bereichs_Nr:=3732, ErrQuit:=ErrQuit, B_BereichsAnfang:=B_vor_Schleuse, B_BereichsEnde:="BG3732", B_Zähl:="BG3721", B_Stau_raus:="DLPtoHW_Sensoren".Stau_BG3721.Stat.B_Akt, Start_Ok:=1, Antrieb_Bereich_aktiv:="MA0202", Antrieb_plus_aktiv:="MA0203", RestZeit_Bereich_plus:=?, Antrieb_Bereich_vor:="DLPtoHW_Antriebe".MA0202.Stat.A_vor, Antrieb_Bereich_stop:="DLPtoHW_Antriebe".MA0202.Stat.Stop_vor, Error:=DB708.DBW460, Antrieb_Bereich_start:="DLPtoHW_Antriebe".MA0202.Stat.A_start, Antrieb_plus_vor:="DLPtoHW_Antriebe".MA0203.Stat.A_vor, Antrieb_plus_start:="DLPtoHW_Antriebe".MA0203.Stat.A_start, Antrieb_minus_vor:=?, hStOk:=ErrAnz)
--- NW 26: Störungen anzeigen UZ7202 ---
A ErrAnz
R ErrAnz
S "DOutbound_Bereich".A01_UZ7202.StOk_blinken
S "DOutbound_Bereich".A01_UC072.StOk_blinken
S "DOutbound_Bereich".A01_UH07.StOk_blinken
--- NW 27: Störungen quittieren UZ7202/7201 ---
A "DOutbound_Bereich".A01_UZ7202.StOk_aktiv
O "DOutbound_Bereich".A01_UZ7201.StOk_aktiv
O "DOutbound_Bereich".A01_UC072.StOk_aktiv
O "DOutbound_Bereich".A01_UH07.StOk_aktiv
= ErrQuit
--- NW 28: Schleuse 3722 (Übergabe an AMR / UH06) ---
// Schnittstelle von Outbound: (Verarbeitung s.u.)
A "DSchnittstelle_zu_AMR".From_UH06.MA0203_aktiv
A "DSchnittstelle_zu_AMR".From_UH06.MA0203_kein_Stau
// Pro Zyklus neu erzeugen:
SET
R "DSchnittstelle_zu_AMR".To_UH06.MA0203_A_vor
R "DSchnittstelle_zu_AMR".To_UH06.MA0203_A_start
CALL FB "None" , (Schleusen_Nr:=3722, ErrQuit:=ErrQuit, B_VorSchleuse:="BG3721", B_InSchleuse:="BG3722", B_Zähl:="BG3723", B_Stau_raus:="DLPtoHW_Sensoren".Stau_BG3723.Stat.B_Akt, Start_Ok:="DSchnittstelle_zu_AMR".From_UH06.MA0203_kein_Stau, Antrieb_Schleuse_aktiv:="MA0203", Antrieb_plus_aktiv:="DSchnittstelle_zu_AMR".From_UH06.MA0203_aktiv, Schleuse_geöffnet:="MB3722", RestZeit_Bereich_plus:=?, Y_Schleuse_Auf:="DLPtoHW_Zylinder".Schleuse_3722.Stat.Ast, Error:=DB708.DBW534, Antrieb_Schleuse_vor:="DLPtoHW_Antriebe".MA0203.Stat.A_vor, Antrieb_Schleuse_start:="DLPtoHW_Antriebe".MA0203.Stat.A_start, Antrieb_Schleuse_stop:="DLPtoHW_Antriebe".MA0203.Stat.Stop_vor, Antrieb_Schleuse_PS:="DLPtoHW_Antriebe".MA0203.Stat.A_PS, Antrieb_plus_vor:="DSchnittstelle_zu_AMR".To_UH06.MA0203_A_vor, Antrieb_plus_start:="DSchnittstelle_zu_AMR".To_UH06.MA0203_A_start, hStOk:=ErrAnz)
// Schnittstelle zu Outbound: (Verarbeitung s.o.)
A "DLPtoHW_Sensoren"."Fährt_zu_UH06".Stat.B_Akt
S "DSchnittstelle_zu_AMR".To_UH06.MA0203_A_vor
S "DSchnittstelle_zu_AMR".To_UH06.MA0203_A_start
S "DLPtoHW_Antriebe".MA0203.Stat.A_vor
--- NW 29: Störungen anzeigen UZ7202/7201 ---
A ErrAnz
R ErrAnz
S "DOutbound_Bereich".A01_UZ7202.StOk_blinken
S "DOutbound_Bereich".A01_UZ7201.StOk_blinken
S "DOutbound_Bereich".A01_UC072.StOk_blinken
S "DOutbound_Bereich".A01_UH07.StOk_blinken
--- NW 30: Ende ---
BE
FUNCTION_BLOCK "LPtoHW_OmniFahren"
TITLE = Omnifahren Outbound Leerpuffer > Highway
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
VAR
Schleuse_3342 { S7_SetPoint := 'False'} : "MHMOmniSchleuse";
Schleuse_3323 { S7_SetPoint := 'False'} : "MHMOmniSchleuse";
Schleuse_3325 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus";
Bereich_4236 : "MHMOmniBereich_Plus";
Schleuse_4221 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus";
Weiche_4223 : "MHMOmniWeiche_Plus";
Schleuse_4227 { S7_SetPoint := 'False'} : "MHMOmniSchleuse";
Bereich_4232 : "MHMOmniBereich_Plus";
Schleuse_4235 { S7_SetPoint := 'False'} : "MHMOmniSchleuse";
Bereich_3732 : "MHMOmniBereich_Plus";
Schleuse_3722 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus";
Schleuse_3345 { S7_SetPoint := 'False'} : "MHMOmniSchleuse";
Übergang_4225 { S7_SetPoint := 'False'} : "MHMÜbergang_ohne_Schleuse";
Trolleys_starten : Struct
Flanke : Bool;
Wartezeit_aktiv : Bool;
Timer_Wartenzeit { S7_SetPoint := 'True'} : Int;
END_STRUCT;
END_VAR
VAR_TEMP
ErrQuit : Bool;
ErrAnz : Bool;
Stau_raus : Bool;
Start_ok : Bool;
B_aktiv : Bool;
B_vor_Schleuse : Bool;
B_nach_Schleuse : Bool;
Antrieb_aktiv : Bool;
Antrieb_vor : Bool;
Antrieb_stop : Bool;
Fahren_Ok : Bool;
Antrieb_nicht_stoppen : Bool;
END_VAR
BEGIN
NETWORK
TITLE = Systemzeug
//Verschiedene Bereiche:
U "DOutbound_Bereich".A01_UH07.AnlageEin;
= #Schleuse_3342.Dyn.Sk.Auto_akt;
= #Schleuse_3323.Dyn.Sk.Auto_akt;
= #Schleuse_3345.Dyn.Sk.Auto_akt;
= #Schleuse_3325.Dyn.Sk.Auto_akt;
= #Bereich_4236.Dyn.Sk.Auto_akt;
= #Schleuse_4221.Dyn.Sk.Auto_akt;
= #Weiche_4223.Dyn.Status.Auto_akt;
= #Schleuse_4227.Dyn.Sk.Auto_akt;
= #Bereich_4232.Dyn.Sk.Auto_akt;
= #Schleuse_4235.Dyn.Sk.Auto_akt;
= #Bereich_3732.Dyn.Sk.Auto_akt;
= #Schleuse_3722.Dyn.Sk.Auto_akt;
UN "DOutbound_Bereich".A01_UH07.BereichErr;
= #Schleuse_3342.Dyn.Sk.Bereich_ok;
= #Schleuse_3323.Dyn.Sk.Bereich_ok;
= #Schleuse_3345.Dyn.Sk.Bereich_ok;
= #Schleuse_3325.Dyn.Sk.Bereich_ok;
= #Bereich_4236.Dyn.Sk.Bereich_ok;
UN "DOutbound_Bereich".A01_UC073.BereichErr;
= #Schleuse_4221.Dyn.Sk.Bereich_ok;
= #Weiche_4223.Dyn.Status.Bereich_ok;
= #Schleuse_4227.Dyn.Sk.Bereich_ok;
= #Bereich_4232.Dyn.Sk.Bereich_ok;
= #Schleuse_4235.Dyn.Sk.Bereich_ok;
UN "DOutbound_Bereich".A01_UC072.BereichErr;
= #Bereich_3732.Dyn.Sk.Bereich_ok;
= #Schleuse_3722.Dyn.Sk.Bereich_ok;
NETWORK
TITLE = Störungen quittieren UZ0703
U "DOutbound_Bereich".A01_UZ0703.StOk_aktiv;
O "DOutbound_Bereich".A01_UH07.StOk_aktiv;
= #ErrQuit;
NETWORK
TITLE = Schleuse 3342 (Vor BeladePlatz)
U "DLPtoHW_Sensoren".An_BG3323.Stat.B_Akt;
= #Stau_raus;
= #B_nach_Schleuse;
CALL #Schleuse_3342
( Schleusen_Nr := 3342 ,
ErrQuit := #ErrQuit ,
B_VorSchleuse := "BG3322" ,
B_InSchleuse := "BG3342" ,
B_AusSchleuse := #B_nach_Schleuse ,
B_Stau_raus := #Stau_raus ,
Start_Ok := 1 ,
Antrieb_Schleuse_aktiv := "MA0065" ,
Antrieb_plus_aktiv := "MA0065" ,
Schleuse_geöffnet := "MB3342" ,
Y_Schleuse_Auf := "DLPtoHW_Zylinder".Schleuse_3342.Stat.Ast ,
Error := %DB708.DBW572 ,
Antrieb_Schleuse_vor := "DLPtoHW_Antriebe".MA0065.Stat.A_vor ,
Antrieb_Schleuse_start := "DLPtoHW_Antriebe".MA0065.Stat.A_start ,
Antrieb_Schleuse_stop := "DLPtoHW_Antriebe".MA0065.Stat.Stop_vor ,
Antrieb_Schleuse_PS := "DLPtoHW_Antriebe".MA0065.Stat.A_PS ,
Antrieb_plus_vor := , //Identisch
hStOk := #ErrAnz
);
NETWORK
TITLE = Schleuse 3323 (BeladePlatz)
//Beladen erlaubt:
U "DOutbound_Bereich".A01_UH07.AnlageEin;
U(;
U "DLeerPufferStrecken".DurchfahrModus.Aktiv;
U "Clock_5Hz";//Bei Durchfahrmodus blinken
ON "DLeerPufferStrecken".DurchfahrModus.Aktiv;
);
= "PF0046" ;//Beladung bereit bei Dauerlicht
//Untere Anzeigen werden im Ziel-FC gesetzt:
L #Schleuse_3323.Dyn.Sk.Akt_Schritt;
L 12;
<>I;
R "PF0033" ;//Signalsäule blau
R "PF0044";//Trolley starten ok
CALL #Schleuse_3323
( Schleusen_Nr := 3323 ,
ErrQuit := #ErrQuit ,
B_VorSchleuse := "MB3342" ,
B_InSchleuse := "BG3323" ,
B_AusSchleuse := "BG3343" ,
B_Stau_raus := "DLPtoHW_Sensoren".Stau_BG3343.Stat.B_Akt ,
Start_Ok := 1 ,
Antrieb_Schleuse_aktiv := "MA0065" ,
Schleuse_geöffnet := "MB3323" ,
Y_Schleuse_Auf := "DLPtoHW_Zylinder".Schleuse_3323.Stat.Ast ,
Error := %DB708.DBW526 ,
Antrieb_Schleuse_vor := "DLPtoHW_Antriebe".MA0065.Stat.A_vor ,
Antrieb_Schleuse_start := "DLPtoHW_Antriebe".MA0065.Stat.A_start ,
Antrieb_Schleuse_stop := "DLPtoHW_Antriebe".MA0065.Stat.Stop_vor ,
Antrieb_Schleuse_PS := "DLPtoHW_Antriebe".MA0065.Stat.A_PS ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Schleuse 3345 (Hinter BeladePlatz)
CALL #Schleuse_3345
( Schleusen_Nr := 3345 ,
ErrQuit := #ErrQuit ,
B_VorSchleuse := "BG3343" ,
B_InSchleuse := "BG3345" ,
B_AusSchleuse := "BG3344" ,
B_Stau_raus := "DLPtoHW_Sensoren".Stau_BG3344.Stat.B_Akt ,
Start_Ok := 1 ,
Antrieb_Schleuse_aktiv := "MA0065" ,
Schleuse_geöffnet := "MB3345" ,
Y_Schleuse_Auf := "DLPtoHW_Zylinder".Schleuse_3345.Stat.Ast ,
Error := %DB708.DBW586 ,
Antrieb_Schleuse_vor := "DLPtoHW_Antriebe".MA0065.Stat.A_vor ,
Antrieb_Schleuse_start := "DLPtoHW_Antriebe".MA0065.Stat.A_start ,
Antrieb_Schleuse_stop := "DLPtoHW_Antriebe".MA0065.Stat.Stop_vor ,
Antrieb_Schleuse_PS := "DLPtoHW_Antriebe".MA0065.Stat.A_PS ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Wartezeit bis erneuter Trolleystart sinnvoll (wegen Staubildung)
U "MB3325";
FP #Trolleys_starten.Flanke;
S #Trolleys_starten.Wartezeit_aktiv;
SPBN Warten ;//Negierter Sprung
L 15 ;//Wartezeit in Sekunden
T #Trolleys_starten.Timer_Wartenzeit;
Warten: UN #Trolleys_starten.Wartezeit_aktiv;
O;
U "MB3325" ;//Schleuse offen
UN "MA0065" ;//Aber Trolley fährt nicht
ON "1s-Impuls";
SPB Wait;
L #Trolleys_starten.Timer_Wartenzeit;
+ -1;
T #Trolleys_starten.Timer_Wartenzeit;
L 0;
>I;
SPB Wait;
SET;
R #Trolleys_starten.Wartezeit_aktiv;
Wait: NOP 0;
NETWORK
TITLE = Schleuse 3325
UN #Trolleys_starten.Wartezeit_aktiv;
= #Fahren_Ok;
U "BG3343";
O "BG3344";
= #B_vor_Schleuse;
CALL #Schleuse_3325
( Schleusen_Nr := 3325 ,
ErrQuit := #ErrQuit ,
B_VorSchleuse := #B_vor_Schleuse ,
B_InSchleuse := "BG3325" ,
B_Zähl := "BG3326" ,
B_Stau_raus := "DLPtoHW_Sensoren".Stau_BG3326.Stat.B_Akt ,
Start_Ok := 1 ,
Antrieb_Schleuse_aktiv := "MA0065" ,
Antrieb_plus_aktiv := "MA0066" ,
Schleuse_geöffnet := "MB3325" ,
RestZeit_Bereich_plus := #Bereich_4236.Dyn.Restzeit ,
Y_Schleuse_Auf := "DLPtoHW_Zylinder".Schleuse_3325.Stat.Ast ,
Error := %DB708.DBW574 ,
Antrieb_Schleuse_vor := "DLPtoHW_Antriebe".MA0065.Stat.A_vor ,
Antrieb_Schleuse_start := "DLPtoHW_Antriebe".MA0065.Stat.A_start ,
Antrieb_Schleuse_stop := "DLPtoHW_Antriebe".MA0065.Stat.Stop_vor ,
Antrieb_Schleuse_PS := "DLPtoHW_Antriebe".MA0065.Stat.A_PS ,
Antrieb_plus_vor := #Bereich_4236.Dyn.Status.Trolley_kommt_in_Bereich ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Störungen anzeigen UZ0703
U #ErrAnz;
R #ErrAnz;
S "DOutbound_Bereich".A01_UZ0703.StOk_blinken;
S "DOutbound_Bereich".A01_UH07.StOk_blinken;
NETWORK
TITLE = Störungen quittieren UZ0703/7303
U "DOutbound_Bereich".A01_UZ0703.StOk_aktiv;
O "DOutbound_Bereich".A01_UZ7303.StOk_aktiv;
O "DOutbound_Bereich".A01_UH07.StOk_aktiv;
= #ErrQuit;
NETWORK
TITLE = Bereich 4236
U "BG3326";
U "MB3325";
= #B_vor_Schleuse;
U #Schleuse_4221.Dyn.Sk.Bereich_ok;
UN "BG4221";//Da kein Platz für 2.Trolley wegen Kurve
= #Fahren_Ok;
CALL #Bereich_4236
( Bereichs_Nr := 4236 ,
ErrQuit := #ErrQuit ,
B_BereichsAnfang := #B_vor_Schleuse ,
B_BereichsEnde := "BG4236" ,
B_Zähl := "BG4220" ,
B_Stau_raus := "DLPtoHW_Sensoren".Stau_BG4220.Stat.B_Akt ,
Start_Ok := #Schleuse_4221.Dyn.Sk.Bereich_ok ,
Antrieb_Bereich_aktiv := "MA0066" ,
Antrieb_plus_aktiv := "MA0264" ,
Antrieb_Bereich_vor := "DLPtoHW_Antriebe".MA0066.Stat.A_vor ,
Antrieb_Bereich_stop := "DLPtoHW_Antriebe".MA0066.Stat.Stop_vor ,
Error := %DB708.DBW472 ,
Antrieb_Bereich_start := "DLPtoHW_Antriebe".MA0066.Stat.A_start ,
Antrieb_plus_vor := "DLPtoHW_Antriebe".MA0264.Stat.A_vor ,
Antrieb_plus_start := "DLPtoHW_Antriebe".MA0264.Stat.A_start ,
Antrieb_minus_vor := "DLPtoHW_Antriebe".MA0065.Stat.A_vor ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Störungen anzeigen UZ0703/7303
U #ErrAnz;
R #ErrAnz;
S "DOutbound_Bereich".A01_UZ0703.StOk_blinken;
S "DOutbound_Bereich".A01_UZ7303.StOk_blinken;
S "DOutbound_Bereich".A01_UH07.StOk_blinken;
NETWORK
TITLE = Störungen quittieren UZ7303
U "DOutbound_Bereich".A01_UZ7303.StOk_aktiv;
O "DOutbound_Bereich".A01_UC073.StOk_aktiv;
O "DOutbound_Bereich".A01_UH07.StOk_aktiv;
= #ErrQuit;
NETWORK
TITLE = Schleuse 4221 (vor ByPass)
CALL #Schleuse_4221
( Schleusen_Nr := 4221 ,
ErrQuit := #ErrQuit ,
B_VorSchleuse := "BG4220" ,
B_InSchleuse := "BG4221" ,
B_Zähl := , //über Weiche
B_Stau_raus := , //über Weiche
Start_Ok := 1 ,
Antrieb_Schleuse_aktiv := "MA0264" ,
Antrieb_plus_aktiv := 1 ,
Schleuse_geöffnet := "MB4221" ,
Y_Schleuse_Auf := "DLPtoHW_Zylinder".Schleuse_4221.Stat.Ast ,
Error := %DB708.DBW550 ,
Antrieb_Schleuse_vor := "DLPtoHW_Antriebe".MA0264.Stat.A_vor ,
Antrieb_Schleuse_start := "DLPtoHW_Antriebe".MA0264.Stat.A_start ,
Antrieb_Schleuse_stop := "DLPtoHW_Antriebe".MA0264.Stat.Stop_vor ,
Antrieb_Schleuse_PS := "DLPtoHW_Antriebe".MA0264.Stat.A_PS ,
Antrieb_plus_vor := , //über Weiche
Antrieb_plus_start := , //über Weiche
hStOk := #ErrAnz
);
NETWORK
TITLE = Weiche 4223 (ByPass zu VP)
SET;
R #Antrieb_vor;
R #Antrieb_stop;
U "MA0264";
U "MA0265";
= #Antrieb_aktiv;
CALL #Weiche_4223
( Weichen_Nr := 4223 ,
ErrQuit := #ErrQuit ,
Fahren_Ok := 1 ,
B_Ziel_gerade := "BG4224" ,
B_Ziel_abzweig := "BG4211" ,
Antrieb_Weiche_aktiv := #Antrieb_aktiv ,
Antrieb_Gerade_aktiv := "MA0265" ,
Antrieb_Abzweig_aktiv := "MA0263" ,
Weiche_ist_AST := "MB4223" ,
Y_Weiche_abzweig := "DLPtoHW_Zylinder".Weiche_4223.Stat.Ast ,
Error := %DB708.DBW546 ,
Antrieb_Weiche_vor := #Antrieb_vor ,
Antrieb_Weiche_stop := #Antrieb_stop ,
Antrieb_Weiche_gerade_vor := , //schon gesetzt
Antrieb_Weiche_gerade_stop := , //schon gesetzt
Antrieb_Weiche_abzweig_vor := "DHWtoVP_Antriebe".MA0263.Stat.A_vor ,
Antrieb_Weiche_abzweig_stop := "DHWtoVP_Antriebe".MA0263.Stat.Stop_vor ,
hStOk := #ErrAnz
);
U #Antrieb_vor;
S "DLPtoHW_Antriebe".MA0264.Stat.A_vor;
S "DLPtoHW_Antriebe".MA0265.Stat.A_vor;
U #Antrieb_stop;
S "DLPtoHW_Antriebe".MA0264.Stat.Stop_vor;
S "DLPtoHW_Antriebe".MA0265.Stat.Stop_vor;
//Damit Partner fahren kann:
U #Weiche_4223.Dyn.Status.Weiche_frei;
R "DLPtoHW_Zylinder".Weiche_4223.Stat.Ast;
NETWORK
TITLE = Störungen anzeigen UZ7303
U #ErrAnz;
R #ErrAnz;
S "DOutbound_Bereich".A01_UZ7303.StOk_blinken;
S "DOutbound_Bereich".A01_UC073.StOk_blinken;
S "DOutbound_Bereich".A01_UH07.StOk_blinken;
NETWORK
TITLE = Störungen quittieren UZ7303/7302
U "DOutbound_Bereich".A01_UZ7303.StOk_aktiv;
O "DOutbound_Bereich".A01_UZ7302.StOk_aktiv;
O "DOutbound_Bereich".A01_UC073.StOk_aktiv;
O "DOutbound_Bereich".A01_UH07.StOk_aktiv;
= #ErrQuit;
NETWORK
TITLE = MA0265 / Übergang 4225
CALL #Übergang_4225
( ErrQuit := #ErrQuit ,
B_Anfang := "BG4224" ,
B_Am_Übergang := "BG4225" ,
B_Stau_Antrieb_plus := "BG4226" ,
Antrieb_aktiv := "MA0265" ,
Antrieb_plus_aktiv := "MA0266" ,
Antrieb_vor := "DLPtoHW_Antriebe".MA0265.Stat.A_vor ,
Antrieb_start := "DLPtoHW_Antriebe".MA0265.Stat.A_start ,
Antrieb_stop := "DLPtoHW_Antriebe".MA0265.Stat.A_PS ,
Antrieb_plus_vor := "DLPtoHW_Antriebe".MA0266.Stat.A_vor ,
Antrieb_plus_start := "DLPtoHW_Antriebe".MA0266.Stat.A_start
);
NETWORK
TITLE = Schleuse 4227
CALL #Schleuse_4227
( Schleusen_Nr := 4227 ,
ErrQuit := #ErrQuit ,
B_VorSchleuse := "BG4225" ,
B_InSchleuse := "BG4227" ,
B_AusSchleuse := "BG4231" ,
B_Stau_raus := "DLPtoHW_Sensoren".Stau_BG4231.Stat.B_Akt ,
Start_Ok := 1 ,
Antrieb_Schleuse_aktiv := "MA0266" ,
Antrieb_plus_aktiv := "MA0267" ,
Schleuse_geöffnet := "MB4227" ,
RestZeit_Bereich_plus := #Bereich_4232.Dyn.Restzeit ,
Y_Schleuse_Auf := "DLPtoHW_Zylinder".Schleuse_4227.Stat.Ast ,
Error := %DB708.DBW548 ,
Antrieb_Schleuse_vor := "DLPtoHW_Antriebe".MA0266.Stat.A_vor ,
Antrieb_Schleuse_start := "DLPtoHW_Antriebe".MA0266.Stat.A_start ,
Antrieb_Schleuse_stop := "DLPtoHW_Antriebe".MA0266.Stat.Stop_vor ,
Antrieb_Schleuse_PS := "DLPtoHW_Antriebe".MA0266.Stat.A_PS ,
Antrieb_plus_vor := #Bereich_4232.Dyn.Status.Trolley_kommt_in_Bereich ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Störungen anzeigen UZ7303/7302
U #ErrAnz;
R #ErrAnz;
S "DOutbound_Bereich".A01_UZ7303.StOk_blinken;
S "DOutbound_Bereich".A01_UZ7302.StOk_blinken;
S "DOutbound_Bereich".A01_UC073.StOk_blinken;
S "DOutbound_Bereich".A01_UH07.StOk_blinken;
NETWORK
TITLE = Störungen quittieren UZ7302
U "DOutbound_Bereich".A01_UZ7302.StOk_aktiv;
O "DOutbound_Bereich".A01_UC073.StOk_aktiv;
O "DOutbound_Bereich".A01_UH07.StOk_aktiv;
= #ErrQuit;
NETWORK
TITLE = Bereich 4232
U "BG4231";
U "MB4227";
= #B_vor_Schleuse;
U "DLPtoHW_Sensoren".Stau_BG4233.Stat.B_Akt;
O "DLPtoHW_Sensoren".Stau_BG4234.Stat.B_Akt;
= #Stau_raus;
CALL #Bereich_4232
( Bereichs_Nr := 4232 ,
ErrQuit := #ErrQuit ,
B_BereichsAnfang := #B_vor_Schleuse ,
B_BereichsEnde := "BG4232" ,
B_Zähl := "BG4233" ,
B_Stau_raus := #Stau_raus ,
Start_Ok := 1 ,
Antrieb_Bereich_aktiv := "MA0267" ,
Antrieb_plus_aktiv := "MA0270" ,
Antrieb_Bereich_vor := "DLPtoHW_Antriebe".MA0267.Stat.A_vor ,
Antrieb_Bereich_stop := "DLPtoHW_Antriebe".MA0267.Stat.Stop_vor ,
Error := %DB708.DBW470 ,
Antrieb_Bereich_start := "DLPtoHW_Antriebe".MA0267.Stat.A_start ,
Antrieb_plus_vor := "DLPtoHW_Antriebe".MA0270.Stat.A_vor ,
Antrieb_plus_start := "DLPtoHW_Antriebe".MA0270.Stat.A_start ,
Antrieb_minus_vor := "DLPtoHW_Antriebe".MA0266.Stat.A_vor ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Schleuse 4235 (vor BST 2)
UN "7_HMI_Err_UH07_OB".System.Gesamt_Feueralarm_Halle3;
UN "7_HMI_Err_UH07_OB".System.Gesamt_Feueralarm_Halle4;
UN "7_HMI_Err_UH07_OB".System.BST2_Feueralarm;
UN "7_HMI_Err_UH07_OB".System.BST2_Geschlossen;
UN "7_HMI_Err_UH07_OB".System.BST2_Störung;
U #Bereich_3732.Dyn.Sk.Bereich_ok;
= #Fahren_Ok;
CALL #Schleuse_4235
( Schleusen_Nr := 4235 ,
ErrQuit := #ErrQuit ,
B_VorSchleuse := "BG4233" ,
B_InSchleuse := "BG4235" ,
B_AusSchleuse := "BG3720" ,
B_Stau_raus := "DLPtoHW_Sensoren".Stau_BG3720.Stat.B_Akt ,
Start_Ok := #Fahren_Ok ,
Antrieb_Schleuse_aktiv := "MA0270" ,
Antrieb_plus_aktiv := "MA0202" ,
Schleuse_geöffnet := "MB4235" ,
RestZeit_Bereich_plus := #Bereich_3732.Dyn.Restzeit ,
Y_Schleuse_Auf := "DLPtoHW_Zylinder".Schleuse_4235.Stat.Ast ,
Error := %DB708.DBW552 ,
Antrieb_Schleuse_vor := "DLPtoHW_Antriebe".MA0270.Stat.A_vor ,
Antrieb_Schleuse_start := "DLPtoHW_Antriebe".MA0270.Stat.A_start ,
Antrieb_Schleuse_stop := "DLPtoHW_Antriebe".MA0270.Stat.Stop_vor ,
Antrieb_Schleuse_PS := "DLPtoHW_Antriebe".MA0270.Stat.A_PS ,
Antrieb_plus_vor := #Bereich_3732.Dyn.Status.Trolley_kommt_in_Bereich ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Störungen anzeigen UZ7302
U #ErrAnz;
R #ErrAnz;
S "DOutbound_Bereich".A01_UZ7302.StOk_blinken;
S "DOutbound_Bereich".A01_UC073.StOk_blinken;
S "DOutbound_Bereich".A01_UH07.StOk_blinken;
NETWORK
TITLE = Störungen quittieren UZ7202
U "DOutbound_Bereich".A01_UZ7202.StOk_aktiv;
O "DOutbound_Bereich".A01_UC072.StOk_aktiv;
O "DOutbound_Bereich".A01_UH07.StOk_aktiv;
= #ErrQuit;
NETWORK
TITLE = Bereich 3732 (hinter BST 2)
U "BG3720";
U "MB4235";
= #B_vor_Schleuse;
CALL #Bereich_3732
( Bereichs_Nr := 3732 ,
ErrQuit := #ErrQuit ,
B_BereichsAnfang := #B_vor_Schleuse ,
B_BereichsEnde := "BG3732" ,
B_Zähl := "BG3721" ,
B_Stau_raus := "DLPtoHW_Sensoren".Stau_BG3721.Stat.B_Akt ,
Start_Ok := 1 ,
Antrieb_Bereich_aktiv := "MA0202" ,
Antrieb_plus_aktiv := "MA0203" ,
Antrieb_Bereich_vor := "DLPtoHW_Antriebe".MA0202.Stat.A_vor ,
Antrieb_Bereich_stop := "DLPtoHW_Antriebe".MA0202.Stat.Stop_vor ,
Error := %DB708.DBW460 ,
Antrieb_Bereich_start := "DLPtoHW_Antriebe".MA0202.Stat.A_start ,
Antrieb_plus_vor := "DLPtoHW_Antriebe".MA0203.Stat.A_vor ,
Antrieb_plus_start := "DLPtoHW_Antriebe".MA0203.Stat.A_start ,
hStOk := #ErrAnz
);
NETWORK
TITLE = Störungen anzeigen UZ7202
U #ErrAnz;
R #ErrAnz;
S "DOutbound_Bereich".A01_UZ7202.StOk_blinken;
S "DOutbound_Bereich".A01_UC072.StOk_blinken;
S "DOutbound_Bereich".A01_UH07.StOk_blinken;
NETWORK
TITLE = Störungen quittieren UZ7202/7201
U "DOutbound_Bereich".A01_UZ7202.StOk_aktiv;
O "DOutbound_Bereich".A01_UZ7201.StOk_aktiv;
O "DOutbound_Bereich".A01_UC072.StOk_aktiv;
O "DOutbound_Bereich".A01_UH07.StOk_aktiv;
= #ErrQuit;
NETWORK
TITLE = Schleuse 3722 (Übergabe an AMR / UH06)
//Schnittstelle von Outbound: (Verarbeitung s.u.)
U "DSchnittstelle_zu_AMR".From_UH06.MA0203_aktiv;
U "DSchnittstelle_zu_AMR".From_UH06.MA0203_kein_Stau;
//Pro Zyklus neu erzeugen:
SET;
R "DSchnittstelle_zu_AMR".To_UH06.MA0203_A_vor;
R "DSchnittstelle_zu_AMR".To_UH06.MA0203_A_start;
CALL #Schleuse_3722
( Schleusen_Nr := 3722 ,
ErrQuit := #ErrQuit ,
B_VorSchleuse := "BG3721" ,
B_InSchleuse := "BG3722" ,
B_Zähl := "BG3723" ,
B_Stau_raus := "DLPtoHW_Sensoren".Stau_BG3723.Stat.B_Akt ,
Start_Ok := "DSchnittstelle_zu_AMR".From_UH06.MA0203_kein_Stau ,
Antrieb_Schleuse_aktiv := "MA0203" ,
Antrieb_plus_aktiv := "DSchnittstelle_zu_AMR".From_UH06.MA0203_aktiv ,
Schleuse_geöffnet := "MB3722" ,
Y_Schleuse_Auf := "DLPtoHW_Zylinder".Schleuse_3722.Stat.Ast ,
Error := %DB708.DBW534 ,
Antrieb_Schleuse_vor := "DLPtoHW_Antriebe".MA0203.Stat.A_vor ,
Antrieb_Schleuse_start := "DLPtoHW_Antriebe".MA0203.Stat.A_start ,
Antrieb_Schleuse_stop := "DLPtoHW_Antriebe".MA0203.Stat.Stop_vor ,
Antrieb_Schleuse_PS := "DLPtoHW_Antriebe".MA0203.Stat.A_PS ,
Antrieb_plus_vor := "DSchnittstelle_zu_AMR".To_UH06.MA0203_A_vor ,
Antrieb_plus_start := "DSchnittstelle_zu_AMR".To_UH06.MA0203_A_start ,
hStOk := #ErrAnz
);
//Schnittstelle zu Outbound: (Verarbeitung s.o.)
U "DLPtoHW_Sensoren".Fährt_zu_UH06.Stat.B_Akt;
S "DSchnittstelle_zu_AMR".To_UH06.MA0203_A_vor;
S "DSchnittstelle_zu_AMR".To_UH06.MA0203_A_start;
S "DLPtoHW_Antriebe".MA0203.Stat.A_vor;
NETWORK
TITLE = Störungen anzeigen UZ7202/7201
U #ErrAnz;
R #ErrAnz;
S "DOutbound_Bereich".A01_UZ7202.StOk_blinken;
S "DOutbound_Bereich".A01_UZ7201.StOk_blinken;
S "DOutbound_Bereich".A01_UC072.StOk_blinken;
S "DOutbound_Bereich".A01_UH07.StOk_blinken;
NETWORK
TITLE = Ende
BE;
END_FUNCTION_BLOCK
@@ -1,173 +1,176 @@
=== FC 6181: LPtoHW_Ziel_FC [STL] ===
INTERFACE:
Input:
Output:
InOut:
Temp:
Ziel_hex : Word
Ziel_int : Int
Zielebene : Word
Error : Byte
Position : Int
Lager_DB : Int
Lager_DW : Int
AR1Zeiger : DWord // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
AR1Start : DInt // Startwert mit Offset 0
SSDW : Int
EndZiel : Word
Variante : Int
AbrufID : DInt
Fahrlisten_TrolleyID : DInt
Fahrlisten_AbrufID : DInt
Fahrlisten_Lager : Int
Trolley_unbekannt : Bool // Trolley ist nicht in DL
Express_Abruf : Bool
Constant:
Return:
Ret_Val : Void
--- NW 1: Rückmeldung ---
SET // Rückmeldungen erst mal resetten
R "M180.6" // Weiterfahrt von Ziel-FC erlaubt
FUNCTION "LPtoHW_Ziel_FC" : Void
TITLE = Ziel-FC: LP>HW
{ S7_Optimized_Access := 'FALSE' ; S7_Pass_Registers := 'TRUE' }
AUTHOR : AE
VERSION : 0.1
VAR_TEMP
Ziel_hex : Word;
Ziel_int : Int;
Zielebene : Word;
Error : Byte;
Position : Int;
Lager_DB : Int;
Lager_DW : Int;
AR1Zeiger : DWord; // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
AR1Start : DInt; // Startwert mit Offset 0
SSDW : Int;
EndZiel : Word;
Variante : Int;
AbrufID : DInt;
Fahrlisten_TrolleyID : DInt;
Fahrlisten_AbrufID : DInt;
Fahrlisten_Lager : Int;
Trolley_unbekannt : Bool; // Trolley ist nicht in DL
Express_Abruf : Bool;
END_VAR
--- NW 2: Schleuse 3342: Weiterfahren erlaubt ? (Vor Trolley-Beladung) ---
L "MW190"
L 3342 // Aufruf von Schleuse 3342 ?
<>I // Nein!
JC X3342E
BEGIN
NETWORK
TITLE = Rückmeldung
SET;//Rückmeldungen erst mal resetten
R "M180.6";//Weiterfahrt von Ziel-FC erlaubt
SET
S "M180.6" // Weiterfahrt ist erlaubt
NETWORK
TITLE = Schleuse 3342: Weiterfahren erlaubt ? (Vor Trolley-Beladung)
L "MW190";
L 3342 ;//Aufruf von Schleuse 3342 ?
<>I;//Nein!
SPB X3342E;
BEU
SET;
S "M180.6" ;//Weiterfahrt ist erlaubt
X3342E: NOP 0
BEA;
X3342E: NOP 0;
--- NW 3: Schleuse 3323: Weiterfahren erlaubt ? (Trolley-Beladung) ---
L "MW190"
L 3323 // Aufruf von Schleuse 3323 ?
<>I // Nein!
JC X3323E
NETWORK
TITLE = Schleuse 3323: Weiterfahren erlaubt ? (Trolley-Beladung)
L "MW190";
L 3323 ;//Aufruf von Schleuse 3323 ?
<>I;//Nein!
SPB X3323E;
// Umschalten auf Durchfahr-Modus:
A "DLeerPufferStrecken".DurchfahrModus.Anmelden
AN "DLPtoHW_Sensoren".Sack_BG3324.Stat.B_Akt // Noch kein Sack behängt
R "DLeerPufferStrecken".DurchfahrModus.Anmelden
S "DLeerPufferStrecken".DurchfahrModus.Aktiv
//Umschalten auf Durchfahr-Modus:
U "DLeerPufferStrecken".DurchfahrModus.Anmelden;
UN "DLPtoHW_Sensoren".Sack_BG3324.Stat.B_Akt ;//Noch kein Sack behängt
R "DLeerPufferStrecken".DurchfahrModus.Anmelden;
S "DLeerPufferStrecken".DurchfahrModus.Aktiv;
// Trolley-Err-Anzeige (blau):
A "BG3323" // Trolley ist in Schleuse
A(
A "DLeerPufferStrecken".DurchfahrModus.Aktiv
A "DLPtoHW_Sensoren".Sack_BG3324.Stat.B_Akt // Aber Sack behängt
O
AN "DLeerPufferStrecken".DurchfahrModus.Aktiv
AN "DLPtoHW_Sensoren".Sack_BG3324.Stat.B_Akt // Noch kein Sack behängt
)
= "PF0033"
//Trolley-Err-Anzeige (blau):
U "BG3323";//Trolley ist in Schleuse
U(;
U "DLeerPufferStrecken".DurchfahrModus.Aktiv;
U "DLPtoHW_Sensoren".Sack_BG3324.Stat.B_Akt;//Aber Sack behängt
O;
UN "DLeerPufferStrecken".DurchfahrModus.Aktiv;
UN "DLPtoHW_Sensoren".Sack_BG3324.Stat.B_Akt;//Noch kein Sack behängt
);
= "PF0033";
// Trolley kann gestartet werden:
A "BG3323" // Trolley ist in Schleuse
AN "DLeerPufferStrecken".DurchfahrModus.Aktiv
A "DLPtoHW_Sensoren".Sack_BG3324.Stat.B_Akt // Sack behängt
A "Clock_2Hz"
= "PF0044"
//Trolley kann gestartet werden:
U "BG3323";//Trolley ist in Schleuse
UN "DLeerPufferStrecken".DurchfahrModus.Aktiv;
U "DLPtoHW_Sensoren".Sack_BG3324.Stat.B_Akt;//Sack behängt
U "Clock_2Hz";
= "PF0044";
// Bestätigung durch Bediener:
A "BG3323" // Trolley ist in Schleuse
A(
A "SF0044" // Bestätigung mit Taster
AN "DLeerPufferStrecken".DurchfahrModus.Aktiv
A "DLPtoHW_Sensoren".Sack_BG3324.Stat.B_Akt // Sack behängt
O
// Durchfahr-Modus aktiv:
A "DLeerPufferStrecken".DurchfahrModus.Aktiv
AN "DLPtoHW_Sensoren".Sack_BG3324.Stat.B_Akt // Aber Sack behängt
)
S "M180.6" // Weiterfahrt ist erlaubt
//Bestätigung durch Bediener:
U "BG3323";//Trolley ist in Schleuse
U(;
U "SF0044" ;//Bestätigung mit Taster
UN "DLeerPufferStrecken".DurchfahrModus.Aktiv;
U "DLPtoHW_Sensoren".Sack_BG3324.Stat.B_Akt;//Sack behängt
O;
//Durchfahr-Modus aktiv:
U "DLeerPufferStrecken".DurchfahrModus.Aktiv;
UN "DLPtoHW_Sensoren".Sack_BG3324.Stat.B_Akt;//Aber Sack behängt
);
S "M180.6" ;//Weiterfahrt ist erlaubt
BEU
BEA;
X3323E: NOP 0
X3323E: NOP 0;
NETWORK
TITLE = Schleuse 4221: (Vor ByPass zum VP)
L "MW190";
L 4221 ;//Aufruf von Schleuse XXXX?
<>I;//Nein!
SPB PS5E;
--- NW 4: Schleuse 4221: (Vor ByPass zum VP) ---
L "MW190"
L 4221 // Aufruf von Schleuse XXXX?
<>I // Nein!
JC PS5E
//Ziel-Check:
L "DLPtoHW_OmniFahren".Schleuse_4221.Dyn.Trolley_EndZiel;
L 16#B000 ;//Vollpuffer ?
==I;//Ja !
UN "DLPtoHW_Sensoren".Sack_BG4222.Stat.B_Akt;//Kein Sack erkannt
SPB A4221 ;//Abzweig fahren
// Ziel-Check:
L "DLPtoHW_OmniFahren".Schleuse_4221.Dyn.Trolley_EndZiel
L 16#B000 // Vollpuffer ?
==I // Ja !
AN "DLPtoHW_Sensoren".Sack_BG4222.Stat.B_Akt // Kein Sack erkannt
JC A4221 // Abzweig fahren
SPB G4221;
JC G4221
SPA G4221 ;//Rest Gerade fahren
JU G4221 // Rest Gerade fahren
//Abzweig fahren:
A4221: L 16#4211;
T "MW198" ;//Weichenziel
// Abzweig fahren:
A4221: L 16#4211
T "MW198" // Weichenziel
//Quell-Steuerung:
L "DHWtoVP_OmniFahren".Schleuse_4207.Dyn.Raus_Trolleys;
L 0 ;//Sind Trolleys zur Weiche MB4210 unterwegs?
>I;//Ja!
O "DHWtoVP_OmniFahren".Schleuse_4207.Dyn.Status.Reset_aktiv;
O "MB4207" ;//Andere Quelle aktiv
BEB;
// Quell-Steuerung:
L "DHWtoVP_OmniFahren".Schleuse_4207.Dyn.Raus_Trolleys
L 0 // Sind Trolleys zur Weiche MB4210 unterwegs?
>I // Ja!
O "DHWtoVP_OmniFahren".Schleuse_4207.Dyn.Status.Reset_aktiv
O "MB4207" // Andere Quelle aktiv
BEC
UN "DHWtoVP_Sensoren".Stau_BG4210.Stat.B_Akt;
UN "DHWtoVP_Sensoren".Stau_BG4211.Stat.B_Akt;
S "M180.6" ;//Weiterfahrt ist erlaubt
AN "DHWtoVP_Sensoren".Stau_BG4210.Stat.B_Akt
AN "DHWtoVP_Sensoren".Stau_BG4211.Stat.B_Akt
S "M180.6" // Weiterfahrt ist erlaubt
BEA;
BEU
//Gerade fahren:
G4221: L 16#4224;
T "MW198" ;//Weichenziel
// Gerade fahren:
G4221: L 16#4224
T "MW198" // Weichenziel
UN "DLPtoHW_Sensoren".Stau_BG4224.Stat.B_Akt;
S "M180.6" ;//Weiterfahrt ist erlaubt
AN "DLPtoHW_Sensoren".Stau_BG4224.Stat.B_Akt
S "M180.6" // Weiterfahrt ist erlaubt
BEA;
BEU
PS5E: NOP 0;
PS5E: NOP 0
NETWORK
TITLE = Schleuse 4235: (BST 2)
L "MW190";
L 4235 ;//Aufruf von Schleuse XXXX?
<>I;//Nein!
SPB X4235E;
SET;
S "M180.6" ;//Weiterfahrt ist erlaubt
--- NW 5: Schleuse 4235: (BST 2) ---
L "MW190"
L 4235 // Aufruf von Schleuse XXXX?
<>I // Nein!
JC X4235E
BEA;
SET
S "M180.6" // Weiterfahrt ist erlaubt
X4235E: NOP 0;
BEU
NETWORK
TITLE = Schleuse 3722: Übergabe an UH06/AMR
L "MW190";
L 3722 ;//Aufruf von Schleuse 3722 ?
<>I;//Nein!
SPB X3722E;
X4235E: NOP 0
SET;
S "M180.6" ;//Weiterfahrt ist erlaubt
BEA;
--- NW 6: Schleuse 3722: Übergabe an UH06/AMR ---
L "MW190"
L 3722 // Aufruf von Schleuse 3722 ?
<>I // Nein!
JC X3722E
X3722E: NOP 0;
SET
S "M180.6" // Weiterfahrt ist erlaubt
NETWORK
TITLE = Ende
BE;
BEU
X3722E: NOP 0
--- NW 7: Ende ---
BE
END_FUNCTION
File diff suppressed because it is too large Load Diff
@@ -1,44 +1,60 @@
=== FC 9: PufferZeiger_ermitteln [STL] ===
INTERFACE:
Input:
Puffer_X : Int // Puffer zum Auslagern
Output:
Puffer_DB : Int
Puffer_DW : Int
Error : Bool
InOut:
Temp:
Position : Int
Constant:
Return:
Ret_Val : Void
FUNCTION "PufferZeiger_ermitteln" : Void
TITLE = PufferZeiger ermitteln
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
Puffer_X : Int; // Puffer zum Auslagern
END_VAR
--- NW 1: Zeiger für Puffer_X ermitteln ---
L Puffer_X
T "MW200"
L 0 // sinnvolle Angabe?
==I // Nein!
= Error
BEC
VAR_OUTPUT
Puffer_DB : Int;
Puffer_DW : Int;
Error : Bool;
END_VAR
// Einsprung Puffer ermitteln:
CALL FC "DatenOut" (SSDB:=275, SSDW:=0, PARA:=16#0000, SEARCHDATEN:=P#M200.0, RE_VAL:="MB199", OUTDATEN:=P#M220.0, Position:=Position) // Eintrag lesen
L "MB199"
L 2#1111111 // Bit 7 ausblenden
AW
L 0 // Fehler vorhanden?
<>I // Ja
= "7_HMI_Err_UH07_OB".Logistik.DB275_Err
= Error
BEC
L "MW224"
T Puffer_DB
L "MW226"
T Puffer_DW
VAR_TEMP
Position : Int;
END_VAR
--- NW 2: Ende ---
BE
BEGIN
NETWORK
TITLE = Zeiger für Puffer_X ermitteln
L #Puffer_X;
T "MW200";
L 0;//sinnvolle Angabe?
==I;//Nein!
= #Error;
BEB;
//Einsprung Puffer ermitteln:
CALL "DatenOut"
( SSDB := 275 ,
SSDW := 0 ,
PARA := 16#0000 , //Eintrag lesen
SEARCHDATEN := P#M200.0 ,
RE_VAL := "MB199" ,
OUTDATEN := P#M220.0 ,
Position := #Position
);
L "MB199";
L 2#1111111 ;//Bit 7 ausblenden
UW;
L 0;//Fehler vorhanden?
<>I;//Ja
= "7_HMI_Err_UH07_OB".Logistik.DB275_Err;
= #Error;
BEB;
L "MW224";
T #Puffer_DB;
L "MW226";
T #Puffer_DW;
NETWORK
TITLE = Ende
BE;
END_FUNCTION
@@ -1,130 +1,153 @@
=== FC 5: Reservierung_in_Puffer_eintragen [STL] ===
INTERFACE:
Input:
TrolleyID : DInt
Ziel : Int
ShopGroup : DInt
Gesamt_Trolley_DL : Int
Output:
InOut:
Temp:
Lager_DB : Int
Lager_DW : Int
SSDW : Int
Position : Int
LeerPuffer : Bool
VollPuffer : Bool
Constant:
Return:
Ret_Val : Void
FUNCTION "Reservierung_in_Puffer_eintragen" : Void
TITLE = Reservierung an Puffer senden / Trolley-Daten in Gesamt-Trolley-Liste sichern /
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
TrolleyID : DInt;
Ziel : Int;
ShopGroup : DInt;
Gesamt_Trolley_DL : Int;
END_VAR
--- NW 1: TrolleyID + Ziel bekannt -> Reservierung im Puffer ---
L TrolleyID
L 0
==I
BEC
L Ziel
L 0
==I
BEC
// Ziel checken:
L 1
>=I
A(
CAC
L 10
<=I
)
= LeerPuffer
CAC
L 101
>=I
A(
CAC
L 151
<=I
)
= VollPuffer
// Puffer checken:
L Ziel
T "MW220"
CALL FC "DatenOut" (SSDB:=275, SSDW:=0, PARA:=16#0000, SEARCHDATEN:=P#M220.0, RE_VAL:="MB199", OUTDATEN:=P#M220.0, Position:=Position) // Eintrag lesen
L "MB199"
L 2#1111111 // Bit 7 ausblenden
AW
L 0 // Fehler vorhanden?
<>I // Ja
BEC
L "MW224"
T Lager_DB
L "MW226"
T Lager_DW
// Eintrag in Trolley-Reservierungsliste
L TrolleyID
T "MD220"
L ShopGroup
T "MD224"
L Lager_DW
L 200
+I
T SSDW
CALL FC "DatenIn" (SSDB:=Lager_DB, SSDW:=SSDW, INDATEN:=P#M220.0, RE_VAL:="MB198")
VAR_TEMP
Lager_DB : Int;
Lager_DW : Int;
SSDW : Int;
Position : Int;
LeerPuffer : Bool;
VollPuffer : Bool;
END_VAR
--- NW 2: BC in Trolley-DL eintragen ---
L Gesamt_Trolley_DL
L 0 // Liste angegeben?
==I // Nein!
BEC
BEGIN
NETWORK
TITLE = TrolleyID + Ziel bekannt -> Reservierung im Puffer
L #TrolleyID;
L 0;
==I;
BEB;
L TrolleyID
T "TrolleyDL_INDaten".INDaten.TrolleyID
L Ziel
T "TrolleyDL_INDaten".INDaten.EndZiel
L ShopGroup
T "TrolleyDL_INDaten".INDaten.ShopGroup
L #Ziel;
L 0;
==I;
BEB;
// Standort:
L 16#A000
A LeerPuffer
JC Standort
//Ziel checken:
L 1;
>=I;
U(;
TAK;
L 10;
<=I;
);
= #LeerPuffer;
L 16#B000
A VollPuffer
JC Standort
TAK;
L 101;
>=I;
U(;
TAK;
L 151;
<=I;
);
= #VollPuffer;
L 16#0
//Puffer checken:
L #Ziel;
T "MW220";
Standort: T "TrolleyDL_INDaten".INDaten.Standort
CALL "DatenOut"
( SSDB := 275 ,
SSDW := 0 ,
PARA := 16#0000 , //Eintrag lesen
SEARCHDATEN := P#M220.0 ,
RE_VAL := "MB199" ,
OUTDATEN := P#M220.0 ,
Position := #Position
);
// Startzeit:
L "SGes".DATE_TIME.Jahr
T "TrolleyDL_INDaten".INDaten.LastTime.Jahr
L "SGes".DATE_TIME.Monat
T "TrolleyDL_INDaten".INDaten.LastTime.Monat
L "SGes".DATE_TIME.Tag
T "TrolleyDL_INDaten".INDaten.LastTime.Tag
L "SGes".DATE_TIME.Stunde
T "TrolleyDL_INDaten".INDaten.LastTime.Stunde
L "SGes".DATE_TIME.Minute
T "TrolleyDL_INDaten".INDaten.LastTime.Minute
L "SGes".DATE_TIME.Sekunde
T "TrolleyDL_INDaten".INDaten.LastTime.Sekunde
L "MB199";
L 2#1111111 ;//Bit 7 ausblenden
UW;
L 0;//Fehler vorhanden?
<>I;//Ja
BEB;
// Daten in Datenbank schreiben:
CALL FC "DatenIn" (SSDB:=Gesamt_Trolley_DL, SSDW:=0, INDATEN:=DB1010.DBX0.0, RE_VAL:="MB198")
L "MW224";
T #Lager_DB;
L "MW226";
T #Lager_DW;
//Eintrag in Trolley-Reservierungsliste
L #TrolleyID;
T "MD220";
L #ShopGroup;
T "MD224";
--- NW 3: Ende ---
BE
L #Lager_DW;
L 200;
+I;
T #SSDW;
CALL "DatenIn"
( SSDB := #Lager_DB ,
SSDW := #SSDW ,
INDATEN := P#M220.0 ,
RE_VAL := "MB198"
);
NETWORK
TITLE = BC in Trolley-DL eintragen
L #Gesamt_Trolley_DL;
L 0;//Liste angegeben?
==I;//Nein!
BEB;
L #TrolleyID;
T "TrolleyDL_INDaten".INDaten.TrolleyID;
L #Ziel;
T "TrolleyDL_INDaten".INDaten.EndZiel;
L #ShopGroup;
T "TrolleyDL_INDaten".INDaten.ShopGroup;
//Standort:
L 16#A000;
U #LeerPuffer;
SPB Standort;
L 16#B000;
U #VollPuffer;
SPB Standort;
L 16#0;
Standort: T "TrolleyDL_INDaten".INDaten.Standort;
//Startzeit:
L "SGes".DATE_TIME.Jahr;
T "TrolleyDL_INDaten".INDaten.LastTime.Jahr;
L "SGes".DATE_TIME.Monat;
T "TrolleyDL_INDaten".INDaten.LastTime.Monat;
L "SGes".DATE_TIME.Tag;
T "TrolleyDL_INDaten".INDaten.LastTime.Tag;
L "SGes".DATE_TIME.Stunde;
T "TrolleyDL_INDaten".INDaten.LastTime.Stunde;
L "SGes".DATE_TIME.Minute;
T "TrolleyDL_INDaten".INDaten.LastTime.Minute;
L "SGes".DATE_TIME.Sekunde;
T "TrolleyDL_INDaten".INDaten.LastTime.Sekunde;
//Daten in Datenbank schreiben:
CALL "DatenIn"
( SSDB := #Gesamt_Trolley_DL ,
SSDW := 0 ,
INDATEN := %DB1010.DBX0.0 ,
RE_VAL := "MB198"
);
NETWORK
TITLE = Ende
BE;
END_FUNCTION
@@ -1,39 +1,55 @@
=== FC 20: SchleusenZeiger_ermitteln [STL] ===
INTERFACE:
Input:
Schleuse_X : Int // Schleuse zum Beeinflussen
Output:
Schleusen_DB : Int
Schleusen_DW : Int
Error : Bool
InOut:
Temp:
Position : Int
Constant:
Return:
Ret_Val : Void
FUNCTION "SchleusenZeiger_ermitteln" : Void
TITLE = AMRZeiger ermitteln
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
Schleuse_X : Int; // Schleuse zum Beeinflussen
END_VAR
--- NW 1: Zeiger für Schleuse_X ermitteln ---
L Schleuse_X
T "MW200"
VAR_OUTPUT
Schleusen_DB : Int;
Schleusen_DW : Int;
Error : Bool;
END_VAR
// Einsprung Schleuse ermitteln:
CALL FC "DatenOut" (SSDB:=274, SSDW:=0, PARA:=16#0000, SEARCHDATEN:=P#M200.0, RE_VAL:="MB199", OUTDATEN:=P#M220.0, Position:=Position) // Eintrag lesen
L "MB199"
L 2#1111111 // Bit 7 ausblenden
AW
L 0 // Fehler vorhanden?
<>I // Ja
= Error
BEC
L "MW224"
T Schleusen_DB
L "MW226"
T Schleusen_DW
VAR_TEMP
Position : Int;
END_VAR
--- NW 2: Ende ---
BE
BEGIN
NETWORK
TITLE = Zeiger für Schleuse_X ermitteln
L #Schleuse_X;
T "MW200";
//Einsprung Schleuse ermitteln:
CALL "DatenOut"
( SSDB := 274 ,
SSDW := 0 ,
PARA := 16#0000 , //Eintrag lesen
SEARCHDATEN := P#M200.0 ,
RE_VAL := "MB199" ,
OUTDATEN := P#M220.0 ,
Position := #Position
);
L "MB199";
L 2#1111111 ;//Bit 7 ausblenden
UW;
L 0;//Fehler vorhanden?
<>I;//Ja
= #Error;
BEB;
L "MW224";
T #Schleusen_DB;
L "MW226";
T #Schleusen_DW;
NETWORK
TITLE = Ende
BE;
END_FUNCTION
@@ -1,212 +1,227 @@
=== FC 29: Simulation_Aus_VP_Trolley_starten [STL] ===
INTERFACE:
Input:
Output:
InOut:
Temp:
VollPuffer : Int
VP_DB : Int
VP_DW : Int
AR1Zeiger : DWord // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
AR1Start : DInt // Startwert mit Offset 0
PARA : Word
Position : Int
Schleife1 : Word // Loopzähler 1
Constant:
Return:
Ret_Val : Void
--- NW 1: Ausfahrt schon aktiv ? ---
A "DVollPufferStreckenA".VollPuffer_01.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenA".VollPuffer_02.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenA".VollPuffer_03.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenA".VollPuffer_04.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenA".VollPuffer_05.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenA".VollPuffer_06.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenA".VollPuffer_07.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenA".VollPuffer_08.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenA".VollPuffer_09.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenA".VollPuffer_10.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenA".VollPuffer_11.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenA".VollPuffer_12.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenA".VollPuffer_13.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenA".VollPuffer_14.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenA".VollPuffer_15.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenA".VollPuffer_16.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenA".VollPuffer_17.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenA".VollPuffer_18.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenA".VollPuffer_19.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenA".VollPuffer_20.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenA".VollPuffer_21.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenA".VollPuffer_22.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenA".VollPuffer_23.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenA".VollPuffer_24.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenA".VollPuffer_25.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenB".VollPuffer_26.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenB".VollPuffer_27.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenB".VollPuffer_28.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenB".VollPuffer_29.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenB".VollPuffer_30.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenB".VollPuffer_31.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenB".VollPuffer_32.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenB".VollPuffer_33.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenB".VollPuffer_34.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenB".VollPuffer_35.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenB".VollPuffer_36.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenB".VollPuffer_37.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenB".VollPuffer_38.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenB".VollPuffer_39.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenB".VollPuffer_40.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenB".VollPuffer_41.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenB".VollPuffer_42.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenB".VollPuffer_43.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenB".VollPuffer_44.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenB".VollPuffer_45.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenB".VollPuffer_46.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenB".VollPuffer_47.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenB".VollPuffer_48.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenB".VollPuffer_49.Status2.Alles_ausfahren_OUT
O "DVollPufferStreckenB".VollPuffer_50.Status2.Alles_ausfahren_OUT
= "DVPAuslagern".Simulation_Auslagern.Auslagern_aktiv
BEC
L 0
T "DVPAuslagern".Simulation_Auslagern.Vollpuffer_Aktiv
FUNCTION "Simulation_Aus_VP_Trolley_starten" : Void
TITLE = Simulation zum Starten von Trolleys aus AMRs
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_TEMP
VollPuffer : Int;
VP_DB : Int;
VP_DW : Int;
AR1Zeiger : DWord; // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
AR1Start : DInt; // Startwert mit Offset 0
PARA : Word;
Position : Int;
Schleife1 : Word; // Loopzähler 1
END_VAR
--- NW 2: Puffer aus Ausfahrliste holen ---
L "DVPAuslagern".Simulation_Auslagern.Vollpuffer_Check
T VollPuffer
L 0
<>I
JC Check
BEGIN
NETWORK
TITLE = Ausfahrt schon aktiv ?
U "DVollPufferStrecken_A".VollPuffer_01.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_A".VollPuffer_02.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_A".VollPuffer_03.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_A".VollPuffer_04.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_A".VollPuffer_05.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_A".VollPuffer_06.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_A".VollPuffer_07.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_A".VollPuffer_08.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_A".VollPuffer_09.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_A".VollPuffer_10.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_A".VollPuffer_11.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_A".VollPuffer_12.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_A".VollPuffer_13.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_A".VollPuffer_14.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_A".VollPuffer_15.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_A".VollPuffer_16.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_A".VollPuffer_17.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_A".VollPuffer_18.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_A".VollPuffer_19.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_A".VollPuffer_20.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_A".VollPuffer_21.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_A".VollPuffer_22.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_A".VollPuffer_23.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_A".VollPuffer_24.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_A".VollPuffer_25.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_B".VollPuffer_26.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_B".VollPuffer_27.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_B".VollPuffer_28.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_B".VollPuffer_29.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_B".VollPuffer_30.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_B".VollPuffer_31.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_B".VollPuffer_32.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_B".VollPuffer_33.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_B".VollPuffer_34.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_B".VollPuffer_35.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_B".VollPuffer_36.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_B".VollPuffer_37.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_B".VollPuffer_38.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_B".VollPuffer_39.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_B".VollPuffer_40.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_B".VollPuffer_41.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_B".VollPuffer_42.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_B".VollPuffer_43.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_B".VollPuffer_44.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_B".VollPuffer_45.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_B".VollPuffer_46.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_B".VollPuffer_47.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_B".VollPuffer_48.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_B".VollPuffer_49.Status2.Alles_ausfahren_OUT;
O "DVollPufferStrecken_B".VollPuffer_50.Status2.Alles_ausfahren_OUT;
= "DVP_Auslagern".Simulation_Auslagern.Auslagern_aktiv;
BEB;
L 16#F100 // 1.Eintrag lesen !!! (da noch 2.Suche erforderlich!)
T PARA
L 0;
T "DVP_Auslagern".Simulation_Auslagern.Vollpuffer_Aktiv;
L "DLVollPuffer_ShopGroup_abrufen".Datenlistenkopf.AnzahlEintraege
L 0
==I
BEC
NETWORK
TITLE = Puffer aus Ausfahrliste holen
L "DVP_Auslagern".Simulation_Auslagern.Vollpuffer_Check;
T #VollPuffer;
L 0;
<>I;
SPB Check;
CAC
L100: T Schleife1
L 16#F100;//1.Eintrag lesen !!! (da noch 2.Suche erforderlich!)
T #PARA;
// Einträge lesen:
CALL FC "DatenOut" (SSDB:=102, SSDW:=0, PARA:=PARA, SEARCHDATEN:=P#M200.0, RE_VAL:="MB219", OUTDATEN:=P#M220.0, Position:="DVPAuslagern".Simulation_Auslagern.Position) // Reihenfolge abrufen
L "DLVollPuffer_ShopGroup_abrufen".Datenlistenkopf.AnzahlEintraege;
L 0;
==I;
BEB;
L 16#FF00 // Nächsten Eintrag lesen !!! (Vergleich ausserhalb s.u.)
T PARA
TAK;
L100: T #Schleife1;
JBI OkVP
//Einträge lesen:
CALL "DatenOut"
( SSDB := 102 , //Reihenfolge abrufen
SSDW := 0 ,
PARA := #PARA ,
SEARCHDATEN := P#M200.0 ,
RE_VAL := "MB219" ,
OUTDATEN := P#M220.0 ,
Position := "DVP_Auslagern".Simulation_Auslagern.Position
);
BEU
L 16#FF00 ;//Nächsten Eintrag lesen !!! (Vergleich ausserhalb s.u.)
T #PARA;
OkVP: L "MW220"
T VollPuffer
T "DVPAuslagern".Simulation_Auslagern.Last_Check
SPBI OkVP;
BEA;
--- NW 3: VP mit 0815-ShopGroup, 5 Daten und Sensor in Schleuse ? ---
Check: CALL FC "PufferZeiger_ermitteln" (Puffer_X:=VollPuffer, Puffer_DB:=VP_DB, Puffer_DW:=VP_DW, Error:="M199.0")
OkVP: L "MW220";
T #VollPuffer;
T "DVP_Auslagern".Simulation_Auslagern.Last_Check;
A "M199.0"
BEC
NETWORK
TITLE = VP mit 0815-ShopGroup, 5 Daten und Sensor in Schleuse ?
Check: CALL "PufferZeiger_ermitteln"
( Puffer_X := #VollPuffer ,
Puffer_DB := #VP_DB ,
Puffer_DW := #VP_DW ,
Error := "M199.0"
);
// Ziel-Pointer erzeugen: (PLC-Daten)
L VP_DW
ITD
T AR1Start // Startwert mit Offset 0
U "M199.0";
BEB;
// Hat Lager Shopgroup 815 ?:
L AR1Start // Startwert mit Offset 0
+ DINT#88 // Offset für ShopGroup_Out
SLD 3
T AR1Zeiger // Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
OPN DB[VP_DB] // AMR-DB öffnen
//Ziel-Pointer erzeugen: (PLC-Daten)
L #VP_DW;
ITD;
T #AR1Start;//Startwert mit Offset 0
L DBD [AR1Zeiger]
L DINT#815
<>D
JC next
//Hat Lager Shopgroup 815 ?:
L #AR1Start;//Startwert mit Offset 0
+ DINT#88 ;//Offset für ShopGroup_Out
SLD 3;
T #AR1Zeiger;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
AUF DB[ #VP_DB] ;//AMR-DB öffnen
// Hat Lager unten 5 Trolleys ?:
L AR1Start // Startwert mit Offset 0
+ DINT#516 // Offset für Anzahl OUT-DL
SLD 3
T AR1Zeiger // Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
OPN DB[VP_DB] // AMR-DB öffnen
L DBD[ #AR1Zeiger];
L DINT#815;
<>D;
SPB next;
L DBW [AR1Zeiger]
L 0
==I
JC next
//Hat Lager unten 5 Trolleys ?:
L #AR1Start ;//Startwert mit Offset 0
+ DINT#516 ;//Offset für Anzahl OUT-DL
SLD 3;
T #AR1Zeiger;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
AUF DB[ #VP_DB] ;//AMR-DB öffnen
// Sensor BSchleuse_Out:
L AR1Start // Startwert mit Offset 0
+ DINT#2 // Offset für B-Schleuse out
SLD 3
L 3 // Damit DBX_Bit 3
OD
T AR1Zeiger // Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
OPN DB[VP_DB] // AMR-DB öffnen
AN DBX [AR1Zeiger] // Trolley in Schleuse
JC next
L DBW[ #AR1Zeiger];
L 0;
==I;
SPB next;
// Sensor BVollpuffer-Einfahrt:
L AR1Start // Startwert mit Offset 0
+ DINT#2 // BVollpuffer-Einfahrt
SLD 3
L 1 // Damit DBX_Bit 1
OD
T AR1Zeiger // Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
OPN DB[VP_DB] // AMR-DB öffnen
AN DBX [AR1Zeiger] // Stau simuliert
JC next
//Sensor BSchleuse_Out:
L #AR1Start;//Startwert mit Offset 0
+ DINT#2 ;//Offset für B-Schleuse out
SLD 3;
L 3 ;//Damit DBX_Bit 3
OD;
T #AR1Zeiger;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
AUF DB[ #VP_DB] ;//AMR-DB öffnen
UN DBX[ #AR1Zeiger] ;//Trolley in Schleuse
SPB next;
L VollPuffer
T "DVPAuslagern".Simulation_Auslagern.Vollpuffer_Check
//Sensor BVollpuffer-Einfahrt:
L #AR1Start;//Startwert mit Offset 0
+ DINT#2 ;//BVollpuffer-Einfahrt
SLD 3;
L 1 ;//Damit DBX_Bit 1
OD;
T #AR1Zeiger;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
AUF DB[ #VP_DB] ;//AMR-DB öffnen
UN DBX[ #AR1Zeiger] ;//Stau simuliert
SPB next;
AN "100ms-Impuls"
BEC
L #VollPuffer;
T "DVP_Auslagern".Simulation_Auslagern.Vollpuffer_Check;
L "DVPAuslagern".Simulation_Auslagern.Wartezeit
+ +1
T "DVPAuslagern".Simulation_Auslagern.Wartezeit
UN "100ms-Impuls";
BEB;
L 30 // 3s rum
<I
BEC // Warten
L "DVP_Auslagern".Simulation_Auslagern.Wartezeit;
+ +1;
T "DVP_Auslagern".Simulation_Auslagern.Wartezeit;
// Alles auslagern:
L AR1Start // Startwert mit Offset 0
+ DINT#29 // Offset für Status 2 HighByte
SLD 3
L 4 // Damit DBX_Bit 4
OD
T AR1Zeiger // Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
OPN DB[VP_DB] // AMR-DB öffnen
SET
S DBX [AR1Zeiger] // Alles auslagern
L 30 ;//3s rum
<I;
BEB;//Warten
L "DVPAuslagern".Simulation_Auslagern.Vollpuffer_Check
T "DVPAuslagern".Simulation_Auslagern.Vollpuffer_Aktiv
//Alles auslagern:
L #AR1Start;//Startwert mit Offset 0
+ DINT#29 ;//Offset für Status 2 HighByte
SLD 3;
L 4 ;//Damit DBX_Bit 4
OD;
T #AR1Zeiger;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
AUF DB[ #VP_DB] ;//AMR-DB öffnen
SET;
S DBX[ #AR1Zeiger] ;//Alles auslagern
L 0
T "DVPAuslagern".Simulation_Auslagern.Vollpuffer_Check
T "DVPAuslagern".Simulation_Auslagern.Last_Check
T "DVPAuslagern".Simulation_Auslagern.Wartezeit
L "DVP_Auslagern".Simulation_Auslagern.Vollpuffer_Check;
T "DVP_Auslagern".Simulation_Auslagern.Vollpuffer_Aktiv;
BEU
L 0;
T "DVP_Auslagern".Simulation_Auslagern.Vollpuffer_Check;
T "DVP_Auslagern".Simulation_Auslagern.Last_Check;
T "DVP_Auslagern".Simulation_Auslagern.Wartezeit;
next: L 0
T "DVPAuslagern".Simulation_Auslagern.Wartezeit
T "DVPAuslagern".Simulation_Auslagern.Vollpuffer_Check // Puffer verwerfen
BEA;
L Schleife1
LOOP L100
next: L 0;
T "DVP_Auslagern".Simulation_Auslagern.Wartezeit;
T "DVP_Auslagern".Simulation_Auslagern.Vollpuffer_Check;//Puffer verwerfen
L #Schleife1;
LOOP L100;
--- NW 4: Ende ---
BE
NETWORK
TITLE = Ende
BE;
END_FUNCTION
@@ -1,56 +1,69 @@
=== FC 1003: Trolley_DL_Check_ID [STL] ===
INTERFACE:
Input:
Gesamt_Trolley_DL : Int
TrolleyID : DInt
Output:
Check_EndZiel : Word // Ziel
Check_ZwischenZiel : Word // Für Weiche,...
Check_ShopGroup : DInt // Shop-Gruppe
Check_Standort : Word // Standort (Puffer, unterwegs)
Err : Bool
InOut:
Temp:
Constant:
Return:
Ret_Val : Void
FUNCTION "Trolley_DL_Check_ID" : Void
TITLE = Trolley_ID checken
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
Gesamt_Trolley_DL : Int;
TrolleyID : DInt;
END_VAR
--- NW 1: GesamtTrolly-DL angegeben? ---
L Gesamt_Trolley_DL
L 0 // sinnvolle Angabe?
<=I // Nein!
BEC // Abbruch
VAR_OUTPUT
Check_EndZiel : Word; // Ziel
Check_ZwischenZiel : Word; // Für Weiche,...
Check_ShopGroup : DInt; // Shop-Gruppe
Check_Standort : Word; // Standort (Puffer, unterwegs)
Err : Bool;
END_VAR
--- NW 2: Trolley auslesen ---
L TrolleyID
T "MD220"
BEGIN
NETWORK
TITLE = GesamtTrolly-DL angegeben?
L #Gesamt_Trolley_DL;
L 0;//sinnvolle Angabe?
<=I;//Nein!
BEB;//Abbruch
CALL FC "DatenOut" (SSDB:=Gesamt_Trolley_DL, SSDW:=0, PARA:=16#0000, SEARCHDATEN:=P#M220.0, RE_VAL:="MB199", OUTDATEN:=DB1011.DBX0.0, Position:="MW196") // Eintrag lesen
NETWORK
TITLE = Trolley auslesen
L #TrolleyID;
T "MD220";
L "MB199"
L 2#1111111 // Bit 7 ausblenden
AW
L 0 // Fehler vorhanden?
<>I // Ja
= Err
BEC
CALL "DatenOut"
( SSDB := #Gesamt_Trolley_DL ,
SSDW := 0 ,
PARA := 16#0000 , //Eintrag lesen
SEARCHDATEN := P#M220.0 ,
RE_VAL := "MB199" ,
OUTDATEN := %DB1011.DBX0.0 ,
Position := "MW196"
);
L "MB199";
L 2#1111111 ;//Bit 7 ausblenden
UW;
L 0;//Fehler vorhanden?
<>I;//Ja
= #Err;
BEB;
--- NW 3: Relevante Daten übergeben ---
L "TrolleyDL_OutDaten".OUTDaten.EndZiel
T Check_EndZiel
NETWORK
TITLE = Relevante Daten übergeben
L "TrolleyDL_OutDaten".OUTDaten.EndZiel;
T #Check_EndZiel;
L "TrolleyDL_OutDaten".OUTDaten.ZwischenZiel
T Check_ZwischenZiel
L "TrolleyDL_OutDaten".OUTDaten.ZwischenZiel;
T #Check_ZwischenZiel;
L "TrolleyDL_OutDaten".OUTDaten.ShopGroup
T Check_ShopGroup
L "TrolleyDL_OutDaten".OUTDaten.ShopGroup;
T #Check_ShopGroup;
L "TrolleyDL_OutDaten".OUTDaten.Standort
T Check_Standort
L "TrolleyDL_OutDaten".OUTDaten.Standort;
T #Check_Standort;
NETWORK
TITLE = Ende
BE;
--- NW 4: Ende ---
BE
END_FUNCTION
@@ -1,86 +1,104 @@
=== FC 1002: Trolley_DL_Neue_Pos [STL] ===
INTERFACE:
Input:
Gesamt_Trolley_DL : Int
TrolleyID : DInt
Position : Word
ShopGroup : DInt
Output:
Err : Bool
InOut:
Temp:
Constant:
Return:
Ret_Val : Void
FUNCTION "Trolley_DL_Neue_Pos" : Void
TITLE = Neue Position an Gesamt-Trolley-DL melden
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
Gesamt_Trolley_DL : Int;
TrolleyID : DInt;
Position : Word;
ShopGroup : DInt;
END_VAR
--- NW 1: GesamtTrolly-DL angegeben? ---
L Gesamt_Trolley_DL
L 0 // sinnvolle Angabe?
<=I // Nein!
BEC // Abbruch
VAR_OUTPUT
Err : Bool;
END_VAR
--- NW 2: Trolley auslesen ---
L TrolleyID
T "MD220"
BEGIN
NETWORK
TITLE = GesamtTrolly-DL angegeben?
L #Gesamt_Trolley_DL;
L 0;//sinnvolle Angabe?
<=I;//Nein!
BEB;//Abbruch
CALL FC "DatenOut" (SSDB:=Gesamt_Trolley_DL, SSDW:=0, PARA:=16#0000, SEARCHDATEN:=P#M220.0, RE_VAL:="MB199", OUTDATEN:=DB1011.DBX0.0, Position:="MW196") // Eintrag lesen
NETWORK
TITLE = Trolley auslesen
L #TrolleyID;
T "MD220";
L "MB199"
L 2#1111111 // Bit 7 ausblenden
AW
L 0 // Fehler vorhanden?
<>I // Ja
= Err
BEC
CALL "DatenOut"
( SSDB := #Gesamt_Trolley_DL ,
SSDW := 0 ,
PARA := 16#0000 , //Eintrag lesen
SEARCHDATEN := P#M220.0 ,
RE_VAL := "MB199" ,
OUTDATEN := %DB1011.DBX0.0 ,
Position := "MW196"
);
L "MB199";
L 2#1111111 ;//Bit 7 ausblenden
UW;
L 0;//Fehler vorhanden?
<>I;//Ja
= #Err;
BEB;
NETWORK
TITLE = Zeit übegeben
L #TrolleyID;
T "TrolleyDL_OutDaten".OUTDaten.TrolleyID;
L "SGes".DATE_TIME.Jahr;
T "TrolleyDL_OutDaten".OUTDaten.LastTime.Jahr;
L "SGes".DATE_TIME.Monat;
T "TrolleyDL_OutDaten".OUTDaten.LastTime.Monat;
L "SGes".DATE_TIME.Tag;
T "TrolleyDL_OutDaten".OUTDaten.LastTime.Tag;
L "SGes".DATE_TIME.Stunde;
T "TrolleyDL_OutDaten".OUTDaten.LastTime.Stunde;
L "SGes".DATE_TIME.Minute;
T "TrolleyDL_OutDaten".OUTDaten.LastTime.Minute;
L "SGes".DATE_TIME.Sekunde;
T "TrolleyDL_OutDaten".OUTDaten.LastTime.Sekunde;
NETWORK
TITLE = Neue Position übergeben
L #Position;
L 0;
==I;
SPB NoNewPos;
TAK;
T "TrolleyDL_OutDaten".OUTDaten.Standort;
NoNewPos: NOP 0;
NETWORK
TITLE = ShopGroup übergeben ? (bei 0 nichts ändern!)
L #ShopGroup;
L DINT#0;
==D;
SPB NoShopGroup;
TAK;
T "TrolleyDL_OutDaten".OUTDaten.ShopGroup;
NoShopGroup: NOP 0;
NETWORK
TITLE = Daten schreiben
CALL "DatenIn"
( SSDB := #Gesamt_Trolley_DL ,
SSDW := 0 ,
INDATEN := %DB1011.DBX0.0 ,
RE_VAL := "MB199"
);
--- NW 3: Zeit übegeben ---
L TrolleyID
T "TrolleyDL_OutDaten".OUTDaten.TrolleyID
L "SGes".DATE_TIME.Jahr
T "TrolleyDL_OutDaten".OUTDaten.LastTime.Jahr
L "SGes".DATE_TIME.Monat
T "TrolleyDL_OutDaten".OUTDaten.LastTime.Monat
L "SGes".DATE_TIME.Tag
T "TrolleyDL_OutDaten".OUTDaten.LastTime.Tag
L "SGes".DATE_TIME.Stunde
T "TrolleyDL_OutDaten".OUTDaten.LastTime.Stunde
L "SGes".DATE_TIME.Minute
T "TrolleyDL_OutDaten".OUTDaten.LastTime.Minute
L "SGes".DATE_TIME.Sekunde
T "TrolleyDL_OutDaten".OUTDaten.LastTime.Sekunde
NETWORK
TITLE = Ende
BE;
--- NW 4: Neue Position übergeben ---
L Position
L 0
==I
JC NoNewPos
CAC
T "TrolleyDL_OutDaten".OUTDaten.Standort
NoNewPos: NOP 0
--- NW 5: ShopGroup übergeben ? (bei 0 nichts ändern!) ---
L ShopGroup
L DINT#0
==D
JC NoShopGroup
CAC
T "TrolleyDL_OutDaten".OUTDaten.ShopGroup
NoShopGroup: NOP 0
--- NW 6: Daten schreiben ---
CALL FC "DatenIn" (SSDB:=Gesamt_Trolley_DL, SSDW:=0, INDATEN:=DB1011.DBX0.0, RE_VAL:="MB199")
--- NW 7: Ende ---
BE
END_FUNCTION
@@ -1,34 +1,45 @@
=== FC 1: Trolleydaten_löschen [STL] ===
INTERFACE:
Input:
Gesamt_Trolley_DL : Int
TrolleyID : DInt
Output:
InOut:
Temp:
Constant:
Return:
Ret_Val : Void
--- NW 1: GesamtTrolly-DL angegeben? ---
L Gesamt_Trolley_DL
L 0 // sinnvolle Angabe?
<=I // Nein!
BEC // Abbruch
FUNCTION "Trolleydaten_löschen" : Void
TITLE = Trolleydaten manipulieren (nur für Inbetriebnahme / zum Testen)
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
Gesamt_Trolley_DL : Int;
TrolleyID : DInt;
END_VAR
--- NW 2: Trolleydaten auslesen und verändern ---
// Trolleydaten manipulieren:
L TrolleyID
T "TrolleyDL_SearchDaten".SEARCHDaten.TrolleyID
BEGIN
NETWORK
TITLE = GesamtTrolly-DL angegeben?
L #Gesamt_Trolley_DL;
L 0;//sinnvolle Angabe?
<=I;//Nein!
BEB;//Abbruch
CALL FC "DatenOut" (SSDB:=Gesamt_Trolley_DL, SSDW:=0, PARA:=16#E100, SEARCHDATEN:=DB1012.DBX0.0, RE_VAL:="MB198", OUTDATEN:=DB1011.DBX0.0, Position:="MW200") // Eintrag lesen + austragen
NETWORK
TITLE = Trolleydaten auslesen und verändern
L "MB198"
//Trolleydaten manipulieren:
L #TrolleyID;
T "TrolleyDL_SearchDaten".SEARCHDaten.TrolleyID;
BEU
CALL "DatenOut"
( SSDB := #Gesamt_Trolley_DL ,
SSDW := 0 ,
PARA := 16#E100 , //Eintrag lesen + austragen
SEARCHDATEN := %DB1012.DBX0.0 ,
RE_VAL := "MB198" ,
OUTDATEN := %DB1011.DBX0.0 ,
Position := "MW200"
);
L "MB198";
--- NW 3: Ende ---
BE
BEA;
NETWORK
TITLE = Ende
BE;
END_FUNCTION
@@ -1,53 +1,67 @@
=== FC 3: Trolleydaten_neu_anlegen [STL] ===
INTERFACE:
Input:
Gesamt_Trolley_DL : Int
TrolleyID : DInt
Endziel : Word
ShopGroup : DInt
Output:
InOut:
Temp:
Lager_DB : Int
Lager_DW : Int
SSDW : Int
Position : Int
Constant:
Return:
Ret_Val : Void
FUNCTION "Trolleydaten_neu_anlegen" : Void
TITLE = Trolleydaten neu anlegen (nur für Inbetriebnahme / zum Testen)
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
Gesamt_Trolley_DL : Int;
TrolleyID : DInt;
Endziel : Word;
ShopGroup : DInt;
END_VAR
--- NW 1: GesamtTrolly-DL angegeben? ---
L Gesamt_Trolley_DL
L 0 // sinnvolle Angabe?
<=I // Nein!
BEC // Abbruch
VAR_TEMP
Lager_DB : Int;
Lager_DW : Int;
SSDW : Int;
Position : Int;
END_VAR
--- NW 2: Erst mal alte Daten löschen ---
CALL FC "Trolleydaten_löschen" (Gesamt_Trolley_DL:=Gesamt_Trolley_DL, TrolleyID:=TrolleyID)
BEGIN
NETWORK
TITLE = GesamtTrolly-DL angegeben?
L #Gesamt_Trolley_DL;
L 0;//sinnvolle Angabe?
<=I;//Nein!
BEB;//Abbruch
NETWORK
TITLE = Erst mal alte Daten löschen
CALL "Trolleydaten_löschen"
( Gesamt_Trolley_DL := #Gesamt_Trolley_DL ,
TrolleyID := #TrolleyID
);
--- NW 3: Trolleydaten speichern ---
// Trolleydaten manipulieren:
L TrolleyID
T "TrolleyDL_INDaten".INDaten.TrolleyID
NETWORK
TITLE = Trolleydaten speichern
L Endziel // Eingabe über Beobachtungstabelle (Tests)
T "TrolleyDL_INDaten".INDaten.EndZiel
L ShopGroup
T "TrolleyDL_INDaten".INDaten.ShopGroup
//Trolleydaten manipulieren:
L #TrolleyID;
T "TrolleyDL_INDaten".INDaten.TrolleyID;
// Rest nullen
L 0
T "TrolleyDL_INDaten".INDaten.ZwischenZiel
T "TrolleyDL_INDaten".INDaten.Standort
L #Endziel ;//Eingabe über Beobachtungstabelle (Tests)
T "TrolleyDL_INDaten".INDaten.EndZiel;
L #ShopGroup;
T "TrolleyDL_INDaten".INDaten.ShopGroup;
// Daten in Datenbank schreiben:
CALL FC "DatenIn" (SSDB:=Gesamt_Trolley_DL, SSDW:=0, INDATEN:=DB1010.DBX0.0, RE_VAL:="MB198")
//Rest nullen
L 0;
T "TrolleyDL_INDaten".INDaten.ZwischenZiel;
T "TrolleyDL_INDaten".INDaten.Standort;
L "TrolleyDL_INDaten".INDaten.TrolleyID
//Daten in Datenbank schreiben:
CALL "DatenIn"
( SSDB := #Gesamt_Trolley_DL ,
SSDW := 0 ,
INDATEN := %DB1010.DBX0.0 ,
RE_VAL := "MB198"
);
L "TrolleyDL_INDaten".INDaten.TrolleyID;
--- NW 4: Ende ---
BE
NETWORK
TITLE = Ende
BE;
END_FUNCTION
@@ -1,59 +1,75 @@
=== FC 2: Trolleydaten_ändern [STL] ===
INTERFACE:
Input:
Gesamt_Trolley_DL : Int
TrolleyID : DInt
Endziel : Word
ShopGroup : DInt
Output:
InOut:
Temp:
Constant:
Return:
Ret_Val : Void
--- NW 1: GesamtTrolly-DL angegeben? ---
L Gesamt_Trolley_DL
L 0 // sinnvolle Angabe?
<=I // Nein!
BEC // Abbruch
FUNCTION "Trolleydaten_ändern" : Void
TITLE = Trolleydaten manipulieren (nur für Inbetriebnahme / zum Testen)
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
Gesamt_Trolley_DL : Int;
TrolleyID : DInt;
Endziel : Word;
ShopGroup : DInt;
END_VAR
--- NW 2: Trolleydaten auslesen und verändern ---
// Trolleydaten manipulieren:
L TrolleyID
T "TrolleyDL_SearchDaten".SEARCHDaten.TrolleyID
BEGIN
NETWORK
TITLE = GesamtTrolly-DL angegeben?
L #Gesamt_Trolley_DL;
L 0;//sinnvolle Angabe?
<=I;//Nein!
BEB;//Abbruch
CALL FC "DatenOut" (SSDB:=Gesamt_Trolley_DL, SSDW:=0, PARA:=16#0000, SEARCHDATEN:=DB1012.DBX0.0, RE_VAL:="MB198", OUTDATEN:=DB1011.DBX0.0, Position:="MW200") // Eintrag lesen
NETWORK
TITLE = Trolleydaten auslesen und verändern
L "MB198"
L 2#10000000 // Datensatz vorhanden?
<>I // Nein!
BEC
//Trolleydaten manipulieren:
L #TrolleyID;
T "TrolleyDL_SearchDaten".SEARCHDaten.TrolleyID;
L "TrolleyDL_OutDaten".OUTDaten.TrolleyID // Zum Beobachten
CALL "DatenOut"
( SSDB := #Gesamt_Trolley_DL ,
SSDW := 0 ,
PARA := 16#0000 , //Eintrag lesen
SEARCHDATEN := %DB1012.DBX0.0 ,
RE_VAL := "MB198" ,
OUTDATEN := %DB1011.DBX0.0 ,
Position := "MW200"
);
L Endziel
L -1 // Keine Änderung ?
==I // Ja !
JC Variante // Nichts überschreiben
L "MB198";
L 2#10000000 ;//Datensatz vorhanden?
<>I;//Nein!
BEB;
CAC
T "TrolleyDL_OutDaten".OUTDaten.EndZiel
L "TrolleyDL_OutDaten".OUTDaten.TrolleyID;//Zum Beobachten
Variante: L ShopGroup
L DINT#-1 // Keine Änderung ?
==D // Ja !
JC Save // Nichts überschreiben
L #Endziel;
L -1 ;//Keine Änderung ?
==I ;//Ja !
SPB Variante ;//Nichts überschreiben
CAC
T "TrolleyDL_OutDaten".OUTDaten.ShopGroup
TAK;
T "TrolleyDL_OutDaten".OUTDaten.EndZiel;
Save: CALL FC "DatenIn" (SSDB:=Gesamt_Trolley_DL, SSDW:=0, INDATEN:=DB1011.DBX0.0, RE_VAL:="MB198")
Variante: L #ShopGroup;
L DINT#-1 ;//Keine Änderung ?
==D ;//Ja !
SPB Save ;//Nichts überschreiben
BEU
TAK;
T "TrolleyDL_OutDaten".OUTDaten.ShopGroup;
Save: CALL "DatenIn"
( SSDB := #Gesamt_Trolley_DL ,
SSDW := 0 ,
INDATEN := %DB1011.DBX0.0 ,
RE_VAL := "MB198"
);
--- NW 3: Ende ---
BE
BEA;
NETWORK
TITLE = Ende
BE;
END_FUNCTION
@@ -1,19 +1,18 @@
=== FC 1000: Wandel_FC_für_DB1000 [STL] ===
INTERFACE:
Input:
Output:
InOut:
Temp:
Constant:
Return:
Ret_Val : Void
FUNCTION "Wandel_FC_für_DB1000" : Void
TITLE = Wandel-FC für indizierte Speicherung der DB1000-Daten
{ S7_Optimized_Access := 'FALSE' ; S7_Pass_Registers := 'TRUE' }
VERSION : 0.1
--- NW 1: Wandeln der Daten ---
L "MD94"
+ DINT#-6040000 // Funktioniert bis max: 6072767 (Wert + 32767)
T "MW92" // Funktioniert bis max: 32767, danach negativ
BEGIN
NETWORK
TITLE = Wandeln der Daten
L "MD94";
+ DINT#-6040000 ;//Funktioniert bis max: 6072767 (Wert + 32767)
T "MW92" ;//Funktioniert bis max: 32767, danach negativ
NETWORK
TITLE = Ende
BE;
--- NW 2: Ende ---
BE
END_FUNCTION
@@ -1,87 +1,97 @@
=== FC 78: BCD (4stellig)_to_INT [STL] ===
INTERFACE:
Input:
BCD_Wert : Word
Output:
Int_Wert : Int
InOut:
Temp:
BCD_Vergleich : Word
Multiplikator : Int
Constant:
Return:
Ret_Val : Void
FUNCTION "BCD (4stellig)_to_INT" : Void
TITLE = BCD-Wert (2-Stellig) in INT-Wert wandeln (Max 00FF)
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
//
//
VAR_INPUT
BCD_Wert : Word;
END_VAR
--- NW 1: Rückmeldung ---
L 0 // erst mal köschen
T Int_Wert
VAR_OUTPUT
Int_Wert : Int;
END_VAR
L 1
T Multiplikator
--- NW 2: BCD-Wert wandeln ---
L BCD_Wert
T BCD_Vergleich
L 16#000F
AW
L Multiplikator
*I
L Int_Wert
+I
T Int_Wert
L Multiplikator
L 16
*I
T Multiplikator
L BCD_Vergleich
SRW 4
T BCD_Vergleich
L 16#000F
AW
L Multiplikator
*I
L Int_Wert
+I
T Int_Wert
L Multiplikator
L 16
*I
T Multiplikator
L BCD_Vergleich
SRW 4
T BCD_Vergleich
L 16#000F
AW
L Multiplikator
*I
L Int_Wert
+I
T Int_Wert
L Multiplikator
L 16
*I
T Multiplikator
L BCD_Vergleich
SRW 4
T BCD_Vergleich
L 16#000F
AW
L Multiplikator
*I
L Int_Wert
+I
T Int_Wert
VAR_TEMP
BCD_Vergleich : Word;
Multiplikator : Int;
END_VAR
--- NW 3: Ende ---
BE
BEGIN
NETWORK
TITLE = Rückmeldung
L 0;//erst mal köschen
T #Int_Wert;
L 1;
T #Multiplikator;
NETWORK
TITLE = BCD-Wert wandeln
L #BCD_Wert;
T #BCD_Vergleich;
L 16#000F;
UW;
L #Multiplikator;
*I;
L #Int_Wert;
+I;
T #Int_Wert;
L #Multiplikator;
L 16;
*I;
T #Multiplikator;
L #BCD_Vergleich;
SRW 4;
T #BCD_Vergleich;
L 16#000F;
UW;
L #Multiplikator;
*I;
L #Int_Wert;
+I;
T #Int_Wert;
L #Multiplikator;
L 16;
*I;
T #Multiplikator;
L #BCD_Vergleich;
SRW 4;
T #BCD_Vergleich;
L 16#000F;
UW;
L #Multiplikator;
*I;
L #Int_Wert;
+I;
T #Int_Wert;
L #Multiplikator;
L 16;
*I;
T #Multiplikator;
L #BCD_Vergleich;
SRW 4;
T #BCD_Vergleich;
L 16#000F;
UW;
L #Multiplikator;
*I;
L #Int_Wert;
+I;
T #Int_Wert;
NETWORK
TITLE = Ende
BE;
END_FUNCTION
@@ -1,50 +1,72 @@
=== FC 99: DBMOV [STL] ===
INTERFACE:
Input:
QuellDB : Int // Quell-DB
QuellDW : Int // Quell-1.DW
ZielDB : Int // Ziel-DB
ZielDW : Int // Ziel-1.DW
Anzahl_DW : Int // Anzahl der zu kopierenden DWs
Output:
RE_VAL : Int // Rückmeldung
InOut:
Temp:
Quelle : Any // Zeiger, wo Rein-Daten sind
Ziel : Any // Zeiger, FIFO-Stelle
Constant:
Return:
Ret_Val : Void
FUNCTION "DBMOV" : Void
TITLE = DB-Bereiche kopieren
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : IBAE
FAMILY : FIFO
NAME : FifoIn
VERSION : 0.1
//COPYRIGHT by Ingenieurbüro A.Emmert
//Ortsstr.33, D-869925 Fuchstal (Germany)
//Tel.: 0049(0)8243-1254
//Version: H&M / 06.12.2025
//
VAR_INPUT
QuellDB : Int; // Quell-DB
QuellDW : Int; // Quell-1.DW
ZielDB : Int; // Ziel-DB
ZielDW : Int; // Ziel-1.DW
Anzahl_DW : Int; // Anzahl der zu kopierenden DWs
END_VAR
--- NW 1: ---
// Kennung + Datenbytes
L 16#1004 // Kennung 10 + Word=04
T LW0
T LW10 // Any-Kennung, Datentyp
L Anzahl_DW // Datenwords speichern
T LW2
T LW12 // Wiederholungen
VAR_OUTPUT
RE_VAL : Int; // Rückmeldung
END_VAR
// Quelle-Pointer erzeugen:
L QuellDB
T LW4 // DB_Nummer
L QuellDW // Adresse
SLD 3
L 16#8400_0000 // Kennung: Daten
OD
T LD6 // Kennung, Adresse
// Ziel-Pointer erzeugen:
L ZielDB
T LW14 // DB_Nummer
L ZielDW // Adresse
SLD 3
L 16#8400_0000 // Kennung: Daten
OD
T LD16 // Kennung, Adresse
CALL SYS "BLKMOV" (SRCBLK:=Quelle, RET_VAL:=RE_VAL, DSTBLK:=Ziel) // Datenliste-Daten speichern
VAR_TEMP
Quelle : Any; // Zeiger, wo Rein-Daten sind
Ziel : Any; // Zeiger, FIFO-Stelle
END_VAR
--- NW 2: Ende ---
BE
BEGIN
NETWORK
TITLE =
//Kennung + Datenbytes
L 16#1004 ;//Kennung 10 + Word=04
T %LW0;
T %LW10;//Any-Kennung, Datentyp
L #Anzahl_DW ;//Datenwords speichern
T %LW2;
T %LW12;//Wiederholungen
//Quelle-Pointer erzeugen:
L #QuellDB;
T %LW4;//DB_Nummer
L #QuellDW ;//Adresse
SLD 3;
L 16#8400_0000;//Kennung: Daten
OD;
T %LD6;//Kennung, Adresse
//Ziel-Pointer erzeugen:
L #ZielDB;
T %LW14;//DB_Nummer
L #ZielDW ;//Adresse
SLD 3;
L 16#8400_0000;//Kennung: Daten
OD;
T %LD16;//Kennung, Adresse
CALL BLKMOV//Datenliste-Daten speichern
{blk_type := 'Variant'}
( SRCBLK := #Quelle ,
RET_VAL := #RE_VAL ,
DSTBLK := #Ziel
);
NETWORK
TITLE = Ende
BE;
END_FUNCTION
@@ -1,55 +1,68 @@
=== FC 1004: DL_Einsprung [STL] ===
INTERFACE:
Input:
Bereich_DL : Int // Nur für Stammdaten =1!
ID : Int
Output:
Dyn.DB : Int
AR_Start : DInt
Error : Bool
InOut:
Temp:
Constant:
Return:
Ret_Val : Void
FUNCTION "DL_Einsprung" : Void
TITLE = Bereich-DL: Einsprungs-DW ermitteln
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
Bereich_DL : Int; // Nur für Stammdaten =1!
ID : Int;
END_VAR
--- NW 1: Inittialisierung ---
L 0
T "Dyn.DB"
L DINT#0
T AR_Start
SET
S Error
VAR_OUTPUT
"Dyn.DB" : Int;
AR_Start : DInt;
Error : Bool;
END_VAR
--- NW 2: ID suchen ---
L ID
T "MW200"
BEGIN
NETWORK
TITLE = Inittialisierung
L 0;
T #"Dyn.DB";
L DINT#0;
T #AR_Start;
SET;
S #Error;
CALL FC "DatenOut" (SSDB:=Bereich_DL, SSDW:=0, PARA:=16#0000, SEARCHDATEN:=P#M200.0, RE_VAL:="MB199", OUTDATEN:=P#M220.0, Position:="MW196") // Eintrag lesen
NETWORK
TITLE = ID suchen
L #ID;
T "MW200";
L "MB199"
L 2#1111111 // Bit 7 ausblenden
AW
L 0 // Fehler vorhanden?
<>I // Ja
= Error
BEC
CALL "DatenOut"
( SSDB := #Bereich_DL ,
SSDW := 0 ,
PARA := 16#0000 , //Eintrag lesen
SEARCHDATEN := P#M200.0 ,
RE_VAL := "MB199" ,
OUTDATEN := P#M220.0 ,
Position := "MW196"
);
L "MB199";
L 2#1111111 ;//Bit 7 ausblenden
UW;
L 0;//Fehler vorhanden?
<>I;//Ja
= #Error;
BEB;
--- NW 3: Daten übergeben ---
L "MW224"
T "Dyn.DB" // Dyn.DB
L 0 // sinnvoller Wert ?
<=I // Nein !
S Error
BEC
NETWORK
TITLE = Daten übergeben
L "MW224";
T #"Dyn.DB" ;//Dyn.DB
L 0;//sinnvoller Wert ?
<=I;//Nein !
S #Error;
BEB;
L "MW226"
ITD
T AR_Start
L "MW226";
ITD;
T #AR_Start;
NETWORK
TITLE = Ende
BE;
--- NW 4: Ende ---
BE
END_FUNCTION
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,234 +1,286 @@
=== FC 87: DatenReset [STL] ===
INTERFACE:
Input:
SSDB : Int // Datenlisten-DB
SSDW : Int // Datenlisten-1.DW
Output:
RE_VAL : Byte // Rückmeldung
InOut:
Temp:
Quelle : Any // Zeiger, wo Rein-Daten sind
Ziel : Any // Zeiger, FIFO-Stelle
Kopf : Byte // Datenliste-Kennnung (DA)
Datensatzlaenge : Byte // Datensatzlänge in Word (01 - F0) F0=128
Listenlaenge : Int // Länge der Datenliste (maximale Anzahl der Datensätze)
Stammdaten : Int // Stammdatenlänge in Word (1 - 9)
IndDB : Word // Indizierter DB (nur bei Stammdaten = 1 erlaubt !!!)
IndDB_Laenge : Int // Länge des indizierten DB in Einträge (nur bei Stammdaten = 1 erlaubt !!!)
IndDaten_FC : Int // FC zum Wandeln der indizierte Daten (nur bei Stammdaten = 1 erlaubt !!!)
Suchzeiger : Int // Speicherung des letzten Zugriffs / Suchzeiger
Belegt14 : Int // reserviert von Sort-Datenliste
Reserve16 : Int // Reserve
Reserve18 : Int // Reserve
DBDatenliste : Word // Datenlisten-DB
SFC_RET_VAL : Int // Rückmeldung SFC-Aufruf
SFC_DB_LENGTH : Word // Rückmeldung SFC-Aufruf
Datenlisten_Ende : Word // Ende der Datenliste
Schleife : Word // Loopzähler
SFC_WRITE_PROT : Bool // Rückmeldung SFC-Aufruf
AR1Zeiger : DWord // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
DB_Länge : Int
Constant:
Return:
Ret_Val : Void
FUNCTION "DatenReset" : Void
TITLE = Datenlisten-Modul
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : IBAE
FAMILY : DLISTE
NAME : DatenIn
VERSION : 0.1
//COPYRIGHT by Ingenieurbüro A.Emmert
//Ortsstr.33, D-869925 Fuchstal (Germany)
//Tel.: 0049(0)8243-1254
//Version: P&O / 10.2024
//Version: ILS2100 / 06.11.2009
//
//Datenblock in Datenliste resetten
//SSDB: Datenlisten-DB
//SSDW: Datenlisten-1.DW
//RE_VAL: Rückmeldungen:
// Bit0: Kein Datenlistenbereich / falscher Kopfinhalt / Endekennung
// Bit1: SFC20-Aufruf mit Fehler
// Bit2: Frei
// Bit3: Frei
// Bit4: Frei
// Bit5: Frei
// Bit6: Frei
// Bit7: Frei
//
VAR_INPUT
SSDB : Int; // Datenlisten-DB
SSDW : Int; // Datenlisten-1.DW
END_VAR
--- NW 1: Schnittstellen-DB sinnvoll ? ---
L SSDB
T DBDatenliste
VAR_OUTPUT
RE_VAL : Byte; // Rückmeldung
END_VAR
CALL FC "TEST_DB_TO_ATTR_DB" (DB_Number:=DBDatenliste, RetVal:=SFC_RET_VAL, DB_Length:=SFC_DB_LENGTH, Write_Prot:=SFC_WRITE_PROT)
CALL FC "BCD (4stellig)_to_INT" (BCD_Wert:=SFC_DB_LENGTH, Int_Wert:="DB_Länge")
L SFC_RET_VAL
L 2#0000_0000_0000_0000
<>I
O SFC_WRITE_PROT
JC Err0 // kein Datenlisten-Bereich
VAR_TEMP
Quelle : Any; // Zeiger, wo Rein-Daten sind
Ziel : Any; // Zeiger, FIFO-Stelle
Kopf : Byte; // Datenliste-Kennnung (DA)
Datensatzlaenge : Byte; // Datensatzlänge in Word (01 - F0) F0=128
Listenlaenge : Int; // Länge der Datenliste (maximale Anzahl der Datensätze)
Stammdaten : Int; // Stammdatenlänge in Word (1 - 9)
IndDB : Word; // Indizierter DB (nur bei Stammdaten = 1 erlaubt !!!)
IndDB_Laenge : Int; // Länge des indizierten DB in Einträge (nur bei Stammdaten = 1 erlaubt !!!)
IndDaten_FC : Int; // FC zum Wandeln der indizierte Daten (nur bei Stammdaten = 1 erlaubt !!!)
Suchzeiger : Int; // Speicherung des letzten Zugriffs / Suchzeiger
Belegt14 : Int; // reserviert von Sort-Datenliste
Reserve16 : Int; // Reserve
Reserve18 : Int; // Reserve
DBDatenliste : Word; // Datenlisten-DB
SFC_RET_VAL : Int; // Rückmeldung SFC-Aufruf
SFC_DB_LENGTH : Word; // Rückmeldung SFC-Aufruf
Datenlisten_Ende : Word; // Ende der Datenliste
Schleife : Word; // Loopzähler
SFC_WRITE_PROT : Bool; // Rückmeldung SFC-Aufruf
AR1Zeiger : DWord; // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
DB_Länge : Int;
END_VAR
--- NW 2: Quelle-Pointer erzeugen: ---
L 16#1004 // Kennung 10 + Word=04
T LW0 // Any-Kennung, Datentyp
L 16#000A // 10 Dw´s holen
T LW2 // Wiederholungen
L SSDB
T LW4 // DB_Nummer
L SSDW // Adresse
SLD 3
L 16#8400_0000 // Kennung: Daten
OD
T LD6 // Kennung, Adresse
BEGIN
NETWORK
TITLE = Schnittstellen-DB sinnvoll ?
L #SSDB;
T #DBDatenliste;
CALL SYS "BLKMOV" (SRCBLK:=Quelle, RET_VAL:=SFC_RET_VAL, DSTBLK:=P#L20.0 WORD 10) // 1.-10.DW Datenliste holen
CALL "TEST_DB_TO_ATTR_DB"
( DB_Number := #DBDatenliste ,
RetVal := #SFC_RET_VAL ,
DB_Length := #SFC_DB_LENGTH ,
Write_Prot := #SFC_WRITE_PROT
);
L SFC_RET_VAL
L 2#0000_0000_0000_0000
<>I
JC Err1
CALL "BCD (4stellig)_to_INT"
( BCD_Wert := #SFC_DB_LENGTH ,
Int_Wert := #DB_Länge
);
L #SFC_RET_VAL;
L 2#0000_0000_0000_0000;
<>I;
O #SFC_WRITE_PROT;
SPB Err0;//kein Datenlisten-Bereich
NETWORK
TITLE = Datenlistekopf holen
//Quelle-Pointer erzeugen:
L 16#1004;//Kennung 10 + Word=04
T %LW0;//Any-Kennung, Datentyp
L 16#000A;//10 Dw´s holen
T %LW2;//Wiederholungen
L #SSDB;
T %LW4;//DB_Nummer
L #SSDW;//Adresse
SLD 3;
L 16#8400_0000;//Kennung: Daten
OD;
T %LD6;//Kennung, Adresse
CALL BLKMOV//1.-10.DW Datenliste holen
{blk_type := 'Variant'}
( SRCBLK := #Quelle ,
RET_VAL := #SFC_RET_VAL ,
DSTBLK := P#L20.0 WORD 10
);
L #SFC_RET_VAL;
L 2#0000_0000_0000_0000;
<>I;
SPB Err1;
NETWORK
TITLE = Zeigerüberprüfung
L #Kopf;//Datenliste-Kopf
L 16#DA;//= Datenlistekennung ?
<>I;//Nein !
SPB Err0;//kein Datenlistebereich
L 1;
L #Datensatzlaenge;//Datenblocklänge
>I;
SPB Err0;//kein Datenlistebereich
L 128;
>I;
SPB Err0;//kein Datenlistebereich
L 1;
L #Listenlaenge;//Max.Anzahl von Datenblöcken
>I;
SPB Err0;//kein Datenlistebereich
L 1;
L #Stammdaten;//Anzahl der Stammdaten
>I;
SPB Err0;//kein Datenlistebereich
L 9;
>I;
SPB Err0;//kein Datenlistebereich
L #Stammdaten;//Anzahl der Stammdaten
L #Datensatzlaenge;//Datenblocklänge
>I;
SPB Err0;//kein Datenlistebereich
L #Listenlaenge;//Länge der Datenliste
L #Datensatzlaenge;//Datenblocklänge
*I;
L 2;//DB byteorientiert
*I;
+ 20;//Speichern ab 10.DW
L #SSDW;
+I;
T #Datenlisten_Ende;
ITD;
SLD 3;
T #AR1Zeiger;///Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
AUF DB[ #DBDatenliste];
L #Datenlisten_Ende;
L #DB_Länge;
>I ;//Datenlisten-DB ist zu kurz!
SPB Err0;//kein Datenlisten-Bereich
L DBW[ #AR1Zeiger];
L 16#DAEE;//Datenliste-Endekennung ?
<>I;//Nein !
SPB Err0;//kein Datenlisten-Bereich
NETWORK
TITLE = Indizierung löschen ?
L #IndDB;//Indizierter DB
L 0;//=0 ?
==I;//Kein indizierter DB !
SPB Nw05;
CALL "TEST_DB_TO_ATTR_DB"
( DB_Number := #IndDB ,
RetVal := #SFC_RET_VAL ,
DB_Length := #SFC_DB_LENGTH ,
Write_Prot := #SFC_WRITE_PROT
);
CALL "BCD (4stellig)_to_INT"
( BCD_Wert := #SFC_DB_LENGTH ,
Int_Wert := #DB_Länge
);
L #SFC_RET_VAL;
L 2#0000_0000_0000_0000;
<>I;
O #SFC_WRITE_PROT;
SPB Nw05;//kein Indizier-DB vorhanden
L 0;
ITD;
SLD 3;
T #AR1Zeiger;///Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
AUF DB[ #IndDB];
L #DB_Länge ;//In Bytes angegeben
L400: T #Schleife;
L 0;
T DBB[ #AR1Zeiger] ;//Inhalte löschen
L #AR1Zeiger;
SRD 3;
L DINT#1;
+D;
SLD 3;
T #AR1Zeiger;
L #Schleife;
LOOP L400;
--- NW 3: Zeigerüberprüfung ---
L Kopf // Datenliste-Kopf
L 16#DA // = Datenlistekennung ?
<>I // Nein !
JC Err0 // kein Datenlistebereich
NETWORK
TITLE = Datenliste löschen
Nw05: L #SSDW;
+ 12 ;//12.Dw
ITD;
SLD 3;
T #AR1Zeiger;///Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
L 1
L Datensatzlaenge // Datenblocklänge
>I
JC Err0 // kein Datenlistebereich
AUF DB[ #DBDatenliste];
L 128
>I
JC Err0 // kein Datenlistebereich
L 0;
T DBW[ #AR1Zeiger] ;//Letzte Speicherung löschen
L 1
L Listenlaenge // Max.Anzahl von Datenblöcken
>I
JC Err0 // kein Datenlistebereich
L #SSDW;
+ 16 ;//16.Dw
ITD;
SLD 3;
T #AR1Zeiger;///Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
L 1
L Stammdaten // Anzahl der Stammdaten
>I
JC Err0 // kein Datenlistebereich
AUF DB[ #DBDatenliste];
L 9
>I
JC Err0 // kein Datenlistebereich
L 0;
T DBW[ #AR1Zeiger] ;//Anzahl Einträge löschen
L Stammdaten // Anzahl der Stammdaten
L Datensatzlaenge // Datenblocklänge
>I
JC Err0 // kein Datenlistebereich
L #SSDW;
+ 20 ;//Daten ab 20.Dw
ITD;
SLD 3;
T #AR1Zeiger;///Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
L Listenlaenge // Länge der Datenliste
L Datensatzlaenge // Datenblocklänge
*I
L 2 // DB byteorientiert
*I
+ 20 // Speichern ab 10.DW
L SSDW
+I
T Datenlisten_Ende
ITD
SLD 3
T AR1Zeiger // /Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
L #Datensatzlaenge;
L #Listenlaenge;
*I;
L500: T #Schleife;
OPN DB[DBDatenliste]
AUF DB[ #DBDatenliste];
L Datenlisten_Ende
L "DB_Länge"
>I // Datenlisten-DB ist zu kurz!
JC Err0 // kein Datenlisten-Bereich
L 0;
T DBW[ #AR1Zeiger] ;//Inhalte löschen
L DBW [AR1Zeiger]
L 16#DAEE // Datenliste-Endekennung ?
<>I // Nein !
JC Err0 // kein Datenlisten-Bereich
L #AR1Zeiger;
SRD 3;
L DINT#2;
+D;
SLD 3;
T #AR1Zeiger;
L #Schleife;
LOOP L500;
--- NW 4: Indizierung löschen ? ---
L IndDB // Indizierter DB
L 0 // =0 ?
==I // Kein indizierter DB !
JC Nw05
NETWORK
TITLE = Fehlerausgabe / RET_VAL
SET;//VKE = 1 ohne Fehler !!!
SPA Ok;
Err0: L 2#0000_0000_0000_0001;//Kein Fifobereich
SPA Err;
Err1: L 2#0000_0000_0000_0010;//SFC20-Aufruf mit Fehler
CALL FC "TEST_DB_TO_ATTR_DB" (DB_Number:=IndDB, RetVal:=SFC_RET_VAL, DB_Length:=SFC_DB_LENGTH, Write_Prot:=SFC_WRITE_PROT)
Err: CLR;//VKE = 0 bei Fehler !!!
Ok: T #RE_VAL;
CALL FC "BCD (4stellig)_to_INT" (BCD_Wert:=SFC_DB_LENGTH, Int_Wert:="DB_Länge")
SAVE;//VKE in BIE-Bit speichern
L SFC_RET_VAL
L 2#0000_0000_0000_0000
<>I
O SFC_WRITE_PROT
JC Nw05 // kein Indizier-DB vorhanden
L 0
ITD
SLD 3
T AR1Zeiger // /Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
OPN DB[IndDB]
L "DB_Länge" // In Bytes angegeben
L400: T Schleife
L 0
T DBB [AR1Zeiger] // Inhalte löschen
L AR1Zeiger
SRD 3
L DINT#1
+D
SLD 3
T AR1Zeiger
L Schleife
LOOP L400
--- NW 5: Datenliste löschen ---
Nw05: L SSDW
+ 12 // 12.Dw
ITD
SLD 3
T AR1Zeiger // /Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
OPN DB[DBDatenliste]
L 0
T DBW [AR1Zeiger] // Letzte Speicherung löschen
L SSDW
+ 16 // 16.Dw
ITD
SLD 3
T AR1Zeiger // /Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
OPN DB[DBDatenliste]
L 0
T DBW [AR1Zeiger] // Anzahl Einträge löschen
L SSDW
+ 20 // Daten ab 20.Dw
ITD
SLD 3
T AR1Zeiger // /Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
L Datensatzlaenge
L Listenlaenge
*I
L500: T Schleife
OPN DB[DBDatenliste]
L 0
T DBW [AR1Zeiger] // Inhalte löschen
L AR1Zeiger
SRD 3
L DINT#2
+D
SLD 3
T AR1Zeiger
L Schleife
LOOP L500
--- NW 6: Fehlerausgabe / RET_VAL ---
SET // VKE = 1 ohne Fehler !!!
JU Ok
Err0: L 2#0000_0000_0000_0001 // Kein Fifobereich
JU Err
Err1: L 2#0000_0000_0000_0010 // SFC20-Aufruf mit Fehler
Err: CLR // VKE = 0 bei Fehler !!!
Ok: T RE_VAL
SAVE // VKE in BIE-Bit speichern
END_FUNCTION
@@ -1,183 +1,223 @@
=== FC 90: DatenResetSort [STL] ===
INTERFACE:
Input:
SSDB : Int // Datenlisten-DB
SSDW : Int // Datenlisten-1.DW
Output:
RE_VAL : Byte // Rückmeldung
InOut:
Temp:
Quelle : Any // Zeiger, wo Rein-Daten sind
Ziel : Any // Zeiger, FIFO-Stelle
Kopf : Byte // Datenliste-Kennnung (DA)
Datensatzlaenge : Byte // Datensatzlänge in Word (01 - F0) F0=128
Listenlaenge : Int // Länge der Datenliste (maximale Anzahl der Datensätze)
Stammdaten : Int // Stammdatenlänge in Word (1 - 9)
Belegt06 : Int // reserviert von Datenliste
Belegt08 : Int // reserviert von Datenliste
Belegt10 : Int // reserviert von Datenliste
Belegt12 : Int // reserviert von Datenliste
AnzahlEintraege : Int // Anzahl der eingetragenen Datensätze
Reserve16 : Int // Reserve
Reserve18 : Int // Reserve
Suchzeiger : Int // Speicherung des letzten Zugriffs / Suchzeiger
DBDatenliste : Word // Datenlisten-DB
SFC_RET_VAL : Int // Rückmeldung SFC-Aufruf
SFC_DB_LENGTH : Word // Rückmeldung SFC-Aufruf
Datenlisten_Ende : Word // Ende der Datenliste
Schleife : Word // Loopzähler
SFC_WRITE_PROT : Bool // Rückmeldung SFC-Aufruf
AR1Zeiger : DWord // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
Constant:
Return:
Ret_Val : Void
FUNCTION "DatenResetSort" : Void
TITLE = Datenlisten-Modul
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : IBAE
FAMILY : DLISTE
NAME : DatenIn
VERSION : 0.1
//COPYRIGHT by Ingenieurbüro A.Emmert
//Ortsstr.33, D-869925 Fuchstal (Germany)
//Tel.: 0049(0)8243-1254
//Version: ILS2100 / 06.11.2009
//
//Datenblock in Datenliste resetten
//SSDB: Datenlisten-DB
//SSDW: Datenlisten-1.DW
//RE_VAL: Rückmeldungen:
// Bit0: Kein Datenlistenbereich / falscher Kopfinhalt / Endekennung
// Bit1: SFC20-Aufruf mit Fehler
// Bit2: Frei
// Bit3: Frei
// Bit4: Frei
// Bit5: Frei
// Bit6: Frei
// Bit7: Frei
//
VAR_INPUT
SSDB : Int; // Datenlisten-DB
SSDW : Int; // Datenlisten-1.DW
END_VAR
--- NW 1: Schnittstellen-DB sinnvoll ? ---
L SSDB
T DBDatenliste
VAR_OUTPUT
RE_VAL : Byte; // Rückmeldung
END_VAR
// CALL TEST_DB
// DB_NUMBER :=#DBDatenliste
// RET_VAL :=#SFC_RET_VAL
// DB_LENGTH :=#SFC_DB_LENGTH
// WRITE_PROT :=#SFC_WRITE_PROT
CALL FC "TEST_DB_TO_ATTR_DB" (DB_Number:=DBDatenliste, RetVal:=SFC_RET_VAL, DB_Length:=SFC_DB_LENGTH, Write_Prot:=SFC_WRITE_PROT)
L SFC_RET_VAL
L 2#0000_0000_0000_0000
<>I
O SFC_WRITE_PROT
JC Err0 // kein Datenlisten-Bereich
VAR_TEMP
Quelle : Any; // Zeiger, wo Rein-Daten sind
Ziel : Any; // Zeiger, FIFO-Stelle
Kopf : Byte; // Datenliste-Kennnung (DA)
Datensatzlaenge : Byte; // Datensatzlänge in Word (01 - F0) F0=128
Listenlaenge : Int; // Länge der Datenliste (maximale Anzahl der Datensätze)
Stammdaten : Int; // Stammdatenlänge in Word (1 - 9)
Belegt06 : Int; // reserviert von Datenliste
Belegt08 : Int; // reserviert von Datenliste
Belegt10 : Int; // reserviert von Datenliste
Belegt12 : Int; // reserviert von Datenliste
AnzahlEintraege : Int; // Anzahl der eingetragenen Datensätze
Reserve16 : Int; // Reserve
Reserve18 : Int; // Reserve
Suchzeiger : Int; // Speicherung des letzten Zugriffs / Suchzeiger
DBDatenliste : Word; // Datenlisten-DB
SFC_RET_VAL : Int; // Rückmeldung SFC-Aufruf
SFC_DB_LENGTH : Word; // Rückmeldung SFC-Aufruf
Datenlisten_Ende : Word; // Ende der Datenliste
Schleife : Word; // Loopzähler
SFC_WRITE_PROT : Bool; // Rückmeldung SFC-Aufruf
AR1Zeiger : DWord; // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
END_VAR
--- NW 2: Quelle-Pointer erzeugen: ---
L 16#1004 // Kennung 10 + Word=04
T LW0 // Any-Kennung, Datentyp
L 16#000A // 10 Dw´s holen
T LW2 // Wiederholungen
L SSDB
T LW4 // DB_Nummer
L SSDW // Adresse
SLD 3
L 16#8400_0000 // Kennung: Daten
OD
T LD6 // Kennung, Adresse
BEGIN
NETWORK
TITLE = Schnittstellen-DB sinnvoll ?
L #SSDB;
T #DBDatenliste;
CALL SYS "BLKMOV" (SRCBLK:=Quelle, RET_VAL:=SFC_RET_VAL, DSTBLK:=P#L20.0 WORD 10) // 1.-10.DW Datenliste holen
// CALL TEST_DB
// DB_NUMBER :=#DBDatenliste
// RET_VAL :=#SFC_RET_VAL
// DB_LENGTH :=#SFC_DB_LENGTH
// WRITE_PROT :=#SFC_WRITE_PROT
L SFC_RET_VAL
L 2#0000_0000_0000_0000
<>I
JC Err1
CALL "TEST_DB_TO_ATTR_DB"
( DB_Number := #DBDatenliste ,
RetVal := #SFC_RET_VAL ,
DB_Length := #SFC_DB_LENGTH ,
Write_Prot := #SFC_WRITE_PROT
);
L #SFC_RET_VAL;
L 2#0000_0000_0000_0000;
<>I;
O #SFC_WRITE_PROT;
SPB Err0;//kein Datenlisten-Bereich
--- NW 3: Zeigerüberprüfung ---
L Kopf // Datenliste-Kopf
L 16#DB // = DatenSortlistekennung ?
<>I // Nein !
JC Err0 // kein Datenlistebereich
NETWORK
TITLE = Datenlistekopf holen
//Quelle-Pointer erzeugen:
L 16#1004;//Kennung 10 + Word=04
T %LW0;//Any-Kennung, Datentyp
L 16#000A;//10 Dw´s holen
T %LW2;//Wiederholungen
L #SSDB;
T %LW4;//DB_Nummer
L #SSDW;//Adresse
SLD 3;
L 16#8400_0000;//Kennung: Daten
OD;
T %LD6;//Kennung, Adresse
L 1
L Datensatzlaenge // Datenblocklänge
>I
JC Err0 // kein Datenlistebereich
CALL BLKMOV//1.-10.DW Datenliste holen
{blk_type := 'Variant'}
( SRCBLK := #Quelle ,
RET_VAL := #SFC_RET_VAL ,
DSTBLK := P#L20.0 WORD 10
);
L 128
>I
JC Err0 // kein Datenlistebereich
L #SFC_RET_VAL;
L 2#0000_0000_0000_0000;
<>I;
SPB Err1;
L 1
L Listenlaenge // Max.Anzahl von Datenblöcken
>I
JC Err0 // kein Datenlistebereich
NETWORK
TITLE = Zeigerüberprüfung
L #Kopf;//Datenliste-Kopf
L 16#DB;//= DatenSortlistekennung ?
<>I;//Nein !
SPB Err0;//kein Datenlistebereich
L 1
L Stammdaten // Anzahl der Stammdaten
>I
JC Err0 // kein Datenlistebereich
L 1;
L #Datensatzlaenge;//Datenblocklänge
>I;
SPB Err0;//kein Datenlistebereich
L 9
>I
JC Err0 // kein Datenlistebereich
L 128;
>I;
SPB Err0;//kein Datenlistebereich
L Stammdaten // Anzahl der Stammdaten
L Datensatzlaenge // Datenblocklänge
>I
JC Err0 // kein Datenlistebereich
L 1;
L #Listenlaenge;//Max.Anzahl von Datenblöcken
>I;
SPB Err0;//kein Datenlistebereich
L Listenlaenge // Länge der Datenliste
L Datensatzlaenge // Datenblocklänge
*I
L 2 // DB byteorientiert
*I
+ 20 // Speichern ab 10.DW
L SSDW
+I
T Datenlisten_Ende
ITD
SLD 3
T AR1Zeiger // /Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
L 1;
L #Stammdaten;//Anzahl der Stammdaten
>I;
SPB Err0;//kein Datenlistebereich
OPN DB[DBDatenliste]
L 9;
>I;
SPB Err0;//kein Datenlistebereich
L Datenlisten_Ende
L SFC_DB_LENGTH
>I // Datenlisten-DB ist zu kurz!
JC Err0 // kein Datenlisten-Bereich
L #Stammdaten;//Anzahl der Stammdaten
L #Datensatzlaenge;//Datenblocklänge
>I;
SPB Err0;//kein Datenlistebereich
L DBW [AR1Zeiger]
L 16#DBEE // DatenSortliste-Endekennung ?
<>I // Nein !
JC Err0 // kein Datenlisten-Bereich
L #Listenlaenge;//Länge der Datenliste
L #Datensatzlaenge;//Datenblocklänge
*I;
L 2;//DB byteorientiert
*I;
+ 20;//Speichern ab 10.DW
L #SSDW;
+I;
T #Datenlisten_Ende;
ITD;
SLD 3;
T #AR1Zeiger;///Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
AUF DB[ #DBDatenliste];
--- NW 4: Datenliste löschen ---
L SSDW
+ 14 // 14.Dw
ITD
SLD 3
T AR1Zeiger // /Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
L #Datenlisten_Ende;
L #SFC_DB_LENGTH;
>I;//Datenlisten-DB ist zu kurz!
SPB Err0;//kein Datenlisten-Bereich
OPN DB[DBDatenliste]
L DBW[ #AR1Zeiger];
L 16#DBEE;//DatenSortliste-Endekennung ?
<>I;//Nein !
SPB Err0;//kein Datenlisten-Bereich
L 0
T DBW [AR1Zeiger] // Anzahl Einträge löschen
NETWORK
TITLE = Datenliste löschen
L #SSDW;
+ 14;//14.Dw
ITD;
SLD 3;
T #AR1Zeiger;///Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
L SSDW
+ 20 // 20.Dw
ITD
SLD 3
T AR1Zeiger // /Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
AUF DB[ #DBDatenliste];
L Datensatzlaenge
L Listenlaenge
*I
L500: T Schleife
L 0;
T DBW[ #AR1Zeiger];//Anzahl Einträge löschen
L 0 // Daten löschen
T DBW [AR1Zeiger]
L #SSDW;
+ 20;//20.Dw
ITD;
SLD 3;
T #AR1Zeiger;///Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
L AR1Zeiger
SRD 3
L 2
+D
SLD 3
T AR1Zeiger
L #Datensatzlaenge;
L #Listenlaenge;
*I;
L500: T #Schleife;
L Schleife
LOOP L500
L 0;//Daten löschen
T DBW[ #AR1Zeiger];
L #AR1Zeiger;
SRD 3;
L 2;
+D;
SLD 3;
T #AR1Zeiger;
--- NW 5: Fehlerausgabe / RET_VAL ---
SET // VKE = 1 ohne Fehler !!!
JU Ok
Err0: L 2#0000_0000_0000_0001 // Kein Fifobereich
JU Err
Err1: L 2#0000_0000_0000_0010 // SFC20-Aufruf mit Fehler
L #Schleife;
LOOP L500;
Err: CLR // VKE = 0 bei Fehler !!!
Ok: T RE_VAL
NETWORK
TITLE = Fehlerausgabe / RET_VAL
SET;//VKE = 1 ohne Fehler !!!
SPA Ok;
Err0: L 2#0000_0000_0000_0001;//Kein Fifobereich
SPA Err;
Err1: L 2#0000_0000_0000_0010;//SFC20-Aufruf mit Fehler
SAVE // VKE in BIE-Bit speichern
Err: CLR;//VKE = 0 bei Fehler !!!
Ok: T #RE_VAL;
SAVE;//VKE in BIE-Bit speichern
END_FUNCTION
@@ -1,65 +1,73 @@
=== FC 125: Err_vorhanden [STL] ===
INTERFACE:
Input:
Check_DB : Int
Anfangs_DW : DInt
Ende_DW : DInt
Output:
Stoerung : Bool // Störung vorhanden
ErrDW : DInt
ErrBits : Int
InOut:
Temp:
Anzeige_DB : Int
Zeiger : DInt // Startwert mit Offset 0
AR1Zeiger : DWord // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
Constant:
Return:
Ret_Val : Void
FUNCTION "Err_vorhanden" : Void
TITLE = Störung aktiv
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
VAR_INPUT
Check_DB : Int;
Anfangs_DW : DInt;
Ende_DW : DInt;
END_VAR
--- NW 1: Check-DB von "Abfangs_DW" bis "Ende_DW" checken ---
SET // GST
R Stoerung
L DINT#-1 // Sonst Störung in DBD0 nicht erkennbar
T ErrDW
L 0
T ErrBits
VAR_OUTPUT
Stoerung : Bool; // Störung vorhanden
ErrDW : DInt;
ErrBits : Int;
END_VAR
L Check_DB
T Anzeige_DB
L Anfangs_DW // Mit diesem DW beginnen
T Zeiger // Zeiger
Loop: L Zeiger // Zeiger
SLD 3
T AR1Zeiger // Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
OPN DB[Anzeige_DB]
L DBW [AR1Zeiger] // Störungsbits
T ErrBits
L 0 // aktiv ?
<>I // Ja !
JC Err
L Zeiger // Startwert mit Offset 0
L 2
+D
T Zeiger // Zeiger
L Ende_DW // Letztes DW überschritten?
<=D // Nein !
JC Loop
BEU
Err: SET
S Stoerung
L Zeiger // Zeiger
T ErrDW
VAR_TEMP
Anzeige_DB : Int;
Zeiger : DInt; // Startwert mit Offset 0
AR1Zeiger : DWord; // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
END_VAR
--- NW 2: Ende ---
BE
BEGIN
NETWORK
TITLE = Check-DB von "Abfangs_DW" bis "Ende_DW" checken
SET;//GST
R #Stoerung;
L DINT#-1;//Sonst Störung in DBD0 nicht erkennbar
T #ErrDW;
L 0;
T #ErrBits;
L #Check_DB;
T #Anzeige_DB;
L #Anfangs_DW;//Mit diesem DW beginnen
T #Zeiger;//Zeiger
Loop: L #Zeiger;//Zeiger
SLD 3;
T #AR1Zeiger;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
AUF DB[ #Anzeige_DB];
L DBW[ #AR1Zeiger];//Störungsbits
T #ErrBits;
L 0;//aktiv ?
<>I;//Ja !
SPB Err;
L #Zeiger;//Startwert mit Offset 0
L 2;
+D;
T #Zeiger;//Zeiger
L #Ende_DW;//Letztes DW überschritten?
<=D;//Nein !
SPB Loop;
BEA;
Err: SET;
S #Stoerung;
L #Zeiger;//Zeiger
T #ErrDW;
NETWORK
TITLE = Ende
BE;
END_FUNCTION
@@ -1,327 +1,375 @@
=== FC 84: FIFOChange [STL] ===
INTERFACE:
Input:
SSDB : Int // Schnittstellen-DB
SSDW : Int // Schnittstellen-1.DW
CH_POS : Int // Position des Eintrags, der zu ändernden Daten
CHANGEDATEN : Pointer // Wechsel-Daten-Schnittstelle
Output:
RE_VAL : Byte // Rückmeldung
InOut:
Temp:
Quelle : Any // Zeiger, wo Rein-Daten sind
Ziel : Any // Zeiger, FIFO-Stelle
Kopf : Byte // Fifo-Kennung (FF)
Datensatzlaenge : Byte // Datensatzlänge in Word (1 - 128)
FifoLaenge : Int // Länge des Fifo (maximale Anzahl der Datensätze)
Bringzeiger : Int // Zeiger, wohin nächster Eintrag gespeichert wird
Holzeiger : Int // Zeiger, woher nächste Daten geholt werden
Anzahl : Int // Anzahl der Datensätze (eingetragene)
Status : Word // Status des Fifo
Err : Byte // Fehlerbits
MinHolzeiger : Int // Minimum Holzeiger
MaxHolzeiger : Int // Maximum Holzeiger
DBFifo : Word // FIFO-DB
SFC_RET_VAL : Int // Rückmeldung SFC-Aufruf
SFC_DB_LENGTH : Word // Rückmeldung SFC-Aufruf
Fifo_Ende : Word // Ende des Fifo
AlleDaten : Word // Anzahl der bytes für alle Daten
Offset : Word // Offset zu überschreibender Datensatz
NixSave : Bool // Status nicht speichern
SFC_WRITE_PROT : Bool // Rückmeldung SFC-Aufruf
AR1Zeiger : DWord // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
AR1Start : DInt // Startwert mit Offset 0
Constant:
Return:
Ret_Val : Void
FUNCTION "FIFOChange" : Void
TITLE = Fifo-Modul
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : IBAE
FAMILY : FIFO
NAME : FifoIn
VERSION : 0.1
//COPYRIGHT by Ingenieurbüro A.Emmert
//Ortsstr.33, D-869925 Fuchstal (Germany)
//Tel.: 0049(0)8243-960629
//Version: KyungBang00 / 14.04.2009
//
//Datenblock in Fifo überschreiben
//SSDB: FIFO-DB
//SSDW: FIFO-1.DW
//CH_POS: angegebene Position überschreiben
//CHANGEDATEN: Pointer, wo zu ändernde Daten stehen (P#DB1.DBX0.0, P#M220.0)
//RE_VAL: Rückmeldungen:
// Bit0: Kein Fifobereich / falscher Kopfinhalt / Endekennung
// Bit1: SFC20-Aufruf mit Fehler
// Bit2: Fifo ist leer
// Bit3: Falscher Parameter bei Aufruf
// Bit4: Position nicht belegt
// Bit5: Bringzeiger ist ausserhalb
// Bit6: Holzeiger ist ausserhalb
// Bit7: Versatz Bring-/Holzeiger
//
VAR_INPUT
SSDB : Int; // Schnittstellen-DB
SSDW : Int; // Schnittstellen-1.DW
CH_POS : Int; // Position des Eintrags, der zu ändernden Daten
CHANGEDATEN : Pointer; // Wechsel-Daten-Schnittstelle
END_VAR
--- NW 1: Schnittstellen-DB sinnvoll ? ---
L SSDB
T DBFifo
VAR_OUTPUT
RE_VAL : Byte; // Rückmeldung
END_VAR
// CALL TEST_DB
// DB_NUMBER :=#DBFifo
// RET_VAL :=#SFC_RET_VAL
// DB_LENGTH :=#SFC_DB_LENGTH
// WRITE_PROT :=#SFC_WRITE_PROT
CALL FC "TEST_DB_TO_ATTR_DB" (DB_Number:=DBFifo, RetVal:=SFC_RET_VAL, DB_Length:=SFC_DB_LENGTH, Write_Prot:=SFC_WRITE_PROT)
VAR_TEMP
Quelle : Any; // Zeiger, wo Rein-Daten sind
Ziel : Any; // Zeiger, FIFO-Stelle
Kopf : Byte; // Fifo-Kennung (FF)
Datensatzlaenge : Byte; // Datensatzlänge in Word (1 - 128)
FifoLaenge : Int; // Länge des Fifo (maximale Anzahl der Datensätze)
Bringzeiger : Int; // Zeiger, wohin nächster Eintrag gespeichert wird
Holzeiger : Int; // Zeiger, woher nächste Daten geholt werden
Anzahl : Int; // Anzahl der Datensätze (eingetragene)
Status : Word; // Status des Fifo
Err : Byte; // Fehlerbits
MinHolzeiger : Int; // Minimum Holzeiger
MaxHolzeiger : Int; // Maximum Holzeiger
DBFifo : Word; // FIFO-DB
SFC_RET_VAL : Int; // Rückmeldung SFC-Aufruf
SFC_DB_LENGTH : Word; // Rückmeldung SFC-Aufruf
Fifo_Ende : Word; // Ende des Fifo
AlleDaten : Word; // Anzahl der bytes für alle Daten
Offset : Word; // Offset zu überschreibender Datensatz
NixSave : Bool; // Status nicht speichern
SFC_WRITE_PROT : Bool; // Rückmeldung SFC-Aufruf
AR1Zeiger : DWord; // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
AR1Start : DInt; // Startwert mit Offset 0
END_VAR
L SFC_RET_VAL
L 2#0000_0000_0000_0000
<>I
O SFC_WRITE_PROT
= NixSave // Status nicht speichern
JC Err0 // kein Fifobereich
BEGIN
NETWORK
TITLE = Schnittstellen-DB sinnvoll ?
L #SSDB;
T #DBFifo;
// CALL TEST_DB
// DB_NUMBER :=#DBFifo
// RET_VAL :=#SFC_RET_VAL
// DB_LENGTH :=#SFC_DB_LENGTH
// WRITE_PROT :=#SFC_WRITE_PROT
CALL "TEST_DB_TO_ATTR_DB"
( DB_Number := #DBFifo ,
RetVal := #SFC_RET_VAL ,
DB_Length := #SFC_DB_LENGTH ,
Write_Prot := #SFC_WRITE_PROT
);
--- NW 2: Quelle-Pointer erzeugen: ---
L 16#1004 // Kennung 10 + Word=04
T LW0 // Any-Kennung, Datentyp
L 16#0006 // 6 Dw´s holen
T LW2 // Wiederholungen
L SSDB
T LW4 // DB_Nummer
L SSDW // Adresse
SLD 3
L 16#8400_0000 // Kennung: Daten
OD
T LD6 // Kennung, Adresse
L #SFC_RET_VAL;
L 2#0000_0000_0000_0000;
<>I;
O #SFC_WRITE_PROT;
= #NixSave;//Status nicht speichern
SPB Err0;//kein Fifobereich
CALL SYS "BLKMOV" (SRCBLK:=Quelle, RET_VAL:=SFC_RET_VAL, DSTBLK:=P#L20.0 WORD 6) // 1.-6.DW FIFO holen
NETWORK
TITLE = Fifokopfdaten holen
//Quelle-Pointer erzeugen:
L 16#1004;//Kennung 10 + Word=04
T %LW0;//Any-Kennung, Datentyp
L 16#0006;//6 Dw´s holen
T %LW2;//Wiederholungen
L #SSDB;
T %LW4;//DB_Nummer
L #SSDW;//Adresse
SLD 3;
L 16#8400_0000;//Kennung: Daten
OD;
T %LD6;//Kennung, Adresse
L Status
L 2#0000_0000_1110_0000
AW
T Err
JP Err // Kapitalfehler vorhanden
CALL BLKMOV//1.-6.DW FIFO holen
{blk_type := 'Variant'}
( SRCBLK := #Quelle ,
RET_VAL := #SFC_RET_VAL ,
DSTBLK := P#L20.0 WORD 6
);
L SFC_RET_VAL
L 2#0000_0000_0000_0000
<>I
JC Err1
L #Status;
L 2#0000_0000_1110_0000;
UW;
T #Err;
SPP Err;//Kapitalfehler vorhanden
L #SFC_RET_VAL;
L 2#0000_0000_0000_0000;
<>I;
SPB Err1;
NETWORK
TITLE = Zeigerüberprüfung
L #Kopf;//Fifo-Kopf
L 16#FF;//= Fifokennung ?
<>I;//Nein !
= #NixSave;//Status nicht speichern
SPB Err0;//kein Fifobereich
L 1;
L #Datensatzlaenge;//Datenblocklänge
>I;
SPB Err0;//kein Fifobereich
L 128;
>I;
SPB Err0;//kein Fifobereich
L 1;
L #FifoLaenge;//Max.Anzahl von Datenblöcken
>I;
SPB Err0;//kein Fifobereich
L #SSDW;
+ 40;//Speichern ab 20.DW
T #MinHolzeiger;//Minimum Bringzeiger
L #FifoLaenge;//Länge FIFO (in Word)
+ -1;
L #Datensatzlaenge;//Datenblocklänge
*I;
L 2;//DB byteorientiert
*I;
+ 40;//Speichern ab 20.DW
L #SSDW;
+I;
T #MaxHolzeiger;//Maximum Bringzeiger
L #Datensatzlaenge;//Datenblocklänge
L 2;//DB byteorientiert
*I;
L #MaxHolzeiger;//Maximum Holzeiger
+I;//Zeiger Endekennung
T #Fifo_Ende;
ITD;
T #AR1Start;//Startwert mit Offset 0
SLD 3;
T #AR1Zeiger;///Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
AUF DB[ #DBFifo];
L #Fifo_Ende;
L #SFC_DB_LENGTH;
>I;//Fifo-DB ist zu kurz!
SPB Err0;//kein Fifo-Bereich
L DBW[ #AR1Zeiger];
L 16#FFEE;//Fifo-Endekennung ?
<>I;//Nein !
SPB Err0;//kein Fifobereich
L #MinHolzeiger;//Minimum Holzeiger
L #Holzeiger;//Holzeiger
<=I;//Ok ?
SPB W300;//Ja!
L 0;//Grundstellung ?
<>I;//Nein !
SPB Err6;//Holzeiger ist ausserhalb
L #Holzeiger;//Holzeiger Grundstellung ?
<>I;//Nein !
SPB Err6;//Holzeiger ist ausserhalb
L #Anzahl;//Anzahl Datensätze
L 0;//Grundstellung ?
<>I;//Nein !
SPB Err6;//Holzeiger ist ausserhalb
L #MinHolzeiger;//Minimum Holzeiger
T #Bringzeiger;//Bringzeiger
T #Holzeiger;//Holzeiger
W300: L #MaxHolzeiger;//Maximum Holzeiger
<=I;//Ok ?
SPB W301;//Ja!
SPA Err6;//Holzeiger ist ausserhalb
--- NW 3: Zeigerüberprüfung ---
L Kopf // Fifo-Kopf
L 16#FF // = Fifokennung ?
<>I // Nein !
= NixSave // Status nicht speichern
JC Err0 // kein Fifobereich
W301: L #Bringzeiger;//Bringzeiger
L #Holzeiger;//Holzeiger
==I;//Identisch !
U(;
L #FifoLaenge;
L #Anzahl;//Anzahl der gespeicherten Datensätze
<>I;//Fifo noch nicht voll !
);
U(;
L 0;
<>I;//Datensätze aber noch vorhanden !
);
SPB Err7;//Versatz Bring-/Holzeiger
L 1
L Datensatzlaenge // Datenblocklänge
>I
JC Err0 // kein Fifobereich
L #Bringzeiger;//Bringzeiger
L #Holzeiger;//Holzeiger
<>I;//Ungleich !
U(;
L #FifoLaenge;
L #Anzahl;//Anzahl der gespeicherten Datensätze
==I;//Aber Fifo ist voll !
O(;
L 0;
==I;//Aber keine Datensätze vorhanden !
);
);
SPB Err7;//Versatz Bring-/Holzeiger
L 128
>I
JC Err0 // kein Fifobereich
L #Anzahl;//Anzahl der gespeicherten Datensätze
L 0;
==I;//Keine Datensätze vorhanden !
SPB Err2;//Fifo ist leer
L 1
L FifoLaenge // Max.Anzahl von Datenblöcken
>I
JC Err0 // kein Fifobereich
NETWORK
TITLE = Offset bilden
L 0;
L #CH_POS;
>=I;
SPB Err3;//falscher Parameter bei Aufruf
L SSDW
+ 40 // Speichern ab 20.DW
T MinHolzeiger // Minimum Bringzeiger
L #FifoLaenge;//Max.Anzahl von Datenblöcken
>I;
SPB Err3;//falscher Parameter bei Aufruf
L FifoLaenge // Länge FIFO (in Word)
+ -1
L Datensatzlaenge // Datenblocklänge
*I
L 2 // DB byteorientiert
*I
+ 40 // Speichern ab 20.DW
L SSDW
+I
T MaxHolzeiger // Maximum Bringzeiger
L #Anzahl;//Anzahl der Datensätze
L #CH_POS;
<I;
SPB Err4;//Fifo ist leer
L Datensatzlaenge // Datenblocklänge
L 2 // DB byteorientiert
*I
L MaxHolzeiger // Maximum Holzeiger
+I // Zeiger Endekennung
T Fifo_Ende
ITD
T AR1Start // Startwert mit Offset 0
SLD 3
T AR1Zeiger // /Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
+ -1;//1.Teil = Holzeiger !
L #Datensatzlaenge;//Datenblocklänge
*I;
L 2;//DB byteorientiert
*I;
L #Holzeiger;//Holzeiger
+I;
W400: T #Offset;//Schreibzeiger
L #MaxHolzeiger;//Maximum Holzeiger
<=I;
SPB Nw05;
OPN DB[DBFifo]
L #FifoLaenge;//Max.Anzahl von Datenblöcken
L #Datensatzlaenge;//Datenblocklänge
*I;
L 2;//DB byteorientiert
*I;
T #AlleDaten;//Bytes für alle Datensätze
L Fifo_Ende
L SFC_DB_LENGTH
>I // Fifo-DB ist zu kurz!
JC Err0 // kein Fifo-Bereich
L #Offset;//Schreibzeiger
L #AlleDaten;
-I;
SPA W400;
L DBW [AR1Zeiger]
L 16#FFEE // Fifo-Endekennung ?
<>I // Nein !
JC Err0 // kein Fifobereich
NETWORK
TITLE = Fifodaten überschreiben
//Quelle-Pointer erzeugen:
Nw05: L 16#1004;//Kennung 10 + Word=04
T %LW0;
T %LW10;//Any-Kennung, Datentyp
L #Datensatzlaenge;//Datenbytes speichern
T %LW2;
T %LW12;//Wiederholungen
L MinHolzeiger // Minimum Holzeiger
L Holzeiger // Holzeiger
<=I // Ok ?
JC W300 // Ja!
//DATEN-Pointer übernehmen:
L P##CHANGEDATEN;
LAR1;
L 0 // Grundstellung ?
<>I // Nein !
JC Err6 // Holzeiger ist ausserhalb
L W[ AR1, P#0.0];
T %LW4;//DB_Nummer
L D[ AR1, P#2.0];
T %LD6;//Kennung, Adresse
L Holzeiger // Holzeiger Grundstellung ?
<>I // Nein !
JC Err6 // Holzeiger ist ausserhalb
//Ziel-Pointer erzeugen:
//Kennung + Datenbytes s.o.
L Anzahl // Anzahl Datensätze
L 0 // Grundstellung ?
<>I // Nein !
JC Err6 // Holzeiger ist ausserhalb
L #SSDB;
T %LW14;//DB_Nummer
L #Offset;//Adresse
SLD 3;
L 16#8400_0000;//Kennung: Daten
OD;
T %LD16;//Kennung, Adresse
L MinHolzeiger // Minimum Holzeiger
T Bringzeiger // Bringzeiger
T Holzeiger // Holzeiger
CALL BLKMOV//FIFO-Daten speichern
{blk_type := 'Variant'}
( SRCBLK := #Quelle ,
RET_VAL := #SFC_RET_VAL ,
DSTBLK := #Ziel
);
W300: L MaxHolzeiger // Maximum Holzeiger
<=I // Ok ?
JC W301 // Ja!
JU Err6 // Holzeiger ist ausserhalb
L #SFC_RET_VAL;
L 2#0000_0000_0000_0000;
<>I;
SPB Err1;
NETWORK
TITLE = Fehlerausgabe / RET_VAL
SET;//VKE = 1 ohne Fehler !!!
SPA Ok;
Err0: L 2#0000_0000_0000_0001;//Kein Fifobereich
T #Err;
SPA Err;
Err1: S %L32.1;//SFC20-Aufruf mit Fehler
SPA Err;
Err2: S %L32.2;//Fifo ist voll
SPA Err;
Err3: S %L32.3;//Falscher Parameter
SPA Err;
Err4: S %L32.4;//Position nicht belegt
SPA Err;
Err6: S %L32.6;//Holzeiger außerhalb
SPA Err;
Err7: S %L32.7;//Versatz Bring-/Holzeiger
W301: L Bringzeiger // Bringzeiger
L Holzeiger // Holzeiger
==I // Identisch !
A(
L FifoLaenge
L Anzahl // Anzahl der gespeicherten Datensätze
<>I // Fifo noch nicht voll !
)
A(
L 0
<>I // Datensätze aber noch vorhanden !
)
JC Err7 // Versatz Bring-/Holzeiger
Err: CLR;//VKE = 0 bei Fehler !!!
Ok: L #Err;
T #RE_VAL;
L #Status;
OW;
T #Status;
L Bringzeiger // Bringzeiger
L Holzeiger // Holzeiger
<>I // Ungleich !
A(
L FifoLaenge
L Anzahl // Anzahl der gespeicherten Datensätze
==I // Aber Fifo ist voll !
O(
L 0
==I // Aber keine Datensätze vorhanden !
)
)
JC Err7 // Versatz Bring-/Holzeiger
SAVE;//VKE in BIE-Bit speichern
L Anzahl // Anzahl der gespeicherten Datensätze
L 0
==I // Keine Datensätze vorhanden !
JC Err2 // Fifo ist leer
NETWORK
TITLE = Fifokopfdaten speichern
U %L32.0;//Falscher Parameter
U #NixSave;//Status nicht speichern
BEB;
L #SSDW;
+ 10;//Status
ITD;
T #AR1Start;//Startwert mit Offset 0
SLD 3;
T #AR1Zeiger;///Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
--- NW 4: Offset bilden ---
L 0
L CH_POS
>=I
JC Err3 // falscher Parameter bei Aufruf
AUF DB[ #DBFifo];
L FifoLaenge // Max.Anzahl von Datenblöcken
>I
JC Err3 // falscher Parameter bei Aufruf
L #Err;
T DBW[ #AR1Zeiger];
L Anzahl // Anzahl der Datensätze
L CH_POS
<I
JC Err4 // Fifo ist leer
+ -1 // 1.Teil = Holzeiger !
L Datensatzlaenge // Datenblocklänge
*I
L 2 // DB byteorientiert
*I
L Holzeiger // Holzeiger
+I
W400: T Offset // Schreibzeiger
L MaxHolzeiger // Maximum Holzeiger
<=I
JC Nw05
L FifoLaenge // Max.Anzahl von Datenblöcken
L Datensatzlaenge // Datenblocklänge
*I
L 2 // DB byteorientiert
*I
T AlleDaten // Bytes für alle Datensätze
L Offset // Schreibzeiger
L AlleDaten
-I
JU W400
--- NW 5: Quelle-Pointer erzeugen: ---
Nw05: L 16#1004 // Kennung 10 + Word=04
T LW0
T LW10 // Any-Kennung, Datentyp
L Datensatzlaenge // Datenbytes speichern
T LW2
T LW12 // Wiederholungen
// DATEN-Pointer übernehmen:
L P#
LAR1
L NoneW [AR1,]
T LW4 // DB_Nummer
L NoneD [AR1,]
T LD6 // Kennung, Adresse
// Ziel-Pointer erzeugen:
// Kennung + Datenbytes s.o.
L SSDB
T LW14 // DB_Nummer
L Offset // Adresse
SLD 3
L 16#8400_0000 // Kennung: Daten
OD
T LD16 // Kennung, Adresse
CALL SYS "BLKMOV" (SRCBLK:=Quelle, RET_VAL:=SFC_RET_VAL, DSTBLK:=Ziel) // FIFO-Daten speichern
L SFC_RET_VAL
L 2#0000_0000_0000_0000
<>I
JC Err1
--- NW 6: Fehlerausgabe / RET_VAL ---
SET // VKE = 1 ohne Fehler !!!
JU Ok
Err0: L 2#0000_0000_0000_0001 // Kein Fifobereich
T Err
JU Err
Err1: S L32.1 // SFC20-Aufruf mit Fehler
JU Err
Err2: S L32.2 // Fifo ist voll
JU Err
Err3: S L32.3 // Falscher Parameter
JU Err
Err4: S L32.4 // Position nicht belegt
JU Err
Err6: S L32.6 // Holzeiger außerhalb
JU Err
Err7: S L32.7 // Versatz Bring-/Holzeiger
Err: CLR // VKE = 0 bei Fehler !!!
Ok: L Err
T RE_VAL
L Status
OW
T Status
SAVE // VKE in BIE-Bit speichern
--- NW 7: Fifokopfdaten speichern ---
A L32.0 // Falscher Parameter
A NixSave // Status nicht speichern
BEC
L SSDW
+ 10 // Status
ITD
T AR1Start // Startwert mit Offset 0
SLD 3
T AR1Zeiger // /Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
OPN DB[DBFifo]
L Err
T DBW [AR1Zeiger]
END_FUNCTION
@@ -1,376 +1,423 @@
=== FC 83: FIFOSearch [STL] ===
INTERFACE:
Input:
SSDB : Int // Schnittstellen-DB
SSDW : Int // Schnittstellen-1.DW
SEARCHDATEN : Pointer // SuchDaten-Schnittstelle
Laenge : Int // Anzahl der DWs zum Vergleichen im Datensatz
Output:
RE_POS : Int // Position des Eintrags, der gesuchten Daten
RE_VAL : Byte // Rückmeldungen
InOut:
Temp:
Quelle : Any // Zeiger, wo Rein-Daten sind
Ziel : Any // Zeiger, FIFO-Stelle
Kopf : Byte // Fifo-Kennung (FF)
Datensatzlaenge : Byte // Datensatzlänge in Word (1 - 128)
FifoLaenge : Int // Länge des Fifo (maximale Anzahl der Datensätze)
Bringzeiger : Int // Zeiger, wohin nächster Eintrag gespeichert wird
Holzeiger : Int // Zeiger, woher nächste Daten geholt werden
Anzahl : Int // Anzahl der Datensätze (eingetragene)
Status : Word // Status des Fifo
Err : Byte // Fehlerbits
MinHolzeiger : Int // Minimum Holzeiger
MaxHolzeiger : Int // Maximum Holzeiger
DBFifo : Word // FIFO-DB
SFC_RET_VAL : Int // Rückmeldung SFC-Aufruf
SFC_DB_LENGTH : Word // Rückmeldung SFC-Aufruf
Fifo_Ende : Word // Ende des Fifo
AR2_Speicher : DWord // Adress-Register 2 zwischenspeichern
DBSuchdaten : Word // Solldaten-DB, falls angegeben
SuchDaten_Startpunkt : Word // SuchDaten-Startpunkt: Adresse
SuchZeiger : Word // Suchzeiger
Schleife : Word // Loopzähler
NixSave : Bool // Status nicht speichern
SFC_WRITE_PROT : Bool // Rückmeldung SFC-Aufruf
AR1Zeiger : DWord // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
AR1Start : DInt // Startwert mit Offset 0
sRE_POS : Int // Position des Eintrags, der gesuchten Daten
Constant:
Return:
Ret_Val : Void
--- NW 1: Schnittstellen-DB sinnvoll ? ---
TAR2
T AR2_Speicher // AR2 zwischenspeichern
L SSDB
T DBFifo
// CALL TEST_DB
// DB_NUMBER :=#DBFifo
// RET_VAL :=#SFC_RET_VAL
// DB_LENGTH :=#SFC_DB_LENGTH
// WRITE_PROT :=#SFC_WRITE_PROT
CALL FC "TEST_DB_TO_ATTR_DB" (DB_Number:=DBFifo, RetVal:=SFC_RET_VAL, DB_Length:=SFC_DB_LENGTH, Write_Prot:=SFC_WRITE_PROT)
L SFC_RET_VAL
L 2#0000_0000_0000_0000
<>I
= NixSave // Status nicht speichern
O SFC_WRITE_PROT
JC Err0 // kein Fifobereich
--- NW 2: Quelle-Pointer erzeugen: ---
L 16#1004 // Kennung 10 + Word=04
T sRE_POS // Any-Kennung, Datentyp
L 16#0006 // 6 Dw´s holen
T LW2 // Wiederholungen
L SSDB
T LW4 // DB_Nummer
L SSDW // Adresse
SLD 3
L 16#8400_0000 // Kennung: Daten
OD
T LD6 // Kennung, Adresse
CALL SYS "BLKMOV" (SRCBLK:=Quelle, RET_VAL:=SFC_RET_VAL, DSTBLK:=P#L20.0 WORD 6) // 1.-6.DW FIFO holen
L Status
L 2#0000_0000_1110_0000
AW
T Err
JP Err // Kapitalfehler vorhanden
L SFC_RET_VAL
L 2#0000_0000_0000_0000
<>I
JC Err1
--- NW 3: Zeigerüberprüfung ---
L Kopf // Fifo-Kopf
L 16#FF // = Fifokennung ?
<>I // Nein !
= NixSave // Status nicht speichern
JC Err0 // kein Fifobereich
L 1
L Datensatzlaenge // Datenblocklänge
>I
JC Err0 // kein Fifobereich
L 128
>I
JC Err0 // kein Fifobereich
L 1
L FifoLaenge // Max.Anzahl von Datenblöcken
>I
JC Err0 // kein Fifobereich
L SSDW
+ 40 // Speichern ab 20.DW
T MinHolzeiger // Minimum Holzeiger
L FifoLaenge // Länge FIFO (in Word)
+ -1
L Datensatzlaenge // Datenblocklänge
*I
L 2 // DB byteorientiert
*I
+ 40 // Speichern ab 20.DW
L SSDW
+I
T MaxHolzeiger // Maximum Holzeiger
L Datensatzlaenge // Datenblocklänge
L 2 // DB byteorientiert
*I
L MaxHolzeiger // Maximum Holzeiger
+I // Zeiger Endekennung
T Fifo_Ende
ITD
T AR1Start // Startwert mit Offset 0
SLD 3
T AR1Zeiger // /Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
OPN DB[DBFifo]
L Fifo_Ende
L SFC_DB_LENGTH
>I // Fifo-DB ist zu kurz!
JC Err0 // kein Fifo-Bereich
L DBW [AR1Zeiger]
L 16#FFEE // Fifo-Endekennung ?
<>I // Nein !
JC Err0 // kein Fifobereich
L MinHolzeiger // Minimum Holzeiger
L Holzeiger // Holzeiger
<=I // Ok ?
JC W300 // Ja!
L 0 // Grundstellung ?
<>I // Nein !
JC Err6 // Holzeiger ist ausserhalb
L Bringzeiger // Bringzeiger Grundstellung ?
<>I // Nein !
JC Err6 // Holzeiger ist ausserhalb
L Anzahl // Anzahl Datensätze
L 0 // Grundstellung ?
<>I // Nein !
JC Err6 // Holzeiger ist ausserhalb
L MinHolzeiger // Minimum Holzeiger
T Bringzeiger // Bringzeiger
T Holzeiger // Holzeiger
JU Err2 // Fifo ist leer
W300: L MaxHolzeiger // Maximum Holzeiger
<=I // Ok ?
JC W301 // Ja!
JU Err6 // Holzeiger ist ausserhalb
W301: L Bringzeiger // Bringzeiger
L Holzeiger // Holzeiger
==I // Identisch !
A(
L FifoLaenge
L Anzahl // Anzahl der gespeicherten Datensätze
<>I // Fifo noch nicht voll !
)
A(
L 0
<>I // Datensätze aber noch vorhanden !
)
JC Err7 // Versatz Bring-/Holzeiger
L Bringzeiger // Bringzeiger
L Holzeiger // Holzeiger
<>I // Ungleich !
A(
L FifoLaenge
L Anzahl // Anzahl der gespeicherten Datensätze
==I // Aber Fifo ist voll !
O(
L 0
==I // Aber keine Datensätze vorhanden !
)
)
JC Err7 // Versatz Bring-/Holzeiger
L Anzahl // Anzahl der gespeicherten Datensätze
L 0
==I // Keine Datensätze vorhanden !
JC Err2 // Fifo ist leer
--- NW 4: Fifodaten suchen ---
L 1
T sRE_POS // RET-POS
L Holzeiger // Holzeiger
T SuchZeiger // Suchzeiger
W400: ITD
T AR1Start // Startwert mit Offset 0
SLD 3
T AR1Zeiger // /Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
// DATEN-Pointer übernehmen:
L P#
LAR2
L NoneW [AR2,]
T DBSuchdaten // Solldaten-DB
L DBSuchdaten // Solldaten-DB
L 0 // Angegeben ?
==I // Nein
JC W401
// CALL TEST_DB
// DB_NUMBER :=#DBSuchdaten
// RET_VAL :=#SFC_RET_VAL
// DB_LENGTH :=#SFC_DB_LENGTH
// WRITE_PROT :=#SFC_WRITE_PROT
CALL FC "TEST_DB_TO_ATTR_DB" (DB_Number:=DBSuchdaten, RetVal:=SFC_RET_VAL, DB_Length:=SFC_DB_LENGTH, Write_Prot:=SFC_WRITE_PROT)
L SFC_RET_VAL
L 2#0000_0000_0000_0000 // Fehler vorhanden ?
<>I // Ja !
JC Err1 // SFC20-Aufruf mit Fehler
L NoneD [AR2,] // Kennung, Adresse
L 16#00FF_FFFF // Ohne Kennung
AW
SRW 3 // Ohne Bit
T SuchDaten_Startpunkt
L Datensatzlaenge // Datenblocklänge
L 2 // DB byteorientiert
*I
L SuchDaten_Startpunkt
+I
L SFC_DB_LENGTH
>I // Indaten-DB ist zu kurz
JC Err1 // SFC20-Aufruf mit Fehler
W401: L NoneD [AR2,] // Kennung, Adresse
LAR2
L Laenge // Anzahl der DWs zum Vergleichen im Datensatz
L400: T Schleife
L DBSuchdaten // Solldaten-DB
L 0 // Angegeben ?
==I // Nein
JC W402
OPN DB[DBSuchdaten]
W402: L NoneW [AR2,] // Mit Solldaten überprüfen
OPN DB[DBFifo]
L DBW [AR1Zeiger] // Fifo-Daten lesen
<>I // nicht identisch !
JC W403
L AR1Start // Startwert mit Offset 0
+ DINT#2
T AR1Start // Startwert mit nächstem Offset
SLD 3
T AR1Zeiger // /Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
ADDAR2 P#2.0
L Schleife
LOOP L400
JU Ende // Datensatz ist in Fifo enthalten
W403: L sRE_POS // RET-POS
+ 1
T sRE_POS // RET-POS
L Anzahl // Anzahl der Daten im Fifo
>I // Alle Datensätze sind durchsucht
JC Err2
L Datensatzlaenge // Datenblocklänge
L 2 // DB byteorientiert
*I
L SuchZeiger // Suchzeiger
+I
T SuchZeiger // Suchzeiger
L MaxHolzeiger // Maximum Holzeiger
<=I // Ende erreicht? Nein!
JC W404
L MinHolzeiger // Minimum Holzeiger
T SuchZeiger
W404: L SuchZeiger // Suchzeiger
JU W400
--- NW 5: Fehlerausgabe / RET_VAL ---
Ende: SET // VKE = 1 ohne Fehler !!!
JU Ok
Err0: L 2#0000_0000_0000_0001 // Kein Fifobereich
T Err
JU Err
Err1: S L32.1 // SFC20-Aufruf mit Fehler
JU Err
Err2: S L32.2 // Fifo ist leer
JU Err
Err6: S L32.6 // Holzeiger außerhalb
JU Err
Err7: S L32.7 // Versatz Bring-/Holzeiger
Err: L 0
T sRE_POS // RET-POS = 0
CLR // VKE = 0 bei Fehler !!!
Ok: L Err
T RE_VAL
L Status
OW
T Status
SAVE // VKE in BIE-Bit speichern
--- NW 6: Fifokopfdaten speichern ---
L AR2_Speicher // AR2 zurückspeichern
LAR2
A L32.0 // Falscher Parameter
A NixSave // Status nicht speichern
BEC
L SSDW
+ 10 // Status
ITD
T AR1Start // Startwert mit Offset 0
SLD 3
T AR1Zeiger // /Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
FUNCTION "FIFOSearch" : Void
TITLE = Fifo-Modul
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : IBAE
FAMILY : FIFO
NAME : FifoIn
VERSION : 0.1
//COPYRIGHT by Ingenieurbüro A.Emmert
//Ortsstr.33, D-869925 Fuchstal (Germany)
//Tel.: 0049(0)8243-960629
//Version: KyungBang00 / 14.04.2009
//
//Datenblock in Fifo suchen
//SSDB: FIFO-DB
//SSDW: FIFO-1.DW
//SEARCHDATEN: Pointer, wo zu suchende Daten stehen (P#DB1.DBX0.0, P#M220.0)
//RE_POS: Position an welcher sich Datensatz befindet
//RE_VAL: Rückmeldungen:
// Bit0: Kein Fifobereich / falscher Kopfinhalt / Endekennung
// Bit1: SFC20-Aufruf mit Fehler
// Bit2: Fifo ist leer
// Bit3: Frei
// Bit4: Frei
// Bit5: Bringzeiger ist ausserhalb
// Bit6: Holzeiger ist ausserhalb
// Bit7: Versatz Bring-/Holzeiger
//
VAR_INPUT
SSDB : Int; // Schnittstellen-DB
SSDW : Int; // Schnittstellen-1.DW
SEARCHDATEN : Pointer; // SuchDaten-Schnittstelle
Laenge : Int; // Anzahl der DWs zum Vergleichen im Datensatz
END_VAR
VAR_OUTPUT
RE_POS : Int; // Position des Eintrags, der gesuchten Daten
RE_VAL : Byte; // Rückmeldungen
END_VAR
VAR_TEMP
Quelle : Any; // Zeiger, wo Rein-Daten sind
Ziel : Any; // Zeiger, FIFO-Stelle
Kopf : Byte; // Fifo-Kennung (FF)
Datensatzlaenge : Byte; // Datensatzlänge in Word (1 - 128)
FifoLaenge : Int; // Länge des Fifo (maximale Anzahl der Datensätze)
Bringzeiger : Int; // Zeiger, wohin nächster Eintrag gespeichert wird
Holzeiger : Int; // Zeiger, woher nächste Daten geholt werden
Anzahl : Int; // Anzahl der Datensätze (eingetragene)
Status : Word; // Status des Fifo
Err : Byte; // Fehlerbits
MinHolzeiger : Int; // Minimum Holzeiger
MaxHolzeiger : Int; // Maximum Holzeiger
DBFifo : Word; // FIFO-DB
SFC_RET_VAL : Int; // Rückmeldung SFC-Aufruf
SFC_DB_LENGTH : Word; // Rückmeldung SFC-Aufruf
Fifo_Ende : Word; // Ende des Fifo
AR2_Speicher : DWord; // Adress-Register 2 zwischenspeichern
DBSuchdaten : Word; // Solldaten-DB, falls angegeben
SuchDaten_Startpunkt : Word; // SuchDaten-Startpunkt: Adresse
SuchZeiger : Word; // Suchzeiger
Schleife : Word; // Loopzähler
NixSave : Bool; // Status nicht speichern
SFC_WRITE_PROT : Bool; // Rückmeldung SFC-Aufruf
AR1Zeiger : DWord; // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
AR1Start : DInt; // Startwert mit Offset 0
sRE_POS : Int; // Position des Eintrags, der gesuchten Daten
END_VAR
BEGIN
NETWORK
TITLE = Schnittstellen-DB sinnvoll ?
TAR2;
T #AR2_Speicher;//AR2 zwischenspeichern
L #SSDB;
T #DBFifo;
// CALL TEST_DB
// DB_NUMBER :=#DBFifo
// RET_VAL :=#SFC_RET_VAL
// DB_LENGTH :=#SFC_DB_LENGTH
// WRITE_PROT :=#SFC_WRITE_PROT
CALL "TEST_DB_TO_ATTR_DB"
( DB_Number := #DBFifo ,
RetVal := #SFC_RET_VAL ,
DB_Length := #SFC_DB_LENGTH ,
Write_Prot := #SFC_WRITE_PROT
);
L #SFC_RET_VAL;
L 2#0000_0000_0000_0000;
<>I;
= #NixSave;//Status nicht speichern
O #SFC_WRITE_PROT;
SPB Err0;//kein Fifobereich
NETWORK
TITLE = Fifokopfdaten holen
//Quelle-Pointer erzeugen:
L 16#1004;//Kennung 10 + Word=04
T #sRE_POS;//Any-Kennung, Datentyp
L 16#0006;//6 Dw´s holen
T %LW2;//Wiederholungen
L #SSDB;
T %LW4;//DB_Nummer
L #SSDW;//Adresse
SLD 3;
L 16#8400_0000;//Kennung: Daten
OD;
T %LD6;//Kennung, Adresse
CALL BLKMOV//1.-6.DW FIFO holen
{blk_type := 'Variant'}
( SRCBLK := #Quelle ,
RET_VAL := #SFC_RET_VAL ,
DSTBLK := P#L20.0 WORD 6
);
L #Status;
L 2#0000_0000_1110_0000;
UW;
T #Err;
SPP Err;//Kapitalfehler vorhanden
L #SFC_RET_VAL;
L 2#0000_0000_0000_0000;
<>I;
SPB Err1;
NETWORK
TITLE = Zeigerüberprüfung
L #Kopf;//Fifo-Kopf
L 16#FF;//= Fifokennung ?
<>I;//Nein !
= #NixSave;//Status nicht speichern
SPB Err0;//kein Fifobereich
L 1;
L #Datensatzlaenge;//Datenblocklänge
>I;
SPB Err0;//kein Fifobereich
L 128;
>I;
SPB Err0;//kein Fifobereich
L 1;
L #FifoLaenge;//Max.Anzahl von Datenblöcken
>I;
SPB Err0;//kein Fifobereich
L #SSDW;
+ 40;//Speichern ab 20.DW
T #MinHolzeiger;//Minimum Holzeiger
L #FifoLaenge;//Länge FIFO (in Word)
+ -1;
L #Datensatzlaenge;//Datenblocklänge
*I;
L 2;//DB byteorientiert
*I;
+ 40;//Speichern ab 20.DW
L #SSDW;
+I;
T #MaxHolzeiger;//Maximum Holzeiger
L #Datensatzlaenge;//Datenblocklänge
L 2;//DB byteorientiert
*I;
L #MaxHolzeiger;//Maximum Holzeiger
+I;//Zeiger Endekennung
T #Fifo_Ende;
ITD;
T #AR1Start;//Startwert mit Offset 0
SLD 3;
T #AR1Zeiger;///Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
AUF DB[ #DBFifo];
L #Fifo_Ende;
L #SFC_DB_LENGTH;
>I;//Fifo-DB ist zu kurz!
SPB Err0;//kein Fifo-Bereich
L DBW[ #AR1Zeiger];
L 16#FFEE;//Fifo-Endekennung ?
<>I;//Nein !
SPB Err0;//kein Fifobereich
L #MinHolzeiger;//Minimum Holzeiger
L #Holzeiger;//Holzeiger
<=I;//Ok ?
SPB W300;//Ja!
L 0;//Grundstellung ?
<>I;//Nein !
SPB Err6;//Holzeiger ist ausserhalb
L #Bringzeiger;//Bringzeiger Grundstellung ?
<>I;//Nein !
SPB Err6;//Holzeiger ist ausserhalb
L #Anzahl;//Anzahl Datensätze
L 0;//Grundstellung ?
<>I;//Nein !
SPB Err6;//Holzeiger ist ausserhalb
L #MinHolzeiger;//Minimum Holzeiger
T #Bringzeiger;//Bringzeiger
T #Holzeiger;//Holzeiger
SPA Err2;//Fifo ist leer
W300: L #MaxHolzeiger;//Maximum Holzeiger
<=I;//Ok ?
SPB W301;//Ja!
SPA Err6;//Holzeiger ist ausserhalb
W301: L #Bringzeiger;//Bringzeiger
L #Holzeiger;//Holzeiger
==I;//Identisch !
U(;
L #FifoLaenge;
L #Anzahl;//Anzahl der gespeicherten Datensätze
<>I;//Fifo noch nicht voll !
);
U(;
L 0;
<>I;//Datensätze aber noch vorhanden !
);
SPB Err7;//Versatz Bring-/Holzeiger
L #Bringzeiger;//Bringzeiger
L #Holzeiger;//Holzeiger
<>I;//Ungleich !
U(;
L #FifoLaenge;
L #Anzahl;//Anzahl der gespeicherten Datensätze
==I;//Aber Fifo ist voll !
O(;
L 0;
==I;//Aber keine Datensätze vorhanden !
);
);
SPB Err7;//Versatz Bring-/Holzeiger
L #Anzahl;//Anzahl der gespeicherten Datensätze
L 0;
==I;//Keine Datensätze vorhanden !
SPB Err2;//Fifo ist leer
NETWORK
TITLE = Fifodaten suchen
L 1;
T #sRE_POS;//RET-POS
L #Holzeiger;//Holzeiger
T #SuchZeiger;//Suchzeiger
W400: ITD;
T #AR1Start;//Startwert mit Offset 0
SLD 3;
T #AR1Zeiger;///Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
//DATEN-Pointer übernehmen:
L P##SEARCHDATEN;
LAR2;
L W[ AR2, P#0.0];
T #DBSuchdaten;//Solldaten-DB
L #DBSuchdaten;//Solldaten-DB
L 0;//Angegeben ?
==I;//Nein
SPB W401;
// CALL TEST_DB
// DB_NUMBER :=#DBSuchdaten
// RET_VAL :=#SFC_RET_VAL
// DB_LENGTH :=#SFC_DB_LENGTH
// WRITE_PROT :=#SFC_WRITE_PROT
CALL "TEST_DB_TO_ATTR_DB"
( DB_Number := #DBSuchdaten ,
RetVal := #SFC_RET_VAL ,
DB_Length := #SFC_DB_LENGTH ,
Write_Prot := #SFC_WRITE_PROT
);
L #SFC_RET_VAL;
L 2#0000_0000_0000_0000;//Fehler vorhanden ?
<>I;//Ja !
SPB Err1;//SFC20-Aufruf mit Fehler
L D[ AR2, P#2.0];//Kennung, Adresse
L 16#00FF_FFFF;//Ohne Kennung
UW;
SRW 3;//Ohne Bit
T #SuchDaten_Startpunkt;
L #Datensatzlaenge;//Datenblocklänge
L 2;//DB byteorientiert
*I;
L #SuchDaten_Startpunkt;
+I;
L #SFC_DB_LENGTH;
>I;//Indaten-DB ist zu kurz
SPB Err1;//SFC20-Aufruf mit Fehler
W401: L D[ AR2, P#2.0];//Kennung, Adresse
LAR2;
L #Laenge;//Anzahl der DWs zum Vergleichen im Datensatz
L400: T #Schleife;
L #DBSuchdaten;//Solldaten-DB
L 0;//Angegeben ?
==I;//Nein
SPB W402;
AUF DB[ #DBSuchdaten];
W402: L W[ AR2, P#0.0];//Mit Solldaten überprüfen
AUF DB[ #DBFifo];
L DBW[ #AR1Zeiger];//Fifo-Daten lesen
<>I;//nicht identisch !
SPB W403;
L #AR1Start;//Startwert mit Offset 0
+ DINT#2;
T #AR1Start;//Startwert mit nächstem Offset
SLD 3;
T #AR1Zeiger;///Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
+AR2 P#2.0;
L #Schleife;
LOOP L400;
SPA Ende;//Datensatz ist in Fifo enthalten
W403: L #sRE_POS;//RET-POS
+ 1;
T #sRE_POS;//RET-POS
L #Anzahl;//Anzahl der Daten im Fifo
>I;//Alle Datensätze sind durchsucht
SPB Err2;
L #Datensatzlaenge;//Datenblocklänge
L 2;//DB byteorientiert
*I;
L #SuchZeiger;//Suchzeiger
+I;
T #SuchZeiger;//Suchzeiger
L #MaxHolzeiger;//Maximum Holzeiger
<=I;//Ende erreicht? Nein!
SPB W404;
L #MinHolzeiger;//Minimum Holzeiger
T #SuchZeiger;
W404: L #SuchZeiger;//Suchzeiger
SPA W400;
NETWORK
TITLE = Fehlerausgabe / RET_VAL
Ende: SET;//VKE = 1 ohne Fehler !!!
SPA Ok;
Err0: L 2#0000_0000_0000_0001;//Kein Fifobereich
T #Err;
SPA Err;
Err1: S %L32.1;//SFC20-Aufruf mit Fehler
SPA Err;
Err2: S %L32.2;//Fifo ist leer
SPA Err;
Err6: S %L32.6;//Holzeiger außerhalb
SPA Err;
Err7: S %L32.7;//Versatz Bring-/Holzeiger
Err: L 0;
T #sRE_POS;//RET-POS = 0
CLR;//VKE = 0 bei Fehler !!!
Ok: L #Err;
T #RE_VAL;
L #Status;
OW;
T #Status;
SAVE;//VKE in BIE-Bit speichern
NETWORK
TITLE = Fifokopfdaten speichern
L #AR2_Speicher;//AR2 zurückspeichern
LAR2;
U %L32.0;//Falscher Parameter
U #NixSave;//Status nicht speichern
BEB;
L #SSDW;
+ 10;//Status
ITD;
T #AR1Start;//Startwert mit Offset 0
SLD 3;
T #AR1Zeiger;///Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
AUF DB[ #DBFifo];
L #Err;
T DBW[ #AR1Zeiger];
NETWORK
TITLE =
L #sRE_POS;
T #RE_POS;
END_FUNCTION
OPN DB[DBFifo]
L Err
T DBW [AR1Zeiger]
--- NW 7: ---
L sRE_POS
T RE_POS
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,204 +1,248 @@
=== FC 82: FifoReset [STL] ===
INTERFACE:
Input:
SSDB : Int // Schnittstellen-DB
SSDW : Int // Schnittstellen-1.DW
PARA : Word // Aufrufparameter (Durchlaufspeicher?)
Output:
RE_VAL : Byte // Rückmeldung
InOut:
Temp:
Quelle : Any // Zeiger, wo Rein-Daten sind
Kopf : Byte // Fifo-Kennung (FF)
Datensatzlaenge : Byte // Datensatzlänge in Word (1 - 128)
FifoLaenge : Int // Länge des Fifo (maximale Anzahl der Datensätze)
Bringzeiger : Int // Zeiger, wohin nächster Eintrag gespeichert wird
Holzeiger : Int // Zeiger, woher nächste Daten geholt werden
Anzahl : Int // Anzahl der Datensätze (eingetragene)
Status : Word // Status des Fifo
DBFifo : Word // FIFO-DB
SFC_RET_VAL : Int // Rückmeldung SFC-Aufruf
SFC_DB_LENGTH : Word // Rückmeldung SFC-Aufruf
Fifo_Ende : Word // Ende des Fifo
Schleife : Word // Loopzähler
SFC_WRITE_PROT : Bool // Rückmeldung SFC-Aufruf
Constant:
Return:
Ret_Val : Void
FUNCTION "FifoReset" : Void
TITLE = Fifo-Modul
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : IBAE
FAMILY : FIFO
NAME : FifoIn
VERSION : 0.1
//COPYRIGHT by Ingenieurbüro A.Emmert
//Ortsstr.33, D-869925 Fuchstal (Germany)
//Tel.: 0049(0)8243-1254
//Version: ILS2100 / 06.11.2009
//
//Fifo resetten
//SSDB: FIFO-DB
//SSDW: FIFO-1.DW
//PARA: Aufrufparameter 00XX:
// XX: 00 = Normaler FIFO (alles löschen)
// D0 = Durchlaufspeicher (alles mit Nullen füllen)
// D1 = Durchlaufspeicher (alles mit FFFF füllen)
// Rückmeldungen:
// Bit0: Kein Fifobereich / falscher Kopfinhalt / Endekennung
// Bit1: SFC20-Aufruf mit Fehler
// Bit2: Frei
// Bit3: Frei
// Bit4: Frei
// Bit5: Frei
// Bit6: Frei
// Bit7: Frei
//
VAR_INPUT
SSDB : Int; // Schnittstellen-DB
SSDW : Int; // Schnittstellen-1.DW
PARA : Word; // Aufrufparameter (Durchlaufspeicher?)
END_VAR
--- NW 1: Schnittstellen-DB sinnvoll ? ---
L SSDB
T DBFifo
VAR_OUTPUT
RE_VAL : Byte; // Rückmeldung
END_VAR
// CALL TEST_DB
// DB_NUMBER :=#DBFifo
// RET_VAL :=#SFC_RET_VAL
// DB_LENGTH :=#SFC_DB_LENGTH
// WRITE_PROT :=#SFC_WRITE_PROT
CALL FC "TEST_DB_TO_ATTR_DB" (DB_Number:=DBFifo, RetVal:=SFC_RET_VAL, DB_Length:=SFC_DB_LENGTH, Write_Prot:=SFC_WRITE_PROT)
L SFC_RET_VAL
L 2#0000_0000_0000_0000
<>I
O SFC_WRITE_PROT
JC Err0 // kein Fifobereich
VAR_TEMP
Quelle : Any; // Zeiger, wo Rein-Daten sind
Kopf : Byte; // Fifo-Kennung (FF)
Datensatzlaenge : Byte; // Datensatzlänge in Word (1 - 128)
FifoLaenge : Int; // Länge des Fifo (maximale Anzahl der Datensätze)
Bringzeiger : Int; // Zeiger, wohin nächster Eintrag gespeichert wird
Holzeiger : Int; // Zeiger, woher nächste Daten geholt werden
Anzahl : Int; // Anzahl der Datensätze (eingetragene)
Status : Word; // Status des Fifo
DBFifo : Word; // FIFO-DB
SFC_RET_VAL : Int; // Rückmeldung SFC-Aufruf
SFC_DB_LENGTH : Word; // Rückmeldung SFC-Aufruf
Fifo_Ende : Word; // Ende des Fifo
Schleife : Word; // Loopzähler
SFC_WRITE_PROT : Bool; // Rückmeldung SFC-Aufruf
END_VAR
--- NW 2: Quelle-Pointer erzeugen: ---
L 16#1004 // Kennung 10 + Word=04
T LW0 // Any-Kennung, Datentyp
L 16#0006 // 6 Dw´s holen
T LW2 // Wiederholungen
L SSDB
T LW4 // DB_Nummer
L SSDW // Adresse
SLD 3
L 16#8400_0000 // Kennung: Daten
OD
T LD6 // Kennung, Adresse
BEGIN
NETWORK
TITLE = Schnittstellen-DB sinnvoll ?
L #SSDB;
T #DBFifo;
CALL SYS "BLKMOV" (SRCBLK:=Quelle, RET_VAL:=SFC_RET_VAL, DSTBLK:=P#L10.0 WORD 6) // 1.-6.DW FIFO holen
// CALL TEST_DB
// DB_NUMBER :=#DBFifo
// RET_VAL :=#SFC_RET_VAL
// DB_LENGTH :=#SFC_DB_LENGTH
// WRITE_PROT :=#SFC_WRITE_PROT
L SFC_RET_VAL
L 2#0000_0000_0000_0000
<>I
JC Err1
CALL "TEST_DB_TO_ATTR_DB"
( DB_Number := #DBFifo ,
RetVal := #SFC_RET_VAL ,
DB_Length := #SFC_DB_LENGTH ,
Write_Prot := #SFC_WRITE_PROT
);
L #SFC_RET_VAL;
L 2#0000_0000_0000_0000;
<>I;
O #SFC_WRITE_PROT;
SPB Err0;//kein Fifobereich
NETWORK
TITLE = Fifokopfdaten holen
//Quelle-Pointer erzeugen:
L 16#1004;//Kennung 10 + Word=04
T %LW0;//Any-Kennung, Datentyp
L 16#0006;//6 Dw´s holen
T %LW2;//Wiederholungen
L #SSDB;
T %LW4;//DB_Nummer
L #SSDW;//Adresse
SLD 3;
L 16#8400_0000;//Kennung: Daten
OD;
T %LD6;//Kennung, Adresse
CALL BLKMOV//1.-6.DW FIFO holen
{blk_type := 'Variant'}
( SRCBLK := #Quelle ,
RET_VAL := #SFC_RET_VAL ,
DSTBLK := P#L10.0 WORD 6
);
L #SFC_RET_VAL;
L 2#0000_0000_0000_0000;
<>I;
SPB Err1;
NETWORK
TITLE = Zeigerüberprüfung
L #Kopf;//Fifo-Kopf
L 16#FF;//= Fifokennung ?
<>I;//Nein !
SPB Err0;//kein Fifobereich
L 1;
L #Datensatzlaenge;//Datenblocklänge
>I;
SPB Err0;//kein Fifobereich
L 128;
>I;
SPB Err0;//kein Fifobereich
L 1;
L #FifoLaenge;//Max.Anzahl von Datenblöcken
>I;
SPB Err0;//kein Fifobereich
L #FifoLaenge;//Länge FIFO (in Word)
L #Datensatzlaenge;//Datenblocklänge
*I;
L 2;//DB byteorientiert
*I;
+ 40;//Speichern ab 20.DW
L #SSDW;
+I;
T #Fifo_Ende;
SLW 3;//Pointer erzeugen
LAR1;
AUF DB[ #DBFifo];
L #Fifo_Ende;
L #SFC_DB_LENGTH;
>I;//Fifo-DB ist zu kurz!
SPB Err0;//kein Fifo-Bereich
L DBW[ AR1, P#0.0];
L 16#FFEE;//Fifo-Endekennung ?
<>I;//Nein !
SPB Err0;//kein Fifobereich
NETWORK
TITLE = Fifo-Daten löschen
L #SSDW;
+ 4;//Ab 2.Dw
SLW 3;//Pointer erzeugen
LAR1;
AUF DB[ #DBFifo];
L #Datensatzlaenge;
L #FifoLaenge;
*I;
+ 18;//18 Datenwörter (wortorientiert)
L400: T #Schleife;
L 0;
T DBW[ AR1, P#0.0];
+AR1 P#2.0;
L #Schleife;
LOOP L400;
--- NW 3: Zeigerüberprüfung ---
L Kopf // Fifo-Kopf
L 16#FF // = Fifokennung ?
<>I // Nein !
JC Err0 // kein Fifobereich
NETWORK
TITLE = Durchlaufspeicher ?
L #PARA;//Aufrufparameter
SRW 4;
L 16#000D;//Durchlaufspeicher ?
<>I;//Nein !
SPB N006;
L 1
L Datensatzlaenge // Datenblocklänge
>I
JC Err0 // kein Fifobereich
L #SSDW;
+ 4;//Speichern ab 4.DW
SLW 3;//Pointer erzeugen
LAR1;
L 128
>I
JC Err0 // kein Fifobereich
AUF DB[ #DBFifo];
L 1
L FifoLaenge // Max.Anzahl von Datenblöcken
>I
JC Err0 // kein Fifobereich
L #SSDW;
+ 40;//1.Speicherzelle
T DBW[ AR1, P#0.0];//Bringzeiger
T DBW[ AR1, P#2.0];//Holzeiger
L FifoLaenge // Länge FIFO (in Word)
L Datensatzlaenge // Datenblocklänge
*I
L 2 // DB byteorientiert
*I
+ 40 // Speichern ab 20.DW
L SSDW
+I
T Fifo_Ende
SLW 3 // Pointer erzeugen
LAR1
L #FifoLaenge;//Fifo ist voll
T DBW[ AR1, P#4.0];//Anzahl
OPN DB[DBFifo]
L #PARA;//Aufrufparameter
L 16#00D1;//Durchlaufspeicher mit FFFF füllen
<>I;//Nein !
SPB N006;
L Fifo_Ende
L SFC_DB_LENGTH
>I // Fifo-DB ist zu kurz!
JC Err0 // kein Fifo-Bereich
L #FifoLaenge;//Fifo ist voll
T DBW[ AR1, P#8.0];//1.Zusatz-Dw (Anzahl der Daten)
L DBW [AR1,]
L 16#FFEE // Fifo-Endekennung ?
<>I // Nein !
JC Err0 // kein Fifobereich
L 2#0000_0000_0000_0011;//Daten vorhanden/kommen raus
T DBW[ AR1, P#14.0];//4.Zusatz-Dw (Status)
L #SSDW;
+ 40;//Ab 20.Dw
SLW 3;//Pointer erzeugen
LAR1;
--- NW 4: Fifo-Daten löschen ---
L SSDW
+ 4 // Ab 2.Dw
SLW 3 // Pointer erzeugen
LAR1
AUF DB[ #DBFifo];
OPN DB[DBFifo]
L #Datensatzlaenge;
L #FifoLaenge;
*I;
L500: T #Schleife;
L Datensatzlaenge
L FifoLaenge
*I
+ 18 // 18 Datenwörter (wortorientiert)
L400: T Schleife
L 16#FFFF;
T DBW[ AR1, P#0.0];
L 0
T DBW [AR1,]
+AR1 P#2.0;
ADDAR1 P#2.0
L #Schleife;
LOOP L500;
L Schleife
LOOP L400
NETWORK
TITLE = Fehlerausgabe / RET_VAL
N006: SET;//VKE = 1 ohne Fehler !!!
L 2#0000_0000_0000_0000;
SPA Ok;
Err0: L 2#0000_0000_0000_0001;//Kein Fifobereich
SPA Err;
Err1: L 2#0000_0000_0000_0010;//SFC20-Aufruf mit Fehler
Err: CLR;//VKE = 0 bei Fehler !!!
Ok: T #RE_VAL;
SAVE;//VKE in BIE-Bit speichern
--- NW 5: Durchlaufspeicher ? ---
L PARA // Aufrufparameter
SRW 4
L 16#000D // Durchlaufspeicher ?
<>I // Nein !
JC N006
L SSDW
+ 4 // Speichern ab 4.DW
SLW 3 // Pointer erzeugen
LAR1
OPN DB[DBFifo]
L SSDW
+ 40 // 1.Speicherzelle
T DBW [AR1,] // Bringzeiger
T DBW [AR1,] // Holzeiger
L FifoLaenge // Fifo ist voll
T DBW [AR1,] // Anzahl
L PARA // Aufrufparameter
L 16#00D1 // Durchlaufspeicher mit FFFF füllen
<>I // Nein !
JC N006
L FifoLaenge // Fifo ist voll
T DBW [AR1,] // 1.Zusatz-Dw (Anzahl der Daten)
L 2#0000_0000_0000_0011 // Daten vorhanden/kommen raus
T DBW [AR1,] // 4.Zusatz-Dw (Status)
L SSDW
+ 40 // Ab 20.Dw
SLW 3 // Pointer erzeugen
LAR1
OPN DB[DBFifo]
L Datensatzlaenge
L FifoLaenge
*I
L500: T Schleife
L 16#FFFF
T DBW [AR1,]
ADDAR1 P#2.0
L Schleife
LOOP L500
--- NW 6: Fehlerausgabe / RET_VAL ---
N006: SET // VKE = 1 ohne Fehler !!!
L 2#0000_0000_0000_0000
JU Ok
Err0: L 2#0000_0000_0000_0001 // Kein Fifobereich
JU Err
Err1: L 2#0000_0000_0000_0010 // SFC20-Aufruf mit Fehler
Err: CLR // VKE = 0 bei Fehler !!!
Ok: T RE_VAL
SAVE // VKE in BIE-Bit speichern
END_FUNCTION
@@ -1,52 +1,62 @@
=== FC 79: INT_to_BCD (4stellig) [STL] ===
INTERFACE:
Input:
Int_Wert : Int
Output:
BCD_Wert : Word
InOut:
Temp:
Rest : Int
Ergebnis : Int
Constant:
Return:
Ret_Val : Void
FUNCTION "INT_to_BCD (4stellig)" : Void
TITLE = INT-Wert (bis 9999) in BCD-Wert (4-Stellig) wandeln
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
//
//
VAR_INPUT
Int_Wert : Int;
END_VAR
--- NW 1: Rückmeldung ---
L 0 // erst mal köschen
T BCD_Wert
VAR_OUTPUT
BCD_Wert : Word;
END_VAR
VAR_TEMP
Rest : Int;
Ergebnis : Int;
END_VAR
--- NW 2: Int-Wert ok ? ---
L Int_Wert
L 0
<I
BEC
BEGIN
NETWORK
TITLE = Rückmeldung
L 0;//erst mal köschen
T #BCD_Wert;
CAC
L 9999
>I
BEC
NETWORK
TITLE = Int-Wert ok ?
L #Int_Wert;
L 0;
<I;
BEB;
TAK;
L 9999;
>I;
BEB;
--- NW 3: INT-Wert wandeln ---
L Int_Wert
L 10 // Damit die linken 3 Stellen
/I
T LD0 // temporär speichen (s.o.)
NETWORK
TITLE = INT-Wert wandeln
L #Int_Wert;
L 10;//Damit die linken 3 Stellen
/I;
T %LD0;//temporär speichen (s.o.)
L Ergebnis // linken 3 Stellen
ITB // wandeln
SLW 4 // Wieder nach links schieben
T BCD_Wert // zwischen speichern
L #Ergebnis;//linken 3 Stellen
ITB;//wandeln
SLW 4;//Wieder nach links schieben
T #BCD_Wert;//zwischen speichern
L Rest // rechte Stelle
ITB // wandeln
L BCD_Wert // Zwischenergebis
OW // rechte Stelle dazu
T BCD_Wert // BDC-Ergebnis
L #Rest;//rechte Stelle
ITB;//wandeln
L #BCD_Wert;//Zwischenergebis
OW;//rechte Stelle dazu
T #BCD_Wert;//BDC-Ergebnis
NETWORK
TITLE = Ende
BE;
--- NW 4: Ende ---
BE
END_FUNCTION
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,82 +1,95 @@
=== FB 182: MAusfahrFreigabe_neu [STL] ===
INTERFACE:
Input:
Impuls : Bool // Zähl-Impuls
Vorbei_1 : Bool // BM ist an Sensor vorbeigefahren
Vorbei_2 : Bool // BM ist an Sensor vorbeigefahren
Vorbei_3 : Bool // BM ist an Sensor vorbeigefahren
Vorbei_4 : Bool // BM ist an Sensor vorbeigefahren
Vorbei_5 : Bool // BM ist an Sensor vorbeigefahren
Inks_Vorbei_1 : Int // Rest-Inks für diese Position
Inks_Vorbei_2 : Int // Rest-Inks für diese Position
Inks_Vorbei_3 : Int // Rest-Inks für diese Position
Inks_Vorbei_4 : Int // Rest-Inks für diese Position
Inks_Vorbei_5 : Int // Rest-Inks für diese Position
Output:
InOut:
Antrieb_ein : Bool // Antrieb einschalten
Static:
Dyn : Struct
Rest_Inks : Int := 1 // BM noch unterwegs [Inks]
Temp:
tAktiv : Int
Constant:
FUNCTION_BLOCK "MAusfahrFreigabe_neu"
TITLE = Ausfahrfreigabe für Pufferstrecken
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
VAR_INPUT
Impuls : Bool; // Zähl-Impuls
Vorbei_1 { ExternalWritable := 'False'} : Bool; // BM ist an Sensor vorbeigefahren
Vorbei_2 { ExternalWritable := 'False'} : Bool; // BM ist an Sensor vorbeigefahren
Vorbei_3 { ExternalWritable := 'False'} : Bool; // BM ist an Sensor vorbeigefahren
Vorbei_4 { ExternalWritable := 'False'} : Bool; // BM ist an Sensor vorbeigefahren
Vorbei_5 { ExternalWritable := 'False'} : Bool; // BM ist an Sensor vorbeigefahren
Inks_Vorbei_1 : Int; // Rest-Inks für diese Position
Inks_Vorbei_2 : Int; // Rest-Inks für diese Position
Inks_Vorbei_3 : Int; // Rest-Inks für diese Position
Inks_Vorbei_4 : Int; // Rest-Inks für diese Position
Inks_Vorbei_5 : Int; // Rest-Inks für diese Position
END_VAR
--- NW 1: Vorbei-Sensoren auswerten ---
L Inks_Vorbei_5
A Vorbei_5
JC Chek
L Inks_Vorbei_4
A Vorbei_4
JC Chek
L Inks_Vorbei_3
A Vorbei_3
JC Chek
L Inks_Vorbei_2
A Vorbei_2
JC Chek
L Inks_Vorbei_1
A Vorbei_1
JC Chek
VAR_IN_OUT
Antrieb_ein : Bool; // Antrieb einschalten
END_VAR
JU En02
VAR
Dyn : Struct
Rest_Inks : Int := 1; // BM noch unterwegs [Inks]
END_STRUCT;
END_VAR
Chek: L Dyn.Rest_Inks // Neuer Wert kleiner?
<I // Ja !
JC En02 // Ohne Speicherung weiter
CAC // Neuen Wert übernehmen
T Dyn.Rest_Inks // Wert speichern
En02: NOP 0
VAR_TEMP
tAktiv : Int;
END_VAR
--- NW 2: Rest-Inks verändern ---
AN Impuls // Von MImpulsGeber
JC En04
BEGIN
NETWORK
TITLE = Vorbei-Sensoren auswerten
L #Inks_Vorbei_5;
U #Vorbei_5;
SPB Chek;
L #Inks_Vorbei_4;
U #Vorbei_4;
SPB Chek;
L #Inks_Vorbei_3;
U #Vorbei_3;
SPB Chek;
L #Inks_Vorbei_2;
U #Vorbei_2;
SPB Chek;
L #Inks_Vorbei_1;
U #Vorbei_1;
SPB Chek;
// BT ist unterwegs:
L Dyn.Rest_Inks
+ -1
T Dyn.Rest_Inks
SPA En02;
L 0 // Minimum erreicht?
>I // Nein !
JC En04
Chek: L #Dyn.Rest_Inks ;//Neuer Wert kleiner?
<I;//Ja !
SPB En02 ;//Ohne Speicherung weiter
L 1
T Dyn.Rest_Inks // Minimum übergeben
TAK;//Neuen Wert übernehmen
T #Dyn.Rest_Inks;//Wert speichern
En04: NOP 0
En02: NOP 0;
NETWORK
TITLE = Rest-Inks verändern
UN #Impuls ;//Von MImpulsGeber
SPB En04;
--- NW 3: Antrieb einschalten ---
L Dyn.Rest_Inks
L 1 // vorhanden ?
>I // Ja !
S Antrieb_ein
//BT ist unterwegs:
L #Dyn.Rest_Inks;
+ -1;
T #Dyn.Rest_Inks;
L 0;//Minimum erreicht?
>I;//Nein !
SPB En04;
--- NW 4: Ende ---
BE
L 1;
T #Dyn.Rest_Inks;//Minimum übergeben
En04: NOP 0;
NETWORK
TITLE = Antrieb einschalten
L #Dyn.Rest_Inks;
L 1 ;//vorhanden ?
>I;//Ja !
S #Antrieb_ein;
NETWORK
TITLE = Ende
BE;
END_FUNCTION_BLOCK
@@ -1,153 +1,163 @@
=== FB 94: MBlinken [STL] ===
INTERFACE:
Input:
Impulsdauer : Bool // Impulsdauer
Error_1 : Bool
Error_2 : Bool
Error_3 : Bool
Error_4 : Bool
Error_5 : Bool
Error_6 : Bool
Error_7 : Bool
Error_8 : Bool
Error_9 : Bool
Error_10 : Bool
Output:
hAnzeige : Bool // Anzeige
InOut:
Static:
Flanke_Ausschalttakt : Bool
Kein_Blinken : Bool
Ausschalttakte : Int // Betriebsbereit ist ausgeschaltet
Temp:
Constant:
FUNCTION_BLOCK "MBlinken"
TITLE = Anzeige blinken lassen
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
VAR_INPUT
Impulsdauer : Bool; // Impulsdauer
Error_1 : Bool;
Error_2 : Bool;
Error_3 : Bool;
Error_4 : Bool;
Error_5 : Bool;
Error_6 : Bool;
Error_7 : Bool;
Error_8 : Bool;
Error_9 : Bool;
Error_10 : Bool;
END_VAR
--- NW 1: Anzeige bei Error 1-10 1-10 mal blinken lassen ---
// Anzeige ausschalten:
AN Error_1
AN Error_2
AN Error_3
AN Error_4
AN Error_5
AN Error_6
AN Error_7
AN Error_8
AN Error_9
AN Error_10
R hAnzeige
R Flanke_Ausschalttakt
R Kein_Blinken
JC NoAn
VAR_OUTPUT
hAnzeige : Bool; // Anzeige
END_VAR
// Anzeige aktivieren
A Impulsdauer
AN Kein_Blinken
= hAnzeige
A Impulsdauer
Fall Flanke_Ausschalttakt
JCN mHu
L Ausschalttakte
+ 1
T Ausschalttakte
VAR
Flanke_Ausschalttakt : Bool;
Kein_Blinken : Bool;
Ausschalttakte : Int; // Betriebsbereit ist ausgeschaltet
END_VAR
mHu: L Ausschalttakte
L 2
>=I
A Kein_Blinken
R Kein_Blinken
JC NoAn
BEGIN
NETWORK
TITLE = Anzeige bei Error 1-10 1-10 mal blinken lassen
A Kein_Blinken
JC En01
//Anzeige ausschalten:
UN #Error_1;
UN #Error_2;
UN #Error_3;
UN #Error_4;
UN #Error_5;
UN #Error_6;
UN #Error_7;
UN #Error_8;
UN #Error_9;
UN #Error_10;
R #hAnzeige;
R #Flanke_Ausschalttakt;
R #Kein_Blinken;
SPB NoAn;
CAC
L 1
>=I
A Error_1
S Kein_Blinken
JC NoAn
//Anzeige aktivieren
U #Impulsdauer;
UN #Kein_Blinken;
= #hAnzeige;
CAC
L 2
>=I
A Error_2
S Kein_Blinken
JC NoAn
U #Impulsdauer;
FN #Flanke_Ausschalttakt;
SPBN mHu;
CAC
L 3
>=I
A Error_3
S Kein_Blinken
JC NoAn
CAC
L 4
>=I
A Error_4
S Kein_Blinken
JC NoAn
CAC
L 5
>=I
A Error_5
S Kein_Blinken
JC NoAn
CAC
L 6
>=I
A Error_6
S Kein_Blinken
JC NoAn
CAC
L 7
>=I
A Error_7
S Kein_Blinken
JC NoAn
CAC
L 8
>=I
A Error_8
S Kein_Blinken
JC NoAn
CAC
L 9
>=I
A Error_9
S Kein_Blinken
JC NoAn
CAC
L 10
>=I
A Error_10
S Kein_Blinken
JC NoAn
CAC
L 10
>I
S Kein_Blinken
JC NoAn
JU En01
NoAn: L 0
T Ausschalttakte
En01: NOP 0
L #Ausschalttakte;
+ 1;
T #Ausschalttakte;
--- NW 2: Ende ---
BE
mHu: L #Ausschalttakte;
L 2;
>=I;
U #Kein_Blinken;
R #Kein_Blinken;
SPB NoAn;
U #Kein_Blinken;
SPB En01;
TAK;
L 1;
>=I;
U #Error_1;
S #Kein_Blinken;
SPB NoAn;
TAK;
L 2;
>=I;
U #Error_2;
S #Kein_Blinken;
SPB NoAn;
TAK;
L 3;
>=I;
U #Error_3;
S #Kein_Blinken;
SPB NoAn;
TAK;
L 4;
>=I;
U #Error_4;
S #Kein_Blinken;
SPB NoAn;
TAK;
L 5;
>=I;
U #Error_5;
S #Kein_Blinken;
SPB NoAn;
TAK;
L 6;
>=I;
U #Error_6;
S #Kein_Blinken;
SPB NoAn;
TAK;
L 7;
>=I;
U #Error_7;
S #Kein_Blinken;
SPB NoAn;
TAK;
L 8;
>=I;
U #Error_8;
S #Kein_Blinken;
SPB NoAn;
TAK;
L 9;
>=I;
U #Error_9;
S #Kein_Blinken;
SPB NoAn;
TAK;
L 10;
>=I;
U #Error_10;
S #Kein_Blinken;
SPB NoAn;
TAK;
L 10;
>I;
S #Kein_Blinken;
SPB NoAn;
SPA En01;
NoAn: L 0;
T #Ausschalttakte;
En01: NOP 0;
NETWORK
TITLE = Ende
BE;
END_FUNCTION_BLOCK
@@ -1,208 +1,278 @@
=== FB 1278: MHMEntnahmepuffer [STL] ===
INTERFACE:
Input:
EntnahmePuffer_Nr : Int // Aufruf für Leer-Puffer
B_LeerpufferEinfahrt : Bool // Sensor Trolley fährt in Leerpuffer
Output:
Error : Word // Störungen übergeben
InOut:
hStOk : Bool // Anzeige Start n. Störung aktivieren
Static:
Res16 : Array[1..4] of Int // Reserve
SAVE : Struct
Weichen_DB : Int // Weichen-FIFO-DB
Weichen_DW : Int // Weichen-FIFO-DW
Para : Struct // Parameter
Entnahmepuffer_DL_DB : Int // Einsprung Leerpuffer-Datenliste-DB
Entnahmepuffer_DL_DW : Int // Einsprung Leerpuffer-Datenliste-DW
Res1 : Array[1..2] of Int // Reserve
Status2 : Struct
Abruf_ist_möglich : Bool // Abruf ist möglich
Kein_Stop_mehr : Bool
Eintrag_DL_Leerliste_erfolgt : Bool // Eintrag in DLLPPuffer_leer (DB500) erfolgt
Eintrag_DL_Reinliste_erfolgt : Bool // Eintrag in DLLPPuffer_Einfahren (DB501) erfolgt
Eintrag_Abrufliste_erfolgt : Bool // Eintrag in DLLPPuffer_Ausfahren (DB502) erfolgt
Puffer : "UDLHMEntnahmePuffer" // Statische Leerpufferdaten (aus DL)
Dyn : Struct // Dynamische Daten
Status : Struct
Puffer_OUT_leer : Bool // Puffer ist leer
Puffer_OUT_hat Platz : Bool // Puffer hat noch Kapazität
Undef.Trolley_in_Schleuse_OUT : Bool // Undefinierter Trolley in Schleuse unten erkannt
Trolley_fährt_in_Schleuse_OUT : Bool // Trolley fährt in Schleuse (unten)
Trolley_wartet_Auftrag : Bool // Trolley wartet auf Auftrag (unten)
Trolley_wartet_Bereich+1 : Bool // Trolley wartet auf Bereich +1 (unten)
Trolley_fährt_aus_OUT : Bool // Trolley fährt aus (unten)
MindestZeit_ok_OUT : Bool // Schleuse ist MindestZeit geöffnet
Trolley_draussen_Out : Bool // Trolley ist ausgefahren
Trolley_OUT_nicht_in_Schleuse : Bool // Trolley fährt nicht in Schleuse
Leer_Check_OUT : Bool // Leerpuffer wird auf leer gecheckt
Alles_ausfahren : Bool // Alle Trolleys ausfahren
Leerpuffer_initialisieren : Bool // Leerpuffer initialisieren
Error_aktiv : Bool // Störung vorhanden
Reset_aktiv_OUT : Bool // Reset aktiv
TrolleyID_Einfahrt : DInt // Trolley-Nr ist eingefahren
Rueckmld : Struct
RET_VAL_BLKMOV_EntnahmePuffer : Int // Rückmeldung nach BLKMOV-Aufruf
RET_VAL_DL_EntnahmePuffer : Byte // Rückmeldung nach DatenOut-Aufruf
RET_VAL_DL_Res_OUT : Byte // Rückmeldung nach DatenOut-Aufruf
RET_VAL_DL_EntnahmePufferTrolley_IN : Byte // Rückmeldung nach DatenIN-Aufruf
RET_VAL_DL_EntnahmePufferTrolley_OUT : Byte // Rückmeldung nach DatenOut-Aufruf
Error : "UErrHMEntnahmePuffer"
Stau_Zeit : Int // Sensor B_Einfahrt ist belegt [1s]
Stop_Ursache : Word // Stop-Stelle: Nw + Position
Res500 : Array[1..206] of Int
Temp:
Quelle : Any // Zeiger, wo Rein-Daten sind
Ziel : Any // Zeiger, FIFO-Stelle
Ueb_akt : Bool // Überwachungszeit aktivieren
Weiter : Bool // Weiterschaltbedingung ist erfüllt
Warte_neu : Bool // Wartezeit neu triggern
Warte_stop : Bool // Wartezeit stoppen
Inks_Ok : Bool // Starten aufgrund der Inks erlaubt
Puffer_ist_leer : Bool // Leerpuffer zeitlang ohne Sensor
Abruf_Trolley_vorne : Bool // Abruf-Trolley ist in Schleuse
Oberen_Puffer_Freigeben : Bool
GesamtAnzahl : Int
SSDW : Int
Schleife : Word // Loopzähler
Trolley : Int
Position : Int
Constant:
FUNCTION_BLOCK "MHMEntnahmepuffer"
TITLE = Omni H&M-EntnahmePuffer-Modul
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : AE
VERSION : 0.1
//COPYRIGHT by Ingenieurbüro A.Emmert
//Ortsstr.33, D-869925 Fuchstal (Germany)
//Tel.: 0049(0)8243-960629
//
//Version: H&M Leerpuffer / 10.2025
//
//Version: Omniflow 2100 / 10.2024
//
//Schritt 0: Warten auf Trolley
//Schritt 1: Betriebsart ok/angegeben?
//Schritt 5: Mit Scanner fahren: Defaultziel ?
//Schritt 6: Scanner triggern
//Schritt 7: "DREQ" an PC senden
//Schritt 8: Warten auf PC-Antwort
//Schritt 9: PC-Antwort auswerten
//Schritt 10: Fahrtrichtung ermitteln
//Schritt 11: Ausfahren ok ?
//Schritt 12: Warten auf Pin-Signal
//Schritt 13: Weichenbereich raus bereit ?
//Schritt 14: Daten an Rausweiche übergeben
//Schritt 15: Schleuse Mindestzeit öffnen
//Schritt 16: Trolley ausgefahren ?
//Schritt 17: Trolley ist draussen
//Schritt 18: BM wurde vereinzelt
//Schritt 19: Beladezustand checken
//Schritt 20: Schleuse resetten
//Schritt 21: Reset ist zu Ende
//
VAR_INPUT
EntnahmePuffer_Nr { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // Aufruf für Leer-Puffer
B_LeerpufferEinfahrt { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Sensor Trolley fährt in Leerpuffer
END_VAR
--- NW 1: Parameter-Übergabe ---
L EntnahmePuffer_Nr
VAR_OUTPUT
Error { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Word; // Störungen übergeben
END_VAR
L 275 // Einsprung Puffer-DL
T Para.Entnahmepuffer_DL_DB // vor Aufruf übergeben!
L 0
T Para.Entnahmepuffer_DL_DW
VAR_IN_OUT
hStOk : Bool; // Anzeige Start n. Störung aktivieren
END_VAR
VAR
Res16 { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Array[1..4] of Int; // Reserve
SAVE { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Struct
Weichen_DB { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // Weichen-FIFO-DB
Weichen_DW { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // Weichen-FIFO-DW
END_STRUCT;
Para { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Struct // Parameter
Entnahmepuffer_DL_DB { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // Einsprung Leerpuffer-Datenliste-DB
Entnahmepuffer_DL_DW { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // Einsprung Leerpuffer-Datenliste-DW
Res1 { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Array[1..2] of Int; // Reserve
END_STRUCT;
Status2 { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Struct
Abruf_ist_möglich { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Abruf ist möglich
Kein_Stop_mehr { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
Eintrag_DL_Leerliste_erfolgt { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Eintrag in DLLPPuffer_leer (DB500) erfolgt
Eintrag_DL_Reinliste_erfolgt { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Eintrag in DLLPPuffer_Einfahren (DB501) erfolgt
Eintrag_Abrufliste_erfolgt { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Eintrag in DLLPPuffer_Ausfahren (DB502) erfolgt
END_STRUCT;
Puffer { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : "UDLHMEntnahmePuffer"; // Statische Leerpufferdaten (aus DL)
Dyn : Struct // Dynamische Daten
Status { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Struct
Puffer_OUT_leer { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Puffer ist leer
"Puffer_OUT_hat Platz" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Puffer hat noch Kapazität
"Undef.Trolley_in_Schleuse_OUT" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Undefinierter Trolley in Schleuse unten erkannt
Trolley_fährt_in_Schleuse_OUT { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Trolley fährt in Schleuse (unten)
Trolley_wartet_Auftrag { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Trolley wartet auf Auftrag (unten)
"Trolley_wartet_Bereich+1" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Trolley wartet auf Bereich +1 (unten)
Trolley_fährt_aus_OUT { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Trolley fährt aus (unten)
MindestZeit_ok_OUT { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Schleuse ist MindestZeit geöffnet
Trolley_draussen_Out { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Trolley ist ausgefahren
Trolley_OUT_nicht_in_Schleuse { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Trolley fährt nicht in Schleuse
Leer_Check_OUT { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Leerpuffer wird auf leer gecheckt
Alles_ausfahren { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Alle Trolleys ausfahren
Leerpuffer_initialisieren { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Leerpuffer initialisieren
Error_aktiv { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Störung vorhanden
Reset_aktiv_OUT { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Reset aktiv
END_STRUCT;
TrolleyID_Einfahrt { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : DInt; // Trolley-Nr ist eingefahren
Rueckmld { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Struct
RET_VAL_BLKMOV_EntnahmePuffer { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // Rückmeldung nach BLKMOV-Aufruf
RET_VAL_DL_EntnahmePuffer { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Byte; // Rückmeldung nach DatenOut-Aufruf
RET_VAL_DL_Res_OUT { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Byte; // Rückmeldung nach DatenOut-Aufruf
RET_VAL_DL_EntnahmePufferTrolley_IN { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Byte; // Rückmeldung nach DatenIN-Aufruf
RET_VAL_DL_EntnahmePufferTrolley_OUT { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Byte; // Rückmeldung nach DatenOut-Aufruf
END_STRUCT;
Error { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : "UErrHMEntnahmePuffer";
Stau_Zeit { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // Sensor B_Einfahrt ist belegt [1s]
Stop_Ursache { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Word; // Stop-Stelle: Nw + Position
Res500 { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Array[1..206] of Int;
END_STRUCT;
END_VAR
VAR_TEMP
Quelle : Any; // Zeiger, wo Rein-Daten sind
Ziel : Any; // Zeiger, FIFO-Stelle
Ueb_akt : Bool; // Überwachungszeit aktivieren
Weiter : Bool; // Weiterschaltbedingung ist erfüllt
Warte_neu : Bool; // Wartezeit neu triggern
Warte_stop : Bool; // Wartezeit stoppen
Inks_Ok : Bool; // Starten aufgrund der Inks erlaubt
Puffer_ist_leer : Bool; // Leerpuffer zeitlang ohne Sensor
Abruf_Trolley_vorne : Bool; // Abruf-Trolley ist in Schleuse
Oberen_Puffer_Freigeben : Bool;
GesamtAnzahl : Int;
SSDW : Int;
Schleife : Word; // Loopzähler
Trolley : Int;
Position : Int;
END_VAR
--- NW 2: Statische Entnahmepuffer-Parameter holen ---
L Puffer.EntnahmePuffer_Nr // Nummer des EntnahmePuffers
L EntnahmePuffer_Nr // Aufruf-Parameter
==I // Identisch ?
R Dyn.Error.Entnahmepuffer_DL // EntnahmePufferdatenbank fehlerhaft
R Dyn.Error.Undef_Entnahmepuffer // undefiniertes EntnahmePuffer
JC en06 // Ja !
BEGIN
NETWORK
TITLE = Parameter-Übergabe
L #EntnahmePuffer_Nr;
T "MW200" // Search-Daten
L 275 ;//Einsprung Puffer-DL
T #Para.Entnahmepuffer_DL_DB;//vor Aufruf übergeben!
L 0;
T #Para.Entnahmepuffer_DL_DW;
CALL FC "DatenOut" (SSDB:=Para.Entnahmepuffer_DL_DB, SSDW:=Para.Entnahmepuffer_DL_DW, PARA:=WORD#16#0000, SEARCHDATEN:=P#M200.0, RE_VAL:=Dyn.Rueckmld.RET_VAL_DL_EntnahmePuffer, OUTDATEN:=P#M220.0, Position:="MW196")
NETWORK
TITLE = Statische Entnahmepuffer-Parameter holen
L #Puffer.EntnahmePuffer_Nr;//Nummer des EntnahmePuffers
L #EntnahmePuffer_Nr ;//Aufruf-Parameter
==I;//Identisch ?
R #Dyn.Error.Entnahmepuffer_DL;//EntnahmePufferdatenbank fehlerhaft
R #Dyn.Error.Undef_Entnahmepuffer;//undefiniertes EntnahmePuffer
SPB en06;//Ja !
JBI G_Ok
T "MW200";//Search-Daten
A "M199.0"
JCN w060
CALL "DatenOut"
( SSDB := #Para.Entnahmepuffer_DL_DB ,
SSDW := #Para.Entnahmepuffer_DL_DW ,
PARA := WORD#16#0000 ,
SEARCHDATEN := P#M200.0 ,
RE_VAL := #Dyn.Rueckmld.RET_VAL_DL_EntnahmePuffer ,
OUTDATEN := P#M220.0 ,
Position := "MW196"
);
SET
= Dyn.Error.Entnahmepuffer_DL // EntnahmePufferdatenbank fehlerhaft
SPBI G_Ok;
L 16#A061
T Dyn.Stop_Ursache
U "M199.0";
SPBN w060;
BEU
SET;
= #Dyn.Error.Entnahmepuffer_DL;//EntnahmePufferdatenbank fehlerhaft
w060: SET
S Dyn.Error.Undef_Entnahmepuffer // undefinierter EntnahmePuffer
L 16#A061;
T #Dyn.Stop_Ursache;
L 16#0062
T Dyn.Stop_Ursache
BEA;
BEU
w060: SET;
S #Dyn.Error.Undef_Entnahmepuffer;//undefinierter EntnahmePuffer
// Kennung + Datenbytes
G_Ok: SET
R Dyn.Error.Entnahmepuffer_DL // Gefälledatenbank fehlerhaft
R Dyn.Error.Undef_Entnahmepuffer // undefinierte Gefällestrecke
L 16#0062;
T #Dyn.Stop_Ursache;
L 16#1004 // Kennung 10 + Word=04
T LW0 // Any-Kennung, Datentyp
L 20 // Datenwords speichern
T LW2 // Wiederholungen
BEA;
// Quelle-Pointer erzeugen:
L 0 // Bei Merker = 0 !
T LW4 // DB_Nummer
L 220 // Adresse
SLD 3
L 16#8300_0000 // Kennung: Merker
OD
T LD6 // Kennung, Adresse
//Kennung + Datenbytes
G_Ok: SET;
R #Dyn.Error.Entnahmepuffer_DL;//Gefälledatenbank fehlerhaft
R #Dyn.Error.Undef_Entnahmepuffer;//undefinierte Gefällestrecke
CALL SYS "BLKMOV" (SRCBLK:=Quelle, RET_VAL:=Dyn.Rueckmld.RET_VAL_BLKMOV_EntnahmePuffer, DSTBLK:=Puffer) // Datenliste-Daten speichern | #Ziel
L 16#1004;//Kennung 10 + Word=04
T %LW0;//Any-Kennung, Datentyp
L 20;//Datenwords speichern
T %LW2;//Wiederholungen
L 16#0063
T Dyn.Stop_Ursache
//Quelle-Pointer erzeugen:
L 0;//Bei Merker = 0 !
T %LW4;//DB_Nummer
L 220;//Adresse
SLD 3;
L 16#8300_0000;//Kennung: Merker
OD;
T %LD6;//Kennung, Adresse
L Dyn.Rueckmld.RET_VAL_BLKMOV_EntnahmePuffer // Rückmeldung
L 0 // Fehler vorhanden ?
<>I // Ja !
= Dyn.Error.Err_BLKMov // Error bei Block kopieren
BEC
CALL BLKMOV//Datenliste-Daten speichern
{blk_type := 'Variant'}
( SRCBLK := #Quelle ,
RET_VAL := #Dyn.Rueckmld.RET_VAL_BLKMOV_EntnahmePuffer ,
DSTBLK := #Puffer //#Ziel
);
L Puffer.Puffer_Typ // Puffertyp = 1278 (EntnahmePuffer)
L 1278 // Dieser Aufruf-FB ?
==I // Ja !
JC w061
L 16#0063;
T #Dyn.Stop_Ursache;
SET
S Dyn.Error.Undef_Entnahmepuffer // undefinierter EntnahmePuffer
L #Dyn.Rueckmld.RET_VAL_BLKMOV_EntnahmePuffer;//Rückmeldung
L 0;//Fehler vorhanden ?
<>I;//Ja !
= #Dyn.Error.Err_BLKMov ;//Error bei Block kopieren
BEB;
L 0 // EntnahmePuffer ungültig !
T Puffer.EntnahmePuffer_Nr // Nummer des EntnahmePuffers
L #Puffer.Puffer_Typ ;//Puffertyp = 1278 (EntnahmePuffer)
L 1278 ;//Dieser Aufruf-FB ?
==I;//Ja !
SPB w061;
L 16#0064
T Dyn.Stop_Ursache
SET;
S #Dyn.Error.Undef_Entnahmepuffer;//undefinierter EntnahmePuffer
BEU
L 0 ;//EntnahmePuffer ungültig !
T #Puffer.EntnahmePuffer_Nr;//Nummer des EntnahmePuffers
// Defaultwerte übergeben:
w061: NOP 0
L 16#0064;
T #Dyn.Stop_Ursache;
BEU
BEA;
en06: NOP 0
//Defaultwerte übergeben:
w061: NOP 0;
BEA;
--- NW 3: Einfahrenden Trolley verarbeiten ---
L Dyn.TrolleyID_Einfahrt
T "MD220"
L DINT#0
==I
JC NoNewT
en06: NOP 0;
// Neue Position an Gesamt-Trolley-DL übergeben:
CALL FC "Trolley_DL_Neue_Pos" (Gesamt_Trolley_DL:=Puffer.Gesamt_Trolley_DL, TrolleyID:=Dyn.TrolleyID_Einfahrt, Position:=Puffer.Puffer_Position, ShopGroup:=Dint#0, Err:="M199.0")
NETWORK
TITLE = Einfahrenden Trolley verarbeiten
L #Dyn.TrolleyID_Einfahrt;
T "MD220";
L DINT#0;
==I;
SPB NoNewT;
NoNewT: NOP 0
//Neue Position an Gesamt-Trolley-DL übergeben:
CALL "Trolley_DL_Neue_Pos"
( Gesamt_Trolley_DL := #Puffer.Gesamt_Trolley_DL ,
TrolleyID := #Dyn.TrolleyID_Einfahrt ,
Position := #Puffer.Puffer_Position ,
ShopGroup := Dint#0 ,
Err := "M199.0"
);
NoNewT: NOP 0;
--- NW 4: Error: Stau Bereich-Eingang ---
// Sensor bei Bereichs-Einfahrt bleibt belegt?:
AN B_LeerpufferEinfahrt // Sensor Trolley fährt in Bereich (kein Stau !)
R Dyn.Error.Err_Stau_Einfahrt // Stau bei Einfahrt
JC X090 // StauZeit neu aufziehen
NETWORK
TITLE = Error: Stau Bereich-Eingang
AN "1s-Impuls"
O Dyn.Error.Err_Stau_Einfahrt // Zeit bereits abgelaufen
JC Xn09
//Sensor bei Bereichs-Einfahrt bleibt belegt?:
UN #B_LeerpufferEinfahrt ;//Sensor Trolley fährt in Bereich (kein Stau !)
R #Dyn.Error.Err_Stau_Einfahrt;//Stau bei Einfahrt
SPB X090 ;//StauZeit neu aufziehen
L Dyn.Stau_Zeit // Sensor B_VorSep ist belegt [1s]
+ +1
T Dyn.Stau_Zeit // Sensor B_VorSep ist belegt [1s]
UN "1s-Impuls";
O #Dyn.Error.Err_Stau_Einfahrt;//Zeit bereits abgelaufen
SPB Xn09;
L 25 // Stau-Zeit erreicht ?
>=I // Ja !
S Dyn.Error.Err_Stau_Einfahrt // Stau bei Einfahrt (Quittierung oder Sensor=0, wegen Bürstenantrieb
JCN Xn09
L #Dyn.Stau_Zeit ;//Sensor B_VorSep ist belegt [1s]
+ +1;
T #Dyn.Stau_Zeit ;//Sensor B_VorSep ist belegt [1s]
X090: L 0 // Zeiten löschen
T Dyn.Stau_Zeit // Sensor B_VorSep ist belegt [1s]
L 25 ;//Stau-Zeit erreicht ?
>=I;//Ja !
S #Dyn.Error.Err_Stau_Einfahrt;//Stau bei Einfahrt (Quittierung oder Sensor=0, wegen Bürstenantrieb
SPBN Xn09;
Xn09: NOP 0
X090: L 0 ;//Zeiten löschen
T #Dyn.Stau_Zeit ;//Sensor B_VorSep ist belegt [1s]
Xn09: NOP 0;
--- NW 5: Ende ---
BE
NETWORK
TITLE = Ende
BE;
END_FUNCTION_BLOCK
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,91 +1,122 @@
=== FB 183: MHMÜbergang_ohne_Schleuse [STL] ===
INTERFACE:
Input:
ErrQuit : Bool
B_Anfang : Bool
B_Am_Übergang : Bool
B_Stau_Antrieb_plus : Bool
Antrieb_aktiv : Bool
Antrieb_plus_aktiv : Bool
Output:
InOut:
Antrieb_vor : Bool
Antrieb_start : Bool
Antrieb_stop : Bool
Antrieb_plus_vor : Bool
Antrieb_plus_start : Bool
Static:
Am_Übergang : "MSensoren"
Stau_Antrieb_plus : "MSensoren"
Temp:
Antrieb : Bool
Antrieb_gestoppt : Bool
Constant:
FUNCTION_BLOCK "MHMÜbergang_ohne_Schleuse"
TITLE = Übergang ohne Schleuse zu anderem Antrieb
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
//COPYRIGHT by Ingenieurbüro A.Emmert
//Ortsstr.33, D-869925 Fuchstal (Germany)
//Tel.: 0049(0)8243-960629
//
//Version: HM-Omniflow 2100 / 11.2025
//
VAR_INPUT
ErrQuit : Bool;
B_Anfang : Bool;
B_Am_Übergang : Bool;
B_Stau_Antrieb_plus : Bool;
Antrieb_aktiv : Bool;
Antrieb_plus_aktiv : Bool;
END_VAR
--- NW 1: Antrieb ansteuern ---
SET
R Antrieb_gestoppt // Falls bei Aufruf nicht gestoppt wird!
VAR_IN_OUT
Antrieb_vor : Bool;
Antrieb_start : Bool;
Antrieb_stop : Bool;
Antrieb_plus_vor : Bool;
Antrieb_plus_start : Bool;
END_VAR
// Antrieb starten:
A ErrQuit
O B_Anfang
S Antrieb_start
S Antrieb_vor
VAR
Am_Übergang { S7_SetPoint := 'False'} : "MSensoren";
Stau_Antrieb_plus : "MSensoren";
END_VAR
// Trolley am Übergang:
AN "Am_Übergang".Stat.B_Akt
JC Nix
// Antrieb stoppen:
A Stau_Antrieb_plus.Stat.B_Akt
S Antrieb_stop // Trolley stoppen
S Antrieb_gestoppt // Falls bei Aufruf nicht gestoppt wird!
JC Nix
AN Stau_Antrieb_plus.Stat.B_Akt
S Antrieb_plus_vor // Antrieb plus einschalten
SET
S Antrieb_plus_start // Antrieb plus zeitlang starten
AN Antrieb_plus_aktiv
S Antrieb_stop // Trolley stoppen
S Antrieb_gestoppt // Falls bei Aufruf nicht gestoppt wird!
JC Nix
// Antrieb einschalten:
SET
S Antrieb_vor // Trolley weiterfahren
Nix: NOP 0
VAR_TEMP
Antrieb : Bool;
Antrieb_gestoppt : Bool;
END_VAR
--- NW 2: Antrieb plus zusätzlich ansteuern ---
// Antrieb plus starten:
A B_Stau_Antrieb_plus // Sensor
O ErrQuit
S Antrieb_plus_start // Antrieb plus zeitlang starten
BEGIN
NETWORK
TITLE = Antrieb ansteuern
SET;
R #Antrieb_gestoppt;//Falls bei Aufruf nicht gestoppt wird!
// Antrieb plus einschalten:
A B_Stau_Antrieb_plus
AN Stau_Antrieb_plus.Stat.B_Akt
CLR // Nicht mehr!
S Antrieb_plus_vor // Antrieb plus einschalten
//Antrieb starten:
U #ErrQuit;
O #B_Anfang;
S #Antrieb_start;
S #Antrieb_vor;
//Trolley am Übergang:
UN #Am_Übergang.Stat.B_Akt;
SPB Nix;
--- NW 3: Trolley ist am Übergang ---
A Antrieb_aktiv
A Antrieb_plus_aktiv
AN Antrieb_gestoppt // Falls bei Aufruf nicht gestoppt wird!
= Antrieb
//Antrieb stoppen:
U #Stau_Antrieb_plus.Stat.B_Akt;
S #Antrieb_stop;//Trolley stoppen
S #Antrieb_gestoppt;//Falls bei Aufruf nicht gestoppt wird!
SPB Nix;
CALL FB "None" , (ESensor:="B_Am_Übergang", T_Ein:=1, T_Aus:=50, tein_aktiv:=1, taus_aktiv:=Antrieb)
UN #Stau_Antrieb_plus.Stat.B_Akt;
S #Antrieb_plus_vor ;//Antrieb plus einschalten
SET;
S #Antrieb_plus_start;//Antrieb plus zeitlang starten
--- NW 4: Stau im Förderer plus ---
CALL FB "None" , (ESensor:=B_Stau_Antrieb_plus, T_Ein:=100, T_Aus:=50, tein_aktiv:=1, taus_aktiv:=1)
UN #Antrieb_plus_aktiv;
S #Antrieb_stop;//Trolley stoppen
S #Antrieb_gestoppt;//Falls bei Aufruf nicht gestoppt wird!
SPB Nix;
//Antrieb einschalten:
SET;
S #Antrieb_vor;//Trolley weiterfahren
--- NW 5: Ende ---
BE
Nix: NOP 0;
NETWORK
TITLE = Antrieb plus zusätzlich ansteuern
//Antrieb plus starten:
U #B_Stau_Antrieb_plus;//Sensor
O #ErrQuit;
S #Antrieb_plus_start;//Antrieb plus zeitlang starten
//Antrieb plus einschalten:
U #B_Stau_Antrieb_plus;
UN #Stau_Antrieb_plus.Stat.B_Akt;
CLR;//Nicht mehr!
S #Antrieb_plus_vor ;//Antrieb plus einschalten
NETWORK
TITLE = Trolley ist am Übergang
U #Antrieb_aktiv;
U #Antrieb_plus_aktiv;
UN #Antrieb_gestoppt ;//Falls bei Aufruf nicht gestoppt wird!
= #Antrieb;
CALL #Am_Übergang
( ESensor := #B_Am_Übergang ,
T_Ein := 1 ,
T_Aus := 50 ,
tein_aktiv := 1 ,
taus_aktiv := #Antrieb
);
NETWORK
TITLE = Stau im Förderer plus
CALL #Stau_Antrieb_plus
( ESensor := #B_Stau_Antrieb_plus ,
T_Ein := 100 ,
T_Aus := 50 ,
tein_aktiv := 1 ,
taus_aktiv := 1
);
NETWORK
TITLE = Ende
BE;
END_FUNCTION_BLOCK
File diff suppressed because it is too large Load Diff
@@ -1,122 +1,147 @@
=== FB 100: MImpulsGeber [STL] ===
INTERFACE:
Input:
Ink_DB : Int // DB-Nr des Inkremental-Gebers (Zählerbaugruppe) Neu-Sync-Zähler
B_Zaehlen : Bool // Sensor zum Zählen
Antrieb_aktiv : Bool // Antrieb ist aktiv
Quit : Bool
Zeit_Signal_zu_lang : Time := T#350ms
Zeit_Kein_Signal : Time := T#500ms
Output:
Signal : Bool // Falls kein InkDB
InOut:
Err_Kein_Signal : Bool // Kein_Signal bei laufenden Antrieb
Err_Signal_zu_lang : Bool // Signal bei laufenden Antrieb zu lang
Static:
Sensor_entprellen : Bool
Timer_1 : TON_TIME
Timer_2 : TON_TIME
Timer_3 : TON_TIME
Temp:
Constant:
FUNCTION_BLOCK "MImpulsGeber"
TITLE = Modul Zähler über Zahnrad-Sensor Wert in Zähler-DB eintragen
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
Ink_DB { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // DB-Nr des Inkremental-Gebers (Zählerbaugruppe) Neu-Sync-Zähler
B_Zaehlen : Bool; // Sensor zum Zählen
Antrieb_aktiv : Bool; // Antrieb ist aktiv
Quit : Bool;
Zeit_Signal_zu_lang : Time := T#350ms;
Zeit_Kein_Signal : Time := T#500ms;
END_VAR
--- NW 1: Initialisierung ---
SET
R Signal
VAR_OUTPUT
Signal : Bool; // Falls kein InkDB
END_VAR
VAR_IN_OUT
Err_Kein_Signal : Bool; // Kein_Signal bei laufenden Antrieb
Err_Signal_zu_lang : Bool; // Signal bei laufenden Antrieb zu lang
END_VAR
VAR
Sensor_entprellen : Bool;
Timer_1 {InstructionName := 'TON_TIME'; LibVersion := '1.0'} : TON_TIME;
Timer_2 {InstructionName := 'TON_TIME'; LibVersion := '1.0'} : TON_TIME;
Timer_3 {InstructionName := 'TON_TIME'; LibVersion := '1.0'} : TON_TIME;
END_VAR
--- NW 2: Störungen ---
// Störung quittieren:
A Quit
R Err_Signal_zu_lang
R Err_Kein_Signal
BEGIN
NETWORK
TITLE = Initialisierung
SET;
R #Signal;
// Signal zu lang:
A B_Zaehlen // Sensor zum Zählen
A Antrieb_aktiv // Antrieb ist aktiv
AN Quit
= "M200.0"
NETWORK
TITLE = Störungen
CALL SYS "TON" (IN:="M200.0", PT:=Zeit_Signal_zu_lang, Q:=?, ET:=?)
//Störung quittieren:
U #Quit;
R #Err_Signal_zu_lang;
R #Err_Kein_Signal;
A Timer_2.Q
S Err_Signal_zu_lang
//Signal zu lang:
U #B_Zaehlen ;//Sensor zum Zählen
U #Antrieb_aktiv ;//Antrieb ist aktiv
UN #Quit;
= "M200.0";
// Kein Signal:
AN B_Zaehlen // Sensor zum Zählen
A Antrieb_aktiv // Antrieb ist aktiv
AN Quit
= "M200.0"
CALL #Timer_2
{time_type := 'Time'}
( IN := "M200.0" ,
PT := #Zeit_Signal_zu_lang
);
CALL SYS "TON" (IN:="M200.0", PT:=Zeit_Kein_Signal, Q:=?, ET:=?)
U #Timer_2.Q;
S #Err_Signal_zu_lang;
A Timer_3.Q
S Err_Kein_Signal
//Kein Signal:
UN #B_Zaehlen ;//Sensor zum Zählen
U #Antrieb_aktiv ;//Antrieb ist aktiv
UN #Quit;
= "M200.0";
CALL #Timer_3
{time_type := 'Time'}
( IN := "M200.0" ,
PT := #Zeit_Kein_Signal
);
--- NW 3: Zählen über Sensor ---
AN B_Zaehlen // Sensor zum Zählen
A Sensor_entprellen // Sperre Auswertung schon erfolgt
A Antrieb_aktiv // Antrieb ist aktiv
= "M200.0"
U #Timer_3.Q;
S #Err_Kein_Signal;
CALL SYS "TON" (IN:="M200.0", PT:=t#50ms, Q:=?, ET:=?)
NETWORK
TITLE = Zählen über Sensor
UN #B_Zaehlen ;//Sensor zum Zählen
U #Sensor_entprellen ;//Sperre Auswertung schon erfolgt
U #Antrieb_aktiv ;//Antrieb ist aktiv
= "M200.0";
A Timer_1.Q
R Sensor_entprellen // Sperre Auswertung schon erfolgt
CALL #Timer_1
{time_type := 'Time'}
( IN := "M200.0" ,
PT := t#50ms
);
AN B_Zaehlen // Sensor zum Zählen
O Sensor_entprellen
BEC
U #Timer_1.Q;
R #Sensor_entprellen ;//Sperre Auswertung schon erfolgt
SET
S Sensor_entprellen // Sperre Auswertung schon erfolgt
S Signal // Für Signal-Auswertung ohne InkDB
UN #B_Zaehlen ;//Sensor zum Zählen
O #Sensor_entprellen;
BEB;
SET;
S #Sensor_entprellen ;//Sperre Auswertung schon erfolgt
S #Signal ;//Für Signal-Auswertung ohne InkDB
--- NW 4: Übergabe an Inkrement-Baustein / max.Wert erreicht? ---
L Ink_DB
T "MW200"
NETWORK
TITLE = Übergabe an Inkrement-Baustein / max.Wert erreicht?
L #Ink_DB;
T "MW200";
L 0 // Sinnvolle Angabe?
<=I // Nein!
BEC // Also nur Signal-Auswertung !
L 0;//Sinnvolle Angabe?
<=I;//Nein!
BEB;//Also nur Signal-Auswertung !
OPN DB["MW200"] // Zähler-DB öffnen
AUF DB[ "MW200"] ;//Zähler-DB öffnen
L DBD80
+ DINT#1 // Aktueller Zählerwert +1
T DBD80
L %DBD80;
+ DINT#1 ;//Aktueller Zählerwert +1
T %DBD80;
L DBD80 // Aktueller Zählerwert
L DBD76 // Max. Wert erreicht ?
<=D // Nein !
R DBX74.5 // Ohne Flag-Lauf wurde beendet
R DBX74.4 // Flag-Lauf wurde beendet
BEC
L %DBD80 ;//Aktueller Zählerwert
L %DBD76 ;//Max. Wert erreicht ?
<=D ;//Nein !
R %DBX74.5 ;//Ohne Flag-Lauf wurde beendet
R %DBX74.4 ;//Flag-Lauf wurde beendet
BEB;
-D // Restwert als Startwert nehmen !
T DBD80 // Keine Inkrementalgeber verbaut, sondern nur Sensor
-D ;//Restwert als Startwert nehmen !
T %DBD80 ;//Keine Inkrementalgeber verbaut, sondern nur Sensor
AN DBX74.3 // Umschaltung Zähl-Lauf ohne-mit-ohne Flag
= DBX74.5 // Ohne Flag-Lauf wurde beendet
A DBX74.3 // Umschaltung Zähl-Lauf ohne-mit-ohne Flag
= DBX74.4 // Flag-Lauf wurde beendet
UN %DBX74.3 ;//Umschaltung Zähl-Lauf ohne-mit-ohne Flag
= %DBX74.5 ;//Ohne Flag-Lauf wurde beendet
U %DBX74.3 ;//Umschaltung Zähl-Lauf ohne-mit-ohne Flag
= %DBX74.4 ;//Flag-Lauf wurde beendet
AN DBX74.3 // Umschaltung Zähl-Lauf ohne-mit-ohne Flag
= DBX74.3
UN %DBX74.3 ;//Umschaltung Zähl-Lauf ohne-mit-ohne Flag
= %DBX74.3;
// Zähler auf 000 setzen ?:
AN DBX74.6 // Zähler Zero-Load
BEC
//Zähler auf 000 setzen ?:
UN %DBX74.6 ;//Zähler Zero-Load
BEB;
SET
R DBX74.6
SET;
R %DBX74.6;
L 0
T DBD80 // Zählerwert zum Setzen
L 0;
T %DBD80 ;//Zählerwert zum Setzen
NETWORK
TITLE = Ende
BE;
--- NW 5: Ende ---
BE
END_FUNCTION_BLOCK
@@ -1,87 +1,94 @@
=== FB 91: MSensoren [STL] ===
INTERFACE:
Input:
ESensor : Bool // Eingang des zu überwachenden Sensors
T_Ein : Int := 1 // Einschaltzeitverzögerung (*100ms)
T_Aus : Int := 5 // Ausschaltzeitverzögerung (*100ms)
tein_aktiv : Bool := TRUE // Einschaltzeit aktivieren
taus_aktiv : Bool := TRUE // Ausschaltzeit aktivieren
Output:
InOut:
Static:
Stat : "USensor_Ein_Aus" // Status des Endschalters
Temp:
Constant:
FUNCTION_BLOCK "MSensoren"
TITLE = Ein-/Ausschaltverzögerung für Entprellung der Sensoren
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : EAN
VERSION : 0.1
VAR_INPUT
ESensor { ExternalWritable := 'False'} : Bool; // Eingang des zu überwachenden Sensors
T_Ein { ExternalWritable := 'False'} : Int := 1; // Einschaltzeitverzögerung (*100ms)
T_Aus { ExternalWritable := 'False'} : Int := 5; // Ausschaltzeitverzögerung (*100ms)
tein_aktiv { ExternalWritable := 'False'} : Bool := TRUE; // Einschaltzeit aktivieren
taus_aktiv { ExternalWritable := 'False'} : Bool := TRUE; // Ausschaltzeit aktivieren
END_VAR
--- NW 1: Zeitwert löschen ---
A ESensor
A Stat.B_Akt
O
AN ESensor
AN Stat.B_Akt
JCN Nw02
VAR
Stat { ExternalWritable := 'False'} : "USensor_Ein_Aus"; // Status des Endschalters
END_VAR
tdel: L 0 // Zeitwert löschen
T Stat.T_Zelle
BEU
--- NW 2: Einschaltzeit abgelaufen ? ---
Nw02: L Stat.T_Ein_Akt // Gewollter Zeitwert
L 9999 // angegeben ?
<>I // Ja !
JC w020
L T_Ein // Sollwert übergeben
T Stat.T_Ein_Akt // Gewollter Zeitwert
w020: A Stat.B_Akt
JC Nw03
L Stat.T_Zelle // Aktueller Zeitwert
L Stat.T_Ein_Akt // Gewollter Zeitwert erreicht ?
>=I
S Stat.B_Akt // Sensor ist nach Einschaltzeit aktiv
JC tdel // Zeit löschen
JU Nw04
--- NW 3: Ausschaltzeit abgelaufen ? ---
Nw03: L Stat.T_Aus_Akt // Gewollter Zeitwert
L 9999 // angegeben ?
<>I // Ja !
JC w030
L T_Aus // Sollwert übergeben
T Stat.T_Aus_Akt // Gewollter Zeitwert
w030: AN Stat.B_Akt
JC Nw04
L Stat.T_Zelle // Aktueller Zeitwert
L Stat.T_Aus_Akt // Gewollter Zeitwert erreicht ?
>=I
R Stat.B_Akt // Sensor ist nach Ausschaltzeit nicht mehr aktiv
JC tdel // Zeit löschen
BEGIN
NETWORK
TITLE = Zeitwert löschen
U #ESensor;
U #Stat.B_Akt;
O;
UN #ESensor;
UN #Stat.B_Akt;
SPBN Nw02;
--- NW 4: Zeit läuft ---
Nw04: AN "100ms-Impuls" // nur als Impuls
O
AN Stat.B_Akt // Einschaltzeit läuft
AN tein_aktiv // aber Zeit einfrieren
O
A Stat.B_Akt // Ausschaltzeit läuft
AN taus_aktiv // aber Zeit einfrieren
BEC
tdel: L 0;//Zeitwert löschen
T #Stat.T_Zelle;
L Stat.T_Zelle
L "MW2"
+I
T Stat.T_Zelle
BEA;
NETWORK
TITLE = Einschaltzeit abgelaufen ?
Nw02: L #Stat.T_Ein_Akt;//Gewollter Zeitwert
L 9999;//angegeben ?
<>I;//Ja !
SPB w020;
L #T_Ein;//Sollwert übergeben
T #Stat.T_Ein_Akt;//Gewollter Zeitwert
--- NW 5: Ende ---
BE
w020: U #Stat.B_Akt;
SPB Nw03;
L #Stat.T_Zelle;//Aktueller Zeitwert
L #Stat.T_Ein_Akt;//Gewollter Zeitwert erreicht ?
>=I;
S #Stat.B_Akt;//Sensor ist nach Einschaltzeit aktiv
SPB tdel;//Zeit löschen
SPA Nw04;
NETWORK
TITLE = Ausschaltzeit abgelaufen ?
Nw03: L #Stat.T_Aus_Akt;//Gewollter Zeitwert
L 9999;//angegeben ?
<>I;//Ja !
SPB w030;
L #T_Aus;//Sollwert übergeben
T #Stat.T_Aus_Akt;//Gewollter Zeitwert
w030: UN #Stat.B_Akt;
SPB Nw04;
L #Stat.T_Zelle;//Aktueller Zeitwert
L #Stat.T_Aus_Akt;//Gewollter Zeitwert erreicht ?
>=I;
R #Stat.B_Akt;//Sensor ist nach Ausschaltzeit nicht mehr aktiv
SPB tdel;//Zeit löschen
NETWORK
TITLE = Zeit läuft
Nw04: UN "100ms-Impuls";//nur als Impuls
O;
UN #Stat.B_Akt;//Einschaltzeit läuft
UN #tein_aktiv;//aber Zeit einfrieren
O;
U #Stat.B_Akt;//Ausschaltzeit läuft
UN #taus_aktiv;//aber Zeit einfrieren
BEB;
L #Stat.T_Zelle;
L "MW2";
+I;
T #Stat.T_Zelle;
NETWORK
TITLE = Ende
BE;
END_FUNCTION_BLOCK

Some files were not shown because too many files have changed in this diff Show More