BiDiB, ein universelles Steuerprotokoll für Modellbahnen

BiDiB - Bidirektionaler Bus - Logo

Inhaltsverzeichnis

Allgemeines

Das Protokoll BiDiB dient zur Kontrolle einer Modellbahnanlage. Es ermöglicht die Ansteuerung von Loks, Zubehör und sichere Übertragung von Rückmelderinformationen aus der Modellbahnanlage an den steuernden Rechner.

BiDiB kann über verschiedene Übertragungsmedien transportiert werden, dabei wird das Framing und die Sicherung der Nachrichten gewährleistet.

Eine Erläuterung der hier verwendeten Begriffe und der Protokollgrundzüge findet sich im allgemeinen Teil der Protokollbeschreibung, gleiches gilt auch für die Hinweise zur Benutzung und zur Lizenz.

Dieser Abschnitt der Protokollbeschreibung erläutert nur einen Teil der Nachrichten.

Revisionsstand

Dieses Dokument beschreibt Revision 1.29 von BiDiB, Stand 21.07.2023.

Die Revisionsgeschichte ist dem allgemeinen Teil zu entnehmen.

4.8. Booster

4.8.1. Ansteuerung von Boostern

Booster dienen zum Verstärken und Aufbereiten des Gleissignals, je nach Größe der Modellanlage können diese mehrfach vorhanden sein.

Booster verstärken das Gleissignal und stellen es an ihrem Ausgang zur Verfügung. Hierzu verwenden sie ein eigenes Netzteil. Wenn als Busmedium BiDiBus verwendet wird, so wird über den Bus auch das DCC-Signal (mit RS485-Pegeln) übertragen.

Booster haben fallweise Diagnosemöglichkeiten (Ausgangsstrom und -spannung messen, Kurzschlusserkennung), Bedienmöglichkeiten (An- und Abschalten), und können einen globalen Detektor für railcom enthalten. In diesem Fall ist der Booster in der Lage, entsprechende Nachrichten zu senden (siehe auch Klasse Belegtmelder). Er verwendet den Wert 255 für das MNUM-Feld.

Kontrolle von Boostern:

Prinzipiell wird zwischen dem Zustand der Gleisausgabe (GO, SOFTSTOP, STOP) und dem Zustand der Booster unterschieden, d.h. auch wenn die Gleisausgabe auf STOP geht, bleiben die Booster in Betrieb. Erst wenn die Gleisausgabe komplett abgeschaltet wird, schalten auch die Booster ab. Dies ist notwendig, um ein versehentliches Losfahren der Lokomotiven bedingt durch die Analogerkennung in den Dekodern zu verhindern.

Es kann der Fall eintreten, dass Booster am Ausgang gegenseitig verbunden sind (z. B. durch ein Fahrzeug, welches gerade eine Versorgungsgrenze überbrückt). BiDiB trägt dem Rechnung und legt fest, dass Boosternachrichten i. d. R. als Broadcast zu verteilen sind. Der Host schickt daher eine Änderung des Boosterzustand (ON, OFF) nur an das Interface, dieses sendet die Nachricht als Broadcast an alle angeschlossenen Booster.

Es ist auch möglich, einzelne Booster gezielt an- oder abzuschalten (durch direkte Adressierung). Egal ob ein Booster über Broadcast oder individuell umgeschaltet wurde, er meldet immer seinen Statuswechsel an den Host. Das bedeutet z. B. wenn man ein System mit 10 Boostern hat und sendet an das Interface MSG_BOOST_ON (Broadcast), so entstehen 10 MSG_BOOST_STAT-Nachrichten.

Mehrere Gleisausgabeknoten und Booster:

Es ist denkbar, dass nicht nur das Interface eine Gleissignalerzeugung meldet, sondern auch weitere Knoten (z. B. separate DCC-Schaltansteuerung). Diese Knoten sind dann vom Host mit separatem BOOST_ON bzw. BOOST_OFF anzusteuern. Sollte einem solchen Knoten eine Unterstruktur mit weiteren Boostern zugeordnet sein, dann gelten die Broadcast nur für diesen Teilast, vom Hauptverteiler ist das abgekoppelt.

4.8.2. Features für Booster

Enthält der Booster einen globalen Detektor für BiDi-Nachrichten von Dekodern, so muss er zusätzlich die entsprechenden Features (siehe BiDi-Detektoren) unterstützen.

Aufstellung der Features für die Booster-Klasse
NummerNameBedeutung
15 FEATURE_BST_VOLT_ADJUSTABLE Ausgangsspannung einstellbar
Wenn dieses Feature ungleich 0 ist, dann kann die Ausgangsspannung des Boosters konfiguriert werden.
16 FEATURE_BST_VOLT Die Ausgangsspannung ist der hier angegebene Wert in Volt.
17 FEATURE_BST_CUTOUT_AVAILABLE Cutout verfügbar. 1 = Der Booster kann eine Austastlücke erzeugen
18 FEATURE_BST_CUTOUT_ON Cutout eingeschaltet. 1 = Der Booster erzeugt die Austastlücke
19 FEATURE_BST_TURNOFF_TIME Abschaltzeit normal
Zeitdauer, welche nach einem Kurzschluss bis zum Abschalten benötigt wird. Booster, welche das nicht variabel haben, sollen den eingestellten Wert zurückliefern. Der Wert ist in der Einheit 1ms angegeben.
20 FEATURE_BST_INRUSH_TURNOFF_TIME Abschaltzeit Inrush (optional)
Zeitdauer, während welcher ein Kurzschluss sofort nach dem Einschalten (bedingt durch Einschaltstrom-Spitze) toleriert wird. Der Wert in der Einheit 1ms angegeben.
21 FEATURE_BST_AMPERE_ADJUSTABLE Ausgangsstrom ist einstellbar
Wenn dieses Feature ungleich 0 ist, dann kann der maximale Ausgangsstrom des Boosters konfiguriert werden.
22 FEATURE_BST_AMPERE maximaler Ausgangsstrom
max. Ausgangsstrom. Dieses Feature ist so kodiert wie die Strommessung (siehe MSG_BOOST_DIAGNOSTIC). Es kann sein, dass der gewünschte Wert nicht einstellbar ist, der Knoten stellt dann den nächstkleineren Strom und sofern dieser 0 ist, den minimal möglichen Strom ein. Der eingestellte Wert kann dann wieder abgefragt werden.
Beispielwerte
0x52 = 820.5A (496mA)
0x71 = 1131A (992mA)
0x83 = 1311.5A (1472mA)
0x8B = 1392A (1984mA)
0x93 = 1472.5A (2496mA)
0x9B = 1553A (3008mA)
0xAA = 1704A (3968mA)
0xBA = 1865A (4992mA)
23 FEATURE_BST_CURMEAS_INTERVAL Diagnoseintervall
Der Booster kann Diagnosewerte (z. B. Strommessdaten, Temperatur, Spannungen) liefern, wenn dieses Feature ungleich 0 ist, dann ist Strommessung enabled.
Der Wert gibt das Abtastintervall der Strommessung in Einheiten von 10ms an. Empfohlen ist eine Einstellung von 200 entsprechend 2s.
Der Knoten soll ein Intervall von 100ms nicht unterschreiten.
26 FEATURE_BST_INHIBIT_AUTOSTART Normalerweise startet ein Booster automatisch, wenn DCC an seinem Eingang eingeschaltet wird. Wenn dieses Feature auf 1 gestellt ist, dann wird dieser Start unterbunden und der Booster muss explizit mit einer MSG_BOOST_ON eingeschaltet werden. Es ist damit z. B. möglich, gezielt Anlagenbereiche dauerhaft stromlos zu schalten.
27 FEATURE_BST_INHIBIT_LOCAL_ONOFF Sollte ein Booster über lokale Taster für Stop und Go verfügen, so kann mit diesem Feature entschieden werden, ob diese Taster wirken. Wenn dieses Feature auf 1 gestellt ist, dann wird der Tastendruck nicht direkt ausgewertet, sondern an den Host (als Boosterstatus) gemeldet. Der Host kann das weitere Vorgehen entscheiden (Anwendung: dezentrale Nothalttaster)
4.8.3. Downlink: Nachrichten für Booster
  • MSG_BOOST_ON:

    Mit diesem Befehl wird die Gleisspannung eingeschaltet. Es folgt ein Byte (UNICAST), welches definiert, ob die Nachricht als Broadcast weiterverteilt werden soll oder nicht. Der Knoten antwortet mit MSG_BOOST_STAT.

    Kodierung von Unicast
    WertBedeutung
    0 Ein Interface muss diese Nachricht als Broadcast an alle angeschlossenen Knoten verteilen, damit das Einschalten der Booster möglichst synchron erfolgt. Die Einschaltnachricht gilt für den Interfaceknoten sowie alle dem Interface nachgelagerten Knoten, die das Gleissignal aus dem Bus entnehmen.
    1 Die Einschaltnachricht gilt nur für diesen Knoten

    Es ist zu beachten, dass Booster auch über einen Statuswechsel der DCC-Erzeugung eingeschaltet werden können, sofern dies nicht durch ein gesetztes Feature FEATURE_BST_INHIBIT_AUTOSTART blockiert ist.

    Wenn im Moment des Einschaltens kein DCC vorhanden ist, dann schaltet der Booster nicht ein. Daraus ergeben sich je nach Einschaltreihenfolge unterschiedliches Verhalten:

    • Zuerst DCC der Gleisausgabe einschalten, dann MSG_BOOST_ON(0): alle Booster schalten ein (keine Ausnahme)
    • Zuerst MSG_BOOST_ON(0), dann DCC der Gleisausgabe einschalten: alle Booster schalten ein, ausgenommen diejenigen Booster, bei denen FEATURE_BST_INHIBIT_AUTOSTART gesetzt ist.
  • MSG_BOOST_OFF:

    Mit diesem Befehl wird die Gleisspannung ausgeschaltet. Es folgt ein Byte (UNICAST), welches definiert, ob die Nachricht als Broadcast weiterverteilt werden soll oder nicht. Der Knoten antwortet mit MSG_BOOST_STAT.

    Kodierung von Unicast
    WertBedeutung
    0 Ein Interface muss diese Nachricht als Broadcast an alle angeschlossenen Knoten verteilen. Die Nachricht gilt für den Interfaceknoten sowie alle dem Interface nachgelagerten Knoten, die das Gleissignal aus dem Bus entnehmen.
    1 Die Nachricht gilt nur für diesen Knoten.
  • MSG_BOOST_QUERY:

    Es folgen keine weiteren Daten. Mit diesem Befehl wird der Status des Boosters abgefragt. Sofern Spannungs- oder Strommessung verfügbar ist, wird auch diese mit übermittelt.

    Der Knoten antwortet mit einer MSG_BOOST_STAT und optional MSG_BOOST_DIAGNOSTIC.

4.8.4. Uplink: Nachrichten für Booster

Booster können neben ihrem Status auch Stromverbrauch und Bidi-Ergebnisse melden. Falls dies unterstützt wird, werden dazu die Bidi-Detektor-Nachrichten verwendet. Bei der Gleisausgabe können bei Boostern sowohl behebbare als auch permanente Fehler auftreten. Mögliche Fehler sind z. B. Übertemperatur, Fremdspeisung, Kurzschluss, ...

Noch in Diskussion: Soll man diese mit einer eigenen Nachricht übermitteln oder besser in Status kodieren.

  • MSG_BOOST_STAT:

    Nach einer Statusänderung des Boosters wird diese Nachricht abgesendet. Diese Statusänderung kann durch einen Hostbefehl oder durch Hardwarebedingungen hervorgerufen sein. Es folgt ein Byte mit dem Status, generell kodiert dabei das MSB den Einschaltzustand, das nächste Bit die Zuordnung des Booster zur Busstruktur (DCC-Eingang), weitere Bits kennzeichnen darüber hinausgehende Zustände:

    Kodierung des Booster-Status
    BitBedeutung
    7 Betriebszustand
    0Booster ist abgeschaltet.
    1Booster ist eingeschaltet.
    6 Buszugehörigkeit (für DCC-Signal)
    0Booster ist dieser Busstruktur zugeordnet (default).
    1Booster ist anderem Bus zugeordnet (Sonderfall, z.B. für DCC-Domainübergang).
    5…0 Zusätzliche Information zum Boosterzustand.
    Kodierung des Booster-Status
    WertNameBedeutung
    0x00 BIDIB_BST_STATE_OFF Booster ist abgeschaltet (allgemein, z. B. aufgrund Host-Befehl).
    0x01 BIDIB_BST_STATE_OFF_SHORT Booster ist abgeschaltet (wegen Kurzschluss).
    0x02 BIDIB_BST_STATE_OFF_HOT Booster ist abgeschaltet (wegen Übertemperatur).
    0x03 BIDIB_BST_STATE_OFF_NOPOWER Booster ist abgeschaltet (wegen fehlender Netzspannung).
    0x04 BIDIB_BST_STATE_OFF_GO_REQ Booster ist abgeschaltet und es liegt eine Einschalt-Anforderung vor.
    0x05 BIDIB_BST_STATE_OFF_HERE Booster ist abgeschaltet (aufgrund lokalen Tastendrucks).
    0x06 BIDIB_BST_STATE_OFF_NO_DCC Booster ist abgeschaltet (wegen fehlendem Eingangssignal).
    0x80 BIDIB_BST_STATE_ON Booster ist eingeschaltet.
    0x81 BIDIB_BST_STATE_ON_LIMIT Booster ist eingeschaltet und läuft in der Strombegrenzung.
    0x82 BIDIB_BST_STATE_ON_HOT Booster ist eingeschaltet und ist im kritischen Temperaturbereich.
    0x83 BIDIB_BST_STATE_ON_STOP_REQ Booster ist eingeschaltet und es liegt eine Stop-Anforderung vor.
    0x84 BIDIB_BST_STATE_ON_HERE Booster ist eingeschaltet (aufgrund lokalen Tastendrucks).

    Hinweis: GO- oder STOP-Anforderungen können fallweise dezentral anfallen (z. B. durch auf der Anlage verteilte Notaustaster), das Feature FEATURE_BST_INHIBIT_LOCAL_ONOFF entscheidet in diesem Fall über das Verhalten:

    • Fehlt dieses Feature oder ist der Wert = 0, dann wird mit dem Nothalttastern das komplette Gleisausgabesystem angehalten, d.h. ein Tastendruck löst einen Low-Puls auf der ACK-Leitung im BiDiBus aus und führt so zu einem Stop der Gleisausgabe im Master. Als Folge schalten alle Booster wegen fehlendem DCC ab.
      Derjenige Booster, welcher den ACK-Puls ausgelöst hat, meldet seinen Zustandswechsel mit BIDIB_BST_STATE_OFF_HERE, alle anderen melden ihren Zustandswechsel mit BIDIB_BST_STATE_OFF. Der Host kann so feststellen, von welchem Anlagenteil aus der Nothalt ausgelöst wurde.
    • Ist der Wert des Features = 1, so wird bei Tastendruck kein ACK-Puls ausgelöst, sondern der entsprechende Knoten meldet diesen Tastendruck mit einer BIDIB_BST_STATE_ON_STOP_REQ, d.h. er bleibt an und sendet die Stop-Anforderung an den Host. Es liegt nun im Ermessen des Hostprogrammes, ob es Softstop, Nothalt oder bestimmte Anlagenteile abschaltet.
  • MSG_BOOST_DIAGNOSTIC:

    Diagnose-Meldung eines Booster als Liste, diese umfasst z. B. Strom-Meldung, Spannung, Temperatur.

    Die Meldewerte sind jeweils Paare, bestehend aus einer Kennung der Meldungsart und dem Meldewert.

    DIAG_LIST ::= DIAG_PAIR | DIAG_PAIR DIAG_LIST
    DIAG_PAIR ::= DIAG_ENUM DIAG_VALUE
    Kodierung der Booster-Diagnostik
    NameCodeBedeutung
    BIDIB_BST_DIAG_I 0x00 Stromwert.
    WertBedeutung
    0kein Stromverbrauch, Gleis ist frei.
    1…15Stromverbrauch, in mA. Möglicher Bereich: 1…15mA
    16…63Stromverbrauch, Wert ist (Datum - 12) * 4mA. Möglicher Bereich: 16…204mA
    64…127Stromverbrauch, Wert ist (Datum - 51) * 16mA. Möglicher Bereich: 208…1216mA
    128…191Stromverbrauch, Wert ist (Datum - 108) * 64mA. Möglicher Bereich: 1280…5312mA
    192…250Stromverbrauch, Wert ist (Datum - 171) * 256mA. Möglicher Bereich: 5376…20224mA
    251…253reserviert.
    254Overcurrent aufgetreten.
    255kein exakter Verbrauch bekannt.
    BIDIB_BST_DIAG_V 0x01 Spannungswert.
    WertBedeutung
    0…250Spannung in der Einheit 100mV.
    251…254reserviert.
    255kein exakter Spannungswert bekannt.
    BIDIB_BST_DIAG_TEMP 0x02 Temperatur (signed char).
    WertBedeutung
    0…127Temperatur in der Einheit Grad Celsius.
    128 … 225reserviert.
    226 … 255negative Temperatur.
    Hinweise:
    Diese Nachricht ersetzt die bisherige MSG_BOOST_CURRENT
    Der Stromwert ist kodiert wie beim Belegtmelder.
    Die übermittelten Felder sind optional. Wenn ein Knoten ein bestimmte Messung nicht verfügbar hat, dann darf er den entsprechenden Feldtyp weglassen. Die Nachricht muss jedoch mindestens ein Feld enthalten.
    Die Häufigkeit der Diagnose-Meldung wird mit dem Feature FEATURE_BST_CURMEAS_INTERVAL eingestellt.