Files
JIMRI/jython/TwoOutputTurnouts.py
T
2026-06-17 14:00:51 +02:00

55 lines
1.7 KiB
Python

# Drive a turnouts from two CMRI connections.
#
# Some CMRI users connect slow-motion switch machines between
# two CMRI outputs, and then set the outputs to complementary
# states (one active, one inactive) to drive the machine in
# the two directions.
#
# This script slaves a 2nd turnout to a first one, so that when the
# first one is commanded to a particular state, the second one
# goes to the other state
#
# To use this, edit the script to include your turnouts at the bottom
# (see the existing example; you should remove that)
# Then select it as a script to be run at startup from the "Advanced
# Preferences" on the preferences window
#
# Author: Bob Jacobsen, copyright 2005
# Part of the JMRI distribution
#
import jmri
import java
import java.beans
# First, define the listener that does everything
class MainTurnoutListener(java.beans.PropertyChangeListener):
def propertyChange(self, event):
if (self.master.state == CLOSED) :
self.slave.state = THROWN
elif (self.master.state == THROWN) :
self.slave.state = CLOSED
# Define a routine to make it easy to attach listeners
def SetTwoOutputTurnout(master, slave) :
# get turnout objects
t1 = turnouts.provideTurnout(master)
t2 = turnouts.provideTurnout(slave)
# initialize state
if (t1.state == CLOSED) :
t2.state = THROWN
elif (t1.state == THROWN) :
t2.state = CLOSED
# connect up listener for future changes
listener = MainTurnoutListener()
listener.master = t1
listener.slave = t2
t1.addPropertyChangeListener(listener)
# Attach listeners to the desired the turnouts
# In this sample, there are two pairs; replace with your own lines
SetTwoOutputTurnout("CT13", "CT14")
SetTwoOutputTurnout("CT15", "CT16")