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