15 Řadiče výhybek

V manuálním režimu je možné kromě stavění přivolávačky na návěstidlech také individuálně ovládat jednotlivé výhybky.

Proměnné

Řadič každé výhybky má tři polohy. Poloha plus, poloha mínus a poloha releovka. Příslušné snímače vytvoříme na rozhraní Internal. To uděláme pro všechny čtyři výhybky. Vytvoříme tak snímače MSINSV1P, MSINSV1M, MSINSV1R, MSINSV2P, MSINSV2M, MSINSV2R, MSINSV3P, MSINSV3M, MSINSV3R, MSINSV4P, MSINSV4M a MSINSV4R. Každý řadič bude mít ještě kontrolku polohy výhybky. Vytvoříme snímače INSV1, INSV2, INSV3 a INSV4. Výsledek bude vypadat nějak takto:

Řadič na panel

Na panel postupně přidáme čtyři řadiče výhybek. Řadiče přidáme jako Vícepolohový přepínač. Pro přepínač výhybky č. 1 použijeme snímače MSINSV1P, MSINSV1M a MSINSV1R. Po vytvoření přepínače změníme obrázky přepínače ve stylu AŽD-71. Přepínač bude vypadat nějak takto:

Skupiny snímačů

Aby mohl řadič výhybky fungovat jako jeden Vícepolohový přepínač tak musíme k němu vytvořit Skupinu snímačů. Pro každý řadič výhybky vytvoříme jednu skupinu do které přiřadíme příslušné snímače.

Kontrolka polohy výhybky

Ke každému řadiči přidáme ještě kontrolku polohy výhybky. Zatímco řadič ukazuje poslední ručně zadaný příkaz pro přestavení výhybky, tak kontrolka zobrazuje stav zpětného ohlasu výhybky. V případě, že použijeme pro zpětný ohlas ONESENSOR nebo TWOSENSOR 13 Ohlas výhybek tak kontrolka zobrazuje skutečný stav výhybky.

Pro zobrazení na panelu použijeme pro kontrolku výhybky pro to určenou tříbarevnou kontrolku. Ta zobrazuje stavy Plus – zelená, Mínus – žlutá, Výhybka bez dohledu – červená a Neznámý stav (po startu programu) – nesvítí nic.

Skript Indikator_V1.py

Skript Indikator_V1.py je velmi jednoduchý. Třída Indikator_V1 dědí ze třídy Siglet. Jako posluchač se registruje u výhybky V1. Potom s každou změnou stavu výhybky změní odpovídajícím způsobem i stav kontrolky.

# Indikator_V1.py

# Petr Šídlo

import jarray

import jmri

class Indikator_V1(jmri.jmrit.automat.Siglet) :

    # defineIO() spouští se jednou při startu

    # načte pole pole vstupů

    # jakákoliv změna vstupu spustí metodu setOutput()

    def defineIO(self):

       

        self.V1 = turnouts.provideTurnout("V1")

       

        # registrace vstupů

       

        self.setInputs(jarray.array([self.V1], jmri.NamedBean))

       

        return

   

    # setOutput je voláno při každé změně vstupu

    # podle výpočtu změní výstup

    def setOutput(self):

       

        self.INSV1 = sensors.provideSensor("INSV1")

        if (self.V1.getState() == jmri.Turnout.CLOSED) :

            self.INSV1.setKnownState(jmri.Sensor.ACTIVE)

        elif (self.V1.getState() == jmri.Turnout.THROWN) :

            self.INSV1.setKnownState(jmri.Sensor.INACTIVE)

        elif (self.V1.getState() == jmri.Turnout.INCONSISTENT) :

            self.INSV1.setKnownState(jmri.Sensor.INCONSISTENT)

        else :  # jmri.Turnout.UNKNOWN

            self.INSV1.setKnownState(jmri.Sensor.UNKNOWN)

       

        return

# konec definice třídy

# start

Indikator_V1().start()

Skript Radic_V1.py

Skript Radic_V1.py je podobně jednoduchý jako předchozí skript. Třída Radic_V1 dědí ze třídy Siglet. Jako posluchač se registruje u poloh řadiče výhybky V1. Potom s každou změnou stavu řadiče vyšle příkaz ke změně polohy výhybky. Toto příkaz odešle pouze v případě, že je povolený režim Manuál. Pokud ne, tak se žádný příkaz neodešle. Jako na skutečné železnici je povoleno podhodit výhybku. Pokud by chtěl uživatel tuto možnost zakázat, tak odkomentuje příslušné řádky skriptu.

# Radic_V1.py

# Petr Šídlo

import jarray

import jmri

class Radic_V1(jmri.jmrit.automat.Siglet) :

    # defineIO() spouští se jednou při startu

    # načte pole pole vstupů

    # jakákoliv změna vstupu spustí metodu setOutput()

    def defineIO(self):

       

        self.V1_Rad_Plus = sensors.provideSensor("MSINSV1P")

        self.V1_Rad_Minus = sensors.provideSensor("MSINSV1M")

        self.V1_Rad_Rele = sensors.provideSensor("MSINSV1R")

       

        # registrace vstupů

       

        self.setInputs(jarray.array([self.V1_Rad_Plus, self.V1_Rad_Minus, self.V1_Rad_Rele], jmri.NamedBean))

        return

   

    # setOutput je voláno při každé změně vstupu

    # podle výpočtu změní výstup

    def setOutput(self):

       

        self.ZapManual = sensors.provideSensor("ZapManual")

        self.V1_obs = sensors.provideSensor("SV1")

        self.V1 = turnouts.provideTurnout("V1")

       

        # není manuální řízení, končím

        if (self.ZapManual.getKnownState() == jmri.Sensor.INACTIVE) :

            self.V1_Rad_Rele.setKnownState(jmri.Sensor.ACTIVE)

            return

       

        # výhybka je obsazená, dovolím podhození

       

        # if (self.V1_Rad_Rele.getKnownState() == jmri.Sensor.ACTIVE) :

        #     return

       

        if (self.V1_Rad_Plus.getKnownState() == jmri.Sensor.ACTIVE) :

            self.V1.setState(jmri.Turnout.CLOSED)

        elif (self.V1_Rad_Minus.getKnownState() == jmri.Sensor.ACTIVE) :

            self.V1.setState(jmri.Turnout.THROWN)

        else :

            pass

       

        return

# konec definice třídy

# start

Radic_V1().start()

Spuštění skriptů

Skripty pro řadiče a kontrolky výhybek se spouští se startem aplikace.

Po přidání řadičů bude panel vypadat nějak takto:

vytvořeno 27. 10. 2019