09 Nastavit návěstidlo
V minulé kapitole jsme úspěšně zahájili postavení jízdní cesty. Před tím jsme zkontrolovali, že jsou splněna všechna kritéria pro zahájení této činnosti. Postavení jízdní cesty jsme spustili aktivací tlačítek NX. Skript skončil nastavením proměnné spustenoOdkudKam.
Akce spuštění skriptu
Pro odchycení změny stavu proměnné spustenoOdkudKam si zavedeme novou podmínku v Logixu releovka. Podmínku nazveme spustenoOdkudKam.
Do nové podmínky do části Logický výraz zadáme naši paměťovou proměnnou spustenoOdkudKam a budeme testovat její změnu na hodnotu 1. Řádek podmínky označíme jako spouštěč. Nastavíme způsob spouštěné akce Provést akce pouze při změně stavu. Do akce dáme spustit skript Jython preference:skripty/nastavit_navestidlo.py.
Obsluha návěstidel
Skript nastavit_navestidlo.py je spuštěn až poté, co byl vydán příkaz k nastavení jízdní cesty. Ve chvíli spuštění skriptu nemusí, a zřejmě ani nebude, jízdní cesta postavena. Skript tedy musí počkat na postavení všech výhybek, případně závor. Pokud se dokončení postavení jízdní cesty nedočká do stanoveného časového limitu tak nastavení návěstidel do volnoznaku neprovede. Místo toho provede zrušení již proběhlých kroků a uvede panel do původního stavu.
Třída CekejNaSnimace
Skript bude tvořen jednou třídou CekejNaSnimace, která je potomkem třídy AbstractAutomaton. Definice třídy vypadá následovně:
# nastavit_navestidlo.py
# Nastavit návěstidlo
# Petr Šídlo
# nastaví volnoznak na návěstidle
# čekání na rezervaci bloků a postavení výhybek
#
import jmri
class CekejNaSnimace(jmri.jmrit.automat.AbstractAutomaton) :
# definice metody init()
def init(self):
# tělo metody
# definice metody handle()
def handle(self):
# tělo metody
# definice ostatních metod
# konec definice třídy
Spuštění třídy ve vlákně
Po definici třídy napíšeme kód, který zřídí instanci třídy a třídu spustí:
# vytvořit instanci třídy
a = CekejNaSnimace()
# nastavení jména instance, nepovinné
a.setName("nastavit_navestidlo.py Skript čekání na snímače".decode("UTF-8"))
# spuštění třídy
a.start()
Metoda init()
V inicializační metodě init() nastavíme proměnné třídy. Postupně definujeme tlačítka releovky, výhybky, bloky, paměťové proměnné, ostatní proměnné třídy, návěstidla a návěsti.
# načtení snímačů, výhybek a proměnných
def init(self):
# tlačítka releovka
self.TReMiZe = sensors.provideSensor("TReMiZe")
self.TReMiBi = sensors.provideSensor("TReMiBi")
self.TReMiK1Ze = sensors.provideSensor("TReMiK1Ze")
self.TReMiK1Bi = sensors.provideSensor("TReMiK1Bi")
self.TReMiK2Ze = sensors.provideSensor("TReMiK2Ze")
self.TReMiK2Bi = sensors.provideSensor("TReMiK2Bi")
self.TReMiK4Bi = sensors.provideSensor("TReMiK4Bi")
self.TReRuZe = sensors.provideSensor("TReRuZe")
self.TReRuBi = sensors.provideSensor("TReRuBi")
self.TReRuK1Ze = sensors.provideSensor("TReRuK1Ze")
self.TReRuK1Bi = sensors.provideSensor("TReRuK1Bi")
self.TReRuK2Ze = sensors.provideSensor("TReRuK2Ze")
self.TReRuK2Bi = sensors.provideSensor("TReRuK2Bi")
self.TReKLZe = sensors.provideSensor("TReKLZe")
self.TReKLBi = sensors.provideSensor("TReKLBi")
self.tlacitka_releovka = [self.TReMiZe, self.TReMiBi, self.TReMiK1Ze, \
self.TReMiK1Bi, self.TReMiK2Ze, self.TReMiK2Bi, self.TReMiK4Bi, \
self.TReRuZe, self.TReRuBi, self.TReRuK1Ze, self.TReRuK1Bi, \
self.TReRuK2Ze, self.TReRuK2Bi, self.TReKLZe, self.TReKLBi]
# výhybky
self.V1 = turnouts.provideTurnout("V1")
self.V2 = turnouts.provideTurnout("V2")
self.V3 = turnouts.provideTurnout("V3")
self.V4 = turnouts.provideTurnout("V4")
self.vyhybky = [self.V1, self.V2, self.V3, self.V4]
# bloky
self.BK1 = blocks.getBlock("BK1")
self.BK2 = blocks.getBlock("BK2")
self.BK4 = blocks.getBlock("BK4")
self.BV1 = blocks.getBlock("BV1")
self.BV2 = blocks.getBlock("BV2")
self.BV3 = blocks.getBlock("BV3")
self.BV4 = blocks.getBlock("BV4")
self.BMi1 = blocks.getBlock("BMi1")
self.BMi2 = blocks.getBlock("BMi2")
self.BRu1 = blocks.getBlock("BRu1")
self.BRu2 = blocks.getBlock("BRu2")
self.BKr1 = blocks.getBlock("BKr1")
self.BKr2 = blocks.getBlock("BKr2")
# paměťové proměnné
self.prvniStisknuteTlacitko = memories.provideMemory("prvniStisknuteTlacitko")
self.druheStisknuteTlacitko = memories.provideMemory("druheStisknuteTlacitko")
self.spustenoOdkudKam = memories.provideMemory("spustenoOdkudKam")
# proměnné třídy
self.pocet_pokusu = 0
self.bloky_pro_otestovani = []
self.vyhybky_primo = []
self.vyhybky_do_odbocky =[]
self.postavena_cesta = 0
# návěstidla
self.L = masts.getSignalMast("L")
self.L1 = masts.getSignalMast("L1")
self.L2 = masts.getSignalMast("L2")
self.PrL = masts.getSignalMast("PřL".decode("UTF-8"))
self.S = masts.getSignalMast("S")
self.S1 = masts.getSignalMast("S1")
self.S2 = masts.getSignalMast("S2")
self.PrS = masts.getSignalMast("PřS".decode("UTF-8"))
self.SK = masts.getSignalMast("SK")
self.PrSK = masts.getSignalMast("PřSK".decode("UTF-8"))
self.Se1 = masts.getSignalMast("Se1")
self.Se2 = masts.getSignalMast("Se2")
self.Se3 = masts.getSignalMast("Se3")
self.Se4 = masts.getSignalMast("Se4")
# návěsti
self.STUJ = "Stůj".decode("UTF-8")
self.VOLNO = "Volno"
self.VYSTRAHA = "Výstraha".decode("UTF-8")
self.OCEKAVEJ_40 = "Očekávej 40".decode("UTF-8")
self.RYCHLOST_40_A_VOLNO = "Rychlost 40 a volno"
self.RYCHLOST_40_A_VYSTRAHA = "Rychlost 40 a výstraha".decode("UTF-8")
self.RYCHLOST_40_A_OCEKAVEJ_40 = "Rychlost 40 a očekávej 40".decode("UTF-8")
self.POSUN_ZAKAZAN = "Posun zakázán".decode("UTF-8")
self.POSUN_DOVOLEN = "Posun dovolen"
self.OPATRNE_NA_PRIVOLAVACI_NAVEST = "Opatrně na přivolávací návěst".decode("UTF-8")
return
Metoda handle()
Metoda handle() je periodicky volána dokud neskončí návratovou hodnotou 0 (False).
Metoda začíná tím, že čeká 1 vteřinu na přestavení nějaké výhybky. Pokud se nedočká, tak pokračuje výpočet dále. Poté se zvýší čítač průchodů pocet_pokusu o 1. Pokud počet pokusů překročí 10, což odpovídá času asi 10 sekund, tak se běh skriptu předčasně ukončí bez nastavení návěstidel. Jedná se o poruchový stav, který musí být mimořádnými opravnými prostředky napraven.
Potom se testuje kombinace tlačítek odkud a kam, aby se vědělo jaká jízdní cesta se staví. Každá jízdní cesta má svůj kousek kódu. Pro každou jízdní cestu se dále nastaví seznam bloků pro testování, seznam výhybek pro testování přímo a seznam výhybek pro testování do odbočky. Po naplnění seznamů se zavolá metoda test_postavena_cesta().
Pokud nejsou splněny podmínky dokončení postavení cesty, tak se metoda handle() ukončí s návratovou hodnotou 1 (True), čímž sama sebe znovu spustí.
Pokud byly splněny všechny podmínky dokončení postavení jízdní cesty, tak se počká zadaný časový úsek, v našem případě 1 vteřina. Poté se nastaví na návěstidle volnoznak, deaktivují se tlačítka releovky TRe odkud a TRe kam, zruší se příznak stavění jízdní cesty v proměnné spustenoOdkudKam a vlákno třídy se ukončí s návratovou hodnotou 0 (False).
Tím je stavění jízdní cesty dokončeno.
# handle() je spouštěno opakovaně dokud není navráceno False (0)
def handle(self):
self.waitChange(self.vyhybky, 1000)
self.pocet_pokusu = self.pocet_pokusu + 1
if (self.pocet_pokusu >= 10) :
self.zrusit_cestu() # stav při chybě
return 0
# otestovat podmínky - postavení výhybek, postavení cesty
# když ne tak pokračuj True
# když ano tak nastav návěstidlo, zhasni tlačítka
# ukonči False
if ((self.prvniStisknuteTlacitko.getValue() == "TReMiZe") and (self.druheStisknuteTlacitko.getValue() == "TReMiK1Bi")) :
# vlaková Mikulášovice - 1. kolej
self.bloky_pro_otestovani = [self.BMi1, self.BV1, self.BK1]
self.vyhybky_primo = [self.V1]
self.vyhybky_do_odbocky = []
self.test_postavena_cesta()
if (self.postavena_cesta == 0) :
return 1 # čekej, nejsou bloky rezervováno, výhybky nejsou postaveny
self.waitMsec(1000)
if (self.L1.getAspect() == self.VOLNO) :
self.L.setAspect(self.VOLNO)
else :
self.L.setAspect(self.VYSTRAHA)
self.TReMiZe.setKnownState(INACTIVE)
self.TReMiK1Bi.setKnownState(INACTIVE)
self.spustenoOdkudKam.setState(0)
return 0 # konec
elif ((self.prvniStisknuteTlacitko.getValue() == "TReMiZe") and (self.druheStisknuteTlacitko.getValue() == "TReMiK2Bi")) :
# vlaková Mikulášovice - 2. kolej
self.bloky_pro_otestovani = [self.BMi1, self.BV1, self.BV2, self.BK2]
self.vyhybky_primo = []
self.vyhybky_do_odbocky = [self.V1, self.V2]
self.test_postavena_cesta()
if (self.postavena_cesta == 0) :
return 1 # čekej, nejsou bloky rezervováno, výhybky nejsou postaveny
self.waitMsec(1000)
if (self.L2.getAspect() == self.VOLNO) :
self.L.setAspect(self.RYCHLOST_40_A_VOLNO)
elif (self.L2.getAspect() == self.RYCHLOST_40_A_VOLNO) :
self.L.setAspect(self.RYCHLOST_40_A_OCEKAVEJ_40)
else :
self.L.setAspect(self.RYCHLOST_40_A_VYSTRAHA)
self.TReMiZe.setKnownState(INACTIVE)
self.TReMiK2Bi.setKnownState(INACTIVE)
self.spustenoOdkudKam.setState(0)
return 0 # konec
elif ((self.prvniStisknuteTlacitko.getValue() == "TReMiBi") and (self.druheStisknuteTlacitko.getValue() == "TReMiK1Bi")) :
# posunová Mikulášovice - 1. kolej
self.bloky_pro_otestovani = [self.BV1]
self.vyhybky_primo = [self.V1]
self.vyhybky_do_odbocky = []
self.test_postavena_cesta()
if (self.postavena_cesta == 0) :
return 1 # čekej, nejsou bloky rezervováno, výhybky nejsou postaveny
self.waitMsec(1000)
self.Se1.setAspect(self.POSUN_DOVOLEN)
self.TReMiBi.setKnownState(INACTIVE)
self.TReMiK1Bi.setKnownState(INACTIVE)
self.spustenoOdkudKam.setState(0)
return 0 # konec
elif ((self.prvniStisknuteTlacitko.getValue() == "TReMiBi") and (self.druheStisknuteTlacitko.getValue() == "TReMiK2Bi")) :
# posunová Mikulášovice - 2. kolej
self.bloky_pro_otestovani = [self.BV1, self.BV2]
self.vyhybky_primo = []
self.vyhybky_do_odbocky = [self.V1, self.V2]
self.test_postavena_cesta()
if (self.postavena_cesta == 0) :
return 1 # čekej, nejsou bloky rezervováno, výhybky nejsou postaveny
self.waitMsec(1000)
self.Se1.setAspect(self.POSUN_DOVOLEN)
self.TReMiBi.setKnownState(INACTIVE)
self.TReMiK2Bi.setKnownState(INACTIVE)
self.spustenoOdkudKam.setState(0)
return 0 # konec
elif ((self.prvniStisknuteTlacitko.getValue() == "TReMiBi") and (self.druheStisknuteTlacitko.getValue() == "TReMiK4Bi")) :
# posunová Mikulášovice - 4. kolej
self.bloky_pro_otestovani = [self.BV1, self.BV2]
self.vyhybky_primo = [self.V2]
self.vyhybky_do_odbocky = [self.V1]
self.test_postavena_cesta()
if (self.postavena_cesta == 0) :
return 1 # čekej, nejsou bloky rezervováno, výhybky nejsou postaveny
self.waitMsec(1000)
self.Se1.setAspect(self.POSUN_DOVOLEN)
self.TReMiBi.setKnownState(INACTIVE)
self.TReMiK4Bi.setKnownState(INACTIVE)
self.spustenoOdkudKam.setState(0)
return 0 # konec
elif ((self.prvniStisknuteTlacitko.getValue() == "TReMiK1Ze") and (self.druheStisknuteTlacitko.getValue() == "TReMiBi")) :
# vlaková 1. kolej - Mikulášovice
self.vyhybky_primo = [self.V1]
self.vyhybky_do_odbocky = []
self.bloky_pro_otestovani = [self.BV1, self.BMi1, self.BMi2]
self.test_postavena_cesta()
if (self.postavena_cesta == 0) :
return 1 # čekej, nejsou bloky rezervováno, výhybky nejsou postaveny
self.waitMsec(1000)
self.S1.setAspect(self.VOLNO)
self.TReMiK1Ze.setKnownState(INACTIVE)
self.TReMiBi.setKnownState(INACTIVE)
self.spustenoOdkudKam.setState(0)
return 0 # konec
elif ((self.prvniStisknuteTlacitko.getValue() == "TReMiK1Bi") and (self.druheStisknuteTlacitko.getValue() == "TReMiBi")) :
# posunová 1. kolej - Mikulášovice
self.bloky_pro_otestovani = [self.BV1]
self.vyhybky_primo = [self.V1]
self.vyhybky_do_odbocky = []
self.test_postavena_cesta()
if (self.postavena_cesta == 0) :
return 1 # čekej, nejsou bloky rezervováno, výhybky nejsou postaveny
self.waitMsec(1000)
self.S1.setAspect(self.POSUN_DOVOLEN)
self.TReMiK1Bi.setKnownState(INACTIVE)
self.TReMiBi.setKnownState(INACTIVE)
self.spustenoOdkudKam.setState(0)
return 0 # konec
elif ((self.prvniStisknuteTlacitko.getValue() == "TReMiK2Ze") and (self.druheStisknuteTlacitko.getValue() == "TReMiBi")) :
# vlaková 2. kolej - Mikulášovice
self.bloky_pro_otestovani = [self.BV1, self.BV2, self.BMi1, self.BMi2]
self.vyhybky_primo = []
self.vyhybky_do_odbocky = [self.V1, self.V2]
self.test_postavena_cesta()
if (self.postavena_cesta == 0) :
return 1 # čekej, nejsou bloky rezervováno, výhybky nejsou postaveny
self.waitMsec(1000)
self.S2.setAspect(self.RYCHLOST_40_A_VOLNO)
self.TReMiK2Ze.setKnownState(INACTIVE)
self.TReMiBi.setKnownState(INACTIVE)
self.spustenoOdkudKam.setState(0)
return 0 # konec
elif ((self.prvniStisknuteTlacitko.getValue() == "TReMiK2Bi") and (self.druheStisknuteTlacitko.getValue() == "TReMiBi")) :
# posunová 2. kolej - Mikulášovice
self.bloky_pro_otestovani = [self.BV1, self.BV2]
self.vyhybky_primo = []
self.vyhybky_do_odbocky = [self.V1, self.V2]
self.test_postavena_cesta()
if (self.postavena_cesta == 0) :
return 1 # čekej, nejsou bloky rezervováno, výhybky nejsou postaveny
self.waitMsec(1000)
self.S2.setAspect(self.POSUN_DOVOLEN)
self.TReMiK2Bi.setKnownState(INACTIVE)
self.TReMiBi.setKnownState(INACTIVE)
self.spustenoOdkudKam.setState(0)
return 0 # konec
elif ((self.prvniStisknuteTlacitko.getValue() == "TReMiK4Bi") and (self.druheStisknuteTlacitko.getValue() == "TReMiBi")) :
# posunová 4. kolej - Mikulášovice
self.bloky_pro_otestovani = [self.BV1, self.BV2]
self.vyhybky_primo = [self.V2]
self.vyhybky_do_odbocky = [self.V1]
self.test_postavena_cesta()
if (self.postavena_cesta == 0) :
return 1 # čekej, nejsou bloky rezervováno, výhybky nejsou postaveny
self.waitMsec(1000)
self.Se2.setAspect(self.POSUN_DOVOLEN)
self.TReMiK4Bi.setKnownState(INACTIVE)
self.TReMiBi.setKnownState(INACTIVE)
self.spustenoOdkudKam.setState(0)
return 0 # konec
elif ((self.prvniStisknuteTlacitko.getValue() == "TReRuZe") and (self.druheStisknuteTlacitko.getValue() == "TReRuK1Bi")) :
# vlaková Rumburk - 1. kolej
self.bloky_pro_otestovani = [self.BRu1, self.BV4, self.BK1]
self.vyhybky_primo = [self.V3, self.V4]
self.vyhybky_do_odbocky = []
self.test_postavena_cesta()
if (self.postavena_cesta == 0) :
return 1 # čekej, nejsou bloky rezervováno, výhybky nejsou postaveny
self.waitMsec(1000)
if (self.S1.getAspect() == self.VOLNO) :
self.S.setAspect(self.VOLNO)
else :
self.S.setAspect(self.VYSTRAHA)
self.TReRuZe.setKnownState(INACTIVE)
self.TReRuK1Bi.setKnownState(INACTIVE)
self.spustenoOdkudKam.setState(0)
return 0 # konec
elif ((self.prvniStisknuteTlacitko.getValue() == "TReRuZe") and (self.druheStisknuteTlacitko.getValue() == "TReRuK2Bi")) :
# vlaková Rumburk - 2. kolej
self.bloky_pro_otestovani = [self.BRu1, self.BV4, self.BV3, self.BK2]
self.vyhybky_primo = []
self.vyhybky_do_odbocky = [self.V3, self.V4]
self.test_postavena_cesta()
if (self.postavena_cesta == 0) :
return 1 # čekej, nejsou bloky rezervováno, výhybky nejsou postaveny
self.waitMsec(1000)
if (self.S2.getAspect() == self.RYCHLOST_40_A_VOLNO) :
self.S.setAspect(self.RYCHLOST_40_A_OCEKAVEJ_40)
else :
self.S.setAspect(self.RYCHLOST_40_A_VYSTRAHA)
self.TReRuZe.setKnownState(INACTIVE)
self.TReRuK2Bi.setKnownState(INACTIVE)
self.spustenoOdkudKam.setState(0)
return 0 # konec
elif ((self.prvniStisknuteTlacitko.getValue() == "TReRuBi") and (self.druheStisknuteTlacitko.getValue() == "TReRuK1Bi")) :
# posunová Rumburk - 1. kolej
self.bloky_pro_otestovani = [self.BV4]
self.vyhybky_primo = [self.V3, self.V4]
self.vyhybky_do_odbocky = []
self.test_postavena_cesta()
if (self.postavena_cesta == 0) :
return 1 # čekej, nejsou bloky rezervováno, výhybky nejsou postaveny
self.waitMsec(1000)
self.Se4.setAspect(self.POSUN_DOVOLEN)
self.TReRuBi.setKnownState(INACTIVE)
self.TReRuK1Bi.setKnownState(INACTIVE)
self.spustenoOdkudKam.setState(0)
return 0 # konec
elif ((self.prvniStisknuteTlacitko.getValue() == "TReRuBi") and (self.druheStisknuteTlacitko.getValue() == "TReRuK2Bi")) :
# posunová Rumburk - 2. kolej
self.bloky_pro_otestovani = [self.BV4, self.BV3]
self.vyhybky_primo = []
self.vyhybky_do_odbocky = [self.V3, self.V4]
self.test_postavena_cesta()
if (self.postavena_cesta == 0) :
return 1 # čekej, nejsou bloky rezervováno, výhybky nejsou postaveny
self.waitMsec(1000)
self.Se4.setAspect(self.POSUN_DOVOLEN)
self.TReRuBi.setKnownState(INACTIVE)
self.TReRuK2Bi.setKnownState(INACTIVE)
self.spustenoOdkudKam.setState(0)
return 0 # konec
elif ((self.prvniStisknuteTlacitko.getValue() == "TReRuK1Ze") and (self.druheStisknuteTlacitko.getValue() == "TReRuBi")) :
# vlaková 1. kolej - Rumburk
self.bloky_pro_otestovani = [self.BV4, self.BRu1, self.BRu2]
self.vyhybky_primo = [self.V3, self.V4]
self.vyhybky_do_odbocky = []
self.test_postavena_cesta()
if (self.postavena_cesta == 0) :
return 1 # čekej, nejsou bloky rezervováno, výhybky nejsou postaveny
self.waitMsec(1000)
self.L1.setAspect(self.VOLNO)
self.TReRuK1Ze.setKnownState(INACTIVE)
self.TReRuBi.setKnownState(INACTIVE)
self.spustenoOdkudKam.setState(0)
return 0 # konec
elif ((self.prvniStisknuteTlacitko.getValue() == "TReRuK1Bi") and (self.druheStisknuteTlacitko.getValue() == "TReRuBi")) :
# posunová 1. kolej - Rumburk
self.bloky_pro_otestovani = [self.BV4]
self.vyhybky_primo = [self.V3, self.V4]
self.vyhybky_do_odbocky = []
self.test_postavena_cesta()
if (self.postavena_cesta == 0) :
return 1 # čekej, nejsou bloky rezervováno, výhybky nejsou postaveny
self.waitMsec(1000)
self.L1.setAspect(self.POSUN_DOVOLEN)
self.TReRuK1Bi.setKnownState(INACTIVE)
self.TReRuBi.setKnownState(INACTIVE)
self.spustenoOdkudKam.setState(0)
return 0 # konec
elif ((self.prvniStisknuteTlacitko.getValue() == "TReRuK2Ze") and (self.druheStisknuteTlacitko.getValue() == "TReRuBi")) :
# vlaková 2. kolej - Rumburk
self.bloky_pro_otestovani = [self.BV3, self.BV4, self.BRu1, self.BRu2]
self.vyhybky_primo = []
self.vyhybky_do_odbocky = [self.V3, self.V4]
self.test_postavena_cesta()
if (self.postavena_cesta == 0) :
return 1 # čekej, nejsou bloky rezervováno, výhybky nejsou postaveny
self.waitMsec(1000)
self.L2.setAspect(self.RYCHLOST_40_A_VOLNO)
self.TReRuK2Ze.setKnownState(INACTIVE)
self.TReRuBi.setKnownState(INACTIVE)
self.spustenoOdkudKam.setState(0)
return 0 # konec
elif ((self.prvniStisknuteTlacitko.getValue() == "TReRuK2Ze") and (self.druheStisknuteTlacitko.getValue() == "TReKLBi")) :
# vlaková 2. kolej - Krásná Lípa
self.bloky_pro_otestovani = [self.BV3, self.BKr1, self.BKr2]
self.vyhybky_primo = [self.V3, self.V4]
self.vyhybky_do_odbocky = []
self.test_postavena_cesta()
if (self.postavena_cesta == 0) :
return 1 # čekej, nejsou bloky rezervováno, výhybky nejsou postaveny
self.waitMsec(1000)
self.L2.setAspect(self.VOLNO)
self.TReRuK2Ze.setKnownState(INACTIVE)
self.TReKLBi.setKnownState(INACTIVE)
self.spustenoOdkudKam.setState(0)
return 0 # konec
elif ((self.prvniStisknuteTlacitko.getValue() == "TReRuK2Bi") and (self.druheStisknuteTlacitko.getValue() == "TReRuBi")) :
# posunová 2. kolej - Rumburk
self.bloky_pro_otestovani = [self.BV3, self.BV4]
self.vyhybky_primo = []
self.vyhybky_do_odbocky = [self.V3, self.V4]
self.test_postavena_cesta()
if (self.postavena_cesta == 0) :
return 1 # čekej, nejsou bloky rezervováno, výhybky nejsou postaveny
self.waitMsec(1000)
self.L2.setAspect(self.POSUN_DOVOLEN)
self.TReRuK2Bi.setKnownState(INACTIVE)
self.TReRuBi.setKnownState(INACTIVE)
self.spustenoOdkudKam.setState(0)
return 0 # konec
elif ((self.prvniStisknuteTlacitko.getValue() == "TReRuK2Bi") and (self.druheStisknuteTlacitko.getValue() == "TReKLBi")) :
# posunová 2. kolej - Krásná Lípa
self.bloky_pro_otestovani = [self.BV3]
self.vyhybky_primo = [self.V3, self.V4]
self.vyhybky_do_odbocky = []
self.test_postavena_cesta()
if (self.postavena_cesta == 0) :
return 1 # čekej, nejsou bloky rezervováno, výhybky nejsou postaveny
self.waitMsec(1000)
self.L2.setAspect(self.POSUN_DOVOLEN)
self.TReRuK2Bi.setKnownState(INACTIVE)
self.TReKLBi.setKnownState(INACTIVE)
self.spustenoOdkudKam.setState(0)
return 0 # konec
elif ((self.prvniStisknuteTlacitko.getValue() == "TReKLZe") and (self.druheStisknuteTlacitko.getValue() == "TReRuK2Bi")) :
# vlaková Krásná Lípa - 2. kolej
self.bloky_pro_otestovani = [self.BKr1, self.BV3, self.BK2]
self.vyhybky_primo = [self.V3, self.V4]
self.vyhybky_do_odbocky = []
self.test_postavena_cesta()
if (self.postavena_cesta == 0) :
return 1 # čekej, nejsou bloky rezervováno, výhybky nejsou postaveny
self.waitMsec(1000)
if (self.S2.getAspect() == self.RYCHLOST_40_A_VOLNO) :
self.SK.setAspect(self.OCEKAVEJ_40)
else :
self.SK.setAspect(self.VYSTRAHA)
self.TReKLZe.setKnownState(INACTIVE)
self.TReRuK2Bi.setKnownState(INACTIVE)
self.spustenoOdkudKam.setState(0)
return 0 # konec
elif ((self.prvniStisknuteTlacitko.getValue() == "TReKLBi") and (self.druheStisknuteTlacitko.getValue() == "TReRuK2Bi")) :
# posunová Krásná Lípa - 2. kolej
self.bloky_pro_otestovani = [self.BV3]
self.vyhybky_primo = [self.V3, self.V4]
self.vyhybky_do_odbocky = []
self.test_postavena_cesta()
if (self.postavena_cesta == 0) :
return 1 # čekej, nejsou bloky rezervováno, výhybky nejsou postaveny
self.waitMsec(1000)
self.Se3.setAspect(self.POSUN_DOVOLEN)
self.TReKLBi.setKnownState(INACTIVE)
self.TReRuK2Bi.setKnownState(INACTIVE)
self.spustenoOdkudKam.setState(0)
return 0 # konec
# nesplněné podmínky, pokračujeme
return 1
Metoda test_postavena_cesta()
Metoda test_postavena_cesta() testuje dokončení postavení jízdní cesty. Testuje se nastavení bloků v jízdní cestě na stav postavená cesta a postavení výhybek do správného směru. Pokud jsou splněny všechny podmínky tak se nastaví proměnná postavena_cesta na 1.
# testuje dokončení nastavení cesty
def test_postavena_cesta(self):
nalezen_nerezervovany_blok = False
nalezen_nepostavena_primo = False
nalezen_nepostavena_do_odbocky = False
for test_blok in self.bloky_pro_otestovani :
test_layout_blok = layoutblocks.getLayoutBlock(test_blok)
if (test_layout_blok.getUseExtraColor() != True) :
nalezen_nerezervovany_blok = True
for test_vyhybky_primo in self.vyhybky_primo :
if (test_vyhybky_primo.getState() != CLOSED) :
nalezen_nepostavena_primo = True
for test_vyhybky_do_odbocky in self.vyhybky_do_odbocky :
if (test_vyhybky_do_odbocky.getState() != THROWN) :
nalezen_nepostavena_do_odbocky = True
if (nalezen_nerezervovany_blok \
or nalezen_nepostavena_primo \
or nalezen_nepostavena_do_odbocky) :
self.postavena_cesta = 0
else :
self.postavena_cesta = 1
return
Metoda zrusit_cestu()
Pokud se nepodařilo postavit cestu v zadaném časovém limitu tak se přistoupí ke zrušení stavění cesty. To se provede voláním metody zrusit_cestu(). Metoda zjistí která cesta je stavěna. Podle toho deaktivuje příslušná tlačítka NX ve správném pořadí. Potom zavolá metodu na deaktivaci tlačítek releovky.
# zrušení stavění cesty
def zrusit_cestu(self):
if ((prvniStisknuteTlacitko.getValue() == "TReMiZe") and (druheStisknuteTlacitko.getValue() == "TReMiK1Bi")) :
# vlaková Mikulášovice - 1. kolej
TNXMi2b.setKnownState(INACTIVE)
TNXK1b.setKnownState(INACTIVE)
self.zhasnout_tlacitka_releovka()
elif ((prvniStisknuteTlacitko.getValue() == "TReMiZe") and (druheStisknuteTlacitko.getValue() == "TReMiK2Bi")) :
# vlaková Mikulášovice - 2. kolej
TNXMi2b.setKnownState(INACTIVE)
TNXK2b.setKnownState(INACTIVE)
self.zhasnout_tlacitka_releovka()
elif ((prvniStisknuteTlacitko.getValue() == "TReMiBi") and (druheStisknuteTlacitko.getValue() == "TReMiK1Bi")) :
# posunová Mikulášovice - 1. kolej
TNXMi1b.setKnownState(INACTIVE)
TNXK1b.setKnownState(INACTIVE)
self.zhasnout_tlacitka_releovka()
elif ((prvniStisknuteTlacitko.getValue() == "TReMiBi") and (druheStisknuteTlacitko.getValue() == "TReMiK2Bi")) :
# posunová Mikulášovice - 2. kolej
TNXMi1b.setKnownState(INACTIVE)
TNXK2b.setKnownState(INACTIVE)
self.zhasnout_tlacitka_releovka()
elif ((prvniStisknuteTlacitko.getValue() == "TReMiBi") and (druheStisknuteTlacitko.getValue() == "TReMiK4Bi")) :
# posunová Mikulášovice - 4. kolej
TNXMi1b.setKnownState(INACTIVE)
TNXK4b.setKnownState(INACTIVE)
self.zhasnout_tlacitka_releovka()
elif ((prvniStisknuteTlacitko.getValue() == "TReMiK1Ze") and (druheStisknuteTlacitko.getValue() == "TReMiBi")) :
# vlaková 1. kolej - Mikulášovice
TNXK1a.setKnownState(INACTIVE)
TNXK1a.setKnownState(INACTIVE)
self.zhasnout_tlacitka_releovka()
elif ((prvniStisknuteTlacitko.getValue() == "TReMiK1Bi") and (druheStisknuteTlacitko.getValue() == "TReMiBi")) :
# posunová 1. kolej - Mikulášovice
TNXK1a.setKnownState(INACTIVE)
TNXK1a.setKnownState(INACTIVE)
self.zhasnout_tlacitka_releovka()
elif ((prvniStisknuteTlacitko.getValue() == "TReMiK2Ze") and (druheStisknuteTlacitko.getValue() == "TReMiBi")) :
# vlaková 2. kolej - Mikulášovice
TNXK2a.setKnownState(INACTIVE)
TNXK2a.setKnownState(INACTIVE)
self.zhasnout_tlacitka_releovka()
elif ((prvniStisknuteTlacitko.getValue() == "TReMiK2Bi") and (druheStisknuteTlacitko.getValue() == "TReMiBi")) :
# posunová 2. kolej - Mikulášovice
TNXK2a.setKnownState(INACTIVE)
TNXK2a.setKnownState(INACTIVE)
self.zhasnout_tlacitka_releovka()
elif ((prvniStisknuteTlacitko.getValue() == "TReMiK4Bi") and (druheStisknuteTlacitko.getValue() == "TReMiBi")) :
# posunová 4. kolej - Mikulášovice
TNXK4a.setKnownState(INACTIVE)
TNXK4a.setKnownState(INACTIVE)
self.zhasnout_tlacitka_releovka()
elif ((prvniStisknuteTlacitko.getValue() == "TReRuZe") and (druheStisknuteTlacitko.getValue() == "TReRuK1Bi")) :
# vlaková Rumburk - 1. kolej
TNXRu2a.setKnownState(INACTIVE)
TNXK1a.setKnownState(INACTIVE)
self.zhasnout_tlacitka_releovka()
elif ((prvniStisknuteTlacitko.getValue() == "TReRuZe") and (druheStisknuteTlacitko.getValue() == "TReRuK2Bi")) :
# vlaková Rumburk - 2. kolej
TNXRu2a.setKnownState(INACTIVE)
TNXK2a.setKnownState(INACTIVE)
self.zhasnout_tlacitka_releovka()
elif ((prvniStisknuteTlacitko.getValue() == "TReRuBi") and (druheStisknuteTlacitko.getValue() == "TReRuK1Bi")) :
# posunová Rumburk - 1. kolej
TNXRu1a.setKnownState(INACTIVE)
TNXK1a.setKnownState(INACTIVE)
self.zhasnout_tlacitka_releovka()
elif ((prvniStisknuteTlacitko.getValue() == "TReRuBi") and (druheStisknuteTlacitko.getValue() == "TReRuK2Bi")) :
# posunová Rumburk - 2. kolej
TNXRu1a.setKnownState(INACTIVE)
TNXK2a.setKnownState(INACTIVE)
self.zhasnout_tlacitka_releovka()
elif ((prvniStisknuteTlacitko.getValue() == "TReRuK1Ze") and (druheStisknuteTlacitko.getValue() == "TReRuBi")) :
# vlaková 1. kolej - Rumburk
TNXK1b.setKnownState(INACTIVE)
TNXK1b.setKnownState(INACTIVE)
self.zhasnout_tlacitka_releovka()
elif ((prvniStisknuteTlacitko.getValue() == "TReRuK1Bi") and (druheStisknuteTlacitko.getValue() == "TReRuBi")) :
# posunová 1. kolej - Rumburk
TNXK1b.setKnownState(INACTIVE)
TNXK1b.setKnownState(INACTIVE)
self.zhasnout_tlacitka_releovka()
elif ((prvniStisknuteTlacitko.getValue() == "TReRuK2Ze") and (druheStisknuteTlacitko.getValue() == "TReRuBi")) :
# vlaková 2. kolej - Rumburk
TNXK2b.setKnownState(INACTIVE)
TNXK2b.setKnownState(INACTIVE)
self.zhasnout_tlacitka_releovka()
elif ((prvniStisknuteTlacitko.getValue() == "TReRuK2Ze") and (druheStisknuteTlacitko.getValue() == "TReKLBi")) :
# vlaková 2. kolej - Krásná Lípa
TNXK2b.setKnownState(INACTIVE)
TNXK2b.setKnownState(INACTIVE)
self.zhasnout_tlacitka_releovka()
elif ((prvniStisknuteTlacitko.getValue() == "TReRuK2Bi") and (druheStisknuteTlacitko.getValue() == "TReRuBi")) :
# posunová 2. kolej - Rumburk
TNXK2b.setKnownState(INACTIVE)
TNXK2b.setKnownState(INACTIVE)
self.zhasnout_tlacitka_releovka()
elif ((prvniStisknuteTlacitko.getValue() == "TReRuK2Bi") and (druheStisknuteTlacitko.getValue() == "TReKLBi")) :
# posunová 2. kolej - Krásná Lípa
TNXK2b.setKnownState(INACTIVE)
TNXK2b.setKnownState(INACTIVE)
self.zhasnout_tlacitka_releovka()
elif ((prvniStisknuteTlacitko.getValue() == "TReKLZe") and (druheStisknuteTlacitko.getValue() == "TReRuK2Bi")) :
# vlaková Krásná Lípa - 2. kolej
TNXKr2a.setKnownState(INACTIVE)
TNXK2a.setKnownState(INACTIVE)
self.zhasnout_tlacitka_releovka()
elif ((prvniStisknuteTlacitko.getValue() == "TReKLBi") and (druheStisknuteTlacitko.getValue() == "TReRuK2Bi")) :
# posunová Krásná Lípa - 2. kolej
TNXKr1a.setKnownState(INACTIVE)
TNXK2a.setKnownState(INACTIVE)
self.zhasnout_tlacitka_releovka()
return
Metoda zhasnout_tlacitka_releovka()
Po zrušení cesty NX se nakonec provede zhasnutí tlačítek releovky metodou zhasnout_tlacitka_releovka().
# zhasnutí tlačítek releovky
def zhasnout_tlacitka_releovka(self):
for jedno_tlacitko in self.tlacitka_releovka :
jedno_tlacitko.setKnownState(INACTIVE)
return
vytvořeno 15. 10. 2019