14 Přivolávačka
Někdy je dobré mít v provozu přivolávačku. Ocení se to především v situacích, kdy software ještě není zcela odladěn a testy se provádí za plného provozu. Potom může být použití přivolávačky nezbytné.
Proměnné
Ve stanici je 7 hlavních návěstidel. Pro ně si připravíme snímače na rozhraní Internal s názvy TlacPrivL, PrivL, TlacPrivL1, PrivL1, TlacPrivL2, PrivL2, TlacPrivS, PrivS, TlacPrivS1, PrivS1, TlacPrivS2, PrivS2, TlacPrivSK a PrivSK.
Tlačítka a kontrolky
Na panel si k proměnným přidáme tlačítka a kontrolky. Tlačítka budou vzhledu metal. Kontrolky budou vzhledu kmitající bílá.
Spouštěč
Ke každému tlačítku přivolávačky vytvoříme v Logix jednu akci.
Akce po stisku tlačítka spustí příslušný skript.
Skript Tlac_Privolavacka_L.py
Každé hlavní návěstidlo má svůj vlastní skript. Skript provede obsluhu návěsti přivolávačka.
Definice proměnných
Na začátku programu je definice proměnných.
# Tlac_Privolavacka_L.py
# Petr Šídlo
import jarray
import jmri
ukoncit_proceduru = False
Zap_Manual = sensors.provideSensor("ZapManual")
Tlac_Priv_L = sensors.provideSensor("TlacPrivL")
Priv_L = sensors.provideSensor("PrivL")
Priv_L1 = sensors.provideSensor("PrivL1")
Priv_L2 = sensors.provideSensor("PrivL2")
Priv_S = sensors.provideSensor("PrivS")
Priv_S1 = sensors.provideSensor("PrivS1")
Priv_S2 = sensors.provideSensor("PrivS2")
Priv_SK = sensors.provideSensor("PrivSK")
Nav_L = masts.getSignalMast("L")
STUJ = "Stůj".decode("UTF-8")
OPATRNE_NA_PRIVOLAVACI_NAVEST = "Opatrně na přivolávací návěst".decode("UTF-8")
Procedura hlavni_program()
V těle programu je pouze jeden příkaz – volání procedury hlavni_program(). V proceduře hlavní program se postupně volají všechny procedury. Pokud některá procedura skončí neúspěchem, tak se ukončí i skript.
# hlavní program
def hlavni_program() :
global ukoncit_proceduru
test_manual()
if (ukoncit_proceduru == True) :
return
test_privolavacka_vlastni()
if (ukoncit_proceduru == True) :
return
test_privolavacky_ostatni()
if (ukoncit_proceduru == True) :
return
zapnout_privolavacku()
return
#
hlavni_program()
Procedura test_manual()
V proceduře se testuje zdali je spuštěn manuální režim. Pokud ne, tak se nastaví chybová proměnná ukoncit_proceduru na True.
# otestuji manuál
def test_manual() :
global ukoncit_proceduru
if (Zap_Manual.getKnownState() == INACTIVE) :
#
Tlac_Priv_L.setKnownState(INACTIVE)
ukoncit_proceduru = True
return
Procedura test_privolavacka_vlastni()
Testuje se, zdali přivolávačka přiřazená tomuto tlačítku je již spuštěná. Pokud ano, tak se nastaví chybová proměnná ukoncit_proceduru na True.
# test přivolávačka vlastní
def test_privolavacka_vlastni():
global ukoncit_proceduru
if (Priv_L.getKnownState() == ACTIVE) :
#
Nav_L.setAspect(STUJ)
Priv_L.setKnownState(INACTIVE)
Tlac_Priv_L.setKnownState(INACTIVE)
ukoncit_proceduru = True
return
Procedura test_privolavacky_ostatni()
Ve stanici může být spuštěna současně pouze jedna přivolávačka. Tato procedura testuje, zdali je spuštěna nějaká jiná přivolávačka. Pokud ano, tak se nastaví chybová proměnná ukoncit_proceduru na True.
# otestuji přivolávačky
def test_privolavacky_ostatni() :
global ukoncit_proceduru
# otestuji přivolávačky
if ((Priv_L.getKnownState() == ACTIVE) \
or (Priv_L1.getKnownState() == ACTIVE) \
or (Priv_L2.getKnownState() == ACTIVE) \
or (Priv_S.getKnownState() == ACTIVE) \
or (Priv_S1.getKnownState() == ACTIVE) \
or (Priv_S2.getKnownState() == ACTIVE) \
or (Priv_SK.getKnownState() == ACTIVE)) :
#
Tlac_Priv_L.setKnownState(INACTIVE)
ukoncit_proceduru = True
return
Procedura zapnout_privolavacku()
Pokud nebyl skript ukončen na žádné z předchozích podmínek, tak bude spuštěna příslušná přivolávačka.
# zapne přivolávačku
def zapnout_privolavacku() :
global ukoncit_proceduru
Tlac_Priv_L.setKnownState(INACTIVE)
Priv_L.setKnownState(ACTIVE)
Nav_L.setAspect(OPATRNE_NA_PRIVOLAVACI_NAVEST)
return
Po doplnění tlačítek a skriptů bude panel vypadat nějak takto:
vytvořeno 25. 10. 2019