JMRI: Suivi en Cantons
Renseignements généraux
Les Systèmes de contrôle de modèle ferroviaire ne peut généralement pas vous dire quel train occupe un portion particulière de voie à un moment donné.
Cela est regrettable, car il y a beaucoup de raisons pour vouloir le savoir. Par exemple, vous voudrez peut-être commander tous les trains qui atteignent un signal rouge particulier pour s'arrêter. Mais vous ne pouvez pas faire ça sauf si vous savez quel est le train qui a atteint le signal.
JMRI fournit des outils expérimentaux de suivi pour les trains en mouvement sur le réseau.
Concepts de base
Imaginez une simple boucle de voie qui a été câblée avec des capteurs d'occupation sur les différents segments de la voie, que nous appellerons "Cantons". Imaginez le train est dans le canton A, et va bientôt passer au canton B, puis C.Au début, le capteur pour le canton A est montré actif. Comme le train se déplace dans le canton B, le capteur pour B deviendra actif. Lorsque le train a complètement quitté A , son capteur deviendra inactif. Etc
Même si nous ne savons pas d'un canton particulier s'il est actif ou pas (occupé ou non), en se penchant également sur l'occupation des cantons adjacents on peut en savoir plus. Dans l'exemple ci-dessus, si le code savait que le train 321 était dans le canton A, lorsque le canton B devient actif, le programme peut déduire que 321 est désormais également dans le canton B.
.
Cela ne fonctionne pas toujours, malheureusement. Imaginons le cas ci-dessus, où il y a à la fois un train en A et aussi un train en C. Lorsque B va d'inactif à actif (inoccupé au occupé), quel train a pénétré dans B? Celui de A, ou celui de C?
Une partie de cette ambiguïté peut être enlevé par un arrangement soigneux de la détection des cantons qui doivent être courts , et en utilisant une logique plus intelligente qui pense à la direction et la priorité des trains. Mais il est clair que même la voie droite pose quelques problèmes.
Les aiguillages ajoutent une couche supplémentaire de complexité. Imaginez un train présent dans le canton à côté de la voie directe (closed) , et un autre présent dans la voie déviée (thrown) . Lorsque le capteur d'occupation pour l'aiguillage devient actif, quel train est entré dans l'aiguillage de la voie? Cela dépend de quelle manière l'aiguillage est positionné, de sorte que le programme doit être en mesure de considérer cette information.
Outils Canton JMRI
JMRI fournit une classe "Canton" pour gérer le suivi.Notez que ceci est le code de test, et que toutes les fonctions ne sont pas complètement présentes. Par exemple, vous ne pouvez pas stocker des objets de cantons dans un fichier de configuration, ils doivent être manuellement créé dans vos scripts. Cette limitation sera supprimée avec le temps.
Tableau de Canton
Le Tableau Canton vous permet de voir l'état de vos cantons.Questions
Il n'existe aucune exigence fonctionnelle pour une lettre type dans le nom système, mais par convention, nous utilisons 'B' pour 'bloc'(canton). L'implémentation par défaut n'est pas spécifiques au système, donc un système de lettre "I" est approprié. Cela conduit à noms de système comme "IB201".La direction d'un canton est détermpinée par la direction de l'arrivée du train . Quand un train se trouve à venir par un chemin particulier, que GetFromBlockDirection chemin devient la direction du train dans ce canton. Questions
:
- Ne gère pas un train tirant derrière lui
un autre :
- Lorsque le deuxième train arrive, le capteur est déjà actif, la valeur est inchangée (mais la valeur ne peut être un simple objet de toute façon)
- Quand le 1er train quitte le canton, le capteur reste actif, donc la valeur demeure celle du 1er train
- L'hypothèse est que le train va seulement passer par un aiguillage défini. Par exemple, un train peut venir dans le canton de l'aiguillage de la voie principale, même si l'aiguillage est dirigé vers l'évitement.
- Ne gère pas les trains se suivant étroitement où il n'y a qu'un seul canton électrique par signal. Pour ce faire, il a probablement besoin d'un certain type de logique pour "assumer qu'un train ne recule pas . Une meilleure solution est d'avoir de multiples capteurs et des objets cantons entre chaque tête de signal.
- Si un train change de sens dans un canton et le remonte (par exemple B1 à B2 à B1), le canton qui est rentré obtiendra une direction à jour, mais la direction de ce canton (B2 dans l'exemple) n'est pas mis à jour. En d'autres termes, nous n'avons pas remarqué que le train avait fait marche arrière.