User Tools

Site Tools


userpages:babbel:keypad_mvtrack

Userpages - Berthold (Babbel)

Übernahme von Lokomotiven in den Automatikbetrieb

Bei der Modellbahnsteuerung gibt es oft den Wunsch, bestimmte Anlagenteile – wie beispielsweise ein Betriebswerk – manuell zu betreiben, unabhängig von der Automatik in Rocrail. Gleichzeitig können Situationen entstehen, in denen ein bestehender, manuell gesteuerter Bereich mit einem neuen, für den Automatikbetrieb ausgelegten Abschnitt verbunden werden soll.

Die Herausforderung besteht darin, Lokomotiven, die zwar über einen Decoder gesteuert werden, jedoch bislang manuell – etwa mit einem Handregler – bedient wurden, in den automatisierten Betrieb zu übergeben.

Im Folgenden wird erläutert, wie diese Übergabe in den Automatikbetrieb erfolgen kann und welche Schritte dabei zu beachten sind. Ziel ist es, eine reibungslose Verbindung zwischen manueller und automatisierter Steuerung zu ermöglichen, ohne am PC eine Eingabe zu tätigen.

Herausforderung

Die Herausforderung bei der Übergabe liegt darin, dass beim Einfahren einer Lok in den durch Rocrail gesteuerten Bereich einige wichtige Informationen oft nicht bekannt sind:

- Lok-ID: Die genaue Identifikation der Lokomotive ist unbekannt, da auf dem Handregler meist nur die Adresse der Lok angezeigt wird.
- Fahrtrichtung: Die aktuelle Fahrtrichtung der Lokomotive ist nicht eindeutig definiert.
- Zuglänge: Die Länge des Zuges oder der Lokomotive ist nicht bekannt oder hinterlegt.

Diese Unklarheiten müssen gelöst werden, um eine zuverlässige und sichere Integration in den Automatikbetrieb zu gewährleisten.

Lösungsansatz

Der hier vorgestellte Lösungsansatz ermöglicht es, die Lok-ID anhand der Adresse zu ermitteln, die im Handregler angezeigt wird. Die Umsetzung erfolgt über ein XML-Skript, das die Lok-Adresse in Rocrail auswertet. Die Eingabe der Adresse wird durch folgende Hardware-Komponenten realisiert:

-Keypad: Die Adresse der Lok wird manuell über ein numerisches Keypad eingegeben.
-Raspberry Pico-W: Mit WIO.
-Display (SSD1306/SH1106): Ein OLED-Display zeigt die eingegebene Lok-Adresse an, sodass der Benutzer die Eingabe überprüfen und bestätigen kann.

Weitere Informationen zur Einrichtung des Keypads und der WIO-Software sind hier verfügbar: WIO Keypad & WIO ESP/Pico Erste Schritte

Die Fahrtrichtung der Lok wird über ein XML-Skript ausgewertet und entsprechend an die Automatik übergeben. Zusätzlich wird die Zuglänge durch die Verwendung der Messstrecke in Rocrail ermittelt.

Umsetzung

Die Beschreibung der Umsetzung erfolgt anhand des folgenden Plans:

Für die Implementierung werden die folgenden Elemente in Rocrail benötigt:

1. Blöcke:

  • bk_ank: Dieser Block dient der Ankündigung der Lokomotive. In diesem Block wird die Lokomotive durch Eingabe der Adresse im Keypad gesetzt.
  • bk_ueg: Der Block für die eigentliche Übergabe der Lokomotive in den Automatikbetrieb.
  • bk_out: Der Block für die Ausfahrt der Lokomotive aus dem automatisch betriebenen Bereich.

2. Textfelder:

  • tx_keypad_1: Dieses Textfeld zeigt die Eingabe und Annahme der Keypad-Eingaben an. Es dient der Übernahme der Eingabe aus dem Keypad und startet das Skript lokuebernahme.xml.
  • tx_keypad_2: Ein weiteres Textfeld wird verwendet, um das Display des Keypads zu überschreiben, sodass zusätzliche Informationen oder Bestätigungen angezeigt werden können.

3 Rückmelder:

  • fb_bk_mv1 und fb_bk_mv2: Diese Rückmelder erfassen die Lokomotive, die die Messstrecke passiert. Sie sind wichtig, um die Zuglänge zu ermitteln und diese Information in die Lokomotive zu übernehmen.

Vorgehen im Detail

Einrichten lokuebernahme.xml

Unter Aktionen das Skript lokuebernahme.xml zu hinterlegen und korrekt zu konfigurieren, müssen unter den Aktionen die relevanten Variablen definiert werden, falls diese abweichen:

<vr id="vr_uebn_ankuendigung" text="bk_ank"/> <!-- Block für die Ankündigung der Lok. -->
<vr id="vr_uebn_uebergabeblock" text="bk_ueg"/> <!-- Block für Übergabe. -->
<vr id="vr_uebn_block_out" text="bk_out"/> <!-- Block für Ausfahrt. -->
<vr id="vr_uebn_vsg_uebergabeblock" text="sg_bk_out"/> <!-- Manuelles Vorsignal des Ausfahrtblocks Blocks. -->
<vr id="vr_uebn_uebergabeblock_tx_Keypad" text="tx_keypad_1"/> <!-- Textfeld für Keypad mit Aktion. -->
<vr id="vr_uebn_uebergabeblock_tx_Keypad_out" text="tx_keypad_2"/> <!-- Textfeld 2. zum Überschreiben des Displays.-->

Achtung: Die Textfelder müssen so benannt sein, dass das Textfeld zum Überschreiben als zweites in der Plandatei erscheint. Diese Reihenfolge ist wichtig, da Rocrail für die Übertragung der Keypadeingabe nach dem ersten Textobjekt mit der auf der Registerkarte „Schnittstelle“ festgelegten NodeID sucht. Dadurch wird es möglich, das Textfeld zu überschreiben, ohne dass das XML im ersten Textfeld ausgelöst wird.

Definieren der Ausfahrtseite Um zu definieren, wie die Lok den Übernahmeblock verlässt, wird die Seite über die folgende Variable festgelegt:

<vr id="vr_uebn_uebernahmeblock_enterside" text="true"/> <!-- Ausfahrtseite definieren. -->
  • false bedeutet, dass die Lok den Block über die Plusseite verlässt.
  • true bedeutet, dass die Lok den Block über die Minusseite verlässt.

Konfiguration der Textfelder

Die Textfelder tx_keypad_1 und tx_keypad_2 werden wie folgt konfiguriert:

Schnittstelle:

Im Reiter Schnittstelle wird die Kennung des WIO und die Knoten-ID des WIO mit Anzeige 1 eingetragen.

In Textfeld tx_keypad_1 zusätzlich:

Die Aktion zum Starten des Skripts lokuebernahme.xml hinterlegen. Wichtig: Im Feld Status darf nichts eingetragen werden, da sonst bei eintreffen des Wertes aus dem Keypad die Aktion nicht ausgelöst wird.

Vorbereiten der Übergabe in Block bk_ueg

Um die Übergabe der Lokomotive in den Automatikbetrieb im Block bk_ueg vorzubereiten, müssen zwei Aktionen mit den Skripten

`lok_auf_auto_go.xml` und `bk_uebergabe_free.xml` angelegt werden.

In beiden Skripten muss gegebenenfalls die Variable für das Textfeld des Displays angepasst werden.

<vr id="vr_lok_auf_auto_zielblock_tx_Keypad_out" text="tx_keypad_2"/> <!-- Textfeld 2. zum überschreiben des Displays.-->
<vr id="vr_bk_ueg_free_tx" text="tx_keypad_2"/> <!-- Textfeld 2. zum überschreiben des Displays.-->

Integration der Skripte im Block bk_ueg

Die Skripte müssen nun in den Aktionen von Block `bk_ueg` hinterlegt werden.

Das Skript lok_auf_auto_go.xml wird bei `in` und das Skript bk_uebergabe_free.xml bei `free` angelegt.

Die Aktionen für den Block bk_ueg werden wie folgt konfiguriert:


Einstellungen im Reiter "Einzelheiten"
Zusätzlich muss im Block bk_ueg im Reiter "Einzelheiten" unter "Warten" der Typ "Stopp" aktiviert werden. Diese Einstellung sorgt dafür, die Lok stopp bevor sie, durch das lok_auf_auto_go.xml in den Automatikbetrieb übergeht.

Hinweis zur loc_laengen_simulation.xml
Die Datei lok_laengen_simulation.xml wird in diesem Zusammenhang nicht benötigt, da sie lediglich der Simulation im Beispielplan dient und keine direkte Funktion im Übergabeprozess hat.

Vorbereiten der Ausfahrt in Block bk_out

Für die Ausfahrt aus dem automatisch gesteuerten Bereich sind folgende Schritte notwendig:

Eine Aktion für das Skript bk_out_in.xml in den Aktionen anlegen. Die Aktion in den Block-Aktionen von bk_out für in hinzufügen.

Falls erforderlich, die Variable für das Textfeld des Displays im Skript anpassen:

<vr id="vr_bk_in_tx" text="tx_keypad_2"/> <!-- Textfeld 2. zum überschreiben des Displays.-->

Einstellungen im Reiter Einzelheiten
Im Block bk_out muss im Reiter "Einzelheiten" unter "Warten" der Typ "Stopp" aktiviert werden. Diese Einstellung sorgt dafür, dass die Lok vor der Ausfahrt aus dem Automatikbetrieb angehalten und aus der Automatiksteuerung genommen wird.

Einrichten der Messstrecke

Die Messstrecke zur Ermittlung der Zuglänge und wird wie folgt konfiguriert:

Unter Tabellen → Geschwindigkeits-Messstrecke die entsprechenden Einstellungen vornehmen.

  • Abstand: Den Abstand in Millimetern zwischen den beiden Rückmeldern für die Messung eintragen (im Beispiel fb_bk_mv1 und fb_bk_mv2).
  • Zuglänge berechnen: Den Haken bei Zuglänge berechnen setzen.
  • Rückmelder: Die beiden Rückmelder (fb_bk_mv1 und fb_bk_mv2) eintragen.
  • Block: Den Referenzblock eintragen, der während der Messung die Lok-ID enthält.

Korrektur bei Entprellung
Falls im realen Betrieb Rückmelder mit Entprellung verwendet werden (z. B. WIO mit 2000 ms), kann diese Zeit bei ms offtime eingetragen werden. Dadurch wird der gemessene Wert entsprechend korrigiert.

Wichtig Die Länge des Zuges wird mit dem ersten Melder (fb_bk_mv1) berechnet. Während der Messung darf sich die Geschwindigkeit der Lok nicht verändern.
Im Beispiel wird der zweite Melder (fb_bk_mv2) gleichzeitig als Enter-Melder des Blocks bk_mv verwendet. Dies ist möglich, da der Abstand der Rückmelder in der Messstrecke 1000 mm beträgt und die maximale Zuglänge 780 mm nicht überschreitet.
Dadurch ist sichergestellt, dass der erste Rückmelder (fb_bk_mv1) deaktiviert ist, bevor der Enter-Melder (fb_bk_mv2) die Bremsung auslöst.

Der zweite Melder (fb_bk_mv2) kann auch auslösen, während der erste Melder (fb_bk_mv1) noch aktiv ist. Die Längenmessung erfolgt dennoch korrekt. In diesem Fall kann der zweite Melder (fb_bk_mv2) jedoch nicht als Enter-Melder verwendet werden.

Upload der amp-Dateien auf den WIO

Die in WIO hinterlegten Standard-Schriftgrößen sind recht klein. Um die Lokadresse besser lesbar anzuzeigen, werden spezielle amp-Dateien für die Zahlen 0–9 auf den WIO hochgeladen.

Die benötigten amp-Dateien befinden sich in der ZIP-Datei am Ende.

Öffnen Sie den WIO-Dialog in Rocrail. Klicken Sie auf den gewünschten WIO und anschließend auf den Button Web Browser.

Im Browser auf List files klicken, um die Dateiverwaltung des WIO zu öffnen. Laden Sie die amp-Dateien für die Zahlen 0–9 auf den WIO hoch.

Ablauf zum Ankündigen der Lok

Voraussetzungen:

  • Die Automatik muss eingeschaltet sein.
  • Die zu übernehmende Lok steht vor dem Übergabeblock bk_ueg.

Eingabe in das Keypad:

Geben Sie die Adresse der Lok in das Keypad ein und bestätigen Sie die Eingabe mit #.
Dadurch wird die Adresse in das Textfeld tx_keypad_1 eingetragen und die Aktion lokuebernahme.xml gestartet.

Ablauf im Skript:

Prüfung der Eingabe:

Zunächst wird überprüft, ob an der ersten Stelle der Eingabe einer der Buchstaben A, B, C oder D steht, da diese andere Funktionen auslösen können.
Steht an der ersten Stelle eine Zahl, wird davon ausgegangen, dass es sich um eine Lokadresse handelt.

Lok-Kennung ermitteln:

Eine Schleife durchläuft alle Lokomotiven, um anhand der eingegebenen Adresse die entsprechende Lok-Kennung zu finden.
Es werden nur aktive Lokomotiven berücksichtigt¹.

Rückmeldung bei Fehlern:

Keine Lok gefunden:
Wird keine Lok mit der eingegebenen Adresse gefunden, wird im Display angezeigt: "Keine Lok mit Adresse … gefunden."

Lok bereits in einem Block:
Befindet sich die Lok bereits in einem Block, wird dies im Display angezeigt:
"Lok-ID bereits in bk_…"

Lok-Ankündigung:

Nach erfolgreicher Prüfung wird die Lok auf manuell betrieben gestellt.
Die Lok wird in den Block bk_ank (Block für die Ankündigung) gesetzt.
Falls die Blockenterside (Auffahrtrichtung) nicht korrekt ist, wird diese automatisch korrigiert.
Im Display wird nun angezeigt "Lok mit Adresse in Block".

Reset

Vor Bestätigung mit der #-Taste kann eine Falscheingabe durch Drücken der *-Taste korrigiert werden.
Nach Bestätigung kann die Ankündigung durch Eingabe von A und # am Keypad zurückgenommen werden.

¹Besonders im Umfeld eines Vereins ist die Lok-Adresse kein unikey.

Ablauf zum Übergeben der Lok

Um die Fahrtrichtung der Lok zu ermitteln, muss die Lok mit dem Handregler in den Übergabeblock (bk_ueg) gesteuert werden. Dabei sollte die Lok nicht zu schnell fahren, und CV4 (Verzögerung) sollte nicht zu hoch eingestellt sein.
Da bei manuellem Betrieb die Geschwindigkeit erst bei `IN` auf 0 gesetzt wird, ist ein ausreichender Auslaufbereich erforderlich. Dies ermöglicht die automatische Ermittlung der Fahrtrichtung der Lok (vorwärts/rückwärts).

Durch die Einstellung im Block wird die Lok gestoppt, und bei IN wird das Skript `lok_auf_auto_go.xml` gestartet.

Nun erfolgen folgende Prüfungen und Korrekturen:

1. Ermittlung der Fahrtrichtung:

  1. Vorwärtsfahrt: Die Lok-Variable `placing` wird auf `true` (Lok fährt vorwärts) und `blockside` auf `false` (Lokfront zur Minusseite) gesetzt.
  2. Rückwärtsfahrt: Die Lok-Variable `placing` wird auf `false` (Lok fährt rückwärts) und `blockside` auf `true` (Lokfront zur Plusseite) gesetzt.

2. Zurücksetzen der Messstrecke:

  1. Um eine eventuelle Fehlauslösungen des mv-enter zu korrigieren wird die Messterecke zurückgesetzt.

3. Übergang in den Automatikmodus:

  1. Die Lok wird wieder in den Automatikmodus versetzt und gestartet.

Im Display erscheint die Meldung: "Lok [Lok_ID] gestartet." und die Lok fährt in die Messstecke.

Sobald der Block bk_ueg wieder frei ist, wird das Skript bk_uebergabe_free.xml gestartet. Dieses ändert die Anzeige auf dem Display zu: "Übergabeblock frei."

Ablauf in der Messstrecke

Die Ermittlung der Loklänge erfolgt automatisch und wird mithilfe von Rocrail-Bordmitteln direkt in die Lokdaten eingetragen.
Ein Eintrag in Wagen oder Züge ist dabei nicht vorgesehen.

Simulation der Messstrecke (Beispiel):
Im Textfeld "tx_loklaenge" kann eine virtuelle Loklänge eingetragen werden. Sobald der Ausgang der Simulation aktiv ist, werden die Rückmelder simuliert, und der Wert wird in die Lokdaten eingetragen.

Hinweis:
Das Skript "lok_laenge_in_textfeld.xml", das bei IN im Block "bk_mv" ausgeführt wird, dient lediglich der Anzeige der Loklänge im Textfeld "tx_einmessbereich".

Sowohl dieses Skript als auch die "Loklängen Simulation" sind für den eigentlichen Ablauf der Messstrecke nicht erforderlich.

Fahrt in die Aufstellblöcke und Verlassen des automatisch betriebenen Bereichs

Die Lokomotive fährt nun in einen der Aufstellblöcke ein.

Das manuelle Vorsignal vor Block "bk_out" verhindert eine ungebremste Ausfahrt aus den Aufstellblöcken.

Durch die Eingabe des Buchstabens "B" auf dem Keypad wird das Signal auf grün gestellt und eine Lokomotive kann den Aufstellblock in Richtung Block "bk_out" verlassen.

Beim Reservieren wird das Signal wieder auf rot gestellt.

Durch die Blockeinstellungen wird die Lokomotive in "bk_out" gestoppt.

Beim Einfahren in "bk_out" wird das Skript "bk_out_in.xml" gestartet, welches die Anzeige des Displays auf "Lok_ID Ausfahrt Adr. …" ändert.

Die Lokomotive kann nun in den manuellen Anlagenteil gefahren werden.

Durch die Eingabe von "C" auf dem Keypad wird die Lokomotive aus Block "bk_out" gelöscht.

Anmerkungen und Dateien

Die Rückmelder im Beispielplan müssen manuell ausgelöst werden, da sonst die Längenmessung nicht erfolgt.
Ein virtueller Betrieb ist also nicht möglich.

Bei aktivierter Simulation der Messstrecke erfolgt die Auslösung der Rückmelder für die Messstrecke und das IN in von Block "bk_mv" über das Skript.

Die maximale Länge einer Lokomotive beträgt 780 mm.
Dies ergibt sich aus der Länge der Abschnitte in den Aufstellblöcken (4 x 200 mm) abzüglich der minimalen Block-Zug-Länge von 20 mm in den Rocrail-Eigenschaften unter Automatik.

Das Beispiel wurde mit Rocrail 2.1.5322 und WIO 1002 erstellt und getestet.

uebergabe_lok.zip
amp_dateien.zip

userpages/babbel/keypad_mvtrack.txt · Last modified: 2024/12/22 10:58 by babbel