Programování 2 a Tipy a triky 9G

  1. Úvod
  2. Plný plyn (Popis vlaku, makra, proměnné ...)
    1. Lokodekodér
    2. TC - funkce do mašiny
    3. Spuštění
      1. Příklad 1 - základ
      2. Příklad 2 - Makro
      3. Příklad 2 - shrnutí
  3. Řízení AccDec a Osv. kabiny
    1. Příprava
    2. Kabina - Zapnutí / vypnutí osvětlení kabiny v závislosti na pohybu loko
    3. AccDec - Změna rozjezdové / dojezdové křivky během jízdy
      1. AccDec DEL - Změna rozjezdové / dojezdové křivky pomocí zpoždění
      1. AccDec BLOK - Změna rozjezdové / dojezdové křivky v závislosti na zastavení
  4. Proměnné - naplnění
    1. Obecně
    2. Kontext
      1. Příklad 3
    3. Dotaz
      1. Příklad 4
  5. Závěr

Úvod

    Základ je v článku Programování. Ohlasů, dotazů a požadavků na toto téma je zatím minimum, ale počet uživatelů 9G se stále zvyšuje, tak by asi nebylo od věci určité věci ukázat. Byla by škoda nevyužít mocné nástroje, které tato verze poskytuje.

    Postupně zde budou (možná ) prezentovány a přidávány určité fígle a triky. Stále se však vyskytují nářky, že články jsou psány příliš složitě, že tomu uživatel nerozumí. Následná prezentace tedy bude upravena způsobem co nejvíce detailním a polopatickým. A vždy je tu možnost konzultace, nejlépe po Skypu. Současně nutno podotknout, že některé údaje se pak mohou opakovat. Jistě je to lepší, než aby bylo něco opomenuto.

    Nutno ještě uvést, že všechny popisované postupy jsou především inspirující. Rozhodně to nejsou nějaké jedinečné, nezaměnitelné návody. Skoro všechno lze udělat i jinak, a ten nejlepší způsob nemusí být snadné najít. Obecně platí, že nejlepší je to, co funguje a je to co nejjednodušší.

    Většinou to lze všechno (a mnoho dalšího) prohlédnout v hlavním testovacím layoutu, který je k dispozici, příp. i v dalším, monotematickém (V tom je v souboru lokopin_triky9g_9gb3.yrrg pro kompletní činnost vč. Hlášení nutno správně nastavit cestu v připojení ke Zvukovému souboru Hlášení. Jinak místo hlášení bude ticho ).

    Vše se týká podverze GOLD, verze 9 a výš !!! Něco je k dispozici už ve verzi 8, ale třeba proměnné, velmi důležité, jsou až ve verzi 9.

    Popisované lokodekodéry jsou převážně Zimo a autorem zvukových projektů je Petr Smutek (Jacek), takže i zde se mohou objevit různé odlišnosti.

    Pokud jde o hardware, 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.
   
Nutno však podotknout, že následující informace jsou na hardwaru závislé jen málo.

Na začátek článku

Plný plyn

Lokodekodér

    Některé zvukové projekty obsahují funkci označenou jako Plný výkon. Je to ovšem trochu jinak, tak musíme začít u CV lokodekodéru (MX64...).

U Zimo MX649 (a podobných) existují CV374 a CV375. (Pokud jsou v nich nuly, funkce v projektu nejspíš není.)

CV374 ... Určuje Funkční tlačítko, jímž je aktivován „Coasting“, tzn. zvuk se přepne na určitý jízdní stupeň bez ohledu na jízdní situaci!
CV374 = 0: Neznamená F0, ale ŽÁDNÉ tlačítko Coasting
CV374 = 1 ... 28: funkční tlačítko F1…F28 pro Coasting

CV375 ... Stupeň zvuku, který bude aktivován po stisknutí tlačítka Coasting (dle CV374) nezávisle na jízdní situaci.
CV375 =0: Zvuk stání, volnoběh
CV375 = 1…10: Stupeň zvuku   Tady musím poznamenat, že mně to chodilo jen 0 ¸ 7.

    Komu se to zdá složité, tak příklad a popis:

CV374=6
CV375=7

Mašina stojí, zvuk je zapnutý, běží na volnoběh. Po stisknutí F6 se motor rozběhne na plný plyn. Třeba při rozjezdu.

    Ale chodí to pochopitelně i opačně. Dáme-li CV375=0, pak se po stisknutí F6 motor přepne na volnoběh. Třeba při jízdě s kopce. Škoda jen, že to není rozděleno na dvě funkce (snížení, zvýšení), ale některé zvukové projekty mají obsazeny funkce všechny (028), takže místa málo ...

    Zde ještě nutno podotknout, že dávat "plný plyn" při rozjezdu je reálně nesmysl. Je to spíš takový hračkovitý kousek. Realitě mnohem více odpovídá spíš přepnutí na volnoběžné otáčky při jízdě s kopce.

    Toto vše samozřejmě funguje i bez TrainControlleru (TC), tedy z ručního ovladače (MM, LH100..) !

Na začátek článku

TC - funkce do mašiny

    V TC je nutno nejprve do mašiny příslušnou funkci instalovat.


Okno Vlastností loko., např. přes Ctrl-W, zál. Funkce.
Požadovanou ikonu možno stáhnout z layoutu, který je k dispozici, nebo ji možno libovolně vytvořit přes Knihovnu.

TC - spuštění

    V TC to lze tedy spustit ručně (z tachometru v TC), ale pochopitelně i automaticky v závislosti na nějaké situaci. Funkce je ovládána vypínačem, je ji tedy třeba v požadovanou dobu zase vypnout.

Na začátek článku

 Příklad 1 - základ

    Jako jednoduchý příklad poslouží zapnutí i vypnutí v plánu.


Plán "1-3" pro jízdu z bloku B01 do B03.


Po kliku pravým tlačítkem myši na blok B01 ...


... a výběru zál. Akce, pak stačí vložit požadované Vlakové operace.

    Takto je to ovšem poměrně nedostačující. V praxi se při rozjezdu používá mnohem více příkazů, operací. A to najednou či postupně, a to ještě v závislosti na určitých závisejících skutečnostech, jako je např. zda je vlak připraven k odjezdu, zda má návěst pro jízdu atd. Zde je pak možno využít Seznam příkazů, nebo lépe Makro. Použitím Makra se totiž velmi šetří množství uloženého kódu (zbytečně zatěžuje TC), který by se musel na mnoha místech aplikace neustále opakovat.

Na začátek článku

Příklad 2 - Makro

    Pokročilejší můžou detailní popis přeskočit a přejít rovnou na Shrnutí tohoto příkladu.

    Tady je uvedeno i pár "slepých uliček", chyb a omylů. Podle vlastních i jiných poznatků by to nemuselo být na škodu.

    Předpokládejme vlak ve stanici, nastartovaný, s rozsvícenými světly, příp. vagony atd. A teď je požadováno:

Pořadí Popis Poznámka
1.. Staniční hlášení  
2. Píšťalka průvodčího  
3. Čekání na návěst pro jízdu  
4. Krátké houknutí  
5. Zapnutí Fce Plný výkon  
6. Rozjezd  
7. Zpoždění (čekání) 20 sekund  
8. Vypnutí Fce Plný výkon  

Celkem jednoduché.

 
Vytvoří se Makro ...


... a přes Seznam se vloží do Akce.


... jenže takto je to Makro zcela špatně . Vše by se spustilo rychle za sebou, prakticky současně, Hlášení, Píšťalka, Houkačka ... chybí tam totiž Zpoždění. Náprava jednoduchá.


Lepší, ale pořád to není zdaleka ono. Loko se začne rozjíždět hned a příkazy makra se provádí až během jízdy.
Makro se nemůže spouštět až v Akci na stav Pokračování v jízdě. Nutno zvolit nějaké lepší místo.


Makro se vloží do Start Operace Plánu. (Přes Seznam..., stejně jako u Akce, viz výše.)

    A teď už zbývá jen zajistit to čekání na návěst pro jízdu, viz výše, bod 3.

    Vytvoříme pár dalších Maker (hned bude vidět, proč) a u výsledného Makra Rozjezd trochu upravíme posloupnost.

    Protože většina zvukových funkcí je zapínána mžikově (tlačítko na tachometru, ovladači se po puštění vypne), je to třeba udělat i v automatice. Místo zapnutí třeba píšťalky bude Makro Z_Píšťalka ...


... a obdobně ...


... i pro další požadované zvuky a akce.

    Tím nebude potřeba starat se o vypnutí zvukových funkcí a Makro Rozjezd se také "zkulturní".

    Makra Odemknout... a Zamknout... z bloku detailněji. Postup ...


- Přístup k proměnné -


- Název: ActBlokL1, Typ: Objekt, Typ objektu: Blok, Rozsah: lokální - OK. Tím je lokální prom. ActLok1 nadefinovaná, vytvořená.


Nastaví se, co se s ní bude provádět - Přiřadit Context Blok. Tím se do ActBlokL1 uloží blok, v němž je makro spuštěno, tedy Blok B01.


... a provede se požadovaná !(Operace), Stav se nastaví na Uzamknout výjezd vpravo/nahoru.


To samé pro opačný směr. Hotovo.

    Teď už zbývá jen rozdělit příkazy na ty, co se spustí hned, na rozdíl od těch, co se spustí až při vlastním rozjezdu ...

Pořadí Popis Poznámka
1.. Staniční hlášení

    

2. Píšťalka průvodčího
3. Čekání na návěst pro jízdu
4. Krátké houknutí

          a pod.

5. Zapnutí Fce Plný výkon
6. Rozjezd

... a zajistit, aby se počkalo na návěst pro jízdu.

    Ještě je třeba vysvětlit rozdíl mezi způsobem spouštění Makra.

.. Makro se spustí a hned se postoupí na další příkaz, operaci, makro.
.. Makro se spustí a postupně se vykonávají všechny v něm obsažené operace. Teprve až po jejich vykonání se postoupí na další příkaz, operaci, makro.


Budou-li se např. takováto makra (několik za sebou) spouštět prvním způsobem, spustí se také najednou všechny zvuky. Použije-li se druhý způsob, "čekací", ozvou se zvuky pěkně postupně. Zde po jedné sekundě. Právě na to zpoždění, vložené někam ke konci posloupnosti jednotlivých příkazů, se bude čekat, až se provede. Na předchozím obrázku je to sice uprostřed, ale to, kdy se píšťalka vypne, už rozhodující není.

Na začátek článku

Shrnutí


Tady je už finální verze Makra Rozjezd. Jeví se to komplikovaně, ale je to jen zdání.

Pořadí Makro Popis Poznámka
1.. 1 Zamknout výjezd To, který blok se zamkne, určí lokální proměnná ActBlokL1 (Context Blok).
2. 2 Staniční hlášení Zvuková funkce lokomotivy, nebo zvukový soubor z počítače.
3. 3 Píšťalka průvodčího Zvuková funkce lokomotivy.
  4   Prodleva mezi zapískáním a rozjezdem.
4. 5 Odemknout výjezd jako 1, jen ActLokoL
  6 Označení "S" Začátek smyčky "S".
  7   Čekací smyčka.
Podmínka pro popis vlaku "JEDE".
Který vlak, určí lokální proměnná ActLokoL (Context Vlak).
Není-li splněna, skočí na začátek smyčky "S".
  8  
  9  
5. 10 Krátké houknutí Zvuková funkce lokomotivy.
6. 11 Zapnutí Fce Plný výkon Zvuková funkce lokomotivy.

Makro Rozjezd je umístěno V Plánu 1-3, na zál. Obecné, ve  Start Operace. Teď pár poznámek ...

  • 1    Zamknout výjezd - Tato Operace zamezí okamžitému rozjetí loko/vlaku. Poskytne čas na to, aby bylo možno postupně vykonat všechny požadované Operace. Obvykle se to používá při komplexním startu, rozjezdu lokomotivy, kdy se spouští motor, rozsvěcují se světla, vagony atd.
    Samozřejmě je možné provést zamknutí výjezdu pro určitý jeden blok (B01), ale pro jiný blok by to bylo nutno udělat znovu atd. atd. Použije-li se proměnná (zde např. ActBlokL1), načte se aktuální blok do ní a příkaz se provede pro tento aktuální blok. Je tedy možno stejné Makro Zamknout_výjezd použít kdekoliv a vždy se zamkne ten požadovaný, aktuální blok.

  • 6¸9    Smyčka - Blok se v bodě 5 odemkl, povolil výjezd, přesto ale cesta nemusí být volná, stojí, jede tam jiný vlak. Provoz je pochopitelně v pořádku, zabezpečen, vlak v bloku B01 čeká, než dostane "Volno". Stejně ale musí počkat i příkazy pro Krátké houknutí a Plný výkon. Na to poslouží čekací smyčka vytvořená podmínkou Popis vlaku = Jede. Stojí-li vlak, točí se to ve smyčce; jakmile se pohne, začne se rozjíždět, postoupí  se na další příkazy 10, 11.

  • Na začátek článku

    Řízení AccDec

        Některá základní chování digitálně řízených mašin jsou duplikována lokodekodérem a ovládacím softwarem (zde TC). Klíčovým místem je nejspíš regulace rozjezdu a brzdění (akcelerace, decelerace, dynamiky, hybnosti ...).

    1. Lokodekodér na to má (minimálně) CV3 (rozjezd) a CV4 (brzdění). Čím vyšší hodnota, tím déle se mašina rozjíždí nebo zastavuje. A to samozřejmě při skokovém pokynu pro změnu rychlosti.
    2. TC si rozjíždění a brzdění ovládá sám. Nastavit to lze ve vlastnostech mašiny, či dalšími různými parametry, především Markery (BM a SM), případně jsou i další možnosti ovládání rychlosti, které už jsou popsány v minulých článcích.

        Oba tyto způsoby se vzájemně ovlivňují, což je pochopitelně nežádoucí. Mašina vjede do bloku, pomocí Markerů má zastavit na 1m dlouhém úseku, ale CV4 svým nastavením jí v tom vlastně trochu brání, takže přejede požadované místo zastavení. Jak řečeno, nežádoucí. Tak CV4 vypneme. Na to jsou dvě možnosti.

    1. Nastavením CV4=0.
    2. Funkcí lokodekodéru.

    ad a) ...má ten nežádoucí efekt, že u zvukových projektů přestanou skřípat brzdy. U nezvukových je to jedno.
    ad b) Naštěstí u většiny lokodekodérů existuje možnost CV3, 4 vypnout funkčním tlačítkem (to lze obvykle zvolit, doporučuji F4). Pak se rozjezd i dojezd chovají jako vypnuté (CV3,4=0), a brzdy jsou slyšet normálně.

        U ad b) je ovšem potom ještě jeden problém a tím je vypnutý rozjezd pomocí CV3. Opět je to nepodstatné u nezvukovek, ale u zvukových projektů se někdy naruší sled zvuků řazení rychlostí, přepínání odboček (Laminátka) atd.

        Dekodéry Zimo mají řadu CV, která akceleraci a deceleraci ovlivňují. Vše záleží na typu lokodekodéru, na nastavení, na zvukovém projektu atd. To zde rozhodně probírat nehodlám. Cílem mého snažení bylo, aby se mašina při rozjezdu chovala podle nastavení CV3 a při zastavování naopak bylo CV4 pomocí funkce AccDec vypnuto, a tak fungovalo pouze zastavení pomocí TC. Stačí k tomu jen v pravý čas zapnout či vypnout funkci AccDec u požadované mašiny.

        Obdobným způsobem lze ovládat samozřejmě i jiné lokomotivní funkce. Nabízí se osvětlení kabiny po zastavení, zhasnutí při jízdě, přepínání zvukových sad a pod.


    Požadované funkce ovšem musí mít mašina instalované.

        Pak už jen záleží na tom, jak a kdy je zapneme. V následujících případech je popsáno automatické rozsvícení kabiny při zastavení a ovládání fce AccDec (dvojím způsobem). Vše pro loko Laminátka.

        K dispozici je soubor, kde je možno vše prohlédnout (lokopin_triky9g_9gb3_accdec.yrrg).

    Na začátek článku

    Příprava

        Pár věcí nutno připravit.

    1. Vytvořit dvě proměnné, LaminBlok - typ Objekt/Blok a LaminG - typ Objekt/Vlak.

    2. Do druhé se přiřadí Laminátka. Např. už na Flagmanu FStartUp.


    Flagman FStartUp takto naskakuje na počátku spouštění aplikace TC ...


    ... a na zál. Operace lze vložit mnoho užitečných věcí, různá nastavení, kontroly, naplnění proměnných a pod. Tady je do proměnné LaminG vložena hodnota "Laminátka...".

        Naplnění proměnné LaminG je uvedeno pomocí Flagmanu FStartUp právě pro další mnohostranné využití systémové funkce Počátek relace. Rovněž globální typ zde použitých proměnných je globální proto, aby se jejich stav zobrazoval v Průzkumníku. Jinak je možno použít typ Lokální, plnit je jinde atd.

    Na začátek článku

    Kabina

        Zapnutí i vypnutí v plánu je popsáno výše. Pokud chceme závislost na jízdě mašiny, je zapotřebí prvek, který jízdu indikuje.

    Vytvoří se Popis vlaku "LamJede".


    Na záložce Obecné je nastavena nenulová Minimální rychlost ...


    ... a na zál Vlaky pak požadovaná lokomotiva.

    Pak stačí vytvořit Flagman (FLamJEDE), ...


    ... který má ve spoušti kombinaci všech bloků (nebo těch, ve kterých je indikace jízdy požadována) a přes tlačítko Vlaky ...


    ... je vybrán Popis LamJede.

        Flagman FLamJEDE bude tedy aktivní vždy, když Laminátka pojede ve vybraných blocích.

        Pak už stačí jen vytvořit Flagman FLamKAB, ...


    ... který se spouští Flagmanem FLamJEDE, ...


    ... a (viz šipky) se zde nastaví vypnutí osv. kabiny.


    Zapnutí osvětlení se udělá obdobně, pro opačný (neaktivní) stav Flagmanu FLamKAB.


    V podmínce Flagmanu FLlamKAB je vypínač VLamKAB, kterým lze činnost Zapnout/Vypnout.

    Na začátek článku

    Shrnutí

        Tento způsob se osvědčil, takže

    1. Vytvořit Popis vlaku LamJede - Zál. Obecné - Minimální rychlost = 1, zál. Vlaky = Laminátka.
    2. Vytvořit Flagman FLamJEDE - zál. Spoušť - Combi = všechny požadované bloky, tl. Vlaky = Laminátka.
    3. Vytvořit proměnnou LaminG (Objekt, Vlak) - přiřadit hodnotu Laminátka.
    4. Vytvořit Flagman FLamKAB
      1. Spoušť - Flagman FLamJEDE
      2. Podmínka - Vypínač VLamKAB
      3. Operace - přes proměnnou LaminG se provede operace
        1. Stav aktivní (nejede) = Zapnout Osv. kabiny
        2. Neaktivní (jede) = Vypnout Osv. kabiny

        Popis vlaku JEDE lze mnohostranně využívat. Do spouště Combi lze zadat libovolné Bloky, či Plány. Přes tlačítko Vlaky pak požadovaný vlak/loko, různá vozidla, loko, vagony, několik, třeba všechna Kolejová vozidla. Lze pak zjišťovat pohyb v určité části kolejiště a zamezit třeba současné jízdě v blízko položených obloucích pro určitá vozidla a pod. Výborná věc!

    Na začátek článku


         Lokomotivní funkci AccDec lze ovládat více způsoby, zde budou popsány dva.

    AccDec Delay

        Ovládání momentových křivek, rozjezd, brzdění je následující:
        Mašině se před rozjezdem zapne rozjezdová křivka z lokodekodéru, tzn. že se vypne funkce AccDec. Po určité době se tato funkce zapne, takže rozjezd a brzdění zase ovládá jen TC. Je to celkem jednoduché, jen je třeba vhodně zvolit to zpoždění, které se pohybuje cca mezi 5 - 20s. Při příliš krátkém se AccDec zapne dřív, než se mašina rozjede pomocí CV3, při příliš dlouhém zase může vjet do bloku, ve kterém už má zastavit a přitom je ještě zapnuto brzdění z lokodekodéru. Vše záleží na provozní situaci, ale za vyzkoušení to stojí.

    Vše zajistí Flagman FLamDEL.


    Flagman se aktivuje Flagmanem FLamJEDE.


    V Operaci je nejprve funkce AccDec vypnuta. V činnosti jsou tedy rozjezdové a brzdící křivky lokodekodéru (CV3,4).


    Za první operací je zpoždění (zde 6s), a pak následuje zcela stejná operace, jen se AccDec zapne.


    V podmínce je opět vypínač (zde VLamACC), kterým lze činnost Zapnout/Vypnout.

    Na začátek článku

    Shrnutí (AccDec DEL)

    1. Vytvořit Popis vlaku LamJede - Zál. Obecné - Minimální rychlost = 1, zál. Vlaky = Laminátka.
    2. Vytvořit Flagman FLamJEDE - zál. Spoušť - Combi = všechny požadované bloky, tl. Vlaky = Laminátka.
    3. Vytvořit proměnnou LaminG (Objekt, Vlak) - přiřadit hodnotu Laminátka.
    4. Vytvořit Flagman FLamDEL
      1. Spoušť - Flagman FLamJEDE
      2. Podmínka - Vypínač VLamACC
      3. Operace
        1. přes proměnnou LaminG se provede operace Vypnout fci AccDel
        2. Zpoždění (cca 5 - 20s)
        3. přes proměnnou LaminG se provede operace Zapnout fci AccDel

    Zelené bylo provedeno při ovládání osvětlení kabiny, viz výše.

    Na začátek článku

    AccDec Blok

        Mnohem lepší je systém, který zjišťuje, zda se v bloku zastavovat bude, či ne a podle toho zapne/vypne AccDec. Před rozjezdem se AccDec vypne. Mašina se rozjede na "lokodekodérový" rozjezd. Po každém vjezdu do dalšího bloku se zjišťuje, zda se tam bude zastavovat. Pokud ne, nic se nestane, AccDec je stále vypnuto, ve funkci je  "lokodekodérový" rozjezd/brzdění. Jakmile se vjede do bloku, kde je na jeho návěstidle v daném směru návěst Stůj, dojde k zapnutí AccDec a mašina brzdí podle TC. Vypadá to, a vlastně i je, celkem jednoduché, ale trápil jsem se s tím skoro měsíc.

        Hlavním řídícím prvkem je Flagman FLamBLOK.


    Na spoušti je v kombinaci všech (nebo jen požadovaných) bloků ...


    ... Popis vlaku "LamJede".
    Tzn. že Flagman se spustí, kdykoliv požadovaná mašina (zde Laminátka) vjede do nějakého z uvedených bloků.


    V tomto Flagmanu FLamBLOK je Reset nastaven časovačem na 1s po zapnutí, včetně Nuceného resetu.
    Ostatní Flagmany v tomto layoutu mají nastaveno Automaticky.


    V Operaci je pouze Makro AccDecBlok (s čekáním do konce).


    Sled operací

    1    Dotaz bloku zjistí, do jakého bloku vjela mašina, jejíž název je v proměnné LaminG a hodnotu, název tohoto bloku uloží do proměnné LaminBlok. V poli Hodnota je možno rovnou uvést třeba Laminátku, zde je to přes proměnnou LaminG proto, že je pak možné makro použít i pro jiné loko. Stačí někdy před tím  proměnnou LaminG naplnit jinou mašinou.

    2    Podmínkou lze pak zjistit, zda je požadovaném směru návěst STŮJ, nebo ne.


    Takto se zjišťuje v jednom směru ...


    ... návěst STŮJ. Stejně se to zjišťuje i pro druhý směr. Podmínka je tedy splněna v případě, že vlak má v bloku v daném směru STŮJ.

    V obrázku  Sled operací  to pak funguje takto:

        Rozdíl tedy spočívá v tom, zda se provede operace 4, která AccDec vypne, nebo 7, která AccDec zapne.


    Vypnutí funkce AccDec.


    Zapnutí funkce AccDec.


    V podmínce Flagmanu FLamBLOK je opět vypínač VLamBlok, kterým je možno tuto funkci Zapnout/Vypnout.

    Na začátek článku

    Shrnutí (AccDec BLOK)

    1. Vytvořit Popis vlaku LamJede - Zál. Obecné - Minimální rychlost = 1, zál. Vlaky = Laminátka.
    2. Vytvořit proměnnou LaminG (Objekt, Vlak) - přiřadit hodnotu Laminátka.
    3. Vytvořit Makro AccDecBlok.
      1. Operace
        1. Blok, do kterého loko vjela (Dotaz bloku pro Vlak z proměnné LaminG) ® prom. LaminBlok.
        2. Podmínka zjišťuje, zda se v bloku LaminBlok bude zastavovat, či ne.
          1. Zastavuje se - AccDel se Zapne (brzdí TC).
          2. Nezastavuje se - AccDel se Vypne (brzdí Lokodekodér CV4).
    4. Vytvořit Flagman FLamBLOK
      1. Spoušť - zál. Spoušť - Combi = všechny požadované bloky, tl. Vlaky = Laminátka.
      2. Podmínka - Vypínač VLamBLOK
      3. Reset - Časovač 1s po zapnutí, Nucený reset.
      4. Operace - Makro AccDecBlok (s čekáním do konce).

    Zelené bylo provedeno při ovládání osvětlení kabiny, viz výše.

    Na začátek článku

    Proměnné - naplnění hodnot

        Jak je čím dál častěji probírána problematika proměnných, je nutno lépe osvětlit práci s nimi a především popsat některé varianty způsobu jejich naplnění hodnotami. Něco je dost jednoduché a v programu poměrně návodné. Jak počítat třeba průjezdy a počet zobrazovat, jak vypsat např. délku nebo hmotnost vlaku a pod. Trochu složitější je to s proměnnými objektovými (Vlak, Blok, Plán atd.). Ale právě použití těchto proměnných je v mnoha případech velmi výhodné, neboť jejich stav pak slouží k rozhodování v Podmínkách.
    Zpočátku bude popsán jen základ, časem se to možná rozšíří.

        Proměnné lze plnit (tedy vložit do nich hodnotu, obsah) různě. Přiřazením, Dotazem, Referencí. Hodnoty lze zadávat podle zvoleného typu (Číslo, Text, Čas, Objekt).


    Pro příklad vytvoříme proměnnou Typu Objekt, Typ objektu: Blok, Název proměnné: ObjektBlok.


    V Operaci lze vybrat, co se má s proměnnou udělat.


    !(Operace)
    vykoná změnu objektu, např. změnu stavu Bloku.


    Pro naplnění slouží možnosti =(Přiřazení), =(Dotaz bloku) a @(Reference).
    V poli Operand se vybere, čím se proměnná naplní.


    Může to být přímé naplnění, tedy Blok ...


    ... nebo hodnota z jiné proměnné stejného Typu objektu.


    A nakonec to nejzajímavější, jako Operand (i Hodnota) lze zvolit Context Blok.

    Na začátek článku

    Kontext

        Context (česky souvislost) zde popisuje vztah prvku (Loko/Vlak, Blok, Marker/Indikátor, Tlačítko/Přepínač, Cesta, Plán, Výhybka, Točna, Makro) k místu spuštění. Kontext pak vlastně zjišťuje hodnotu objektové proměnné v místě spuštění. Proměnná (ObjektBlok) je v nějakém sledu operací (obvykle je to právě záložka Operace). Ve Flagmanu, v Seznamu Plánu, v Seznamu ve funkci loko, v Indikátoru, v Markeru, v Makru. Často je součástí sledu dalších operací, podmínek a pod., a to vše je obvykle v Makru. No a to Makro se odněkud spouští a právě to odněkud má souvislost s Blokem, jehož hodnota se naplní do proměnné ObjektBlok.

    Následující tabulka popisuje spojení mezi přístupem proměnné a konkrétními kontextovými objekty pro nejběžnější případy:
    Srozumitelný a pochopitelný překlad se asi moc nepovedl. Snad to trochu vylepší příklady uvedené za tabulkou.

    Místo použití proměnné
    Ż

    Kontext Vlak Kontext Blok Kontext Cesta Kontext Plán
    Vlakové operace Samotný Vlak Aktuální blok - Aktuální plán vlaku
    Lokomotivní funkce Vlak/Loko Aktuální blok - Aktuální plán vlaku
    Blok Vlak, který v současné době rezervuje blok Blok sám - Aktuální plán vlaku
    Marker nebo
    Indikátor bloku
    Vlak, který v současné době rezervuje blok Blok, který obsahuje
    Marker nebo Indikátor
    - Aktuální plán vlaku
    Tlačítko nebo přepínač
    asociovaný s blokem
    Vlak, který v současné době rezervuje blok Blok se kterým je Tlačítko nebo Přepínač spojený - Aktuální plán vlaku
    Cesta Vlak, který v současné době rezervuje cestu Aktuální blok Cesta sama Aktuální plán vlaku
    Plán Vlak provádějící plán
    (pouze po startu)
    Aktuální blok

    -

    Plán sám
    Výhybka Vlak, který v současné době rezervuje cestu přes výhybku

    -

    V současné době aktivní trasa přes výhybku Aktuální plán vlaku
    Točna Vlak, který v současné době rezervuje blok mostu Blok mostu V současné době aktivní trasa přes točnu Aktuální plán vlaku
    Makro Vlak volající Makro Blok volající Makro Cesta volající Makro Plán volající Makro

        K tomu nejzákladnějšímu zřejmě patří zjištění v kterém bloku je určitá mašina nebo která mašina je v určitém bloku.

    Na začátek článku

    Příklad 3

        Předně je nutno vytvořit proměnné, do kterých se uloží výsledek.

    Příklad - Která mašina je v určitém bloku ?

    1. Příkaz (Operace) pro naplnění prom. ObjektVlak je jednoduchý.
    2. Příkaz je spuštěn tlačítkem TObjekt a Blok je zadán Blok 5. Do proměnné ObjektVlak se uloží mašina, která je v Bloku 5.
      1. Není-li Blok zadán, proměnná bude prázdná.
      2. Nebude-li Blok zadán a spuštění tlačítka se provede z nějakého místa, které má vztah k určitému Bloku, pak se do ObjektVlak uloží hodnota mašiny z tohoto Bloku (pokud tam nějaká mašina je).


    Naplnění třeba všech tří proměnných lze vložit do Makra (MObjekt), a pak bude záležet na tom odkud se Makro spustí.


    Spustí-li se např. v Kombinaci s Blokem 1 (na zál. Operace je Makro MObjekt), budou v proměnných tyto hodnoty:

    ObjektBlok = Blok 1

    ObjektPlan = Plán, pod kterým v Bloku 1 loko jede

    ObjektVlak = Vlak, který v Bloku 1 jede

        Je to jednodušší, než to vypadá. Chce to prostě nebát se a vyzkoušet.

        A ještě jedna možnost, kde lze oba prvky (třeba Blok a Loko) zadat a zjistit hodnotu jednoho na základě druhého. Slouží k tomu příkaz Dotaz.


    Dotaz    Query, Dotaz může být v několika variantách, mimo jiné Dotaz bloku, Dotaz plánu, Dotaz vlaku ... Přes Operand a Hodnotu se zadává druhý parametr dvojice, ...


    ... který může být zadán přímo ...


    ... nebo z proměnné.

    Na začátek článku

    Příklad 4

        Na předchozích dvou obrázcích se do proměnné ObjektVlak vloží Vlak, který je v Bloku 7 (první obrázek) nebo Vlak, který je v Bloku, jehož Hodnota je v proměnné ObjektBlok (zde Blok 1, druhý obrázek).

        Není nutno tedy být v nějakém kontextu s Vlakem, Blokem, je možno z libovolného místa zjistit Loko v určitém Bloku a provést např. nějakou Lokomotivní funkci v závislosti na tom, o jakou Loko jde atd.

    Na začátek článku

    Závěr

        Teď ještě pár globálních, obecných poznámek, poznatků.

    1. Globální x Lokální proměnné
      1. Globální - jednou se vytvoří, pořád existuje, její hodnotu lze zobrazit v Průzkumníku, hodnota zůstává zachována i při ukončení aplikace TC a příštím otevření.
      2. Lokální platí jen pro daný běh kódu, v Operaci, v Makru ... Tam se také vytvoří a po opuštění této části se smaže. V Průzkumníku není Lokální proměnná vůbec vidět.
    2. Makro má při vložení do kódu (Operace) dva způsoby spuštění
      1. Makro se spustí. Hned se spustí i další, případně následující operace. Operace v Makru tedy běží současně s těmi následujícími po Makru.
      2. Makro se spustí. Operace v Makru se provádějí postupně (sekvenčně). Dokud se neprovedou, nedokončí všechny operace v Makru, nejsou spuštěny žádné operace následující po Makru.
      3. Makro je možno spustit vícenásobně, současně. Pokud např. obsahuje nějaké proměnné, je třeba tyto vždy před spuštěním Makra správně naplnit.

    ad 1) Globální proměnné se použijí tam, kde je třeba je číst a zapisovat v celém programu, na různých místech. Musí proto vyjadřovat nějaký obecný, globální obraz. Je třeba dávat pozor, aby se za běhu programu nepřepisovaly různé hodnoty. Naopak pro určitou unikátní hodnotu se použijí proměnné lokální. Do těch lze zapsat a číst hodnoty jen v rámci jedné operace, v jednom makru atd.
    Je výhodné, použít nejprve proměnnou globální, naprogramovat a otestovat (v Průzkumníku jsou hodnoty globálních proměnných vidět.). Pokud jde např. o kód v Makru, které lze spustit vícenásobně, současně na více místech, je pak nutno nahradit použité globální proměnné lokálními !!!

        Za velký nedostatek považuji nemožnost zobrazení obsahu objektových proměnných, např. převodem do proměnné textové, číselné. Jde to jen nepřímo postupným testováním a použitím podmínek. Ale testovat takto třeba několik desítek prvků, to je trochu problém. Kdyby aspoň šlo postupně přecházet na další hodnotu, aby se mohl použít automatický cyklus. Doufám, že se to v nějaké vyšší verzi změní, nebo na nějaký fígl přijdu.

        Postupně se v tom ale začínám orientovat. Najednou jsou k dispozici funkce, o kterých se mi ani nezdálo. Tady se ještě budou dít věci. Jen jestli mě to bude pořád bavit. Uvidíme ...
       

    Na začátek článku

    Menu

    LokoPin  

    4.12.2021  
      04.06.2022 Odst.3 - Řízení Rozjezd/Dojezd a Osv. kabiny
      13.06.2022 Odst.4 - Hodnoty proměnných
      05.09.2022 poslední editace
         
    Spolupracovali: Petr Majer