08 Stisknuté tlačítko
Ukážeme si vytvoření reléového zabezpečovacího zařízení s cestovým systémem. Ten pracuje tak, že se tlačítky určí počátek a konec cesty. Počáteční tlačítko dále rozlišuje zdali se jedná o cestu vlakovou nebo posunovou. Musíme tedy zjistit která tlačítka a v jakém pořadí byla stisknuta.
Obecně bychom mohli řešit dva systémy, pro každé zhlaví vzlášť. Protože máme jednoduchou stanici, tak ji budeme řešit jako jeden celek. Dokud nebude dokončena cesta na jednom zhlaví tak se nebude moci zahájit stavění cesty na druhém zhlaví.
Paměťové proměnné
Nejdříve si připravíme Paměťové proměnné. Ty si budou pamatovat stav jednotlivých operací. Budou též použity k výměně parametrů mezi skripty. Do panelu si přidáme proměnné podle níže uvedené tabulky:
Akce tlačítka
Pro odchycení události změnu stavu tlačítka releovky si zavedeme nový Logix. Logix si nazveme třeba releovka. Do nového logixu si zadáme první podmínku s názvem stisknuteTlacitko.
Do nové podmínky postupně přidáme všechna tlačítka releovky. V mém případě jsou to ty, co začínají písmeny TRe. Budeme reagovat pouze na změnu do stavu Aktivní. Všechny řádky podmínky spojíme operátorem NEBO. Všechny řádky označíme jako Spouštěč. Nastavíme způsob spouštěné akce Provést akce kdykoliv spuštěné. Do akce dáme spustit skript Jython preference:skripty/stisknute_tlacitko.py.
Obsluha stisknutého tlačítka
Vše co lze vyřešit v Logix lze také vyřešit pomocí Jython skriptů. Práce se skripty je výhodnější v tom, že se skripty rychleji píší, skript má více možností než Logix a výsledek práce je mnohem přehlednější.
V adresáři skripty vytvoříme soubor stisknute_tlacitko.py.
Definice proměnných
Ve skriptu nejdříve deklarujeme importy a definujeme proměnné skriptu.
Nejdříve importujeme třídu jmri a konstanty bloku.
Následuje definice tlačítek releovky a tlačítka NX Odkud Kam. Pokračujeme definicí bloků, paměťových proměnných. Nakonec nezapomeneme definovat proměnné výhybek.
# stisknute_tlacitko.py
# Stisknuté tlačítko
# Petr Šídlo
import jmri
import jmri.Block.OCCUPIED as OCCUPIED
import jmri.Block.UNOCCUPIED as UNOCCUPIED
# tlačítka releovka
TReMiZe = sensors.provideSensor("TReMiZe")
TReMiBi = sensors.provideSensor("TReMiBi")
TReMiK1Ze = sensors.provideSensor("TReMiK1Ze")
TReMiK1Bi = sensors.provideSensor("TReMiK1Bi")
TReMiK2Ze = sensors.provideSensor("TReMiK2Ze")
TReMiK2Bi = sensors.provideSensor("TReMiK2Bi")
TReMiK4Bi = sensors.provideSensor("TReMiK4Bi")
TReRuZe = sensors.provideSensor("TReRuZe")
TReRuBi = sensors.provideSensor("TReRuBi")
TReRuK1Ze = sensors.provideSensor("TReRuK1Ze")
TReRuK1Bi = sensors.provideSensor("TReRuK1Bi")
TReRuK2Ze = sensors.provideSensor("TReRuK2Ze")
TReRuK2Bi = sensors.provideSensor("TReRuK2Bi")
TReKLZe = sensors.provideSensor("TReKLZe")
TReKLBi = sensors.provideSensor("TReKLBi")
tlacitka_releovka = [TReMiZe, TReMiBi, TReMiK1Ze, TReMiK1Bi, TReMiK2Ze, \
TReMiK2Bi, TReMiK4Bi, TReRuZe, TReRuBi, TReRuK1Ze, TReRuK1Bi, TReRuK2Ze, \
TReRuK2Bi, TReKLZe, TReKLBi]
ZapReleovka = sensors.provideSensor("ZapReleovka")
# tlačítka NX
TNXMi2a = sensors.provideSensor("TNXMi2a")
TNXMi2b = sensors.provideSensor("TNXMi2b")
TNXMi1a = sensors.provideSensor("TNXMi1a")
TNXMi1b = sensors.provideSensor("TNXMi1b")
TNXRu2a = sensors.provideSensor("TNXRu2a")
TNXRu2b = sensors.provideSensor("TNXRu2b")
TNXRu1a = sensors.provideSensor("TNXRu1a")
TNXRu1b = sensors.provideSensor("TNXRu1b")
TNXKr2a = sensors.provideSensor("TNXKr2a")
TNXKr2b = sensors.provideSensor("TNXKr2b")
TNXKr1a = sensors.provideSensor("TNXKr1a")
TNXKr1b = sensors.provideSensor("TNXKr1b")
TNXK1a = sensors.provideSensor("TNXK1a")
TNXK1b = sensors.provideSensor("TNXK1b")
TNXK2a = sensors.provideSensor("TNXK2a")
TNXK2b = sensors.provideSensor("TNXK2b")
TNXK4a = sensors.provideSensor("TNXK4a")
TNXK4b = sensors.provideSensor("TNXK4b")
# bloky
BK1 = blocks.getBlock("BK1")
BK2 = blocks.getBlock("BK2")
BK4 = blocks.getBlock("BK4")
BV1 = blocks.getBlock("BV1")
BV2 = blocks.getBlock("BV2")
BV3 = blocks.getBlock("BV3")
BV4 = blocks.getBlock("BV4")
BMi1 = blocks.getBlock("BMi1")
BMi2 = blocks.getBlock("BMi2")
BRu1 = blocks.getBlock("BRu1")
BRu2 = blocks.getBlock("BRu2")
BKr1 = blocks.getBlock("BKr1")
BKr2 = blocks.getBlock("BKr2")
vsechny_bloky = [BK1, BK2, BK4, BV1, BV2, BV3, BV4, BMi1, BMi2, BRu1, BRu2, BKr1, BKr2]
# paměťové proměnné
pocetStisknutychTlacitek = memories.provideMemory("pocetStisknutychTlacitek")
prvniStisknuteTlacitko = memories.provideMemory("prvniStisknuteTlacitko")
druheStisknuteTlacitko = memories.provideMemory("druheStisknuteTlacitko")
platnaKombinaceOdkudKam = memories.provideMemory("platnaKombinaceOdkudKam")
volnaJizdniCesta = memories.provideMemory("volnaJizdniCesta")
moznoPostavitOdvrat = memories.provideMemory("moznoPostavitOdvrat")
spustenoOdkudKam = memories.provideMemory("spustenoOdkudKam")
# výhybky
V1 = turnouts.provideTurnout("V1")
V2 = turnouts.provideTurnout("V2")
V3 = turnouts.provideTurnout("V3")
V4 = turnouts.provideTurnout("V4")
Hlavní program
Pokračujeme psaním těla hlavního programu. Ten je krátký. Volá funkci hlavni_program().
# --------------------------------------------------------------
# spustit hlavní program
hlavni_program()
Funkce hlavni_program()
Ve funkci hlavní program voláme další funkce. Nejdříve nastavíme proměnné skriptu. Potom postupně voláme jednotlivé funkce. Pokud výsledek některé z funkcí má vliv na zbytek skriptu, tak se výsledek testuje. Pokud výsledek testu neumožňuje pokračování skriptu, tak je skript předčasně ukončen.
# hlavní program
def hlavni_program() :
# pokud není povolená releovka, tak nic nedělej
if (ZapReleovka.getKnownState() != ACTIVE) :
return
platnaKombinaceOdkudKam.setState(0)
volnaJizdniCesta.setState(0)
moznoPostavitOdvrat.setState(0)
spustenoOdkudKam.setState(0)
pocet_stisknutych_tlacitek()
if (pocetStisknutychTlacitek.getState() == 1) :
uloz_prvni_stisknute_tlacitko()
if (pocetStisknutychTlacitek.getState() == 2) :
uloz_druhe_stisknute_tlacitko()
if ((pocetStisknutychTlacitek.getState() >= 3) or (pocetStisknutychTlacitek.getState() <= 0)) :
return
# mám právě dvě tlačítka, začnu testovat
# otestuj platnost odkud - kam
otestuj_odkud_kam()
if (platnaKombinaceOdkudKam.getState() == 0) :
return
# platná kombinace odkud - kam
# zjistí volnost jízdní cesty
zjisti_volnost_jizdni_cesty()
if (volnaJizdniCesta.getState() == 0) :
return
# postavit odvrat
postavit_odvrat()
if (moznoPostavitOdvrat.getState() == 0) :
return
# postavit cestu bez návěstidel
postavit_cestu_bez_navestidel()
return
Funkce pocet_stisknutych_tlacitek()
Funkce zjistí aktuální počet stisknutých tlačítek releovky. Výsledek uloží do proměnné.
# zjistí počet stisknutých tlačítek
def pocet_stisknutych_tlacitek() :
nova_hodnota = 0
for tlacitko in tlacitka_releovka :
if (tlacitko.getState() == ACTIVE) :
nova_hodnota = nova_hodnota + 1
pocetStisknutychTlacitek.setState(nova_hodnota)
if (nova_hodnota == 0) :
prvniStisknuteTlacitko.setValue("")
return
Funkce uloz_prvni_stisknute_tlacitko()
Najde stisknuté tlačítko a jeho uživatelský název uloží do proměnné.
# uloží první stisknuté tlačítko do proměnné
def uloz_prvni_stisknute_tlacitko() :
druheStisknuteTlacitko.setValue("")
for tlacitko in tlacitka_releovka :
if (tlacitko.getState() == ACTIVE) :
prvniStisknuteTlacitko.setValue(tlacitko.getUserName())
return
prvniStisknuteTlacitko.setValue("")
return
Funkce uloz_druhe_stisknute_tlacitko()
Najde druhé stisknuté tlačítko a jeho uživatelský název uloží do proměnné. Je to podobné funkci uloz_prvni_stisknute_tlacitko(), jenom je tam o jeden test navíc.
# uloží druhé stisknuté tlačítko do proměnné
def uloz_druhe_stisknute_tlacitko() :
for tlacitko in tlacitka_releovka :
if ((tlacitko.getState() == ACTIVE) and (prvniStisknuteTlacitko.getValue() != tlacitko.getUserName())) :
druheStisknuteTlacitko.setValue(tlacitko.getUserName())
return
druheStisknuteTlacitko.setValue("")
return
Funkce otestuj_odkud_kam()
Ke každému prvnímu stisknutému tlačítku sestaví seznam povolených druhých tlačítek. Potom se testuje zdali je druhé tlačítko v seznamu. Pokud ano tak se jedná o platnou kombinaci. Jinak je kombinace tlačítek neplatná.
# otestuje platnou kombinaci odkud - kam
def otestuj_odkud_kam() :
if (prvniStisknuteTlacitko.getValue() == "TReMiZe") :
druhe_platne_tlacitko_seznam = [TReMiK1Bi, TReMiK2Bi]
elif (prvniStisknuteTlacitko.getValue() == "TReMiBi") :
druhe_platne_tlacitko_seznam = [TReMiK1Bi, TReMiK2Bi, TReMiK4Bi]
elif (prvniStisknuteTlacitko.getValue() == "TReMiK1Ze") :
druhe_platne_tlacitko_seznam = [TReMiBi]
elif (prvniStisknuteTlacitko.getValue() == "TReMiK1Bi") :
druhe_platne_tlacitko_seznam = [TReMiBi]
elif (prvniStisknuteTlacitko.getValue() == "TReMiK2Ze") :
druhe_platne_tlacitko_seznam = [TReMiBi]
elif (prvniStisknuteTlacitko.getValue() == "TReMiK2Bi") :
druhe_platne_tlacitko_seznam = [TReMiBi]
elif (prvniStisknuteTlacitko.getValue() == "TReMiK4Bi") :
druhe_platne_tlacitko_seznam = [TReMiBi]
elif (prvniStisknuteTlacitko.getValue() == "TReRuZe") :
druhe_platne_tlacitko_seznam = [TReRuK1Bi, TReRuK2Bi]
elif (prvniStisknuteTlacitko.getValue() == "TReRuBi") :
druhe_platne_tlacitko_seznam = [TReRuK1Bi, TReRuK2Bi]
elif (prvniStisknuteTlacitko.getValue() == "TReRuK1Ze") :
druhe_platne_tlacitko_seznam = [TReRuBi]
elif (prvniStisknuteTlacitko.getValue() == "TReRuK1Bi") :
druhe_platne_tlacitko_seznam = [TReRuBi]
elif (prvniStisknuteTlacitko.getValue() == "TReRuK2Ze") :
druhe_platne_tlacitko_seznam = [TReRuBi, TReKLBi]
elif (prvniStisknuteTlacitko.getValue() == "TReRuK2Bi") :
druhe_platne_tlacitko_seznam = [TReRuBi, TReKLBi]
elif (prvniStisknuteTlacitko.getValue() == "TReKLZe") :
druhe_platne_tlacitko_seznam = [TReRuK2Bi]
elif (prvniStisknuteTlacitko.getValue() == "TReKLBi") :
druhe_platne_tlacitko_seznam = [TReRuK2Bi]
else :
druhe_platne_tlacitko_seznam = []
nalezena_platna_kombinace = False
for test_druhe_tlacitko in druhe_platne_tlacitko_seznam :
if (druheStisknuteTlacitko.getValue() == test_druhe_tlacitko.getUserName()) :
nalezena_platna_kombinace = True
if (nalezena_platna_kombinace) :
platnaKombinaceOdkudKam.setState(1)
else :
platnaKombinaceOdkudKam.setState(0)
return
Funkce zjisti_volnost_jizdni_cesty()
Zjišťuje se, zdali je zvolená jízdní cesta volná. Podle počátečního a koncového tlačítka se sestaví seznam bloků, které se budou testovat. Sestavuje se zvlášť seznam bloků pro testování obsazenosti a seznam bloků pro testování kolizní cesty. U posunových cest je dovoleno vjet na obsazenou kolej, pokud to není výhybka. Výsledkem funkce nastavení proměnné pro volnost jízdní cesty.
# zjistí volnost jízdní cesty
# vlaková cesta musí být celá volná
# posunová cesta musí být volné výhybky
# zjišťuje se obsazenost bloků
# zjišťuje se kolizní cesta
def zjisti_volnost_jizdni_cesty() :
if ((prvniStisknuteTlacitko.getValue() == "TReMiZe") and (druheStisknuteTlacitko.getValue() == "TReMiK1Bi")) :
# vlaková Mikulášovice - 1. kolej
bloky_pro_otestovani_obsazeno = [BMi1, BV1, BK1]
bloky_pro_otestovani_postaveno = [BMi1, BV1, BK1]
elif ((prvniStisknuteTlacitko.getValue() == "TReMiZe") and (druheStisknuteTlacitko.getValue() == "TReMiK2Bi")) :
# vlaková Mikulášovice - 2. kolej
bloky_pro_otestovani_obsazeno = [BMi1, BV1, BV2, BK2]
bloky_pro_otestovani_postaveno = [BMi1, BV1, BV2, BK2]
elif ((prvniStisknuteTlacitko.getValue() == "TReMiBi") and (druheStisknuteTlacitko.getValue() == "TReMiK1Bi")) :
# posunová Mikulášovice - 1. kolej
bloky_pro_otestovani_postaveno = [BV1, BK1]
bloky_pro_otestovani_obsazeno = [BV1]
elif ((prvniStisknuteTlacitko.getValue() == "TReMiBi") and (druheStisknuteTlacitko.getValue() == "TReMiK2Bi")) :
# posunová Mikulášovice - 2. kolej
bloky_pro_otestovani_postaveno = [BV1, BV2, BK1]
bloky_pro_otestovani_obsazeno = [BV1, BV2]
elif ((prvniStisknuteTlacitko.getValue() == "TReMiBi") and (druheStisknuteTlacitko.getValue() == "TReMiK4Bi")) :
# posunová Mikulášovice - 4. kolej
bloky_pro_otestovani_postaveno = [BV1, BV2, BK4]
bloky_pro_otestovani_obsazeno = [BV1, BV2]
elif ((prvniStisknuteTlacitko.getValue() == "TReMiK1Ze") and (druheStisknuteTlacitko.getValue() == "TReMiBi")) :
# vlaková 1. kolej - Mikulášovice
bloky_pro_otestovani_postaveno = [BV1, BMi1, BMi2]
bloky_pro_otestovani_obsazeno = [BV1, BMi1, BMi2]
elif ((prvniStisknuteTlacitko.getValue() == "TReMiK1Bi") and (druheStisknuteTlacitko.getValue() == "TReMiBi")) :
# posunová 1. kolej - Mikulášovice
bloky_pro_otestovani_postaveno = [BV1, BMi1]
bloky_pro_otestovani_obsazeno = [BV1]
elif ((prvniStisknuteTlacitko.getValue() == "TReMiK2Ze") and (druheStisknuteTlacitko.getValue() == "TReMiBi")) :
# vlaková 2. kolej - Mikulášovice
bloky_pro_otestovani_postaveno = [BV1, BV2, BMi1, BMi2]
bloky_pro_otestovani_obsazeno = [BV1, BV2, BMi1, BMi2]
elif ((prvniStisknuteTlacitko.getValue() == "TReMiK2Bi") and (druheStisknuteTlacitko.getValue() == "TReMiBi")) :
# posunová 2. kolej - Mikulášovice
bloky_pro_otestovani_postaveno = [BV1, BV2, BMi1]
bloky_pro_otestovani_obsazeno = [BV1, BV2]
elif ((prvniStisknuteTlacitko.getValue() == "TReMiK4Bi") and (druheStisknuteTlacitko.getValue() == "TReMiBi")) :
# posunová 4. kolej - Mikulášovice
bloky_pro_otestovani_postaveno = [BV1, BV2, BMi1]
bloky_pro_otestovani_obsazeno = [BV1, BV2]
elif ((prvniStisknuteTlacitko.getValue() == "TReRuZe") and (druheStisknuteTlacitko.getValue() == "TReRuK1Bi")) :
# vlaková Rumburk - 1. kolej
bloky_pro_otestovani_postaveno = [BRu1, BV4, BK1]
bloky_pro_otestovani_obsazeno = [BRu1, BV4, BK1]
elif ((prvniStisknuteTlacitko.getValue() == "TReRuZe") and (druheStisknuteTlacitko.getValue() == "TReRuK2Bi")) :
# vlaková Rumburk - 2. kolej
bloky_pro_otestovani_postaveno = [BRu1, BV4, BV3, BK2]
bloky_pro_otestovani_obsazeno = [BRu1, BV4, BV3, BK2]
elif ((prvniStisknuteTlacitko.getValue() == "TReRuBi") and (druheStisknuteTlacitko.getValue() == "TReRuK1Bi")) :
# posunová Rumburk - 1. kolej
bloky_pro_otestovani_postaveno = [BV4, BK1]
bloky_pro_otestovani_obsazeno = [BV4]
elif ((prvniStisknuteTlacitko.getValue() == "TReRuBi") and (druheStisknuteTlacitko.getValue() == "TReRuK2Bi")) :
# posunová Rumburk - 2. kolej
bloky_pro_otestovani_postaveno = [BV4, BV3, BK2]
bloky_pro_otestovani_obsazeno = [BV4, BV3]
elif ((prvniStisknuteTlacitko.getValue() == "TReRuK1Ze") and (druheStisknuteTlacitko.getValue() == "TReRuBi")) :
# vlaková 1. kolej - Rumburk
bloky_pro_otestovani_postaveno = [BV4, BRu1, BRu2]
bloky_pro_otestovani_obsazeno = [BV4, BRu1, BRu2]
elif ((prvniStisknuteTlacitko.getValue() == "TReRuK1Bi") and (druheStisknuteTlacitko.getValue() == "TReRuBi")) :
# posunová 1. kolej - Rumburk
bloky_pro_otestovani_postaveno = [BV4, BRu1]
bloky_pro_otestovani_obsazeno = [BV4]
elif ((prvniStisknuteTlacitko.getValue() == "TReRuK2Ze") and (druheStisknuteTlacitko.getValue() == "TReRuBi")) :
# vlaková 2. kolej - Rumburk
bloky_pro_otestovani_postaveno = [BV3, BV4, BRu1, BRu2]
bloky_pro_otestovani_obsazeno = [BV3, BV4, BRu1, BRu2]
elif ((prvniStisknuteTlacitko.getValue() == "TReRuK2Ze") and (druheStisknuteTlacitko.getValue() == "TReKLBi")) :
# vlaková 2. kolej - Krásná Lípa
bloky_pro_otestovani_postaveno = [BV3, BKr1, BKr2]
bloky_pro_otestovani_obsazeno = [BV3, BKr1, BKr2]
elif ((prvniStisknuteTlacitko.getValue() == "TReRuK2Bi") and (druheStisknuteTlacitko.getValue() == "TReRuBi")) :
# posunová 2. kolej - Rumburk
bloky_pro_otestovani_postaveno = [BV3, BV4, BRu1]
bloky_pro_otestovani_obsazeno = [BV3, BV4]
elif ((prvniStisknuteTlacitko.getValue() == "TReRuK2Bi") and (druheStisknuteTlacitko.getValue() == "TReKLBi")) :
# posunová 2. kolej - Krásná Lípa
bloky_pro_otestovani_postaveno = [BV3, BKr1]
bloky_pro_otestovani_obsazeno = [BV3]
elif ((prvniStisknuteTlacitko.getValue() == "TReKLZe") and (druheStisknuteTlacitko.getValue() == "TReRuK2Bi")) :
# vlaková Krásná Lípa - 2. kolej
bloky_pro_otestovani_postaveno = [BKr1, BV3, BK2]
bloky_pro_otestovani_obsazeno = [BKr1, BV3, BK2]
elif ((prvniStisknuteTlacitko.getValue() == "TReKLBi") and (druheStisknuteTlacitko.getValue() == "TReRuK2Bi")) :
# posunová Krásná Lípa - 2. kolej
bloky_pro_otestovani_postaveno = [BV3, BK2]
bloky_pro_otestovani_obsazeno = [BV3]
else :
bloky_pro_otestovani_postaveno = []
bloky_pro_otestovani_obsazeno = []
nalezen_obsazeny_blok = False
for test_blok in bloky_pro_otestovani_obsazeno :
test_layout_blok = layoutblocks.getLayoutBlock(test_blok)
if (test_blok.getState() != UNOCCUPIED) :
nalezen_obsazeny_blok = True
nalezen_rezervovany_blok = False
for test_blok in bloky_pro_otestovani_postaveno :
test_layout_blok = layoutblocks.getLayoutBlock(test_blok)
if (test_layout_blok.getUseExtraColor() == True) :
nalezen_rezervovany_blok = True
if (nalezen_obsazeny_blok or nalezen_rezervovany_blok) :
volnaJizdniCesta.setState(0)
else :
volnaJizdniCesta.setState(1)
return
Funkce postavit_odvrat()
Postavit odvratné výhybky je možné i jiným způsobem. V tomto návodu je použita tato funkce jako místo, kam by se umisťovali ostatní příkazy. Mezi ně patří například spouštění závor. Funkce volá další dvě funkce. Buď se staví odvratná výhybka V3 nebo se staví odvratná výhybka V4. Pokud se odvrat podařilo nastavit, tak se nastaví i příslušná proměnná.
# postavit odvratné výhybky
def postavit_odvrat() :
if ((prvniStisknuteTlacitko.getValue() == "TReRuZe") and (druheStisknuteTlacitko.getValue() == "TReRuK1Bi")) :
# vlaková Rumburk - 1. kolej
dej_V3_primo()
elif ((prvniStisknuteTlacitko.getValue() == "TReRuBi") and (druheStisknuteTlacitko.getValue() == "TReRuK1Bi")) :
# posunová Rumburk - 1. kolej
dej_V3_primo()
elif ((prvniStisknuteTlacitko.getValue() == "TReRuK1Ze") and (druheStisknuteTlacitko.getValue() == "TReRuBi")) :
# vlaková 1. kolej - Rumburk
dej_V3_primo()
elif ((prvniStisknuteTlacitko.getValue() == "TReRuK1Bi") and (druheStisknuteTlacitko.getValue() == "TReRuBi")) :
# posunová 1. kolej - Rumburk
dej_V3_primo()
elif ((prvniStisknuteTlacitko.getValue() == "TReRuK2Ze") and (druheStisknuteTlacitko.getValue() == "TReKLBi")) :
# vlaková 2. kolej - Krásná Lípa
dej_V4_primo()
elif ((prvniStisknuteTlacitko.getValue() == "TReRuK2Bi") and (druheStisknuteTlacitko.getValue() == "TReKLBi")) :
# posunová 2. kolej - Krásná Lípa
dej_V4_primo()
elif ((prvniStisknuteTlacitko.getValue() == "TReKLZe") and (druheStisknuteTlacitko.getValue() == "TReRuK2Bi")) :
# vlaková Krásná Lípa - 2. kolej
dej_V4_primo()
elif ((prvniStisknuteTlacitko.getValue() == "TReKLBi") and (druheStisknuteTlacitko.getValue() == "TReRuK2Bi")) :
# posunová Krásná Lípa - 2. kolej
dej_V4_primo()
else :
moznoPostavitOdvrat.setState(1)
return
# dej odvrat V3 do přímo
def dej_V3_primo() :
if (V3.getState() == CLOSED) :
# už máme hotovo
moznoPostavitOdvrat.setState(1)
return
if (BV3.getState() == UNOCCUPIED) :
V3.setState(CLOSED)
moznoPostavitOdvrat.setState(1)
else :
moznoPostavitOdvrat.setState(0)
return
# dej odvrat V4 do přímo
def dej_V4_primo() :
if (V4.getState() == CLOSED) :
# už máme hotovo
moznoPostavitOdvrat.setState(1)
return
if (BV4.getState() == UNOCCUPIED) :
V4.setState(CLOSED)
moznoPostavitOdvrat.setState(1)
else :
moznoPostavitOdvrat.setState(0)
return
Funkce postavit_cestu_bez_navestidel()
Pokud všechny volané funkce dopadly dobře a skript nebyl předčasně ukončen, tak se začne stavět jízdní cesta. Pro postavení cesty se využije připravený systém NX Odkud Kam. Postavení cesty se provede aktivací příslušných tlačítek TNX. Na závěr se nastaví proměnná, která oznamuje že bylo zahájeno stavění cesty. Skript se ukončí.
# postavit cestu bez návěstidel
def postavit_cestu_bez_navestidel() :
if ((prvniStisknuteTlacitko.getValue() == "TReMiZe") and (druheStisknuteTlacitko.getValue() == "TReMiK1Bi")) :
# vlaková Mikulášovice - 1. kolej
TNXMi2b.setKnownState(ACTIVE)
TNXK1b.setKnownState(INACTIVE)
TNXK1b.setKnownState(ACTIVE)
elif ((prvniStisknuteTlacitko.getValue() == "TReMiZe") and (druheStisknuteTlacitko.getValue() == "TReMiK2Bi")) :
# vlaková Mikulášovice - 2. kolej
TNXMi2b.setKnownState(ACTIVE)
TNXK2b.setKnownState(INACTIVE)
TNXK2b.setKnownState(ACTIVE)
elif ((prvniStisknuteTlacitko.getValue() == "TReMiBi") and (druheStisknuteTlacitko.getValue() == "TReMiK1Bi")) :
# posunová Mikulášovice - 1. kolej
TNXMi1b.setKnownState(ACTIVE)
TNXK1b.setKnownState(INACTIVE)
TNXK1b.setKnownState(ACTIVE)
elif ((prvniStisknuteTlacitko.getValue() == "TReMiBi") and (druheStisknuteTlacitko.getValue() == "TReMiK2Bi")) :
# posunová Mikulášovice - 2. kolej
TNXMi1b.setKnownState(ACTIVE)
TNXK2b.setKnownState(INACTIVE)
TNXK2b.setKnownState(ACTIVE)
elif ((prvniStisknuteTlacitko.getValue() == "TReMiBi") and (druheStisknuteTlacitko.getValue() == "TReMiK4Bi")) :
# posunová Mikulášovice - 4. kolej
TNXMi1b.setKnownState(ACTIVE)
TNXK4b.setKnownState(INACTIVE)
TNXK4b.setKnownState(ACTIVE)
elif ((prvniStisknuteTlacitko.getValue() == "TReMiK1Ze") and (druheStisknuteTlacitko.getValue() == "TReMiBi")) :
# vlaková 1. kolej - Mikulášovice
TNXK1a.setKnownState(INACTIVE)
TNXK1a.setKnownState(ACTIVE)
TNXMi2a.setKnownState(ACTIVE)
elif ((prvniStisknuteTlacitko.getValue() == "TReMiK1Bi") and (druheStisknuteTlacitko.getValue() == "TReMiBi")) :
# posunová 1. kolej - Mikulášovice
TNXK1a.setKnownState(INACTIVE)
TNXK1a.setKnownState(ACTIVE)
TNXMi1a.setKnownState(ACTIVE)
elif ((prvniStisknuteTlacitko.getValue() == "TReMiK2Ze") and (druheStisknuteTlacitko.getValue() == "TReMiBi")) :
# vlaková 2. kolej - Mikulášovice
TNXK2a.setKnownState(INACTIVE)
TNXK2a.setKnownState(ACTIVE)
TNXMi2a.setKnownState(ACTIVE)
elif ((prvniStisknuteTlacitko.getValue() == "TReMiK2Bi") and (druheStisknuteTlacitko.getValue() == "TReMiBi")) :
# posunová 2. kolej - Mikulášovice
TNXK2a.setKnownState(INACTIVE)
TNXK2a.setKnownState(ACTIVE)
TNXMi1a.setKnownState(ACTIVE)
elif ((prvniStisknuteTlacitko.getValue() == "TReMiK4Bi") and (druheStisknuteTlacitko.getValue() == "TReMiBi")) :
# posunová 4. kolej - Mikulášovice
TNXK4a.setKnownState(INACTIVE)
TNXK4a.setKnownState(ACTIVE)
TNXMi1a.setKnownState(ACTIVE)
elif ((prvniStisknuteTlacitko.getValue() == "TReRuZe") and (druheStisknuteTlacitko.getValue() == "TReRuK1Bi")) :
# vlaková Rumburk - 1. kolej
TNXRu2a.setKnownState(ACTIVE)
TNXK1a.setKnownState(INACTIVE)
TNXK1a.setKnownState(ACTIVE)
elif ((prvniStisknuteTlacitko.getValue() == "TReRuZe") and (druheStisknuteTlacitko.getValue() == "TReRuK2Bi")) :
# vlaková Rumburk - 2. kolej
TNXRu2a.setKnownState(ACTIVE)
TNXK2a.setKnownState(INACTIVE)
TNXK2a.setKnownState(ACTIVE)
elif ((prvniStisknuteTlacitko.getValue() == "TReRuBi") and (druheStisknuteTlacitko.getValue() == "TReRuK1Bi")) :
# posunová Rumburk - 1. kolej
TNXRu1a.setKnownState(ACTIVE)
TNXK1a.setKnownState(INACTIVE)
TNXK1a.setKnownState(ACTIVE)
elif ((prvniStisknuteTlacitko.getValue() == "TReRuBi") and (druheStisknuteTlacitko.getValue() == "TReRuK2Bi")) :
# posunová Rumburk - 2. kolej
TNXRu1a.setKnownState(ACTIVE)
TNXK2a.setKnownState(INACTIVE)
TNXK2a.setKnownState(ACTIVE)
elif ((prvniStisknuteTlacitko.getValue() == "TReRuK1Ze") and (druheStisknuteTlacitko.getValue() == "TReRuBi")) :
# vlaková 1. kolej - Rumburk
TNXK1b.setKnownState(INACTIVE)
TNXK1b.setKnownState(ACTIVE)
TNXRu2b.setKnownState(ACTIVE)
elif ((prvniStisknuteTlacitko.getValue() == "TReRuK1Bi") and (druheStisknuteTlacitko.getValue() == "TReRuBi")) :
# posunová 1. kolej - Rumburk
TNXK1b.setKnownState(INACTIVE)
TNXK1b.setKnownState(ACTIVE)
TNXRu1b.setKnownState(ACTIVE)
elif ((prvniStisknuteTlacitko.getValue() == "TReRuK2Ze") and (druheStisknuteTlacitko.getValue() == "TReRuBi")) :
# vlaková 2. kolej - Rumburk
TNXK2b.setKnownState(INACTIVE)
TNXK2b.setKnownState(ACTIVE)
TNXRu2b.setKnownState(ACTIVE)
elif ((prvniStisknuteTlacitko.getValue() == "TReRuK2Ze") and (druheStisknuteTlacitko.getValue() == "TReKLBi")) :
# vlaková 2. kolej - Krásná Lípa
TNXK2b.setKnownState(INACTIVE)
TNXK2b.setKnownState(ACTIVE)
TNXKr2b.setKnownState(ACTIVE)
elif ((prvniStisknuteTlacitko.getValue() == "TReRuK2Bi") and (druheStisknuteTlacitko.getValue() == "TReRuBi")) :
# posunová 2. kolej - Rumburk
TNXK2b.setKnownState(INACTIVE)
TNXK2b.setKnownState(ACTIVE)
TNXRu1b.setKnownState(ACTIVE)
elif ((prvniStisknuteTlacitko.getValue() == "TReRuK2Bi") and (druheStisknuteTlacitko.getValue() == "TReKLBi")) :
# posunová 2. kolej - Krásná Lípa
TNXK2b.setKnownState(INACTIVE)
TNXK2b.setKnownState(ACTIVE)
TNXKr1b.setKnownState(ACTIVE)
elif ((prvniStisknuteTlacitko.getValue() == "TReKLZe") and (druheStisknuteTlacitko.getValue() == "TReRuK2Bi")) :
# vlaková Krásná Lípa - 2. kolej
TNXKr2a.setKnownState(ACTIVE)
TNXK2a.setKnownState(INACTIVE)
TNXK2a.setKnownState(ACTIVE)
elif ((prvniStisknuteTlacitko.getValue() == "TReKLBi") and (druheStisknuteTlacitko.getValue() == "TReRuK2Bi")) :
# posunová Krásná Lípa - 2. kolej
TNXKr1a.setKnownState(ACTIVE)
TNXK2a.setKnownState(INACTIVE)
TNXK2a.setKnownState(ACTIVE)
spustenoOdkudKam.setState(1)
return
vytvořeno 13. 10. 2019