16 Režim Manuál

Abychom mohli spustit přivolávačku 14 Přivolávačka nebo ručně přestavovat výhybky 15 Řadiče výhybek musíme mít spuštěný režim Manuál.

Tlačítko a kontrolku Manuál jsme si připravili již v kapitole 12 Režim Releovka. Nyní si k tlačítku přidáme funkce.

Akce tlačítka

K tlačítku TlacManual si v Logix přidáme akci, která bude reagovat na stisk tlačítka. Stisknuté tlačítko spustí skript Tlacitko_manual.py.

Skript Tlacitko_manual.py

Tlačítkem TlacManual se zapíná režim manuál. Zapnutý režim manuál se indikuje rozsvícenou červenou kontrolkou.

Struktura skriptu

Skript má tři hlavní části. V první části se definují proměnné. V druhé části jsou definované procedury a ve třetí části je hlavní program.

# Tlacitko_manual.py

# Petr Šídlo

import jarray

import jmri

ukoncit_proceduru = False

postavena_cesta = False

postavene_navestidlo = False

TlacManual = sensors.provideSensor("TlacManual")

ZapReleovka = sensors.provideSensor("ZapReleovka")

ZapManual = sensors.provideSensor("ZapManual")

TlacNulovani = sensors.provideSensor("TlacNulovani")

PrivS = sensors.provideSensor("PrivS")

PrivS1 = sensors.provideSensor("PrivS1")

PrivS2 = sensors.provideSensor("PrivS2")

PrivSK = sensors.provideSensor("PrivSK")

PrivL = sensors.provideSensor("PrivL")

PrivL1 = sensors.provideSensor("PrivL1")

PrivL2 = sensors.provideSensor("PrivL2")

MSINSV1R = sensors.provideSensor("MSINSV1R")

MSINSV2R = sensors.provideSensor("MSINSV2R")

MSINSV3R = sensors.provideSensor("MSINSV3R")

MSINSV4R = sensors.provideSensor("MSINSV4R")

# procedury

# hlavní program

def hlavni_program() :

    global ukoncit_proceduru

   

    test_tlacitko_manual()

    if (ukoncit_proceduru == True) :

        return

   

    if (ZapManual.getKnownState() == INACTIVE) :

        manual_zapnout()

    else :

        manual_vypnout()

   

    return

#

hlavni_program()

Procedura test_tlacitko_manual()

Pokud je skript spuštěn a tlačítko je neaktivní, tak se nebude nic dít. Pokud je tlačítko stisknuto tak bude skript pokračovat dál. V závislosti na okamžitém stavu kontrolky manuál dojde k pokusu režim Manuál zapnout nebo vypnout.

# test tlačítka manuál

def test_tlacitko_manual() :

    global ukonci_proceduru

    if (TlacManual.getKnownState() == INACTIVE) :

        # nic nebudu dělat

        ukonci_proceduru = True

    return

Procedura manual_zapnout()

Procedura se pokusí zapnout režim manuál.

Napřed se otestuje stav kontrolky Releovka. Pokud je releovka zapnutá, tak se manuál nezapne.

# zapnout manuál

def manual_zapnout() :

    global postavena_cesta

    global postavene_navestidlo

    # zkusím zapnout manuál

    if (ZapReleovka.getKnownState() == INACTIVE) :

        # tady kontrola cest a návěstidel

        test_cesty()

        test_navestidla()

        if ((postavena_cesta == True) \

            or (postavene_navestidlo == True)) :

            return

        ZapManual.setKnownState(ACTIVE)

        TlacManual.setKnownState(INACTIVE)

        return

Potom se testuje zdali je aktivní nějaké jízdní cesta. Pokud ano, tak se manuál nezapne.

# test postavená jízdní cesta

def test_cesty() :

    # všechny bloky

    global postavena_cesta

    postavena_cesta = False

    vsechny_bloky = blocks.getNamedBeanSet()

    for jeden_blok in vsechny_bloky :

        jeden_layout_blok = layoutblocks.getLayoutBlock(jeden_blok)

        if (jeden_layout_blok.getUseExtraColor() == True) :

            postavena_cesta = True

    return

Dále se testuje, zdali je na nějakém návěstidle volnoznak. Pokud ano, tak se manuál nezapne.

# test postavené návěstidlo

def test_navestidla() :

    # všechna návěstidla

    global postavene_navestidlo

    postavene_navestidlo = False

    if (masts.getSignalMast("L".decode("UTF-8")).getAspect() != ("Stůj".decode("UTF-8"))) :

        postavene_navestidlo = True

    if (masts.getSignalMast("L1".decode("UTF-8")).getAspect() != ("Stůj".decode("UTF-8"))) :

        postavene_navestidlo = True

    if (masts.getSignalMast("L2".decode("UTF-8")).getAspect() != ("Stůj".decode("UTF-8"))) :

        postavene_navestidlo = True

    if (masts.getSignalMast("S".decode("UTF-8")).getAspect() != ("Stůj".decode("UTF-8"))) :

        postavene_navestidlo = True

    if (masts.getSignalMast("SK".decode("UTF-8")).getAspect() != ("Stůj".decode("UTF-8"))) :

        postavene_navestidlo = True

    if (masts.getSignalMast("S1".decode("UTF-8")).getAspect() != ("Stůj".decode("UTF-8"))) :

        postavene_navestidlo = True

    if (masts.getSignalMast("S2".decode("UTF-8")).getAspect() != ("Stůj".decode("UTF-8"))) :

        postavene_navestidlo = True

    if (masts.getSignalMast("PřL".decode("UTF-8")).getAspect() != ("Výstraha".decode("UTF-8"))) :

        postavene_navestidlo = True

    if (masts.getSignalMast("PřS".decode("UTF-8")).getAspect() != ("Výstraha".decode("UTF-8"))) :

        postavene_navestidlo = True

    if (masts.getSignalMast("PřSK".decode("UTF-8")).getAspect() != ("Výstraha".decode("UTF-8"))) :

        postavene_navestidlo = True

    if (masts.getSignalMast("Se1".decode("UTF-8")).getAspect() != ("Posun zakázán".decode("UTF-8"))) :

        postavene_navestidlo = True

    if (masts.getSignalMast("Se2".decode("UTF-8")).getAspect() != ("Posun zakázán".decode("UTF-8"))) :

        postavene_navestidlo = True

    if (masts.getSignalMast("Se3".decode("UTF-8")).getAspect() != ("Posun zakázán".decode("UTF-8"))) :

        postavene_navestidlo = True

    if (masts.getSignalMast("Se4".decode("UTF-8")).getAspect() != ("Posun zakázán".decode("UTF-8"))) :

        postavene_navestidlo = True

    return

Pokud všechny testy dopadnou dobře zapne se manuál rozsvícením červené kontrolky.

Procedura manual_vypnout()

Pokud je režim Manuál zapnut, tak se stiskem tlačítka vypne.

Nejdříve se testuje, zdali neběží nulování. Pokud ano, tak se Manuál nevypne.

Potom se testuje, zdali není zapnutá nějaké přivolávačka. Pokud ano, tak se Manuál nevypne.

Nakonec se testuje, zdali jsou všechny řadiče výhybek v prostřední poloze. Pokud ne, tak se Manuál nevypne.

# vypnout manuál

def manual_vypnout() :

    # pokusím se vypnout manuál

    # nesmí běžet nulování

    if (TlacNulovani.getKnownState() == ACTIVE) :

        TlacManual.setKnownState(INACTIVE)

        return               

    # nesmí běžet přivolávačka

    if ((PrivS.getKnownState() == ACTIVE) \

        or (PrivS1.getKnownState() == ACTIVE) \

        or (PrivS2.getKnownState() == ACTIVE) \

        or (PrivSK.getKnownState() == ACTIVE) \

        or (PrivL.getKnownState() == ACTIVE) \

        or (PrivL1.getKnownState() == ACTIVE) \

        or (PrivL2.getKnownState() == ACTIVE)) :

        TlacManual.setKnownState(INACTIVE)

        return               

    # řadiče výhybek musí být v poloze releovka

    if ((MSINSV1R.getKnownState() != ACTIVE) \

        or (MSINSV2R.getKnownState() != ACTIVE) \

        or (MSINSV3R.getKnownState() != ACTIVE) \

        or (MSINSV4R.getKnownState() != ACTIVE)) :

        TlacManual.setKnownState(INACTIVE)

        return               

    # když se všechno povedlo

    ZapManual.setKnownState(INACTIVE)

    TlacManual.setKnownState(INACTIVE)

    return

Pokud jsou splněny všechny podmínky, tak se manuál vypne.

vytvořeno 29. 10. 2019