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