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.
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.
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.
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:
počítat události, ke kterým dochází během provozu, a vyhodnotit stav
dynamicky měnit názvy vlaků, zobrazených v blocích
provést aritmetické výpočty a vyhodnotit výsledek
vybrat objekt z množiny identických objektů pro práci s jedním jednoduchým obecným makrem
měnit zpoždění nebo pravděpodobnost operací v seznamu operací dynamicky
dynamicky ovlivňovat rychlost dočasných omezení rychlosti
ovlivnit vzdálenosti nebo rampy značek, nebo vzdálenosti dynamických krátkých vzdáleností
a tak dále …
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í.
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.
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".
4. Zvýšení hodnoty proměnné CB o "1". 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í.
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:
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.
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ů.
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.
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ý.
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 ...
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 ...
Š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.
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 |