BiDiB
Protokoll
BiDiB, ein universelles Steuerprotokoll für Modellbahnen
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.
Nummer | Name | Bedeutung | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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.
| ||||||||||||||||
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 Wert Bedeutung 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 Wert Bedeutung 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 Bit Bedeutung 7 Betriebszustand 0 Booster ist abgeschaltet. 1 Booster ist eingeschaltet. 6 Buszugehörigkeit (für DCC-Signal) 0 Booster ist dieser Busstruktur zugeordnet (default). 1 Booster ist anderem Bus zugeordnet (Sonderfall, z.B. für DCC-Domainübergang). 5…0 Zusätzliche Information zum Boosterzustand. Kodierung des Booster-Status Wert Name Bedeutung 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.
- 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.
- 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 Name Code Bedeutung BIDIB_BST_DIAG_I 0x00 Stromwert. Wert Bedeutung 0 kein Stromverbrauch, Gleis ist frei. 1…15 Stromverbrauch, in mA. Möglicher Bereich: 1…15mA 16…63 Stromverbrauch, Wert ist (Datum - 12) * 4mA. Möglicher Bereich: 16…204mA 64…127 Stromverbrauch, Wert ist (Datum - 51) * 16mA. Möglicher Bereich: 208…1216mA 128…191 Stromverbrauch, Wert ist (Datum - 108) * 64mA. Möglicher Bereich: 1280…5312mA 192…250 Stromverbrauch, Wert ist (Datum - 171) * 256mA. Möglicher Bereich: 5376…20224mA 251…253 reserviert. 254 Overcurrent aufgetreten. 255 kein exakter Verbrauch bekannt. BIDIB_BST_DIAG_V 0x01 Spannungswert. Wert Bedeutung 0…250 Spannung in der Einheit 100mV. 251…254 reserviert. 255 kein exakter Spannungswert bekannt. BIDIB_BST_DIAG_TEMP 0x02 Temperatur (signed char). Wert Bedeutung 0…127 Temperatur in der Einheit Grad Celsius. 128 … 225 reserviert. 226 … 255 negative 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.