DCC

    Hier folgt eine kurze Beschreibung des DCC Standards, insbesondere auch von Neuerungen. Zum genauem Studium sei auf die NMRA-Normen verwiesen. Tiefergehende Infos finden sich auch bei den Erläuterungen zur Software der Zentrale.
    Im Februar 2011 wurden neue Erweiterungen angekündigt: ein neuer DCC-Befehl, der neben der Geschwindigkeit auch alle Funktionstasten gemeinsam überträgt, statt einzeln. Weiterhin wurden neue Befehle zum blockweisen Lesen und Schreiben von CV-Daten definiert.

Übersicht

    Bei DCC wird eine 1 als zwei schnelle Flankenwechsel (nach je 58µs), eine 0 als zwei langsame Flankenwechsel (nach je 116µs) übertragen, es is also quasi eine FM, jedoch mit variabler Symboldauer. Innerhalb des seriellen Datenstromes erfolgt das Framing mittels einer Preambel bestehend aus mind. 10 Einsbit, gefolgt von 8-bit organisierter Nutzlast, die durch je eine Null getrennt werden. Am Ende einer Nachricht folgt ein Paritybyte, gefolgt von einer 1 (anstelle der 0) zum Markieren des Endes.
    Die Kodierung ist nicht sonderlich effektiv, aber einfach zu detektieren und man muß auch die Zeit berücksichtigen, zu der das entstanden ist.

    Die Nutzlast kodiert das übertragene Kommando, Datenlängen von 2 bis 13 Byte sind möglich. Das erste Byte legt die Kommandoklasse fest:
    1. ByteBedeutung
    0Reset oder Lok-Broadcast
    1..111Lokbefehle (kurze Adresse)
    112..127Service Mode (Programmierung)
    128..191Zubehördekoder
    192..231Lokbefehle (lange Adresse)
    232..254Reserviert
    255Idle
    Die Präambel, welche zum Synchronisieren von Nachrichten dient muß mind. 10 Einsbits lang sein, die Zentrale muß gemäß NMRA 14 Einsbits senden. Bei der Einführung der bidirektionalen Kommunikation hat man (im Prinzip) die ersten 4 Bits der Präambel durch eine Austastlücke ersetzt. Leider gibt es am Markt eine Reihe von Dekodern, welche die Präambel erst ab 11 Einsbits erkennen und zudem nach einer Austastlücke noch 'etwas' Zeit brauchen. Daher ist ab 2011 für den Einsatz von railcom® die Verwendung von 12+4=16 Einsbits auf Seiten der Zentrale vorgeschrieben.

Physikalische Parameter

  • Gleissignal:
    Rechtecksignal, mind. 7V Hub, max. 22V Hub. Nominalspannung bei H0 soll 13,5V sein (damit sich nach den Gleichrichterdioden 12V für den Motor ergeben).
    Die Flanken müssen den Bereich von -4V bis +4V monoton und mit mind. 2,5V/µs Slewrate durchqueren. Das Rechtecksignal soll gleichspannungsfrei sein (Ausnahme Zerostretching, also verlängerte Null-Phase zum Erzeugen eines gezielten Gleichanteils; Zerostretching verträgt sich aber nicht mit railcom®
  • Dekoderanforderungen:
    Spannungsfestigkeit: +/- 27V (24V bei Spur N).

Lokbefehle

    Adressebestimmung:
    Bei kurzer Lokadresse ergibt sich die Adresse aus dem 1. Byte. danach folgt ab dem 2. Byte die Befehlsart. Bei langer Lokadresse werden im 2. Byte weitere Bits der Lokadresse übertragen, die Adresse ergibt sich zu: (Byte1 & 0x3F) << 8 ) | Byte2. Es sind also 10.240 Adressen möglich, wobei die Adresse 0 als Broadcast an alle Loks reserviert ist.

    Hierbei gibt es jedoch Einschränkungen im praktischen Betrieb:
  • Im Bereich 1..111 überlappen sich lange und kurze Adresse - es muß also seitens der Zentrale entschieden werden, ob man diese Lok lang oder kurz anspricht. Oft wird diese Grenze bei 99 gelegt: bis Adresse 99 kurze Adresse, danach lange Adresse.
  • Viele Zentralen und Bediengeräte haben nur max. 4 Stellen zur Eingabe. Die Adressen 10000 bis 10239 sind dann nicht ansprechbar.
  • Nach der Adresse folgt die Operation Instruction, also der Befehl, was diese Lok machen sollen. Die drei MSBs dieses Bytes legen den Typ fest:
    OperationBedeutung
    0Decoder and Consist Control
    1Extrabefehl (=Advanced Operation Instruction), die restlichen 5 Bit geben den Befehlstyp an.
    (z.B. 0x1F -> 126 Fahrstufen, die Geschwindigkeit folgt im nächsten Byte
    2Geschwindigkeitsbefehl, 28 Fahrstufen, rückwärts
    3Geschwindigkeitsbefehl, 28 Fahrstufen, vorwärts
    4Lokfunktionen F4 bis F0
    5Lokfunktionen F8-F5 sowie F12-F9
    6Erweiterte Lokfunktionen und Binary State Control
    7CV-Zugriff (PoM)

Analog Output Kommando

    Dieses Kommando gehört zu den sog. Advanced Operation Instruction (001).
    Format001CCCCC 0 FFFFFFFF 0 DDDDDDDD 0 [XOR]
    CCCCC = 11101Analog Function - Instruction: "11101" bedeutet Kontrolle der Analogfunktion gemäß Tabelle.
    FFFFFFFFEnum der Funktion
    DDDDDDDDWert der Funktion
    Damit werden folgende Analogfunktionen angesteuert:
    Enum (FFFFFFFF)Analogfunktion
    00000001Volume Control
    xxxxxxxxreserviert

Programmiersperre (Decoder Lock)

    0 00000000 0 11111001 0 0aaaaaaa 0 EEEEEEEE 1

    (Das ist ein Broadcast (Lok 0) mit 0xF9 (also ein PoM-Kommando));
    Nur der mit aaaaaaa adressierte Lokdekoder führt fortan Servicebefehle aus, alle anderen Dekoder ignorieren fortan Programmierbefehle; dieses Ignorieren muß auch über einen Aus-Ein-Zyklus hinweg beibehalten werden. (Anmerkung: das sollte eigentlich auch für programmierbare Zubehördekoder entsprechend definiert sein - aber sowas gibt es ja bei der Firma, welche das vorgeschlagen hat, nicht :-( ).
    Der 'Decoder Lock' wird wieder aufgehoben, wenn wieder normale DCC-Befehle empfangen werden.

    Sinn und Zweck dieses Befehls ist es, in einer einfachen Umgebung ohne Programmiergleis die Lokadresse ändern zu können und dabei andere Loks am Gleis belassen zu können. Dieser Befehl ist aber nicht verpflichtend. (Quelle: RP-923, Appendix B).

PoM CV-Lesen

    Für das Lesen am Hauptgleis gibt es einem Befehl (NMRA RP 9.2.1), hier wird die CV (bzw. ein Bereich von CVs) adressiert und die gewünschte Aktion gewählt.
    OperationBedeutung
    1111ccccPoM-Command, short form: cccc bezeichnet das Zielregister:
    0000Not available for use
    0010Acceleration Value (CV#23)
    0011Deceleration Value (CV#24)
    0100Programmieren und Einstellen der langen Adresse. Es wird CV17 and CV18 gleichzeitig gesetzt, auch das Bit 5 in CV29.
    0101Einstellen des Indexregisters CV31 (high) und CV32 (low) gleichzeitig.
    1001See RP-9.2.3, Appendix B
    1110ccAAPoM-Command, long form: cc bezeichnet die Operationsart, aa sind die MSBs der CV-Adresse:
    ccBedeutung
    00Blockread, es werden 4 Bytes in Folge gelesen.
    01a) Verify, es folgen aaaaaaaa dddddddd. AA und aaaaaaaa geben die CV-Adresse an, gezählt wird ab 0. dddddddd ist das zu vergleichende Datum. Wenn per BiDi gelesen wird, ist dddddddd = 0.
    b) Block-Read (z.B. nach einer Direktadresse):
    Es folgen 3 Bytes: 2 Indexregisterwerte (H, L) und ein Offset innerhalb der per Index adressierten Page. AA bezeichnet hier dann eine Sequenzkennung, welche bei der Antwort wieder zurückzugeben ist.
    Die Indexregister H und L korrespondieren mit CV31 und CV32.
    10Bitoperation, es folgen aaaaaaaa 111cdbbb, c=opcode: 0=rd, 1=wr; d=data, bbb=bit position
    11Write, es folgen aaaaaaaa dddddddd

Kommandos für BiDi *)

    Zum Veranlassen von speziellen BiDi Aktionen (wie z.B. Anmelden) wird das IDLE Kommando erweitert.
    Format11111111 0 EEEEEEEE 0 {[Parameters] 0}[XOR]
    EEEEEEEE bezeichnet eine Befehlnachricht, diese wird wie folgt kodiert:
    Enum (EEEEEEEE)Bedeutung
    0x00Standard Idle Kommando (wie bisher)
    0x01Zentralenkennung (UniqueID)
    0x02Dekoder Suche
    0x03Direktzugriff
    0x04Sitzungsadresse zuweisen
  • 0x01: Zentralenkennung (UniqueID)
    Mit diesem ENUM soll eine Zentrale periodisch ihre UniqueID aufs Gleis senden. Diese Unique dient zum einen für Decoder zum Erkennen der Zentrale sowie als Anmeldeaufforderung.
    0xFF 0 0x01 0 MAN 0 ZID3 0 ZID2 0 ZID1 0 ZID0 0 SNUM 0 [XOR] 1
    MAN: bezeichnet die Herstellerkennung laut NMRA.
    ZID3-0: ist eine 32-Bit breite Zentralenkennung (UniqueID)
    SNUM: eine fortlaufende Sessionnummer (Neuanmeldezähler)
  • 0x02: Dekoder Suche (ID Search)
    Mit diesem ENUM versucht eine Zentrale die Vereinzelung von Dekodern, welche sich parallel angemeldet haben, um die entstehende Kollision im Rückmeldekanal aufzulösen.
    0xFF 0 0x02 0 DVID 0 DID3 0 DID2 0 DID1 0 DID0 0 [XOR] 1
    DVID: bezeichnet die Herstellerkennung des Dekoders laut NMRA.
    DID3-0: ist eine 32-Bit breite Dekoderkennung (UniqueID)
    Nur dienigen Dekoder, deren ID größer oder gleich schicken eine Antwort.
  • 0x03: Direktzugriff
    Mit diesem Befehl lassen sich Dekoder über die UniqueID des Dekoders ansprechen. Hierzu wird dem normalen DCC-Befehl eine 'Escape'-Sequenz vorangestellt, welche die normale Adressierung ersetzt.
    0xFF 0 0x03 0 DVID 0 DID3 0 DID2 0 DID1 0 DID0 0 {DCC-opcode} 0 [XOR] 1
    DVID: bezeichnet die Herstellerkennung des Dekoders laut NMRA.
    DID3-0: ist eine 32-Bit breite Dekoderkennung (UniqueID)
    DCC-opcode: ist der DCC-Befehl ohne den normalen Adressteil (hier wird ja über die Dekoder-UniqueID adressiert).
  • 0x04: Sitzungsadresse zuweisen
    Mit diesem Befehl wird einem Dekoder (welcher über die UniqueID des Dekoders addressiert wird) eine Adresse für diese Sitzung zugewiesen.
    0xFF 0 0x04 0 DVID 0 DID3 0 DID2 0 DID1 0 DID0 0 ADDRH 0 ADDRL 0 [XOR] 1
    DVID: bezeichnet die Herstellerkennung des Dekoders laut NMRA.
    DID3-0: ist eine 32-Bit breite Dekoderkennung (UniqueID)
    ADDRL, ADDRH: ist die Sitzungsadresse, welche diesem Decoder zugeweisen wird. ADDRH enthält in den beide MSB die Unterscheidung, ob Weichendekoder oder Funktions- bzw. Lokdekoder zugeweisen wird. Für Lokdekoder ist das so kodiert wie CV17/CV18, beim Highbyte wird 192 addiert. (mit 0xC0 verodert).
    Dieser Befehl wird vom Dekoder mit einer BiDi-Nachricht mit der UniqueID beantwortet.

Uhrzeit **)

    DCC hat im Gegensatz zu anderen Digitalsystemen bisher noch keine Übertragung einer beschleunigten Uhr für die Modellbahnzeit.
    Sinnvoll ist diese Erweiterung z.B. für komplexe Funktionsdekoder (Raumlicht, Beleuchtung), welche ihr Verhalten je nach Uhrzeit ändern können. Auch (teil-) autonome Steuerungen (wie z.B. lokale Kirmeskontrolle) können so leichter an die Anlagensteuerung gekoppelt werden. Beispiele sind bewegte Objekte, welche nur zu bestimmten Tageszeiten agieren.

    Auch die Helligkeit von Lichtobjekten kann sich nach der Uhr richten - diese kann man in der Nacht abdimmen. Glockenschlag, Bahnhofsuhr sind weitere Ideen, welche eine Uhr benötigen.
    Zudem erlaubt ein Zeitcode innerhalb DCC auch die bessere Synchronisation mehrerer Anlagenteile. Über die optionale Wochentagsfunktion lassen sich z.B. am Wochenende andere Aktionen durchführen, z.B. Kirchenläuten.

    Zur Übertragung der Modellbahnuhrzeit wurde diese Erweiterung der RP9.2.1 vorgeschlagen:
    Format00000000 0 11000001 0 TCODE0 0 TCODE1 0 TCODE2 0 TCODE3 [XOR]
    00000000Broadcast
    11000001Feature Expansion Nummer 00001
    TCODE1, 2, 3 oder 4 Byte mit Zeitinformationen
    00mmmmmmmmmmmm = Angabe der Minute, Wertebereich 0...59.
    100HHHHHHHHHH = Angabe der Stunde, Wertebereich 0...23.
    01000wwwwww = Wochentag, 0=Montag, 1=Dienstag, ... 6=Sonntag.
    110ffffffffff = Uhrbeschleunigungsfaktor, fffff=0 heißt Uhr angehalten.
    Die Daten bestehen jeweils aus einem 2 Bit Feld (Typ) und 6 Bit Wert. Die Zentrale sendet das Zeitpaket jede Modellbahn-Minute, sie kann aber Zeitpakete bei Bandbreitenknappheit auslassen. Auch müssen in einem Paket nicht alle TCODEs enthalten sein.
    Zu jeder vollen (Modellbahn-)Minute wird von der Zentrale die Uhrzeit gesendet, der Befehl wird nicht wiederholt. Wenn die Anlage angehalten wird, soll der Uhrbeschleunigungsfaktor 0 gesendet werden.
    Anmerkungen:
      -  Die OpenDCC Zentrale hat diesen Befehl bereits implementiert.
      -  die Kodierung der Datenbytes (die beiden MSBs) entspricht der Selektrix-Konvention.
      -  entsprechende Busbefehle (sowohl bei Xpressnet als auch bei der IB) wurden auch definiert.

Dekoder Rücksetzen

    Es kann manchmal erforderlich sein, einen Dekoder wieder auf seine Werkeinstellung zurückzustellen. Hierzu ist folgendes Verfahren definiert worden:
      long-preamble 0 01111111 0 00001000 0 01110111 1
    Das ist eigentlich ein Write im Registermode auf die CV8. Leider dauert das Beschreiben der Datenspeicher im Dekoder i.d.R. länger als für eine Programmierzugriff vorgesehen, deshalb soll der Dekoder sich erst mal nur ein Flag setzen und bei folgenden Power-Up Vorgängen das Beschreiben des Urzustandes wieder herstellen. Es kann also sein, das nach einem Factory Reset für eine kurze Zeit nichts mehr geht. Während dieser Zeit soll CV8 auf 255 geblockt sein.
    Manche Dekoder fordern nicht nur einen Write, sondern auch einen bestimmten Wert.
    Fußnoten:
      *) bezeichnet DCC-Erweiterungsvorschläge, die nicht von der NMRA standardisiert sind.
      **) diese Erweiterung wurde vom VHDM im Mai 2011 als Standarderweiterung verabschiedet.