1323 lines
62 KiB
Plaintext
1323 lines
62 KiB
Plaintext
=== FB 177: MStartSync [STL] ===
|
|
INTERFACE:
|
|
Input:
|
|
Sync_Nr : Int // Aufruf für Weiche
|
|
ErrQuit : Bool // Ablaufstörung quittieren
|
|
B_BT_da : Bool // Sensor BT ist an Sychronisierstelle
|
|
B_RefPunkt : Bool // Sensor RefHaken am Referenzpunkt erkannt
|
|
B_TeachPunk : Bool // Sensor RefHaken am Teachpunkt erkannt
|
|
Antrieb_aktiv : Bool // Band ist aktiv
|
|
Output:
|
|
Error : Word // Störungen übergeben
|
|
InOut:
|
|
Antrieb_start : Bool // Kreiselantrieb starten
|
|
hStOk : Bool // Anzeige Start n. Störung aktivieren
|
|
Static:
|
|
Teil_IDX_Old : Int // BT/MT-IDX (wird bei Auslagerung gemeldet)
|
|
Teil_Ziel_Old : Int // BT/MT bei diesem Abwurf-Ziel ausfahren/entladen
|
|
Res1 : Array[1..3] of Int // Reserve
|
|
SAVE : Struct
|
|
Ink_ohne_Zeit : Int // Zeit Inkremntalgeberwert ohne Änderung [100ms]
|
|
Para : Struct // Parameter
|
|
Weichen_DL_DB : Int // Einsprung Weichen-Datenliste-DB
|
|
Weichen_DL_DW : Int // Einsprung Weichen-Datenliste-DW
|
|
Offset_RefPunkt : DInt // Offset Refpunkt zu TaschenPunkt (für Teachen)
|
|
Res1 : Array[1..1] of Int // Reserve
|
|
SyncPkt : "UDLStartSync" // Fahrbereichs Daten
|
|
Dyn : Struct // Dynamische Daten
|
|
Status : Struct // Status
|
|
TeachModus_Aktiv : Bool // Teach-Modus ist aktiv
|
|
MoreTeach : Bool // Nächsten Teachpunkt ohne neuen Refpunkt
|
|
Res02 : Bool // Reserve
|
|
Res03 : Bool // Reserve
|
|
Res04 : Bool // Reserve
|
|
Res05 : Bool // Reserve
|
|
Res06 : Bool // Reserve
|
|
Res07 : Bool // Reserve
|
|
Res10 : Bool
|
|
Res11 : Bool
|
|
Res12 : Bool
|
|
Res13 : Bool
|
|
Res14 : Bool // Reserve
|
|
Res15 : Bool // Reserve
|
|
Res16 : Bool // Reserve
|
|
Res17 : Bool // Reserve
|
|
Rueckmld : Struct
|
|
RET_VAL_BLKMOV_Sync : Int // Rückmeldung nach BLKMOV-Aufruf
|
|
RET_VAL_DL_Weichen_Out : Byte // Rückmeldung nach DatenOut-Aufruf
|
|
RET_VAL_Hauptstrang_In : Byte // Rückmeldung nach Hauptstrangdaten-In-Aufruf
|
|
RET_VAL_TravelFIFO_In : Byte // Rückmeldung nach Aufruf
|
|
RET_VAL_TravelFIFO_Out : Byte // Rückmeldung nach Aufruf
|
|
RET_VAL_Teach_OUT : Byte // Rückmeldung bei Datenlisten-Zugriff
|
|
RET_VAL_Teach_IN : Byte // Rückmeldung bei Datenlisten-Zugriff
|
|
Error : "UErrStartSync"
|
|
BT_ausgewertet : Bool // BT wurde schon ausgewertet
|
|
TeachPunkt : Int // Punkt zum Ein-Teachen
|
|
Refpunkt_ausgewertet : Bool // Referenzpunkt ausgewertet
|
|
Refpunkt_ok : Bool // Referenzpunkt erkannt
|
|
Teachpunkt_ausgewertet : Bool // Teachpunkt ausgewertet
|
|
Reset : Bool // Bereich + FIFO resetten
|
|
Ink_Flag : Bool // Laufflag bei Speicherung
|
|
Ref_Flag : Bool // Lauf-Flag bei Ref-Inkremente
|
|
Teach_Flag : Bool // Lauf-Flag bei Teach-Inkremente
|
|
Ende_Flag : Bool // Lauf-Flag bei Synchron-Ende (MT)
|
|
FIFO_Flag : Bool // Lauf-Flag bei FIFO-Wechsel (sonst Err)
|
|
Stop : Bool // Rein-Separator stoppen
|
|
Max_raus : Bool // Max_Wert wurde schon übertragen
|
|
InkZelle : DInt // Inkzelle: Sync-Sensor dauernd aktiv
|
|
Ref_Ink : DInt // Inkremente bei Referenzpunkt
|
|
Teach_Ink : DInt // Inkremente bei Teachpunkt
|
|
Ende_Ink : DInt // Inkremente bei Synchron-Ende (MT)
|
|
FIFO_Ink : DInt // Inkremente bei FIFO-Wechsel (sonst Err)
|
|
Daten : "UBT_Daten"
|
|
Max_Wert : DInt // Maximal erlaubter Zählwert
|
|
Lauf_Flag : Bool // Zähl-Lauf mit Flag ist aktiv
|
|
Flag_Lauf_fertig : Bool // Flag-Lauf wurde beendet
|
|
Ohne_Lauf_fertig : Bool // Ohne Flag-Lauf wurde beendet
|
|
Ink_Wert : DInt // Aktuelle Inkrementalwert
|
|
Abstands_Ink : DInt // Abstands-Inkremente nach Teachen
|
|
Sich_Ink : DInt // Übrige Inks, bevor dann gestoppt wird !
|
|
Reserve : Array[1..1] of Int
|
|
Temp:
|
|
Quelle : Any // Zeiger, wo Rein-Daten sind
|
|
Adresse0 : DInt // Für indirekte Adressierung (Offset 0)
|
|
Adresse2 : DInt // Für indirekte Adressierung (Offset 0)
|
|
Adresse4 : DInt // Für indirekte Adressierung (Offset 4)
|
|
Adresse8 : DInt // Für indirekte Adressierung (Offset 8)
|
|
Abwurf_DB : Int // Abwurf-DB für 1.Rückschaltung
|
|
HaupstranglistenDB : Int // Aktueller Hauptstranglisten-DB
|
|
Parameter : Word // Parameter
|
|
sB_BT_da : Bool // Sensor BT ist an Sychronisierstelle
|
|
ZSW2_ENC : Word
|
|
G1_ZSW : Word
|
|
G1_XIST1 : DWord
|
|
G1_XIST2 : DWord // Positionswert 2, Sensor 1
|
|
STW2_ENC : Word // Steuerwort 2, Encoder
|
|
G1_STW : Word // Steuerwort, Sensor 1
|
|
tABS_Resolution : DInt
|
|
tInk_Wert : DInt // Aktueller Zählerwert
|
|
tSpeicherung : DInt // Speicherung des aktuellen Zählerwerts (für Neustart)
|
|
tLastSingelturn_Wert : DInt // Speicherung des letzten Zählerwerts (für Neustart)
|
|
tLauf_Flag : Bool // Zähl-Lauf mit Flag ist aktiv
|
|
tFlag_Lauf_fertig : Bool // Flag-Lauf wurde beendet
|
|
tOhne_Lauf_fertig : Bool // Ohne Flag-Lauf wurde beendet
|
|
tNull_laden : Bool // Zähler mit 0000 laden
|
|
tQuit : Bool
|
|
Constant:
|
|
|
|
--- NW 1: Eingangsvariablen einlesen ---
|
|
L Sync_Nr
|
|
|
|
A B_BT_da
|
|
= sB_BT_da
|
|
|
|
|
|
--- NW 2: Parameter-Übergabe ---
|
|
L Sync_Nr
|
|
|
|
L "MW178" // Einsprung Weichen-DL
|
|
T Para.Weichen_DL_DB // vor Aufruf übergeben!
|
|
L 0
|
|
T Para.Weichen_DL_DW
|
|
|
|
|
|
--- NW 3: Gesamt: Out-Bits zum Zurücksetzen / temp ---
|
|
AN Dyn.Max_raus // Max_Wert wurde schon übertragen
|
|
O Dyn.BT_ausgewertet // BT wurde schon ausgewertet
|
|
S Antrieb_start // Kreiselantrieb starten
|
|
|
|
|
|
A ErrQuit
|
|
O Dyn.Reset // Bereich + FIFO resetten
|
|
= tQuit // Für ABS-Modul
|
|
|
|
|
|
--- NW 4: Reset ---
|
|
// Reset oder Tastendruck:
|
|
A ErrQuit
|
|
A "Hauptstrang_leer" // Keine Haupstrangdaten vorhanden -> Verklemm-Errors löschen
|
|
A Dyn.Error.TravelFIFO_belegt // Travel-FIFO bleibt belegt
|
|
S Dyn.Reset // Bereich + FIFO resetten
|
|
|
|
A "Hauptstrang_leer" // Keine Haupstrangdaten vorhanden -> Verklemm-Errors löschen
|
|
A Dyn.Error.TravelFIFO_leer // keine Daten im Travel-FIFO eingetragen (Auto-Reset!)
|
|
AN Dyn.BT_ausgewertet // BT wurde schon ausgewertet
|
|
S Dyn.Reset // Bereich + FIFO resetten
|
|
|
|
AN Dyn.Reset // Bereich + FIFO resetten
|
|
JC en02
|
|
|
|
SET
|
|
R Dyn.Reset // Bereich + FIFO resetten
|
|
R Dyn.Error.SyncPkt_DL_Err // Sync-Punkt-Datenliste fehlerhaft
|
|
R Dyn.Error.Undef_SyncPkt // undefinierter Synchronpunkt
|
|
R Dyn.Error.BLKMov // Fehler bei Block kopieren
|
|
R Dyn.Error.Sync_Sensor_aktiv // Sync-Sensor dauernd aktiv
|
|
R Dyn.Error.TravelFIFO_Err // Travel-FIFO fehlerhaft
|
|
R Dyn.Error.TravelFIFO_leer // keine Daten im Travel-FIFO eingetragen
|
|
R Dyn.Error.TravelFIFO_belegt // Travel-FIFO bleibt belegt
|
|
R Dyn.Error.Hauptstrangliste_Err // Hauptstrangliste fehlerhaft
|
|
R Dyn.Error.Hauptstrangliste_voll // Hauptstrangliste ist voll
|
|
R Dyn.Error.Inkgeber_Err // Übergabeliste fehlerhaft
|
|
R Dyn.Error.Keine_Hauptstrangliste // Keine Hauptstrangliste zum Eintragen angegeben
|
|
R Dyn.Error.Keine_TeachPktdaten // Teach-Punkt in Datenliste nicht vorhanden !
|
|
R Dyn.Error.TeachPkt_Datenliste_Err // Teachdatenliste fehlerhaft
|
|
R Dyn.Error.Kein_Parameter
|
|
R Dyn.Error.Err_Parameter
|
|
R Dyn.Error.Inkrementalgeber // Inkrementalgeberwert ohne Änderung
|
|
|
|
SET
|
|
R Dyn.BT_ausgewertet // BT wurde schon ausgewertet
|
|
R Dyn.Status.TeachModus_Aktiv // Teach-Modus ist aktiv
|
|
R Dyn.Stop // Rein-Separator stoppen
|
|
|
|
L 0
|
|
T Dyn.InkZelle // Inkzelle: Sync-Sensor dauernd aktiv
|
|
L 0
|
|
T Dyn.FIFO_Ink // Inkremente bei FIFO-Wechsel (sonst Err)
|
|
T Sich_Ink // Übrige Inks, bevor dann gestoopt wird !
|
|
|
|
L 0 // Damit statische Werte neu aus Datenbank geholt werden !
|
|
T SyncPkt.Sync_Nr // Nummer des Sync-Punktes
|
|
|
|
// Travel-FIFO zurücksetzen:
|
|
CALL FC "FifoReset" (SSDB:=SyncPkt.TravelFIFO_DB, SSDW:=SyncPkt.TravelFIFO_DW, PARA:=WORD#16#0000, RE_VAL:="MB199") // normaler FIFO
|
|
|
|
L "MB199"
|
|
T Dyn.Rueckmld.RET_VAL_TravelFIFO_Out
|
|
|
|
L 0 // Aufruf mit Fehler ?
|
|
<>I // Ja !
|
|
= Dyn.Error.TravelFIFO_Err // Error bei FIFO-Zugriff
|
|
|
|
// Hauptstrang-Daten zurücksetzen:
|
|
CALL FC "DatenResetSort" (SSDB:=SyncPkt.Hauptstrang_DL_DB, SSDW:=SyncPkt.Hauptstrang_DL_DW, RE_VAL:="MB198")
|
|
|
|
L SyncPkt.Hauptstrang_DL_DB
|
|
+ 1
|
|
T HaupstranglistenDB
|
|
|
|
CALL FC "DatenResetSort" (SSDB:=HaupstranglistenDB, SSDW:=SyncPkt.Hauptstrang_DL_DW, RE_VAL:="MB199")
|
|
|
|
L "MB198"
|
|
L "MB199"
|
|
L 0 // Aufruf mit Fehler ?
|
|
<>I // Ja !
|
|
= Dyn.Error.Hauptstrangliste_Err // Hauptstrang-DL fehlerhaft
|
|
|
|
BEU
|
|
|
|
en02: NOP 0
|
|
|
|
|
|
--- NW 5: Störungen nach Außen übergeben ---
|
|
L 0
|
|
T "MW200"
|
|
|
|
A Dyn.Error.SyncPkt_DL_Err // Sync-Punkt-Datenliste fehlerhaft
|
|
= "M200.0"
|
|
A Dyn.Error.Undef_SyncPkt // undefinierter Synchronpunkt
|
|
= "M200.1"
|
|
A Dyn.Error.BLKMov // Fehler bei Block kopieren
|
|
= "M200.2"
|
|
A Dyn.Error.Sync_Sensor_aktiv // Sync-Sensor dauernd aktiv
|
|
= "M200.3"
|
|
A Dyn.Error.TravelFIFO_Err // Travel-FIFO fehlerhaft
|
|
= "M200.4"
|
|
A Dyn.Error.TravelFIFO_leer // keine Daten im Travel-FIFO eingetragen
|
|
= "M200.5"
|
|
A Dyn.Error.TravelFIFO_belegt // Travel-FIFO bleibt belegt
|
|
= "M200.6"
|
|
A Dyn.Error.Hauptstrangliste_Err // Hauptstrangliste fehlerhaft
|
|
= "M200.7"
|
|
A Dyn.Error.Hauptstrangliste_voll // Hauptstrangliste ist voll
|
|
= "M201.0"
|
|
A Dyn.Error.Inkgeber_Err // Inkrementalgeber meldet Störung
|
|
= "M201.1"
|
|
A Dyn.Error.Keine_Hauptstrangliste // Keine Hauptstrangliste zum Eintragen angegeben
|
|
= "M201.2"
|
|
A Dyn.Error.Keine_TeachPktdaten // Teach-Punkt in Datenliste nicht vorhanden !
|
|
= "M201.3"
|
|
A Dyn.Error.TeachPkt_Datenliste_Err // Teachdatenliste fehlerhaft
|
|
= "M201.4"
|
|
A Dyn.Error.Kein_Parameter
|
|
= "M201.5"
|
|
A Dyn.Error.Err_Parameter
|
|
= "M201.6"
|
|
A Dyn.Error.Inkrementalgeber // Inkrementalgeberwert ohne Änderung
|
|
= "M201.7"
|
|
|
|
L "MW200"
|
|
T Error // Schnittstelle nach Außen
|
|
|
|
// Anzeige Start n. Störung aktivieren:
|
|
A "Hauptstrang_leer" // Keine Haupstrangdaten vorhanden -> Verklemm-Errors löschen
|
|
A(
|
|
O Dyn.Error.TravelFIFO_leer // keine Daten im Travel-FIFO eingetragen
|
|
O Dyn.Error.TravelFIFO_belegt // Travel-FIFO bleibt belegt
|
|
)
|
|
O Dyn.Error.Sync_Sensor_aktiv // Sync-Sensor dauernd aktiv
|
|
O Dyn.Error.Inkrementalgeber // Inkrementalgeberwert ohne Änderung
|
|
S hStOk
|
|
|
|
|
|
--- NW 6: Statische Sync-Parameter holen ---
|
|
L SyncPkt.Sync_Nr // Nummer des Synchron-Puntes
|
|
L Sync_Nr // Aufruf-Parameter
|
|
==I // Identisch ?
|
|
R Dyn.Error.SyncPkt_DL_Err // Sync-Punkt-Datenliste fehlerhaft
|
|
R Dyn.Error.Undef_SyncPkt // undefinierter Synchronpunkt
|
|
JC en03 // Ja !
|
|
|
|
T "MW200" // Search-Daten
|
|
|
|
CALL FC "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_Out // Rückmeldung bei Datenbank-Zugriff (Gefälle-DL)
|
|
|
|
JBI G_Ok
|
|
|
|
A "M199.0"
|
|
= Dyn.Error.SyncPkt_DL_Err // Sync-Punkt-Datenliste fehlerhaft
|
|
BEC
|
|
|
|
SET
|
|
S Dyn.Error.Undef_SyncPkt // undefinierter Synchronpunkt
|
|
|
|
BEU
|
|
|
|
// Kennung + Datenbytes
|
|
G_Ok: SET
|
|
R Dyn.Error.SyncPkt_DL_Err // Sync-Punkt-Datenliste fehlerhaft
|
|
R Dyn.Error.Undef_SyncPkt // undefinierter Synchronpunkt
|
|
|
|
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 SYS "BLKMOV" (SRCBLK:=Quelle, RET_VAL:=Dyn.Rueckmld.RET_VAL_BLKMOV_Sync, DSTBLK:=SyncPkt) // Datenliste-Daten speichern | #Ziel
|
|
|
|
L Dyn.Rueckmld.RET_VAL_BLKMOV_Sync // Rückmeldung
|
|
L 0 // Fehler vorhanden ?
|
|
<>I // Ja !
|
|
= Dyn.Error.BLKMov // Error bei Block kopieren
|
|
BEC
|
|
|
|
L SyncPkt.Sync_Typ // Synchron-Punkt-Typ = 177 (StartSync)
|
|
L 177 // Dieser Aufruf-FB ?
|
|
==I // Ja !
|
|
JC en03
|
|
|
|
SET
|
|
S Dyn.Error.Undef_SyncPkt // undefinierter Synchronpunkt
|
|
|
|
L 0 // Synchronpunkt ungültig !
|
|
T SyncPkt.Sync_Nr // Nummer des Synchron-Puntes
|
|
|
|
BEU
|
|
|
|
en03: NOP 0
|
|
|
|
|
|
--- NW 7: Störungen quittieren ---
|
|
AN ErrQuit
|
|
JC en05
|
|
|
|
SET
|
|
R Dyn.Error.Keine_TeachPktdaten // Teach-Punkt in Datenliste nicht vorhanden !
|
|
R Dyn.Error.Hauptstrangliste_voll // Hauptstrangliste ist voll
|
|
R Dyn.Error.Keine_Hauptstrangliste // Keine Hauptstrangliste zum Eintragen angegeben
|
|
R Dyn.Error.TravelFIFO_leer // keine Daten im Travel-FIFO eingetragen
|
|
R Dyn.Error.Inkrementalgeber // Inkrementalgeberwert ohne Änderung
|
|
|
|
// Kann nur über Reset zurückgesetzt werden:
|
|
// R #Dyn.Error.SyncPkt_DL_Err //Sync-Punkt-Datenliste fehlerhaft
|
|
// R #Dyn.Error.Undef_SyncPkt //undefinierter Synchronpunkt
|
|
// R #Dyn.Error.BLKMov //Fehler bei Block kopieren
|
|
// R #Dyn.Error.Sync_Sensor_aktiv //Sync-Sensor dauernd aktiv
|
|
// R #Dyn.Error.TravelFIFO //Travel-FIFO fehlerhaft
|
|
// R #Dyn.Error.TravelFIFO_belegt //Travel-FIFO bleibt belegt
|
|
// R #Dyn.Error.Hauptstrangliste_Err //Hauptstrangliste fehlerhaft
|
|
// R #Dyn.Error.Uebergabeliste_Err //Übergabeliste fehlerhaft
|
|
// R #Dyn.Error.TeachPkt_Datenliste_Err //Teachdatenliste fehlerhaft
|
|
// R #Dyn.Error.Keine_TeachPktdaten //Keine Teachdaten in Datenliste vorhanden !
|
|
// R #Dyn.Error.Err16
|
|
|
|
// werden weiter unten quittiert:
|
|
// R #Dyn.Error.Sync_Sensor_aktiv //Sync-Sensor dauernd aktiv
|
|
|
|
en05: NOP 0
|
|
|
|
|
|
--- NW 8: Auswahl der Wegerfassung ---
|
|
L SyncPkt.Ink_DB // Zähler-DB
|
|
L 0 // Sinnvolle Angabe ?
|
|
<=I // Nein !
|
|
S Dyn.Error.Kein_Parameter // Kein Parameter zur Wegerfassung definiert
|
|
JC OK
|
|
|
|
A SyncPkt.Parameter.InkSim // Inkrementalgeber simulieren
|
|
JC ISim
|
|
|
|
A SyncPkt.Parameter.ET200 // Inkremental-Geber mit Zähler-Baugruppe (ET200)
|
|
JC ET20
|
|
|
|
A SyncPkt.Parameter.Sick_ABS_single
|
|
JC ABS // Inkremental-Geber mit Zähler-Baugruppe (FM350/FM450)
|
|
|
|
JU OK
|
|
|
|
|
|
--- NW 9: Inkremental-Geber über 10ms-Takte simulieren und Antrieb aktiv ---
|
|
ISim: L SyncPkt.Ink_DB
|
|
T "MW200"
|
|
OPN DB["MW200"] // Zähler-DB öffnen
|
|
|
|
SET
|
|
R DBX74.1 // Überlauf
|
|
R DBX74.4 // Flag-Lauf wurde beendet
|
|
R DBX74.5 // Ohne Flag-Lauf wurde beendet
|
|
|
|
AN Antrieb_aktiv // Antrieb ist aktiv
|
|
JC chk // weitere Kontrollen
|
|
|
|
L "MW4" // Anzahl der 10ms-Takte (letzter Zyklus)
|
|
ITD
|
|
L DBD80
|
|
+D // 10ms-Takte dazuaddieren
|
|
T DBD80
|
|
|
|
JU chk // weitere Kontrollen
|
|
|
|
// Zähler auf 000 setzen ?:
|
|
chk: AN DBX74.6 // Zähler Zero-Load
|
|
JC new
|
|
|
|
SET
|
|
R DBX74.6
|
|
|
|
L 0
|
|
T DBD70 // Zählerwert zum Setzen
|
|
|
|
JU load
|
|
|
|
// Zähler neu setzen ?:
|
|
new: A DBX74.0 // Zähler Neustart
|
|
R DBX74.0
|
|
JC load
|
|
|
|
// Zähler-Überlauf ?:
|
|
L DBD80 // Aktueller Zählerwert
|
|
A DBX75.0 // Speicherung einfrieren
|
|
JC nos
|
|
|
|
T DBD70 // Speicherung
|
|
|
|
nos: L DBD76 // Max. Wert erreicht ?
|
|
<=D // Nein !
|
|
JC OK
|
|
|
|
-D // Restwert als Startwert nehmen !
|
|
T DBD70 // Zählerwert zum Setzen
|
|
|
|
AN DBX74.3 // Umschaltung Zähl-Lauf ohne-mit-ohne Flag
|
|
= DBX74.5 // Ohne Flag-Lauf wurde beendet
|
|
A DBX74.3 // Umschaltung Zähl-Lauf ohne-mit-ohne Flag
|
|
= DBX74.4 // Flag-Lauf wurde beendet
|
|
|
|
AN DBX74.3 // Umschaltung Zähl-Lauf ohne-mit-ohne Flag
|
|
= DBX74.3
|
|
|
|
SET
|
|
S DBX74.1 // Überlauf
|
|
|
|
load: L SyncPkt.Ink_DB
|
|
T "MW200"
|
|
OPN DB["MW200"] // Zähler-DB öffnen
|
|
|
|
L DBD70 // Zählerwert zum Setzen
|
|
T DBD80
|
|
|
|
JU OK
|
|
|
|
|
|
--- NW 10: Inkremental-Geber mit Zähler-Baugruppe (ET200) ---
|
|
ET20: L SyncPkt.Ink_DB
|
|
T "MW200"
|
|
OPN DB["MW200"] // Zähler-DB öffnen
|
|
|
|
L SyncPkt.Ink_HW_Adress // Hardware-Adresse der ET200-Zählerbaugruppe
|
|
L 0 // Adresse sinnvoll ? (also ohne Zählerbaugruppe !)
|
|
<=I // Nein !
|
|
S Dyn.Error.Err_Parameter // Parameter für ET200 fehlerhaft
|
|
JC OK
|
|
|
|
// Zählerwert einlesen:
|
|
L SyncPkt.Ink_HW_Adress // Hardware-Adresse der ET200-Zählerbaugruppe
|
|
SLW 3 // Pointer erzeugen
|
|
T Adresse0
|
|
L PeripheryInputD [Adresse0]
|
|
T DBD80
|
|
|
|
L SyncPkt.Ink_HW_Adress // Hardware-Adresse der ET200-Zählerbaugruppe
|
|
+ 4 // Offset 4 DWs
|
|
SLW 3 // Pointer erzeugen
|
|
T Adresse4
|
|
L PeripheryInputD [Adresse4]
|
|
T DBD4
|
|
|
|
L SyncPkt.Ink_HW_Adress // Hardware-Adresse der ET200-Zählerbaugruppe
|
|
+ 8
|
|
SLW 3 // Pointer erzeugen
|
|
T Adresse8
|
|
L PeripheryInputD [Adresse8]
|
|
T DBD8 // eigentlich doppelt
|
|
|
|
L DBD80 // Aktueller Zählerwert
|
|
L DBD70 // Speicherung (Zählerwert letzter Zyklus)
|
|
<>D // ist verändert !
|
|
JC Ok_I
|
|
|
|
AN Antrieb_aktiv // Antrieb ist aktiv
|
|
O ErrQuit // Ablaufstörung quittieren
|
|
JC X_I
|
|
|
|
L SAVE.Ink_ohne_Zeit // Zeit Inkremntalgeberwert ohne Änderung [10ms]
|
|
L "MW4" // Anzahl der 10ms-Takte (letzter Zyklus)
|
|
+I // aufaddieren
|
|
T SAVE.Ink_ohne_Zeit // Zeit Inkremntalgeberwert ohne Änderung [10ms]
|
|
|
|
L 50 // 500ms ohne Änderung ?
|
|
>=I // Ja !
|
|
S Dyn.Error.Inkrementalgeber // Inkrementalgeberwert ohne Änderung
|
|
|
|
JU X_I
|
|
|
|
Ok_I: L 0
|
|
T SAVE.Ink_ohne_Zeit // Zeit Inkremntalgeberwert ohne Änderung [10ms]
|
|
|
|
// Software-Gate öffnen:
|
|
X_I: SET
|
|
S DBX16.0 // SW-Gate öffnen
|
|
|
|
// Zähler setzen läuft:
|
|
A DBX74.2 // Zähler setzen
|
|
O DBX74.7 // Zähler laden ist aktiv
|
|
R DBX74.5 // Ohne Flag-Lauf wurde beendet
|
|
R DBX74.4 // Flag-Lauf wurde beendet
|
|
JC LOAD_Mig
|
|
|
|
// Zähler auf 000 setzen ?:
|
|
L 0
|
|
T DBD12 // Zählerwert zum Setzen
|
|
|
|
A DBX74.6 // Zähler Zero-Load
|
|
S DBX74.2 // Zähler setzen
|
|
JC LOAD_Mig
|
|
|
|
// Zähler neu setzen ?:
|
|
L DBD70 // Speicherung
|
|
T DBD12 // Zählerwert zum Setzen
|
|
|
|
A DBX74.0 // Zähler Neustart
|
|
S DBX74.2 // Zähler setzen
|
|
JC LOAD_Mig
|
|
|
|
// Zähler-Überlauf ?:
|
|
L DBD80 // Aktueller Zählerwert
|
|
L DBD76 // Max. Wert erreicht ?
|
|
<=D // Nein !
|
|
JC Ok_Mig
|
|
|
|
-D // Restwert als Startwert nehmen !
|
|
T DBD12 // Zählerwert zum Setzen
|
|
|
|
AN DBX74.3 // Umschaltung Zähl-Lauf ohne-mit-ohne Flag
|
|
= DBX74.5 // Ohne Flag-Lauf wurde beendet
|
|
A DBX74.3 // Umschaltung Zähl-Lauf ohne-mit-ohne Flag
|
|
= DBX74.4 // Flag-Lauf wurde beendet
|
|
|
|
AN DBX74.3 // Umschaltung Zähl-Lauf ohne-mit-ohne Flag
|
|
= DBX74.3
|
|
|
|
SET
|
|
S DBX74.1 // Überlauf
|
|
S DBX74.2 // Zähler setzen
|
|
|
|
LOAD_Mig: A DBX74.2 // Zähler setzen
|
|
= DBX17.0 // Load_Val
|
|
JCN Ok_Mig
|
|
|
|
// Daten an Zähler senden:
|
|
L DBD12
|
|
T PeripheryOutputD [Adresse0]
|
|
|
|
Ok_Mig: L DBW16
|
|
T PeripheryOutputW [Adresse4]
|
|
|
|
// Zählerstatus einlesen:
|
|
L SyncPkt.Ink_HW_Adress // Hardware-Adresse der ET200-Zählerbaugruppe
|
|
+ 4 // Offset 4 DWs
|
|
SLW 3 // Pointer erzeugen
|
|
T Adresse4
|
|
L PeripheryInputD [Adresse4]
|
|
T DBD4
|
|
|
|
L SyncPkt.Ink_DB
|
|
T "MW200"
|
|
OPN DB["MW200"] // Zähler-DB öffnen
|
|
|
|
A DBX74.2 // Zähler setzen
|
|
A DBX4.0 // Zähler wird geladen (Modul-Rückmeldung)
|
|
S DBX74.7 // Zähler laden ist aktiv
|
|
R DBX74.2 // Zähler setzen
|
|
|
|
A DBX74.7 // Zähler laden ist aktiv
|
|
AN DBX4.0 // Zähler wird geladen (Modul-Rückmeldung)
|
|
R DBX74.7 // Zähler laden ist aktiv
|
|
R DBX74.6 // Zähler Zero-Load
|
|
R DBX74.0 // Zähler Neustart
|
|
R DBX74.1 // Überlauf
|
|
|
|
A DBX74.2 // Zähler setzen
|
|
O DBX74.7 // Zähler laden ist aktiv
|
|
O DBX4.0 // Zähler wird geladen (Modul-Rückmeldung)
|
|
JC Fake
|
|
|
|
L DBD80 // Aktueller Zählerwert
|
|
L 0 // Sinnvoller Wert ?
|
|
<=D // Nein !
|
|
O DBX75.0 // Speicherung einfrieren
|
|
JC OK
|
|
|
|
L DBD80 // Aktueller Zählerwert
|
|
T DBD70 // Speicherung
|
|
|
|
JU OK
|
|
|
|
Fake: L SyncPkt.Ink_DB
|
|
T "MW200"
|
|
OPN DB["MW200"] // Zähler-DB öffnen
|
|
|
|
L DBD12 // Während Neusetzen Loadwert übergeben
|
|
T DBD80
|
|
|
|
JU OK
|
|
|
|
|
|
--- NW 11: Inkremental-Geber mit Zähler-Baugruppe (ABS single) ---
|
|
ABS: L SyncPkt.Ink_DB
|
|
T "MW200"
|
|
OPN DB["MW200"] // Zähler-DB öffnen
|
|
|
|
L SyncPkt.Ink_HW_Adress // Hardware-Adresse der ET200-Zählerbaugruppe
|
|
L 0 // Adresse sinnvoll ? (also ohne Zählerbaugruppe !)
|
|
<=I // Nein !
|
|
S Dyn.Error.Err_Parameter // Parameter für ET200 fehlerhaft
|
|
JC OK
|
|
|
|
// Zählerwert einlesen:
|
|
L SyncPkt.Ink_HW_Adress // Hardware-Adresse der ET200-Zählerbaugruppe
|
|
SLW 3 // Pointer erzeugen
|
|
T Adresse0
|
|
|
|
L IW [Adresse0]
|
|
T DBW0
|
|
T ZSW2_ENC
|
|
|
|
L SyncPkt.Ink_HW_Adress // Hardware-Adresse der ET200-Zählerbaugruppe
|
|
+ 2 // Offset 2 DWs
|
|
SLW 3 // Pointer erzeugen
|
|
T Adresse2
|
|
L IW [Adresse2]
|
|
T DBW0
|
|
T G1_ZSW
|
|
|
|
L SyncPkt.Ink_HW_Adress // Hardware-Adresse der Zählerbaugruppe
|
|
+ 4 // Offset 4 DWs
|
|
SLW 3 // Pointer erzeugen
|
|
T Adresse4
|
|
|
|
L ID [Adresse4]
|
|
T DBD4
|
|
T G1_XIST1
|
|
|
|
L SyncPkt.Ink_HW_Adress // Hardware-Adresse der Zählerbaugruppe
|
|
+ 8
|
|
SLW 3 // Pointer erzeugen
|
|
T Adresse8
|
|
L ID [Adresse8]
|
|
T DBD8
|
|
T G1_XIST2
|
|
|
|
// Gespeicherte Werte einlesen:
|
|
L DBD80
|
|
T tInk_Wert
|
|
|
|
L DBD70
|
|
T tSpeicherung
|
|
|
|
L DBD16
|
|
T tLastSingelturn_Wert
|
|
|
|
L DBD20
|
|
T tABS_Resolution
|
|
|
|
A DBX74.3
|
|
= tLauf_Flag
|
|
A DBX74.4
|
|
= tFlag_Lauf_fertig
|
|
A DBX74.5
|
|
= tOhne_Lauf_fertig
|
|
A DBX74.6
|
|
= tNull_laden
|
|
|
|
CALL FC "Sick_ABS_single" (ZSW2_ENC:=ZSW2_ENC, G1_ZSW:=G1_ZSW, G1_XIST1:=G1_XIST1, G1_XIST2:=G1_XIST2, Resolution:=tABS_Resolution, MaxValue:=Max_Wert, Error_Quit:=tQuit, STW2_ENC:=STW2_ENC, G1_STW:=G1_STW, Inkgeber_Err:=Dyn.Error.Inkgeber_Err, Ink_Wert:=tInk_Wert, Last_Singelturn_Wert:=tLastSingelturn_Wert, Lauf_Flag:=tLauf_Flag, Flag_Lauf_fertig:=tFlag_Lauf_fertig, Ohne_Lauf_fertig:=tOhne_Lauf_fertig, Null_laden:=tNull_laden)
|
|
|
|
// Steuerwerte übergeben:
|
|
L SyncPkt.Ink_DB
|
|
T "MW200"
|
|
OPN DB["MW200"] // Zähler-DB öffnen
|
|
|
|
L STW2_ENC
|
|
T PeripheryOutputW [Adresse0]
|
|
T DBW12
|
|
|
|
L G1_STW
|
|
T PeripheryOutputW [Adresse2]
|
|
T DBW14
|
|
|
|
// Werte speichern:
|
|
L tInk_Wert
|
|
T DBD80
|
|
T DBD70
|
|
|
|
L tLastSingelturn_Wert
|
|
T DBD16
|
|
|
|
A tLauf_Flag
|
|
= DBX74.3
|
|
A tFlag_Lauf_fertig
|
|
= DBX74.4
|
|
A tOhne_Lauf_fertig
|
|
= DBX74.5
|
|
A tNull_laden
|
|
= DBX74.6
|
|
|
|
// Ändert sich der Inkwert ?:
|
|
L DBD80 // Aktueller Zählerwert
|
|
L tSpeicherung // Speicherung (Zählerwert letzter Zyklus)
|
|
<>D // ist verändert !
|
|
JC ok_I_Mig
|
|
|
|
AN Antrieb_aktiv // Antrieb ist aktiv
|
|
O ErrQuit // Ablaufstörung quittieren
|
|
JC OK
|
|
|
|
L SAVE.Ink_ohne_Zeit // Zeit Inkremntalgeberwert ohne Änderung [10ms]
|
|
L "MW4" // Anzahl der 10ms-Takte (letzter Zyklus)
|
|
+I // aufaddieren
|
|
T SAVE.Ink_ohne_Zeit // Zeit Inkremntalgeberwert ohne Änderung [10ms]
|
|
|
|
L 50 // 500ms ohne Änderung ?
|
|
>=I // Ja !
|
|
S Dyn.Error.Inkrementalgeber // Inkrementalgeberwert ohne Änderung
|
|
|
|
JU OK
|
|
|
|
ok_I_Mig: L 0
|
|
T SAVE.Ink_ohne_Zeit // Zeit Inkremntalgeberwert ohne Änderung [10ms]
|
|
|
|
|
|
--- NW 12: Inkwerte holen ---
|
|
// Daten des Inktremental-Gebers übergeben:
|
|
OK: L SyncPkt.Ink_DB
|
|
T "MW200"
|
|
OPN DB["MW200"] // Zähler-DB öffnen
|
|
L DBD80
|
|
T Ink_Wert
|
|
L DBD76
|
|
T Max_Wert
|
|
A DBX74.3
|
|
= Lauf_Flag
|
|
A DBX74.4
|
|
= Flag_Lauf_fertig
|
|
A DBX74.5
|
|
= Ohne_Lauf_fertig
|
|
|
|
|
|
--- NW 13: Zusatz-DWs an Travel-FIFO übergeben ---
|
|
L SyncPkt.TravelFIFO_DB // Travel-FIFO: DB-Nr.
|
|
L 0 // sinnvolle Angabe ?
|
|
<=I // Nein !
|
|
O(
|
|
L SyncPkt.TravelFIFO_DW // Einfahr-FIFO: DW-Nr.
|
|
L 0 // Sinnvolle Angabe ?
|
|
<I // Nein !
|
|
)
|
|
JC en13
|
|
|
|
L 16#0224 // 2-4.Zusatz-DWs schreiben
|
|
T Parameter
|
|
|
|
// Inkwerte übergeben:
|
|
L Ink_Wert
|
|
T "MD242" // Inkwert
|
|
|
|
L 0
|
|
T "MW246"
|
|
A Lauf_Flag
|
|
= "M246.3" // Flag-Info
|
|
A Flag_Lauf_fertig
|
|
= "M246.4" // Fertig-Info
|
|
A Ohne_Lauf_fertig
|
|
= "M246.5" // Fertig-Info
|
|
|
|
A "10s-Impuls"
|
|
= "M247.7" // Übergabe MaxWert aktiv
|
|
S Dyn.Max_raus // Max_Wert wurde schon übertragen
|
|
JCN w041
|
|
|
|
L Max_Wert
|
|
T "MD242" // MaxWert übergeben
|
|
|
|
w041: CALL FC "FifoIn" (SSDB:=SyncPkt.TravelFIFO_DB, SSDW:=SyncPkt.TravelFIFO_DW, PARA:=Parameter, INDATEN:=P#M200.0, RE_VAL:="MB199") // Zusatz-DWs schreiben (s.o.)
|
|
|
|
L "MB199"
|
|
T Dyn.Rueckmld.RET_VAL_TravelFIFO_In
|
|
T Dyn.Rueckmld.RET_VAL_TravelFIFO_In
|
|
|
|
JBI en13
|
|
|
|
SET
|
|
S Dyn.Error.TravelFIFO_Err // Travel-FIFO fehlerhaft
|
|
|
|
en13: NOP 0
|
|
|
|
|
|
--- NW 14: Kein Sync-Sensor vorhanden ---
|
|
AN SyncPkt.Parameter.Kein_Sync_B // Kein Sync-Sensor eingebaut (Daten-Sync)
|
|
JC En04 // Also Sensor verbaut !
|
|
|
|
CALL FC "FifoOut" (SSDB:=SyncPkt.TravelFIFO_DB, SSDW:=SyncPkt.TravelFIFO_DW, PARA:=WORD#16#0000, OUTDATEN:=P#M220.0, RE_VAL:="MB199") // Daten lesen
|
|
|
|
L "MB199"
|
|
T Dyn.Rueckmld.RET_VAL_TravelFIFO_Out
|
|
L 0 // Aufruf mit Fehler ? (Bit2 = FIFO ist leer auch nicht!)
|
|
==I // Nein !
|
|
A Antrieb_aktiv
|
|
= sB_BT_da // Sensor BT ist an Sychronisierstelle
|
|
|
|
JU En06 // Überwachungen überspringen
|
|
|
|
En04: NOP 0
|
|
|
|
|
|
--- NW 15: BT ist wieder weg ---
|
|
AN Dyn.BT_ausgewertet // BT wurde schon ausgewertet
|
|
JC en04_Mig
|
|
|
|
L Dyn.Ende_Ink // Inkremente bei Synchron-Ende (MT)
|
|
L 0 // angegeben ?
|
|
<=D // Nein !
|
|
O sB_BT_da // Sensor BT ist an Sychronisierstelle
|
|
JC Save
|
|
|
|
A Dyn.Ende_Flag // Lauf-Flag bei Synchron-Ende (MT)
|
|
A Flag_Lauf_fertig // Flag-Lauf wurde beendet
|
|
O
|
|
AN Dyn.Ende_Flag // Lauf-Flag bei Synchron-Ende (MT)
|
|
A Ohne_Lauf_fertig // Flag-Lauf wurde beendet
|
|
JC w040 // beim Ende des Lauf sind Inkremente uninteressant
|
|
|
|
A Dyn.Ende_Flag // Lauf-Flag bei Synchron-Ende (MT)
|
|
A Lauf_Flag // Zähl-Lauf mit Flag ist aktiv
|
|
O
|
|
AN Dyn.Ende_Flag // Lauf-Flag bei Synchron-Ende (MT)
|
|
AN Lauf_Flag // Zähl-Lauf mit Flag ist aktiv
|
|
JCN en04_Mig
|
|
|
|
L Ink_Wert // Aktuelle Inkrementalwert
|
|
L Dyn.Ende_Ink // Inkremente bei Synchron-Ende (MT)
|
|
<D
|
|
JC en04_Mig
|
|
|
|
w040: SET
|
|
R Dyn.BT_ausgewertet // BT wurde schon ausgewertet
|
|
R Dyn.Ende_Flag // Lauf-Flag bei Synchron-Ende (MT)
|
|
|
|
L 0
|
|
T Dyn.Ende_Ink // Inkremente bei Synchron-Ende (MT)
|
|
|
|
JU en04_Mig
|
|
|
|
// End-Punkt der Synchronisation speichern: (wegen Entprelling)
|
|
Save: L Ink_Wert // Aktueller Ink-Wert
|
|
L SyncPkt.Entprellung_B_Sync // Entprellung Snyc-Sensor (in Inkremente)
|
|
+D
|
|
T Dyn.Ende_Ink // Inkremente bei Synchron-Ende (MT)
|
|
A Lauf_Flag
|
|
= Dyn.Ende_Flag // Lauf-Flag bei Synchron-Ende (MT)
|
|
L Max_Wert // Maximal erlaubter Zählwert
|
|
>D
|
|
JCN en04_Mig
|
|
|
|
-D // Restwert übernehmen
|
|
T Dyn.Ende_Ink // Inkremente bei Synchron-Ende (MT)
|
|
|
|
AN Lauf_Flag // Zähl-Lauf mit Flag ist aktiv
|
|
= Dyn.Ende_Flag // Lauf-Flag bei Synchron-Ende (MT)
|
|
|
|
en04_Mig: NOP 0
|
|
|
|
|
|
--- NW 16: Error: Sync-Sensor dauernd aktiv ---
|
|
AN sB_BT_da // Sensor Sync ist an Sychronisierstelle
|
|
O
|
|
A Lauf_Flag // Neuspeicherung nötig
|
|
AN Dyn.Ink_Flag
|
|
O
|
|
AN Lauf_Flag // Neuspeicherung nötig
|
|
A Dyn.Ink_Flag
|
|
O ErrQuit // Störung quittieren
|
|
O Dyn.Reset // Bereich resetten
|
|
JC W030
|
|
|
|
A Dyn.Error.Sync_Sensor_aktiv // Sync-Sensor dauernd aktiv
|
|
JC En03_Mig
|
|
|
|
L Dyn.InkZelle // Speicherung Sensor frei
|
|
L 0 // Speicherung vorhanden ?
|
|
==D // Nein !
|
|
JC En03_Mig
|
|
|
|
L Ink_Wert // Aktueller Ink-Wert
|
|
L Dyn.InkZelle // Speicherung Sensor frei
|
|
-D // Differenz bilden
|
|
L 10 // davon 10%
|
|
/D
|
|
L SyncPkt.Entprellung_B_Sync // Falls also 10mal Entprellwert, dann
|
|
>=D
|
|
S Dyn.Error.Sync_Sensor_aktiv // Sync-Sensor dauernd aktiv
|
|
|
|
JU En03_Mig
|
|
|
|
W030: L Ink_Wert // Aktueller Ink-Wert
|
|
T Dyn.InkZelle // Speicherung Sensor frei
|
|
A Lauf_Flag
|
|
= Dyn.Ink_Flag // Speicherung Laufflag
|
|
SET
|
|
R Dyn.Error.Sync_Sensor_aktiv // Sync-Sensor dauernd aktiv
|
|
|
|
En03_Mig: NOP 0
|
|
|
|
|
|
--- NW 17: Error: Travel-FIFO bleibt voll ---
|
|
L Dyn.FIFO_Ink // Inkremente bei FIFO-Wechsel (sonst Stop/Err)
|
|
L 0 // sinnvolle Angabe ?
|
|
<=D // Nein !
|
|
O Dyn.Status.TeachModus_Aktiv // Teach-Modus ist aktiv
|
|
O Dyn.Error.TravelFIFO_belegt // Travel-FIFO bleibt belegt
|
|
JC w061
|
|
|
|
A Dyn.FIFO_Flag // Flag bei FIFO-Wechsel (sonst Stop/Err)
|
|
A Flag_Lauf_fertig // Flag-Lauf wurde beendet
|
|
O
|
|
AN Dyn.FIFO_Flag // Flag bei FIFO-Wechsel (sonst Stop/Err)
|
|
A Ohne_Lauf_fertig // Flag-Lauf wurde beendet
|
|
JC w060 // beim Ende des Lauf sind Inkremente uninteressant
|
|
|
|
A Dyn.FIFO_Flag // Flag bei FIFO-Wechsel (sonst Stop/Err)
|
|
A Lauf_Flag // Zähl-Lauf mit Flag ist aktiv
|
|
O
|
|
AN Dyn.FIFO_Flag // Flag bei FIFO-Wechsel (sonst Stop/Err)
|
|
AN Lauf_Flag // Zähl-Lauf mit Flag ist aktiv
|
|
JCN En06
|
|
|
|
L Ink_Wert // Aktuelle Inkrementalwert
|
|
L Dyn.FIFO_Ink // Inkremente bei FIFO-Wechsel (sonst Stop/Err)
|
|
<D
|
|
S Antrieb_start // Kreiselantrieb starten
|
|
JC En06
|
|
|
|
w060: AN Dyn.Stop // Falls noch nicht gestoppt
|
|
S Dyn.Stop // Rein-Separator stoppen
|
|
JC w063
|
|
|
|
L SyncPkt.Abstand_StartSep // Abstand Start-Separator <-> Sync-Sensor (in Inkremente)
|
|
L 0 // sinnvoller Wert ?
|
|
>D // Nein !
|
|
S Dyn.Error.TravelFIFO_belegt // Travel-FIFO bleibt belegt
|
|
|
|
w061: L 0
|
|
T Dyn.FIFO_Ink // Inkremente bei FIFO-Wechsel (sonst Err)
|
|
SET
|
|
R Dyn.FIFO_Flag // Flag bei FIFO-Wechsel (sonst Err)
|
|
|
|
// Kontrolle, ob Daten im Travel-FIFO vorhanden:
|
|
CALL FC "FifoOut" (SSDB:=SyncPkt.TravelFIFO_DB, SSDW:=SyncPkt.TravelFIFO_DW, PARA:=WORD#16#0000, OUTDATEN:=P#M220.0, RE_VAL:="MB199") // Daten lesen
|
|
|
|
L "MB199"
|
|
L 0 // Aufruf mit Fehler ?
|
|
==I // Nein !
|
|
R Dyn.Error.TravelFIFO_Err // Travel-FIFO fehlerhaft
|
|
JC w062
|
|
|
|
A "M199.2" // FIFO ist leer
|
|
R Dyn.Error.TravelFIFO_Err // Travel-FIFO fehlerhaft
|
|
R Dyn.Stop // Rein-Separator stoppen
|
|
R Dyn.Error.TravelFIFO_belegt // Travel-FIFO bleibt belegt
|
|
JC En06
|
|
|
|
SET
|
|
S Dyn.Error.TravelFIFO_Err // Travel-FIFO fehlerhaft
|
|
|
|
JU En06
|
|
|
|
// Inkremente speichern, bei denen spätestens FIFO-Zugriff erfolgen muss (sonst Stop)!
|
|
w062: L SyncPkt.Abstand_StartSep // Abstand Start-Separator <-> Sync-Sensor (in Inkremente)
|
|
L 0 // sinnvoller Wert ?
|
|
<=D // Nein !
|
|
JC En06
|
|
|
|
CAC
|
|
// / L MD 220 //Ink-Wert des nächsten BTs beim Vereinzeln
|
|
L Ink_Wert // Aktueller Ink-Wert
|
|
+D
|
|
T Dyn.FIFO_Ink // Inkremente bei FIFO-Wechsel (sonst Stop)
|
|
// / U M 224.0 //Lauf-Flag des nächsten BTs beim Vereinzeln
|
|
A Lauf_Flag
|
|
= Dyn.FIFO_Flag // Lauf-Flag bei FIFO-Wechsel (sonst Stop)
|
|
L Max_Wert // Maximal erlaubter Zählwert
|
|
>D
|
|
JCN En06
|
|
|
|
-D // Restwert übernehmen
|
|
T Dyn.FIFO_Ink // Inkremente bei FIFO-Wechsel (sonst Stop)
|
|
|
|
AN "M224.0" // Lauf-Flag des nächsten BTs beim Vereinzeln (unvertieren)
|
|
= Dyn.FIFO_Flag // Lauf-Flag bei FIFO-Wechsel (sonst Stop)
|
|
|
|
JU En06
|
|
|
|
// Inkremente speichern, bei denen spätestens FIFO leer (sonst Err)
|
|
w063: L SyncPkt.Abstand_StartSep // Abstand Start-Separator <-> Sync-Sensor (in Inkremente)
|
|
L Ink_Wert // Aktueller Ink-Wert
|
|
+D
|
|
T Dyn.FIFO_Ink // Inkremente bei FIFO-Wechsel (sonst Err)
|
|
A Lauf_Flag
|
|
= Dyn.FIFO_Flag // Lauf-Flag bei FIFO-Wechsel (sonst Err)
|
|
L Max_Wert // Maximal erlaubter Zählwert
|
|
>D
|
|
JCN En06
|
|
|
|
-D // Restwert übernehmen
|
|
T Dyn.FIFO_Ink // Inkremente bei FIFO-Wechsel (sonst Err)
|
|
|
|
AN Lauf_Flag // Zähl-Lauf mit Flag ist aktiv
|
|
= Dyn.FIFO_Flag // Lauf-Flag bei FIFO-Wechsel (sonst Err)
|
|
|
|
En06: NOP 0
|
|
|
|
|
|
--- NW 18: Sync-Sensor ist aktiv ---
|
|
A sB_BT_da // BT ist an Sychronisierstelle
|
|
A Antrieb_aktiv // /bei H&M
|
|
AN Dyn.BT_ausgewertet // BT wurde schon ausgewertet
|
|
AN Dyn.Error.Sync_Sensor_aktiv // Sync-Sensor dauernd aktiv
|
|
AN Dyn.Status.TeachModus_Aktiv // Teach-Modus ist aktiv
|
|
S Dyn.BT_ausgewertet // BT wurde schon ausgewertet
|
|
JC Sync
|
|
|
|
JU Teac
|
|
|
|
|
|
--- NW 19: Daten aus Travel-FIFO holen ---
|
|
Sync: CALL FC "FifoOut" (SSDB:=SyncPkt.TravelFIFO_DB, SSDW:=SyncPkt.TravelFIFO_DW, PARA:=WORD#16#E100, OUTDATEN:=Daten, RE_VAL:="MB199") // Daten lesen + austragen
|
|
|
|
L "MB199"
|
|
T Dyn.Rueckmld.RET_VAL_TravelFIFO_Out
|
|
L 0 // Aufruf mit Fehler ?
|
|
==I // Nein !
|
|
R Dyn.Error.TravelFIFO_leer // keine Daten im Travel-FIFO eingetragen
|
|
JC X081
|
|
|
|
A "M199.2" // FIFO ist leer
|
|
S Dyn.Error.TravelFIFO_leer // keine Daten im Travel-FIFO eingetragen
|
|
JC X080
|
|
|
|
SET
|
|
S Dyn.Error.TravelFIFO_Err // Travel-FIFO fehlerhaft
|
|
|
|
X080: JU En18 // Keine Reaktion ist am Besten !
|
|
|
|
L -1 // Null-Daten übergeben
|
|
T Daten.Sort_Info.Teil_IDX
|
|
L -1 // in nächsten Bereich fahren
|
|
T Daten.Sort_Info.Teil_Ziel
|
|
|
|
JU X082
|
|
|
|
L Teil_IDX_Old // Letzte gültige Daten übergeben
|
|
T Daten.Sort_Info.Teil_IDX // nicht mehr, da nur Ärger!
|
|
L Teil_Ziel_Old
|
|
T Daten.Sort_Info.Teil_Ziel
|
|
|
|
JU X082
|
|
|
|
// IDX und Ziel speichern (für Travel-FIFO leer,...)
|
|
X081: L Daten.Sort_Info.Teil_IDX
|
|
T Teil_IDX_Old
|
|
L Daten.Sort_Info.Teil_Ziel
|
|
T Teil_Ziel_Old
|
|
|
|
// Travel-FIFO-Daten übergeben:
|
|
X082: A Dyn.Stop // Rein-Separator stoppen
|
|
JC X083
|
|
|
|
L Dyn.FIFO_Ink // Inkremente bei FIFO-Wechsel (sonst Stop)
|
|
L Ink_Wert // Aktueller Ink-Wert
|
|
-D
|
|
T Sich_Ink // Übrige Inks, bevor dann gestoppt wird !
|
|
|
|
X083: L 0
|
|
T Dyn.FIFO_Ink // Inkremente bei FIFO-Wechsel (sonst Stop)
|
|
|
|
A SyncPkt.Parameter.Kein_Sync_B
|
|
R Dyn.BT_ausgewertet // BT wurde schon ausgewertet
|
|
|
|
|
|
--- NW 20: Daten für Haupstrangdaten aufbereiten ---
|
|
// Sync-Info:
|
|
L Ink_Wert // Aktuelle Inkrementalwert (Start-Sync-Zähler)
|
|
T Daten.Start_Ink
|
|
|
|
A Lauf_Flag // Start-Flag übergeben (für evtl. Fahrsync)
|
|
= Daten.Start_Flag
|
|
|
|
// Sort-Info werden von Travel-FIFO übernommen
|
|
|
|
// Quell_Info:
|
|
L SyncPkt.Sync_Nr // Identifikation des Synchron-Punktes
|
|
T Daten.Quelle
|
|
T Daten.letzte_Position
|
|
|
|
|
|
--- NW 21: Daten in Haupstrangdaten eintragen ---
|
|
L SyncPkt.Hauptstrang_DL_DB // Hauptstrang-DB
|
|
T HaupstranglistenDB // Aktueller Hauptstrang-DB
|
|
L 0 // angegeben ?
|
|
==I // Nein !
|
|
S Dyn.Error.Keine_Hauptstrangliste // Keine Hauptstrangliste zum Eintragen angegeben
|
|
JC En18
|
|
|
|
AN Lauf_Flag // Start-Flag
|
|
JC w180
|
|
|
|
L SyncPkt.Hauptstrang_DL_DB // Hauptstrang-DB
|
|
+ 1 // DB+1 bei Flaglauf !
|
|
T HaupstranglistenDB // Aktueller Hauptstrang-DB
|
|
|
|
w180: CALL FC "DatenInSort" (SSDB:=HaupstranglistenDB, SSDW:=SyncPkt.Hauptstrang_DL_DW, INDATEN:=Daten, RE_VAL:="MB199") // Hauptstrangliste mit Lauf-Flag | Aktueller Hauptstrang-DB
|
|
|
|
L "MB199"
|
|
T Dyn.Rueckmld.RET_VAL_Hauptstrang_In
|
|
|
|
A "M199.2" // Hauptstrangliste ist voll
|
|
S Dyn.Error.Hauptstrangliste_voll // Hauptstrangliste ist voll
|
|
JC En18
|
|
|
|
A "M199.7" // Eintrag richtig erfolgt
|
|
JC En18
|
|
|
|
SET
|
|
S Dyn.Error.Hauptstrangliste_Err // Error bei Hauptstrang-Zugriff
|
|
|
|
En18: NOP 0
|
|
|
|
|
|
--- NW 22: Teach-Modus aktiv ? ---
|
|
Teac: L Dyn.TeachPunkt // Punkt zum Ein-Teachen
|
|
L 0 // bekannt ?
|
|
<>I // Ja !
|
|
A Dyn.Status.TeachModus_Aktiv // Teach-Modus ist aktiv
|
|
JC en20
|
|
|
|
L 0
|
|
T Dyn.Ref_Ink // Inkremente bei Referenzpunkt
|
|
T Dyn.Teach_Ink // Inkremente bei Teachpunkt
|
|
T Abstands_Ink // Abstands-Inkremente nach Teachen
|
|
|
|
SET
|
|
R Dyn.Status.TeachModus_Aktiv // Teach-Modus ist aktiv
|
|
R Dyn.Ref_Flag // Lauf-Flag bei Ref-Inkremente
|
|
R Dyn.Teach_Flag // Lauf-Flag bei Teach-Inkremente
|
|
R Dyn.Refpunkt_ausgewertet // Referenzpunkt ausgewertet
|
|
R Dyn.Teachpunkt_ausgewertet // Teachpunkt ausgewertet
|
|
R Dyn.Refpunkt_ok // Referenzpunkt erkannt
|
|
|
|
BEU
|
|
|
|
en20: NOP 0
|
|
|
|
|
|
--- NW 23: Ref-Inkremente speichern ---
|
|
AN B_RefPunkt // Sensor RefBT am Referenzpunkt erkannt
|
|
R Dyn.Refpunkt_ausgewertet // Referenzpunkt ausgewertet
|
|
|
|
A B_RefPunkt // Sensor RefBT am Referenzpunkt erkannt
|
|
AN Dyn.Refpunkt_ausgewertet // Referenzpunkt ausgewertet
|
|
JCN en21
|
|
|
|
L Ink_Wert // Aktuelle Inkrementalwert
|
|
T Dyn.Ref_Ink // Inkremente bei Referenzpunkt
|
|
A Lauf_Flag
|
|
= Dyn.Ref_Flag // Lauf-Flag bei Ref-Inkremente
|
|
|
|
SET
|
|
S Dyn.Refpunkt_ausgewertet // Referenzpunkt ausgewertet
|
|
S Dyn.Refpunkt_ok // Referenzpunkt erkannt
|
|
|
|
L 0
|
|
T Dyn.Teach_Ink // Inkremente bei Teachpunkt
|
|
T Abstands_Ink // Abstands-Inkremente nach Teachen
|
|
SET
|
|
R Dyn.Teachpunkt_ausgewertet // Teachpunkt ausgewertet
|
|
R Dyn.Teach_Flag // Lauf-Flag bei Teach-Inkremente
|
|
|
|
en21: NOP 0
|
|
|
|
|
|
--- NW 24: Teach-Inkremente speichern ---
|
|
AN B_TeachPunk // Sensor RefHaken am Teachpunkt erkannt
|
|
A Antrieb_aktiv // Antrieb aktiv
|
|
R Dyn.Teachpunkt_ausgewertet // Teachpunkt ausgewertet
|
|
|
|
AN B_TeachPunk // Sensor RefHaken am Teachpunkt erkannt
|
|
O Dyn.Teachpunkt_ausgewertet // Teachpunkt ausgewertet
|
|
ON Dyn.Refpunkt_ok // Referenzpunkt erkannt
|
|
ON Antrieb_aktiv // Antrieb aktiv
|
|
BEC
|
|
|
|
L Ink_Wert // Aktuelle Inkrementalwert
|
|
T Dyn.Teach_Ink // Inkremente bei Teachpunkt
|
|
A Lauf_Flag
|
|
= Dyn.Teach_Flag // Lauf-Flag bei Teach-Inkremente
|
|
|
|
SET
|
|
S Dyn.Teachpunkt_ausgewertet // Teachpunkt ausgewertet
|
|
|
|
|
|
--- NW 25: Abstand ermitteln ---
|
|
AN Dyn.Ref_Flag // Lauf-Flag bei Ref-Inkremente
|
|
AN Dyn.Teach_Flag // Lauf-Flag bei Teach-Inkremente
|
|
O
|
|
A Dyn.Ref_Flag // Lauf-Flag bei Ref-Inkremente
|
|
A Dyn.Teach_Flag // Lauf-Flag bei Teach-Inkremente
|
|
JCN w230
|
|
|
|
// Inkremente im gleichem Lauf:
|
|
L Dyn.Teach_Ink // Inkremente bei Teachpunkt
|
|
L Dyn.Ref_Ink // Inkremente bei Referenzpunkt
|
|
-D
|
|
T Abstands_Ink // Abstands-Inkremente nach Teachen
|
|
|
|
JU en23
|
|
|
|
w230: L Max_Wert // Max. Wert beim Zähler
|
|
L Dyn.Ref_Ink // Inkremente bei Referenzpunkt
|
|
-D
|
|
L Dyn.Teach_Ink // Inkremente bei Teachpunkt
|
|
+D
|
|
T Abstands_Ink
|
|
|
|
en23: NOP 0
|
|
|
|
|
|
--- NW 26: Teach-Inkremente in Datenbank abspeichern ---
|
|
L Dyn.TeachPunkt // Punkt zum Ein-Teachen
|
|
T "MW200"
|
|
|
|
CALL FC "DatenOut" (SSDB:=Para.Weichen_DL_DB, SSDW:=Para.Weichen_DL_DW, PARA:=WORD#16#0000, SEARCHDATEN:=P#M200.0, RE_VAL:="MB199", OUTDATEN:=P#M200.0, Position:="MW196") // Nach angegeben Datensatz suchen
|
|
|
|
L "MB199"
|
|
T Dyn.Rueckmld.RET_VAL_Teach_OUT
|
|
|
|
A "M199.7" // Datensatz ist vorhanden
|
|
JC w240
|
|
|
|
A "M199.6" // Datensatz ist nicht vorhanden
|
|
= Dyn.Error.Keine_TeachPktdaten // Teach-Punkt in Datenliste nicht vorhanden !
|
|
R Dyn.Status.TeachModus_Aktiv // Teach-Modus ist aktiv
|
|
BEC
|
|
|
|
SET
|
|
R Dyn.Status.TeachModus_Aktiv // Teach-Modus ist aktiv
|
|
S Dyn.Error.TeachPkt_Datenliste_Err
|
|
|
|
BEU
|
|
|
|
w240: L Abstands_Ink
|
|
L Para.Offset_RefPunkt // Offset Refpunkt zu SyncPunkt (für Teachen)
|
|
+D
|
|
T "MD218"
|
|
|
|
CALL FC "DatenIn" (SSDB:=Para.Weichen_DL_DB, SSDW:=Para.Weichen_DL_DW, INDATEN:=P#M200.0, RE_VAL:="MB199")
|
|
AN Dyn.Status.MoreTeach // Nächsten Teachpunkt ohne neuen Refpunkt
|
|
R Dyn.Refpunkt_ok // Referenzpunkt erkannt
|
|
|
|
L "MB199"
|
|
T Dyn.Rueckmld.RET_VAL_Teach_IN
|
|
|
|
A "M199.7" // Datensatz ist vorhanden
|
|
JC MORE
|
|
|
|
A "M199.6" // Datensatz ist nicht vorhanden
|
|
= Dyn.Error.Keine_TeachPktdaten // Teach-Punkt in Datenliste nicht vorhanden !
|
|
R Dyn.Status.TeachModus_Aktiv // Teach-Modus ist aktiv
|
|
BEC
|
|
|
|
SET
|
|
R Dyn.Status.TeachModus_Aktiv // Teach-Modus ist aktiv
|
|
S Dyn.Error.TeachPkt_Datenliste_Err
|
|
|
|
BEU
|
|
|
|
MORE: AN Dyn.Status.MoreTeach // Nächsten Teachpunkt ohne neuen Refpunkt
|
|
BEC
|
|
|
|
CALL FC "DatenOut" (SSDB:=Para.Weichen_DL_DB, SSDW:=Para.Weichen_DL_DW, PARA:=WORD#16#FF00, SEARCHDATEN:=P#M200.0, RE_VAL:="MB199", OUTDATEN:=P#M200.0, Position:="MW196") // Nach nächsten Datensatz suchen
|
|
|
|
L "MW206" // Weichentyp
|
|
L 178 // Sorterweiche ?
|
|
<>I // Nein!
|
|
O "M199.2" // Listenende erreicht!
|
|
JC TEND
|
|
|
|
L "MW200"
|
|
T Dyn.TeachPunkt // Punkt zum Ein-Teachen
|
|
|
|
BEU
|
|
|
|
TEND: L 0
|
|
T Dyn.TeachPunkt
|
|
|
|
BEU
|
|
|
|
|
|
--- NW 27:
|
|
---
|
|
BE
|
|
|