Digitální řízení modelové železnice – DCC

DCC je zkratkou anglického názvu Digital Command Control. Autorem tohoto způsobu řízení je společnost pro modelovou železnici (National Model Railroad Association – NMRA), považovaná za organizaci, vytvářející standardy pro modelovou železnici. Pro vysvětlení co je příkazové ovládání je dobré znát historické pozadí.

Tak jak to bylo…

Tradičně je rychlost a směr vlaku řízena změnou napětí a polarity v kolejích. Čím větší napětí, tím rychleji lokomotiva jede, čím menší, tím jede pomaleji. Pokud je na pravé kolejnici kladný pól napětí (z pohledu lokomotivy), lokomotiva jede dopředu, pokud je na ní záporný pól, lokomotiva jede opačným směrem.

Blokové řízení

Jak ale ovládat na stejné koleji více než jeden vlak? Železniční modeláři vymysleli mnoho důmyslných způsobů ovládání většího množství vlaků. Základní používanou metodou je blokové ovládání. Modelové kolejiště je rozděleno do několika elektrický nezávislých bloků; každý z nich může ovládat jednu soupravu. Ovladač (reostat) se používá pro řízení jednotlivých vlaků, pole přepínačů pak připojuje každý blok. Tento způsob ovládání je nazýván vozovým ovládáním (v češtině se moc neujalo).

Pravděpodobně nejgeniálnější metoda vozového ovládání je takzvané progresivní vozové ovládání. Jak se vlak pohybuje po kolejišti, propojení mezi ovladačem a úsekem bylo automaticky posouváno pomocí relé na další blok a současný blok se uvolňoval pro použití následujícím vlakem.

Pro malá kolejiště s jedním nebo dvěma vlaky bylo blokové řízení jednoduché a přímočaré. Pro větší a rozlehlejší kolejiště se jednalo o ohromný úkol.

Příkazové ovládání

Dalším vývojovým krokem je příkazové řízení. Příkazové řízení je způsob ovládání jednotlivých lokomotiv (nebo vlaků) ve stejnou dobu na stejné trati. První systém příkazového řízení byl systém Astrac, vyvinutý společností General Electric v roce 1964.

Se vzrůstem elektronického průmyslu rostl se rozšiřovaly metody příkazového řízení. Dva z nejpopulárnějších systémů byly Onboard system firmy Keller Engineering’s, a Dynatrol system firmy PSI. Oba systémy používaly audio tóny k řízení každé lokomotivy. Oba tyto systémy pracovaly dobře, ale uživatel byl stále omezen v počtu lokomotiv, které mohl ovládat.

Je-li napodobování (kopírování) upřímnou formou lichocení, pak se musí produkty CVP červenat. V roce 1978 časopis Model Railroader (Železniční modelář) publikoval sérii článků jak si vytvořit svůj vlastní řídící systém. Tento systém, nazvaný CTC-16, může ovládat až 16 různých vlaků, všechny na stejné koleji. Mnoho dalších společností používá stejné metody pro řízení 32 nebo 64 vlaků.

Problém všech těchto systémů byl nedostatek standardizace. Neexistovala společná řeč mezi systémy (s výjimkou CTC-16). Na konci osmdesátých let minulého století NMRA začala zkoumat řídící systémy, aby zjistila, jestli mezi nimi existuje dostatečná podobnost pro vytvoření standardu.

Digitální příkazové ovládání

Než aby znovu vynalézala kolo, pracovní skupina DCC prostudovala všechny komerčně dostupné systémy příkazového řízení. Byly přijaty návrhy od firem Keller a Märklin. Pracovní skupina zjistila, že pro vytvoření nového standardu řízení je nejvhodnější systém firmy Lenz Elektronik, který byl v té době použit firmou Märklin pro dvoukolejnicové soupravy. Systém Lenz nabízel nejlepší řešení elektronické signalizace a kladl nejmenší překážky dalšímu rozvoji.

Pracovní skupina  NMRA systém upravila tak, že umožňuje ovládání až 10 000 lokomotiv, řídit výhybky a celé souprav. Pracovní skupina DCC stále pokračuje v objasňování a rozšiřování stávajících norem a doporučených praxí podle potřeby.

Dejte mi do ruky jedničku a nulu a já popíši svět

Nyní už víme, že je řeč o digitálním signálu pro řízení modelové železnice. Také víme, že se jedná o příkazové řízení.
Z toho se dá usoudit, že se bude jednat o techniku zasílání příkazů jednotlivým mašinkám na kolejišti. Takový příkaz pravděpodobně bude mít podobnou formu jako: „Mašinko číslo XX rozjeď se na rychlost YY“.
Je zde však jeden drobný problém – mašinka stojí na dvou kolejnicích a krom příkazů k ní potřebujeme dopravit také napájení. To je poměrně málo vodičů.

Inspirace přišla pravděpodobně ze sběrnice RS485. Máme dva vodiče, po kterých přenášíme informaci ve formě rozdílového signálu. Pokud by tedy byl signál dostatečně proudově dimenzovaný, bylo by možné jej použít také pro napájení. Trochu problém je, jak zajistit bezpečné rozeznání jedničky a nuly v případě, že někdo postaví mašinku na koleje obráceně. Tím dojde k prohození polarity. Proto musí být signál takového charakteru, aby byl symetrický a v případě že je mašinka na kolejích obráceně, nedošlo k poškození jeho logiky. Nezbývá než použít přepínání v čase. Proto je logická jednička prezentována jako kladný signál v pravé kolejnici po dobu 58µs (přesněji 55 až 61µs) a následně kladný signál v levé kolejnici také po dobu 58µs. V druhé kolejnici je po tuto dobu přítomná záporná část signálu (nebo 0V chcete-li). Za nulu se pak považuje kladný signál v pravé kolejnici po dobu rovnou nebo větší než 100µs (přesněji 95 až 9 900µs) a následně kladný signál v levé kolejnici po dobu 100µs (i zde platí rozsah 95 až 9 900µs).

Asi by bylo dobré vysvětlit, proč je pro logickou nulu definován tak dlouhý rozsah. Je to proto, že původní návrh počítal se zachováním zpětné kompatibility pro běžné (ne- digitální, nebo chcete-li analogové) mašinky. Ty pak považují digitální signál za PWM modulaci a prodloužení délky první nebo druhé poloviny této logické nuly představuje velikost plnění tohoto PWM signálu. V současnosti se už od požadavku souběžného provozu obou systémů ustoupilo, protože na kolejištích se pohybuje velké množství digitálních lokomotiv a tím pádem jsou kladeny větší nároky na přenosovou rychlost.

signal

Příklad DCC signálu jak jej uvidíte na osciloskopu, pokud jej připojíte ke kolejnicím

Dobrá, písmena už máme, ale co slova a věty?

Z popisu definice přenosu logické jedničky a nuly je zřejmé, že není možné, aby na sběrnici bylo „ticho“, protože pokud by nebylo přítomné napětí, vlak by neměl napájení a nikam by nedojel. Pokud by zůstal jakýkoli ustálený stav, znamenalo by to, že se jedná o polovinu prodloužené nuly.

Jak tedy poznat, kdy komunikace začíná?

To je velmi důležitá otázka. Zejména proto, že je možné, že se lokomotiva dostane na koleje až někdy v polovině komunikace. Vzhledem k tomu, že lokomotiva po kolejích jezdí a nadskakuje si na výhybkách, pak bude pravděpodobně docházet ke ztrátám a opětnému obnovení spojení.

Proto je definovaný začátek datagramu (nebo věty pokud máte raději tradiční češtinu) označovaný v angličtině jako „preamble“ (odpovídající české slovo je „preambule“; nechápu sice co je na něm českého, podřídím se ale nátlaku ústavu pro jazyk český a budu ho používat). Tato preambule je více než 10 jedniček přijatých těsně za sebou (centrála jich musí odeslat minimálně 14).

Celkem logicky za takovouto preambulí musí následovat bit s hodnotou logická nula, který ukončuje preambuli. Tento bit se nazývá „bit začátku paketu“ (nesprávně označovaný jako separátor).

Bezprostředně za tímto bitem následuje bajt, který určuje komu je zpráva určena – mluvíme tedy o datovém bajtu adresy. Jedná se o běžný osmibitový bajt. Za ním zase musí následovat separační bit s hodnotou nula, mimo jiné proto, aby nemohlo vzniknout větší množství jedniček v řadě za sebou. Tento bit se označuje jako start bit datového bajtu. (někdy také jako separátor).

Pak následuje další datový bajt. Je možné tvořit pakety s několika datovými bajty (norma uvádí až 6) následované vždy bitem s hodnotou logické 0.

Poslední bajt slouží pro kontrolu správnosti přeneseného paketu. Jedná se o prostý XOR všech předchozích bajtů v paketu (nebo chcete-li – XOR všech bajtů včetně kontrolního musí být roven 00).

Za tímto bajtem je bit, který ukončuje paket a jeho hodnota je logická 1. Podle toho se pozná, že to co bude následovat je další paket. V programech se často setkáváme s tím, že je tento bit jakoby opomíjen a dochází k prodloužení preambule o jeden bit. Tato úvaha funguje v případě, že nepoužíváme žádnou alternativní komunikační metodu, protože čas pro tuto alternativní komunikaci je právě až za tímto bitem a před bity další preambule.

paket

Příklad kompletního DCC paketu (lokomotiva č.55 pojede dopředu rychlostí 6)

Jak je to s adresováním?

Z předchozího popisu je zřejmé, že je potřeba jednotlivá zařízení kolejiště adresovat. Norma předepisuje tvorbu adresy pro různá zařízení. Tento předpis je důležitý zejména proto, aby se podpořila „stavebnicovost“ systému  a aby uživatel nebyl zmaten potřebou komplikovaného adresování.
Adresní prostor je rozdělen stupňovitě, jak je běžné při tvoření protokolů podobného typu (displaye s řadičem HD44780, instrukce pro CISC procesory, …).
Pokud vznikne reálná potřeba použití většího množství adresních bitů pro danou adresu, přidají se do následujícího bajtu.

Adresa Rozsah Použití
00000000 0 Broadcast – paket pro všechny dekodéry
0AAAAAAA 1-127 Lokomotivní (multifunkční) dekodéry se 7 bitovou adresou
10AAAAAA 128-191 Dekodéry příslušenství (s 9 nebo 11 bitovou adresou)
110AAAAA + 11100AAA 192-231 Lokomotivní (multifunkční) dekodéry se 14 bitovou adresou
11101AAA 232-254 Vyhrazeno pro budoucí použití
11111111 255 NO-cast – idle packet (paket pro nikoho)

Jako adresa daného zařízení se prezentuje pouze adresa tvořená bity „AA..A“, nikoli její povinný prefix. V adresním prostoru je několik zajímavostí a teoreticky také nejednoznačností. Je potřeba si uvědomit, že protokol byl vytvořen s ohledem na velikost displaye na ovladači, a také to, že jeho autor nerad počítal od nuly (to druhé se projevuje jako přítěž v protokolu celkem často).
Proto se pro lokomotivy s krátkou (7 bitovou) adresou používá dvouznakový display a označují se 01-99, lokomotivy s dlouhou (14 bitovou) adresou používají čtyřznakový display a označují se 0001-9999 a tak podobně. Je tedy teoreticky možné, aby existovala lokomotiva s krátkou adresou například 05 a současně s ní lokomotiva s dlouhou adresou například 0005. Tyto případy norma řeší jednoduše – doporučuje autorům tyto kombinace nepoužívat a nemást uživatele.

Například zařízení typu Lenz XpressNet mají pevně definováno, že adresa 1-99 se interpretuje jako krátká bez ohledu na to, jestli je zobrazená na dvoumístném a nebo čtyřmístném display, adresa 100-9999 se interpretuje jako dlouhá.

Zařízení typu Digitrax LocoNet interpretují jako krátkou adresu 1-127 a jako dlouhou 128-9999.

V adresním prostoru je zvláštní adresa 11111111b (255d 0xFF). Tato adresa je poměrně důležitá, ačkoli přenáší pakety, které nejsou určené pro nikoho. Pro tuto adresu je definovaný jediný typ paketu, označený jako idle. Tento paket má tvar: <preambule> 0 11111111 0 00000000 0 11111111 1
Jeho význam spočívá ve dvou základních věcech. Jedna je taková, že může nastat situace, kdy centrála nemá vůbec co říct (to nastává zejména těsně po zapnutí), a přitom sběrnice neumožňuje přenášet „nic“, takže se používá tento paket. Druhá vlastnost tohoto paketu je, že obsahuje velké množství nul, takže se hodí pro vytváření signálu s prodlouženou nulou pro provoz analogové lokomotivy.