935 lines
33 KiB
Plaintext
935 lines
33 KiB
Plaintext
FUNCTION_BLOCK "MHMOmniWeiche_Plus"
|
|
TITLE = OmniWeichen-Modul
|
|
{ S7_Optimized_Access := 'FALSE' }
|
|
AUTHOR : AE
|
|
VERSION : 0.1
|
|
//COPYRIGHT by Ingenieurbüro A.Emmert
|
|
//Ortsstr.33, D-869925 Fuchstal (Germany)
|
|
//Tel.: 0049(0)8243-960629
|
|
//
|
|
//Version Plus: HM-Omniflow 2100 / 12.2025
|
|
//-kompatibel zu Schleuse_Plus
|
|
//
|
|
//Version: H&M Omniflow 2100 / 07.2025
|
|
//
|
|
//Version: Omniflow 2100 / 10.2024
|
|
//
|
|
VAR_INPUT
|
|
Weichen_Nr { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // Aufruf für Weiche
|
|
ErrQuit { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Ablaufstörung quittieren
|
|
Fahren_Ok { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Fahren Ok
|
|
B_Ziel_gerade { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Ziel-Sensor gerade
|
|
B_Ziel_abzweig { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Ziel-Sensor abzweig
|
|
Antrieb_Weiche_aktiv { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Weichen-Antrieb aktiv
|
|
Antrieb_Gerade_aktiv : Bool; // Gerade-Antrieb aktiv
|
|
Antrieb_Abzweig_aktiv : Bool; // Abzweig-Antrieb aktiv
|
|
Weiche_ist_AST : Bool; // Weiche ist auf Arbeitsstellung
|
|
END_VAR
|
|
|
|
VAR_OUTPUT
|
|
Y_Weiche_gerade { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Weiche auf Gerade schalten
|
|
Y_Weiche_abzweig { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Weiche auf Abzweig schalten
|
|
Error { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Word; // Störungen übergeben
|
|
END_VAR
|
|
|
|
VAR_IN_OUT
|
|
Antrieb_Weiche_vor { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Weichenantrieb einschalten
|
|
Antrieb_Weiche_stop { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Weichenantrieb stoppen
|
|
Antrieb_Weiche_gerade_vor { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Weichenantrieb gerade einschalten
|
|
Antrieb_Weiche_gerade_stop { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Weichenantrieb gerade stoppen
|
|
Antrieb_Weiche_abzweig_vor { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Weichenantrieb abzweig einschalten
|
|
Antrieb_Weiche_abzweig_stop { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Weichenantrieb abzweig stoppen
|
|
hStOk { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Anzeige Start n. Störung aktivieren
|
|
END_VAR
|
|
|
|
VAR
|
|
SAVE { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Struct
|
|
Schleusen_DB { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // Schleuse-1-DB
|
|
"Schleuse-1_DW" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // Schleuse-1-DW
|
|
Res { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Array[1..3] of Int; // Reserve
|
|
END_STRUCT;
|
|
Para { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Struct // Parameter
|
|
Weichen_DL_DB { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // Einsprung Weichen-Datenliste-DB
|
|
Weichen_DL_DW { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // Einsprung Weichen-Datenliste-DW
|
|
Schleusen_DL_DB { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // Einsprung Schleuse-Datenliste-DB
|
|
Schleusen_DL_DW { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // Einsprung Schleuse-Datenliste-DW
|
|
Res1 { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Array[1..1] of Int; // Reserve
|
|
END_STRUCT;
|
|
Weiche { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'; S7_SetPoint := 'False'} : "UDLHMOmniWeiche_2fach_Plus"; // Fahrbereichs Daten
|
|
Dyn : Struct // Dynamische Daten fürs Einfahren
|
|
Status { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Struct // Status
|
|
Weiche_frei { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Rückmeldung: Weiche ist wieder frei
|
|
Kein_StartOk { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Input StartOk <>1
|
|
Weiche_abzweigen { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Weiche auf Abzweig schalten
|
|
Weiche_geradeaus { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Weiche auf Gerade schalten
|
|
MindestZeit_ok { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Mindestzeit für Weichendurchfahrt erreicht?
|
|
Ziel_erreicht { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Ziel erreicht
|
|
Frei06 { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
|
|
Weiche_aktiv { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Weiche ist aktiv
|
|
Auto_akt { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
|
|
Hand_akt { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
|
|
Bereich_ok { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
|
|
MindestZeit_nachtriggern { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Mindestzeit nachtriggern (von Schleuse -1)
|
|
Warten_auf_Mindestzeit { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Mindestzeit noch nicht abgelaufen
|
|
Res15 { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
|
|
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 { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : DInt; // Trolley-Nr (Eintrag Schleuse, Austrag Weiche)
|
|
Weichen_Ziel { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Word; // Weichen-Ziel (Eintrag Schleuse, Austrag Weiche)
|
|
"Schleuse -1" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // Schleuse, woher Ziel kam
|
|
Zwischen_Ziel : Word; // Zwischen-Ziel
|
|
HMI : Struct
|
|
TrolleyID_Weiche { ExternalWritable := 'False'} : DInt; // Trolley-Nr im Weichenbereich (IN:PLC, OUT:PLC)
|
|
WeichenZiel { ExternalWritable := 'False'} : DInt; // Ziel im Weichenbereich (IN:PLC, OUT:PLC)
|
|
Weiche_resetten : Bool; // Weiche resetten (IN:HMI, Out:PLC)
|
|
END_STRUCT;
|
|
Rueckmld { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Struct
|
|
RET_VAL_BLKMOV_Weiche { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // Rückmeldung nach BLKMOV-Aufruf
|
|
RET_VAL_DL_Weichen { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Byte; // Rückmeldung nach DatenOut-Aufruf
|
|
RET_VAL_DL_Schleusen { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Byte; // Rückmeldung nach DatenOut-Aufruf
|
|
END_STRUCT;
|
|
Error { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : "UErrOmniWeiche_2fach";
|
|
FahrKontrolle { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Struct
|
|
Para_Mindestzeit { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // BM erst nach dieser Zeit im Ziel
|
|
Para_Überwachungszeit { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // BM nach dieser Zeit in Weiche verklemmt
|
|
Akt_Mindestzeitzeit { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // BM erst nach dieser Zeit im Ziel
|
|
Akt_Überwachungszeit { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // BM nach dieser Zeit in Weiche verklemmt
|
|
END_STRUCT;
|
|
Leer_Zeit { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // Lager ist frei [1s]
|
|
Schalttakte { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : DInt; // Anzahl der getätigten Umschaltungen
|
|
Frei200 { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Array[1..44] of Int;
|
|
END_STRUCT;
|
|
END_VAR
|
|
|
|
VAR_TEMP
|
|
Quelle : Any; // Zeiger, wo Rein-Daten sind
|
|
Ziel : Any; // Zeiger, FIFO-Stelle
|
|
Parameter : Word; // Parameter
|
|
AR1Zeiger : DWord; // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
|
|
AR1Start : DInt; // Startwert mit Offset 0
|
|
"Bereich+1ID" : Int;
|
|
"Bereich+1_DB" : Int;
|
|
Keine_Einfahrt : Bool; // Keine Einfahrt angemeldet
|
|
"Err_Bereich+1" : Bool;
|
|
Weichen_Trolleys : Bool; // Weichen-Trolleys vorhanden
|
|
ZielSensor_aktiv : Bool;
|
|
Abzweig_Ziel : Bool;
|
|
Gerade_Ziel : Bool;
|
|
Antriebe_ein : Bool;
|
|
END_VAR
|
|
|
|
|
|
BEGIN
|
|
NETWORK
|
|
TITLE = Parameter-Übergabe
|
|
L #Weichen_Nr ;//Aufruf-Parameter (für Baustein beobachten)
|
|
|
|
L 279 ;//Einsprung Weichen-DL
|
|
T #Para.Weichen_DL_DB;//vor Aufruf übergeben!
|
|
L 0;
|
|
T #Para.Weichen_DL_DW;
|
|
|
|
L 274 ;//Einsprung Schleuse-DL
|
|
T #Para.Schleusen_DL_DB;//vor Aufruf übergeben!
|
|
L 0;
|
|
T #Para.Schleusen_DL_DW;
|
|
|
|
SET;
|
|
R #ZielSensor_aktiv ;//Temp
|
|
R #Weichen_Trolleys;
|
|
R #Antriebe_ein;
|
|
R #Abzweig_Ziel;
|
|
R #Gerade_Ziel;
|
|
|
|
NETWORK
|
|
TITLE = Gesamt: Out-Bits zum Zurücksetzen
|
|
L #Weichen_Nr;
|
|
|
|
SET;
|
|
// R #Y_Weiche_gerade //Wegen Reset
|
|
// R #Y_Weiche_abzweig //Wegen Reset
|
|
|
|
SET;//Erst mal
|
|
R #Dyn.Status.Weiche_frei;
|
|
S #Dyn.Status.Weiche_aktiv;
|
|
|
|
NETWORK
|
|
TITLE = HMI-Zeug
|
|
|
|
//Von HMI:
|
|
U #Dyn.HMI.Weiche_resetten;
|
|
R #Dyn.HMI.Weiche_resetten;//von HMI
|
|
S #Dyn.Status.Reset_aktiv;
|
|
SPBN HMI1;
|
|
|
|
L 0;
|
|
T #Dyn.Leer_Zeit;//da kein Sk
|
|
T #Dyn.FahrKontrolle.Akt_Mindestzeitzeit;
|
|
T #Dyn.FahrKontrolle.Akt_Überwachungszeit;
|
|
|
|
SET;
|
|
R #Dyn.Error.Übzeit_Gerade;
|
|
R #Dyn.Error.Übzeit_Abzweig;
|
|
|
|
//An HMI:
|
|
HMI1: L #Dyn.TrolleyID;
|
|
T #Dyn.HMI.TrolleyID_Weiche;
|
|
|
|
L #Dyn.Weichen_Ziel;
|
|
T #Dyn.HMI.WeichenZiel;
|
|
|
|
NETWORK
|
|
TITLE = Störungen nach Außen übergeben
|
|
L 0;
|
|
T "MB200";
|
|
|
|
U #Dyn.Error.Weichen_DL;//Weichen-Datenliste fehlerhaft
|
|
= "M200.0";
|
|
U #Dyn.Error.Undef_Weiche;//undefinierte Weiche
|
|
= "M200.1";
|
|
U #Dyn.Error.BLKMov;//Fehler bei Block kopieren
|
|
= "M200.2";
|
|
U #Dyn.Error."Undef_Bereich+1";
|
|
= "M200.3";
|
|
U #Dyn.Error.Frei04;
|
|
= "M200.4";
|
|
U #Dyn.Error.Frei05;
|
|
= "M200.5";
|
|
U #Dyn.Error.Ziel_undefiniert;
|
|
= "M200.6";
|
|
U #Dyn.Error.Err_Schleusen_DL;
|
|
= "M200.7";
|
|
U #Dyn.Error."Err_Undef_Schleuse-1";
|
|
= "M201.0";
|
|
U #Dyn.Error.Übzeit_Gerade;//BM bei Weiterfahrt in Weiche verklemmt (-> Antrieb stoppen)
|
|
= "M201.1";
|
|
U #Dyn.Error.Übzeit_Abzweig;//BM bei Ausfahrt in Weiche verklemmt (-> Antrieb stoppen)
|
|
= "M201.2";
|
|
U #Dyn.Error.Gerade_Sensor_aktiv;
|
|
= "M201.3";
|
|
U #Dyn.Error.Abzweig_Sensor_aktiv;
|
|
= "M201.4";
|
|
U #Dyn.Error.Gerade_Bereich_belegt;
|
|
= "M201.5";
|
|
U #Dyn.Error.Abzweig_Bereich_belegt;
|
|
= "M201.6";
|
|
U #Dyn.Status.Reset_aktiv;
|
|
= #Dyn.Error.Reset_aktiv;
|
|
= "M201.7";
|
|
|
|
L "MW200";
|
|
T #Error;//Schnittstelle nach Außen
|
|
|
|
//Störung vorhanden:
|
|
L 0;
|
|
<>I;//Ja !
|
|
= #Dyn.Status.Error_aktiv;
|
|
|
|
//Anzeige Start n. Störung aktivieren:
|
|
U #Dyn.Error.Übzeit_Gerade;//BM bei Weiterfahrt in Weiche verklemmt (-> Antrieb stoppen)
|
|
O #Dyn.Error.Übzeit_Abzweig;//BM bei Ausfahrt in Weiche verklemmt (-> Antrieb stoppen)
|
|
S #hStOk;
|
|
|
|
NETWORK
|
|
TITLE = Statische Weichen-Parameter holen
|
|
L #Weiche.Weichen_Nr;//Nummer der Weiche
|
|
L #Weichen_Nr;//Aufruf-Parameter
|
|
==I;//Identisch ?
|
|
R #Dyn.Error.Weichen_DL;//Weichendatenbank fehlerhaft
|
|
R #Dyn.Error.Undef_Weiche;//undefinierte Weiche
|
|
SPB en06_Mig;//Ja !
|
|
|
|
T "MW200";//Search-Daten
|
|
|
|
CALL "DatenOut"
|
|
( SSDB := #Para.Weichen_DL_DB ,
|
|
SSDW := #Para.Weichen_DL_DW ,
|
|
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_Weichen;//Rückmeldung bei Datenbank-Zugriff (Gefälle-DL)
|
|
|
|
SPBI G_Ok;
|
|
|
|
U "M199.0";
|
|
= #Dyn.Error.Weichen_DL;//Weichendatenbank fehlerhaft
|
|
BEB;
|
|
|
|
SET;
|
|
S #Dyn.Error.Undef_Weiche;//undefinierte Weiche
|
|
|
|
BEA;
|
|
|
|
//Kennung + Datenbytes
|
|
G_Ok: SET;
|
|
R #Dyn.Error.Weichen_DL;//Weichendatenbank fehlerhaft
|
|
R #Dyn.Error.Undef_Weiche;//undefinierte Weiche
|
|
|
|
L 16#1004;//Kennung 10 + Word=04
|
|
T %LW0;//Any-Kennung, Datentyp
|
|
L 40;//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_Weiche ,
|
|
DSTBLK := #Weiche //#Ziel
|
|
);
|
|
|
|
L #Dyn.Rueckmld.RET_VAL_BLKMOV_Weiche;//Rückmeldung
|
|
L 0;//Fehler vorhanden ?
|
|
<>I;//Ja !
|
|
= #Dyn.Error.BLKMov;//Error bei Block kopieren
|
|
BEB;
|
|
|
|
L #Weiche.Weichen_Typ;//Weichentyp = 1280 (HM-Weiche 2fach_Plus)
|
|
L 1280 ;//Dieser Aufruf-FB ?
|
|
==I;//Ja !
|
|
SPB en06_Mig;
|
|
|
|
SET;
|
|
S #Dyn.Error.Undef_Weiche;//undefinierte Weiche
|
|
|
|
L 0;//Weiche ungültig !
|
|
T #Weiche.Weichen_Nr;//Nummer der Weiche
|
|
|
|
BEA;
|
|
|
|
en06_Mig: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = Reset
|
|
//
|
|
//
|
|
UN #Dyn.Status.Reset_aktiv;
|
|
SPB En06;
|
|
|
|
SET;
|
|
S #Antrieb_Weiche_vor;
|
|
S #Antrieb_Weiche_gerade_vor ;//Antrieb gerade einschalten
|
|
S #Antrieb_Weiche_abzweig_vor;//Antrieb abzweig einschalten
|
|
|
|
UN #Antrieb_Weiche_aktiv;
|
|
ON "1s-Impuls";
|
|
SPB En06;
|
|
|
|
L #Dyn.Leer_Zeit ;//Zeit für LeerCheck [1s]
|
|
+ +1;
|
|
T #Dyn.Leer_Zeit ;//Zeit für LeerCheck [1s]
|
|
|
|
L #Weiche.Wartezeit_bis_Weiche_leer;//Leer-Zeit erreicht ?
|
|
<I ;//Nein !
|
|
SPB En06;
|
|
|
|
//Dyn.Daten löschen:
|
|
SET;
|
|
R #Dyn.Status.Reset_aktiv;
|
|
R #Dyn.Status.Weiche_abzweigen;
|
|
R #Dyn.Status.Weiche_geradeaus;
|
|
|
|
L DINT#0;
|
|
T #Dyn.TrolleyID;
|
|
L 0;
|
|
T #Dyn.Weichen_Ziel;
|
|
T #Dyn.Zwischen_Ziel;
|
|
T #Dyn."Schleuse -1";
|
|
T #Dyn.Leer_Zeit;
|
|
T #Dyn.FahrKontrolle.Akt_Mindestzeitzeit;
|
|
T #Dyn.FahrKontrolle.Akt_Überwachungszeit;
|
|
T #SAVE.Schleusen_DB;
|
|
T #SAVE."Schleuse-1_DW";
|
|
|
|
//Rückmeldungen löschen:
|
|
L 0;
|
|
T #Dyn.Rueckmld.RET_VAL_DL_Weichen;
|
|
T #Dyn.Rueckmld.RET_VAL_BLKMOV_Weiche;
|
|
T #Dyn.Rueckmld.RET_VAL_DL_Schleusen;
|
|
|
|
//Störungen löschen:
|
|
SET;
|
|
R #Dyn.Error.Weichen_DL;
|
|
R #Dyn.Error.Undef_Weiche;
|
|
R #Dyn.Error.BLKMov;
|
|
R #Dyn.Error."Undef_Bereich+1";
|
|
R #Dyn.Error.Frei04;
|
|
R #Dyn.Error.Frei05;
|
|
R #Dyn.Error.Ziel_undefiniert;
|
|
R #Dyn.Error.Err_Schleusen_DL;
|
|
R #Dyn.Error."Err_Undef_Schleuse-1";
|
|
R #Dyn.Error.Übzeit_Gerade;
|
|
R #Dyn.Error.Übzeit_Abzweig;
|
|
R #Dyn.Error.Gerade_Sensor_aktiv;
|
|
R #Dyn.Error.Abzweig_Sensor_aktiv;
|
|
R #Dyn.Error.Gerade_Bereich_belegt;
|
|
R #Dyn.Error.Abzweig_Bereich_belegt;
|
|
R #Dyn.Status.Warten_auf_Mindestzeit;
|
|
R #Dyn.Error.Reset_aktiv;//Reset ist aktiv
|
|
|
|
L 0;//Damit statische Werte neu aus Datenbank geholt werden !
|
|
T #Weiche.Weichen_Nr;//Nummer der Weiche
|
|
|
|
BEA;
|
|
|
|
En06: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = Einsprung Schleuse -1 ermitteln
|
|
L #Dyn."Schleuse -1" ;//Nr. der Schleuse -1 [In/OUT von Schleuse -1 / Reset]
|
|
T "MW200";//Search-Daten
|
|
L 0;//angegeben ?
|
|
==I;//Nein !
|
|
= #Keine_Einfahrt;
|
|
SPB En08;
|
|
|
|
L #SAVE.Schleusen_DB;//Weichen-FIFO-DB
|
|
L 0;//Einsprung-Zeiger bekannt ?
|
|
>I;//Ja !
|
|
R #Dyn.Error.Err_Schleusen_DL;//Schleusen-Datenliste fehlerhaft
|
|
R #Dyn.Error."Err_Undef_Schleuse-1";//undefinierte Schleuse-1
|
|
SPB En08;
|
|
|
|
CALL "DatenOut"
|
|
( SSDB := #Para.Schleusen_DL_DB ,
|
|
SSDW := #Para.Schleusen_DL_DW ,
|
|
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_Schleusen;//Rückmeldung bei Datenbank-Zugriff (Weichen-DL)
|
|
|
|
SPBI W_Ok;
|
|
|
|
U "M199.0";
|
|
= #Dyn.Error.Err_Schleusen_DL;//Schleusen-Datenliste fehlerhaft
|
|
BEB;
|
|
|
|
SET;
|
|
S #Dyn.Error."Err_Undef_Schleuse-1";//undefinierte Schleuse-1
|
|
|
|
BEA;
|
|
|
|
W_Ok: L "MW224" ;//Rein-FIFO-DB
|
|
T #SAVE.Schleusen_DB;//Weichen-FIFO-DB
|
|
L 0;//sinnvoller Wert ?
|
|
<=I;//Nein !
|
|
S #Dyn.Error."Err_Undef_Schleuse-1";//undefinierte Schleuse-1
|
|
BEB;
|
|
|
|
L "MW226" ;//Schleuse -1
|
|
T #SAVE."Schleuse-1_DW";
|
|
|
|
En08: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = Störungen quittieren
|
|
//
|
|
//
|
|
|
|
//Antrieb zusätzlich starten:
|
|
U #ErrQuit ;//Überwachungszeit abgelaufen quittieren
|
|
S #Antrieb_Weiche_vor;//Weichenantrieb starten
|
|
S #Antrieb_Weiche_gerade_vor ;//Antrieb gerade einschalten
|
|
S #Antrieb_Weiche_abzweig_vor;//Antrieb abzweig einschalten
|
|
|
|
UN #ErrQuit;
|
|
UN #Keine_Einfahrt;
|
|
SPB En08_Mig;
|
|
|
|
//Störungen löschen:
|
|
SET;
|
|
R #Dyn.Error.Ziel_undefiniert;
|
|
R #Dyn.Error.Err_Schleusen_DL;
|
|
R #Dyn.Error."Err_Undef_Schleuse-1";
|
|
R #Dyn.Error.Übzeit_Gerade;
|
|
R #Dyn.Error.Übzeit_Abzweig;
|
|
R #Dyn.Error.Gerade_Sensor_aktiv;
|
|
R #Dyn.Error.Abzweig_Sensor_aktiv;
|
|
R #Dyn.Error.Gerade_Bereich_belegt;
|
|
R #Dyn.Error.Abzweig_Bereich_belegt;
|
|
|
|
//Kann nur über Reset zurückgesetzt werden:
|
|
/// R #Dyn.Error.Weichen_DL
|
|
/// R #Dyn.Error.Undef_Weiche
|
|
/// R #Dyn.Error.BLKMov
|
|
/// R #Dyn.Error."Undef_Bereich+1"
|
|
/// R #Dyn.Error.Frei04
|
|
/// R #Dyn.Error.Frei05
|
|
/// R #Dyn.Error.Reset_aktiv//Reset ist aktiv
|
|
|
|
En08_Mig: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = Einfahrt angemeldet/reserviert ?
|
|
U #Keine_Einfahrt ;//Also keine Schleuse -1 aktiv
|
|
UN #Dyn.Status.Warten_auf_Mindestzeit;
|
|
O #Dyn.Error.Err_Schleusen_DL;//Schleusen-Datenliste fehlerhaft
|
|
O #Dyn.Error."Err_Undef_Schleuse-1";//undefinierte Schleuse-1
|
|
SPBN Schalt ;//Negierter Sprung!
|
|
|
|
//Einsprung löschen:
|
|
L 0;
|
|
T #SAVE.Schleusen_DB;
|
|
T #SAVE."Schleuse-1_DW";
|
|
|
|
//Weichendaten löschen:
|
|
L DINT#0;
|
|
T #Dyn.TrolleyID;
|
|
L 0;
|
|
T #Dyn.Weichen_Ziel;
|
|
T #Dyn.Zwischen_Ziel;
|
|
T #Dyn.FahrKontrolle.Akt_Mindestzeitzeit;
|
|
T #Dyn.FahrKontrolle.Akt_Überwachungszeit;
|
|
|
|
SET;
|
|
R #Dyn.Status.Kein_StartOk;
|
|
R #Dyn.Status.MindestZeit_ok;
|
|
R #Dyn.Status.Ziel_erreicht;
|
|
R #Dyn.Status.Weiche_geradeaus;
|
|
R #Dyn.Status.Weiche_abzweigen;
|
|
|
|
SPA Ret ;//Weichen-Checkerei überspringen
|
|
|
|
NETWORK
|
|
TITLE = Weiche aufgrund vom Weichen-Ziel checken
|
|
|
|
//Ziel-Check für Kontrolle:
|
|
Schalt: L #Dyn.Weichen_Ziel;
|
|
L #Weiche.Abzweig.Ziel;//Abzweig-Ziel?
|
|
==I;//Ja!
|
|
= #Abzweig_Ziel;
|
|
|
|
TAK;
|
|
L #Weiche.Gerade.Ziel ;//Gerade-Ziel?
|
|
==I;//Ja!
|
|
= #Gerade_Ziel;
|
|
|
|
//Sind noch Teile im Weichenbereich?:
|
|
L #SAVE."Schleuse-1_DW";
|
|
ITD;
|
|
T #AR1Start;//Startwert mit Offset 0
|
|
|
|
L #AR1Start;//Startwert mit Offset 0
|
|
+ DINT#162;
|
|
SLD 3;
|
|
T #AR1Zeiger ;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
|
|
|
|
AUF DB[ #SAVE.Schleusen_DB];//FABE+ -DB öffnen
|
|
|
|
L DBW[ #AR1Zeiger] ;//Raus-Trolleys von Schleuse-1 (DBW162)
|
|
L 0 ;//Teile vorhanden?
|
|
>I ;//JA !
|
|
= #Weichen_Trolleys;
|
|
|
|
//Evtl. Weiche umschalten:
|
|
U #Weichen_Trolleys ;//Trolleys im Weichenbereich!
|
|
U(;
|
|
O #Dyn.Status.Weiche_geradeaus;//Weiche auf Gerade schalten
|
|
O #Dyn.Status.Weiche_abzweigen;//Weiche auf Abzweig schalten
|
|
);
|
|
SPB en10;
|
|
|
|
U #Dyn.Status.MindestZeit_ok;
|
|
R #Dyn.Status.Warten_auf_Mindestzeit;
|
|
|
|
U #Dyn.Status.Warten_auf_Mindestzeit;
|
|
SPB en10;
|
|
|
|
U #Dyn.Status.Weiche_abzweigen;//Weiche auf Abzweig schalten
|
|
O #Dyn.Status.Weiche_geradeaus;//Weiche auf Gerade schalten
|
|
O #Dyn.Status.Warten_auf_Mindestzeit;
|
|
R #Dyn.Error.Ziel_undefiniert;
|
|
R #Dyn.Error.Gerade_Sensor_aktiv;
|
|
R #Dyn.Error.Abzweig_Sensor_aktiv;
|
|
R #Dyn.Error.Gerade_Bereich_belegt;
|
|
R #Dyn.Error.Abzweig_Bereich_belegt;
|
|
SPB en10;
|
|
|
|
UN #Fahren_Ok;
|
|
= #Dyn.Status.Kein_StartOk;
|
|
SPB Ret;
|
|
|
|
//Ziel-Check zum Schalten:
|
|
L #Dyn.Weichen_Ziel;
|
|
L 0;
|
|
==I;
|
|
S #Dyn.Error.Ziel_undefiniert;
|
|
SPB New;
|
|
|
|
TAK;
|
|
L #Weiche.Abzweig.Ziel;//Abzweig-Ziel?
|
|
==I;//Ja!
|
|
SPB Abzweigen;
|
|
|
|
TAK;
|
|
L #Weiche.Gerade.Ziel ;//Gerade-Ziel?
|
|
==I;//Ja!
|
|
SPB Gerade;
|
|
|
|
SET;
|
|
S #Dyn.Error.Ziel_undefiniert;
|
|
|
|
SPA New;
|
|
|
|
Gerade: NOP 0;
|
|
//Gerade-Fahrt gewünscht**************************************************
|
|
//Ziel-Sensor-Check:
|
|
U #B_Ziel_gerade;
|
|
= #Dyn.Error.Gerade_Sensor_aktiv;
|
|
U #Dyn.Error.Gerade_Sensor_aktiv;//Muss erst quittiert werden!
|
|
SPB New;
|
|
|
|
//Trolley geradeaus fahren:
|
|
SET;
|
|
S #Dyn.Status.Weiche_geradeaus;//Weiche auf Gerade schalten
|
|
R #Dyn.Status.Weiche_abzweigen;//Weiche auf Abzweig schalten
|
|
S #Dyn.Status.Warten_auf_Mindestzeit;
|
|
|
|
//Zeiten speichern:
|
|
L #Weiche.Gerade.Mindestzeit;//Nach dieser Zeit kann Trolley erst aus Weiche sein
|
|
T #Dyn.FahrKontrolle.Para_Mindestzeit;
|
|
L #Weiche.Gerade.Überwachungszeit;//Nach dieser Zeit muss Trolley Zielbereich erreicht haben
|
|
T #Dyn.FahrKontrolle.Para_Überwachungszeit;
|
|
|
|
SPA en10;
|
|
|
|
Abzweigen: NOP 0;
|
|
//Abzweig-Fahrt gewünscht**************************************************
|
|
//Ziel-Sensor-Check:
|
|
U #B_Ziel_abzweig;
|
|
= #Dyn.Error.Abzweig_Sensor_aktiv;
|
|
U #Dyn.Error.Abzweig_Sensor_aktiv;//Muss erst quittiert werden!
|
|
SPB New;
|
|
|
|
//Trolly abzweigen fahren:
|
|
SET;
|
|
S #Dyn.Status.Weiche_abzweigen;//Weiche auf Abzweig schalten
|
|
R #Dyn.Status.Weiche_geradeaus;//Weiche auf Gerade schalten
|
|
S #Dyn.Status.Warten_auf_Mindestzeit;
|
|
|
|
//Zeiten speichern:
|
|
L #Weiche.Abzweig.Mindestzeit;//Nach dieser Zeit kann Trolley erst aus Weiche sein
|
|
T #Dyn.FahrKontrolle.Para_Mindestzeit;
|
|
L #Weiche.Abzweig.Überwachungszeit;//Nach dieser Zeit muss Trolley Zielbereich erreicht haben
|
|
T #Dyn.FahrKontrolle.Para_Überwachungszeit;
|
|
|
|
SPA en10;
|
|
|
|
New: UN #ErrQuit;
|
|
SPB en10;
|
|
|
|
L 0 ;//Reservierung löschen
|
|
T #Dyn."Schleuse -1";
|
|
|
|
en10: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = Mindestzeit / Überwachungszeit
|
|
U #Gerade_Ziel;
|
|
U(;
|
|
ON #Y_Weiche_gerade;
|
|
ON #Antrieb_Gerade_aktiv;
|
|
);
|
|
O;
|
|
U #Abzweig_Ziel;
|
|
U(;
|
|
ON #Y_Weiche_abzweig;
|
|
ON #Antrieb_Abzweig_aktiv;
|
|
);
|
|
SPB W011;
|
|
|
|
//Mindestzeit neu triggern: (von Schleuse -1)
|
|
U #Dyn.Status.MindestZeit_nachtriggern;
|
|
R #Dyn.Status.MindestZeit_nachtriggern;
|
|
S #Dyn.Status.Warten_auf_Mindestzeit;
|
|
SPBN X011 ;//Negierter Sprung
|
|
|
|
W011: L 0;
|
|
T #Dyn.FahrKontrolle.Akt_Mindestzeitzeit;
|
|
|
|
SPA y011;
|
|
|
|
//Zeiten aufaddieren:
|
|
X011: UN "1s-Impuls" ;//1s-Impuls
|
|
ON #Antrieb_Weiche_aktiv;
|
|
SPB X08E;
|
|
|
|
L #Dyn.FahrKontrolle.Akt_Mindestzeitzeit;
|
|
+ 1;
|
|
T #Dyn.FahrKontrolle.Akt_Mindestzeitzeit;
|
|
|
|
y011: L #Dyn.FahrKontrolle.Akt_Mindestzeitzeit;
|
|
L #Dyn.FahrKontrolle.Para_Mindestzeit;
|
|
>=I;
|
|
= #Dyn.Status.MindestZeit_ok;
|
|
SPBN X080;
|
|
|
|
T #Dyn.FahrKontrolle.Akt_Mindestzeitzeit;
|
|
|
|
X080: U #Dyn.Error.Übzeit_Gerade;
|
|
O #Dyn.Error.Übzeit_Abzweig;
|
|
ON "1s-Impuls" ;//1s-Impuls
|
|
ON #Antrieb_Weiche_aktiv;
|
|
SPB X08E;
|
|
|
|
L #Dyn.FahrKontrolle.Akt_Überwachungszeit;
|
|
+ 1;
|
|
T #Dyn.FahrKontrolle.Akt_Überwachungszeit;
|
|
|
|
L #Dyn.FahrKontrolle.Para_Überwachungszeit;
|
|
<I;//Max.Zeit erreicht ?
|
|
SPB X08E ;//Nein
|
|
|
|
//Überwachungszeit ist abgelaufen:
|
|
U #Dyn.Status.Weiche_geradeaus;
|
|
S #Dyn.Error.Übzeit_Gerade;
|
|
|
|
U #Dyn.Status.Weiche_abzweigen;
|
|
S #Dyn.Error.Übzeit_Abzweig;
|
|
|
|
L 0;//Zeiten neu initialisieren
|
|
T #Dyn.FahrKontrolle.Akt_Überwachungszeit;
|
|
|
|
X08E: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = Ziel ist erreicht
|
|
U #Dyn.Status.Weiche_geradeaus;
|
|
U #B_Ziel_gerade;
|
|
S #ZielSensor_aktiv;
|
|
R #Dyn.Error.Übzeit_Gerade;
|
|
|
|
U #Dyn.Status.Weiche_abzweigen;
|
|
U #B_Ziel_abzweig;
|
|
S #ZielSensor_aktiv;
|
|
R #Dyn.Error.Übzeit_Abzweig;
|
|
SPB Ziel_AOk;
|
|
|
|
SPA X09E;
|
|
|
|
Ziel_AOk: U #Dyn.Status.Ziel_erreicht;//Einmaliger Durchlauf
|
|
SPB X09E;
|
|
|
|
SET;
|
|
S #Dyn.Status.Ziel_erreicht;
|
|
|
|
L #Dyn.Schalttakte;
|
|
+ DINT#1;//Auf Abzweig umgeschaltet +1
|
|
T #Dyn.Schalttakte;
|
|
|
|
X09E: U #ZielSensor_aktiv;
|
|
O #Dyn.Status.Reset_aktiv;
|
|
SPBN En12 ;//Negierter Sprung
|
|
|
|
L 0;//Zeiten neu initialisieren
|
|
T #Dyn.FahrKontrolle.Akt_Überwachungszeit;
|
|
|
|
SET;
|
|
R #Dyn.Error.Übzeit_Gerade;
|
|
R #Dyn.Error.Übzeit_Abzweig;
|
|
|
|
En12: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = RET: Weiche schalten
|
|
Ret: U #Dyn.Status.Reset_aktiv;
|
|
O #Weichen_Trolleys;
|
|
SPB En13;
|
|
|
|
U #Dyn.Status.Weiche_geradeaus;//Weiche auf Gerade schalten
|
|
R #Dyn.Status.Weiche_abzweigen;//Gerade hätte Vorrang
|
|
S #Y_Weiche_gerade ;//nicht mit =, damit Weichenstellung erst bei Änderung schaltet!
|
|
R #Y_Weiche_abzweig;
|
|
|
|
U #Dyn.Status.Weiche_abzweigen;//Weiche auf Abzweig schalten
|
|
S #Y_Weiche_abzweig;
|
|
R #Y_Weiche_gerade ;//nicht mit =, damit Weichenstellung erst bei Änderung schaltet!
|
|
|
|
En13: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = Antriebe ansteuern / stoppen ?
|
|
U #Dyn.Status.Weiche_geradeaus;//Weiche auf Gerade schalten
|
|
O #Dyn.Status.Weiche_abzweigen;//Gerade hätte Vorrang
|
|
ON #Keine_Einfahrt ;//Also ist Schleuse -1 aktiv
|
|
O #Weichen_Trolleys;
|
|
= #Antriebe_ein;
|
|
|
|
U #Antriebe_ein;
|
|
O #Dyn.Status.Reset_aktiv;
|
|
S #Antrieb_Weiche_vor;//Weichenantrieb starten
|
|
|
|
U #Antriebe_ein;
|
|
U #Dyn.Status.Weiche_geradeaus;
|
|
O #Dyn.Status.Reset_aktiv;
|
|
S #Antrieb_Weiche_gerade_vor ;//Antrieb gerade einschalten
|
|
|
|
U #Antriebe_ein;
|
|
U #Dyn.Status.Weiche_abzweigen;
|
|
O #Dyn.Status.Reset_aktiv;
|
|
S #Antrieb_Weiche_abzweig_vor;//Antrieb abzweig einschalten
|
|
|
|
//Antriebe stoppen
|
|
UN #Dyn.Status.Reset_aktiv;
|
|
U(;
|
|
UN #Keine_Einfahrt ;//Also ist Schleuse -1 aktiv
|
|
U(;
|
|
UN #Fahren_Ok;
|
|
O;
|
|
U #Dyn.Status.Weiche_abzweigen;
|
|
U(;
|
|
ON #Weiche_ist_AST;
|
|
ON #Antrieb_Abzweig_aktiv;
|
|
);
|
|
O;
|
|
U #Dyn.Status.Weiche_geradeaus;
|
|
U(;
|
|
O #Weiche_ist_AST;
|
|
ON #Antrieb_Gerade_aktiv;
|
|
);
|
|
);
|
|
ON #Dyn.Status.Auto_akt;//SystemVoraussetzungen fehlen
|
|
O #Dyn.Status.Hand_akt;
|
|
ON #Dyn.Status.Bereich_ok;
|
|
);
|
|
S #Antrieb_Weiche_stop;//Alle Antriebe stoppen
|
|
|
|
SET ;////
|
|
R #Antrieb_Weiche_stop;//Alle Antriebe stoppen////
|
|
|
|
NETWORK
|
|
TITLE = Weiche ist frei
|
|
L #SAVE.Schleusen_DB ;//Alte Speicherung ?
|
|
L #SAVE."Schleuse-1_DW";
|
|
OW;
|
|
L #Dyn.Weichen_Ziel;
|
|
OW;
|
|
L 0;
|
|
==I;
|
|
U #Keine_Einfahrt;//Keine Einfahrt aktiv
|
|
UN #Dyn.Status.Weiche_geradeaus;//Weiche auf Gerade schalten
|
|
UN #Dyn.Status.Weiche_abzweigen;//Gerade hätte Vorrang
|
|
UN #Dyn.Status.Warten_auf_Mindestzeit;
|
|
UN #Dyn.Status.Reset_aktiv;
|
|
= #Dyn.Status.Weiche_frei;
|
|
R #Dyn.Status.MindestZeit_nachtriggern;
|
|
NOT;
|
|
= #Dyn.Status.Weiche_aktiv;//Zum Abfragen, damit evtl. Förderer nicht ausgeschaltet wird
|
|
|
|
NETWORK
|
|
TITLE = Schleuse -1 aktiv / vorhanden ?
|
|
U #Keine_Einfahrt;
|
|
O #Dyn.Error.Err_Schleusen_DL;//Schleusen-Datenliste fehlerhaft
|
|
O #Dyn.Error."Err_Undef_Schleuse-1";//undefinierte Schleuse-1
|
|
BEB;
|
|
|
|
L #SAVE.Schleusen_DB ;//Schleusen-DB
|
|
L 0;//Einsprung-Zeiger bekannt ?
|
|
<=I ;//Nein !
|
|
BEB;
|
|
|
|
//Anmeldung an diese Weiche von Schleuse -1 noch aktiv?:
|
|
L #SAVE."Schleuse-1_DW";
|
|
ITD;
|
|
T #AR1Start;//Startwert mit Offset 0
|
|
|
|
L #AR1Start ;//Startwert mit Offset 0
|
|
+ DINT#16;
|
|
SLD 3;
|
|
T #AR1Zeiger ;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
|
|
|
|
AUF DB[ #SAVE.Schleusen_DB];//FABE+ -DB öffnen
|
|
|
|
L DBW[ #AR1Zeiger] ;//Anmeldung von dieser Schleuse (DBW16)
|
|
L #Weichen_Nr;
|
|
==I;//Ja !
|
|
O #Dyn.Status.Warten_auf_Mindestzeit;
|
|
SPB Mldg;
|
|
|
|
L 0 ;//Reservierung löschen
|
|
T #Dyn."Schleuse -1";
|
|
|
|
BEA;
|
|
|
|
NETWORK
|
|
TITLE = Meldung an Schleuse -1: Weiche hat geschaltet
|
|
Mldg: L #AR1Start ;//Startwert mit Offset 0
|
|
+ DINT#71;
|
|
SLD 3;
|
|
L 4 ;//Damit DBX71.4
|
|
OD;
|
|
T #AR1Zeiger;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
|
|
|
|
AUF DB[ #SAVE.Schleusen_DB];//FABE+ -DB öffnen
|
|
|
|
U(;
|
|
U #Dyn.Status.Weiche_geradeaus;//Weiche auf Gerade schalten
|
|
U #Gerade_Ziel;
|
|
U #Y_Weiche_gerade;
|
|
U #Antrieb_Gerade_aktiv;
|
|
O;
|
|
U #Dyn.Status.Weiche_abzweigen;//Gerade hätte Vorrang
|
|
U #Abzweig_Ziel;
|
|
U #Y_Weiche_abzweig;
|
|
U #Antrieb_Abzweig_aktiv;
|
|
);
|
|
U #Fahren_Ok;
|
|
U #Antrieb_Weiche_aktiv;//Antrieb aktiv
|
|
UN #Dyn.Status.Reset_aktiv;
|
|
= DBX[ #AR1Zeiger] ;//Weiche hat geschaltet ? (DBX71.4)
|
|
|
|
NETWORK
|
|
TITLE = Meldung an Schleuse -1: Aktuell aktives Ziel
|
|
|
|
//Rückmeldung an Schleuse -1 (Weichenziel):
|
|
L #AR1Start ;//Startwert mit Offset 0
|
|
+ DINT#166;
|
|
SLD 3;
|
|
T #AR1Zeiger ;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
|
|
|
|
AUF DB[ #SAVE.Schleusen_DB];//FABE+ -DB öffnen
|
|
|
|
L #Dyn.Weichen_Ziel;
|
|
T DBW[ #AR1Zeiger] ;//Zurückgemeldetes WeichenZiel (DBW166)
|
|
|
|
NETWORK
|
|
TITLE = Meldung an Schleuse -1: Trolley hat Ziel erreicht
|
|
L #AR1Start ;//Startwert mit Offset 0
|
|
+ DINT#71;
|
|
SLD 3;
|
|
L 5 ;//Damit DBX71.5
|
|
OD;
|
|
T #AR1Zeiger;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
|
|
|
|
AUF DB[ #SAVE.Schleusen_DB];//FABE+ -DB öffnen
|
|
|
|
U #ZielSensor_aktiv;
|
|
O #Dyn.Status.Reset_aktiv;
|
|
= DBX[ #AR1Zeiger] ;//Trolley ausserhalb Weiche (DBX71.5)
|
|
|
|
NETWORK
|
|
TITLE = Ende
|
|
BE;
|
|
|
|
END_FUNCTION_BLOCK
|
|
|