RailRoad & Co TrainController 9(8,10) Gold - Tipy a triky
Stále zjišťuji, že používání programování, proměnných atd., je ve velmi malé oblibě. Zřejmě obavy z neznámého, podceňování vlastních schopností, považování za zbytečnost, to budou asi hlavní příčiny. Občas nebude na škodu, ukázat nějaké triky a fígle, které lze udělat velmi jednoduše a kterých rozhodně není nutno se bát.
Popisované funguje ve verzích 9 a 10 Gold, příp. i v "osmičce", kde to však prověřováno nebylo. Protože software, tedy TrainController, na hardwaru prakticky není závislý, následující poznámku není třeba víceméně brát na zřetel.
Popisované je k prohlédnutí v layoutu ke stažení. Soubor se jmenuje lokopin_9gb3_20230520_triky9g_navrat_kontext.yrrg
Důrazně upozorňuji, že popisuji systém Lenz, a že jiné systémy mohou mít stejné nebo podobné jen dílčí části !!! V článku Komponenty jsou detailnější informace o některých použitých prvcích.
Tady je úvodem možno nastínit požadovaný scénář. Jezdí automatika, několik plánů najednou. Spouští je Timetable / Jízdní řád. Pro ukončení, návratu do výchozích pozic, stačí jedné: Vypnout/zastavit hodiny. Jenže k těm několika plánům lze ještě pustit třeba Spontaneous run / Spontánní jízda (dále jen SR), a ta se zastavením hodin neukončí. V tomto případě je nutno zastavit hodiny, počkat až se ukončí všechny plány, pak zastavit v libovolném bloku vlak jedoucí pod SR, a pak poslat tento vlak do výchozího postavení. A právě tento návrat je popsán dále. Detailně je to pak zpracováno v odstavci Ukončení.
Požadavek: Vlak/Loko z libovolného místa kolejiště (bloku) přesunout do daného (např. výchozího) místa (bloku).
Ručně to je brnkačka, stačí na to AutoTrain. Automaticky, programově, na základě nějaké situace, to už je poněkud složitější. Ale, jak bude vidět, ne zas tak moc. Probereme to pěkně krok za krokem.
1. Nejprve vytvoříme 3 proměnné. Jedna bude sloužit na hodnotu dané loko, další dvě pak na startovní a cílový blok. Jak se proměnné vytvoří je popsáno, vč. naplnění, pokud je třeba.
Proměnná | Název | Typ | Typ objektu | Rozsah |
1 | MOT_Loko_G | Objekt | Vlak | globální |
2 | MOT_Blok_Start_G | Objekt | Blok | globální |
3 | MOT_Blok_Cil_G | Objekt | Blok | globální |
Pozn.: Rozsah je zde globální proto, aby bylo možno např. v Průzkumníkovi zobrazit hodnotu proměnných. Pokud by bylo požadováno spouštění této celé transakce vícenásobně, současně, bylo by lepší nastavit Rozsah lokální.
2. Do Operace (Flagmanu, Makra, Tlačítka...) vložíme následující sled příkazů:
Písmena před jsou jen "pořadová", aby bylo možno detailně jednotlivé příkazy rozebrat:
No, a pro ty, kterým toto nestačí, ještě "rozpitvám" některé příkazy detailně.
Příkaz B
- Podmínka
zjišťuje, zda je v proměnné
MOT_Loko_G
je nějaká hodnota.
Z nabídky Řízení toku operací
se vybere Podmínka a přidá se vpravo.
Na vybrané Podmínce se stiskne Změnit.
Stisknout Podmínka...
...přidá se Proměnná, kterou chceme otestovat, tedy MOT_Loko_G
a stiskne se Změnit.
V nabídce Operace se vybere Popis vlaku a stiskne se tlačítko
dole.
Do okna vpravo se přidají všechna kolejová vozidla...
...a dá se OK.
Takto je Podmínka splněna, pokud je v proměnné MOT_Loko_G
libovolný Vlak/Loko.
Požadován je ale pravý opak, zaškrtneme Ne. Tím je Podmínka splněna,
pokud v proměnné MOT_Loko_G
není nic, žádná Loko/Vlak.
Hotovo. Pokud je proměnná MOT_Loko_G prázdná, Podmínka
splněna, přiřadí se jí dalším
příkazem C hodnota BR185...
Pokud prázdná není, Podmínka nesplněna,
příkaz C je přeskočen a v
proměnné MOT_Loko_G zůstane to, co tam bylo. Zadáno např.
před spuštěním Makra
.
Mezi velmi užitečné funkce patří zjišťování, která mašina je kde a jaká mašina je v určitém bloku.
Příkaz D
- Dotaz
Dotazem
lze zjistit, v
kterém bloku je
určitá Loko/Vlak, nebo naopak,
která Loko/Vlak
je v určitém Bloku.
Tak třeba to první. Kde je mašina Taurus?
Výsledek, tedy název bloku, přijde do proměnné. Tu buď máme, nebo
vytvoříme. Bude to Typ: Objekt, Typ objektu: Blok.
Přidat doprava, stisknout Změnit.
Vybere (příp. vytvoří) se Proměnná, Operace na Dotaz bloku,
Operand Objekt a Hodnota Taurus.
Operand možno také nastavit na Proměnná, a pak se hledá ta mašina,
jejíž Hodnota je uložena v Proměnné, zadané v poli Hodnota.
Příkaz pak vypadá takto,...
...nebo takto.
Při testování CO, KDE ... stojí za zmínku také příkaz Kontext. Jeho rozsáhlou činnost jsem ještě zdaleka neprozkoumal detailně, ale lze jím např. zjistit Blok nebo Loko/Vlak v souvislosti s místem, kde je příkaz Kontext použit.
Příkazy se požívají v záložce Operace. Ta je ve Flagmanu, Makru, Tlačítku atd. Kontext znamená Souvislost. Takže zjednodušeně lze popsat, že příkaz vrací hodnotu, která souvisí s Blokem, Loko, Plánem atd., odkud je příkaz Kontext spuštěn. A je jedno, zda přímo, nebo je obsažen třeba v Makru.
Jako obvykle, nejlepší asi bude konkrétní příklad.
Vše je to vlastně krásně vidět najednou v Průzkumníkovi v layoutu. Soubor se jmenuje lokopin_9gb3_20230520_triky9g_navrat_kontext.yrrg
Výchozí stav (Start):
V provozu určitý počet Plánů (zde jeden) + Spontaneous Run (dále jen SR)
na jeden vlak (zde Motor BR185).
Požadavek: Zastavit všechny Plány (dojezd
do počátečních, výchozích Bloků), zastavit SR a dojet do určitého
Bloku (zde B12).
Související prvky TC:
Flagmany F_JEDE_LOKO_G a F_KONEC
Tlačítka T_START a T_KONEC
Proměnná | Název | Typ | Typ objektu | Rozsah |
1 | MOT_Loko_G | Objekt | Vlak | globální |
2 | MOT_Blok_Start_G | Objekt | Blok | globální |
3 | MOT_Blok_Cil_G | Objekt | Blok | globální |
Plány: libovolný počet pro různé Loko/Vlaky + Plán VEN (zde B13,14 ven), který vyvede vlak, který jel pod SR a je nevhodně orientovaný z kusé koleje.
Příkazy byly nejprve psány přímo do Operace/Makra v TC. Autor je přece "zkušený programátor". Zhruba ve třech čtvrtinách nastal ale totální chaos, zmatek. Vývojový diagram se ukázal, jako naprostá nutnost.
Vývojový diagram. Rozhodovací prvky, podmínky (kosočtverec) mají vpravo výstup
TRUE, Pravda, podmínka splněna, dole pak FALSE, Nepravda, podmínka nesplněna.
Nejprve rozebereme detailně jednotlivé části (viz 1. - 10.). Celý proces Ukončení je spuštěn Zastavením hodin nebo stiskem tlačítka Konec.
Test, zda běží nějaký Plán. Pokud ano, test se opakuje, a to tak dlouho, než jsou všechny Plány ukončeny. Všechny Vlaky/Loko jsou tedy ve výchozích postavení, žádný Plán není aktivní.
Test, zda v proměnné MOT_Loko_G je Loko/Vlak, jedoucí pod SR. Je-li proměnná prázdná, naplní se hodnotou BR185 Motor
Test, zda běží SR. Ukončit SR ovšem nejde kdykoliv, to by mohl Vlak/Loko být třeba mimo Blok, na zhlaví a pod. Proto je třeba nejprve zamknout všechny Bloky (S) a čekat, dokud Loko Jede (S1).
S2 - Ukončí se SR.
Do proměnné MOT_Blok_Start_G se uloží hodnota Bloku, kde se nachází Vlak z proměnné MOT_Loko_G. Tím je určena pozice Vlaku, který jel pod SR a který je třeba dopravit do výchozího postavení.
Test, zda je zadáno výchozí postavení pro SR. Pokud není v proměnné MOT_Blok_Cil_G nic, uloží se tam B12.
Pokud je Start a Cíl totožný a Loko je orientována vlevo, jde se na konec. Je už dosaženo požadovaného stavu.
Je nutno zjistit, zda není Vlak/Loko na odstavné, kusé koleji (zde B13,14), orientovaný vpravo. Pokud ano, je spuštěn Plán VEN. G1 - Čeká se na ukončení Plánu VEN.
Opět se zjistí místo, kde se Vlak/Loko nachází.
Je spuštěn AT z Bloku v MOT_Blok_Start_G do Bloku MOT_Blok_Cil_G.
To je vše. Nutno upozornit, že prostudování jen z článku není postačující. Je třeba prohlédnout a prostudovat přiložený layout. V souboru, který se jmenuje lokopin_9gb3_20230520_triky9g_navrat_kontext.yrrg, jde o část Kolejiště 2.
Zde je způsob, jakým je diagram přepsán do TC. Vpravo od diagramu je vždy popsán
sled příkazů v Operaci TC.
Komu to nestačí, musí číst znova, příp. mě kontaktovat.
Věřím, že psaní těchto
článků pomáhá dalším kolegům. A kdyby ne ... Občas potřebuji změnit něco, co jsem dělal
před časem. Stačí pár měsíců a já už nevím, jak to vlastně funguje. I když jsem
to vymyslel a udělal sám. Tak se musím podívat do článku, kde je to popsáno.
Takže já si ty články stejně musím psát. Pro sebe. A když to nenapíšu pořádně,
po delší době tomu nerozumím. Máte vy to ale kliku...
Toto už napsáno bylo,
ale sedí to.
LokoPin | 20.05.2023 | |
20.05.2023 | Návrat vlaku | |
23.05.2023 | Kontext | |
30.05.2023 | Ukončení | |
01.06.2023 | (poslední editace) | |
Spolupracovali: | Jaroslav Hraška |