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