JMRI Hardware Support - BiDiB
Author: Eckart Meyer
Keywords: BiDiB java model railroad JMRI install

# Hardware Unterstützung: BiDiB

(englische Version hier)

- Zusammenfassung
- Hardware
- Einschränkungen
- Verbindungen
- JMRI Tools
- Dokumentation

## Zusammenfassung

BiDiB® steht für BiDirectional Bus zur digitalen Steuerung einer Modelleisenbahn. Der Begriff BiDiB® selbst bezeichnet die Protokolltechnologie, die auf verschiedenen physikalischen Verbindungen implementiert werden kann, wie Ethernet, USB oder den BiDiBus, der speziell auf die Bedürfnisse von Modellbahnern und Systemverkabelungen optimiert ist.

BiDiB ist kein kommerzielles Produkt und nicht an eine bestimmte Hardware gebunden. Es ist eine Protokolldefinition, die von jedem implementiert werden kann, einschließlich kommerzieller Hersteller.

BiDiB startete 2010 und wurde von Wolfgang Kufer (opendcc.de) entwickelt. Weitere Informationen zu BiDiB finden Sie unter bidib.org.

BiDiB Merkmale:

- Bidirektionale Datenübertragung. Somit geeignet zum Steuern von Loks, Accessories und Licht sowie zum Empfangen von Belegtmeldungen und anderen Eingaben.
- Binäre Datenübertragung gesichert durch eine CRC-Prüfsumme.
- Das Interface ("Root Node") eines BiDiB-Netzwerks wird direkt mit JMRI verbunden, indem eine Seriell-über-USB-Verbindung mit entweder 9600 Baud, 115200 Baud oder 1 MBaud verwendet wird.
- Ein Knoten im Netzwerk kann verschiedene Funktionen implementieren. Ein Knoten kann die Zentrale sein, die das Gleissignal steuert (wahrscheinlich DCC).
- Knoten, die Makrofunktionalität unterstützen, können konfiguriert werden, um z.B. ein komplettes Signal mit seinen verschiedenen Signalbildern zu implementieren.
- BiDiB unterstützt die Rückmeldung von Lokadressen, wenn RailCom® aktivierte Decoder verwendet werden (JMRI Melder - engl. Reporters).
- BiDiB-Benachrichtigungen sind ereignisgesteuert. Es wird kein Polling verwendet.

## Unterstützte Hardware

Jede Hardware, die BiDiB implementiert. Siehe "Informationen zu Drittanbietern" weiter unten.

## Einschränkungen

BiDiB für JMRI befindet sich derzeit in der Beta-Phase - einige Funktionen können fehlen und es gibt sicherlich noch Fehler.

## Verbindungen

### Anschlüsse

Derzeit unterstützt JMRI die Verbindung über USB, BiDiB über TCP, und es gibt einen BiDiB-Simulator, der durch eine XML-Datei konfiguriert wird.

Öffnen Sie die Registerkarte Verbindungen, wählen Sie „BiDiB“ aus dem Auswahlfeld Systemhersteller und wählen Sie aus den folgenden Setups. Der Systembuchstabe für BiDiB-Verbindungen ist "B".
BiDiB unterstützt Hotplugging auf dem BiDiBus, dies wird auch in JMRI-BiDiB unterstützt. Geht ein Knoten verloren, werden alle Objekte, die darauf verweisen als ungültig markiert aber nicht entfernt. Wenn ein neuer Knoten gefunden wurde, werden alle ungültigen Objekte überprüft, ob sie wieder aktiviert werden können.

#### Serial über USB

Um eine neue Verbindung zu erstellen, kann entweder der Portname (z. B. ttyUSB0 unter Linux oder COM1 unter Windows) ausgewählt oder die UID des Root-Knotens direkt eingegeben werden. Da UIDs weltweit eindeutig sind und sich für eine bestimmte Hardware nie ändern, kann der passende Port automatisch gefunden werden, indem alle verwendbaren Ports gescannt werden. Unter Windows werden alle Ports COMx gescannt, unter Linux und macOS kann ein Namensfilter verwendet werden (Standard ist "ttyUSB*"). Beim Herstellen der Verbindung durch Auswahl eines Ports aus der Liste der verfügbaren Ports wird die vom Gerät ausgelesene UID angezeigt und gespeichert - sofern es sich bei dem Gerät um einen BiDiB-Knoten handelt. Dazu kann eine Checkbox (Autoscan) aktiviert werden - wenn JMRI neu gestartet wird, kann der Port durch Scannen der verfügbaren Ports gefunden werden. Wenn also mehr als eine BiDiB-Verbindung verwendet wird, ist die Port-Bezeichnung des USB-Geräts nicht relevant.

#### netBiDiB

netBiDiB ermöglicht den Transport des BiDiB-Protokolls über eine Netzwerkverbindung (TCP). Die Verbindung wird einmal durch den Pairing-Vorgang authorisiert, sodass ein Gerät nicht einfach fremdgesteuert werden kann. Zur einfacheren Konfiguration sollen sich BiDiB-Geräte im Netz melden (mDNS/Bonjour) und können so in den JMRI Einstellungen für BiDiB in einem Auswahlfeld gewählt werden. Wenn dieses Discovery nicht verfügbar ist, kann die Automatische Konfiguration abgeschaltet werden und die IP-Adresse des Geräts manuell eingegeben werden. Die Standardportnummer ist 62875. JMRI unterstützt einen ständigen Keep-Alive Test (local ping), sodass Verbindungsabbrüche schnell bemerkt werden. Da nicht alle BiDiB-Geräte dies unterstützen, ist es in den Verbindungseinstellungen unter "Keep-Alive" einstellbar.

#### BiDiB über TCP

In diesem Fall ist die Hardware nicht direkt mit JMRI verbunden, sondern JMRI verbindet sich mit einem TCP-Server, der sich wiederum mit der Hardware verbindet. Dies kann nützlich sein, wenn ein anderes Programm als Hauptsteuerprogramm verwendet wird und JMRI nur als CV-Programmierer (Decoder Pro). Die Parameter sind die IP-Adresse und die Portnummer des Servers, zu dem eine Verbindung hergestellt werden soll. Die Standardportnummer ist 62875.

#### Simulator

Es steht ein BiDiB-Simulator zur Verfügung. Dieser Verbindungstyp hat ein Feld für eine XML-Datei mit der simulierten Konfiguration. Der Speicherort für diese Datei ist das Profilverzeichnis.

### Einstellungen

Dialog für serielle Schnittstelle:

Dialog für netBiDiB mit Discovery (Automatische Konfiguration):

#### BiDiB Namensgebung

JMRI-Systemnamen bestehen im Allgemeinen aus einem Systemverbindungspräfix Xn, wobei X der Systemverbindungsbuchstabe ist und n entweder leer oder bei Mehrfachverbindungen eine Zahl ist, gefolgt von dem Typbuchstaben ("T" für Weichen, "L" für Lampen, "S" für Detektoren und "R" für Melder (Lokadressenrückmeldung, Reporter) und die Systemadresse.

Für BiDiB ist der Systemverbindungsbuchstabe "B", die Systemadresse ist ein String mit der BiDiB-Adresse.

Die BiDiB-Adresse hat generell die Form:

`Knoten:Adresse`

Ein Knoten auf dem BiDiBus wird entweder durch seine weltweit eindeutige Kennung (UID) identifiziert, die eine 40-Bit-Hexadezimalzahl ist, oder durch einen im Knoten konfigurierten Benutzernamen (mit dem BiDiBWizard). Die hexadezimale UID muss mit einem „X“ beginnen, Benutzernamen müssen mit einem Buchstaben beginnen (besser nicht mit „X“) und dürfen nur andere Buchstaben, Zahlen, Unterstriche („_“) oder Bindestriche („-“) enthalten. Dies ist eine Einschränkung von JMRI für BiDiB, nicht für BiDiB selbst. Die Knotenspezifikation ist unabhängig von Groß- und Kleinschreibung.

Der Knotenteil der Adresse kann weggelassen werden (einschließlich Doppelpunkt), in diesem Fall wird automatisch das Interface (Root Node, d. h. der direkt mit JMRI verbundene BiDiB-Knoten) verwendet.

Der Adresse auf dem Knoten kann ein Adresstyp als Buchstabe vorangestellt werden, und – nur für Portadressen – kann ein Porttyp als Buchstabe folgen. Die Nummer ist erforderlich und die beiden Buchstaben sind optional. Werden sie weggelassen, werden geeignete Standardeinstellungen in Abhängigkeit von den Fähigkeiten des Knotens ausgewählt: Nur eine Zentrale hat DCC-Adressen, Weichen sind bevorzugt Accessories und Lichter sind bevorzugt Ports (digitale Pins des Geräts). Die allgemeine Form einer Adresse auf einem Knoten ist also:

`xny`

wobei x der optionaler Adresstyp ist, n die numerische Adresse und y der optionale BiDiB-Porttyp.

In JMRI werden in deutscher Sprache Belegtmelder als Detektoren (engl. Sensors) bezeichnet, Railcom Rückmelder als "Melder".

Die Bezeichnung "Weichen" (engl. Turnouts) in JMRI bezieht sich nicht unbedingt auf tatsächliche Weichen, sondern eher auf ein einen generellen I/O-Port der Hardware, der die beiden Zustände An und Aus einnehmen kann. In BiDiB sollten Weichen aber nicht direkt über die Ports gesteuert werden, sondern als Accessories angesprochen werden. Diese Auswahl geschieht über den Addresstyp-Buchstaben.

Liste der Adresstypen:

Buchstabe | Beschreibung | Standardtyp für:
--- | --- | ---
t | DCC Accessory Adresse ("track") | Weichen und Belegtmelder wenn der Knoten eine Command Station (CS) ist. Ungültig bei Knoten ohne CS Funktion.
a | (non-DCC) Accessory Adresse ´ | Weichen wenn der Knoten keine Command Station ist und der Knoten BiDiB Accessories unterstützt.
f | Belegtmelder Nummer | Belegtmelder, wenn der Knoten BiDiB Belegtmelder unterstützt. Melder (Reporters) sind nur für Knoten relevant, die Belegtmelder unterstützen, daher immer Standard
p | Portnummer | Lampen (LEDs). Für Detektoren, wenn der Knoten keine Belegtmelder unterstützt.

Liste der BiDiB Porttypen:

Buchstabe | Bezeichnung | Beschreibung
--- | --- | ---
S | SWITCHPORT | Einfacher digitaler Ausgang. Entweder EIN oder AUS.
L | LIGHTPORT | Steuerung eines digitalen Ausgangs mit diversen Funktionen wie Dimmen, Blinken etc. Gesteuert durch einen Zustandswert (ähnlich wie bei Signalen)
V | SERVOPORT | Steuerung eines angeschlossenen Servos. Start- und Endposition werden im Knoten konfiguriert, ebenso die Umlaufgeschwindigkeit.
U | SOUNDPORT | derzeit nicht in JMRI unterstützt
M | MOTORPORT | derzeit nicht in JMRI unterstützt
A | ANALOGPORT | derzeit nicht in JMRI unterstützt
B | BACKLIGHTPORT | derzeit nicht in JMRI unterstützt
P | SWITCHPAIRPORT | derzeit nicht in JMRI unterstützt
I | INPUTPORT | Standard für Sensoren. Für andere ungültig

Beispiele (das Interface (Rootnode) wird als Zentrale angenommen und hat die UID 0d68001234 und "MeinKnoten" ist der Nutzername):

Systemname | Typ | Adresse Part | resultierende Knoten UID | resultierende Adresse | Bermerkungen
--- | --- | --- | --- | --- | ---
BSX0d68001234:20 | Detektor | X0d68001234:20 | 0d68001234 | f20 - Belegmelder 20 | BiDiB Belegmelder 20 des (Interface-) Knoten 0d68001234
BSMyNode:42 | Detektor | MeinKnoten:42 | 0d68001234 | f42 - Belegmelder 42 | BiDiB Belegmelder 42 des (Interface-) Knoten 0d68001234 mit dem Nutzernamen "MeinKnoten"
BT5 | Weiche | 5 | 0d68001234 | t5 - DCC Adresse 5 | Weiche mit der DCC address 5 über das Interface (CS Knoten) 0d68001234
BTN201:22 | Weiche | N201:22 | 0d68006789 | a22 - Accessory Adresse 22 | Weiche mit der BiDiB Accessory Adresse 22 des Knoten 0d68006789 mit dem Nutzername "N201" (nicht die Command Station)
B1LLC6:8L | Lampe (Licht) | LC6:8 | 0d68004321 | p8L - Port 8 | Lampe am Ausgangsport 8 (typbasierendes Adressierungsmodell) des Knoten 0d68004321 mit dem Nutzername "LC6" auf der zweiten BiDiB Verbindung (B1)
BLN201:15 | Lampe (Licht) | N201:15 | 0d68006789 | p15L - Port 15 | Licht am Ausgangsport 15 (flaches Adressierungsmodell) des Knotens 0d68006789 mit dem Namen "N201", Port muss als LIGHT konfiguriert werden
BSX0d68006789:3 | Detektor | 0d68006789:3 | 0d68006789 | p3I - Port 3 | Detektor am Eingangsport 3 (flaches Adressierungsmodell) des Knotens 0d68006789 (ohne Belegtmelder), Port muss als INPUT konfiguriert werden
BR42 | Melder (Reporter) | 42 | 0d68001234 | f42 - Belegmelder 42 | Railcom-Rückmeldung über Belegmelder 42 des Interface Knotens 0d68001234

#### Detektoren

BiDiB Belegtmelder und Eingangsports werden Detektoren zugeordnet.

#### Weichen

BiDiB-Accessories sind das Äquivalent zu Weichen. Sowohl Signallampen als auch tatsächliche Weichen können sich auf JMRI-Weichen beziehen. Signale sollen aber über "Signalmasten" bedient werden (siehe weiter unten)

#### Lampen

BiDiB-Ports werden normalerweise Lampen (Lichter, Lights) zugeordnet.

BiDiB-Ports unterstützen entweder ein flaches Adressierungsmodell oder ein typbasiertes Adressierungsmodell. Das Adressierungsmodell wird durch die Firmware des Knotens bestimmt. Beim flachen Adressierungsmodell werden alle verfügbaren Ports einfach von 0 bis zur Anzahl der Ports minus 1 nummeriert. Jeder Port muss im Knoten (z. B. mit dem BiDiBWizard) als einer der oben genannten Porttypen konfiguriert werden, der von der Hardware selbst unterstützt wird. In diesem Fall ist der Buchstabe des Porttyps in der JMRI-Systemadresse nicht erforderlich, da der Typ vom Knoten gelesen wird.

Wenn der Knoten das typbasierte Adressierungsmodell verwendet, sind Porttypen in der Firmware fest kodiert und können nicht geändert werden. Jeder Porttyp hat einen eigenen Adressbereich beginnend bei 0 bis zur Anzahl der Ports für diesen Typ minus 1. In diesem Fall ist der Porttyp Teil der Portadresse und der Porttypbuchstabe wird in der BiDiB-Adresse benötigt. Siehe die Beispiele oben.

#### BiDiB Signalmasten

Es wird ein Signalmasttyp für BiDiB-Accessories bereitgestellt, bei dem ein JMRI-Aspekt direkt einem BiDiB-Accessories-Aspekt zugeordnet werden kann. Die Signalbilder können programmiert werden in den BiDiB-Knoten mit Makros über den BiDiB-Wizard. Andere Signalmasttypen (z. B. der Matrix-Typ) können "Weichen" zugeordnet werden.

#### Melder (Reporters)

Belegtmelder, die die Rückmeldung von Lokadressen unterstützen, melden diese Adresse an einen JMRI-Melder. Jede Melderadresse hat eine Belegtmelderadresse mit der gleichen Nummer.

## JMRI BiDiB Tools

Wenn JMRI über dieses System mit einer Anlage verbunden ist, wird ein BiDiB-Menü wird angezeigt:

- Traffic Monitor
- Start/Stopp BiDiB über TCP Server
  Der Server hört auf Port 62875 auf eingehende Clients, leitet alle Nachrichten des Clients an die Systemverbindung weiter und sendet alle von der Verbindung eingehenden Antwortnachrichten an alle verbundenen Clients. Das ist so etwas wie das Gegenteil der oben erwähnten „BiDiB over TCP“-Systemverbindung.
- netBiDiB Anmelden/Abmelden (nur netBiDiB)
  JMRI wird beim angeschlossenen Gerät an-/abgemeldet. Das Abmelden kann sinnvoll sein, um einem anderen Programm (z.B. dem BiDiB Wizard) Zugriff auf das Gerät zu ermöglichen. Nach der Abmeldung des anderen Programms kann JMRI wieder angemeldet werden.

### BiDiB Wizard

BiDiB-Hardware kann normalerweise in vielen Aspekten konfiguriert werden, einschließlich der Definition von Makros. Dies ist nicht im Umfang von JMRI. Stattdessen gibt es den BiDiBWizard.

Der BiDiBWizard ist ein externes Tool - ebenfalls in Java geschrieben und verwendet die gleiche zugrunde liegende BiDiB-Bibliothek (jbidibc - geschrieben von Andreas Kuhtz).

Mit diesem Tool werden alle Knotenparameter konfiguriert, z.B: der Knoten-Nutzername, die Portkonfigurationen und viele andere Parameter. Daher ist kein weiteres Konfigurationstool in JMRI integriert. Der BiDiBWizard kann mit dem oben genannten BiDiB-über-TCP-Server verbunden werden.

## Dokumentation

### Third Party Info

BiDiB home page: english or german

BiDiBWizard: aktuell nur in deutsch.

#### BiDiB Hersteller

Die Entwickler von BiDiB verkaufen Module im Shop Fichtelbahn.

Es gibt einige andere Hersteller - siehe www.bidib.org/vendors.html