Programování

  1. Úvod
  2. Diagram
  3. Tok operací
  4. Proměnné
    1. Tvorba
    2. Příklady
  5. Vzorce
    1. Popis
    2. Zástupné znaky
    3. Příklady
    4. Zástupné znaky 2
    5. Příklady 2
  6. Závěr

Úvod

    Také by se to mohlo jmenovat Tok (běh, posloupnost) operací, Proměnné, Vzorce, nebo jen Operace. Vlastně celé ovládání, nastavování TrainControlleru, je programování. Každopádně, jak už většinu kolegů znám, jen mávnou rukou. Programovat neumím a ještě abych někam běhal na operaci.   Škoda, některé nové fígle jsou dost jednoduché a přitom ušetří spoustu práce, a to nemluvím o netušených možnostech.
    Týká se to ovšem pouze podverze GOLD, verze 9 a výš !!! Něco je k dispozici už ve verzi 8, ale třeba proměnné, dost důležité, jsou až ve verzi 9.

    Tento článek má mnoho prostoru pro další rozšiřování, editaci. Zvažoval jsem, v jakém stavu ho zveřejnit, a zda vůbec. Ale třeba to někoho nakopne, popostrčí a zapojí se do konzultace, přispěje svými zkušenostmi, poznatky. A když ne, aspoň se ukáže, že to nikoho nezajímá a já se s tím budu potýkat sám.

    Mimochodem, sám sebe označuji za "Programátora netušených projektů", neboť ani já netuším, co to bude dělat.

    Nějakému naprostému programátorskému minimu se ovšem nevyhneme. Budu se snažit podat to co nejjednodušeji.

    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 na hardwaru závislé nejsou.

Na začátek článku

Diagram

    Je-li třeba provést posloupnost nějakých příkazů, akcí, je třeba stanovit algoritmus. Algoritmus je přesný návod, postup, jak řešit daný typ úlohy. Vývojový diagram je grafické znázornění algoritmu. Nejprve je tedy třeba vytvořit diagram, který přehledně znázorní postup požadovaných akcí.
    Tvary jednotlivých prvků diagramu se mohou v různých zdrojích lišit, pro naši potřebu však zcela postačí jednoduché schéma těch nejdůležitějších příkazů.


Vývojový diagram.

1.    Začátek (není-li to současně Label, možno vynechat).
2.    (4.,7.,8.) Operace - libovolná Vlaková, Systémová ... operace.
3.    Label - Značka, místo, na které lze skočit (uskutečnit přesun v seznamu příkazů), vpřed, vzad pomocí příkazu GoTo / Jdi na.
5.    Podmínka - rozhodovací prvek. Podle toho, zda je či není podmínka splněna, pokračuje se na větev Ano či Ne.
6.    GoTo L / Jdi na L - Skok na Label /Značku  "L". Před příkazem GoTo mohou být i další Operace.
9.    Konec (není-li to současně Label, možno vynechat).

Pozn.: Příkazy Label a GoTo jsou použity vždy pospolu. I když Label tam klidně může být samo, třeba pro přehlednost, GoTo naopak potřebuje mít kam skočit.

    Než bylo k dispozici Control Flow Operations / Řízení toku operací, bylo možno zadat pouze jednoduchý (sekvenční) sled operací. Sekvenční = pěkně postupně prováděné příkazy v pevném pořadí.


Takto by vypadal vývojový diagram pro verzi 7 a nižší.

    Např. pro zablikání reflektorem bylo nutno zadat sled operací:

Rozsviť
Zpoždění 0,5s
Zhasni
Zpoždění 0,5s
Rozsviť
Zpoždění 0,5s
Zhasni
Zpoždění 0,5s
Rozsviť
Zpoždění 0,5s
Zhasni

... a to jen pro trojí zablikání

Od verze 8 (jen Gold) se to však podstatně vylepšilo.

Na začátek článku

Tok operací

Operace, řídící tok, běh, zpracování, postup jednotlivých příkazů, se v originále nazývají Control Flow Operations, tedy Řízení toku operací. K dispozici jsou následující příkazy.

Název Překlad Popis Poznámka
Delay Zpoždění [s] Pevné zpoždění. Už nižší verze
Random Delay Náhodné zpoždění [s] Náhodné zpoždění od 0 do stanoveného času. Od verze 8 Gold.
Label NNNN Značka

Místo v seznamu operací, na které lze "skočit" pomocí GoTo NNNN.

(NNNN - max 4 písmena, na velikosti nezáleží.)

dtto
GoTo NNNN Jdi na Label NNNN

Skok na značku NNNN.

Skok je možný vpřed i vzad. Při přesunu vzad, tedy před příkaz GoTo vzniká tzv. smyčka.

dtto
Prerequisite 1) Podmínka

Je-li splněna podmínka, zadaná v parametru tohoto příkazu, provede se následující příkaz.

Není-li podmínka splněna, následující příkaz se neprovede a pokračuje se až dalším příkazem.

dtto
Probability 2) Pravděpodobnost [%] Pravděpodobnost provedení následujících operací (pro každou zvlášť),
až do konce seznamu nebo do dalšího příkazu Pravděpodobnost.
dtto

Random Order /

Sequential Order

Náhodné pořadí / Postupné pořadí

Od příkazu Náhodné pořadí bude pořadí následujících příkazů stanoveno náhodně,

až do příkazu Postupné pořadí.

dtto

Access to Variable

Přístup k proměnné Lze definovat proměnnou různého typu (číselné, textové, vzorce, čas ...). Od verze 9 Gold.

1) Tady autoři nezvolili zrovna obvyklý termín (Prerequisite = Předpoklad), a to zřejmě z důvodu odlišení od záložky Conditions.
Prerequisite je prostě příkaz, zajišťující větvení programu, na základě pravdivosti zadané podmínky. Jinak řečeno podmíněný skok, rozhodovací příkaz.

2) Následuje-li tedy po příkazu Pravděpodobnost 50% pět příkazů, každý se provede jen v polovině případů, ale každý jinak. Ne že by se provedly všechny jednou ano a jindy všechny ne.

    To trvá až do příchodu dalšího příkazu Pravděpodobnost, nebo do konce seznamu v operaci (v Prvku, Makru).

    V jednom seznamu lze tedy také kdekoliv zastavit tento jev příkazem Pravděpodobnost 100%.

I zde bude pár příkladů asi mnohem lepší, než detailní rozborka.

Na začátek článku

Proměnné

    Proměnné lze využít k tomu, aby operace, podmínky, spouštěče a mnoho dalších možností, byly flexibilnější. Použitím proměnné, namísto pevné hodnoty pro konkrétní volbu, je možné měnit hodnotu této možnosti za běhu a v závislosti na aktuální provozní situaci.

    Použitím proměnných lze:

    Možnosti jsou prakticky neomezené. Proměnné jsou obvykle vytvářeny úpravou operací, které přistupují k proměnným. S výjimkou lokálních proměnných lze všechny ostatní proměnné vytvářet, upravovat a odstraňovat pomocí Průzkumníka.

    Lokální proměnné se v Průkumníku nezobrazují. Pokud chceme libovolnou proměnnou testovat v Podmínce, musí existovat aspoň jedna NElokální, třeba globální. Jinak se v Podmínce proměnné nenabízejí, i když je třeba předtím jedna lokální vytvořena. (Nejspíš je to chyba v TC, či záměr, s nepochopeným významem.)

    Přestože je platnost Lokálních proměnných omezena vždy jen na jeden seznam operací, je třeba jim dávat odlišná jména LokBlok1, LokBlok2..., jinak je Dr. RailRoad hodnotí chybně.

Typy proměnných

Typ Popis Rozsah Poznámka
Number celé číslo - 2147483648  až  2147483647  
Text text nezjištěn  
Čas časový údaj 00:00:00.000  až  23:59:59.999  
Objekt prvek TC Výhybka, Vlak, Návěstidlo, Příslušenství, Indikátor, Blok, Cesta, Plán, Booster, Stanice  

    Proměnné se dále liší tím, kde je možno k nim přistupovat, zapisovat hodnoty, číst, vytvářet je. Tato vlastnost se nazývá Scope / Oblast působnosti. a nastavuje se při vytváření proměnné.

Scope / Oblast působnosti (rámec)

Název Hodnoty Přístup
Global / Globální jediná kdekoliv
Private / Soukromá pro každý objekt (prvek) v programu v souvislosti s daným objektem
Train / Vlak pro každý vlak v každém objektu, který je aktuálně spojen s tímto vlakem
Block / Blok pro každý blok v každém objektu, který je aktuálně spojen s tímto blokem
Schedule / Plán pro každý plán v každém objektu, který je aktuálně spojen s tímto plánem
Route / Cesta pro každou cestu v každém objektu, který je aktuálně spojen s touto cestou
Extended Accessories / Rozšířené příslušenství pro každý symbol rozšířeného příslušenství v každé kontrole rozšířeného příslušenství
Local / Místní jedna pro každou operaci pouze ve stejném seznamu operací

    Proměnná zástupný znak %V (viz manuál, strana 326) lze také použít v těchto vzorcích. Má zde specifický význam. Tyto zástupné znaky jsou v prvním průchodu výpočtu nahrazeny obsahem odpovídající proměnné. Výsledný vzorec se pak vypočte ve druhém průchodu obvyklým způsobem jako vzorec bez zástupných znaků %V.

    K detailnímu využití proměnných se možná časem vrátím. Zatím jsem použil jen nějaká počítadla průjezdů, zjišťování dle Popisu vlaků a pod. Některým pojmům a vztahům stále moc nerozumím. Nechci to vše stále svádět na manuál, ale některá vysvětlení a popisy by prostě potřebovaly více detailů a především příklady. S autory ve spojení nejsem, tak nezbývá, než uvádět věci vyzkoušené a fungující.

Na začátek článku

Tvorba proměnné

    Proměnnou lze vytvořit buď ...


... ze zál. Operace, z nabídky Řízení toku operací, Přidání vpravo, Změnit, Vytvořit ...


... nebo přímo z Průzkumníka.


V obou případech se nakonec otevře okno, kde se zadá Název, Typ (Typ objektu) a Rozsah.

    Po stisknutí OK je proměnná vytvořena. Lze prohlížet v Průzkumníku, včetně její hodnoty, pokud nejde o proměnnou s Rozsahem Local / Místní. Vymazat proměnnou lze v Průzkumníku, Místní se zřejmě smažou automaticky, jejich použití je prostě jen v použitém místě.

    Stojí také za zmínku, že přístup k proměnným bývá nejen v poli Operace, ale i na mnohých jiných místech. Je pak možno vkládat třeba text do Messages / Zpráv, číselné hodnoty do Vzorců a pod. Dělá se to následovně:

V zadávacím poli se vloží %V.
Pokud je vložení v daném místě podporováno, změní se znaky na %V[?].


Poklepáním na [?] se nabídne výběr Proměnné (existuje-li nějaká).

Po výběru se znaky opět změní a zobrazí vybranou proměnnou, např. %V[CountR].

    Smysluplné využití mi poněkud uniká, ale to je v podobných případech běžné. Navíc mám pocit, že ani autoři se s tím zatím moc nevypořádali, jak jsem tak nahlédl do manuálu.  No, každopádně by šlo udělat třeba místo zastavení v závislosti na počtu průjezdů, někde, nějak, nebo tak něco ... ale k čemu by to bylo dobré? To už posuďte sami.

Na začátek článku

Příklady

Zablikání reflektorem

    Obdobně to lze použít i na mnoho jiných funkcí, např. zvukových, ale i jiných, než Vlakových.

  

Vývojový diagram: A takto to vypadá v TC:

1.    Nastavení proměnné CB na "0".
2.    Label ZB
3.    Sled jednoho bliknutí. Samostatné příkazy, nebo připravené Makro.

4.    Zvýšení hodnoty proměnné CB o "1".
5.    Podmínka - Je-li hodnota CV < 3, ...

6.    ... pak se provede skok na ZB (zpět, tzv. smyčka).

7.    Není-li CB < 3, jde se na NE, tedy Konec.

 

Random / Sequential

    S Pravděpodobností a Náhodným pořadím jdou také dělat zajímavé triky. Stačí si jen přečíst Popis v tabulce v části Tok operací.

Počet vozidel v bloku

    Zjištění počtu vozidel v daném bloku a jeho výpis není problém. Možností bude možná víc, ověřil jsem jednu (autorem je Ruud Boer), kterou teď popíšu:

  1. Editační mód.
  2. Vytvořit proměnou (např. POCET_VLAKU_V_NADR), Typ Number / Číslo, Rozsah Globální..
  3. Vytvořit, definovat Station / Nádraží.
  4. Na Kolejiště vložit tlačítko (zde TL_LOOP) - zde se v Operaci provede načtení proměnné POCET_VLAKU_V_NADR.
  5. Vytvořit Flagman (zde FL_TRIG), který na začátku relace nebo po opuštění Edit. módu provede stisk tlačítka TL_LOOP.

    A teď s obrázky to, co tu ještě nebylo ...


ad3) Station / Nádraží se vytvoří v Dispečeru (okno Disp. aktivní) z Menu Blok.


ad3) Stejně jako v běžném Plánu se může přidělit jméno (zde Nádraží JIH) a stejným způsobem se také označí příslušné bloky nádraží.

ad4) Tlačítko TL_LOOP a jeho okno vlastností, ...


... kde na zál. Operace je vlastně hlavní, pracovní část kódu. Tvoří jej smyčka (mezi Označení ZAC a Jdi na ZAC, která se bude každou 1 s opakovat.
Zleva vložíme Přístup k proměnné a po stisknutí Změnit ...


... se otevře okno vlastností proměnné s přednastavenými hodnotami.


Ty změníme (viz obr.), takže po stisknutí OK ...


... se vše promítne i v poli Operace. V poli Blok je nutno vybrat jeden z bloků nádraží, a pak už jen OK.

    Teď ještě spustit cyklus smyčky při zahájení aplikace (spuštění TrainControlleru).

ad 4) Postačí Flagman F_TRIG, ...


... kde se nastaví požadované na zál. Trigger / Spoušť , ...


... a na zál. Operace pak pulzní aktivace tlačítka TL_LOOP.

To je vše, zkušební layout verze 9 Gold A4 k prohlédnutí a vyzkoušení je připojen.

    Příklad složitějšího kódu, který používám při výjezdu ze SN.

Jde o makro Start SN_oper, které je možno prohlédnout v layoutu.

Na začátek článku

Vzorce

Popis

    Zastavení vlaku nastavením Markerů už probráno bylo. Jen se to postupně napříč verzemi trochu mění. Podstata však zůstává.


Marker je aktivován, když Začátek (Střed, Konec) vlaku je vzdálen 50 cm od začátku úseku (tedy od aktivace proudového indikátoru). To je běžný, základní způsob.


Vybere-li se v nabídce Vzorec, centimetry zmizí, zadávací okna se prodlouží a je možno vložit Vzorec.

    Aktivace Markerů je pak vázána na délku loko, vozů, jejich počet, polohu atd. Využití je při posunu, výměně lokomotiv, či jen pro proměnné místo zastavení. Vzorce jsou také použity např. při Parkování.

    Ve vzorcích platí obvyklá pravidla matematiky. Mohou obsahovat čísla a operátory +, , * a /. Standardně se napřed provádí násobení a dělení, pak sčítání a odčítání, použití závorek je ovšem také možné a funguje obvykle. Čísla smí obsahovat desetinná místa, aby bylo možné určit i zlomek základních jednotek centimetrů nebo palců.

Na začátek článku

Zástupné znaky

Ve vzorcích se používají tzv. Zástupné znaky, pomocí nichž se do vzorce předávají proměnné parametry. Výsledná hodnota je pak závislá na vlaku, který do bloku vstupuje, nebo se tam nachází.

 
Znak Význam Poznámka
% Celková délka vozidel, na která se tento zástupný znak vztahuje.  
# Počet vozidel, na která se tento zástupný znak vztahuje.  
? Zástupný znak je nahrazen hodnotou 1, pokud se na něj odkazuje jedno nebo více vozidel.
Pokud se na tento zástupný znak nevztahuje žádné vozidlo, pak je hodnota 0.
 
B Pro blok, pokud se zástupný znak týká vozidel, která jsou již v bloku umístěna.
Pokud není zadán znak B, pak zástupný znak označuje vlak, který právě vstupuje do bloku.
 

Typový kód, který určuje vozidla, na která se zástupný znak vztahuje.

A vlak Celý vlak, loko i vozy (vagony).
C vagon Vagon .. C1=první, C2=druhý atd.
L loko tažná Tažná lokomotiva.
H loko tlačná Tlačná lokomotiva (postrk).

    Pokud za typovým kódem následuje písmeno R, pak se zástupný znak vztahuje na poslední vozidla daného typu (při pohledu ve směru nastupujícího vlaku). Pokud není uvedeno R, pak se zástupný znak vztahuje na první vozidla ve směru jízdy.
    Na konci zástupného znaku může následovat volitelné číslo. Toto číslo označuje, kolik vozidel se zástupný znak týká. Není-li uvedeno žádné číslo, míní se všechna vozidla tohoto typu. Platí to tedy stejně pro vozy i pro lokomotivy.

    Každý Marker lze nastavit jinak. Je jen třeba, aby Brake Marker, Stop Marker a délka Bloku byly spolu v souladu. Ve vzorcích lze také použít zástupný znak %V (viz výše). Má zde specifický význam. (Jaký, nemám tušení, tato věta je z manuálu. Třeba by tam šel vložit čas a zastavovat ráno jinde, než večer.). Tyto zástupné znaky jsou v prvním průchodu výpočtu nahrazeny obsahem odpovídající proměnné. Výsledný vzorec se pak vypočte ve druhém průchodu obvyklým způsobem, jako vzorec bez zástupných znaků %V.

Příklady

    A jako obvykle, příklady táhnou ...

 
Vzorec Hodnota Zobrazení

100+%A/2

100 + polovina délky celého vlaku.

100+%L+%C/2

100 + délka loko + délka poloviny vozů.

100+%L

100 + délka loko.

100+%A%CR1

100 + délka celého vlaku délka posledního vozu.
#L Počet lokomotiv vlaku. Použít počet vozidel pro parametrické zastavení lze, smysl je ovšem dost nejasný. Ale funguje to.
Dostat #L,C,A do proměnné, kterou pak lze někde použít (třeba vypsat), se mi zatím nepovedlo.
Celkový počet vozidel v bloku lze však zjistit i jinak.
#C Počet vozů vlaku.
#A Počet všech vozidel vlaku.

Obrázky v tabulce z manuálu RAILROAD & Co. Freiwald Software

    Tak, a můžete zkoušet a bádat. Prostor je zde k tomu obrovský.

Na začátek článku

Zástupné znaky 2

Zástupné znaky lze použít i na jiných místech, než ve vzorcích. V manuálu jsem o tom nenašel nic. Velmi podivné.

Znak   Význam   Poznámka
%A   adresa   Existuje-li. Pokud je dvouadr. (např. u čtyřstav. návěstidla), vypisuje jen první.
%B   aktuální blok   Název bloku, do kterého objekt patří.
%D   cílový blok   Cílový blok objektu.
%I   pořadové číslo
  digitálního systému
  0 … nepřipojeno
  1 … Lenz
  2 … HSI                  (takto je to ovšem u mne)
%N   název vybraného prvku   z nabídky
%S   startovní blok   Počáteční blok objektu.
%V   obsah vybrané proměnné   z nabídky
%W   název panelu  
%X   sloupec   pozice prvku na panelu
%Y   řádek

    Takto lze využít zástupné znaky v názvu prvků (loko, návěstidlo, výhybka ...) nebo třeba v textových prvcích. A jako obvykle, příklady ...

Na začátek článku

Příklady 2

Adresa lokomotivy v názvu

    Vidět adresu loko na tachometru se hodí.


V oknu vlastností loko stačí do názvu přidat %A.

Zobrazení Názvu a Adresy v Textovém prvku

    Použití je možné v názvu výhybky, návěstidla, přepínače, nejspíš asi ve všech prvcích, které Název mají.
    V následujícím příkladu je to pro 4stavové návěstidlo, jehož původní název byl N01DM.


Do názvu jsou vloženy zástupné znaky (viz tabulka výše).

V bublině se u návěstidla pak objeví ...

... a chceme-li to vypsat v textovém prvku


Vložením %N se objeví otazník, na kterém se použije dvojklik ...


... objeví se nabídka všech prvků, ze které se vybere požadované návěstidlo.


Podobně lze vložit i %V a opět dvojklikem přes otazník ...


... vybrat proměnnou (tady jen pro ukázku).


Textový prvek pak obsahuje Název prvku (zde návěstidlo), jeho Adresu, Nepřipojení, Název panelu, Umístění (sloupec, řádek) a Obsah proměnné.

    Veškeré tyto informace byly získány stylem pokus-omyl, je tedy možné, že existují i další možnosti. Pokud tedy časem zjistím nějaké další zajímavé varianty a možnosti, doplním.

    Co mi pořád hlava nebere, že jsem o tom v manuálu nenašel nic. Třeba jsem ale jen špatně hledal ...

Na začátek článku

Závěr

    Špatný manuál, málo konzultantů, vlastní neschopnost, to všechno přispívá k tomu, že řadu věcí nechápu, neumím používat, natož vysvětlit. Časem se to zlepšuje, a já to pak postupně budu doplňovat, editovat. Uživatelů verze 9 je u nás asi zatím dost málo, jak ale zjišťuji, počet se pořád zvyšuje. Technologie jdou vpřed kroky mílovými a my se nakonec stejně přizpůsobíme.

    Nemusím opakovat, že každého konzultanta, "výzkumníka", rád poznám. Ve dvou (i více) se to lépe táhne, to je jasná věc.

    Ovládání modelové železnice pomocí počítačové aplikace má výhod mnoho. Jednou z hlavních, je provoz v neopakujících se situacích. A právě k tomu značně přispívají příkazy, řídící tok operací. Tak si vyhrajte.

Na začátek článku

Menu

LokoPin  

12.06.2018  
  14.07.2021 Makro Start SN_oper
  22.09.2021 Zástupné znaky 2 (nepopsané v manuálu)
  25.10.2021 Zástupné znaky 2 (přidáno %B, %D, %S
     
  13.04.2022 poslední editace
     
Spolupracovali: Michal Kloz