JMRI: Simple Signal Logic

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