Files

2152 lines
88 KiB
Plaintext

=== FB 276: MHM_Arbeitsplatz [STL] ===
INTERFACE:
Input:
Arbeitsplatz_Nr : Word // Aufruf für Arbeitsplatz
ErrQuit : Bool // Ablaufstörung quittieren
B_In_Schleuse_Vorstau : Bool // Sensor Trolley ist in Schleuse Vorstau
B_an_Platz_1 : Bool // Sensor Trolley ist an Platz 1
B_an_Platz_2 : Bool // Sensor Trolley ist an Platz 2
B_an_Platz_3 : Bool // Sensor Trolley ist an Platz 3
B_Nachstau_Einfahrt : Bool // Sensor Trolley fährt in Nachstau
B_Nachstau_Ausfahrt : Bool // Sensor Trolley ist am Nachstau-Sep
Y_Vorstau : Bool // Schleuse Vorstau geöffnet
Y_Platz_1 : Bool // Stopper Platz 1 geöffnet
Y_Platz_2 : Bool // Stopper Platz 2 geöffnet
Y_Platz_3 : Bool // Stopper Platz 3 geöffnet
Antrieb_Vorstau_aktiv : Bool // Vorstau-Antrieb aktiv
Antrieb_Nachstau_1_aktiv : Bool // Nachstau 1-Antrieb aktiv
Antrieb_Nachstau_2_aktiv : Bool // Nachstau 2-Antrieb aktiv
Antrieb_Nachstau_3_aktiv : Bool // Nachstau 3-Antrieb aktiv
Output:
Y_Weiche_zu_Platz_1 : Bool // Weiche zu Platz 1
Y_Weiche_zu_Platz_2 : Bool // Weiche zu Platz 2
Y_Weiche_von_Platz_1 : Bool // Weiche von Platz 1
Y_Weiche_von_Platz_2 : Bool // Weiche von Platz 2
Antrieb_Nachstau_1_vor : Bool // Nachstau 1-Antrieb einschalten
Antrieb_Nachstau_2_vor : Bool // Nachstau 2-Antrieb einschalten
Trolley_hat_ABS_erreicht : Bool
Reset_Vorstau_Schleuse : Bool // Reset-Impuls an Vorstau-Schleuse
Reset_Platz_1_Stopper : Bool // Reset-Impuls an Platz 1-Stopper
Reset_Platz_2_Stopper : Bool // Reset-Impuls an Platz 2-Stopper
Reset_Platz_3_Stopper : Bool // Reset-Impuls an Platz 3-Stopper
Error : Word // Störungen übergeben
InOut:
Antrieb_Vorstau_vor : Bool // Vorstau-Antrieb einschalten
Antrieb_Nachstau_3_vor : Bool // Nachstau 3-Antrieb einschalten
hStOk : Bool // Anzeige Start n. Störung aktivieren
Static:
Para : Struct // Parameter
AMR_DL_DB : Int // Einsprung AMR-Datenliste-DB
AMR_DL_DW : Int // Einsprung AMR-Datenliste-DW
Reserve : Array[1..3] of Int // Reserve
Arbeitsplatz : "UDLHM_Arbeitsplatz" // Statische Arbeitsplatzdaten (aus DL)
Dyn : Struct // Dynamische Daten
SS : Struct // Schnittstelle von/zu ausserhalb
>Trolley_ist_in_Vorstau_eingefahren : Bool // IN: Trolley ist in Vorstau eingefahren
PC>Trolley_zum_Platz_1_starten : Bool // Von PC: Trolley zum Platz 1 starten
PC>Trolley_zum_Platz_2_starten : Bool // Von PC: Trolley zum Platz 2 starten
PC>Trolley_zum_Platz_3_starten : Bool // Von PC: Trolley zum Platz 2 starten
Trolley_ist_in_Platz_1_eingefahren>PC : Bool // An PC: Trolley ist in Platz 1 eingefahren
Trolley_ist_in_Platz_2_eingefahren>PC : Bool // An PC: Trolley ist in Platz 2 eingefahren
Trolley_ist_in_Platz_3_eingefahren>PC : Bool // An PC: Trolley ist in Platz 3 eingefahren
Externe_Anzeige : Bool // Von PC: Externe gelbe Anzeige aktivieren
Frei610 : Bool
PC>Trolley_an_Platz_1_freigegeben : Bool // Von PC: Trolley ist an Platz 1 beladen / freigegeben
PC>Trolley_an_Platz_2_freigegeben : Bool // Von PC: Trolley ist an Platz 2 beladen / freigegeben
PC>Trolley_an_Platz_3_freigegeben : Bool // Von PC: Trolley ist an Platz 3 beladen / freigegeben
Trolley_ist_aus_Platz_1_ausgefahren>PC : Bool // An PC: Trolley ist aus Platz 1 ausgefahren
Trolley_ist_aus_Platz_2_ausgefahren>PC : Bool // An PC: Trolley ist aus Platz 2 ausgefahren
Trolley_ist_aus_Platz_3_ausgefahren>PC : Bool // An PC: Trolley ist aus Platz 3 ausgefahren
Status : Struct // Intern
Arbeitsplatz_aktiviert : Bool // ABP durch PC aktiviert
Trolley_fährt_in_Vorstau : Bool // Trolley fährt in Vorstau
Trolley_fährt_nach_Platz_1 : Bool // Trolley fährt nach Platz 1
Trolley_fährt_nach_Platz_2 : Bool // Trolley fährt nach Platz 2
Trolley_fährt_nach_Platz_3 : Bool // Trolley fährt nach Platz 3
Trolley_fährt_aus_Platz_1 : Bool // Trolley fährt aus Nachstau 1
Trolley_fährt_aus_Platz_2 : Bool // Trolley fährt aus Nachstau 2
Trolley_fährt_aus_Platz_3 : Bool // Trolley fährt aus Nachstau 3
Trolley_fährt_in_Nachstau : Bool
Trolley_hat_Nachstau_erreicht : Bool // Trolley ist in Nachstau eingefahren
Leer_Check : Bool // Vorstau-Leercheck aktiv
Error_aktiv : Bool // Störung vorhanden
Beladung_erfolgt : Bool // Für Prio (3 Minuten aktiv)
Reset_zum_Beladeplatz_aktiv : Bool // Reset Sk zum Beladeplatz aktiv
Reset_Platz_1_aktiv : Bool // Reset Platz 1 aktiv
Reset_Platz_2_aktiv : Bool // Reset Platz 2 aktiv
Reset_Platz_3_aktiv : Bool // Reset Platz 3 aktiv
Reset_aus_Beladeplatz_aktiv : Bool // Reset Sk aus Beladeplatz aktiv
HMI : Struct
Res_Trolleys : Int // Anzahl reservierte Trolleys (IN:PLC, OUT:PLC)
Frei_Plätze : Int // Freiplätze für Trolleys (IN:PLC, OUT:PLC)
Vorstau_Trolleys : Int // Anzahl Vorstau-Trolleys (IN:PLC, OUT:PLC)
Vorstau_resetten : Bool := 1 // Vorstau-Schleuse resetten (IN:HMI, Out:PLC)
Platz_1_resetten : Bool // Platz 1-Schleuse resetten (IN:HMI, Out:PLC)
Platz_2_resetten : Bool // Platz 2-Schleuse resetten (IN:HMI, Out:PLC)
Platz_3_resetten : Bool // Platz 3-Schleuse resetten (IN:HMI, Out:PLC)
Sk_zu_Plätze_resetten : Bool := 1
Sk_aus_Plätze_resetten : Bool := 1
Sk_zum_Beladeplatz : "USk_Omni" // Status der Schrittkette
Sk_aus_Beladeplatz : "USk" // Status der Schrittkette
Rueckmld : Struct
RET_VAL_BLKMOV_ABP : Int // Rückmeldung nach BLKMOV-Aufruf
RET_VAL_DL_ABP : Byte // Rückmeldung nach DatenOut-Aufruf
RET_VAL_SendFIFO : Byte
Error : "UErrHM_Arbeitsplatz"
Mindestzeit_Rein : Int // Mindestzeit [s]
Stop_Ursache_Rein : Word // Stop-Stelle: Nw + Position
Mindestzeit_Raus : Int // Mindestzeit [s]
Stop_Ursache_Raus : Word // Stop-Stelle: Nw + Position
Vorstau : Struct
Anzahl_Reservierungen : Int // Anzahl der reservierten Trolleys
Anzahl_Leertrolleys : Int // Anzahl der vorhandenen Leertrolleys
Freigabe_an_Stopper : Bool // Freigabe an Ziel-FC
Trolley_fährt_aus : Bool // Trolley hat Stopper verlassen
Gespeichert_Anzahl : Int // Aufgrund dieser Anzahl Eintrag in DL
Reserve : Array[1..6] of Int
Platz_1 : Struct
Beladestelle_wurde_angefahren : Bool // Beladestelle wurde angefahren
Trolley_ist_an_Beladung : Bool // Trolley ist an Beladestelle
Trolley_hat_Arbeitsplatz_verlassen : Bool // Trolley hat Arbeitsplatz verlassen (Draussen-FC)
Beladestelle_wurde_entsorgt : Bool // Beladestelle wurde entsorgt
Freigabe_an_Stopper : Bool // Freigabe an Ziel-FC
Trolley_fährt_aus : Bool // Trolley hat Stopper verlassen
TrolleyID_ausgefahren : DInt
Reserve : Array[1..2] of Int
Platz_2 : Struct
Beladestelle_wurde_angefahren : Bool // Beladestelle wurde angefahren
Trolley_ist_an_Beladung : Bool // Trolley ist an Beladestelle
Trolley_hat_Arbeitsplatz_verlassen : Bool // Trolley hat Arbeitsplatz verlassen (Draussen-FC)
Beladestelle_wurde_entsorgt : Bool // Beladestelle wurde entsorgt
Freigabe_an_Stopper : Bool // Freigabe an Ziel-FC
Trolley_fährt_aus : Bool // Trolley hat Stopper verlassen
TrolleyID_ausgefahren : DInt
Reserve : Array[1..2] of Int
Platz_3 : Struct
Beladestelle_wurde_angefahren : Bool // Beladestelle wurde angefahren
Trolley_ist_an_Beladung : Bool // Trolley ist an Beladestelle
Trolley_hat_Arbeitsplatz_verlassen : Bool // Trolley hat Arbeitsplatz verlassen (Draussen-FC)
Beladestelle_wurde_entsorgt : Bool // Beladestelle wurde entsorgt
Freigabe_an_Stopper : Bool // Freigabe an Ziel-FC
Trolley_fährt_aus : Bool // Trolley hat Stopper verlassen
TrolleyID_ausgefahren : DInt
Reserve : Array[1..2] of Int
LeerCheckZeit : Int
BeladungErfolgtZeit : Int
Simulation : Struct
Aktiviert : Bool // Von Simulation
Einen Trolley ausfahren : Bool // Von Simulation
Neustart : Bool // Von Simulation
Trolleys bereit : Bool // An SImulation
Trolley gestartet : Bool // An Simulation
Trolley 1 gefahren : Bool // Intern
Trolley 2 gefahren : Bool // Intern
Trolley 3 gefahren : Bool // Intern
Res200 : Array[1..7] of Int
Temp:
Quelle : Any // Zeiger, wo Rein-Daten sind
Ueb_akt : Bool // Überwachungszeit aktivieren
Weiter : Bool // Weiterschaltbedingung ist erfüllt
Warte_neu : Bool // Wartezeit neu triggern
Warte_stop : Bool // Wartezeit stoppen
Raus_Ueb_akt : Bool // Überwachungszeit aktivieren
Raus_Weiter : Bool // Weiterschaltbedingung ist erfüllt
Raus_Warte_neu : Bool // Wartezeit neu triggern
Raus_Warte_stop : Bool // Wartezeit stoppen
Vorstau_ist_leer : Bool // Vorstau zeitlang ohne Sensor
MindestZeit_Rein_Ok : Bool
MindestZeit_Raus_Ok : Bool
TrolleyID_Ok : Bool
Error_SendFIFO : Bool
Position : Int
BenötigteLeerTrolleys : Int // Zusätzlich benötigte Trolleys
Constant:
--- NW 1: Parameter-Übergabe ---
L Arbeitsplatz_Nr
L 276 // Einsprung AMR-DL
T Para.AMR_DL_DB // vor Aufruf übergeben!
L 0
T Para.AMR_DL_DW
--- NW 2: Anzeige OP ---
L 252 // Bereichsstop aktiv
AN Dyn.Sk_zum_Beladeplatz.Bereich_ok // Also: Bereichsstop / Not-Aus
JC w010
L 253
AN Dyn.Sk_zum_Beladeplatz.Auto_akt // Keine Betriebsart
AN Dyn.Sk_zum_Beladeplatz.Hand_akt
JC w010
L 255 // Handbetrieb aktiv
A Dyn.Sk_zum_Beladeplatz.Hand_akt
JC w010
L Dyn.Sk_zum_Beladeplatz.Akt_Schritt // Aktiver Schritt
w010: T Dyn.Sk_zum_Beladeplatz.OP_Schritt
--- NW 3: Out-Bits zum Zurücksetzen ---
SET
// R #Y_Weiche_zu_Platz_1
// R #Y_Weiche_zu_Platz_2
// R #Y_Weiche_von_Platz_1
// R #Y_Weiche_von_Platz_2
R Antrieb_Nachstau_1_vor
R Antrieb_Nachstau_2_vor
R Antrieb_Nachstau_3_vor
R Vorstau_ist_leer
R Reset_Vorstau_Schleuse
R Reset_Platz_1_Stopper // Nur 1 Zyklus
R Reset_Platz_2_Stopper
R Reset_Platz_3_Stopper
AN Y_Vorstau
R Trolley_hat_ABS_erreicht
SET // Jeden Zyklus neu
--- NW 4: HMI-Zeug ---
// Von HMI:
// Platz-Resets siehe dort!
A Dyn.HMI.Vorstau_resetten
R Dyn.HMI.Vorstau_resetten
JCN HMI_B // Negierter Sprung
SET
S Dyn.Status.Leer_Check
// LeerTrolley-Anforderung löschen:
CALL FC "AMR_LeerTrolley_Anforderung_Del" (ArbeitsPlatz:=Arbeitsplatz_Nr, Gespeicherte_LeerTrolleys:=Dyn.Vorstau.Gespeichert_Anzahl)
HMI_B: A Dyn.HMI."Sk_zu_Plätze_resetten"
R Dyn.HMI."Sk_zu_Plätze_resetten"
S Dyn.Sk_zum_Beladeplatz.Reset // SK zurücksetzen
A Dyn.HMI."Sk_aus_Plätze_resetten"
R Dyn.HMI."Sk_aus_Plätze_resetten"
S Dyn.Sk_aus_Beladeplatz.Reset // SK zurücksetzen
CLR
// An HMI:
L Dyn.Vorstau.Anzahl_Leertrolleys
T Dyn.HMI.Vorstau_Trolleys
L Dyn.Vorstau.Anzahl_Reservierungen
T Dyn.HMI.Res_Trolleys
L Arbeitsplatz.MaxAnzahl
L Dyn.Vorstau.Anzahl_Reservierungen
-I
L Dyn.Vorstau.Anzahl_Leertrolleys
-I
T Dyn.HMI."Frei_Plätze"
L 0
>=I
JC Anzahl_ok
T Dyn.HMI."Frei_Plätze" // Minimum übergeben
Anzahl_ok: L Dyn.HMI."Frei_Plätze"
T "BenötigteLeerTrolleys"
--- NW 5: Leer-Check im Vorstau ---
AN Dyn.Status.Leer_Check
JC RLCT
// Leer-Check aktiv:
A B_In_Schleuse_Vorstau
O Y_Vorstau
JC RLCT
AN B_In_Schleuse_Vorstau
S Antrieb_Vorstau_vor
AN Antrieb_Vorstau_aktiv
ON "1s-Impuls"
JC LCE
L Dyn.LeerCheckZeit
+ 1
T Dyn.LeerCheckZeit
// Leer-Check fertig ?
L 60 // 60s rum?
<I // Nein!
JC LCE
SET
R Dyn.Status.Leer_Check
L 0 // Keine Trolleys mehr vorhanden
T Dyn.Vorstau.Anzahl_Leertrolleys
// LeerCheck-Zeit neu aufziehen:
RLCT: L 0
T Dyn.LeerCheckZeit
LCE: NOP 0
--- NW 6: Beladung ist erfolgt (für Prio) ---
L Dyn.Vorstau.Anzahl_Reservierungen
L 0 // Trolleys zum ABP unterwegs?
>I // Ja !
O B_Nachstau_Ausfahrt // Trolley wartet auf Ausfahrt
S Dyn.Status.Beladung_erfolgt // Zusätzlich beim Starten aus ABP!
AN Dyn.Status.Beladung_erfolgt
JC RBET
A "DAMR_Bereich".A01_UH06.BereichErr
ON "1s-Impuls"
JC BEE
L Dyn.BeladungErfolgtZeit
+ 1
T Dyn.BeladungErfolgtZeit
// Keine erneute Beladung fertig ?
L 300 // 5 min rum?
<I // Nein!
JC BEE
SET
R Dyn.Status.Beladung_erfolgt
// LeerCheck-Zeit neu aufziehen:
RBET: L 0
T Dyn.BeladungErfolgtZeit
BEE: NOP 0
--- NW 7: Zusätzlich benötigte Leertrolleys ---
// Bei vielen benötigten Leer-Trolleys, Arbeitsplätze mit einbeziehen:
L Dyn.HMI."Frei_Plätze"
L 6
>=I
JCN Normal // Negierter Sprung
A Dyn.Status."Trolley_fährt_nach_Platz_1"
O Dyn.Platz_1.Trolley_ist_an_Beladung
JC ABP2 // Also kein weiterer LT benötigt
L "BenötigteLeerTrolleys"
+ 1 // Weiterer Trolley benötigt
T "BenötigteLeerTrolleys" // Zusätzlich benötigte Trolleys
ABP2: A Dyn.Status."Trolley_fährt_nach_Platz_2"
O Dyn.Platz_2.Trolley_ist_an_Beladung
JC ABP3 // Also kein weiterer LT benötigt
L "BenötigteLeerTrolleys"
+ 1 // Weiterer Trolley benötigt
T "BenötigteLeerTrolleys" // Zusätzlich benötigte Trolleys
ABP3: A Dyn.Status."Trolley_fährt_nach_Platz_3"
O Dyn.Platz_3.Trolley_ist_an_Beladung
JC Normal // Also kein weiterer LT benötigt
L "BenötigteLeerTrolleys"
+ 1 // Weiterer Trolley benötigt
T "BenötigteLeerTrolleys" // Zusätzlich benötigte Trolleys
Normal: NOP 0
--- NW 8: LeerTrolley-Anforderung ---
A Dyn.Status.Arbeitsplatz_aktiviert
AN Dyn.Status.Leer_Check
JC Anforderung
L 0 // Löschen, damit keine Anforderung
T "BenötigteLeerTrolleys"
T Dyn.Vorstau.Gespeichert_Anzahl
Anforderung: CALL FC "AMR_LeerTrolley_Anforderung" (LeerTrolleys_benötigt:="BenötigteLeerTrolleys", ArbeitsPlatz:=Arbeitsplatz_Nr, Gespeicherte_LeerTrolleys:=Dyn.Vorstau.Gespeichert_Anzahl)
--- NW 9: Rein-Schrittkette zurücksetzen ---
AN Dyn.HMI."Sk_zu_Plätze_resetten"
AN Dyn.Sk_zum_Beladeplatz.Reset // SK zurücksetzen
JC en04
// Schrittkette zurücksetzen:
L 0 // Schritt 0: Warten
T Dyn.Sk_zum_Beladeplatz.Akt_Schritt
L 0 // Zeitwert löschen
T Dyn.Sk_zum_Beladeplatz.Terr_Zelle
T Dyn.Sk_zum_Beladeplatz.Tok_Zelle
T Dyn.Mindestzeit_Rein
SET
R Dyn.HMI."Sk_zu_Plätze_resetten"
R Dyn.Error.Err_BLKMov // Error bei Block kopieren
R Dyn.Sk_zum_Beladeplatz.Reset // SK zurücksetzen
R Dyn.Sk_zum_Beladeplatz.Err_Schritt // Undefinierter Schritt
R Dyn.Sk_zum_Beladeplatz.Err_Uebzeit // Sofort weiter !
S Dyn.Sk_zum_Beladeplatz.Reset_Akt // Reset ist aktiv
S Reset_Vorstau_Schleuse
R Dyn.Vorstau."Trolley_fährt_aus"
R Dyn.Vorstau.Freigabe_an_Stopper
SET
R Dyn.Error.ABP_DL // AMR-Datenliste fehlerhaft
R Dyn.Error.Undef_AMR // undefinierter Arbeitsplatz
R Dyn.Error.Err_Uebzeit_SK_Rein // Überwachungzeit ist abgelaufen
R Dyn.Error.Err_Schritt_Sk_Rein // Schritt-Nummer ist nicht definiert
R Dyn.Error.Err_BLKMov
// Defaultwerte übergeben:
L 0 // Damit statische Werte neu aus Datenbank geholt werden !
T Arbeitsplatz.ABP_Nr // Nummer des Arbeitsplatzes
BEU
en04: NOP 0
--- NW 10: Raus-Schrittkette zurücksetzen ---
AN Dyn.HMI."Sk_aus_Plätze_resetten"
AN Dyn.Sk_aus_Beladeplatz.Reset // SK zurücksetzen
JC en05
// Schrittkette zurücksetzen:
L 0 // Schritt 0: Warten
T Dyn.Sk_aus_Beladeplatz.Akt_Schritt
L 0 // Zeitwert löschen
T Dyn.Sk_aus_Beladeplatz.Terr_Zelle
T Dyn.Sk_aus_Beladeplatz.Tok_Zelle
T Dyn.Mindestzeit_Raus
SET
R Dyn.HMI."Sk_aus_Plätze_resetten"
R Dyn.Sk_aus_Beladeplatz.Reset // SK zurücksetzen
R Dyn.Sk_aus_Beladeplatz.Err_Schritt // Undefinierter Schritt
R Dyn.Sk_aus_Beladeplatz.Err_Uebzeit // Sofort weiter !
S Dyn.Sk_aus_Beladeplatz.Reset_Akt // Reset ist aktiv
S Reset_Platz_1_Stopper
S Dyn.Status.Reset_Platz_1_aktiv
R Dyn.Platz_1.Freigabe_an_Stopper
S Reset_Platz_2_Stopper
S Dyn.Status.Reset_Platz_2_aktiv
R Dyn.Platz_2.Freigabe_an_Stopper
S Reset_Platz_3_Stopper
S Dyn.Status.Reset_Platz_3_aktiv
R Dyn.Platz_3.Freigabe_an_Stopper
SET
R Dyn.Error.Err_Uebzeit_SK_Raus // Überwachungzeit ist abgelaufen
R Dyn.Error.Err_Schritt_Sk_Raus // Schritt-Nummer ist nicht definiert
BEU
en05: NOP 0
--- NW 11: Störungen nach Außen übergeben ---
L 0
T "MW200"
A Dyn.Error.ABP_DL // AMR-Datenliste fehlerhaft
= "M200.0"
A Dyn.Error.Undef_AMR // undefinierter Arbeitsplatz
= "M200.1"
A Dyn.Error.Err_BLKMov // Error bei Block kopieren
= "M200.2"
A Dyn.Sk_zum_Beladeplatz.Err_Uebzeit // Überwachungzeit ist abgelaufen
= Dyn.Error.Err_Uebzeit_SK_Rein
= "M200.3"
A Dyn.Sk_zum_Beladeplatz.Err_Schritt // Schritt-Nummer ist nicht definiert
= Dyn.Error.Err_Schritt_Sk_Rein
= "M200.4"
A Dyn.Sk_aus_Beladeplatz.Err_Uebzeit
= Dyn.Error.Err_Uebzeit_SK_Raus
= "M200.5"
A Dyn.Sk_aus_Beladeplatz.Err_Schritt
= "M200.6"
A Dyn.Error.Err_Platz_1
= "M200.7"
A Dyn.Error.Err_Platz_2
= "M201.0"
A Dyn.Error.Err_Platz_3
= "M201.1"
A Dyn.Error.Reset_Einfahren_akt
= "M201.2"
A Dyn.Error.Reset_Platz_1_akt
= "M201.3"
A Dyn.Error.Reset_Platz_2_akt
= "M201.4"
A Dyn.Error.Reset_Platz_2_akt
= "M201.5"
A Dyn.Error.Reset_Ausfahren_akt
= "M201.6"
CLR
= "M201.7"
L "MW200"
T Error // Schnittstelle nach Außen
// Störung vorhanden:
L 0
<>I // Ja !
= Dyn.Status.Error_aktiv
S hStOk
// Störungen pro Zyklus neu erzeugen:
SET
R Dyn.Error.ABP_DL // AMR-Datenliste fehlerhaft
R Dyn.Error.Undef_AMR // undefinierter Arbeitsplatz
R Dyn.Error.Err_BLKMov
// R #Dyn.Sk_zum_Beladeplatz.Err_Uebzeit//Überwachungzeit ist abgelaufen
// R #Dyn.Sk_zum_Beladeplatz.Err_Schritt//Schritt-Nummer ist nicht definiert
// R #Dyn.Sk_aus_Beladeplatz.Err_Uebzeit//Überwachungzeit ist abgelaufen
// R #Dyn.Sk_aus_Beladeplatz.Err_Schritt//Schritt-Nummer ist nicht definiert
R Dyn.Error.Err_Platz_1
R Dyn.Error.Err_Platz_2
R Dyn.Error.Err_Platz_3
R Dyn.Error.Reset_Einfahren_akt
R Dyn.Error.Reset_Platz_1_akt
R Dyn.Error.Reset_Platz_1_akt
R Dyn.Error.Reset_Platz_1_akt
R Dyn.Error.Reset_Ausfahren_akt
--- NW 12: Statische Arbeitsplatz-Parameter holen ---
L Arbeitsplatz.ABP_Nr // Nummer des Lagers
L Arbeitsplatz_Nr // Aufruf-Parameter
==I // Identisch ?
R Dyn.Error.ABP_DL // AMR-Datenbank fehlerhaft
R Dyn.Error.Undef_AMR // undefinierter Arbeitsplatz
JC en06 // Ja !
T "MW200" // Search-Daten
CALL FC "DatenOut" (SSDB:=Para.AMR_DL_DB, SSDW:=Para.AMR_DL_DW, PARA:=WORD#16#0000, SEARCHDATEN:=P#M200.0, RE_VAL:=Dyn.Rueckmld.RET_VAL_DL_ABP, OUTDATEN:=P#M220.0, Position:="MW196")
JBI G_Ok
A "M199.0"
JCN w060
SET
= Dyn.Error.ABP_DL // AMR-Datenbank fehlerhaft
L 16#A061
T Dyn.Stop_Ursache_Rein
BEU
w060: SET
S Dyn.Error.Undef_AMR // undefinierter Arbeitsplatz
L 16#A062
T Dyn.Stop_Ursache_Rein
BEU
// Kennung + Datenbytes
G_Ok: SET
R Dyn.Error.ABP_DL // AMR-Datenbank fehlerhaft
R Dyn.Error.Undef_AMR // undefinierter Arbeitsplatz
L 16#1004 // Kennung 10 + Word=04
T LW0 // Any-Kennung, Datentyp
L 20 // Datenwords speichern
T LW2 // Wiederholungen
// 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
CALL SYS "BLKMOV" (SRCBLK:=Quelle, RET_VAL:=Dyn.Rueckmld.RET_VAL_BLKMOV_ABP, DSTBLK:=Arbeitsplatz) // Datenliste-Daten speichern
L 16#A063
T Dyn.Stop_Ursache_Rein
L Dyn.Rueckmld.RET_VAL_BLKMOV_ABP // Rückmeldung
L 0 // Fehler vorhanden ?
<>I // Ja !
= Dyn.Error.Err_BLKMov // Error bei Block kopieren
BEC
L Arbeitsplatz.ABP_Typ // AMR-Typ = 276 (Normal)
L 276 // Dieser Aufruf-FB ?
==I // Ja !
JC w061
SET
S Dyn.Error.Undef_AMR // undefinierter Arbeitsplatz
L 0 // Lager ungültig !
T Arbeitsplatz.ABP_Nr // Nummer des Lagers
L 16#A064
T Dyn.Stop_Ursache_Rein
BEU
// Defaultwerte übergeben:
w061: NOP 0
BEU
en06: NOP 0
--- NW 13: Trolley kommt in Vorstau / Antrieb zusätzlich starten ---
// Antrieb zusätlich starten:
A ErrQuit // Überwachungszeit abgelaufen quittieren
R Dyn.Sk_zum_Beladeplatz.Err_Uebzeit
--- NW 14: Indirekt adressierte Daten in temporäre Daten übergeben ---
A ErrQuit // Überwachungszeit abgelaufen quittieren
R Dyn.Sk_zum_Beladeplatz.Err_Uebzeit
R Dyn.Sk_aus_Beladeplatz.Err_Uebzeit
R Ueb_akt // Überwachungszeit aktivieren
--- NW 15: Einfahrenden Trolley in AMR verarbeiten ---
A Dyn.Status."Trolley_fährt_in_Vorstau"
R Dyn.Status."Trolley_fährt_in_Vorstau"
JCN NoNewT // Negierter Sprung
// Reservierungen -1:
L Dyn.Vorstau.Anzahl_Reservierungen
+ -1
T Dyn.Vorstau.Anzahl_Reservierungen
L 0 // Minimum unterschritten ?
>=I // Nein !
JC ResOk
T Dyn.Vorstau.Anzahl_Reservierungen // Minimum übergeben
// Leertrolleys +1:
ResOk: L Dyn.Vorstau.Anzahl_Leertrolleys
+ +1
T Dyn.Vorstau.Anzahl_Leertrolleys
NoNewT: NOP 0
--- NW 16: Platz 1 ---
// Freigabe von PC sinnlos!:
AN Dyn.Platz_1.Trolley_ist_an_Beladung // Trolleydaten ok
R Dyn.SS."PC>Trolley_an_Platz_1_freigegeben" // Signal für Platz-Schleuse zum Öffnen
// Trolley ist draussen:
AN Dyn.Platz_1.Trolley_hat_Arbeitsplatz_verlassen // Rückmeldung von Draussen-FC
JC P1HMI
// Reset war aktiv?:
A Dyn.Status.Reset_Platz_1_aktiv
R Dyn.Status.Reset_Platz_1_aktiv
JCN P1NoReset // Negierter Sprung!
SET
R Dyn.SS."PC>Trolley_an_Platz_1_freigegeben" // Signal für Platz-Schleuse zum Öffnen
A B_an_Platz_1 // Trolley vorhanden
S Dyn.Platz_1.Trolley_ist_an_Beladung // Trolleydaten ok
S Dyn.SS."Trolley_ist_in_Platz_1_eingefahren>PC"
P1NoReset: AN B_an_Platz_1
R Dyn.Platz_1.Trolley_ist_an_Beladung // Trolley ist ausgefahren
A Dyn.Status."Trolley_fährt_aus_Platz_1" // /wird in Raus-SK benötigt (Schritt 2!)
JC P1HMI
SET
R Dyn.Platz_1.Trolley_hat_Arbeitsplatz_verlassen
// HMI-Platz-Reset:
P1HMI: A Dyn.HMI.Platz_1_resetten
R Dyn.HMI.Platz_1_resetten
JCN P1Check
// Trolley vorhanden:
A B_an_Platz_1 // Trolley vorhanden
AN Y_Platz_1 // Stopper GST
A Dyn.Platz_1.Trolley_ist_an_Beladung // Trolleydaten ok
JC P1Check // Kein Reset notwendig
// Kein Trolley vorhanden:
AN B_an_Platz_1 // Trolley vorhanden
AN Y_Platz_1 // Stopper GST
AN Dyn.Platz_1.Trolley_ist_an_Beladung // Trolleydaten ok
JC P1Check // Kein Reset notwendig
// Unklarer Zustand -> Reset starten
SET
S Reset_Platz_1_Stopper
S Dyn.Status.Reset_Platz_1_aktiv
// Daten-/Sensor-Check:
P1Check: A Dyn.Status.Reset_Platz_1_aktiv
O Dyn.Status."Trolley_fährt_nach_Platz_1"
O Y_Platz_1
R Dyn.Error.Err_Platz_1
JC P1Ende
A Dyn.Platz_1.Trolley_ist_an_Beladung // Trolleydaten ok
AN B_an_Platz_1
O
AN Dyn.Platz_1.Trolley_ist_an_Beladung // Trolleydaten ok
A B_an_Platz_1
= Dyn.Error.Err_Platz_1
P1Ende: NOP 0
--- NW 17: Platz 2 ---
// Freigabe von PC sinnlos!:
AN Dyn.Platz_2.Trolley_ist_an_Beladung // Trolleydaten ok
R Dyn.SS."PC>Trolley_an_Platz_2_freigegeben" // Signal für Platz-Schleuse zum Öffnen
// Trolley ist draussen:
AN Dyn.Platz_2.Trolley_hat_Arbeitsplatz_verlassen // Rückmeldung von Draussen-FC
JC P2HMI
// Reset war aktiv?:
A Dyn.Status.Reset_Platz_2_aktiv
R Dyn.Status.Reset_Platz_2_aktiv
JCN P2NoReset // Negierter Sprung!
SET
R Dyn.SS."PC>Trolley_an_Platz_2_freigegeben" // Signal für Platz-Schleuse zum Öffnen
A B_an_Platz_2 // Trolley vorhanden
S Dyn.Platz_2.Trolley_ist_an_Beladung // Trolleydaten ok
S Dyn.SS."Trolley_ist_in_Platz_2_eingefahren>PC"
P2NoReset: AN B_an_Platz_2
R Dyn.Platz_2.Trolley_ist_an_Beladung // Trolley ist ausgefahren
A Dyn.Status."Trolley_fährt_aus_Platz_2" // /wird in Raus-SK benötigt (Schritt 2!)
JC P2HMI
SET
R Dyn.Platz_2.Trolley_hat_Arbeitsplatz_verlassen
// HMI-Platz-Reset:
P2HMI: A Dyn.HMI.Platz_2_resetten
R Dyn.HMI.Platz_2_resetten
JCN P2Check
// Trolley vorhanden:
A B_an_Platz_2 // Trolley vorhanden
AN Y_Platz_2 // Stopper GST
A Dyn.Platz_2.Trolley_ist_an_Beladung // Trolleydaten ok
JC P2Check // Kein Reset notwendig
// Kein Trolley vorhanden:
AN B_an_Platz_2 // Trolley vorhanden
AN Y_Platz_2 // Stopper GST
AN Dyn.Platz_2.Trolley_ist_an_Beladung // Trolleydaten ok
JC P2Check // Kein Reset notwendig
// Unklarer Zustand -> Reset starten
SET
S Reset_Platz_2_Stopper
S Dyn.Status.Reset_Platz_2_aktiv
// Daten-/Sensor-Check:
P2Check: A Dyn.Status.Reset_Platz_2_aktiv
O Dyn.Status."Trolley_fährt_nach_Platz_2"
O Y_Platz_2
R Dyn.Error.Err_Platz_2
JC P2Ende
A Dyn.Platz_2.Trolley_ist_an_Beladung // Trolleydaten ok
AN B_an_Platz_2
O
AN Dyn.Platz_2.Trolley_ist_an_Beladung // Trolleydaten ok
A B_an_Platz_2
= Dyn.Error.Err_Platz_2
P2Ende: NOP 0
--- NW 18: Platz 3 ---
// Freigabe von PC sinnlos!:
AN Dyn.Platz_3.Trolley_ist_an_Beladung // Trolleydaten ok
R Dyn.SS."PC>Trolley_an_Platz_3_freigegeben" // Signal für Platz-Schleuse zum Öffnen
// Trolley ist draussen:
AN Dyn.Platz_3.Trolley_hat_Arbeitsplatz_verlassen // Rückmeldung von Draussen-FC
JC P3HMI
// Reset war aktiv?:
A Dyn.Status.Reset_Platz_3_aktiv
R Dyn.Status.Reset_Platz_3_aktiv
JCN P3NoReset // Negierter Sprung!
SET
R Dyn.SS."PC>Trolley_an_Platz_3_freigegeben" // Signal für Platz-Schleuse zum Öffnen
A B_an_Platz_3 // Trolley vorhanden
S Dyn.Platz_3.Trolley_ist_an_Beladung // Trolleydaten ok
S Dyn.SS."Trolley_ist_in_Platz_3_eingefahren>PC"
P3NoReset: AN B_an_Platz_3
R Dyn.Platz_3.Trolley_ist_an_Beladung // Trolley ist ausgefahren
A Dyn.Status."Trolley_fährt_aus_Platz_3" // /wird in Raus-SK benötigt (Schritt 2!)
JC P3HMI
SET
R Dyn.Platz_3.Trolley_hat_Arbeitsplatz_verlassen
// HMI-Platz-Reset:
P3HMI: A Dyn.HMI.Platz_3_resetten
R Dyn.HMI.Platz_3_resetten
JCN P3Check
// Trolley vorhanden:
A B_an_Platz_3 // Trolley vorhanden
AN Y_Platz_3 // Stopper GST
A Dyn.Platz_3.Trolley_ist_an_Beladung // Trolleydaten ok
JC P3Check // Kein Reset notwendig
// Kein Trolley vorhanden:
AN B_an_Platz_3 // Trolley vorhanden
AN Y_Platz_3 // Stopper GST
AN Dyn.Platz_3.Trolley_ist_an_Beladung // Trolleydaten ok
JC P3Check // Kein Reset notwendig
// Unklarer Zustand -> Reset starten
SET
S Reset_Platz_3_Stopper
S Dyn.Status.Reset_Platz_3_aktiv
// Daten-/Sensor-Check:
P3Check: A Dyn.Status.Reset_Platz_3_aktiv
O Dyn.Status."Trolley_fährt_nach_Platz_3"
O Y_Platz_3
R Dyn.Error.Err_Platz_3
JC P3Ende
A Dyn.Platz_3.Trolley_ist_an_Beladung // Trolleydaten ok
AN B_an_Platz_3
O
AN Dyn.Platz_3.Trolley_ist_an_Beladung // Trolleydaten ok
A B_an_Platz_3
= Dyn.Error.Err_Platz_3
P3Ende: NOP 0
--- NW 19: CTMP-Telegramm Platz 1 ---
// CTMP: Nach Erreichen des Beladepunktes:
A "SGes".Ohne_PC_Fahren
R Dyn.SS."Trolley_ist_in_Platz_1_eingefahren>PC"
// Telegramm an Host senden:
AN Dyn.SS."Trolley_ist_in_Platz_1_eingefahren>PC"
JC NoCTMP1
// TrolleyID ermitteln
CALL FC "HMSchleuse_TrolleyID" (Schleuse:=Arbeitsplatz.Schleusen_Platz_1, TrolleyID:="Daten_für_SendFIFO".TrolleyID, Ok:=TrolleyID_Ok) // TrolleyID übergeben
AN TrolleyID_Ok
JC NoCTMP1
// CTMP: Nach Erreichen des Beladepunktes:
CALL FB "Daten_in_SendFIFO_speichern" , (TelegrammKennung[1]:='C', TelegrammKennung[2]:='T', TelegrammKennung[3]:='M', TelegrammKennung[4]:='P', TelegrammKennung[5]:=?, TelegrammKennung[6]:=?, TelegrammKennung[7]:=?, TelegrammKennung[8]:=?, TelegrammKennung[9]:=?, TelegrammKennung[10]:=?, TrolleyID:=?, StationsNr:=Arbeitsplatz.Host_ABP, Puffer_LinienNr:=1, 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:=1, Ret_Val_FIFO_IN:="MB199", Error:=Error_SendFIFO) // s.o.
AN Error_SendFIFO
R Dyn.SS."Trolley_ist_in_Platz_1_eingefahren>PC"
NoCTMP1: NOP 0
--- NW 20: CTMP-Telegramm Platz 2 ---
// CTMP: Nach Erreichen des Beladepunktes:
A "SGes".Ohne_PC_Fahren
R Dyn.SS."Trolley_ist_in_Platz_2_eingefahren>PC"
// Telegramm an Host senden:
AN Dyn.SS."Trolley_ist_in_Platz_2_eingefahren>PC"
JC NoCTMP2
// TrolleyID ermitteln
CALL FC "HMSchleuse_TrolleyID" (Schleuse:=Arbeitsplatz.Schleusen_Platz_2, TrolleyID:="Daten_für_SendFIFO".TrolleyID, Ok:=TrolleyID_Ok) // TrolleyID übergeben
AN TrolleyID_Ok
JC NoCTMP2
// CTMP: Nach Erreichen des Beladepunktes:
CALL FB "Daten_in_SendFIFO_speichern" , (TelegrammKennung[1]:='C', TelegrammKennung[2]:='T', TelegrammKennung[3]:='M', TelegrammKennung[4]:='P', TelegrammKennung[5]:=?, TelegrammKennung[6]:=?, TelegrammKennung[7]:=?, TelegrammKennung[8]:=?, TelegrammKennung[9]:=?, TelegrammKennung[10]:=?, TrolleyID:=?, StationsNr:=Arbeitsplatz.Host_ABP, Puffer_LinienNr:=2, 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:=1, Ret_Val_FIFO_IN:="MB199", Error:=Error_SendFIFO) // s.o.
AN Error_SendFIFO
R Dyn.SS."Trolley_ist_in_Platz_2_eingefahren>PC"
NoCTMP2: NOP 0
--- NW 21: CTMP-Telegramm Platz 3 ---
// CTMP: Nach Erreichen des Beladepunktes:
A "SGes".Ohne_PC_Fahren
R Dyn.SS."Trolley_ist_in_Platz_3_eingefahren>PC"
// Telegramm an Host senden:
AN Dyn.SS."Trolley_ist_in_Platz_3_eingefahren>PC"
JC NoCTMP3
// TrolleyID ermitteln
CALL FC "HMSchleuse_TrolleyID" (Schleuse:=Arbeitsplatz.Schleusen_Platz_3, TrolleyID:="Daten_für_SendFIFO".TrolleyID, Ok:=TrolleyID_Ok) // //TrolleyID übergeben
AN TrolleyID_Ok
JC NoCTMP3
// CTMP: Nach Erreichen des Beladepunktes:
CALL FB "Daten_in_SendFIFO_speichern" , (TelegrammKennung[1]:='C', TelegrammKennung[2]:='T', TelegrammKennung[3]:='M', TelegrammKennung[4]:='P', TelegrammKennung[5]:=?, TelegrammKennung[6]:=?, TelegrammKennung[7]:=?, TelegrammKennung[8]:=?, TelegrammKennung[9]:=?, TelegrammKennung[10]:=?, TrolleyID:=?, StationsNr:=Arbeitsplatz.Host_ABP, Puffer_LinienNr:=3, 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:=1, Ret_Val_FIFO_IN:="MB199", Error:=Error_SendFIFO) // s.o.
AN Error_SendFIFO
R Dyn.SS."Trolley_ist_in_Platz_3_eingefahren>PC"
NoCTMP3: NOP 0
--- NW 22: UNLDResp-Telegramm Platz 1 ---
// UNLDResp: Nach Verlassen des Beladepunktes:
A "SGes".Ohne_PC_Fahren
R Dyn.SS."Trolley_ist_aus_Platz_1_ausgefahren>PC"
// Telegramm an Host senden:
AN Dyn.SS."Trolley_ist_aus_Platz_1_ausgefahren>PC"
JC NoUNLDResp1
// TrolleyID ermitteln
L Dyn.Platz_1.TrolleyID_ausgefahren
T "Daten_für_SendFIFO".TrolleyID // TrolleyID übergeben
L DINT#0
<>D
= TrolleyID_Ok
L 1 // Trolley ausgefahren
A TrolleyID_Ok
JC UNLDResp1_Ok
L 0 // Kein Trolley ausgefahren
UNLDResp1_Ok: T "Daten_für_SendFIFO".Status_1_Int // Status übergeben
// UNLDResp: Nach Verlassen des Beladepunktes:
CALL FB "Daten_in_SendFIFO_speichern" , (TelegrammKennung[1]:='U', TelegrammKennung[2]:='N', TelegrammKennung[3]:='L', TelegrammKennung[4]:='D', TelegrammKennung[5]:='R', TelegrammKennung[6]:='e', TelegrammKennung[7]:='s', TelegrammKennung[8]:='p', TelegrammKennung[9]:=?, TelegrammKennung[10]:=?, TrolleyID:=?, StationsNr:=Arbeitsplatz.Host_ABP, Puffer_LinienNr:=1, 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:=1, Ret_Val_FIFO_IN:="MB199", Error:=Error_SendFIFO) // s.o. | s.o.
AN Error_SendFIFO
R Dyn.SS."Trolley_ist_aus_Platz_1_ausgefahren>PC"
JCN NoUNLDResp1
L DINT#0
T Dyn.Platz_1.TrolleyID_ausgefahren
NoUNLDResp1: NOP 0
--- NW 23: UNLDResp-Telegramm Platz 2 ---
// UNLDResp: Nach Verlassen des Beladepunktes:
A "SGes".Ohne_PC_Fahren
R Dyn.SS."Trolley_ist_aus_Platz_2_ausgefahren>PC"
// Telegramm an Host senden:
AN Dyn.SS."Trolley_ist_aus_Platz_2_ausgefahren>PC"
JC NoUNLDResp2
// TrolleyID ermitteln
L Dyn.Platz_2.TrolleyID_ausgefahren
T "Daten_für_SendFIFO".TrolleyID // TrolleyID übergeben
L DINT#0
<>D
= TrolleyID_Ok
L 1 // Trolley ausgefahren
A TrolleyID_Ok
JC UNLDResp2_Ok
L 0 // Kein Trolley ausgefahren
UNLDResp2_Ok: T "Daten_für_SendFIFO".Status_1_Int // Status übergeben
// UNLDResp: Nach Verlassen des Beladepunktes:
CALL FB "Daten_in_SendFIFO_speichern" , (TelegrammKennung[1]:='U', TelegrammKennung[2]:='N', TelegrammKennung[3]:='L', TelegrammKennung[4]:='D', TelegrammKennung[5]:='R', TelegrammKennung[6]:='e', TelegrammKennung[7]:='s', TelegrammKennung[8]:='p', TelegrammKennung[9]:=?, TelegrammKennung[10]:=?, TrolleyID:=?, StationsNr:=Arbeitsplatz.Host_ABP, Puffer_LinienNr:=2, 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:=1, Ret_Val_FIFO_IN:="MB199", Error:=Error_SendFIFO) // s.o. | s.o.
AN Error_SendFIFO
R Dyn.SS."Trolley_ist_aus_Platz_2_ausgefahren>PC"
JCN NoUNLDResp2
L DINT#0
T Dyn.Platz_2.TrolleyID_ausgefahren
NoUNLDResp2: NOP 0
--- NW 24: UNLDResp-Telegramm Platz 3 ---
// UNLDResp: Nach Verlassen des Beladepunktes:
A "SGes".Ohne_PC_Fahren
R Dyn.SS."Trolley_ist_aus_Platz_3_ausgefahren>PC"
// Telegramm an Host senden:
AN Dyn.SS."Trolley_ist_aus_Platz_3_ausgefahren>PC"
JC NoUNLDResp3
// TrolleyID ermitteln
// TrolleyID ermitteln
L Dyn.Platz_3.TrolleyID_ausgefahren
T "Daten_für_SendFIFO".TrolleyID // TrolleyID übergeben
L DINT#0
<>D
= TrolleyID_Ok
L 1 // Trolley ausgefahren
A TrolleyID_Ok
JC UNLDResp3_Ok
L 0 // Kein Trolley ausgefahren
UNLDResp3_Ok: T "Daten_für_SendFIFO".Status_1_Int // Status übergeben
// UNLDResp: Nach Verlassen des Beladepunktes:
CALL FB "Daten_in_SendFIFO_speichern" , (TelegrammKennung[1]:='U', TelegrammKennung[2]:='N', TelegrammKennung[3]:='L', TelegrammKennung[4]:='D', TelegrammKennung[5]:='R', TelegrammKennung[6]:='e', TelegrammKennung[7]:='s', TelegrammKennung[8]:='p', TelegrammKennung[9]:=?, TelegrammKennung[10]:=?, TrolleyID:=?, StationsNr:=Arbeitsplatz.Host_ABP, Puffer_LinienNr:=3, 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:=1, Ret_Val_FIFO_IN:="MB199", Error:=Error_SendFIFO) // s.o. | s.o.
AN Error_SendFIFO
R Dyn.SS."Trolley_ist_aus_Platz_3_ausgefahren>PC"
JCN NoUNLDResp3
L DINT#0
T Dyn.Platz_3.TrolleyID_ausgefahren
NoUNLDResp3: NOP 0
--- NW 25: Simulation zu Starten von beladenen Trolleys ---
SET
R Dyn.Simulation."Trolleys bereit"
R Dyn.Simulation."Trolley gestartet"
AN Dyn.Simulation.Aktiviert
R Dyn.Simulation.Neustart
R Dyn.Simulation."Einen Trolley ausfahren"
JC SimEnde
// Neustart:
A Dyn.Simulation.Neustart
R Dyn.Simulation.Neustart
JCN TrolleyOk // Negierter Sprung
SET
R Dyn.Simulation."Trolley 1 gefahren"
R Dyn.Simulation."Trolley 2 gefahren"
R Dyn.Simulation."Trolley 3 gefahren"
// Trolley für Ausfahrt bereit:
TrolleyOk: A B_an_Platz_1 // Trolley vorhanden
A Dyn.Platz_1.Trolley_ist_an_Beladung // Trolleydaten ok
AN Dyn.Simulation."Trolley 1 gefahren"
O
A B_an_Platz_2 // Trolley vorhanden
A Dyn.Platz_2.Trolley_ist_an_Beladung // Trolleydaten ok
AN Dyn.Simulation."Trolley 2 gefahren"
O
A B_an_Platz_3 // Trolley vorhanden
A Dyn.Platz_3.Trolley_ist_an_Beladung // Trolleydaten ok
AN Dyn.Simulation."Trolley 3 gefahren"
= Dyn.Simulation."Trolleys bereit"
// Trolley starten:
New: AN Dyn.Simulation."Trolleys bereit"
ON Dyn.Simulation."Einen Trolley ausfahren"
R Dyn.Simulation."Einen Trolley ausfahren"
JC SimEnde
A B_an_Platz_1 // Trolley vorhanden
A Dyn.Platz_1.Trolley_ist_an_Beladung // Trolleydaten ok
AN Dyn.Simulation."Trolley 1 gefahren"
S Dyn.Simulation."Trolley 1 gefahren"
S Dyn.SS."PC>Trolley_an_Platz_1_freigegeben" // Signal für Platz-Schleuse zum Öffnen
S Dyn.Simulation."Trolley gestartet"
R Dyn.Simulation."Einen Trolley ausfahren"
JC SimEnde
A B_an_Platz_2 // Trolley vorhanden
A Dyn.Platz_2.Trolley_ist_an_Beladung // Trolleydaten ok
AN Dyn.Simulation."Trolley 2 gefahren"
S Dyn.Simulation."Trolley 2 gefahren"
S Dyn.SS."PC>Trolley_an_Platz_2_freigegeben" // Signal für Platz-Schleuse zum Öffnen
S Dyn.Simulation."Trolley gestartet"
R Dyn.Simulation."Einen Trolley ausfahren"
JC SimEnde
A B_an_Platz_3 // Trolley vorhanden
A Dyn.Platz_3.Trolley_ist_an_Beladung // Trolleydaten ok
AN Dyn.Simulation."Trolley 3 gefahren"
S Dyn.Simulation."Trolley 3 gefahren"
S Dyn.SS."PC>Trolley_an_Platz_3_freigegeben" // Signal für Platz-Schleuse zum Öffnen
S Dyn.Simulation."Trolley gestartet"
R Dyn.Simulation."Einen Trolley ausfahren"
SET
R Dyn.Simulation."Trolley 1 gefahren"
R Dyn.Simulation."Trolley 2 gefahren"
R Dyn.Simulation."Trolley 3 gefahren"
A B_an_Platz_1 // Trolley vorhanden
A Dyn.Platz_1.Trolley_ist_an_Beladung // Trolleydaten ok
O
A B_an_Platz_2 // Trolley vorhanden
A Dyn.Platz_2.Trolley_ist_an_Beladung // Trolleydaten ok
O
A B_an_Platz_3 // Trolley vorhanden
A Dyn.Platz_3.Trolley_ist_an_Beladung // Trolleydaten ok
JC New
SimEnde: NOP 0
--- NW 26: Mindestzeit Einfahren: ---
SET
R MindestZeit_Rein_Ok
AN Dyn.Status."Trolley_fährt_nach_Platz_1"
AN Dyn.Status."Trolley_fährt_nach_Platz_2"
AN Dyn.Status."Trolley_fährt_nach_Platz_3"
ON Dyn.Vorstau."Trolley_fährt_aus"
JCN TReinPlus // Negierter Sprung
L 0
T Dyn.Mindestzeit_Rein
JU TReinEnde
TReinPlus: AN Antrieb_Vorstau_aktiv
ON "1s-Impuls"
JC TReinCheck
L Dyn.Mindestzeit_Rein
+ 1
T Dyn.Mindestzeit_Rein
TReinCheck: NOP 0
L Dyn.Mindestzeit_Rein
L Arbeitsplatz.Mindestzeit_zum_ABP_1
>=I
A Dyn.Status."Trolley_fährt_nach_Platz_1"
JC TReinOk
CAC
L Arbeitsplatz.Mindestzeit_zum_ABP_2
>=I
A Dyn.Status."Trolley_fährt_nach_Platz_2"
JC TReinOk
CAC
L Arbeitsplatz.Mindestzeit_zum_ABP_3
>=I
A Dyn.Status."Trolley_fährt_nach_Platz_3"
JC TReinOk
JU TReinEnde // Negierter Sprung
TReinOk: T Dyn.Mindestzeit_Rein // Zeit einfrieren
SET
S MindestZeit_Rein_Ok
TReinEnde: NOP 0
--- NW 27: Mindestzeit Ausfahren: ---
SET
R MindestZeit_Raus_Ok
AN Dyn.Status."Trolley_fährt_aus_Platz_1"
AN Dyn.Status."Trolley_fährt_aus_Platz_2"
AN Dyn.Status."Trolley_fährt_aus_Platz_3"
ON Dyn.Status."Trolley_fährt_in_Nachstau"
JCN TRausPlus // Negierter Sprung
L 0
T Dyn.Mindestzeit_Raus
JU TRausEnde
TRausPlus: AN Antrieb_Nachstau_2_aktiv
A Dyn.Status."Trolley_fährt_aus_Platz_2"
ON Antrieb_Nachstau_1_aktiv
ON Antrieb_Nachstau_3_aktiv
ON "1s-Impuls"
JC TRausCheck
L Dyn.Mindestzeit_Raus
+ 1
T Dyn.Mindestzeit_Raus
TRausCheck: NOP 0
L Dyn.Mindestzeit_Raus
L Arbeitsplatz.Mindestzeit_aus_ABP_1
>=I
A Dyn.Status."Trolley_fährt_aus_Platz_1"
JC TRausOk
CAC
L Arbeitsplatz.Mindestzeit_aus_ABP_2
>=I
A Dyn.Status."Trolley_fährt_aus_Platz_2"
JC TRausOk
CAC
L Arbeitsplatz.Mindestzeit_aus_ABP_3
>=I
A Dyn.Status."Trolley_fährt_aus_Platz_3"
JC TRausOk
JU TRausEnde // Negierter Sprung
TRausOk: T Dyn.Mindestzeit_Raus // Zeit einfrieren
SET
S MindestZeit_Raus_Ok
TRausEnde: NOP 0
--- NW 28: Schrittkette anhalten ---
A Dyn.Sk_zum_Beladeplatz.Auto_akt // Automatik ist aktiv
A Dyn.Sk_zum_Beladeplatz.Bereich_ok
JU en08_Mig // Schrittkette nicht anhalten !
SET
R Dyn.Sk_zum_Beladeplatz.Err_Uebzeit // Störungen löschen
R Dyn.Sk_zum_Beladeplatz.Err_Schritt
L 0 // Zeitwerte löschen
T Dyn.Sk_zum_Beladeplatz.Terr_Zelle
T Dyn.Sk_zum_Beladeplatz.Tok_Zelle
BEU
en08_Mig: NOP 0
--- NW 29: Sprungverteiler Platz-Versorgung ---
L Dyn.Sk_zum_Beladeplatz.Neu_Schritt // Schritt, der im nächsten Zyklus aktiv werden soll
L -1 // angegeben ?
==I // Nein !
JC NEU
CAC // Neuen Schritt übergeben
T Dyn.Sk_zum_Beladeplatz.Akt_Schritt
L -1 // Urzustand
T Dyn.Sk_zum_Beladeplatz.Neu_Schritt // Schritt, der im nächsten Zyklus aktiv werden soll
NEU: SET
R Warte_neu // Wartezeit neutriggern
R Warte_stop // Wartezeit stoppen
L Dyn.Sk_zum_Beladeplatz.Akt_Schritt
JL Ende
JU s000 // Schritt 0
JU s001 // Schritt 1
JU s002 // Schritt 2
JU s003 // Schritt 3
JU s004 // Schritt 4
JU s005 // Schritt 5
JU s006 // Schritt 6
JU s007 // Schritt 7
JU s008 // Schritt 8
JU s009 // Schritt 9
JU s010 // Schritt 10
JU s011 // Schritt 11
JU s012 // Schritt 12
JU s013 // Schritt 13
JU s014 // Schritt 14
JU s015 // Schritt 15
JU s016 // Schritt 16
JU s017 // Schritt 17
JU s018 // Schritt 18
JU s019 // Schritt 19
JU s020 // Schritt 20
JU s021 // Schritt 21
JU s022 // Schritt 22
JU s023 // Schritt 23
JU s024 // Schritt 24
JU s025 // Schritt 25
JU s026 // Schritt 26
JU s027 // Schritt 27
JU s028 // Schritt 28
JU s029 // Schritt 29
JU s030 // Schritt 30
Ende: S Dyn.Sk_zum_Beladeplatz.Err_Schritt // Undefinierter Schritt
L 16#A131
T Dyn.Stop_Ursache_Rein
JU Raus_NEU
Neu_Mig: A Dyn.Sk_zum_Beladeplatz.Err_Uebzeit
JCN Sk
L 16#A132
T Dyn.Stop_Ursache_Rein
JU Raus_NEU
Sk: T Dyn.Sk_zum_Beladeplatz.Akt_Schritt
L 0 // Zeitwerte löschen
T Dyn.Sk_zum_Beladeplatz.Terr_Zelle
T Dyn.Sk_zum_Beladeplatz.Tok_Zelle
JU NEU
// Nicht programmierte Schritte:
// s000: SPA Ende
// s001: SPA Ende
// s002: SPA Ende
// s003: SPA Ende
s004: JU Ende
s005: JU Ende
s006: JU Ende
s007: JU Ende
s008: JU Ende
s009: JU Ende
s010: JU Ende
s011: JU Ende
s012: JU Ende
s013: JU Ende
s014: JU Ende
s015: JU Ende
s016: JU Ende
s017: JU Ende
s018: JU Ende
s019: JU Ende
// s020: SPA Ende
// s021: SPA Ende
s022: JU Ende
s023: JU Ende
s024: JU Ende
s025: JU Ende
s026: JU Ende
s027: JU Ende
s028: JU Ende
s029: JU Ende
s030: JU Ende
--- NW 30: Schritt X: Reserve ---
SET // Weiterschaltbedingung
= Weiter
// Schrittaktionen:
SET
L 16#B001
T Dyn.Stop_Ursache_Rein
A Dyn.Sk_zum_Beladeplatz.Reset_Akt // Reset ist aktiv
L 20 // Weiter mit Schritt 20
JC Neu_Mig // Bei diesem Schritt weiter
A Weiter // Weiterschaltbedingung ist erfüllt
R Dyn.Sk_zum_Beladeplatz.Err_Uebzeit // Sofort weiter !
L 0 // Angabe der Wartezeit (*10ms)
JC Plus // Nächsten Schritt starten
L 1 // Weiter mit Schritt 1
JC Neu_Mig // Bei diesem Schritt weiter
T Dyn.Sk_zum_Beladeplatz.Neu_Schritt // Schritt, der im nächsten Zyklus aktiv werden soll
SET
A Dyn.Sk_zum_Beladeplatz.Auto_akt // Automatik ist aktiv
A Dyn.Sk_zum_Beladeplatz.Bereich_ok
= Ueb_akt // Überwachungszeit aktivieren
L 50 // Angabe der Überwachungszeit (*1s)
JU tueb // Überwachungszeit
JU Raus_NEU
--- NW 31: Schritt 0: Trolley ist in Schleuse / Auftrag erzeugen ---
s000: NOP 0
// Schrittaktionen:
A Dyn.Sk_zum_Beladeplatz.Reset_Akt // Reset ist aktiv
L 20 // Weiter mit Schritt 20
JC Neu_Mig // Bei diesem Schritt weiter
AN B_In_Schleuse_Vorstau // Trolley im Schleuse erkannt
O Y_Vorstau
O Dyn.Status.Reset_zum_Beladeplatz_aktiv
JC Raus_NEU
SET
R Dyn.Status."Trolley_fährt_nach_Platz_1"
R Dyn.Status."Trolley_fährt_nach_Platz_2"
R Dyn.Status."Trolley_fährt_nach_Platz_3"
R Dyn.Vorstau.Freigabe_an_Stopper
A(
O Dyn.SS."PC>Trolley_zum_Platz_1_starten"
O "SGes".Ohne_PC_Fahren
)
AN Dyn.SS."Trolley_ist_in_Platz_1_eingefahren>PC" // Alt-Telegramm noch nicht gesendet
AN B_an_Platz_1
AN Y_Platz_1 // Arbeitsplatz ist geöffnet
AN Dyn.Platz_1.Beladestelle_wurde_angefahren // wegen FIFO-Versorgung
AN Dyn.Platz_1.Trolley_ist_an_Beladung
AN Dyn.Status.Reset_Platz_1_aktiv
S Dyn.Vorstau.Freigabe_an_Stopper
S Dyn.Status."Trolley_fährt_nach_Platz_1"
S Dyn.Platz_1.Beladestelle_wurde_angefahren
JC SX001
A(
O Dyn.SS."PC>Trolley_zum_Platz_2_starten"
O "SGes".Ohne_PC_Fahren
)
AN Dyn.SS."Trolley_ist_in_Platz_2_eingefahren>PC" // Alt-Telegramm noch nicht gesendet
AN B_an_Platz_2
AN Y_Platz_2 // Arbeitsplatz ist geöffnet
AN Dyn.Platz_2.Beladestelle_wurde_angefahren // wegen FIFO-Versorgung
AN Dyn.Platz_2.Trolley_ist_an_Beladung
AN Dyn.Status.Reset_Platz_2_aktiv
S Dyn.Vorstau.Freigabe_an_Stopper
S Dyn.Status."Trolley_fährt_nach_Platz_2"
S Dyn.Platz_2.Beladestelle_wurde_angefahren
JC SX001
A(
O Dyn.SS."PC>Trolley_zum_Platz_3_starten"
O "SGes".Ohne_PC_Fahren
)
AN Dyn.SS."Trolley_ist_in_Platz_3_eingefahren>PC" // Alt-Telegramm noch nicht gesendet
AN B_an_Platz_3
AN Y_Platz_3 // Arbeitsplatz ist geöffnet
AN Dyn.Platz_3.Beladestelle_wurde_angefahren // wegen FIFO-Versorgung
AN Dyn.Platz_3.Trolley_ist_an_Beladung
AN Dyn.Status.Reset_Platz_3_aktiv
S Dyn.Vorstau.Freigabe_an_Stopper
S Dyn.Status."Trolley_fährt_nach_Platz_3"
S Dyn.Platz_3.Beladestelle_wurde_angefahren
JC SX001
SET
R Dyn.Platz_1.Beladestelle_wurde_angefahren
R Dyn.Platz_2.Beladestelle_wurde_angefahren
R Dyn.Platz_3.Beladestelle_wurde_angefahren
JU Raus_NEU
SX001: L 1 // Weiter mit Schritt 1
JU Neu_Mig // Bei diesem Schritt weiter
--- NW 32: Schritt 1: Trolley gestartet ---
s001: SET // Weiterschaltbedingung
A Y_Vorstau
= Weiter
// Schrittaktionen:
A Weiter
R Dyn.Vorstau.Freigabe_an_Stopper
R Dyn.Sk_zum_Beladeplatz.Err_Uebzeit
L 0 // Angabe der Wartezeit (*100ms)
JC Plus // Nächsten Raus_Schritt starten************************************************
JU Raus_NEU
--- NW 33: Schritt 2: Ziel erreicht ? ---
s002: SET // Weiterschaltbedingung
A(
A Dyn.Status."Trolley_fährt_nach_Platz_1"
A B_an_Platz_1
O
A Dyn.Status."Trolley_fährt_nach_Platz_2"
A B_an_Platz_2
O
A Dyn.Status."Trolley_fährt_nach_Platz_3"
A B_an_Platz_3
)
A MindestZeit_Rein_Ok
= Weiter
// Schrittaktionen:
SET
S Antrieb_Vorstau_vor
AN B_In_Schleuse_Vorstau
S Dyn.Vorstau."Trolley_fährt_aus"
A Dyn.Status."Trolley_fährt_nach_Platz_1"
= Y_Weiche_zu_Platz_1
A Dyn.Status."Trolley_fährt_nach_Platz_2"
= Y_Weiche_zu_Platz_2
A Weiter
L 0
JC Plus // Nächsten Schritt starten
L 16#B061
T Dyn.Stop_Ursache_Rein
JU Raus_NEU
--- NW 34: Schritt 3: Trolleydaten ändern ---
s003: SET // Weiterschaltbedingung
= Weiter
// Schrittaktionen:
SET
R Dyn.Vorstau."Trolley_fährt_aus"
S Trolley_hat_ABS_erreicht // Rückmeldung an Vorstau (Draussen-Sensor)
A Dyn.Status."Trolley_fährt_nach_Platz_1"
R Dyn.Status."Trolley_fährt_nach_Platz_1"
S Dyn.Platz_1.Trolley_ist_an_Beladung
R Dyn.SS."PC>Trolley_zum_Platz_1_starten"
R Dyn.SS."PC>Trolley_an_Platz_1_freigegeben" // Signal kam zu früh
S Dyn.SS."Trolley_ist_in_Platz_1_eingefahren>PC"
A Dyn.Status."Trolley_fährt_nach_Platz_2"
R Dyn.Status."Trolley_fährt_nach_Platz_2"
S Dyn.Platz_2.Trolley_ist_an_Beladung
R Dyn.SS."PC>Trolley_zum_Platz_2_starten"
R Dyn.SS."PC>Trolley_an_Platz_2_freigegeben" // Signal kam zu früh
S Dyn.SS."Trolley_ist_in_Platz_2_eingefahren>PC"
A Dyn.Status."Trolley_fährt_nach_Platz_3"
R Dyn.Status."Trolley_fährt_nach_Platz_3"
S Dyn.Platz_3.Trolley_ist_an_Beladung
R Dyn.SS."PC>Trolley_zum_Platz_3_starten"
R Dyn.SS."PC>Trolley_an_Platz_3_freigegeben" // Signal kam zu früh
S Dyn.SS."Trolley_ist_in_Platz_3_eingefahren>PC"
// Leertrolleys -1:
L Dyn.Vorstau.Anzahl_Leertrolleys
+ -1
T Dyn.Vorstau.Anzahl_Leertrolleys
L 0
>=I
JC ENDE_Mig
T Dyn.Vorstau.Anzahl_Leertrolleys // Minimum übergeben
JU ENDE_Mig
--- NW 35: Schritt 20: Einfahr-Sk resetten ---
s020: SET // Weiterschaltbedingung
A Antrieb_Vorstau_aktiv
= Weiter // Weiterschaltbedingung ist erfüllt
// Schrittaktionen:
SET
S Antrieb_Vorstau_vor // Kreiselantrieb starten
L 16#B201
T Dyn.Stop_Ursache_Rein
SET
S Antrieb_Vorstau_vor
A Weiter // Weiterschaltbedingung ist erfüllt
L 3000 // Angabe der Wartezeit (*10ms)
JC Plus // Nächsten Schritt starten
JU Raus_NEU
--- NW 36: Schritt 21: Reset ist zu Ende ---
s021: SET
R Dyn.Sk_zum_Beladeplatz.Reset_Akt // Reset ist aktiv
JU ENDE_Mig // Ende
--- NW 37: Schrittkette beenden ---
ENDE_Mig: L 0 // Schritt 0: Warten
T Dyn.Sk_zum_Beladeplatz.Akt_Schritt
L 0 // Zeitwert löschen
T Dyn.Sk_zum_Beladeplatz.Terr_Zelle
T Dyn.Sk_zum_Beladeplatz.Tok_Zelle
SET
R Dyn.Sk_zum_Beladeplatz.Err_Uebzeit
R Dyn.Status."Trolley_fährt_nach_Platz_1"
R Dyn.Status."Trolley_fährt_nach_Platz_2"
R Dyn.Status."Trolley_fährt_nach_Platz_3"
R Dyn.Vorstau."Trolley_fährt_aus"
R Dyn.Vorstau.Freigabe_an_Stopper
JU Raus_NEU
--- NW 38: Nächsten Schritt aktivieren ---
Plus: T Dyn.Sk_zum_Beladeplatz.T_ok // Wartezeit übergeben
A Dyn.Sk_zum_Beladeplatz.Err_Uebzeit // Störung noch nicht quittiert
JC Raus_NEU
L 0 // keine Wartezeit ?
==I // Ja ! -> sofort weiter
JC w220
AN Warte_neu // Wartezeit neutriggern
JC W220_Mig
L 0
T Dyn.Sk_zum_Beladeplatz.Tok_Zelle // Wartezeit
W220_Mig: A Warte_stop // Wartezeit stoppen
JC Raus_NEU
L Dyn.Sk_zum_Beladeplatz.Tok_Zelle
L "MW4" // Wartezeit +10ms
+I
T Dyn.Sk_zum_Beladeplatz.Tok_Zelle // Wartezeit
L Dyn.Sk_zum_Beladeplatz.T_ok // abgelaufen ?
<I // Nein !
JC Raus_NEU
w220: L Dyn.Sk_zum_Beladeplatz.Akt_Schritt
+ 1 // Schritt +1
T Dyn.Sk_zum_Beladeplatz.Akt_Schritt
L 0 // Zeitwerte löschen
T Dyn.Sk_zum_Beladeplatz.Terr_Zelle
T Dyn.Sk_zum_Beladeplatz.Tok_Zelle
JU Raus_NEU
--- NW 39: Überwachungszeit kontrollieren ---
tueb: A Ueb_akt
= Dyn.Sk_zum_Beladeplatz.Ueb_akt // Für Statuskontrolle
T Dyn.Sk_zum_Beladeplatz.T_Err // Für Statuskontrolle
L Dyn.Sk_zum_Beladeplatz.Terr_Zelle // Maximalzeit
>I // abgelaufen ?
AN Dyn.Sk_zum_Beladeplatz.Err_Uebzeit
JC en24 // Nein !
A Ueb_akt // Überwachungszeit aktivieren
S Dyn.Sk_zum_Beladeplatz.Err_Uebzeit
L 0 // Zeitwert löschen
T Dyn.Sk_zum_Beladeplatz.Terr_Zelle
JU Raus_NEU
en24: NOP 0
--- NW 40: Überwachungszeit +1 ---
AN Dyn.Sk_zum_Beladeplatz.Ueb_akt // Schrittaktion ist aktiv
ON "1s-Impuls"
JC Raus_NEU
L Dyn.Sk_zum_Beladeplatz.Terr_Zelle
+ 1 // Üb.zeit +1s
T Dyn.Sk_zum_Beladeplatz.Terr_Zelle
JU Raus_NEU
--- NW 41: Sprungverteiler SK-Rausfahren ---
Raus_NEU: SET
R Raus_Warte_neu // Wartezeit neutriggern
R Raus_Warte_stop // Wartezeit stoppen
L Dyn.Sk_aus_Beladeplatz.Akt_Schritt
JL Raus_Ende_Mig
JU Raus_s000 // Schritt 0
JU Raus_s001 // Schritt 1
JU Raus_s002 // Schritt 2
JU Raus_s003 // Schritt 3
JU Raus_s004 // Schritt 4
JU Raus_s005 // Schritt 5
JU Raus_s006 // Schritt 6
JU Raus_s007 // Schritt 7
JU Raus_s008 // Schritt 8
JU Raus_s009 // Schritt 9
JU Raus_s010 // Schritt 10
JU Raus_s011 // Schritt 11
JU Raus_s012 // Schritt 12
JU Raus_s013 // Schritt 13
JU Raus_s014 // Schritt 14
JU Raus_s015 // Schritt 15
JU Raus_s016 // Schritt 16
JU Raus_s017 // Schritt 17
JU Raus_s018 // Schritt 18
JU Raus_s019 // Schritt 19
JU Raus_s020 // Schritt 20
JU Raus_s021 // Schritt 21
JU Raus_s022 // Schritt 22
JU Raus_s023 // Schritt 23
JU Raus_s024 // Schritt 24
JU Raus_s025 // Schritt 25
JU Raus_s026 // Schritt 26
JU Raus_s027 // Schritt 27
JU Raus_s028 // Schritt 28
JU Raus_s029 // Schritt 29
JU Raus_s030 // Schritt 30
Raus_Ende_Mig: S Dyn.Sk_aus_Beladeplatz.Err_Schritt // Undefinierter Schritt
BEU
Raus_Neu_Mig: A Dyn.Sk_aus_Beladeplatz.Einzelschritt_akt // Einzelschritt fahren aktiv
S Dyn.Sk_aus_Beladeplatz.Einzelschritt_fertig // Einzelschritt ist ausgeführt
A Dyn.Sk_aus_Beladeplatz.Err_Uebzeit
BEC
T Dyn.Sk_aus_Beladeplatz.Akt_Schritt
L 0 // Zeitwerte löschen
T Dyn.Sk_aus_Beladeplatz.Terr_Zelle
T Dyn.Sk_aus_Beladeplatz.Tok_Zelle
JU Raus_NEU
// Nicht programmierte Schritte:
// Raus_s000 : SPA Raus_Ende_Mig
// Raus_s001 : SPA Raus_Ende_Mig
// Raus_s002 : SPA Raus_Ende_Mig
// Raus_s003 : SPA Raus_Ende_Mig
// Raus_s004 : SPA Raus_Ende_Mig
// Raus_s005 : SPA Raus_Ende_Mig
Raus_s006: JU Raus_Ende_Mig
Raus_s007: JU Raus_Ende_Mig
Raus_s008: JU Raus_Ende_Mig
Raus_s009: JU Raus_Ende_Mig
Raus_s010: JU Raus_Ende_Mig
Raus_s011: JU Raus_Ende_Mig
Raus_s012: JU Raus_Ende_Mig
Raus_s013: JU Raus_Ende_Mig
Raus_s014: JU Raus_Ende_Mig
Raus_s015: JU Raus_Ende_Mig
Raus_s016: JU Raus_Ende_Mig
Raus_s017: JU Raus_Ende_Mig
Raus_s018: JU Raus_Ende_Mig
Raus_s019: JU Raus_Ende_Mig
// Raus_s020 : SPA Raus_Ende_Mig
// Raus_s021 : SPA Raus_Ende_Mig
Raus_s022: JU Raus_Ende_Mig
Raus_s023: JU Raus_Ende_Mig
Raus_s024: JU Raus_Ende_Mig
Raus_s025: JU Raus_Ende_Mig
Raus_s026: JU Raus_Ende_Mig
Raus_s027: JU Raus_Ende_Mig
Raus_s028: JU Raus_Ende_Mig
Raus_s029: JU Raus_Ende_Mig
Raus_s030: JU Raus_Ende_Mig
--- NW 42: SK-Raus: Schritt 0: Raus-Auftrag erzeugen ---
Raus_s000: NOP 0
// Schrittaktionen:
A Dyn.Sk_aus_Beladeplatz.Reset_Akt // Reset ist aktiv
L 20 // Weiter mit Schritt 20
JC Raus_Neu_Mig // Bei diesem Schritt weiter
A B_Nachstau_Einfahrt
O Y_Platz_1 // Ein Arbeitsplatz geöffnet
O Y_Platz_2
O Y_Platz_3
O Dyn.Platz_1."Trolley_fährt_aus"
O Dyn.Platz_2."Trolley_fährt_aus"
O Dyn.Platz_3."Trolley_fährt_aus"
O Dyn.Status."Trolley_fährt_in_Nachstau"
O Dyn.Status.Reset_aus_Beladeplatz_aktiv
BEC // Kein Platz vor Nachstau-Schleuse
SET
R Dyn.Status."Trolley_fährt_aus_Platz_1"
R Dyn.Platz_1.Freigabe_an_Stopper
R Dyn.Status."Trolley_fährt_aus_Platz_2"
R Dyn.Platz_2.Freigabe_an_Stopper
R Dyn.Status."Trolley_fährt_aus_Platz_3"
R Dyn.Platz_3.Freigabe_an_Stopper
A B_an_Platz_1
AN Dyn.SS."Trolley_ist_aus_Platz_1_ausgefahren>PC" // Alt-Telegramm noch nicht gesendet
A Dyn.SS."PC>Trolley_an_Platz_1_freigegeben" // Signal für Platz-Schleuse zum Öffnen
AN Dyn.Platz_1.Beladestelle_wurde_entsorgt // wegen FIFO-Entsorgung
R Dyn.SS."PC>Trolley_an_Platz_1_freigegeben" // Signal für Platz-Schleuse zum Öffnen
S Dyn.Status."Trolley_fährt_aus_Platz_1"
S Dyn.Platz_1.Beladestelle_wurde_entsorgt
S Dyn.Platz_1.Freigabe_an_Stopper
JC SXR000
A B_an_Platz_2
AN Dyn.SS."Trolley_ist_aus_Platz_2_ausgefahren>PC" // Alt-Telegramm noch nicht gesendet
A Dyn.SS."PC>Trolley_an_Platz_2_freigegeben" // Signal für Platz-Schleuse zum Öffnen
AN Dyn.Platz_2.Beladestelle_wurde_entsorgt // wegen FIFO-Entsorgung
R Dyn.SS."PC>Trolley_an_Platz_2_freigegeben" // Signal für Platz-Schleuse zum Öffnen
S Dyn.Status."Trolley_fährt_aus_Platz_2"
S Dyn.Platz_2.Beladestelle_wurde_entsorgt
S Dyn.Platz_2.Freigabe_an_Stopper
JC SXR000
A B_an_Platz_3
AN Dyn.SS."Trolley_ist_aus_Platz_3_ausgefahren>PC" // Alt-Telegramm noch nicht gesendet
A Dyn.SS."PC>Trolley_an_Platz_3_freigegeben" // Signal für Platz-Schleuse zum Öffnen
AN Dyn.Platz_3.Beladestelle_wurde_entsorgt // wegen FIFO-Entsorgung
R Dyn.SS."PC>Trolley_an_Platz_3_freigegeben" // Signal für Platz-Schleuse zum Öffnen
S Dyn.Status."Trolley_fährt_aus_Platz_3"
S Dyn.Platz_3.Beladestelle_wurde_entsorgt
S Dyn.Platz_3.Freigabe_an_Stopper
JC SXR000
SET
R Dyn.Platz_1.Beladestelle_wurde_entsorgt
R Dyn.Platz_2.Beladestelle_wurde_entsorgt
R Dyn.Platz_3.Beladestelle_wurde_entsorgt
BEU
SXR000: L 1 // Weiter mit Schritt 1
JU Raus_Neu_Mig // Bei diesem Schritt weiter
--- NW 43: SK-Raus: Schritt 1: Trolley gestartet ---
Raus_s001: NOP 0 // Weiterschaltbedingung
A Dyn.Platz_1."Trolley_fährt_aus"
O Dyn.Platz_2."Trolley_fährt_aus"
O Dyn.Platz_3."Trolley_fährt_aus"
= Weiter
// Schrittaktionen:
SET
S Dyn.Status.Beladung_erfolgt
A Y_Platz_1
A Dyn.Status."Trolley_fährt_aus_Platz_1"
S Dyn.Platz_1."Trolley_fährt_aus"
R Dyn.Platz_1.Freigabe_an_Stopper
A Y_Platz_2
A Dyn.Status."Trolley_fährt_aus_Platz_2"
S Dyn.Platz_2."Trolley_fährt_aus"
R Dyn.Platz_2.Freigabe_an_Stopper
A Y_Platz_3
A Dyn.Status."Trolley_fährt_aus_Platz_3"
S Dyn.Platz_3."Trolley_fährt_aus"
R Dyn.Platz_3.Freigabe_an_Stopper
A Weiter
R Dyn.Sk_aus_Beladeplatz.Err_Uebzeit
R Dyn.Status.Trolley_hat_Nachstau_erreicht
L 0 // Angabe der Wartezeit (*100ms)
JC Raus_Plus // Nächsten Raus_Schritt starten************************************************
BEU
--- NW 44: SK-Raus: Schritt 2: Trolley hat Arbeitsplatz verlassen ---
Raus_s002: NOP 0
// Schrittaktionen:
A B_Nachstau_Einfahrt
S Dyn.Status.Trolley_hat_Nachstau_erreicht
A Dyn.Status."Trolley_fährt_aus_Platz_1"
= Y_Weiche_von_Platz_1
S Antrieb_Nachstau_1_vor
S Antrieb_Nachstau_3_vor
A Dyn.Status."Trolley_fährt_aus_Platz_2"
= Y_Weiche_von_Platz_2
S Antrieb_Nachstau_2_vor
S Antrieb_Nachstau_3_vor
S Antrieb_Nachstau_1_vor
A Dyn.Status."Trolley_fährt_aus_Platz_3"
S Antrieb_Nachstau_3_vor
S Antrieb_Nachstau_1_vor
// Weiterschaltbedingung:
A Dyn.Platz_1.Trolley_hat_Arbeitsplatz_verlassen // von Schleuse
A Dyn.Status."Trolley_fährt_aus_Platz_1"
R Dyn.Platz_1.Trolley_hat_Arbeitsplatz_verlassen
R Dyn.Platz_1."Trolley_fährt_aus"
S Dyn.Status."Trolley_fährt_in_Nachstau"
S Dyn.SS."Trolley_ist_aus_Platz_1_ausgefahren>PC" // Signal von Platz-Schleuse
JC R2weiter
A Dyn.Status."Trolley_fährt_aus_Platz_2"
A Dyn.Platz_2.Trolley_hat_Arbeitsplatz_verlassen // von Schleuse
R Dyn.Platz_2.Trolley_hat_Arbeitsplatz_verlassen
R Dyn.Platz_2."Trolley_fährt_aus"
S Dyn.Status."Trolley_fährt_in_Nachstau"
S Dyn.SS."Trolley_ist_aus_Platz_2_ausgefahren>PC" // Signal von Platz-Schleuse
JC R2weiter
A Dyn.Status."Trolley_fährt_aus_Platz_3"
A Dyn.Platz_3.Trolley_hat_Arbeitsplatz_verlassen // von Schleuse
R Dyn.Platz_3.Trolley_hat_Arbeitsplatz_verlassen
R Dyn.Platz_3."Trolley_fährt_aus"
S Dyn.Status."Trolley_fährt_in_Nachstau"
S Dyn.SS."Trolley_ist_aus_Platz_3_ausgefahren>PC" // Signal von Platz-Schleuse
JC R2weiter
// Trolley fährt nicht in Nachstau:
A(
ON Dyn.Status."Trolley_fährt_aus_Platz_2"
O Antrieb_Nachstau_2_aktiv
)
A Antrieb_Nachstau_3_aktiv
A Antrieb_Nachstau_3_aktiv
= Raus_Ueb_akt // Überwachungszeit aktivieren
L 60 // Angabe der Überwachungszeit (*1s)
JU Raus_tueb // Überwachungszeit
R2weiter: SET
R Dyn.Sk_aus_Beladeplatz.Err_Uebzeit
L 0 // Angabe der Wartezeit (*100ms)
JU Raus_Plus // Nächsten Raus_Schritt starten************************************************
--- NW 45: SK-Raus: Schritt 3: Trolley in Nachstau fahren ---
Raus_s003: A Dyn.Status.Trolley_hat_Nachstau_erreicht
A Antrieb_Nachstau_3_aktiv // Nur bei aktivem Antrieb auswerten!
A MindestZeit_Raus_Ok
= Weiter
// Schrittaktionen:
A B_Nachstau_Einfahrt
S Dyn.Status.Trolley_hat_Nachstau_erreicht
A Dyn.Status."Trolley_fährt_aus_Platz_1"
= Y_Weiche_von_Platz_1
S Antrieb_Nachstau_1_vor
S Antrieb_Nachstau_3_vor
A Dyn.Status."Trolley_fährt_aus_Platz_2"
= Y_Weiche_von_Platz_2
S Antrieb_Nachstau_2_vor
S Antrieb_Nachstau_3_vor
S Antrieb_Nachstau_1_vor
A Dyn.Status."Trolley_fährt_aus_Platz_3"
S Antrieb_Nachstau_3_vor
S Antrieb_Nachstau_1_vor
A Weiter
R Dyn.Sk_aus_Beladeplatz.Err_Uebzeit
L 0 // Angabe der Wartezeit (*100ms)
JC Raus_Plus // Nächsten Raus_Schritt starten************************************************
// Trolley fährt nicht in Nachstau:
A(
ON Dyn.Status."Trolley_fährt_aus_Platz_2"
O Antrieb_Nachstau_2_aktiv
)
A Antrieb_Nachstau_3_aktiv
A Antrieb_Nachstau_3_aktiv
= Raus_Ueb_akt // Überwachungszeit aktivieren
L 60 // Angabe der Überwachungszeit (*1s)
JU Raus_tueb // Überwachungszeit
--- NW 46: SK-Raus: Schritt 4: 5s Weiterfahren ---
Raus_s004: SET // Weiterschaltbedingung
= Weiter
// Schrittaktionen:
A Dyn.Status."Trolley_fährt_aus_Platz_2"
AN Antrieb_Nachstau_2_aktiv
ON Antrieb_Nachstau_1_aktiv
ON Antrieb_Nachstau_3_aktiv
O Y_Platz_1 // Ein Arbeitsplatz noch geöffnet
O Y_Platz_2
O Y_Platz_3
S Raus_Warte_neu
S Raus_Warte_stop
A Dyn.Status."Trolley_fährt_aus_Platz_1"
= Y_Weiche_von_Platz_1
S Antrieb_Nachstau_1_vor
S Antrieb_Nachstau_3_vor
A Dyn.Status."Trolley_fährt_aus_Platz_2"
= Y_Weiche_von_Platz_2
S Antrieb_Nachstau_2_vor
S Antrieb_Nachstau_3_vor
S Antrieb_Nachstau_1_vor
A Dyn.Status."Trolley_fährt_aus_Platz_3"
S Antrieb_Nachstau_3_vor
S Antrieb_Nachstau_1_vor
L 50 // Angabe der Wartezeit (*100ms)
JU Raus_Plus // Nächsten Raus_Schritt starten************************************************
--- NW 47: SK-Raus: Schritt 5: Fertig ---
Raus_s005: NOP 0 // Weiterschaltbedingung
JU Raus_Ende
--- NW 48: SK-Raus: Schritt 20: Schleuse resetten ---
Raus_s020: SET // Weiterschaltbedingung
A Antrieb_Nachstau_1_aktiv
A Antrieb_Nachstau_2_aktiv
A Antrieb_Nachstau_3_aktiv
= Weiter // Weiterschaltbedingung ist erfüllt
// Schrittaktionen:
SET
S Antrieb_Nachstau_1_vor // Antriebe starten
S Antrieb_Nachstau_2_vor
S Antrieb_Nachstau_3_vor
L 16#B201
T Dyn.Stop_Ursache_Raus
A Weiter // Weiterschaltbedingung ist erfüllt
L 300 // Angabe der Wartezeit (*100ms)
JC Raus_Plus // Nächsten Raus_Schritt starten************************************************
BEU
--- NW 49: SK-Raus: Schritt 21: Reset ist zu Ende ---
Raus_s021: SET
R Dyn.Sk_aus_Beladeplatz.Reset_Akt // Reset ist aktiv
JU Raus_Ende // Ende
--- NW 50: SK-Raus: Schrittkette beenden ---
Raus_Ende: L 0 // Schritt 0: Warten
T Dyn.Sk_aus_Beladeplatz.Akt_Schritt
L 0 // Zeitwert löschen
T Dyn.Sk_aus_Beladeplatz.Terr_Zelle
T Dyn.Sk_aus_Beladeplatz.Tok_Zelle
SET
R Dyn.Sk_aus_Beladeplatz.Err_Uebzeit
R Dyn.Status."Trolley_fährt_aus_Platz_1"
R Dyn.Platz_1."Trolley_fährt_aus"
R Dyn.Platz_1.Freigabe_an_Stopper
R Dyn.Status."Trolley_fährt_aus_Platz_2"
R Dyn.Platz_2."Trolley_fährt_aus"
R Dyn.Platz_2.Freigabe_an_Stopper
R Dyn.Status."Trolley_fährt_aus_Platz_3"
R Dyn.Platz_3."Trolley_fährt_aus"
R Dyn.Platz_3.Freigabe_an_Stopper
R Dyn.Status."Trolley_fährt_in_Nachstau"
BEU
--- NW 51: SK-Raus: Nächsten Schritt aktivieren ---
Raus_Plus: T Dyn.Sk_aus_Beladeplatz.T_ok // Wartezeit übergeben
A Dyn.Sk_aus_Beladeplatz.Err_Uebzeit // Störung noch nicht quittiert
BEC
L 0 // keine Wartezeit ?
==I // Ja ! -> sofort weiter
JC Raus_w220
AN Raus_Warte_neu // Wartezeit neutriggern
JC Nix_Neu
L 0
T Dyn.Sk_aus_Beladeplatz.Tok_Zelle // Wartezeit
Nix_Neu: A Raus_Warte_stop // Wartezeit stoppen
BEC
AN "100ms-Impuls" // 0,1s-Impuls
BEC
L Dyn.Sk_aus_Beladeplatz.Tok_Zelle
L "MW2" // Wartezeit +100ms
+I
T Dyn.Sk_aus_Beladeplatz.Tok_Zelle // Wartezeit
L Dyn.Sk_aus_Beladeplatz.T_ok // abgelaufen ?
<I // Nein !
BEC
Raus_w220: L Dyn.Sk_aus_Beladeplatz.Akt_Schritt
+ 1 // Schritt +1
T Dyn.Sk_aus_Beladeplatz.Akt_Schritt
L 0 // Zeitwerte löschen
T Dyn.Sk_aus_Beladeplatz.Terr_Zelle
T Dyn.Sk_aus_Beladeplatz.Tok_Zelle
SET
S Dyn.Sk_aus_Beladeplatz.Einzelschritt_fertig // Einzelschritt ist ausgeführt
BEU
--- NW 52: SK-Raus: Überwachungszeit kontrollieren ---
Raus_tueb: A Raus_Ueb_akt
= Dyn.Sk_aus_Beladeplatz.Ueb_akt // Für Statuskontrolle
T Dyn.Sk_aus_Beladeplatz.T_Err // Für Statuskontrolle
L Dyn.Sk_aus_Beladeplatz.Terr_Zelle // Maximalzeit
>I // abgelaufen ?
AN Dyn.Sk_aus_Beladeplatz.Err_Uebzeit
JC en50 // Nein !
A Raus_Ueb_akt // Überwachungszeit aktivieren
S Dyn.Sk_aus_Beladeplatz.Err_Uebzeit
L 0 // Zeitwert löschen
T Dyn.Sk_aus_Beladeplatz.Terr_Zelle
BEU
en50: NOP 0
--- NW 53: SK-Raus: Überwachungszeit +1 ---
AN Dyn.Sk_aus_Beladeplatz.Ueb_akt // Schrittaktion ist aktiv
ON "1s-Impuls"
BEC
L Dyn.Sk_aus_Beladeplatz.Terr_Zelle
+ +1
T Dyn.Sk_aus_Beladeplatz.Terr_Zelle
BEU
--- NW 54: Ende ---
BE