2449 lines
78 KiB
Plaintext
2449 lines
78 KiB
Plaintext
FUNCTION_BLOCK "MHMOmniSchleuse_Plus"
|
|
TITLE = HM-OmniSchleusen-Modul Plus
|
|
{ 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 Plus: HM-Omniflow 2100 / 12.2025
|
|
//-es dürfen X-Trolleys zw. Schleuse und Raus-Sensor sich befinden
|
|
//
|
|
//Version: HM-Omniflow 2100 / 07.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
|
|
Schleusen_Nr { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // Aufruf für Schleuse
|
|
ErrQuit { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Ablaufstörung quittieren
|
|
B_VorSchleuse { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Sensor Trolley fährt in Bereich
|
|
B_InSchleuse { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Sensor Trolley ist in Schleuse
|
|
B_Zähl { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Sensor Trolley ist imnächsten Bereich
|
|
B_Stau_raus { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Sensor Stau im Bereich rausfahren
|
|
Start_Ok { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Starten ist erlauTrolley
|
|
Antrieb_Schleuse_aktiv { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Kreisel-Antrieb aktiv
|
|
Antrieb_plus_aktiv { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Kreisel-Antrieb plus aktiv
|
|
Schleuse_geöffnet : Bool; // Schleuse hat geöffnet
|
|
RestZeit_Bereich_plus : Int := 999; // Bereich +1: Restzeit bis AFS stoppt (s)
|
|
END_VAR
|
|
|
|
VAR_OUTPUT
|
|
Y_Schleuse_Auf { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Schleuse öffnen
|
|
Error { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Word; // Störungen übergeben
|
|
END_VAR
|
|
|
|
VAR_IN_OUT
|
|
Antrieb_Schleuse_vor { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Schleusen-Antrieb einschalten
|
|
Antrieb_Schleuse_start { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Schleusen-Antrieb mit Zeit starten
|
|
Antrieb_Schleuse_stop : Bool; // Schleusen-Antrieb stoppen
|
|
Antrieb_Schleuse_PS : Bool; // Schleusen-Antrieb Energie sparen
|
|
Antrieb_plus_vor { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Antrieb plus einschalten
|
|
Antrieb_plus_start { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Antrieb plus mit Zeit starten
|
|
hStOk : Bool; // Anzeige Start n. Störung aktivieren
|
|
END_VAR
|
|
|
|
VAR
|
|
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
|
|
"Weiche+1" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // Weiche +1, wo reserviert wurde
|
|
Frei18 { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int;
|
|
Frei20 { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int;
|
|
END_STRUCT;
|
|
Para { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Struct // Parameter
|
|
Schleusen_DL_DB { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // Einsprung Schleuse-Datenliste-DB
|
|
Weichen_DL_DB { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // Einsprung Weichen-Datenliste-DB
|
|
Leser_DL_DB { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // Einsprung Weichen-Datenliste-DB
|
|
END_STRUCT;
|
|
Status2 { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Struct
|
|
Trolley_an_Schleuse { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Trolley ist an Schleuse
|
|
"2.Lesung_aktiv" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // 2.Lesung erfolgt
|
|
"3.Lesung_aktiv" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // 3.Lesung erfolgt
|
|
TrolleyPos_übergeben { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Trolley-Pos. übergeben
|
|
"Warten_4.V" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Warten auf 4.V
|
|
"Weichen-Schritt" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Schritt 13-17 aktiv (Weiche evtl. belegen)
|
|
"Trolley an Raus-Sensor" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Trolley ist am Raus-Sensor
|
|
"Stau_an_Raus-Sensor" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Stau an Raus-Sensor (kein Zählen mehr)
|
|
Einfahrzeit_lernen { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Ausfahrzeit lernen
|
|
Telegramm_gesendet { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Telegramm wurde in Send-FIFO eingetragen
|
|
END_STRUCT;
|
|
Schleuse { S7_SetPoint := 'False'} : "UDLHMOmniSchleuse_Plus"; // Statische Schleusendaten (aus DL)
|
|
Dyn : Struct // Dynamische Daten
|
|
Status { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Struct
|
|
Trolley_fährt_in_Schleuse { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Trolley fährt in Schleuse
|
|
Trolley_wartet_Lesung { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Trolley wartet auf Auftrag
|
|
"Trolley_wartet_auf_Ziel-FC" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
|
|
"Trolley_wartet_auf_Weiche+1" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
|
|
"Trolley_wartet_Bereich+1" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Trolley wartet auf Bereich +1
|
|
Trolley_fährt_aus { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Trolley fährt aus
|
|
MindestZeit_ok { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Schleuse ist MindestZeit geöffnet
|
|
Trolley_draussen { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Trolley ist ausgefahren
|
|
Leser_triggern { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
|
|
SF_angefordert { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
|
|
Kein_Stop_mehr { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Kein Stop mehr, Antrieb soll starten
|
|
Trolley_fährt_rückwärts { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Trolley in Schleuse rückwärts erkannt
|
|
Weiche_geschaltet { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
|
|
"Trolley ausserhalb Weiche" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Trolley hat Weiche verlassen (von Weiche)
|
|
Error_aktiv { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Störung vorhanden
|
|
Reset_aktiv { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool := TRUE; // Reset aktiv
|
|
END_STRUCT;
|
|
TrolleyID_Schleuse { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : DInt; // Trolley-Nr in der Schleuse
|
|
Trolley_EndZiel { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Word; // Trolley-EndZiel
|
|
Trolley_ZwischenZiel { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Word; // Trolley-ZwischenZiel
|
|
Trolley_ShopGroup { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : DInt; // Trolley-ShopGroup
|
|
Weichen_Ziel { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Word; // Weichen-Ziel (Für WeichenModul von Ziel-FC)
|
|
TrolleyID_Eingefahren { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : DInt; // Trolley-Nr von Bereich -1 gemeldet
|
|
TrolleyID_ausgefahren { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : DInt; // TrolleyID des ausgefahrenen Trolleys
|
|
HMI : Struct
|
|
TrolleyID_in_Schleuse { ExternalWritable := 'False'} : DInt; // Trolley-Nr in Schleuse (IN:PLC, OUT:PLC)
|
|
TrolleyID_Input : DInt; // Trolley-Nr Input (IN:HMI, OUT:PLC)
|
|
Schleuse_resetten : Bool; // Schleuse resetten (IN:HMI, Out:PLC)
|
|
END_STRUCT;
|
|
Sk { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : "USk_ILS"; // Status der Schrittkette
|
|
Leser { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Struct
|
|
IN { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Struct
|
|
xOutReadyForNewScan { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // DBX10.1: Reader ist bereit für Leseanforderung
|
|
xOutReadingDone { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // DBX10.0: Lesevorgang abgeschlossen / Handshake raus
|
|
xOutCodeGood { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // DBX278.0: Gute Lesung
|
|
xOutCodeBad { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // DBX278.1: Schlechte Lesung
|
|
nOutBarcode { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : DInt; // DBD12: Trolley ID
|
|
END_STRUCT;
|
|
OUT { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Struct
|
|
xInStartReading { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // DBX4.1: Starte Lesevorgang
|
|
xInHandshakeDone { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // DBX4.2: Handshake Daten abgeholt
|
|
xInErrQuit { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // DBX4.4: Fehler rücksetzen
|
|
xInReset { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // DBX4.5: Allgemeines Rücksetzen des Bausteins
|
|
END_STRUCT;
|
|
END_STRUCT;
|
|
TrolleyID_unbekannt_Schleuse { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'; S7_SetPoint := 'True'} : DInt; // TrolleyID unbekannt (Trolley in Schleuse)
|
|
Rueckmld { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Struct
|
|
RET_VAL_BLKMOV_Schleuse { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // Rückmeldung nach BLKMOV-Aufruf
|
|
RET_VAL_DL_Schleuse { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Byte;
|
|
RET_VAL_DL_Weiche { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Byte; // Rückmeldung nach DatenOut-Aufruf
|
|
RET_VAL_DL_Leser { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Byte; // Rückmeldung nach DatenOut-Aufruf
|
|
END_STRUCT;
|
|
Error { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : "UErrHMOmniSchleuse";
|
|
Stau_Zeit { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // Sensor B_VorSep ist belegt [1s]
|
|
Mindest_Zeit { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // Sensor B_VorSep ist frei [1s]
|
|
Leer_Zeit { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int;
|
|
Stop_Ursache { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Word; // Stop-Stelle: Nw + Position
|
|
Vereinzelungstakte { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : DInt; // Anzahl der getätigten Vereinzelungstakte
|
|
ZwischenZiel_eingefahren { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Word; // Trolley-ZwischenZiel von Bereich -1
|
|
Zeit_Ohne_B_In_Schleuse : Int; // Trolley nicht an B_In_Schleuse
|
|
Zeit_Ohne_B_Zähl : Int; // Trolley nicht an B_Zähl
|
|
Zeit_Ausfahren_Ohne_B_Zähl : Int; // Trolley fährt nicht zu B_Zähl
|
|
Raus_Trolleys : Int; // Anzahl der Trolleys zwischen Schleuse und Raus-Sensor
|
|
Stau_Zeit_RausSensor : Int; // Sensor B_AusSep ist belegt [1s]
|
|
Zurück_gemeldetes_Weichen_Ziel { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Word; // Von Weiche zurück gemeldetes Weichen-Ziel
|
|
SAVE2 { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Struct
|
|
Leser_DB { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // Weichen-FIFO-DB
|
|
Leser_DD { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : DInt; // Weichen-FIFO-DD
|
|
END_STRUCT;
|
|
WarteZeit_PS : Int;
|
|
Restzeit_bis_Schleuse : Int;
|
|
Res200 { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Array[1..11] of Int; // Reserve
|
|
END_STRUCT;
|
|
END_VAR
|
|
|
|
VAR_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
|
|
"Kein_Weichenbereich +1" : Bool;
|
|
"Reservierung_Weiche+1_aktiv" : Bool;
|
|
Leser_Zugriff : Bool; // Leser-Zugriff vorhanden
|
|
LeserFC_vorhanden : Bool;
|
|
ZielFC_vorhanden : Bool;
|
|
DraussenFC_vorhanden : Bool;
|
|
"TrolleyID_Bereich-1" : Bool; // Trolley--ID von Bereich -1 gemeldet
|
|
Trolley_draussen : Bool; // Signal: Trolley ist draussen
|
|
Antriebe_starten : Bool;
|
|
Einfahrzeit_nicht_bekannt : Bool;
|
|
LeserFC : Word; // Ziel-FC
|
|
ZielFC : Word; // Ziel-FC
|
|
DraussenFC : Word; // Draussen-FC
|
|
AR1Start : DInt; // Startwert mit Offset 0
|
|
AR1Zeiger : DWord; // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
|
|
END_VAR
|
|
|
|
|
|
BEGIN
|
|
NETWORK
|
|
TITLE = Parameter-Übergabe
|
|
L #Schleusen_Nr;
|
|
|
|
L 274 ;//Einsprung Schleuse-DL
|
|
T #Para.Schleusen_DL_DB;//vor Aufruf übergeben!
|
|
|
|
L 279 ;//Einsprung Weichen-DL
|
|
T #Para.Weichen_DL_DB;//vor Aufruf übergeben!
|
|
|
|
L 273;
|
|
T #Para.Leser_DL_DB;
|
|
|
|
NETWORK
|
|
TITLE = Anzeige OP
|
|
U #ErrQuit ;//Überwachungszeit abgelaufen quittieren
|
|
R #Dyn.Sk.Err_Uebzeit;
|
|
|
|
L 252;//Bereichsstop aktiv
|
|
UN #Dyn.Sk.Bereich_ok;//Also: Bereichsstop / Not-Aus
|
|
SPB w010;
|
|
|
|
L 253;
|
|
UN #Dyn.Sk.Auto_akt;//Keine Betriebsart
|
|
UN #Dyn.Sk.Hand_akt;
|
|
SPB w010;
|
|
|
|
L 255;//Handbetrieb aktiv
|
|
U #Dyn.Sk.Hand_akt;
|
|
SPB w010;
|
|
|
|
L #Dyn.Sk.Akt_Schritt;//Aktiver Schritt
|
|
w010: T #Dyn.Sk.OP_Schritt;
|
|
|
|
NETWORK
|
|
TITLE = Out-Bits zum Zurücksetzen
|
|
SET;
|
|
R #Y_Schleuse_Auf;
|
|
|
|
SET ;//Jeden Zyklus neu
|
|
R #Dyn.Status.Trolley_wartet_Lesung;
|
|
R #Dyn.Status."Trolley_wartet_auf_Ziel-FC";
|
|
R #Dyn.Status."Trolley_wartet_auf_Weiche+1";
|
|
R #Dyn.Status."Trolley_wartet_Bereich+1";
|
|
R #Dyn.Status.Trolley_fährt_aus;
|
|
R #Dyn.Status.Trolley_draussen;
|
|
R #Leser_Zugriff;
|
|
R #Status2."Weichen-Schritt";
|
|
|
|
U #Dyn.Sk.Reset_Akt;
|
|
= #Dyn.Status.Reset_aktiv;
|
|
|
|
NETWORK
|
|
TITLE = HMI-Zeug
|
|
|
|
//Von HMI:
|
|
U #Dyn.HMI.Schleuse_resetten;
|
|
R #Dyn.HMI.Schleuse_resetten;//von HMI
|
|
S #Dyn.Sk.Reset ;//SK zurücksetzen
|
|
|
|
L #Dyn.HMI.TrolleyID_Input;//Wird direkt im Programm verwertet (s.u.)
|
|
|
|
//An HMI:
|
|
ToHMI: L #Dyn.TrolleyID_Schleuse;
|
|
T #Dyn.HMI.TrolleyID_in_Schleuse;
|
|
|
|
NETWORK
|
|
TITLE = Schrittkette zurücksetzen
|
|
U #ErrQuit ;//Überwachungszeit abgelaufen quittieren
|
|
R #Dyn.Sk.Err_Uebzeit;
|
|
|
|
UN #Dyn.Sk.Reset ;//SK zurücksetzen
|
|
SPB en04;
|
|
|
|
//Schrittkette zurücksetzen:
|
|
L 0;//Schritt 0: Warten
|
|
T #Dyn.Sk.Akt_Schritt;
|
|
T #Dyn.Raus_Trolleys;
|
|
|
|
L 0;//Zeitwert löschen
|
|
T #Dyn.Sk.Terr_Zelle;
|
|
T #Dyn.Sk.Tok_Zelle;
|
|
|
|
SET;
|
|
R #Dyn.Error.Err_BLKMov;//Error bei Block kopieren
|
|
R #Dyn.Sk.Reset;//SK zurücksetzen
|
|
R #Dyn.Sk.Err_Schritt;//Undefinierter Schritt
|
|
R #Dyn.Sk.Err_Uebzeit;//Sofort weiter !
|
|
R #Status2.Telegramm_gesendet;
|
|
S #Dyn.Sk.Reset_Akt;//Reset ist aktiv
|
|
|
|
SET;
|
|
R #Dyn.Error.Schleuse_DL;//Schleuse-Datenliste fehlerhaft
|
|
R #Dyn.Error.Undef_Schleuse;//undefinierter Schleuse
|
|
R #Dyn.Error.Err_Trolley_nicht_in_Schleuse;//Trolley fährt nicht in Schleuse
|
|
R #Dyn.Error.Err_Uebzeit;//Überwachungzeit ist abgelaufen
|
|
R #Dyn.Error.Err_Schritt;//Schritt-Nummer ist nicht definiert
|
|
R #Dyn.Error.Err_Stau_Einfahrt;
|
|
R #Dyn.Error.Err_BLKMov;
|
|
R #Dyn.Error.Err_Trolley_raus;//Trolley fährt nicht aus
|
|
R #Dyn.Error.Err_Raus_Sensor;//Raus-/Belade-Sensor wird nicht erreicht (oder dauernd aktiv)!
|
|
R #Dyn.Error.Err_Ziel;//kein Ziel angegeben
|
|
R #Dyn.Error.Err_Weichen_DL;//Weichen-Datenliste fehlerhaft
|
|
R #Dyn.Error.Err_Undef_Weiche;//undefinierte Weiche
|
|
R #Dyn.Error.Err_Weiche_belegt;//Weiche bleibt belegt
|
|
R #Dyn.Error.Err_Kein_LeseErgebnis;
|
|
R #Dyn.Error.Err_Leser_nicht_bereit;
|
|
|
|
L 0;
|
|
T #Dyn.SAVE2.Leser_DB;
|
|
L DINT#0;
|
|
T #Dyn.SAVE2.Leser_DD;
|
|
T #Dyn.Leser.IN.nOutBarcode;
|
|
|
|
//Defaultwerte übergeben:
|
|
L 0 ;//Damit statische Werte neu aus Datenbank geholt werden !
|
|
T #Schleuse.Schleusen_Nr;//Nummer des Schleuses
|
|
|
|
SPA RET;
|
|
|
|
en04: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = Störungen nach Außen übergeben
|
|
L 0;
|
|
T "MW200";
|
|
|
|
U #Dyn.Error.Schleuse_DL;//Schleuse-Datenliste fehlerhaft
|
|
= "M200.0";
|
|
U #Dyn.Error.Undef_Schleuse;//undefinierter Schleuse
|
|
= "M200.1";
|
|
U #Dyn.Error.Err_Trolley_nicht_in_Schleuse;//Trolley fährt nicht in Schleuse
|
|
= "M200.2";
|
|
U #Dyn.Sk.Err_Uebzeit;
|
|
= #Dyn.Error.Err_Uebzeit;//Überwachungzeit ist abgelaufen
|
|
= "M200.3";
|
|
NOT;
|
|
R #Dyn.Sk.Err_Uebzeit_AnzOk;
|
|
U #Dyn.Sk.Err_Schritt;
|
|
= #Dyn.Error.Err_Schritt;//Schritt-Nummer ist nicht definiert
|
|
= "M200.4";
|
|
U #Dyn.Error.Err_Stau_Einfahrt;
|
|
UN #B_InSchleuse;
|
|
UN #Y_Schleuse_Auf;
|
|
= "M200.5";
|
|
U #Dyn.Error.Err_BLKMov;//Error bei Block kopieren
|
|
= "M200.6";
|
|
U #Dyn.Error.Err_Trolley_raus;//Trolley fährt nicht aus
|
|
= "M200.7";
|
|
U #Dyn.Error.Err_Raus_Sensor;//Raus-/Belade-Sensor wird nicht erreicht (oder dauernd aktiv)!
|
|
= "M201.0";
|
|
U #Dyn.Error.Err_Ziel;//Trolley-Ziel nicht bekannt
|
|
= "M201.1";
|
|
U #Dyn.Error.Err_Weichen_DL;//Weichen-Datenliste fehlerhaft
|
|
= "M201.2";
|
|
U #Dyn.Error.Err_Undef_Weiche;//undefinierte Weiche
|
|
= "M201.3";
|
|
U #Dyn.Error.Err_Weiche_belegt;//Weiche bleibt belegt
|
|
= "M201.4";
|
|
U #Dyn.Error.Err_Kein_LeseErgebnis;
|
|
= "M201.5";
|
|
U #Dyn.Error.Err_Leser_nicht_bereit;
|
|
= "M201.6";
|
|
U #Dyn.Error.Barcode_nicht_bekannt;
|
|
= "M201.7";
|
|
|
|
//Andere Meldung als Überwachungszeit aktiv ?:
|
|
L "MW200";
|
|
L 2#1111_0111_1111_1111;
|
|
UW;
|
|
L 2#0000_0000_0000_0000;//Andere Meldung als Üb.zeit aktiv ?
|
|
<>I;//Ja !
|
|
ON #Dyn.Sk.Err_Uebzeit_AnzOk;//Störung anzeigen ok, da 2.Zyklus aktiv !
|
|
R "M200.3";//Üb.Zeit-Meldung nicht an PC senden
|
|
|
|
U #Dyn.Sk.Err_Uebzeit;
|
|
S #Dyn.Sk.Err_Uebzeit_AnzOk;//Störung anzeigen ok, da 2.Zyklus aktiv !
|
|
|
|
L "MW200";
|
|
T #Error;//Schnittstelle nach Außen
|
|
|
|
//Störung vorhanden:
|
|
L 0;
|
|
<>I;//Ja !
|
|
= #Dyn.Status.Error_aktiv;
|
|
S #hStOk;
|
|
|
|
//Antrieb stoppen:
|
|
U(;
|
|
ON #Dyn.Sk.Auto_akt;//SystemVoraussetzungen fehlen
|
|
O #Dyn.Sk.Hand_akt;
|
|
ON #Dyn.Sk.Bereich_ok;
|
|
);
|
|
S #Antrieb_Schleuse_stop;//Antrieb stoppen
|
|
|
|
//Störungen pro Zyklus neu erzeugen:
|
|
SET;
|
|
R #Dyn.Error.Schleuse_DL;//Schleuse-Datenliste fehlerhaft
|
|
R #Dyn.Error.Undef_Schleuse;//undefinierter Schleuse
|
|
/// R #Dyn.Error.Err_Trolley_nicht_in_Schleuse//Trolley fährt nicht in Schleuse
|
|
/// R #Dyn.Error.Err_Uebzeit //Überwachungzeit ist abgelaufen
|
|
R #Dyn.Error.Err_Schritt;//Schritt-Nummer ist nicht definiert
|
|
/// R #Dyn.Error.Err_Stau_Einfahrt//Betriebsart ist nicht möglich
|
|
R #Dyn.Error.Err_BLKMov;
|
|
/// R #Dyn.Error.Err_Trolley_raus//Trolley fährt nicht aus
|
|
/// R #Dyn.Error.Err_Raus_Sensor//Raus-/Belade-Sensor wird nicht erreicht (oder dauernd aktiv)!
|
|
R #Dyn.Error.Err_Ziel;//Trolley-Ziel nicht bekannt
|
|
R #Dyn.Error.Err_Weichen_DL;//Weichen-Datenliste fehlerhaft
|
|
R #Dyn.Error.Err_Undef_Weiche;//undefinierte Weiche
|
|
R #Dyn.Error.Err_Weiche_belegt;//Weiche bleibt belegt
|
|
/// R #Dyn.Error.Err_Kein_LeseErgebnis
|
|
/// R #Dyn.Error.Err_Leser_nicht_bereit
|
|
R #Dyn.Error.Barcode_nicht_bekannt;
|
|
|
|
UN #Dyn.Sk.Err_Uebzeit;
|
|
R #Dyn.Error.Err_Trolley_nicht_in_Schleuse;//Trolley fährt nicht in Schleuse
|
|
R #Dyn.Error.Err_Trolley_raus;//Trolley fährt nicht aus
|
|
|
|
NETWORK
|
|
TITLE = Statische Schleuse-Parameter holen
|
|
L #Schleuse.Schleusen_Nr;//Nummer des Schleuses
|
|
L #Schleusen_Nr;//Aufruf-Parameter
|
|
==I;//Identisch ?
|
|
R #Dyn.Error.Schleuse_DL;//Schleusedatenbank fehlerhaft
|
|
R #Dyn.Error.Undef_Schleuse;//undefinierter Schleuse
|
|
SPB en06;//Ja !
|
|
|
|
T "MW200";//Search-Daten
|
|
|
|
CALL "DatenOut"
|
|
( SSDB := #Para.Schleusen_DL_DB ,
|
|
SSDW := 0 ,
|
|
PARA := WORD#16#0000 ,
|
|
SEARCHDATEN := P#M200.0 ,
|
|
RE_VAL := "MB199" ,
|
|
OUTDATEN := P#M220.0 ,
|
|
Position := "MW196"
|
|
);
|
|
|
|
L "MB199";
|
|
T #Dyn.Rueckmld.RET_VAL_DL_Schleuse;//Rückmeldung bei Datenbank-Zugriff (Gefälle-DL)
|
|
|
|
SPBI G_Ok;
|
|
|
|
U "M199.0";
|
|
SPBN w060;
|
|
|
|
SET;
|
|
= #Dyn.Error.Schleuse_DL;//Schleusedatenbank fehlerhaft
|
|
|
|
L 16#A061;
|
|
T #Dyn.Stop_Ursache;
|
|
|
|
SPA RET;
|
|
|
|
w060: SET;
|
|
S #Dyn.Error.Undef_Schleuse;//undefinierter Schleuse
|
|
|
|
L 16#A062;
|
|
T #Dyn.Stop_Ursache;
|
|
|
|
SPA RET;
|
|
|
|
//Kennung + Datenbytes
|
|
G_Ok: SET;
|
|
R #Dyn.Error.Schleuse_DL;//Gefälledatenbank fehlerhaft
|
|
R #Dyn.Error.Undef_Schleuse;//undefinierte Gefällestrecke
|
|
|
|
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 BLKMOV//Datenliste-Daten speichern
|
|
{blk_type := 'Variant'}
|
|
( SRCBLK := #Quelle ,
|
|
RET_VAL := #Dyn.Rueckmld.RET_VAL_BLKMOV_Schleuse ,
|
|
DSTBLK := #Schleuse //#Ziel
|
|
);
|
|
|
|
L 16#A063;
|
|
T #Dyn.Stop_Ursache;
|
|
|
|
L #Dyn.Rueckmld.RET_VAL_BLKMOV_Schleuse;//Rückmeldung
|
|
L 0;//Fehler vorhanden ?
|
|
<>I;//Ja !
|
|
= #Dyn.Error.Err_BLKMov ;//Error bei Block kopieren
|
|
SPB RET;
|
|
|
|
L #Schleuse.Schleusen_Typ;//Schleusetyp = 1275 (HM-Schleuse Plus)
|
|
L 1275 ;//Dieser Aufruf-FB ?
|
|
==I;//Ja !
|
|
SPB w061;
|
|
|
|
SET;
|
|
S #Dyn.Error.Undef_Schleuse;//undefinierter Schleuse
|
|
|
|
L 0 ;//Schleuse ungültig !
|
|
T #Schleuse.Schleusen_Nr;//Nummer des Schleuses
|
|
|
|
L 16#A064;
|
|
T #Dyn.Stop_Ursache;
|
|
|
|
SPA RET;
|
|
|
|
//Defaultwerte übergeben:
|
|
w061: NOP 0;
|
|
|
|
SPA RET;
|
|
|
|
en06: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = Einsprung Weiche plus ermitteln
|
|
L #SAVE.Weichen_DB;//Weichen-FIFO-DB
|
|
L 0;//Einsprung-Zeiger bekannt ?
|
|
>I;//Ja !
|
|
R #"Kein_Weichenbereich +1";
|
|
SPB En08;
|
|
|
|
L #Schleuse.RausWeichen_Nr;//Nr. der vorhandenen Weiche
|
|
T "MW200";//Search-Daten
|
|
L 0;//angegeben ?
|
|
==I;//Nein !
|
|
= #"Kein_Weichenbereich +1";
|
|
R #Dyn.Error.Err_Undef_Weiche;//undefinierte Weiche
|
|
SPB En08;
|
|
|
|
CALL "DatenOut"
|
|
( SSDB := #Para.Weichen_DL_DB ,
|
|
SSDW := 0 ,
|
|
PARA := WORD#16#0000 ,
|
|
SEARCHDATEN := P#M200.0 ,
|
|
RE_VAL := "MB199" ,
|
|
OUTDATEN := P#M220.0 ,
|
|
Position := "MW196"
|
|
);
|
|
|
|
L "MB199";
|
|
T #Dyn.Rueckmld.RET_VAL_DL_Weiche;//Rückmeldung bei Datenbank-Zugriff (Weiche-DL)
|
|
|
|
SPBI W_Ok;
|
|
|
|
U "M199.0";
|
|
= #Dyn.Error.Err_Weichen_DL;//Weichen-Datenliste fehlerhaft
|
|
SPB En08;
|
|
|
|
SET;
|
|
S #Dyn.Error.Err_Undef_Weiche;//undefinierte Weiche
|
|
|
|
SPA En08;
|
|
|
|
W_Ok: L "MW224";
|
|
T #SAVE.Weichen_DB ;//Weichen-FIFO-DB
|
|
L 0;//sinnvoller Wert ?
|
|
<=I;//Nein !
|
|
S #Dyn.Error.Err_Undef_Weiche;//undefinierte Weiche
|
|
SPB En08;
|
|
|
|
L "MW226";
|
|
T #SAVE.Weichen_DW;//Weichen-FIFO-DW
|
|
|
|
En08: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = Trolley in Schleuse entprellen
|
|
U #B_InSchleuse;
|
|
SPB B_ok;
|
|
|
|
UN #Status2.Trolley_an_Schleuse;
|
|
ON "1s-Impuls";
|
|
SPB Xn08;
|
|
|
|
L #Dyn.Zeit_Ohne_B_In_Schleuse;
|
|
+ 1 ;//Zeit ohne Sensor +1s
|
|
T #Dyn.Zeit_Ohne_B_In_Schleuse;
|
|
|
|
L 3;//Nach ca. 3s
|
|
<I;
|
|
SPB Xn08;
|
|
|
|
SET;
|
|
R #Status2.Trolley_an_Schleuse;
|
|
|
|
B_ok: L 0;
|
|
T #Dyn.Zeit_Ohne_B_In_Schleuse;
|
|
|
|
Xn08: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = Antrieb starten / stoppen / Schleuse geöffnet
|
|
|
|
//Antrieb zusätzlich starten:
|
|
U #ErrQuit ;//Überwachungszeit abgelaufen quittieren
|
|
O #Schleuse_geöffnet;
|
|
S #Antrieb_Schleuse_start;//Antrieb starten
|
|
S #Antrieb_plus_start;//Kreisel-Antrieb plus starten
|
|
|
|
U #Schleuse_geöffnet;
|
|
R #Dyn.Status.Trolley_fährt_in_Schleuse;
|
|
|
|
L #Dyn.Raus_Trolleys;
|
|
L 0 ;//Trolles unterwegs?
|
|
>I ;//Ja!
|
|
UN #Status2."Stau_an_Raus-Sensor";//Stau an Raus-Sensor
|
|
O;
|
|
U #B_VorSchleuse;////
|
|
UN #Dyn.Error.Err_Stau_Einfahrt;////
|
|
O #Schleuse_geöffnet;
|
|
= #Antriebe_starten;
|
|
|
|
U #Antriebe_starten;
|
|
/// UN #Dyn.Error.Err_Trolley_raus//Trolley fährt nicht aus
|
|
U(;
|
|
O #Dyn.Status.Weiche_geschaltet;//Weiche ist aktiv
|
|
O #"Kein_Weichenbereich +1";
|
|
);
|
|
U #Schleuse.Parameter_allg.Antrieb_Plus_vorhanden;
|
|
S #Antrieb_plus_vor ;//Antrieb plus einschalten
|
|
|
|
U #Antriebe_starten;
|
|
/// UN #Dyn.Error.Err_Trolley_raus//Trolley fährt nicht aus
|
|
U(;
|
|
O #Dyn.Status.Weiche_geschaltet;//Weiche ist aktiv
|
|
O #"Kein_Weichenbereich +1";
|
|
);
|
|
U(;
|
|
O #Antrieb_plus_aktiv;
|
|
ON #Schleuse.Parameter_allg.Antrieb_Plus_vorhanden;
|
|
);
|
|
S #Antrieb_Schleuse_vor;//Antrieb einschalten
|
|
|
|
//Trolley ist in Schleuse und wartet
|
|
U #Status2.Trolley_an_Schleuse ;//Trolley im Schleuse erkannt
|
|
UN #Schleuse_geöffnet;//Trolley soll ausfahren
|
|
U(;
|
|
ON #B_VorSchleuse;
|
|
O #Dyn.Error.Err_Stau_Einfahrt;
|
|
);
|
|
UN #Dyn.Status.Kein_Stop_mehr;//Wird in Schritt 2 gesetzt
|
|
O;
|
|
U #Schleuse_geöffnet ;//Trolley soll ausfahren
|
|
U #Schleuse.Parameter_allg.Antrieb_Plus_vorhanden;
|
|
UN #Antrieb_plus_aktiv;
|
|
SPB Warten;
|
|
|
|
L 0;
|
|
T #Dyn.WarteZeit_PS;
|
|
|
|
SPA NwE10;
|
|
|
|
Warten: L #Dyn.WarteZeit_PS;
|
|
L 3 ;//ca. 3s rum ?
|
|
<I ;//Nein!
|
|
SPB Takt;
|
|
|
|
T #Dyn.WarteZeit_PS;//Zeit einfrieren
|
|
|
|
SET;
|
|
S #Antrieb_Schleuse_PS;//Antrieb in Energie sparen schalten
|
|
|
|
SPA NwE10;
|
|
|
|
Takt: UN "1s-Impuls";
|
|
SPB NwE10;
|
|
|
|
L #Dyn.WarteZeit_PS;
|
|
+ 1;
|
|
T #Dyn.WarteZeit_PS;
|
|
|
|
NwE10: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = Plus: Trolley ist an Zähl-/Stau-Sensor
|
|
U #Dyn.Status."Trolley ausserhalb Weiche";//Rückmeldung von Weiche +1
|
|
UN #"Kein_Weichenbereich +1";//Also Weiche +1
|
|
O #B_Zähl;
|
|
= #Trolley_draussen;
|
|
|
|
U #Trolley_draussen;
|
|
SPB B_Raus;
|
|
|
|
UN #Status2."Trolley an Raus-Sensor";
|
|
UN #Status2."Stau_an_Raus-Sensor";
|
|
ON "100ms-Impuls";
|
|
ON #Dyn.Sk.Bereich_ok;
|
|
SPB En10;
|
|
|
|
L #Dyn.Zeit_Ohne_B_Zähl;
|
|
+ 1 ;//Zeit ohne Sensor +100ms
|
|
T #Dyn.Zeit_Ohne_B_Zähl;
|
|
|
|
//B-Raus lange genug frei?:
|
|
L 10 ;//Nach ca. 1s
|
|
>=I;
|
|
UN #Status2."Stau_an_Raus-Sensor";
|
|
SPB RDel;
|
|
|
|
TAK;
|
|
L 200 ;//Nach ca. 20s
|
|
>=I;
|
|
SPB RDel;
|
|
|
|
SPA En10;
|
|
|
|
RDel: SET;
|
|
R #Status2."Trolley an Raus-Sensor";
|
|
L 0;
|
|
T #Dyn.Zeit_Ohne_B_Zähl;
|
|
T #Dyn.Stau_Zeit_RausSensor;
|
|
|
|
//War Stau?:
|
|
U #Status2."Stau_an_Raus-Sensor";
|
|
R #Status2."Stau_an_Raus-Sensor";
|
|
SPBN DelRT;
|
|
|
|
L 0;//Bisher gefahrene Trolleys löschen
|
|
T #Dyn.Raus_Trolleys;
|
|
T #Dyn.Zeit_Ohne_B_Zähl;
|
|
T #Dyn.Stau_Zeit_RausSensor;
|
|
|
|
//Im Weichenbereich noch Trolleys unterwegs?:
|
|
DelRT: L #Dyn.Raus_Trolleys;
|
|
L 0;
|
|
>I;
|
|
O #"Kein_Weichenbereich +1";
|
|
SPB En10;
|
|
|
|
//Weiche+1 löschen:
|
|
L 0;
|
|
T #SAVE."Weiche+1" ;//Hier wurde reserviert (Im Weichenmodul wird dann Reservierung gelöscht!)
|
|
|
|
SPA En10;
|
|
|
|
B_Raus: L 0;
|
|
T #Dyn.Zeit_Ohne_B_Zähl;
|
|
T #Dyn.Zeit_Ausfahren_Ohne_B_Zähl;
|
|
|
|
//Einmalig:
|
|
UN #Status2."Trolley an Raus-Sensor";
|
|
S #Status2."Trolley an Raus-Sensor";//Raus-Sensor ausgewertet
|
|
SPBN Xn10 ;//Negierter Sprung
|
|
|
|
L #Dyn.Raus_Trolleys;
|
|
+ -1;//Ausgefahrene Trolleys -1
|
|
T #Dyn.Raus_Trolleys;
|
|
|
|
L 0;
|
|
>=I;
|
|
SPB Xn10;
|
|
|
|
T #Dyn.Raus_Trolleys;//Minimum übergeben
|
|
|
|
//Stau an B_Raus:
|
|
Xn10: UN "100ms-Impuls";
|
|
O #Status2."Stau_an_Raus-Sensor";
|
|
SPB En10;
|
|
|
|
L #Dyn.Stau_Zeit_RausSensor;
|
|
+ 1 ;//StauZeit +1
|
|
T #Dyn.Stau_Zeit_RausSensor;
|
|
|
|
L 90 ;//Nach ca. 9s
|
|
>=I;
|
|
SPBN En10;//Negierter Sprung
|
|
|
|
L 0 ;//Zeit löschen
|
|
T #Dyn.Stau_Zeit_RausSensor;
|
|
|
|
SET;
|
|
S #Status2."Stau_an_Raus-Sensor";
|
|
|
|
En10: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = Plus: Trolley fährt nicht bis Zähl-Sensor
|
|
L #Dyn.Raus_Trolleys;
|
|
L 0 ;//Trolles unterwegs?
|
|
==I;//Nein!
|
|
O #Trolley_draussen ;//Sensor wurde erreicht
|
|
O #Schleuse_geöffnet;//Dann Üb.zeit von Sk
|
|
O #Dyn.Status.Reset_aktiv;
|
|
SPB RTTD;
|
|
|
|
UN #Antrieb_Schleuse_aktiv;
|
|
O;
|
|
UN #Antrieb_plus_aktiv;
|
|
U #Schleuse.Parameter_allg.Antrieb_Plus_vorhanden;
|
|
ON "1s-Impuls";
|
|
O #Dyn.Error.Err_Raus_Sensor;//Trolley fährt nicht aus
|
|
SPB En12;
|
|
|
|
L #Dyn.Zeit_Ausfahren_Ohne_B_Zähl;
|
|
+ 1;
|
|
T #Dyn.Zeit_Ausfahren_Ohne_B_Zähl;
|
|
|
|
//Trolley fährt nicht bis Zähl-Sensor!:
|
|
L #Schleuse.Übzeit_aus_Schleuse;
|
|
>=I;
|
|
S #Dyn.Error.Err_Raus_Sensor;//Trolley fährt nicht aus
|
|
SPBN En12;//Negierter Sprung!
|
|
|
|
L #Dyn.Raus_Trolleys;
|
|
+ -1;
|
|
T #Dyn.Raus_Trolleys;
|
|
|
|
SPA En12;
|
|
|
|
RTTD: L 0;
|
|
T #Dyn.Zeit_Ausfahren_Ohne_B_Zähl;
|
|
|
|
SET;
|
|
R #Dyn.Error.Err_Raus_Sensor;//Trolley fährt nicht aus
|
|
|
|
En12: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = Einfahrzeit lernen
|
|
L #Schleuse.EinfahrZeit;
|
|
L 0;//Ausfahrzeit bekannt ?
|
|
==I;//Nein !
|
|
O #Status2.Einfahrzeit_lernen;
|
|
= #Einfahrzeit_nicht_bekannt;
|
|
U #Einfahrzeit_nicht_bekannt;
|
|
U #B_VorSchleuse ;//Stauklappe bei Einfahrt
|
|
U #Antrieb_Schleuse_aktiv;
|
|
UN #B_InSchleuse;
|
|
UN #Schleuse_geöffnet;
|
|
S #Status2.Einfahrzeit_lernen;
|
|
|
|
U #B_InSchleuse;
|
|
UN #Schleuse_geöffnet;
|
|
R #Status2.Einfahrzeit_lernen;
|
|
|
|
U #Status2.Einfahrzeit_lernen;
|
|
S #Antrieb_Schleuse_vor;//Antrieb einschalten
|
|
|
|
UN #Status2.Einfahrzeit_lernen;
|
|
ON #Antrieb_Schleuse_aktiv;
|
|
ON "1s-Impuls";
|
|
SPB NoEFZ;
|
|
|
|
L #Schleuse.EinfahrZeit;
|
|
+ 1;
|
|
T #Schleuse.EinfahrZeit;
|
|
|
|
NoEFZ: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = PS deaktivieren, da Trolley einfährt
|
|
U #Einfahrzeit_nicht_bekannt;//Also bekannt
|
|
SPB En14;
|
|
|
|
//Neuer Trolley fährt ein:
|
|
U #B_VorSchleuse;
|
|
SPBN Wait;//Negierter Sprung
|
|
|
|
L #Schleuse.EinfahrZeit;
|
|
T #Dyn.Restzeit_bis_Schleuse;
|
|
|
|
//Restzeit zurück zählen:
|
|
Wait: UN #Antrieb_Schleuse_aktiv;
|
|
O #Schleuse_geöffnet;
|
|
ON "1s-Impuls";
|
|
SPB X014;
|
|
|
|
L #Dyn.Restzeit_bis_Schleuse;
|
|
+ -1;
|
|
T #Dyn.Restzeit_bis_Schleuse;
|
|
|
|
L 0;
|
|
>I;
|
|
SPB X014;
|
|
|
|
T #Dyn.Restzeit_bis_Schleuse;//Minimum übergeben
|
|
|
|
//Trolley fährt noch ein:
|
|
X014: L #Dyn.Restzeit_bis_Schleuse;
|
|
L 0;//Restzeit vorhanden?
|
|
>I;//Ja !
|
|
UN #B_InSchleuse;
|
|
UN #Schleuse_geöffnet;
|
|
S #Antrieb_Schleuse_vor;//Antrieb einschalten (dadurch wird PS-Modus deaktiviert)
|
|
|
|
En14: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = Spezial-FCs vorhanden?
|
|
L #Schleuse.Leser_FC;
|
|
T #LeserFC;
|
|
L 0;//Parameter vorhanden ?
|
|
>I ;//Ja!
|
|
= #LeserFC_vorhanden;
|
|
|
|
L #Schleuse.Ziel_FC;
|
|
T #ZielFC;
|
|
L 0;//Parameter vorhanden ?
|
|
>I ;//Ja!
|
|
= #ZielFC_vorhanden;
|
|
|
|
L #Schleuse.Draussen_FC;
|
|
T #DraussenFC;
|
|
L 0;//Parameter vorhanden ?
|
|
>I ;//Ja!
|
|
= #DraussenFC_vorhanden;
|
|
|
|
NETWORK
|
|
TITLE = Error: Stau Bereich-Eingang
|
|
|
|
//TrolleyID zum Einfahren gemeldet / Trolley fährt in Bereich:
|
|
L #Dyn.TrolleyID_Eingefahren;//Eintrag von Weiche -1
|
|
L DINT#0;//angegeben ?
|
|
<>D;//Ja !
|
|
= #"TrolleyID_Bereich-1";
|
|
U #"TrolleyID_Bereich-1";
|
|
O #B_VorSchleuse;
|
|
S #Dyn.Status.Trolley_fährt_in_Schleuse;
|
|
|
|
//Antrieb einschalten:
|
|
U #B_VorSchleuse;
|
|
UN #B_InSchleuse;
|
|
UN #Schleuse_geöffnet;
|
|
S #Antrieb_Schleuse_vor;
|
|
|
|
U #B_VorSchleuse;
|
|
S #Antrieb_Schleuse_start;
|
|
|
|
//Sensor bei Bereichs-Einfahrt bleibt belegt?:
|
|
UN #B_VorSchleuse ;//Sensor Trolley fährt in Bereich (kein Stau !)
|
|
O #Schleuse_geöffnet;
|
|
R #Dyn.Error.Err_Stau_Einfahrt;//Stau bei Einfahrt
|
|
SPB X120 ;//StauZeit neu aufziehen
|
|
|
|
UN "1s-Impuls";
|
|
O;
|
|
U #Schleuse.Parameter_allg.Antrieb_vorhanden;
|
|
UN #Antrieb_Schleuse_aktiv;
|
|
O #Dyn.Error.Err_Stau_Einfahrt;//Zeit bereits abgelaufen
|
|
SPB Xn12;
|
|
|
|
L #Dyn.Stau_Zeit ;//Sensor B_VorSep ist belegt [1s]
|
|
+ +1;
|
|
T #Dyn.Stau_Zeit ;//Sensor B_VorSep ist belegt [1s]
|
|
|
|
L 20 ;//Stau-Zeit erreicht ?
|
|
>=I;//Ja !
|
|
S #Dyn.Error.Err_Stau_Einfahrt;//Stau bei Einfahrt (Quittierung oder Sensor=0, wegen Bürstenantrieb
|
|
SPBN Xn12;
|
|
|
|
X120: L 0 ;//Zeiten löschen
|
|
T #Dyn.Stau_Zeit ;//Sensor B_VorSep ist belegt [1s]
|
|
|
|
Xn12: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = Schleuse: Mindestzeit geöffnet/frei
|
|
L #Dyn.Sk.Akt_Schritt;
|
|
L 3 ;//AusSchleusen aktiv?
|
|
<I ;//Nein!
|
|
O(;
|
|
TAK;
|
|
L 6 ;//Mindestzeit ok?
|
|
>I ;//Nein!
|
|
);
|
|
/// O #B_InSchleuse //Sensor Trolley in Schleuse vorhanden
|
|
ON #Schleuse_geöffnet;
|
|
R #Dyn.Status.MindestZeit_ok;
|
|
SPB X130 ;//FreiZeit neu aufziehen
|
|
|
|
U #Schleuse.Parameter_allg.Antrieb_vorhanden;
|
|
UN #Antrieb_Schleuse_aktiv;
|
|
O;
|
|
U #Schleuse.Parameter_allg.Antrieb_Plus_vorhanden;
|
|
UN #Antrieb_plus_aktiv;
|
|
O #Dyn.Status.MindestZeit_ok;//Zeit bereits abgelaufen
|
|
ON "1s-Impuls";
|
|
SPB Xn13;
|
|
|
|
L #Dyn.Mindest_Zeit ;//Sensor B_im_Sep ist frei [1s]
|
|
+ +1;
|
|
T #Dyn.Mindest_Zeit ;//Sensor B_im_Sep ist frei [1s]
|
|
|
|
L #Schleuse.Mindeszeit_Schleuse_geoeffnet;//Mindest-Zeit erreicht ?
|
|
>=I;//Ja !
|
|
S #Dyn.Status.MindestZeit_ok;
|
|
SPBN Xn13;
|
|
|
|
X130: L 0 ;//Zeiten löschen
|
|
T #Dyn.Mindest_Zeit ;//Sensor B_im_Sep ist frei [1s]
|
|
|
|
Xn13: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = Einsprung Leser ermitteln
|
|
L #Dyn.SAVE2.Leser_DB ;//Leser-FIFO-DB
|
|
L 0;//Einsprung-Zeiger bekannt ?
|
|
>I;//Ja !
|
|
S #Leser_Zugriff;//Leser-Zugriff vorhanden
|
|
SPB En08L;
|
|
|
|
L #Schleuse.Leser_ID;//Nr. des vorhandenen Lesers
|
|
T "MW200";//Search-Daten
|
|
L 0;//angegeben ?
|
|
==I;//Nein !
|
|
SPB En08L;
|
|
|
|
CALL "DatenOut"
|
|
( SSDB := #Para.Leser_DL_DB ,
|
|
SSDW := 0 ,
|
|
PARA := WORD#16#0000 ,
|
|
SEARCHDATEN := P#M200.0 ,
|
|
RE_VAL := "MB199" ,
|
|
OUTDATEN := P#M220.0 ,
|
|
Position := "MW196"
|
|
);
|
|
|
|
L "MB199";
|
|
T #Dyn.Rueckmld.RET_VAL_DL_Leser;//Rückmeldung bei Datenbank-Zugriff (Leser-DL)
|
|
|
|
SPBI W_OkL;
|
|
|
|
SET;
|
|
S #Dyn.Error.Err_Leser_nicht_bereit;//Leser-Datenliste fehlerhaft
|
|
|
|
SPA En08L;
|
|
|
|
W_OkL: L "MW222" ;//Rein-FIFO-DB
|
|
T #Dyn.SAVE2.Leser_DB ;//Leser-FIFO-DB
|
|
L 0;//sinnvoller Wert ?
|
|
<=I;//Nein !
|
|
S #Dyn.Error.Err_Leser_nicht_bereit;//undefinierter Leser
|
|
SPB En08L;
|
|
|
|
L "MD224";
|
|
T #Dyn.SAVE2.Leser_DD;//Leser-FIFO-DD
|
|
|
|
SET;
|
|
R #Dyn.Error.Err_Leser_nicht_bereit;//undefinierter Leser
|
|
S #Leser_Zugriff;//Leser-Zugriff vorhanden
|
|
|
|
En08L: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = Reservierung bei Weiche plus noch aktiv? Nachtriggern
|
|
U #"Kein_Weichenbereich +1";
|
|
R #"Reservierung_Weiche+1_aktiv";
|
|
SPB Y11E;
|
|
|
|
AUF DB[ #SAVE.Weichen_DB];//FABE+ -DB öffnen
|
|
|
|
L #SAVE.Weichen_DW;
|
|
ITD;
|
|
T #AR1Start;//Startwert mit Offset 0
|
|
|
|
L #AR1Start ;//Startwert mit Offset 0
|
|
+ DINT#78;
|
|
SLD 3;
|
|
T #AR1Zeiger;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
|
|
|
|
L DBW[ #AR1Zeiger] ;//Schleuse -1 (DBW 78)
|
|
L #Schleusen_Nr;//Diese Schleuse ?
|
|
==I;//Ja !
|
|
= #"Reservierung_Weiche+1_aktiv";
|
|
|
|
//Mindestzeit nachtriggern: (nach Weiche +1)
|
|
UN #Schleuse_geöffnet;
|
|
SPB Y11E;
|
|
|
|
L #AR1Start ;//Startwert mit Offset 0
|
|
+ DINT#71;
|
|
SLD 3;
|
|
L 3 ;//Damit DBX_Bit 3
|
|
OD;
|
|
T #AR1Zeiger;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
|
|
|
|
SET;
|
|
= DBX[ #AR1Zeiger] ;//Mindestzeit nachtriggern (71.2)
|
|
|
|
Y11E: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = Leser-Einheit managen (Inputs holen)
|
|
UN #Leser_Zugriff;
|
|
ON #Schleuse.Parameter_allg.Leser_eingebaut;
|
|
R #Dyn.Status.Leser_triggern;//für Status-Anzeige
|
|
SPB NoLeser;
|
|
|
|
//Leserdaten holen:
|
|
AUF DB[ #Dyn.SAVE2.Leser_DB] ;//Leser -DB öffnen
|
|
|
|
L #Dyn.SAVE2.Leser_DD;
|
|
T #AR1Start ;//Startwert mit Offset 0
|
|
|
|
//Offset 10:
|
|
L #AR1Start ;//Startwert mit Offset 0
|
|
+ DINT#10;
|
|
SLD 3;
|
|
T #AR1Zeiger ;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
|
|
|
|
L DBB[ #AR1Zeiger];
|
|
T "MB200";
|
|
U "M200.0";
|
|
= #Dyn.Leser.IN.xOutReadingDone;
|
|
U "M200.1";
|
|
= #Dyn.Leser.IN.xOutReadyForNewScan;
|
|
|
|
//Offset 274:
|
|
L #AR1Start ;//Startwert mit Offset 0
|
|
+ DINT#274;
|
|
SLD 3;
|
|
T #AR1Zeiger ;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
|
|
|
|
L DBB[ #AR1Zeiger];
|
|
T "MB200";
|
|
U "M200.0";
|
|
= #Dyn.Leser.IN.xOutCodeGood;
|
|
U "M200.1";
|
|
= #Dyn.Leser.IN.xOutCodeBad;
|
|
|
|
//Offset 12:
|
|
L #AR1Start ;//Startwert mit Offset 0
|
|
+ DINT#12;
|
|
SLD 3;
|
|
T #AR1Zeiger ;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
|
|
|
|
L DBD[ #AR1Zeiger];
|
|
T #Dyn.Leser.IN.nOutBarcode;
|
|
|
|
NoLeser: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = Schrittkette anhalten
|
|
U #Dyn.Sk.Auto_akt;//Automatik ist aktiv
|
|
U #Dyn.Sk.Bereich_ok;
|
|
CLR;
|
|
|
|
SPA en08_Mig;//Schrittkette nicht anhalten !
|
|
|
|
SET;
|
|
R #Dyn.Sk.Err_Uebzeit;//Störungen löschen
|
|
R #Dyn.Sk.Err_Schritt;
|
|
|
|
L 0;//Zeitwerte löschen
|
|
T #Dyn.Sk.Terr_Zelle;
|
|
T #Dyn.Sk.Tok_Zelle;
|
|
|
|
SPA RET;
|
|
|
|
en08_Mig: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = Trolley wurde zurück gezogen
|
|
L #Dyn.Sk.Akt_Schritt;
|
|
L 10 ;//Trolley schon unterwegs ?
|
|
<I;//Ja !
|
|
O(;
|
|
TAK;
|
|
L 12 ;//Trolley schon unterwegs ?
|
|
>I ;//Ja !
|
|
);
|
|
O #Status2.Trolley_an_Schleuse ;//Trolley ist noch in Schleuse
|
|
O #Schleuse_geöffnet;
|
|
SPB TrolleyOk;
|
|
|
|
SET;
|
|
S #Antrieb_Schleuse_start;
|
|
S #Dyn.Leser.OUT.xInReset;
|
|
|
|
L 0;//Neubeginn
|
|
T #Dyn.Sk.Akt_Schritt;
|
|
|
|
UN #Schleuse.Parameter_allg.Leser_eingebaut;//Falls kein Leser verbaut Daten behalten (falls von Bereich-1 gemeldet)
|
|
SPB TrolleyOk;
|
|
|
|
T #Dyn.Trolley_ZwischenZiel;
|
|
|
|
L DINT#0;
|
|
T #Dyn.TrolleyID_Schleuse;
|
|
|
|
TrolleyOk: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = Sprungverteiler
|
|
L #Dyn.Sk.Neu_Schritt;//Schritt, der im nächsten Zyklus aktiv werden soll
|
|
L -1;//angegeben ?
|
|
==I;//Nein !
|
|
SPB NEU;
|
|
|
|
TAK;//Neuen Schritt übergeben
|
|
T #Dyn.Sk.Akt_Schritt;
|
|
|
|
L -1;//Urzustand
|
|
T #Dyn.Sk.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.Akt_Schritt;
|
|
SPL Ende;
|
|
SPA s000;//Schritt 0
|
|
SPA s001;//Schritt 1
|
|
SPA s002;//Schritt 2
|
|
SPA s003;//Schritt 3
|
|
SPA s004;//Schritt 4
|
|
SPA s005;//Schritt 5
|
|
SPA s006;//Schritt 6
|
|
SPA s007;//Schritt 7
|
|
SPA s008;//Schritt 8
|
|
SPA s009;//Schritt 9
|
|
SPA s010;//Schritt 10
|
|
SPA s011;//Schritt 11
|
|
SPA s012;//Schritt 12
|
|
SPA s013;//Schritt 13
|
|
SPA s014;//Schritt 14
|
|
SPA s015;//Schritt 15
|
|
SPA s016;//Schritt 16
|
|
SPA s017;//Schritt 17
|
|
SPA s018;//Schritt 18
|
|
SPA s019;//Schritt 19
|
|
SPA s020;//Schritt 20
|
|
SPA s021;//Schritt 21
|
|
SPA s022;//Schritt 22
|
|
SPA s023;//Schritt 23
|
|
SPA s024;//Schritt 24
|
|
SPA s025;//Schritt 25
|
|
SPA s026;//Schritt 26
|
|
SPA s027;//Schritt 27
|
|
SPA s028;//Schritt 28
|
|
SPA s029;//Schritt 29
|
|
SPA s030;//Schritt 30
|
|
Ende: S #Dyn.Sk.Err_Schritt;//Undefinierter Schritt
|
|
|
|
L 16#A131;
|
|
T #Dyn.Stop_Ursache;
|
|
|
|
SPA RET;
|
|
|
|
Neu_Mig: U #Dyn.Sk.Err_Uebzeit;
|
|
SPBN Sk;
|
|
|
|
L 16#A132;
|
|
T #Dyn.Stop_Ursache;
|
|
|
|
SPA RET;
|
|
|
|
Sk: T #Dyn.Sk.Akt_Schritt;
|
|
|
|
L 0;//Zeitwerte löschen
|
|
T #Dyn.Sk.Terr_Zelle;
|
|
T #Dyn.Sk.Tok_Zelle;
|
|
|
|
SPA NEU;
|
|
|
|
//Nicht programmierte Schritte:
|
|
//s000: SPA Ende
|
|
//s001: SPA Ende
|
|
//s002: SPA Ende
|
|
s003: SPA Ende;
|
|
s004: SPA Ende;
|
|
//s005: SPA Ende
|
|
//s006: SPA Ende
|
|
//s007: SPA Ende
|
|
s008: SPA Ende;
|
|
//s009: SPA Ende
|
|
//s010: SPA Ende
|
|
//s011: SPA Ende
|
|
//s012: SPA Ende
|
|
//s013: SPA Ende
|
|
//s014: SPA Ende
|
|
//s015: SPA Ende
|
|
//s016: SPA Ende
|
|
//s017: SPA Ende
|
|
s018: SPA Ende;
|
|
s019: SPA Ende;
|
|
//s020: SPA Ende
|
|
//s021: SPA Ende
|
|
s022: SPA Ende;
|
|
s023: SPA Ende;
|
|
s024: SPA Ende;
|
|
s025: SPA Ende;
|
|
s026: SPA Ende;
|
|
s027: SPA Ende;
|
|
s028: SPA Ende;
|
|
s029: SPA Ende;
|
|
s030: SPA Ende;
|
|
|
|
NETWORK
|
|
TITLE = Schritt X: Reserve
|
|
SET;//Weiterschaltbedingung
|
|
= #Weiter;
|
|
|
|
//Schrittaktionen:
|
|
SET;
|
|
|
|
L 16#B001;
|
|
T #Dyn.Stop_Ursache;
|
|
|
|
U #Weiter;//Weiterschaltbedingung ist erfüllt
|
|
R #Dyn.Sk.Err_Uebzeit;//Sofort weiter !
|
|
L 0 ;//Angabe der Wartezeit (*10ms)
|
|
SPB Plus;//Nächsten Schritt starten
|
|
|
|
L 1;//Weiter mit Schritt 1
|
|
SPB Neu_Mig;//Bei diesem Schritt weiter
|
|
|
|
SET;
|
|
U #Dyn.Sk.Auto_akt;//Automatik ist aktiv
|
|
U #Dyn.Sk.Bereich_ok;
|
|
= #Ueb_akt;//Überwachungszeit aktivieren
|
|
L 50 ;//Angabe der Überwachungszeit (*1s)
|
|
SPA tueb;//Überwachungszeit
|
|
|
|
SPA RET;
|
|
|
|
NETWORK
|
|
TITLE = Schritt 0: Warten auf Trolley
|
|
s000: SET;//Weiterschaltbedingung
|
|
U #B_InSchleuse;//Trolley im Schleuse erkannt
|
|
U #Dyn.Sk.Auto_akt ;//Automatik ist aktiv
|
|
U #Dyn.Sk.Bereich_ok;
|
|
= #Weiter;
|
|
|
|
//Trolley-Schleusendaten löschen:
|
|
L DINT#0;
|
|
T #Dyn.TrolleyID_Schleuse;
|
|
T #Dyn.Trolley_ShopGroup;
|
|
|
|
L 0;
|
|
T #Dyn.Trolley_EndZiel;
|
|
T #Dyn.Weichen_Ziel;
|
|
|
|
//HMI-Zeug:
|
|
L DINT#0;
|
|
T #Dyn.HMI.TrolleyID_Input;
|
|
|
|
U #Dyn.Sk.Reset_Akt ;//Reset ist aktiv
|
|
L 20 ;//Weiter mit Schritt 20
|
|
SPB Neu_Mig;//Bei diesem Schritt weiter
|
|
|
|
//Schrittaktionen:
|
|
SET;
|
|
R #Dyn.Error.Err_Leser_nicht_bereit;
|
|
R #Dyn.Error.Err_Kein_LeseErgebnis;
|
|
R #Dyn.Status.SF_angefordert;
|
|
R #Status2.TrolleyPos_übergeben;
|
|
R #Status2.Telegramm_gesendet;
|
|
|
|
U #Weiter ;//Weiterschaltbedingung ist erfüllt
|
|
R #Dyn.Sk.Err_Uebzeit;//Sofort weiter !
|
|
L 50 ;//Angabe der Wartezeit (*10ms)
|
|
SPB Plus;//Nächsten Schritt starten
|
|
|
|
L 16#B001;
|
|
T #Dyn.Stop_Ursache;
|
|
|
|
U #Dyn.Status.Trolley_fährt_in_Schleuse;
|
|
UN #B_InSchleuse;
|
|
S #Antrieb_Schleuse_vor;//Antrieb einschalten
|
|
SPB S000A;
|
|
|
|
SET;
|
|
R #Dyn.Sk.Err_Uebzeit;
|
|
|
|
L 16#B000;
|
|
T #Dyn.Stop_Ursache;
|
|
|
|
SPA RET;
|
|
|
|
//Überwachungszeit starten:
|
|
S000A: U #Dyn.Status.Trolley_fährt_in_Schleuse;
|
|
UN #B_InSchleuse;//Trolley im Schleuse erkannt
|
|
U(;
|
|
O #Antrieb_Schleuse_aktiv;
|
|
ON #Schleuse.Parameter_allg.Antrieb_vorhanden;
|
|
);
|
|
= #Ueb_akt ;//Überwachungszeit aktivieren
|
|
|
|
U #Dyn.Sk.Err_Uebzeit;
|
|
R #Dyn.Sk.Err_Uebzeit;
|
|
S #Dyn.Error.Err_Trolley_nicht_in_Schleuse;
|
|
R #Dyn.Status.Trolley_fährt_in_Schleuse;
|
|
|
|
L #Schleuse.Übzeit_in_Schleuse;
|
|
|
|
SPA tueb;//Überwachungszeit
|
|
|
|
NETWORK
|
|
TITLE = Schritt 1: Trolley ist in Schleuse / Leser ? / Daten vorhanden ?
|
|
s001: NOP 0;
|
|
//Schrittaktionen:
|
|
U #B_InSchleuse;
|
|
S #Status2.Trolley_an_Schleuse;
|
|
|
|
UN #Status2.Trolley_an_Schleuse ;//Trolley im Schleuse erkannt
|
|
U #Schleuse.Parameter_allg.Leser_eingebaut;
|
|
L 0 ;//Weiter mit Schritt 0
|
|
SPB Neu_Mig;//Bei diesem Schritt weiter
|
|
|
|
//Zwischen-Ziel von Bereich -1 vorhanden?:
|
|
L #Dyn.ZwischenZiel_eingefahren;
|
|
L 0;//Zwischenziel von Bereich -1 vorhanden!
|
|
==I;//Nein !
|
|
O #Schleuse.Parameter_allg.Leser_eingebaut;//Dann werden Daten neu ermittelt!
|
|
SPB X001;
|
|
|
|
//Daten von Bereich -1 übergeben:
|
|
L #Dyn.ZwischenZiel_eingefahren;
|
|
T #Dyn.Trolley_ZwischenZiel;
|
|
L 0;
|
|
T #Dyn.ZwischenZiel_eingefahren;
|
|
|
|
L #Dyn.TrolleyID_Eingefahren;
|
|
T #Dyn.TrolleyID_Schleuse;
|
|
L DINT#0;
|
|
T #Dyn.TrolleyID_Eingefahren;
|
|
|
|
L 12 ;//Weiter mit Schritt 12
|
|
SPA Neu_Mig ;//Bei diesem Schritt weiter
|
|
|
|
X001: L 0;
|
|
T #Dyn.Trolley_ZwischenZiel;
|
|
|
|
//Leser vorhanden:
|
|
U #Schleuse.Parameter_allg.Leser_eingebaut;
|
|
R #Dyn.Error.Err_Kein_LeseErgebnis;
|
|
L 9 ;//Weiter mit Schritt 9 (Leser bereit)
|
|
SPB Neu_Mig ;//Bei diesem Schritt weiter
|
|
|
|
//Trolleydaten vorhanden ?: (Übergabe von Bereich -1)
|
|
L #Dyn.TrolleyID_Eingefahren;
|
|
T #Dyn.TrolleyID_Schleuse;
|
|
L DINT#0 ;//Daten vorhanden ?
|
|
<>D;//Ja !
|
|
L 11 ;//Weiter mit Schritt 11 (Trolleydaten lesen)
|
|
SPB Neu_Mig ;//Bei diesem Schritt weiter
|
|
|
|
//Ziel-FC vorhanden ?:
|
|
U #ZielFC_vorhanden;
|
|
L 12 ;//Weiter mit Schritt 12 (Ziel-FC)
|
|
SPB Neu_Mig ;//Bei diesem Schritt weiter
|
|
|
|
L 14 ;//Weiter mit Schritt 14 (Weichenbereich +1 vorhanden)
|
|
SPA Neu_Mig ;//Bei diesem Schritt weiter
|
|
|
|
NETWORK
|
|
TITLE = Schritt 2: Ausfahren ok ?
|
|
s002: NOP 0;
|
|
|
|
//Schrittaktionen:
|
|
UN #Status2.Trolley_an_Schleuse ;//Trolley im Schleuse erkannt
|
|
L 0 ;//Weiter mit Schritt 0
|
|
SPB Neu_Mig;//Bei diesem Schritt weiter
|
|
|
|
//Anlage aus oder Störung:
|
|
L 16#B021;
|
|
T #Dyn.Stop_Ursache;
|
|
|
|
UN #Dyn.Sk.Auto_akt ;//Automatik ist aktiv
|
|
ON #Dyn.Sk.Bereich_ok;//Bereich ist gestört
|
|
SPB RET;
|
|
|
|
//Starten erlaubt Trolley ?:
|
|
L 16#B022;
|
|
T #Dyn.Stop_Ursache;
|
|
|
|
UN #Start_Ok ;//Starten ist erlaubt
|
|
SPB RET;
|
|
|
|
//Stau im Bereich +1:
|
|
L 16#B023;
|
|
T #Dyn.Stop_Ursache;
|
|
|
|
SET;
|
|
S #Dyn.Status."Trolley_wartet_Bereich+1";
|
|
|
|
U #B_Stau_raus ;//Sensor Stau im Bereich rausfahren
|
|
SPB RET;
|
|
|
|
//B_Aus_Schleuse aktiv:
|
|
L 16#B024;
|
|
T #Dyn.Stop_Ursache;
|
|
|
|
U(;
|
|
L #Dyn.Raus_Trolleys;
|
|
L 0;//Trolleys schon unterwegs?
|
|
<>I;//Ja!
|
|
O(;
|
|
L #Schleuse.MaxRausTrolleys;
|
|
L 1;//Nur einer darf ausfahren ?
|
|
==I;//Ja !
|
|
);
|
|
);
|
|
U #Status2."Trolley an Raus-Sensor";
|
|
O #Status2."Stau_an_Raus-Sensor";
|
|
SPB RET;
|
|
|
|
//Raus-Weiche bereit?:
|
|
L 16#B028;
|
|
T #Dyn.Stop_Ursache;
|
|
|
|
U(;
|
|
L #Dyn.Weichen_Ziel;
|
|
L #Dyn.Zurück_gemeldetes_Weichen_Ziel;
|
|
<>I;//Nicht identisch !
|
|
ON #Dyn.Status.Weiche_geschaltet;//Rückmeldung von Weiche +1
|
|
);
|
|
UN #"Kein_Weichenbereich +1";//Also Weiche +1
|
|
L 15;
|
|
SPB Neu_Mig;//Bei diesem Schritt weiter
|
|
|
|
//Zu viele Raus-Trolleys unterwegs:
|
|
L 16#B027;
|
|
T #Dyn.Stop_Ursache;
|
|
|
|
L #Dyn.Raus_Trolleys;//Gestartete Trolleys
|
|
L #Schleuse.MaxRausTrolleys;//Erlaubte Anzahl gestarteter Trolleys
|
|
>=I;
|
|
SPB RET;
|
|
|
|
//Antriebe aktivieren / aktiv ?:
|
|
U #Schleuse.Parameter_allg.Antrieb_Plus_vorhanden;//Schleuse an weiterem Antrieb (Weiche)
|
|
S #Antrieb_plus_vor ;//Antrieb plus einschalten
|
|
|
|
U(;
|
|
O #Antrieb_plus_aktiv;//Kreisel-Antrieb plus aktiv
|
|
ON #Schleuse.Parameter_allg.Antrieb_Plus_vorhanden;//Schleuse an weiterem Antrieb (Weiche)
|
|
);
|
|
S #Antrieb_Schleuse_vor;//Antrieb einschalten
|
|
|
|
L 16#B026;
|
|
T #Dyn.Stop_Ursache;
|
|
|
|
UN #Antrieb_plus_aktiv;//Kreisel-Antrieb plus aktiv
|
|
U #Schleuse.Parameter_allg.Antrieb_Plus_vorhanden;//Schleuse an weiterem Antrieb (Weiche)
|
|
SPB RET;
|
|
|
|
UN #Antrieb_Schleuse_aktiv;//Kreisel-Antrieb aktiv
|
|
U #Schleuse.Parameter_allg.Antrieb_vorhanden;//Schleuse an angetriebener Strecke
|
|
= #Dyn.Status.Kein_Stop_mehr;
|
|
SPB RET;
|
|
|
|
L #Dyn.Raus_Trolleys;
|
|
+ 1;//Gestartete Trolleys + 1
|
|
T #Dyn.Raus_Trolleys;
|
|
|
|
L 5 ;//Nur 1 langes Signal!
|
|
SPB Neu_Mig ;//Bei diesem Schritt weiter
|
|
|
|
NETWORK
|
|
TITLE = Schritt 5: Trolley fährt aus ?
|
|
s005: SET ;//Weiterschaltbedingung
|
|
UN #B_InSchleuse ;//Sensor Trolley ist in Schleuse
|
|
U(;
|
|
O #Antrieb_Schleuse_aktiv ;//Kreisel-Antrieb aktiv
|
|
ON #Schleuse.Parameter_allg.Antrieb_vorhanden;//Schleuse an angetriebener Strecke
|
|
);
|
|
U(;
|
|
O #Antrieb_plus_aktiv;
|
|
ON #Schleuse.Parameter_allg.Antrieb_Plus_vorhanden;
|
|
);
|
|
= #Weiter;
|
|
|
|
//Schrittaktionen:
|
|
SET;
|
|
S #Y_Schleuse_Auf ;//Schleuse öffnen
|
|
S #Dyn.Status.Trolley_fährt_aus;
|
|
|
|
//Antriebe:
|
|
//siehe Nw10
|
|
|
|
//B in Schleuse aktiv:
|
|
U #B_InSchleuse ;//Sensor Trolley ist in Schleuse
|
|
SPBN X050;//Negierter Sprung
|
|
|
|
L 0;
|
|
T #Dyn.Sk.Tok_Zelle;
|
|
|
|
//Trolley ist draussen mit 5s-Verzögerung:
|
|
X050: U #Weiter ;//Weiterschaltbedingung ist erfüllt
|
|
R #Dyn.Sk.Err_Uebzeit;//Sofort weiter !
|
|
R #Dyn.Error.Err_Trolley_raus;//Trolley fährt nicht aus
|
|
L 300;
|
|
SPB Plus ;//Nächsten Schritt starten
|
|
|
|
//Trolley fährt nicht raus!:
|
|
U #Dyn.Sk.Err_Uebzeit;
|
|
S #Dyn.Error.Err_Trolley_raus;//Trolley fährt nicht aus
|
|
|
|
L 16#B051;
|
|
T #Dyn.Stop_Ursache;
|
|
|
|
U #Antrieb_Schleuse_aktiv;
|
|
ON #Schleuse.Parameter_allg.Antrieb_vorhanden;//Schleuse an angetriebener Strecke
|
|
= #Ueb_akt;//Überwachungszeit aktivieren
|
|
L #Schleuse.Übzeit_aus_Schleuse;//Angabe der Überwachungszeit (*1s)
|
|
SPA tueb ;//Überwachungszeit
|
|
|
|
NETWORK
|
|
TITLE = Schritt 6: Schleuse Mindestzeit geöffnet ?
|
|
s006: SET ;//Weiterschaltbedingung
|
|
U #Dyn.Status.MindestZeit_ok;
|
|
UN #B_InSchleuse;//Sensor Trolley in Schleuse vorhanden
|
|
= #Weiter;
|
|
R #Dyn.Sk.Err_Uebzeit;//Sofort weiter !
|
|
R #Dyn.Error.Err_Trolley_raus;//Trolley fährt nicht aus
|
|
|
|
//Schrittaktionen:
|
|
//Gezählt wird in NW11
|
|
|
|
SET;
|
|
S #Y_Schleuse_Auf ;//Schleuse öffnen
|
|
S #Dyn.Status.Trolley_fährt_aus;
|
|
|
|
//Erneutes Signal von B in Schleuse ?:
|
|
U #B_InSchleuse ;//Sensor Trolley in Schleuse vorhanden
|
|
SPBN X060 ;//Negierter Sprung
|
|
|
|
L 5;
|
|
T #Dyn.Sk.Neu_Schritt;//Schritt, der im nächsten Zyklus aktiv werden soll
|
|
|
|
L 0;//Mindest-Zeit neu starten
|
|
T #Dyn.Mindest_Zeit ;//Sensor B_im_Sep ist frei [1s]
|
|
SET;
|
|
R #Dyn.Status.MindestZeit_ok;//Zeit bereits abgelaufen
|
|
|
|
SPA RET;
|
|
|
|
//Antriebe:
|
|
//siehe Nw10
|
|
X060: U #Weiter;
|
|
L 0;
|
|
SPB X006 ;//Nächsten Schritt starten
|
|
|
|
L 16#B061;
|
|
T #Dyn.Stop_Ursache;
|
|
|
|
//Trolley fährt nicht raus!:
|
|
U #Dyn.Sk.Err_Uebzeit;
|
|
S #Dyn.Error.Err_Trolley_raus;//Trolley fährt nicht aus
|
|
|
|
U #Antrieb_Schleuse_aktiv;
|
|
ON #Schleuse.Parameter_allg.Antrieb_vorhanden;//Schleuse an angetriebener Strecke
|
|
= #Ueb_akt;//Überwachungszeit aktivieren
|
|
L #Schleuse.Übzeit_aus_Schleuse;//Angabe der Überwachungszeit (*1s)
|
|
SPA tueb ;//Überwachungszeit
|
|
|
|
//Trolley hat Schleuse verlassen:
|
|
X006: SET;
|
|
S #Dyn.Status.Trolley_draussen;//1 Zyklus
|
|
R #Dyn.Status.Trolley_fährt_in_Schleuse;
|
|
R #Status2.Telegramm_gesendet;
|
|
|
|
L #Dyn.Vereinzelungstakte;
|
|
+ DINT#1;//Vereinzelungen +1
|
|
T #Dyn.Vereinzelungstakte;
|
|
|
|
//Draussen-FC ?:
|
|
UN #DraussenFC_vorhanden;
|
|
SPB NoFC ;//Bei diesem Schritt weiter
|
|
|
|
L #Schleusen_Nr;//Schleusen-Nr.
|
|
T "MW190";
|
|
L #Dyn.Trolley_ShopGroup;//Shop-Gruppe
|
|
T "MD182" ;//übergeben
|
|
|
|
L #Dyn.Weichen_Ziel;
|
|
T "MW198" ;//Weichenziel
|
|
|
|
UC FC[ #DraussenFC] ;//z.Bsp. Daten anpassen
|
|
|
|
NoFC: L 7 ;//Weiter mit Schritt 7
|
|
SPA Neu_Mig ;//Bei diesem Schritt weiter
|
|
|
|
NETWORK
|
|
TITLE = Schritt 7: Fertig
|
|
s007: SET ;//Weiterschaltbedingung
|
|
|
|
//Schrittaktionen:
|
|
SPA ENDE_Mig;
|
|
|
|
NETWORK
|
|
TITLE = Schritt 9: Lese-Einheit bereit?
|
|
s009: SET ;//Weiterschaltbedingung
|
|
L #Dyn.Leser.IN.nOutBarcode;
|
|
L DINT#0;
|
|
==D;
|
|
U #Dyn.Leser.IN.xOutReadyForNewScan;
|
|
UN #Dyn.Leser.IN.xOutReadingDone;
|
|
UN #Dyn.Leser.IN.xOutCodeGood;
|
|
UN #Dyn.Leser.IN.xOutCodeBad;
|
|
= #Weiter;
|
|
R #Dyn.Error.Err_Leser_nicht_bereit;
|
|
|
|
//Schrittaktionen:
|
|
UN #Status2.Trolley_an_Schleuse ;//Trolley im Schleuse erkannt
|
|
U #Schleuse.Parameter_allg.Leser_eingebaut;
|
|
R #Dyn.Error.Err_Leser_nicht_bereit;
|
|
L 0 ;//Weiter mit Schritt 0
|
|
SPB Neu_Mig ;//Bei diesem Schritt weiter
|
|
|
|
U #Weiter;
|
|
= #Dyn.Leser.OUT.xInStartReading;//Leser triggern
|
|
L 0 ;//Angabe der Wartezeit (*10ms)
|
|
SPB Plus;//Nächsten Schritt starten
|
|
|
|
//Leser nicht bereit:
|
|
U #Dyn.Leser.IN.xOutReadingDone;//Falls altes Handshake noch gewollt
|
|
O #Dyn.Leser.IN.xOutCodeGood;
|
|
O #Dyn.Leser.IN.xOutCodeBad;
|
|
S #Dyn.Leser.OUT.xInHandshakeDone;
|
|
|
|
U #Dyn.Sk.Err_Uebzeit;
|
|
R #Dyn.Sk.Err_Uebzeit;//Sofort weiter !
|
|
S #Dyn.Error.Err_Leser_nicht_bereit;
|
|
S #Dyn.Leser.OUT.xInErrQuit;//Vielleicht hilft es
|
|
|
|
U #Dyn.Error.Err_Leser_nicht_bereit;
|
|
U #ErrQuit;//Mit Quittierung dann zusätzlich reset!
|
|
S #Dyn.Leser.OUT.xInReset;
|
|
|
|
//HMI-TrolleyID bei Leser nicht bereit:
|
|
L #Dyn.HMI.TrolleyID_Input;
|
|
L DINT#0;
|
|
<>D ;//Ja!
|
|
U #Dyn.Error.Err_Leser_nicht_bereit;
|
|
L 0 ;//Angabe der Wartezeit (*10ms)
|
|
SPB Plus;//Nächsten Schritt starten
|
|
|
|
SET;
|
|
= #Ueb_akt;//Überwachungszeit aktivieren
|
|
L 5 ;//Angabe der Überwachungszeit (*1s)
|
|
SPA tueb;//Überwachungszeit
|
|
|
|
NETWORK
|
|
TITLE = Schritt 10: Warten auf Leseeinheit
|
|
s010: SET ;//Weiterschaltbedingung
|
|
U #Dyn.Leser.IN.xOutReadingDone;
|
|
U #Dyn.Leser.IN.xOutCodeGood;
|
|
UN #Dyn.Leser.IN.xOutCodeBad;
|
|
= #Weiter;
|
|
R #Dyn.Error.Err_Kein_LeseErgebnis;
|
|
|
|
//Schrittaktionen:
|
|
UN #Status2.Trolley_an_Schleuse ;//Trolley im Schleuse erkannt
|
|
U #Schleuse.Parameter_allg.Leser_eingebaut;
|
|
L 0 ;//Weiter mit Schritt 0
|
|
R #Dyn.Error.Err_Kein_LeseErgebnis;
|
|
SPB Neu_Mig;//Bei diesem Schritt weiter
|
|
|
|
SET;
|
|
R #Dyn.Leser.OUT.xInStartReading;//Leseeinheit triggern
|
|
|
|
U #Weiter;
|
|
S #Dyn.Leser.OUT.xInHandshakeDone;
|
|
R #Dyn.Sk.Err_Uebzeit;//Sofort weiter !
|
|
SPB X010;
|
|
|
|
SET;
|
|
S #Dyn.Status.Trolley_wartet_Lesung;
|
|
|
|
U #Dyn.Error.Err_Leser_nicht_bereit;//von Schritt 9
|
|
SPB LX;
|
|
|
|
U #Dyn.Sk.Err_Uebzeit;
|
|
O #Dyn.Leser.IN.xOutCodeBad;
|
|
S #Dyn.Leser.OUT.xInHandshakeDone;
|
|
SPB L2 ;//Erst bei 3.Fehllesung Error!
|
|
|
|
L 16#B101;
|
|
T #Dyn.Stop_Ursache;
|
|
|
|
SET;
|
|
= #Ueb_akt;//Überwachungszeit aktivieren
|
|
|
|
L 10 ;//Angabe der Überwachungszeit (*1s)
|
|
SPA tueb;//Überwachungszeit
|
|
|
|
L2: U #Status2."2.Lesung_aktiv";//Erst bei 3.Fehllesung Error!
|
|
SPB L3;
|
|
|
|
SET;
|
|
S #Status2."2.Lesung_aktiv";
|
|
R #Dyn.Sk.Err_Uebzeit;//Sofort weiter !
|
|
|
|
L 9;
|
|
T #Dyn.Sk.Neu_Schritt;//Schritt, der im nächsten Zyklus aktiv werden soll
|
|
|
|
SPA RET;
|
|
|
|
L3: U #Status2."3.Lesung_aktiv";////Erst bei 3.Fehllesung Error!
|
|
SPB LX;
|
|
|
|
SET;
|
|
S #Status2."3.Lesung_aktiv";
|
|
R #Dyn.Sk.Err_Uebzeit;//Sofort weiter !
|
|
|
|
L 9;
|
|
T #Dyn.Sk.Neu_Schritt;//Schritt, der im nächsten Zyklus aktiv werden soll
|
|
|
|
SPA RET;
|
|
|
|
//Nach 3.Fehl-Lesung erst Leserfehler!
|
|
LX: SET;
|
|
R #Dyn.Sk.Err_Uebzeit;//Sofort weiter !
|
|
S #Dyn.Error.Err_Kein_LeseErgebnis;
|
|
SPA NoLesung;
|
|
|
|
//Leserdaten übergeben:
|
|
X010: L #Dyn.Leser.IN.nOutBarcode;
|
|
T #Dyn.TrolleyID_Schleuse;
|
|
|
|
L DINT#0 ;//Unbekannt ?
|
|
==D ;//Ja !
|
|
O(;
|
|
TAK;
|
|
L DINT#-1 ;//Fehl-Lesung?
|
|
==D ;//Ja !
|
|
);
|
|
S #Dyn.Error.Err_Kein_LeseErgebnis;
|
|
L 9 ;//Weiter mit Schritt 9 (Leser bereit)
|
|
SPB Neu_Mig ;//Bei diesem Schritt weiter
|
|
|
|
L 11 ;//Weiter mit Schritt 11
|
|
SPA Neu_Mig ;//Bei diesem Schritt weiter
|
|
|
|
//Lesefehler:
|
|
NoLesung: NOP 0;
|
|
//HMI-Eingabe?:
|
|
//HMI-TrolleyID:
|
|
L #Dyn.HMI.TrolleyID_Input;
|
|
T #Dyn.TrolleyID_Schleuse;
|
|
<>D ;//Ja!
|
|
L 0 ;//Angabe der Wartezeit (*10ms)
|
|
R #Dyn.Error.Err_Kein_LeseErgebnis;
|
|
R #Dyn.Error.Err_Leser_nicht_bereit;//von Schritt 9
|
|
SPB Plus ;//Nächsten Schritt starten
|
|
|
|
//Leser-FC aufrufen:
|
|
No_HMIa: UN #LeserFC_vorhanden;
|
|
SPB NoLFC;
|
|
|
|
L #Schleusen_Nr;//Schleusen-Nr.
|
|
T "MW190";//übergeben
|
|
L #Dyn.Trolley_ZwischenZiel;//Übergabe von Leser-Aufruf
|
|
T "MW196";
|
|
|
|
U #Dyn.Error.Err_Kein_LeseErgebnis;
|
|
= "M180.0";
|
|
SET;
|
|
R "M180.1";
|
|
|
|
UC FC[ #LeserFC] ;//Beeinflussung der Fehllesung
|
|
|
|
L 16#B102;
|
|
T #Dyn.Stop_Ursache;
|
|
|
|
L "MW196" ;//Zwischenziel übergeben
|
|
T #Dyn.Trolley_ZwischenZiel;//Übergabe von Leser-Aufruf
|
|
L 0 ;//Übergeben ?
|
|
<>I;//Ja!
|
|
L 12 ;//Weiter mit Schritt 12
|
|
R #Dyn.Error.Err_Kein_LeseErgebnis;
|
|
SPB Neu_Mig ;//Bei diesem Schritt weiter
|
|
|
|
NoLFC: L 9;
|
|
T #Dyn.Sk.Neu_Schritt;//Schritt, der im nächsten Zyklus aktiv werden soll
|
|
|
|
SPA RET;
|
|
|
|
NETWORK
|
|
TITLE = Schritt 11: Trolleydaten aus DL lesen
|
|
s011: L DINT#0;
|
|
T #Dyn.TrolleyID_Eingefahren;//Eintrag von Weiche -1
|
|
|
|
L #Dyn.Trolley_ZwischenZiel;///
|
|
|
|
L #Dyn.TrolleyID_Schleuse;
|
|
T "MD220";
|
|
|
|
CALL "DatenOut"
|
|
( SSDB := #Schleuse.Gesamt_Trolley_DL ,
|
|
SSDW := 0 ,
|
|
PARA := 16#0000 , //Eintrag lesen
|
|
SEARCHDATEN := P#M220.0 ,
|
|
RE_VAL := "MB199" ,
|
|
OUTDATEN := %DB1011.DBX0.0 ,
|
|
Position := "MW196"
|
|
);
|
|
|
|
L 16#B111;
|
|
T #Dyn.Stop_Ursache;
|
|
|
|
UN "M199.7";
|
|
= #Dyn.Error.Barcode_nicht_bekannt;
|
|
SPB UnbekanntBC;
|
|
|
|
//Relevanten Trolleydaten auslesen:
|
|
L "TrolleyDL_OutDaten".OUTDaten.EndZiel;
|
|
T #Dyn.Trolley_EndZiel;
|
|
|
|
//ZwischenZiel nicht überschreiben:
|
|
L #Dyn.Trolley_ZwischenZiel;
|
|
L 0;//Schon bekannt ?
|
|
<>I;//Ja !
|
|
SPB NixZZ;
|
|
|
|
L "TrolleyDL_OutDaten".OUTDaten.ZwischenZiel;
|
|
T #Dyn.Trolley_ZwischenZiel;
|
|
|
|
NixZZ: L "TrolleyDL_OutDaten".OUTDaten.ShopGroup;
|
|
T #Dyn.Trolley_ShopGroup;
|
|
|
|
L 0;//Angabe der Wartezeit (*10ms)
|
|
SPA Plus ;//Nächsten Schritt starten
|
|
|
|
//Unbekannter Trolley:
|
|
UnbekanntBC: NOP 0;
|
|
//HMI-Eingabe?:
|
|
|
|
//Leser-FC aufrufen:
|
|
Nix_HMI: UN #LeserFC_vorhanden;
|
|
SPB Nix_LFC;
|
|
|
|
L #Schleusen_Nr ;//Schleusen-Nr.
|
|
T "MW190";//übergeben
|
|
L #Dyn.TrolleyID_Schleuse;
|
|
T "MD192";
|
|
L #Dyn.Trolley_ZwischenZiel;
|
|
T "MW196";
|
|
|
|
U #Dyn.Error.Barcode_nicht_bekannt;
|
|
= "M180.1";
|
|
SET;
|
|
R "M180.0";
|
|
|
|
UC FC[ #LeserFC] ;//Beeinflussung der Weiterfahrt bei nicht bekanntem Trolley
|
|
|
|
L "MW196" ;//ZwischenZiel übergeben
|
|
T #Dyn.Trolley_ZwischenZiel;//Übergabe von Leser-Aufruf
|
|
L 0 ;//Übergeben ?
|
|
<>I;//Ja!
|
|
L 12 ;//Weiter mit Schritt 12
|
|
R #Dyn.Error.Err_Kein_LeseErgebnis;
|
|
SPB Neu_Mig ;//Bei diesem Schritt weiter
|
|
|
|
Nix_LFC: SPA RET;
|
|
|
|
NETWORK
|
|
TITLE = Schritt 12: Ziel-FC
|
|
s012: NOP 0;
|
|
|
|
//Schrittaktionen:
|
|
UN #Status2.Trolley_an_Schleuse ;//Trolley im Schleuse erkannt
|
|
U #Schleuse.Parameter_allg.Leser_eingebaut;
|
|
UN #Schleuse_geöffnet;
|
|
L 0 ;//Weiter mit Schritt 0
|
|
SPB Neu_Mig;//Bei diesem Schritt weiter
|
|
|
|
SET;
|
|
S #Dyn.Status."Trolley_wartet_auf_Ziel-FC";
|
|
|
|
UN #ZielFC_vorhanden;
|
|
R #Dyn.Status."Trolley_wartet_auf_Ziel-FC";
|
|
L 13 ;//Weiter mit Schritt 13
|
|
SPB Neu_Mig ;//Bei diesem Schritt weiter
|
|
|
|
SET;//Rückmeldungen erst mal resetten
|
|
R "M180.6";//Weiterfahrt von Ziel-FC erlaubt
|
|
L #Schleusen_Nr ;//Schleusen-Nr.
|
|
T "MW190";//übergeben
|
|
L #Dyn.Trolley_ShopGroup;//Shop-Gruppe
|
|
T "MD182" ;//übergeben
|
|
L #Dyn.Trolley_EndZiel;//End-Ziel
|
|
T "MW194" ;//übergeben
|
|
L #Dyn.Trolley_ZwischenZiel;
|
|
T "MW196" ;//übergeben
|
|
L 0;//Erst mal nullen
|
|
T "MW198" ;//Weichenziel
|
|
|
|
UC FC[ #ZielFC] ;//Beeinflussung der Weiterfahrt
|
|
|
|
L 16#B122;
|
|
T #Dyn.Stop_Ursache;
|
|
|
|
//Spezial-Fall bei Übergabe an Sorter / Turm (M180.6 wird nie im Ziel-FC gesetzt!)
|
|
//aber anderer Partner hat Schleuse extern geöffnet:
|
|
U #Schleuse_geöffnet;
|
|
UN "M180.6" ;//Weiterfahrt von Ziel-FC erlaubt
|
|
UN #Status2.TrolleyPos_übergeben;//Nur einmalig
|
|
S #Status2.TrolleyPos_übergeben;
|
|
SPBN Normal;//Negierter Sprung
|
|
|
|
L #Dyn.Vereinzelungstakte;
|
|
+ DINT#1;//Vereinzelungen +1
|
|
T #Dyn.Vereinzelungstakte;
|
|
|
|
CALL "Trolley_DL_Neue_Pos"
|
|
( Gesamt_Trolley_DL := #Schleuse.Gesamt_Trolley_DL ,
|
|
TrolleyID := #Dyn.TrolleyID_Schleuse ,
|
|
Position := #Schleuse.Leser_ID ,
|
|
ShopGroup := Dint#0 ,
|
|
Err := "M199.0"
|
|
);
|
|
|
|
//Draussen-FC ?:
|
|
UN #DraussenFC_vorhanden;
|
|
SPB RET ;//Bei diesem Schritt weiter
|
|
|
|
L #Schleusen_Nr;//Schleusen-Nr.
|
|
T "MW190";
|
|
|
|
UC FC[ #DraussenFC] ;//z.Bsp. Daten anpassen
|
|
|
|
SPA RET;
|
|
|
|
Normal: U "M180.6" ;//Weiterfahrt von Ziel-FC erlaubt
|
|
SPB X012;
|
|
|
|
UN #Schleuse.Parameter_allg.Leser_eingebaut;
|
|
SPB RET;
|
|
|
|
L 11;
|
|
T #Dyn.Sk.Neu_Schritt;//Schritt, der im nächsten Zyklus aktiv werden soll
|
|
|
|
SPA RET;
|
|
|
|
X012: L "MW196" ;//zurückschreiben, falls verändert
|
|
T #Dyn.Trolley_ZwischenZiel;
|
|
|
|
L "MW198" ;//Weichenziel übergeben
|
|
T #Dyn.Weichen_Ziel;
|
|
|
|
L 13 ;//Weiter mit Schritt 13
|
|
SPA Neu_Mig ;//Bei diesem Schritt weiter
|
|
|
|
NETWORK
|
|
TITLE = Schritt 13: Schleusen-Position zurückschreiben
|
|
s013: NOP 0;
|
|
|
|
//Schrittaktionen:
|
|
SET;
|
|
S #Status2."Weichen-Schritt";
|
|
|
|
//Neue Position an Gesamt-Trolley-DL übergeben:
|
|
CALL "Trolley_DL_Neue_Pos"
|
|
( Gesamt_Trolley_DL := #Schleuse.Gesamt_Trolley_DL ,
|
|
TrolleyID := #Dyn.TrolleyID_Schleuse ,
|
|
Position := #Schleuse.Leser_ID ,
|
|
ShopGroup := DInt#0 , //für nichts verändern
|
|
Err := "M199.0"
|
|
);
|
|
|
|
L 0;//Angabe der Wartezeit (*10ms)
|
|
SPA Plus ;//Nächsten Schritt starten
|
|
|
|
NETWORK
|
|
TITLE = Schritt 14: Weichenbereich +1 vorhanden
|
|
s014: NOP 0;
|
|
|
|
//Schrittaktionen:
|
|
//Weichenbereich +1 vorhanden?:
|
|
U #"Kein_Weichenbereich +1";
|
|
L 2 ;//Weiter mit Schritt 2 (Ausfahren ok?)
|
|
SPB Neu_Mig ;//Bei diesem Schritt weiter
|
|
|
|
SET;
|
|
S #Status2."Weichen-Schritt";
|
|
|
|
L 0;//Angabe der Wartezeit (*10ms)
|
|
SPA Plus ;//Nächsten Schritt starten
|
|
|
|
NETWORK
|
|
TITLE = Schritt 15: Weichenbereich raus bereit ?
|
|
s015: NOP 0;
|
|
|
|
//Schrittaktionen:
|
|
UN #Status2.Trolley_an_Schleuse ;//Trolley im Schleuse erkannt
|
|
L 0 ;//Weiter mit Schritt 0
|
|
SPB Neu_Mig;//Bei diesem Schritt weiter
|
|
|
|
SET;
|
|
S #Status2."Weichen-Schritt";
|
|
|
|
L #Dyn.Weichen_Ziel;
|
|
L 0;//Bekannt ?
|
|
<>I;//Ja !
|
|
SPB X15A;
|
|
|
|
L 12;//Ziel-FC ?
|
|
T #Dyn.Sk.Neu_Schritt;//Schritt, der im nächsten Zyklus aktiv werden soll
|
|
|
|
L 16#B154;
|
|
T #Dyn.Stop_Ursache;
|
|
|
|
SPA RET;
|
|
|
|
X15A: SET;
|
|
S #Dyn.Status."Trolley_wartet_auf_Weiche+1";
|
|
|
|
L 16#B155;
|
|
T #Dyn.Stop_Ursache;
|
|
|
|
L #SAVE.Weichen_DB ;//Weichen-DB
|
|
L 0;//Einsprung-Zeiger bekannt ?
|
|
>I;//Ja !
|
|
SPB S015A;
|
|
|
|
L 16#B150;
|
|
T #Dyn.Stop_Ursache;
|
|
|
|
SPA RET;
|
|
|
|
//Weichendaten auslesen:
|
|
S015A: L #SAVE.Weichen_DW;
|
|
ITD;
|
|
T #AR1Start;//Startwert mit Offset 0
|
|
|
|
L #AR1Start ;//Startwert mit Offset 0
|
|
+ DINT#70;
|
|
SLD 3;
|
|
L 0 ;//Damit DBX70.0
|
|
OD;
|
|
T #AR1Zeiger;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
|
|
|
|
L 16#B152;
|
|
T #Dyn.Stop_Ursache;
|
|
|
|
AUF DB[ #SAVE.Weichen_DB];//FABE+ -DB öffnen
|
|
|
|
UN DBX[ #AR1Zeiger] ;//Weichenbereich frei ? (DBX70.0)
|
|
SPB S015B;
|
|
|
|
L 16 ;//Weiter mit Schritt 16 (Daten an Weiche übergeben)
|
|
SPA Neu_Mig ;//Bei diesem Schritt weiter
|
|
|
|
//Reservierung noch diese Schleuse ?:
|
|
S015B: L #AR1Start ;//Startwert mit Offset 0
|
|
+ DINT#78;
|
|
SLD 3;
|
|
T #AR1Zeiger;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
|
|
|
|
AUF DB[ #SAVE.Weichen_DB];//FABE+ -DB öffnen
|
|
|
|
L DBW[ #AR1Zeiger] ;//Schleuse -1 (DBW 78)
|
|
L #Schleusen_Nr ;//Diese Schleuse ?
|
|
<>I ;//Nein !
|
|
SPB RET;//Warten !
|
|
|
|
//Dasselbe Weichen-Ziel ?:
|
|
L #Dyn.Weichen_Ziel;//Gewolltes Ziel
|
|
L #Dyn.Zurück_gemeldetes_Weichen_Ziel;//Aktuell im Weichenbereich aktives Ziel
|
|
<>I ;//Sind nicht identisch !
|
|
SPB RET;//Warten !
|
|
|
|
L 16 ;//Weiter mit Schritt 16 (Daten an Weiche übergeben)
|
|
SPA Neu_Mig ;//Bei diesem Schritt weiter
|
|
|
|
NETWORK
|
|
TITLE = Schritt 16: Daten an Rausweiche übergeben
|
|
s016: NOP 0;
|
|
|
|
//Schrittaktionen:
|
|
SET;
|
|
S #Status2."Weichen-Schritt";
|
|
|
|
//Daten für Eintrag vorbereiten:
|
|
AUF DB[ #SAVE.Weichen_DB];//FABE+ -DB öffnen
|
|
|
|
L #AR1Start ;//Startwert mit Offset 0
|
|
+ DINT#72;
|
|
SLD 3;
|
|
T #AR1Zeiger;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
|
|
|
|
L #Dyn.TrolleyID_Schleuse;
|
|
T DBD[ #AR1Zeiger] ;//Trolley-ID (DBD 72)
|
|
|
|
L #AR1Start ;//Startwert mit Offset 0
|
|
+ DINT#76;
|
|
SLD 3;
|
|
T #AR1Zeiger;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
|
|
|
|
L #Dyn.Weichen_Ziel;
|
|
T DBW[ #AR1Zeiger] ;//Weichenziel (DBW 76)
|
|
|
|
L #AR1Start ;//Startwert mit Offset 0
|
|
+ DINT#80;
|
|
SLD 3;
|
|
T #AR1Zeiger;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
|
|
|
|
L #Dyn.Trolley_ZwischenZiel;
|
|
T DBW[ #AR1Zeiger] ;//Zwischenziel (DBW 80)
|
|
|
|
L #AR1Start ;//Startwert mit Offset 0
|
|
+ DINT#78;
|
|
SLD 3;
|
|
T #AR1Zeiger;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
|
|
|
|
L #Schleusen_Nr;
|
|
T DBW[ #AR1Zeiger] ;//Schleuse -1 (DBW 78)
|
|
|
|
SET;
|
|
S #"Reservierung_Weiche+1_aktiv";//Weiche nicht mehr angemeldet (da erst im nächsten Zyklus)
|
|
|
|
L #Schleuse.RausWeichen_Nr;//Nr. der vorhandenen Weiche
|
|
T #SAVE."Weiche+1" ;//Hier wurde reserviert
|
|
|
|
L 17 ;//Weiter mit Schritt 17 (Hat Weiche geschaltet ?)
|
|
SPA Neu_Mig ;//Bei diesem Schritt weiter
|
|
|
|
NETWORK
|
|
TITLE = Schritt 17: Hat Rausweiche geschaltet ?
|
|
s017: NOP 0;
|
|
|
|
//Schrittaktionen:
|
|
SET;
|
|
S #Status2."Weichen-Schritt";
|
|
|
|
//Weiche +1 noch mit dieser Schleuse aktiv ?:
|
|
UN #"Reservierung_Weiche+1_aktiv";//Weiche nicht mehr angemeldet
|
|
L 14 ;//Weiter mit Schritt 14
|
|
SPB Neu_Mig;//Bei diesem Schritt weiter
|
|
|
|
SET;
|
|
S #Dyn.Status."Trolley_wartet_auf_Weiche+1";
|
|
|
|
L 16#B170;
|
|
T #Dyn.Stop_Ursache;
|
|
|
|
L #Dyn.Weichen_Ziel ;//Gewolltes Ziel
|
|
L #Dyn.Zurück_gemeldetes_Weichen_Ziel;//Aktuell im Weichenbereich aktives Ziel
|
|
==I ;//Sind identisch !
|
|
U #Dyn.Status.Weiche_geschaltet;//Rückmeldung von Weiche +1
|
|
L 2 ;//Weiter mit Schritt 2 (Ausfahren ok?)
|
|
SPB Neu_Mig ;//Bei diesem Schritt weiter
|
|
|
|
L 16#B171;
|
|
T #Dyn.Stop_Ursache;
|
|
|
|
SPA RET;
|
|
|
|
NETWORK
|
|
TITLE = Schritt 20: Schleuse resetten (Wartezeit)
|
|
s020: U #B_InSchleuse ;//Weiterschaltbedingung
|
|
= #Weiter ;//Weiterschaltbedingung ist erfüllt
|
|
|
|
//Schrittaktionen:
|
|
SET;//ELS in Grundstellung fahren
|
|
S #Antrieb_Schleuse_vor;//Antrieb einschalten
|
|
S #Antrieb_Schleuse_start;//Antrieb starten
|
|
|
|
U #Weiter;
|
|
O #Dyn.Sk.Err_Uebzeit;
|
|
R #Dyn.Sk.Err_Uebzeit;//Sofort weiter !
|
|
L 21 ;//Weiter mit Schritt 21
|
|
SPB Neu_Mig;//Bei diesem Schritt weiter
|
|
|
|
L 16#B201;
|
|
T #Dyn.Stop_Ursache;
|
|
|
|
SET;
|
|
= #Ueb_akt ;//Überwachungszeit aktivieren
|
|
L #Schleuse.Wartezeit_bis_leer;//Angabe der Überwachungszeit (*1s)
|
|
SPA tueb ;//Überwachungszeit
|
|
|
|
NETWORK
|
|
TITLE = Schritt 21: Reset ist zu Ende
|
|
s021: SET;
|
|
R #Dyn.Sk.Reset_Akt;//Reset ist aktiv
|
|
R #Status2.TrolleyPos_übergeben;
|
|
R #Dyn.Error.Err_Trolley_nicht_in_Schleuse;//Trolley fährt nicht in Schleuse
|
|
R #Dyn.Error.Err_Uebzeit ;//Überwachungzeit ist abgelaufen
|
|
R #Dyn.Error.Err_Stau_Einfahrt;//Betriebsart ist nicht möglich
|
|
R #Dyn.Error.Err_Trolley_raus;//Trolley fährt nicht aus
|
|
R #Dyn.Status.Trolley_fährt_in_Schleuse;
|
|
|
|
L 0;
|
|
T #SAVE.Weichen_DB;
|
|
T #SAVE.Weichen_DW;
|
|
T #SAVE."Weiche+1";//Dadurch wird in Weiche Reservierung gelöscht
|
|
T #Dyn.Raus_Trolleys;
|
|
T #Dyn.Stau_Zeit ;//Sensor B_VorSep ist belegt [1s]
|
|
T #Dyn.Mindest_Zeit ;//Sensor B_VorSep ist frei [1s]
|
|
|
|
SET;
|
|
S #Dyn.Status.Trolley_draussen;
|
|
|
|
SPA ENDE_Mig;//Neubeginn
|
|
|
|
NETWORK
|
|
TITLE = Schrittkette beenden
|
|
ENDE_Mig: L 0;//Schritt 0: Warten
|
|
T #Dyn.Sk.Akt_Schritt;
|
|
|
|
L 0;//Zeitwert löschen
|
|
T #Dyn.Sk.Terr_Zelle;
|
|
T #Dyn.Sk.Tok_Zelle;
|
|
T #Dyn.ZwischenZiel_eingefahren;
|
|
|
|
L DINT#0;
|
|
T #Dyn.TrolleyID_Eingefahren;//Eintrag von Weiche -1
|
|
T #Dyn.TrolleyID_Schleuse;//Daten übergeben
|
|
T #Dyn.Trolley_ZwischenZiel;
|
|
T #Dyn.Trolley_EndZiel;
|
|
T #Dyn.Weichen_Ziel;
|
|
|
|
SET;
|
|
R #Dyn.Sk.Err_Uebzeit;
|
|
R #Dyn.Status.Trolley_fährt_rückwärts;
|
|
R #Dyn.Error.Err_Kein_LeseErgebnis;
|
|
R #Status2."2.Lesung_aktiv";
|
|
R #Status2."3.Lesung_aktiv";
|
|
R #Status2.TrolleyPos_übergeben;
|
|
R #Status2.Telegramm_gesendet;
|
|
|
|
//HMI-Zeug:
|
|
L DINT#0;
|
|
T #Dyn.HMI.TrolleyID_Input;
|
|
|
|
SPA RET;
|
|
|
|
NETWORK
|
|
TITLE = Nächsten Schritt aktivieren
|
|
Plus: T #Dyn.Sk.T_ok;//Wartezeit übergeben
|
|
|
|
U #Dyn.Sk.Err_Uebzeit;//Störung noch nicht quittiert
|
|
SPB RET;
|
|
|
|
L 0;//keine Wartezeit ?
|
|
==I;//Ja ! -> sofort weiter
|
|
SPB w220;
|
|
|
|
UN #Warte_neu;//Wartezeit neutriggern
|
|
SPB W220_Mig;
|
|
|
|
L 0;
|
|
T #Dyn.Sk.Tok_Zelle;//Wartezeit
|
|
|
|
W220_Mig: U #Warte_stop;//Wartezeit stoppen
|
|
SPB RET;
|
|
|
|
L #Dyn.Sk.Tok_Zelle;
|
|
L "MW4";//Wartezeit +10ms
|
|
+I;
|
|
T #Dyn.Sk.Tok_Zelle;//Wartezeit
|
|
L #Dyn.Sk.T_ok;//abgelaufen ?
|
|
<I;//Nein !
|
|
SPB RET;
|
|
|
|
w220: L #Dyn.Sk.Akt_Schritt;
|
|
+ 1;//Schritt +1
|
|
T #Dyn.Sk.Akt_Schritt;
|
|
|
|
L 0;//Zeitwerte löschen
|
|
T #Dyn.Sk.Terr_Zelle;
|
|
T #Dyn.Sk.Tok_Zelle;
|
|
|
|
SPA RET;
|
|
|
|
NETWORK
|
|
TITLE = Überwachungszeit kontrollieren
|
|
tueb: U #Ueb_akt;
|
|
= #Dyn.Sk.Ueb_akt;//Für Statuskontrolle
|
|
|
|
T #Dyn.Sk.T_Err;//Für Statuskontrolle
|
|
L #Dyn.Sk.Terr_Zelle;//Maximalzeit
|
|
>I;//abgelaufen ?
|
|
UN #Dyn.Sk.Err_Uebzeit;
|
|
SPB en24;//Nein !
|
|
|
|
U #Ueb_akt;//Überwachungszeit aktivieren
|
|
S #Dyn.Sk.Err_Uebzeit;
|
|
|
|
L 0;//Zeitwert löschen
|
|
T #Dyn.Sk.Terr_Zelle;
|
|
|
|
SPA RET;
|
|
|
|
en24: NOP 0;
|
|
NETWORK
|
|
TITLE = Überwachungszeit +1
|
|
UN #Dyn.Sk.Ueb_akt;//Schrittaktion ist aktiv
|
|
ON "1s-Impuls";
|
|
SPB RET;
|
|
|
|
L #Dyn.Sk.Terr_Zelle;
|
|
+ 1 ;//Üb.zeit +1s
|
|
T #Dyn.Sk.Terr_Zelle;
|
|
|
|
SPA RET;
|
|
|
|
NETWORK
|
|
TITLE = Return
|
|
RET: NOP 0;
|
|
//Weichen -R ückmeldung löschen:
|
|
SET;
|
|
R #Dyn.Status.Weiche_geschaltet;
|
|
R #Dyn.Status."Trolley ausserhalb Weiche";
|
|
|
|
L 0;
|
|
T #Dyn.Zurück_gemeldetes_Weichen_Ziel;
|
|
|
|
NETWORK
|
|
TITLE = Leser-Einheit managen (Outputs schreiben)
|
|
UN #Leser_Zugriff;
|
|
ON #Schleuse.Parameter_allg.Leser_eingebaut;
|
|
SPB NixLeser;
|
|
|
|
//Leserdaten schreiben:
|
|
AUF DB[ #Dyn.SAVE2.Leser_DB] ;//Leser -DB öffnen
|
|
|
|
L #Dyn.SAVE2.Leser_DD;
|
|
T #AR1Start ;//Startwert mit Offset 0
|
|
|
|
//Offset 4:
|
|
L #AR1Start ;//Startwert mit Offset 0
|
|
+ DINT#4;
|
|
SLD 3;
|
|
T #AR1Zeiger ;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
|
|
|
|
L DBB[ #AR1Zeiger];//Aktuelle Werte holen
|
|
T "MB200";
|
|
|
|
U #Dyn.Leser.OUT.xInStartReading;
|
|
= "M200.1";
|
|
U #Dyn.Leser.OUT.xInHandshakeDone;
|
|
R #Dyn.Leser.OUT.xInHandshakeDone;
|
|
= "M200.2";
|
|
U #Dyn.Leser.OUT.xInErrQuit;
|
|
R #Dyn.Leser.OUT.xInErrQuit;
|
|
= "M200.4";
|
|
U #Dyn.Leser.OUT.xInReset;
|
|
R #Dyn.Leser.OUT.xInReset;
|
|
= "M200.5";
|
|
|
|
L "MB200";
|
|
T DBB[ #AR1Zeiger] ;//Veränderte Werte zurück schreiben
|
|
|
|
NixLeser: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = Ende
|
|
BE;
|
|
|
|
END_FUNCTION_BLOCK
|
|
|