Vnější aplikace
Celý projekt virtuální železnice je koncipován tak, že základní program simuluje prostředí krajiny s kolejištěm a s vlaky, které se chová zhruba podle běžných fyzikálních zákonů (odbrzděný vlak na svahu se samovolně rozjede, těžší vlak se rozjíždí pomaleji a brzdí obtížněji než vlak lehčí atd.). Impulsy ke konkrétním úkonům (jízda vlaku, přestavení výhybek či návěstí) ale přichází zvnějšku, z jiných aplikací (zatím pomineme některé řídicí prvky obsažené přímo v kolejišti - ty slouží vlastně jen k ladicím účelům a postupně budou zanikat). Vnější aplikace budou mít k dispozici veškeré stavové informace o dějích na kolejišti a budou disponovat prostředky k jejich ovlivňování (například mohou zjistit polohu a rychlost vlaku, mohou jej odbrzdit a rozjet, atd.). Vzájemná komunikace mezi kolejištěm a aplikacemi probíhá prostřednictvím tzv. zpráv.
Popis jednotlivých zpráv najdete v dokumentaci Řízení.txt. Popis není zdaleka úplný, neboť se zatím stále vyvíjí. Navíc některé zprávy nemusí být ještě implementovány.
Způsob implementace tohoto rozhraní lze nejlépe vyčíst z aplikace Protokol a Strojvůdce 1. I když jsou napsány v C++ pro MS DevStudio, lze je určitě přenést i do jiných jazyků.
Vnější aplikace lze spouštět samostatně z programu Železnice nebo jejich spuštění přiřadit do konkrétní kolejové sítě (sekce [Add-on]).
Aplikace přikládané k Železnici lze rozdělit do dvou kategorií. V první jsou obsaženy stálé doplňky programu Železnice a lze je používat i jako doplněk k vlastním aplikacím. Ve druhé kategorii jsou aplikace, které slouží jako příklad toho, jaké aplikace by bylo možné napsat a jak by je bylo možné napsat (obvykle je přiložen i zdrojový kód)
Do první kategorie spadají v tomto okamžiku:
Jejich další vývoj je pravděpodobný, rovněž bude snaha o zpětnou kompatibilitu (použitím novější verze Železnice a aplikací z první kategorie by neměly přestat aplikace stávající).
V druhé kategorii jsou nyní:
Jsou to opravdu jen příklady a je možné, že se do budoucna na nich už nebude pracovat. Nikomu se ale nebrání v tom, aby tak učinil sám.
Trochu mimo tyto kategorie spadá servisní program:
Ten slouží ke správě různých dat, která se pomalu kolem projektu Železnice začínají hromadit.
Od verze 0.5 pak existuje ještě jeden servisní program, a to:
Ten slouží k manipulaci s ortomapou České republiky, na které lze velmi dobře a přesně sledovat a označovat polohu kolejí všech železničních tratí. Tato aplikace však z důvodů v odkazu uvedených není dána k dispozici.
Od verze 0.9 přichází nová verze Ortomapy:
Tato verze používá mapové podklady volně dostupné na webu (konkrétně mapy.cz) a přístup k nim přes webové rozhraní Mapy API. Díky tomu je tato aplikace volně dostupná.
Tento program slouží jednak ke studijním, a jednak k ladicím účelům. K dispozici je zdrojový kód, který lze použít jako základ kódu vlastní aplikace. Protokol má za úkol odchytávat zprávy, které vysílá program Železnice a zapisovat je do souboru. Lze tak vysledovat, jaké správy a v jakém pořadí Železnice předává vnějším aplikacím.
Protože je možné zachytávat pouze zprávy, které posílá program Železnice a tedy ne zprávy od jednotlivých aplikací, byla zavedena speciální "přeposílací" zpráva, která obsahuje zprávu od aplikace poté, co ji Železnice přijala a zpracovala. Tu pak Protokol dokáže zachytit.
Hlavní okno této aplikace zobrazuje některé další užitečné informace. Jde především o četnost výskytu jednotlivých typů zpráv a notifikací. Slouží to především pro optimalizaci výměny zpráv při psaní nové aplikace.
Tato aplikace vpouští na požadovaná místa v požadovaném čase vlaky do kolejiště, poskytuje informace o jejich jízdním řádu (po opuštění předešlého místa zastavení přidělí vlaku místo a čas dalšího zastavení) a po dosažení některé z koncových kolejí vlak z kolejiště odebere. Informace čerpá ze souboru typu .jzr, jehož popis je uveden Formáty souborů.txt.
Jako další funkci poskytuje ostatním aplikacím na vyžádání okno zobrazující:
Nahrazuje původní aplikace Autoblok, Předvěsti a Přejezdy, které tímto zanikají. Tato aplikace nyní bude obsluhovat veškeré činnosti spřažené se základními funkcemi některých signálů. V současné době přibyla ještě funkce skupinového návěstí. Veškerá data jsou umístěna v souborech s příponou .ssd. Soubor lze aplikaci zadat na jejím příkazovém řádku s parametrem /d= (např. /d="pokus.ssd"). Pokud je Správce signálů spouštěn ze souboru kolejiště .trd, pak se příkazový řádek zadá v povelu c= :
a=Správce signálů c=|/d="pokus.ssd"|
Správce signálů obstarává činnost traťového autobloku, kdy je trať rozdělena na několik úseků, které návěstí řídí tak, aby do jednoho úseku mohl vjet nejvýše jeden vlak.
Každý blok traťových úseků je popsán v sekci [Block] jako posloupnost návěstí. Poslední návěstí bývá obvykle staniční vjezdové návěstí, které projíždějící vlak automaticky nastaví na stůj, ale uvolnit ho musí už někdo jiný (např. výpravčí stanice). Jako kuriozitu je možné použít povel c: za posledním návěstím bloku - tímto se autoblok uzavře do kruhu: poslední návěstí je pak řízeno návěstím prvním. Něco takového ve skutečnosti asi ani neexistuje (tak ještě na okruhu v Cerhenicích), ale uplatnit by se to dalo např. na modelovém oválu.
Postavit lze i oboustranný autoblok. Pro každý směr se vytvoří sekce [Block], každá z nich se pojmenuje povelem n= a tato jména se zároveň použijí v opačném směru v povelu r=. Volný směr na trati pak určuje pro každý směr zvolený tzv. řídicí signál - typicky první signál v bloku. Po jeho nastavení na volno se v protisměru nastaví na všech signálech stav stůj a ve volném směru volno. Řídicí signál ovládá jiná aplikace (např. Dispečer 2), která má za povinnost ověřit, že daný směr je opravdu volný - Správce signálů to sám nezajistí.
Autoblok je použit v příkladu Autoblok.trd, kde se na oválu pronásledují dva vlaky, ale autoblok jim nedovolí, aby rychlejší narazil do pomalejšího. Dalším uživatelem autobloku jsou kolejiště 170 a Gordikon.
Správce signálů obstarává propojení hlavní návěsti se svou předvěstí. V praxi to znamená, že nastavována je pouze hlavní návěst, zatímco předvěst se již sama nastavuje podle jejího stavu. Každá vazba je popsána na samostatném řádku v sekci [Distant signals] jako dvojice:
<id předvěsti>,<id návěsti>
Přejezdy
Správce signálů obstarává propojení jednotlivých signálů, které dohromady představují jedno traťové zabezpečovací zařízení, přejezd. Každý jednotlivý přejezd je popsán v samostatné sekci [Cross] pomocí položek:
n=<označení přejezdu>
s=<id signálu přejezdu>
c=<id čidla pro uzavření přejezdu>
o=<id čidla pro otevření přejezdu>
Položek s, c a o může být neomezené množství.
Skupinové návěstí
Správce signálů obstarává funkci skupinového návěstí. Protože Železnice funguje tak, že vlak vidí jen to návěstí, které je položeno na jeho koleji, je skupinové návěstí realizováno tak, že u všech kolejí, k nimž se skupinové návěstí vztahuje, je umístěno stejné návěstí opatřené atributem "nezobrazovat". Správce signálů zajistí, aby se stav ze skupinového návěstí přenesl i na tyto skryté návěstí. Protože vlak vidí i skryté návěstí, může se jejich stavem řídit, což navenek vypadá, jakoby se řídil stavem návěstí skupinového. Celou věc ještě lépe objasní následující obrázek:

Na odjezdu ze stanice stojí skupinové návěstí L. Jeho stav vidí ale pouze vlak na první koleji. Proto se na druhou a třetí kolej umístí návěstí L1 a L2, kterým se nastaví atribut "nezobrazovat", takže ve skutečnosti nebudou v kolejišti vidět. Pro program Správce signálů se pak zadá v sekci [Groups] řádek L=L1,L2, který zajistí přenos stavu.
Toto je jednoduchá aplikace, která především demonstruje způsob ovládání dějů na kolejišti z vnějšku. Program při spuštění zjistí, kolik je na kolejišti položeno vlaků, a každému z nich přidělí řídící panel:

Panely jsou celkem dost primitivní a odpovídají současným možnostem ovládání vlaků (s náznakem možností budoucích). Nejde o žádné věrné napodobování skutečnosti a proto je třeba k tomu taky tak přistupovat. Někdy v budoucnu by neměl být žádný problém napsat obdobný program na daleko vyšší úrovni.
Na panelu jsou dva posuvníky. Ten vlevo představuje brzdy, pravý akceleraci ("plyn"). Pokud chcete vlak rozjet, je třeba nejprve odbrzdit, pak zařadit směr jízdy a nakonec přidat plyn. Oproti předešlé verzi se vlak již chová vesměs jako ve skutečnosti: zrychlení odpovídá výkonu přenášeného na kola (ten je ale kromě hodnoty nastavené na posuvníku také závislý na okamžité rychlosti vlaku - to je taková dočasná finta, kterou řeším zatím neošetřenou adhezi kol - jinak by mi totiž vlak při rozjezdu na plný výkon vystřelil jako "namydlený blesk"). Je-li přenášený výkon nulový (zařazen neutrál), působící traťové odpory vlak brzo zastaví - tedy až na případ, že vlak jede z kopce.
Zobrazovaná rychlost je v km/h a odpovídá přesně měřítkům kolejiště (možno s přesnými stopkami ověřit).
Pro lepší orientaci, co je v daném okamžiku z vlaku na trati právě vidět, slouží dolní tři okénka: v prvých dvou se zobrazuje identifikátor nejbližšího a následujícího návěstí před vlakem, a ve třetím se zobrazuje číslo vlaku, který se nachází na stejné koleji. U návěstí navíc barevné pozadí ukazuje, v jakém stavu se návěst nachází (např. v uvedeném příkladu na návěsti m13.s2 svítí červená).
Zdrojový kód této aplikace dávám k dispozici. Může sloužit jak pro studijní účely, tak jako základ jiného programu.
Jako nová vlastnost přibyl mechanismus předávaného řízení zvoleného vlaku mezi Strojvůdcem 1 a Strojvůdcem 2. Konkrétně je tento mechanizmus použit v aplikaci Dispečer 2. V nabídce nad zvoleným vlakem je povel Řízení, který odebere řízení vlaku Strojvůdci 2 a spustí Strojvůdce 1 s řídicím panelem tohoto vlaku. Vlak lze nyní ovládat pouze tímto panelem. Po jeho uzavření si řízení vlaku opět převezme Strojvůdce 2.
Tato aplikace přiděluje vlakům na kolejišti virtuální strojvůdce, kteří pak vlaky řídí podle situace na trati. Reagují na různé signály - zastavují na červenou, přizpůsobují rychlost podle rychlostníků či při průjezdu stanicí apod., ve stanicích zastavují podle jízdního řádu a odjíždějí podle pokynů výpravčího.
Strojvůdce řídí vlak především pomocí povelů pro motor (akcelerátor) a brzdu. Ze známé vzdálenosti a okamžité rychlosti vlaku průběžnou manipulací s těmito povely dosáhne např. plynulého zastavení, rozjezdu apod.
Kromě signálů se dokáže strojvůdce řídit i výskytem jiného vlaku a přirazit k němu. Typicky jde o posunovou lokomotivu, která dokáže objet soupravu a připojit se z druhé strany.
Chování programu lze sledovat např. na vzorovém kolejišti Autoblok.trd. Dva vlaky na oválu jedou s různými rychlostmi (jsou různě těžké) a přitom se řídí povely signálů - soustavy návěstí uspořádaných do autobloku. Díky tomu rychlejší vlak nikdy nenarazí do toho pomalejšího.
Strojvůdce 2 bude i do budoucna standardním doplňkem programu Železnice, pomocí kterého bude možné vytvářet další uživatelské produkty. Příkladem může být Dispečer 1. Vstupy a výstupy vlaků do kolejiště obstarává Správce vlaků a jejich pohyb pak Strojvůdce 2. Kudy vlak pojede, to už určuje uživatel nastavováním traťové cesty, kdy jsou požadovaným způsobem přehozeny výhybky a rozsvěceny návěstí.
Tato aplikace slouží pouze jako příklad, jak na programu Železnice lze sestavit specializovanou aplikaci.

Dispečer 1 využívá služeb programu Železnice a dále aplikací Strojvůdce 2 a Správce programů. Dispečer 1 je spouštěn jako výchozí aplikace, která spustí Železnici, ta otevře soubor Dispečer 1.trd, ve kterém je mimo jiné pokyn pro spuštění Strojvůdce 2 a Správce programů. Dispečer 1 je aplikace jednoúčelová - je určena pro ovládání jediného železničního uzlu fiktivní stanice Frýdnava (stanice je sice inspirována skutečnou stanicí, ale jenom její částí. V určitém momentě jsem si uvědomil, že bych aplikaci nestihl v daném roce napsat, a tak z předlohy bylo použito jenom torzo). Vlaky, které Správce vlaků vpouští do hry, jsou popsány v souboru Dispečer 1.jzr a není jich příliš mnoho. Tahle aplikace opravdu není určena pro nějaké hraní, ale pouze k předvedení, co by se dalo všechno udělat. Skutečný dispečer se skutečným provozem by měl být v budoucnu až Dispečer 2. Ale o tom až dále.
Podrobnější popis aplikace Dispečer 1 najdete zde.
Aplikace Dispečer 1 už nebude dále vyvíjena a bude sloužit výhradně jako ukázkový příklad.
Zatímco Dispečer 1 sloužil jako ukázková aplikace, která měla demonstrovat možnosti propojení s programem Železnice, tohle je již plnohodnotná aplikace (i když není ještě zdaleka hotová), která má sloužit k řízení provozu ve stanicích či na celých traťových úsecích:

V programu se v několika krocích vytvoří řídicí panel, definují se v něm vztahy mezi objekty panelu (traťové cesty) i mezi objekty panelu a „skutečnými“ objekty v kolejišti vytvořeném v programu Železnice. V režimu testování se otestuje chování panelu v různých situacích a v režimu provozu pak v součinnosti se Správcem vlaků a Strojvůdcem 2 lze provozovat běžný železniční provoz.
Podstatný rozdíl od Dispečera 1 je v tom, že objekty na panelu lze editovat a celý panel uložit a následně používat. Při vytváření panelu se postupuje v následujících krocích:
V současné době již vznikla řada her, kde lze vytvořit a editovat dispečerský panel. Dispečer 2 se od nich liší především ve dvou bodech:
Podrobnější popis aplikace Dispečer 2 najdete zde.
Způsobu, jak se vytváří různé řídicí panely, se věnuje tato stránka. V současné době již existují tři rozsáhlejší projekty tratí, které jsou řízeny právě Dispečerem 2:
Trať 323 (Ostrava-Valašské Meziříčí)
Třetí z řady dispečerů slouží k automatické obsluze provozu stanice. Umožňuje tak vlakový provoz na kolejišti bez nutnosti zásahu obsluhy. Datové podklady pro řízení se vytváření v Dispečeru 2. Jde vlastně o řídicí panel (dokonce lze jeden a ten samý panel používat jak v Dispečeru 2, tak v Dispečeru 3), který je rozšířen o popis tzv. průjezdů. Protože však některé objekty v Dispečeru 3 nemají žádnou funkci (stavby, popisy, zarážky apod.), lze je v rámci zjednodušení dat vynechat. Často jsou ale ponechávány pro lepší přehlednost panelu.
Při řízení provozu se Dispečer 3 projevuje především dispečerským deníkem:

Podrobnější popis aplikace Dispečer 3 najdete zde.
Tento program umožňuje si udržet jakýs-takýs přehled nad postupně se hromadícími objekty v celém projektu Železnice. Slouží k nastavování, prohlížení, editování a případně spouštění jednotlivých objektů (kolejišť, vozů, vlaků signálů atd.):
Od posledku se tato aplikace značně rozrostla, a proto je její podrobný popis uveden samostatně.
Připravované vnější aplikace
V současné době mám docela konkrétní představu o vytvoření těchto aplikací:
Generátor - je doplňková aplikace pro Dispečer 2, ale můžou ji využít i jiné aplikace. Generátor generuje náhodný vlakový provoz (např. nákladních a mimořádných vlaků), který podstupuje Správci vlaků. Ten vygenerovaná data spolu s pravidelnými jízdními řády používá ke vstupu a výstupu vlaků na kolejiště a k jejich zastavování ve stanicích, kde mají zastavit.
Strojvůdce 3 - modifikace Strojvůdce 2. Stávající řešení se pomalu začíná ztrácet v síti všemožných podmínek pro vedení vlaku, takže jsem se rozhodl, že to celé udělám jinak. Strojvůdce 3 bude pracovat s databází popisující, jak má strojvůdce reagovat na různé situace na trati, a to tak, že bude opakovaně vyhodnocovat stav, v jakém se vlak nachází a porovnávat ho s podmínkami v databázi. Podmínky bude možné operativně měnit, což byl doposud veliký problém.
To je nejbližší budoucnost. Jinak si celkem dobře dovedu představit aplikaci, která zobrazí staniční dispečerský panel, propojí ho se stanicí v kolejišti a řídí její provoz. Vytvořit by šlo aplikace, které budou řídit určité mise. Po realizaci 3D vlastností kolejiště bude možné napsat aplikaci simulující pohled z kabiny strojvůdce. A bude spousta jiných možností...
Naposledy změněno 14-09-17