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