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