Files
HundM_awl/=A01+UH07-KF00/Programmbausteine/Module/MStartSync.awl
T

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