RailRoad & Co TrainController 9(8,10) Gold - Tipy a triky

  1. Úvod
  2. Návrat vlaku
    1. Podmínka
    2. Dotaz
    3. Kontext
    4. Ukončení
  3. Závěr

Úvod

    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.

Na začátek článku

Návrat vlaku

    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:

  1. Do proměnné MOT_Blok_Cil_G je uložena Hodnota cílového bloku, tedy Blok B06
  2. Test, zda v proměnné MOT_Loko_G je nějaká hodnota. V Popisu vlaku jsou Všechna vozidla.
  3. Je-li proměnná MOT_Loko_G prázdná, není-li Loko/Vlak "předvolen", vloží se tam požadované. Zde BR185...
  4. Kde se Loko/Vlak nachází? Pomocí Dotaz bloku je nastaven startovní blok do proměnné MOT_Blok_Start_G.
  5. Vozidlu, jehož hodnota je v proměnné MOT_Loko_G, je nastaven směr Vzad.
  6. Zpoždění, aby se stačil nastavit Směr dřív, než je proveden následující příkaz.
  7. Loko/Vlaku, jehož hodnota je v prom. MOT_Loko_G, je zadán příkaz AutoTrain do bloku, jehož hodnota je v prom. MOT_Blok_Cil_G.
  8. Výmaz hodnoty v proměnné MOT_Blok_Start_G
  9. Výmaz hodnoty v proměnné MOT_Blok_Cil_G
  10. Výmaz hodnoty v proměnné MOT_Loko_G

    No, a pro ty, kterým toto nestačí, ještě "rozpitvám" některé příkazy detailně.

Na začátek článku


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.

Na začátek článku


    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.

Na začátek článku

Příkaz - Kontext

    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.

  1. Jsou vytvořeny tři proměnné, Typ: Objekt, Typ objektu: Blok, Loko a Plán.
  2. Příkazy Context Blok, Context Plán a Kontext Vlak jsou v Makru M_KONTEXT.
  3. Makro M_KONTEXT se spustí při spuštění Plánu (B06-B04).
  4. Proměnné se naplní hodnotami Loko (která pojede v tomto Plánu), Bloku (ve kterém Plán startuje) a názvem Plánu.

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

Na začátek článku

Ukončení

    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:

  1. Flagmany F_JEDE_LOKO_G a F_KONEC

  2. Tlačítka T_START a T_KONEC

  3. 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í
  4. Makra START a KONEC
  5. 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.

  1. 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í.

  2. 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

  3. 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).

  4. S2 - Ukončí se SR.

  5. 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í.

  6. Test, zda je zadáno výchozí postavení pro SR. Pokud není v proměnné MOT_Blok_Cil_G nic, uloží se tam B12.

  7. 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.

  8. 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.

  9. Opět se zjistí místo, kde se Vlak/Loko nachází.

  10. 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.

Na začátek článku

Závěr

    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.

Na začátek článku
Menu

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