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

Ce signal protège l'extrémité d'une droite passant par le canton, sans aiguillage signalé.

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);