DCC-BiDi (RailCom ®) für Lokomotiven

Achtung - diese Infos sind veraltet!

Datagramme

    Die Rückübertragung bei Railcom erfolgt als serielle Nachricht zu 2, 4, oder 6 Bytes. Diese werden einer Redundanzkodierung (4-8-Coding) unterworfen, so dass nach dem Dekodieren eines Bytes 70 mögliche Code-Zustände übertragen werden. von diesen 70 Codes werden 6 für eine direkte Übermittlung von Systeminformation verwendet (sog. Acknowledgement Messages), die anderen 64 Zustände werden paarweise zu sogenannte Datagrammen zusammengefaßt. Diese Datagramme können dann 12, 24 oder 36 Bit lang sein.

    Im Kanal 1 werden immer 2 Byte übertragen, es sind also nur ACK's oder Datagramme mit 12 Bit vorhanden, der Kanal 2 kann alle Arten von Datagrammen enthalten.

Acknowledgement Messages

    Acknowledgement Messages bestehen aus 2 Bytes, sind also kurze Datagramme. Diese dienen als Quittung des vorangegangenen Befehls. Hier gibt es eine Definition auf der NMRA-Seite:
    CodeNMRA (alt)Erläuterung
    0x0F=00001111ACK-1Kommando empfangen
    0x17=10000111ACK-2Kommando empfangen, wird jedoch nicht unterstützt
    0xC3=11000011ACK-3Kommando empfangen und der Zustand des Decoder stimmt überein.
    0xF0=11110000ACK-4Kommando empfangen und der Zustand des Decoder stimmt nicht überein.
    0x3C=00111100ACK-5Kommando empfangen und angefragte Wert ist größer als der aktuelle.
    0xE1=11100001ACK-6Kommando empfangen, kann nicht ausgeführt werden
    Wenn ein Dekoder noch Daten übertragen will/soll, diese aber noch nicht bereit sind, so wird statt dessen 'NOP' gesendet.

    Diese Definition wurde 2011 durch eine Definition des VHDM abgelöst. Dabei haben sich die Bedeutungen wie folgt geändert:
    CodeNameErläuterung
    0xF0=11110000ACK Kommando empfangen und bearbeitet.
    0x0F=00001111NOTACKKommando empfangen und nicht bearbeitbar (im Dekoder unbekannt).
    0xC3=11000011Reserved_1(to be defined)
    0x3C=00111100Reserved_2(to be defined)
    0x17=10000111Reserved_3(to be defined)
    0xE1=11100001Reserved_4(to be defined)
    Aus Sicht des Detektors ist das relativ schwierig, es gibt noch Dekoder mit alter Firmware, welche nach NMRA antworten, speziell der Code 0x0F bedeutet einmal positives ACK, einmal negatives ACK.

    Zusätzlich zu dieser Quittung können im 2. Byte 6 Flags übertragen werden, diese sind normal gemaß 4-8-Coding kodiert. Diese Flags sind für Lokdekoder und Zubehördekoder (Accessory) unterschiedlich.
  • Lokdekoder:
    Flags für Lokdekoder
    BitErläuterung
    5, 4Identifier: immer 0,0 bei Lokdekoder
    3
    0:keine weiteren Daten
    1:weitere Daten, vorhanden, Zentrale soll nochmal nachfragen
    2
    0:kein Fehler
    1:Dekoder hat einen Fehlerzustand
    1
    0:kein Consist
    1:Decoder hat eine aktive Consist
    0
    0:Lok bewegt sich vorwärts
    1:Lok bewegt sich rückwärts
  • Zubehördekoder:
    Flags für Zubehördekoder
    BitErläuterung
    5, 4Identifier: immer 1, 0 bei Zubehördekoder
    3
    0:keine weiteren Daten
    1:weitere Daten, vorhanden, Zentrale soll nochmal nachfragen
    2
    0:kein Fehler
    1:Dekoder hat einen Fehlerzustand
    1, 0Zustand des Ausgangs
    00:Fehlerhafter Zustand, keine Spule leitet
    01:Ausgang 1 aktiv
    10:Ausgang 2 aktiv
    11:Weiche im Umlauf

Adresse Senden

    Um die leichtere Identifikation einer Lok zu ermöglichen, wurde ein spontaner Address-Broadcast eingeführt. Diese Nachricht darf eine Lok im Kanal 1 ungefragt senden. Sie schreit also quasi ihre eigene Adresse aufs Gleis. Neben der Adresse ist auch das Übertragen der 'Routing Number' (=Inhalt CV874) möglich, damit kann die Lok ihren Wunsch nach einem bestimmten Fahrweg kundtun - z.B. als Güterzuglok.
    IDBedeutung
    0001Adresse, 1. Byte
    0010Adresse, 2. Byte
    0101Routing Number
    Die Adressbytes enthalten neben der Adresse auch noch die Adressierungsart der Lok, also ob die Lok mit kurzer oder langer Adresse oder mit der Consist angesprochen wird. Dies ist wie folgt kodiert:
    1. Byte 2. ByteBedeutung
    0,0,0,0,0,0,0,0 0,a6,a5,a4,a3,a2,a1,a0kurze Adresse, a6...a0 ist die Adresse (CV1)
    1,0,a13,a12,a11,a10,a9,a8a7,a6,a5,a4,a3,a2,a1,a0lange Adresse, a13...a0 ist die Adresse (CV17, CV18)
    0,1,0,0,0,0,0,0,0 a7,a6,a5,a4,a3,a2,a1,a0Consist, a17...a0 ist die Adresse (CV19)
    Dieses ungefragte Senden darf nach jedem Lokbefehl erfolgen, jedoch mit folgenden Ausnahmen:
  • Nicht nach Broadcast - also Adresse 0
  • Nicht nach Programmierbefehlen
  • Wenn der Decoder mit der eigenen Adresse angesprochen wird, soll er ein ACK schicken (anstelle des Gebrülls)
  • Diese ungefragte Übermittlung der Lokadresse hilft natürlich beim ersten Einsetzen der Lok, die Kakophonie bei mehreren Loks parallel auf dem Gleis verhindert hingegen eine sinnvolle Kommunikation. Deshalb kann dieses spontane Adresse-Senden mit Bit 0 in CV28 abgeschaltet werden.

Programmierrückmeldungen

    Programmierbefehle werden per BiDi bestätigt.
    IDBedeutung
    0000Wert der zuletzt geschriebenen / gelesenen CV
    Dies ist entweder eine 12-Bit Nachricht oder eine 24-Bit Nachricht. Die 12-Bit Nachricht kommt direkt nach der CV-Anfrage, die Bits 7 bis 0 geben den CV-Inhalt an. Diese Nachricht wird im Kanal 2 gesendet. Bei einer 24-Bit Nachricht folgen 12 weitere Bits (B19-B8), diese geben die CV-Nummer (mit Wertebereich 0..1023) an, Die 24-Nachricht muß nicht zwingend nach der CV-Anfrage kommen, sondern darf nach einem beliebigen DCC-Befehl für diese Adresse gesendet werden.

Geschwindigkeitsmeldungen

    Der Decoder meldet die aktuelle Geschwindigkeit und auch die aktuelle Last zurück.
    IDBedeutung
    0011
    0LLLLLLLLLLLLLL = Last gemäß Susi-Spec.
    1SSSSSSSSSSSSSS = Speed, normiert auf 128 Geschwindigkeitsstufen
    Es gibt Gerüchte, das diese Meldung durch Ist-Geschwindigkeit in km/h ersetzt wird, das könnte dann wie folgt aussehen:
    IDBedeutung
    0011Geschwindigkeitswert in km/h
    0 - 63speed = value / 2; dies ergibt die Werte 0; 0.5; 1; 1.5; 2 ... 31.5 km/h
    64 - 127speed = value - 32; dies ergibt die Werte 32; 33; 34 ... 95 km/h
    128 - 255speed = value - 32; dies ergibt die Werte 0; 4; 8; 12 ... 508 km/h

Dekoderzustand

    Der Decoder meldet die aktuelle Temperatur sowie Zustandsflags zurück. Hierfür gibt es zwei IDs.
    IDBedeutung
    0100Flags, siehe hierzu die Bits 3..0 bei den ACK Nachrichten. Bits 5,4 sind hier auf 7,6 zugeordnet, die zwischenliegenden Bits (5 und 4) sind als undefined reserviert.
    1000Temperatur
    0TTTTTTTTTTTTTT = Temperatur des Decoder in °C (CV880)
    1???????reserved

Dekoderanmeldung

    Der Dekoder meldet seine Unique-ID. Diese Nachricht soll nach dem Empfang einer UniqueID-Nachricht einer Zentrale abgesendet werden. Da hier eine sinnvolle Größe für die UniqueID bei 40 Bit liegt (8 Bit für Hersteller und weitere 32 Bit für die herstellerinterne Seriennummer), reicht weder Ch1 noch Ch2. Es wird also eine Kombinachricht für beide Cutouts gesendet.
    IDBedeutung
    0101?? Antwort auf eine Suchfrage, wird nur gesendet, wenn die Dekoder-ID größer oder gleich der angefragten ID ist.
    0111?? Anmeldung (Ch2), es folgen 32 Bit, diese kodieren: Decoder UniqueID (32 Bit).
    10aaBlock-CV-Antwort (Ch2): es folgen 32 Bit mit den Inhalten der angefragten CVs, die niedrigere CV kommt zuerst. aa bezeichnet eine Sequenznummer, diese muß zur Sequenzkennung der Anfrage passen. (Hinweis: das kommt als Ch2 Nachricht, ist aber bei einfachen UART-basierten BiDi-Detektoren nicht von einer Ch1 Nachricht zu unterscheiden.)
    1110Anmeldung (Ch2) für Lok-Decoder, es folgen 32 Bit mit der Seriennummer. Diese ergibt zusammen mit der Herstellerkennung eine UniqueID des Dekoders.
    1111Anmeldung (Ch1) für Lok-Decoder, es folgen 8 Bit mit der Herstellerkennung.
    1111Anmeldung (Ch2) für Lok-Decoder, es folgen 32 Bit mit der Seriennummer. Diese ergibt zusammen mit der Herstellerkennung eine UniqueID des Dekoders. Diese Antwort wird gesendet, wenn der Dekoder die neue Adresse nach einem Assign erhalten hat.

Links