Class BlockBossLogic
- All Implemented Interfaces:
VetoableChangeListener,EventListener
Signals "protect" by telling the engineer about the conditions ahead. The engineer controls the speed of the train based on what the signals show, and the signals in turn react to whether the track ahead is occupied, what signals further down the line show, etc.
There are four situations that this logic can handle:
- SINGLEBLOCK - A simple block, without a turnout.
In this case, there is only a single set of sensors and a single next signal to protect.
- TRAILINGMAIN - This signal is protecting a trailing point turnout, which
can only be passed when the turnout is closed. It can also be used for the
upper head of a two head signal on the facing end of the turnout.
In this case, the signal is forced red if the specified turnout is THROWN. When the turnout is CLOSED, there is a single set of sensors and next signal(s) to protect.
- TRAILINGDIVERGING - This signal is protecting a trailing point turnout,
which can only be passed when the turnout is thrown. It can also be used for
the lower head of a two head signal on the facing end of the turnout.
In this case, the signal is forced red if the specified turnout is CLOSED. When the turnout is THROWN, there is a single set of sensors and next signal(s) to protect.
- FACING - This single head signal protects a facing point turnout, which
may therefore have two next signals and two sets of next sensors for the
closed and thrown states of the turnout.
If the turnout is THROWN, one set of sensors and next signal(s) is protected. If the turnout is CLOSED, another set of sensors and next signal(s) is protected.
Note that these four possibilities logically require that certain information be configured consistently; e.g. not specifying a turnout in TRAILINGMAIN doesn't make any sense. That's not enforced explicitly, but violating it can result in confusing behavior.
The protected sensors should cover the track to the next signal. If any of the protected sensors show ACTIVE, the signal will be dropped to red. Normally, the protected sensors cover the occupancy of the track to the next signal. In this case, the signal will show red to prevent trains from entering an occupied stretch of track (often called a "block"). But the actual source of the sensors can be anything useful, for example a microswitch on a local turnout, etc.
There are several variants to how a next signal is protected. In the simplest form, the controlled signal provides a warning to the engineer of what the signal being protected will show when it becomes visible:
- If the next signal is red, the engineer needs to be told to slow down; this signal will be set to yellow.
- If the next signal is green, the engineer can proceed at track speed; this signal will be set to green.
- For the common "three-aspect" signaling system, an engineer doesn't need any warning before a yellow signal. In this case, this signal is set to green when the protected signal is yellow.
- For lines where track speed is very fast or braking distances are very long, it can be useful to give engineers warning that the next signal is yellow (and the one after that is red) so that slowing the train can start early. Usually flashing yellow preceeds the yellow signal, and the system is called "four-aspect" signaling.
In some cases, you want a signal to show exactly what the next signal shows, instead of one speed faster. E.g. if the (protected) next signal is red, this one should be red, instead of yellow. In this case, this signal is called a "distant signal", as it provides a "distant" view of the protected signal heads's appearance. Note that when in this mode, this signal still protects the interveneing track, etc.
The "hold" unbound parameter can be used to set this logic to show red, regardless of input. That's intended for use with CTC logic, etc.
"Approach lit" signaling sets the signal head to dark (off) unless the specified sensor(s) are ACTIVE. Normally, those sensors are in front of (before) the signal head. The signal heads then only light when a train is approaching. This is used to preserve bulbs and batteries (and sometimes to reduce engineer workload) on prototype railroads, but is uncommon on model railroads; once the layout owner has gone to the trouble and expense of installing signals, he usually wants them lit up.
Two signal heads can be protected. For example, if the next signal has two heads to control travel onto a main track or siding, then both heads should be provided here. The faster signal aspect will control the appearance of this head. For example, if the next signal is showing a green head and a red head, this signal will be green, because the train will be able to proceed at track speed when it reaches that next signal (along the track with the green signal).
-
Field Summary
FieldsModifier and TypeFieldDescription(package private) NamedBeanHandle<SignalHead>static final intstatic final intstatic final intstatic final int -
Constructor Summary
ConstructorsConstructorDescriptionBlockBossLogic(String name) Create an object to drive a specific signal head. -
Method Summary
Modifier and TypeMethodDescriptionvoiddefineIO()Define the siglet's input and output.Get the system name of the sensor being monitored.booleanThe "driven signal" is controlled by this element.booleanbooleanintgetMode()booleanbooleanGet the system name of the sensors 1-5 being monitored.static BlockBossLogicgetStoppedObject(String signal) Get the BlockBossLogic item governing a specific signal head by its name, having removed it from use.static BlockBossLogicGet the BlockBossLogic item governing a specific signal head, having removed it from use.Get the system name of the turnout being monitored.getUsageReport(NamedBean bean) booleanGet the original name of the sensor1 being monitored.Get the system name of the sensor1Alt being monitored.Get the system name of the sensor2 being monitored.Get the system name of the sensor2Alt being monitored.Get the system name of the signal head being monitored for first route.Get the system name of the alternate signal head being monitored for first route.Get the system name of the signal head being monitored for the 2nd route.Get the system name of the secondary signal head being monitored for the 2nd route.voidsetApproachSensor1(String name) voidsetComment(String comment) voidsetDistantSignal(boolean d) voidsetHold(boolean m) Set the current value of the "hold" parameter.voidsetLimitSpeed1(boolean d) voidsetLimitSpeed2(boolean d) voidsetMode(int mode) voidRecompute new output state and apply it.voidsetRestrictingSpeed1(boolean d) voidsetRestrictingSpeed2(boolean d) voidsetSensor1(String name) voidsetSensor2(String name) voidsetSensor3(String name) voidsetSensor4(String name) voidsetSensor5(String name) voidsetTurnout(String name) voidsetWatchedSensor1(String name) voidsetWatchedSensor1Alt(String name) voidsetWatchedSensor2(String name) voidsetWatchedSensor2Alt(String name) voidsetWatchedSignal1(String name, boolean useFlash) voidsetWatchedSignal1Alt(String name) voidsetWatchedSignal2(String name) voidsetWatchedSignal2Alt(String name) void
-
Field Details
-
SINGLEBLOCK
- See Also:
-
TRAILINGMAIN
- See Also:
-
TRAILINGDIVERGING
- See Also:
-
FACING
- See Also:
-
driveSignal
-
-
Constructor Details
-
BlockBossLogic
Create an object to drive a specific signal head.- Parameters:
name- System or user name of the driven signal head, which must exist
-
-
Method Details
-
getDrivenSignal
The "driven signal" is controlled by this element.- Returns:
- system name of the driven signal head
-
getDrivenSignalNamedBean
-
setSensor1
-
setSensor2
-
setSensor3
-
setSensor4
-
setSensor5
-
getSensor1
Get the system name of the sensors 1-5 being monitored.- Returns:
- system name; null if no sensor configured
-
getSensor2
-
getSensor3
-
getSensor4
-
getSensor5
-
setTurnout
-
getTurnout
Get the system name of the turnout being monitored.- Returns:
- system name; null if no turnout configured
-
setMode
-
getMode
-
setComment
-
getComment
-
setWatchedSignal1
-
getWatchedSignal1
Get the system name of the signal head being monitored for first route.- Returns:
- system name; null if no primary signal head is configured
-
setWatchedSignal1Alt
-
getWatchedSignal1Alt
Get the system name of the alternate signal head being monitored for first route.- Returns:
- system name; null if no signal head is configured
-
setWatchedSignal2
-
getWatchedSignal2
Get the system name of the signal head being monitored for the 2nd route.- Returns:
- system name; null if no signal head is configured
-
setWatchedSignal2Alt
-
getWatchedSignal2Alt
Get the system name of the secondary signal head being monitored for the 2nd route.- Returns:
- system name; null if no secondary signal head is configured
-
setWatchedSensor1
-
getWatchedSensor1
Get the original name of the sensor1 being monitored.- Returns:
- original name; null if no sensor is configured
-
setWatchedSensor1Alt
-
getWatchedSensor1Alt
Get the system name of the sensor1Alt being monitored.- Returns:
- system name; null if no sensor is configured
-
setWatchedSensor2
-
getWatchedSensor2
Get the system name of the sensor2 being monitored.- Returns:
- system name; null if no sensor is configured
-
setWatchedSensor2Alt
-
getWatchedSensor2Alt
Get the system name of the sensor2Alt being monitored.- Returns:
- system name; null if no sensor is configured
-
setLimitSpeed1
-
getLimitSpeed1
-
setRestrictingSpeed1
-
getRestrictingSpeed1
-
setLimitSpeed2
-
getLimitSpeed2
-
setRestrictingSpeed2
-
getRestrictingSpeed2
-
getUseFlash
-
setDistantSignal
-
getDistantSignal
-
setHold
Set the current value of the "hold" parameter. If true, the output is forced to a RED "stop" appearance. This allows CTC and other higher-level functions to control permission to enter this section of track.- Parameters:
m- true to set Logic to Held
-
setApproachSensor1
-
getApproachSensor1
Get the system name of the sensor being monitored.- Returns:
- system name; null if no sensor configured
-
defineIO
Define the siglet's input and output. -
setOutput
Recompute new output state and apply it. -
getStoppedObject
Get the BlockBossLogic item governing a specific signal head by its name, having removed it from use.- Parameters:
signal- name of the signal head object- Returns:
- never null
-
getStoppedObject
Get the BlockBossLogic item governing a specific signal head, having removed it from use.- Parameters:
sh- signal head object- Returns:
- never null
-
vetoableChange
- Specified by:
vetoableChangein interfaceVetoableChangeListener- Throws:
PropertyVetoException
-
getUsageReport
-