100 lines
2.9 KiB
Python
100 lines
2.9 KiB
Python
# define start, stop operations
|
|
|
|
def setturnout(sensor, turnout, msg) :
|
|
if sensors.getSensor(sensor).state == INACTIVE :
|
|
turnouts.getTurnout(turnout).state = CLOSED
|
|
else :
|
|
warn().display(msg)
|
|
return False
|
|
return True
|
|
|
|
def setturnouts() :
|
|
return (
|
|
setturnout("LS162", "LT200", "Move train off of front-left turnout") and
|
|
setturnout("LS163", "LT201", "Move train off of front-right turnout") and
|
|
setturnout("LS164", "LT202", "Move train off of back-left turnout") and
|
|
setturnout("LS165", "LT203", "Move train off of back-right turnout")
|
|
)
|
|
|
|
def setblocks() :
|
|
# train A
|
|
if sensors.getSensor(initSensorA).state == ACTIVE :
|
|
initBlockA.setValue(throttleA)
|
|
else :
|
|
warn().display("Put the "+nameA+" locomotive in its start location")
|
|
return False
|
|
|
|
# train B
|
|
if sensors.getSensor(initSensorB).state == ACTIVE :
|
|
initBlockB.setValue(throttleB)
|
|
else :
|
|
warn().display("Put the "+nameB+" locomotive in its start location")
|
|
return False
|
|
|
|
# check other sensors
|
|
tempsensors = tracksensors[:]
|
|
tempsensors.remove(initSensorA)
|
|
tempsensors.remove(initSensorB)
|
|
for x in tempsensors :
|
|
if sensors.getSensor(x).state == ACTIVE :
|
|
warn().display("Track sensor "+sensors.getSensor(x).systemName+" is active and shouldn't be")
|
|
return False
|
|
|
|
return True
|
|
|
|
|
|
def start() :
|
|
print "Attempt to start layout"
|
|
# set turnouts if possible
|
|
if not setturnouts() :
|
|
# here if failed
|
|
print "Turnouts are not OK"
|
|
startstopsensor.setState(INACTIVE)
|
|
return False # end of processing
|
|
print "Turnouts set OK"
|
|
|
|
# check occupancy & starting locations
|
|
if not setblocks() :
|
|
# here if failed
|
|
print "Locomotives are not in starting positions"
|
|
startstopsensor.setState(INACTIVE)
|
|
return False # end of processing
|
|
print "Locomotives set OK"
|
|
|
|
# step blocks to restart
|
|
for b in stopblocks :
|
|
b.setSpeeds(slow, fast)
|
|
|
|
# set initial speed, direction, functions
|
|
if throttleA != None :
|
|
throttleA.setIsForward(True)
|
|
throttleA.setSpeedSetting(fast)
|
|
throttleA.setF0(True)
|
|
|
|
if throttleB != None :
|
|
throttleB.setIsForward(True)
|
|
throttleB.setSpeedSetting(fast)
|
|
throttleB.setF0(True)
|
|
|
|
# done, auto running should be happening
|
|
return True
|
|
|
|
def stop() :
|
|
print "Stopping"
|
|
# set speeds to zero, sounds off
|
|
if throttleA != None :
|
|
throttleA.setSpeedSetting(0)
|
|
throttleA.setF1(False)
|
|
throttleA.setF2(False)
|
|
|
|
if throttleB != None :
|
|
throttleB.setSpeedSetting(0)
|
|
throttleB.setF1(False)
|
|
throttleB.setF2(False)
|
|
|
|
# step blocks to not restart
|
|
for b in stopblocks :
|
|
b.setSpeeds(0, 0)
|
|
|
|
return True
|