JMRI: Logique Simple Signal
Informations générales sur la logique utilisée pour la commande de signaux simples
Cette page décrit la logique utilisée par le panneau JMRI Simple Signal pour commandes les signaux .
Nous affichons le code réel, il n'y a donc aucune ambiguïté sur ce qu'il fait. C'est à partir des test de libération de JMRI 2.9.1.
Sur le Canton Simple
doSingleBlock () {
int = apparence SignalHead.GREEN;
int oldAppearance = ((SignalHead)outputs [0]) getAppearance ().;
// Cochez pour le jaune, jaune clignotant écrase le vert
if (protectWithFlashing & & fastestColor1 () == SignalHead.YELLOW)
aspect = SignalHead.FLASHYELLOW;
if (fastestColor1 () == SignalHead.RED | | fastestColor1 () == SignalHead.FLASHRED)
aspect = SignalHead.YELLOW;
// Si signal distant montrer exactement ce que le signal local fait
if (distantSignal)
aspect = fastestColor1 ();
// Si la vitesse limitée et vert, réduire au jaune
if (limitSpeed1)
aspect = slowerOf (apparence, SignalHead.YELLOW);
// Cochez rouge primordiale sur jaune ou vert
if (watchSensor1! = null & & watchSensor1.getBean (). getKnownState ()! Sensor.INACTIVE =)
aspect = SignalHead.RED;
if (watchSensor2! = null & & watchSensor2.getBean (). getKnownState ()! Sensor.INACTIVE =)
aspect = SignalHead.RED;
if (watchSensor3! = null & & watchSensor3.getBean (). getKnownState ()! Sensor.INACTIVE =)
aspect = SignalHead.RED,
if (watchSensor4! = null & & watchSensor4.getBean (). getKnownState ()! Sensor.INACTIVE =)
 aspect = SignalHead.RED;
// Cochez si le signal est maintenu, en forçant un aspect rouge par ce calcul
if (((SignalHead) sorties [0]). getHeld ())
aspect = SignalHead.RED;
// Gestion des feux d'approche
doApproach ();
// montrer Résultat si changé
if (apparence! oldAppearance =) {
((SignalHead) sorties [0]) setAppearance (apparence).;
if (log.isDebugEnabled ()) Log.DEBUG ("Change appearance of "+name+" to "+appearance";
}
}
Sur la Branche Droite d'un Aiguillage prit en Talon
Ce signal est le long de l'itinéraire principale à travers un aiguillage, qui est définie comme la direction prise par les trains lorsque l'aiguillage est droit. C'est la protection de la partie mobile de l'aiguillage de sorte que les trains s'arrêtent avant de circuler à travers une série d'aiguillages.
doTrailingMain void () {
int = apparence SignalHead.GREEN;
int oldAppearance = ((SignalHead) sorties [0]) getAppearance ().;
// Cochez pour le jaune, jaune clignotant supérieur au vert
if (protectWithFlashing & & fastestColor1 () == SignalHead.YELLOW)
aspect = SignalHead.FLASHYELLOW;
if (fastestColor1 () == SignalHead.RED | | fastestColor1 () == SignalHead.FLASHRED)
aspect = SignalHead.YELLOW;
// Si signal distant, montrer exactement ce que le signal distant fait
if (distantSignal)
aspect = fastestColor1 ();
// Si la vitesse limitée et vert, réduire au jaune
if (limitSpeed1)
aspect = slowerOf (apparence, SignalHead.YELLOW);
// cochez rouge primordiale sur jaune ou vert
if (watchSensor1! = null & & watchSensor1.getBean (). getKnownState ()! Sensor.INACTIVE =)
aspect = SignalHead.RED;
if (watchSensor2! = null & & watchSensor2.getBean (). getKnownState ()! Sensor.INACTIVE =)
aspect = SignalHead.RED;
if (watchSensor3! = null & & watchSensor3.getBean (). getKnownState ()! Sensor.INACTIVE =)
aspect = SignalHead.RED;
if (watchSensor4! = null & & watchSensor4.getBean (). getKnownState ()! Sensor.INACTIVE =)
aspect = SignalHead.RED;
if (watchTurnout! = null & & watchTurnout.getBean (). getKnownState ()! = Turnout.CLOSED)
            aspect = SignalHead.RED;
        if (watchTurnout! = null & & watchTurnout.getBean (). getCommandedState ()! = Turnout.CLOSED)
            aspect = SignalHead.RED;
        // cochezr si le signal est maintenu, en forçant un aspect rouge par ce calcul
        if (((SignalHead) sorties [0]). getHeld ())
            aspect = SignalHead.RED;
           Â
        // Gestion des feux d'approche
        doApproach ();
       Â
        // montrer Résultat si changé
        if (apparence! oldAppearance =) {
            ((SignalHead) sorties [0]) setAppearance (apparence).;
            if (log.isDebugEnabled ()) Log.DEBUG ("Change appearance of "+name+" to "+appearance);
        }
    }
Sur Branche Déviée d'un Aiguillage en Talon
Ce signal est le long de la voie déviée d' un aiguillage, qui est définie comme la direction prise par les trains lorsque l'aiguillage est défini à "dévié». C'est la protection de la partie mobile de l'aiguillage afin que les trains s'arrêtent avant de traverser une série d'aiguillages .
nulle doTrailingDiverging () {
int = apparence SignalHead.GREEN;
int oldAppearance = ((SignalHead) sorties [0]) getAppearance ().;
// Cochez pour le jaune, jaune clignotant primordiale sur le vert
if (protectWithFlashing & & fastestColor1 () == SignalHead.YELLOW)
aspect = SignalHead.FLASHYELLOW;
if (fastestColor1 () == SignalHead.RED | | fastestColor1 () == SignalHead.FLASHRED)
aspect = SignalHead.YELLOW;
// Si le signal est distant, montrer exactement ce que le signal distant fait
if (distantSignal)
aspect = fastestColor1 ();
// Si la vitesse limitée et vert, réduire au jaune
if (limitSpeed2)
aspect = slowerOf (apparence, SignalHead.YELLOW);
// cochez rouge primordiale sur jaune ou vert
if (watchSensor1! = null & & watchSensor1.getBean (). getKnownState ()! Sensor.INACTIVE =)
aspect = SignalHead.RED;
if (watchSensor2! = null & & watchSensor2.getBean (). getKnownState ()! Sensor.INACTIVE =)
aspect = SignalHead.RED;
if (watchSensor3! = null & & watchSensor3.getBean (). getKnownState ()! Sensor.INACTIVE =)
aspect = SignalHead.RED;
if (watchSensor4! = null & & watchSensor4.getBean (). getKnownState ()! Sensor.INACTIVE =)
aspect = SignalHead.RED;
if (watchTurnout! = null & & watchTurnout.getBean (). getKnownState ()! = Turnout.THROWN)
aspect = SignalHead.RED;
if (watchTurnout! = null & & watchTurnout.getBean (). getCommandedState ()! = Turnout.THROWN)
aspect = SignalHead.RED;
// cochez si le signal est maintenu, en forçant un aspect rouge par ce calcul
if (((SignalHead) sorties [0]). getHeld ())
aspect = SignalHead.RED;
// Gestion des feux d'approche
doApproach ();
// montrer Résultat si changé
if (apparence! oldAppearance =) {
((SignalHead) sorties [0]) setAppearance (apparence).;
if (log.isDebugEnabled ()) Log.DEBUG ("Change appearance of "+name+" to "+appearance");
}
Aiguillage en Pointe
Ce signal est pour protéger les sorties du talon d'un aiguillage. Selon que l'aiguillage est dévié ou direct, le train prend deux voies différentes, et le signal doit protéger les différents cantons suivants.
void doFacing() {
int appearance = SignalHead.GREEN;
int oldAppearance = ((SignalHead)outputs[0]).getAppearance();
// trouver l'apparence en aval, étant pessimiste, si nous ne sommes changepas sûrs de l'état
int s = SignalHead.GREEN;
if (watchTurnout!=null && watchTurnout.getBean().getKnownState() != Turnout.THROWN)
s = slowerOf(s, fastestColor1());
if (watchTurnout!=null && watchTurnout.getBean().getKnownState() != Turnout.CLOSED)
s = slowerOf(s, fastestColor2());
// cochez pour jaune, jaune clignotant primordiale sur le vert
if (protectWithFlashing && s==SignalHead.YELLOW)
appearance = SignalHead.FLASHYELLOW;
if (s==SignalHead.RED || s==SignalHead.FLASHRED)
appearance = SignalHead.YELLOW;change
// Si signal distant, montrer exactement ce que le signal local fait
if (distantSignal)
appearance = s;
// si vitesse limitée et vert ou jaune clignotant, réduire à jaune,
if (watchTurnout!=null && limitSpeed1 && watchTurnout.getBean().getKnownState()!=Turnout.THROWN)
appearance = slowerOf(appearance, SignalHead.YELLOW);
if (watchTurnout!=null && limitSpeed2 && watchTurnout.getBean().getKnownState()!=Turnout.CLOSED)
appearance = slowerOf(appearance, SignalHead.YELLOW);
change
// Cochez pour rouge primordiale sur jaune et vert
if (watchSensor1!=null && watchSensor1.getBean().getKnownState() != Sensor.INACTIVE)
appearance = SignalHead.RED;
if (watchSensor2!=null && watchSensor2.getBean().getKnownState() != Sensor.INACTIVE)
appearance = SignalHead.RED;
if (watchSensor3!=null && watchSensor3.getBean().getKnownState() != Sensor.INACTIVE)
appearance = SignalHead.RED;
if (watchSensor4!=null && watchSensor4.getBean().getKnownState() != Sensor.INACTIVE)
appearance = SignalHead.RED;
if ((watchTurnout!=null && watchTurnout.getBean().getKnownState() == Turnout.CLOSED)
&& ((watchedSensor1!=null && watchedSensor1.getBean().getKnownState() != Sensor.INACTIVE)))
appearance = SignalHead.RED;
if ((watchTurnout!=null && watchTurnout.getBean().getKnownState() == Turnout.CLOSED) && ((watchedSensor1Alt!=null && watchedSensor1Alt.getBean().getKnownState() != Sensor.INACTIVE)))
appearance = SignalHead.RED;
if ((watchTurnout!=null && watchTurnout.getBean().getKnownState() == Turnout.THROWN) && ((watchedSensor2!=null && watchedSensor2.getBean().getKnownState() != Sensor.INACTIVE)))
appearance = SignalHead.RED;
if ((watchTurnout!=null && watchTurnout.getBean().getKnownState() == Turnout.THROWN) && ((watchedSensor2Alt!=null && watchedSensor2Alt.getBean().getKnownState() != Sensor.INACTIVE)))
appearance = SignalHead.RED;
// vérifier si l'aiguillage est en mouvement, le cas échéant forcer au rouge
if (watchTurnout!=null && (watchTurnout.getBean().getKnownState() != watchTurnout.getBean().getCommandedState()) )
appearance = SignalHead.RED;
if (watchTurnout!=null && (watchTurnout.getBean().getKnownState() != Turnout.THROWN) && (watchTurnout.getBean().getKnownState() != Turnout.CLOSED) ) // checking for other states
appearance = SignalHead.RED;
// vérifiez si le signal est maintenu, forcer à l'aspect rouge par ce calcul
if (((SignalHead)outputs[0]).getHeld())
appearance = SignalHead.RED;
// gérer l'éclairage d'approche
doApproach();
change
// show result if changed
if (appearance != oldAppearance)
((SignalHead)outputs[0]).setAppearance(appearance);