278 lines
15 KiB
Plaintext
278 lines
15 KiB
Plaintext
<!DOCTYPE html>
|
|
<html lang="fr">
|
|
<!-- Updated by Blorec Hervé 2017-01-30-->
|
|
<head>
|
|
<title>JMRI Support - LocoNet® Implementation</title>
|
|
<meta name="author" content="Bob Jacobsen">
|
|
<meta name="keywords" content="JMRI LocoNet technical implementation">
|
|
<!--#include virtual="/help/fr/parts/Style.shtml" -->
|
|
</head>
|
|
|
|
<body>
|
|
<!--#include virtual="/help/fr/parts/Header_fr.shtml" -->
|
|
<div id="mBody">
|
|
<!--#include virtual="Sidebar.shtml" -->
|
|
<div id="mainContent">
|
|
|
|
<h1>Informations sur la mise en oeuvre JMRI LocoNet®</h1>
|
|
|
|
Cette page décrit les diverses structures de haut niveau sur la mise en oeuvre de JMRI LocoNet.
|
|
S'il vous plaît voir aussi les
|
|
<a href="https://jmri.org/JavaDoc/doc/jmri/jmrix/loconet/package-summary.html"> JavaDocs pour le paquet jmrix.loconet
|
|
</a>.
|
|
|
|
<h2> LocoNet Valeurs Spécifiques </h2>
|
|
La
|
|
<a href="https://jmri.org/JavaDoc/doc/jmri/jmrix/loconet/LnConstants.html"> classe LnConstants </a>
|
|
fournit les statiques, les constantes finales pour représenter
|
|
divers domaines et les valeurs dans les messages LocoNet. A un certain moment, certaines de celles-ci
|
|
devraient être intégrées dans des classes spécifiques (c.-à LocoNetMessage) de sorte que le codage et les
|
|
algorithmes de décodage n'ont pas à apparaître dans de nombreux endroits.
|
|
|
|
<h2> Envoi et Réception de Messages LocoNet </h2>
|
|
|
|
La
|
|
<a href="https://jmri.org/JavaDoc/doc/jmri/jmrix/loconet/LocoNetInterface.html"> Classe LocoNetInterface </a>
|
|
fournit la connexion basique à LocoNet pour les classes utilisateurs
|
|
. Les messages sont envoyés en les passant à une prise en charge LocoNetInterface
|
|
et vous pouvez vous inscrire avec un LocoNetInterface
|
|
pour être avisé de tout le trafic LocoNet.
|
|
|
|
<p>
|
|
<IMG SRC="images/LocoNetInterfaceUML.png" alt="UML of JMRI's LocoNet Interface">
|
|
<p>
|
|
La classe
|
|
<a href="https://jmri.org/JavaDoc/doc/jmri/jmrix/loconet/LocoNetMessage.html"> LocoNetMessage </a>
|
|
actuellement (2001) n'aide pas vraiment d'autre code à construire et à décoder les paquets LocoNet, mais les
|
|
contient juste. Ce devrait être amélioré.
|
|
<p>
|
|
Les étapes pour envoyer un message à LocoNet sont:
|
|
<ol>
|
|
<li> Créer un <a href="https://jmri.org/JavaDoc/doc/jmri/jmrix/loconet/LocoNetMessage.html"> LocoNetMessage </a>,
|
|
et remplissez-le avec le message que vous souhaitez envoyer. Il n'est pas nécessaire de remplir la vérification des bits d'erreur
|
|
, ce sera fait dans le cadre de l'envoi.
|
|
<li> Localiser un objet fournissant une interface
|
|
<a href="https://jmri.org/JavaDoc/doc/jmri/jmrix/loconet/LocoNetInterface.html"> LocoNetInterface </a>
|
|
. Dans de nombreux cas, les
|
|
<a href="https://jmri.org/JavaDoc/doc/jmri/jmrix/loconet/LnTrafficController.html"> LnTrafficController </a> devraient fournir cela, et l'
|
|
objet peut être situé avec
|
|
<PRE>
|
|
LocoNetInterface l = LnTrafficController.instance ();
|
|
</PRE>
|
|
<li> Envoyez le message:
|
|
<PRE>
|
|
l.sendLocoNetMessage (msg);
|
|
</PRE>
|
|
</ol>
|
|
|
|
<p>
|
|
Les classes qui souhaitent recevoir des paquets entrants LocoNet devraient prendre en charge l'interfaces
|
|
<a href="https://jmri.org/JavaDoc/doc/jmri/jmrix/loconet/LocoNetListener.html"> LocoNetListener </a> ,
|
|
et enregistrer leur désir d'écouter
|
|
via un objet de l'interface
|
|
<a href="https://jmri.org/JavaDoc/doc/jmri/jmrix/loconet/LocoNetInterface.html"> LocoNetInterface </a> .
|
|
Il est important de noter que les
|
|
objets auditeur ne peuvent pas supposer qu'ils reçoivent des messages entrants LocoNet
|
|
dans n'importe quel fil spécifique. En particulier, ils ne doivent pas présumer qu'ils
|
|
recoivent ces messages dans un fil GUI, donc ils ont à transmettre toute
|
|
modifications de l'interface utilisateur..
|
|
|
|
<h2> Prise en charge de la Connexion LocoNet </h2>
|
|
La prise en charge de la communication avec une vraie LocoNet est assurée par des
|
|
classes qui prennent en charge l'interface LocoNetListener.
|
|
Il en existe actuellement quatre:
|
|
<a href="https://jmri.org/JavaDoc/doc/jmri/jmrix/loconet/LnTrafficController.html"> LnTrafficController </a>
|
|
et ses sous-classes
|
|
<a href="https://jmri.org/JavaDoc/doc/jmri/jmrix/loconet/LnTrafficPacketizer.html"> LnTrafficPacketizer </a>,(lien cassé le 17/01/2012)
|
|
<a href="https://jmri.org/JavaDoc/doc/jmri/jmrix/loconet/LnTrafficRouter.html"> LnTrafficRouter </a>,
|
|
et
|
|
<a href="https://jmri.org/JavaDoc/doc/jmri/jmrix/loconet/LocoNetInterfaceScaffold.html"> LocoNetInterfaceScaffold </a>(lien cassé le 17/01/2012).
|
|
|
|
<h3>LnTrafficController</h3>
|
|
|
|
La classe abstraite
|
|
<a href="https://jmri.org/JavaDoc/doc/jmri/jmrix/loconet/LnTrafficController.html"> LnTrafficController </a>
|
|
fournit une prise en charge commune pour ses sous-classes, et
|
|
ajoute un mécanisme de mise en oeuvre pour trouver une LocoNetInterface utilisable.
|
|
<p>
|
|
La routine addLocoNetListener et les méthodes removeLocoNetListener sont mises en oeuvre ici,
|
|
avec une méthode de notification pour transmettre LocoNetMessages aux auditeurs.
|
|
<p>
|
|
L'instance statique () est utilisée par un grand nombre de classes jmrix.loconet
|
|
pour trouver une LocoNetInterface pour transmettre et recevoir des messages. Elle fonctionne grâce à
|
|
un membre statique "automatique", qui est initialisé avec un LnTrafficController
|
|
objet sous-classe qui est créé. Tous les objets qui veulent envoyer ou recevoir à travers la
|
|
LocoNet utiliserons la dernieré création de l'application LnTrafficController.
|
|
Voir la section sur les "<a href="#startup"> Démarrages </a>" pour plus d'informations à ce sujet.
|
|
|
|
<p>
|
|
<img src="images/LnTrafficControllerUML.png" alt="UML of JMRI's LocoNet Traffic Controller">
|
|
|
|
<h3>LnTrafficPacketizer</h3>
|
|
La classe
|
|
<a href="https://jmri.org/JavaDoc/doc/jmri/jmrix/loconet/LnTrafficPacketizer.html"> LnTrafficPacketizer </a>
|
|
étend la mise en oeuvre de LnTrafficController pour envoyer et recevoir
|
|
des paquets sur un lien série LocoBuffer à un LocoNet.
|
|
|
|
Il fonctionne avec une mise en oeuvre de la Classe abstraite
|
|
<a href="https://jmri.org/JavaDoc/doc/jmri/jmrix/loconet/LnPortController.html"> LnPortController </a> -
|
|
, qui travaille au niveau des flux de caractères.
|
|
Ceux-ci communiquent à travers des flux de Java qui transportent les messages LocoNet comme des
|
|
séquences de caractères. La mise en oeuvre de LnPortController est
|
|
disponible pour le LocoBuffer, MS100 et pour la lecture d'un fichier Rapport hexadécimal.
|
|
<p>
|
|
Il utilise des fils séparés pour la transmission et la réception de caractères à partir des flux.
|
|
L'opération de réception se fait dans un fil de sorte qu'il peut facilement décrocher si aucun message
|
|
n'est disponible. L'opération d'émission se fait dans un fil pour une raison analogue;
|
|
parfois l'entrée d'un LocoBuffer s'éteindra (sortie du programme), ce qui provoque
|
|
le décrochage du flux des opérations d'écriture. En faisant ceci dans un fil séparé, nous pouvons
|
|
détecter ou au moins contourner ceci sans que la totalité du programme ne s'arrête.
|
|
|
|
<h3>LnTrafficRouter</h3>
|
|
La classe
|
|
<a href="https://jmri.org/JavaDoc/doc/jmri/jmrix/loconet/LnTrafficRouter.html"> LnTrafficRouter </a>
|
|
fournit une opération de Dispersion-Regroupement pour l'interface LocoNetListener.
|
|
Notez que cette mise en oeuvre ne transforme pas la LocoNetMessages dans le trafic série.
|
|
|
|
<br> <img Src="images/LocoNetConnections.gif" alt="Drawing comment les différents objets de route messages" width="640" height="480">
|
|
<br>
|
|
|
|
Notez l'objet de deux LnTrafficRouter. Il fournit une LocoNetInterface pour tous les
|
|
LocoNet en utilisant des messages dans le noeud distant, de sorte que seuls
|
|
une copie de chaque message voyage à travers le lien à distance.
|
|
<p>
|
|
Notez que la communication "une classe distante " pourrait également être mise en oeuvre comme une sous-classe de LnTrafficRouter,
|
|
au lieu de communiquer avec un.
|
|
|
|
<h3> LocoNetInterfaceScaffold </h3>
|
|
La classe
|
|
<a href="https://jmri.org/JavaDoc/doc/jmri/jmrix/loconet/LocoNetInterfaceScaffold.html"> LocoNetInterfaceScaffold </a>
|
|
fournit une mise en oeuvre de LnTrafficController pour une utilisation dans les programmes de test.
|
|
Plutôt que de communiquer avec un LocoNet réel, il fournit un échafaudage pour
|
|
rendre facile à tester la transmission et la réception de messages.
|
|
|
|
|
|
<h2> <a name="startup"> Démarrage </a> </h2>
|
|
Il y a des classes "action" qui se connectent à une source d'entrée. Le principal
|
|
programme met celle-ci dans un menu, sur un bouton, etc, afin que l'utilisateur puisse sélectionner la
|
|
connexion souhaitée. L'ensemble actuel (Mars 2002) est:
|
|
<ul>
|
|
<li> LocoBufferAction - crée un objet LocoBufferAdapter et configure pour un fonctionnement
|
|
avec un LocoBuffer
|
|
<li> MS100Action - crée un objet MS100Adapter et configure pour fonctionner avec
|
|
une MS100
|
|
<li> LnHexFileAction - crée un objet LnHexFilePort et configure pour un fonctionnement
|
|
comme "LocoNet Simulator" (auparavant, cela était connu comme "Le fichier Hex LocoNet", comme il
|
|
peut charger le contenu d'un fichier de chaînes de caractères hexadécimcommaux)
|
|
</ul>
|
|
<br>
|
|
En plus de configurer l'adaptateur pour la source d'entrée,
|
|
quelque chose à configurer l'ensemble des objets gérant et les objets manipulés par
|
|
LocoNet. Il s'agit notamment de:
|
|
<ul>
|
|
<li> Typiquement un LnPacketizer, qui devient l' "instance" pour
|
|
les objets qui utilisent LnTrafficController.instance () pour localiser une interface.
|
|
<li> Un ProgrammerInstance
|
|
<li> Un PowerManagerInstance
|
|
<li> Un TurnoutManagerInstance
|
|
</ul>
|
|
|
|
Ces trois derniers fournissent des services basés sur LocoNet pour les
|
|
Interfaces JMRI de niveau supérieur.
|
|
<p>
|
|
Les méthodes de configuration () dans les divers adaptateurs de classes font cela.
|
|
Ce n'est pas un mécanisme très général. Bien qu'un LnPacketizer
|
|
soit la bonne chose pour se connecter à chacun des adaptateurs port série,
|
|
le reste de la configuration peut varier.
|
|
|
|
<h2>Adaptateurs Port </h2>
|
|
<a href="https://jmri.org/JavaDoc/doc/jmri/jmrix/loconet/LnPortController.html"> LnPortController </a>
|
|
est une classe de base abstraite pour réaliser des mises en oeuvres communes pour l'adaptateur de
|
|
classes qui se connectent à des ports série avec des protocoles spécifiques.
|
|
|
|
<h4> MS100 </h4>
|
|
|
|
Notez que l'application courante MS100 n'est pas aussi robuste que nous ayons vraiment besoin qu'elle soit.
|
|
En particulier, le délestage et la retransmission ne sont pas cochées. La meilleure solution disponible maintenant
|
|
est désormais d'utiliser un LocoBuffer au lieu d'un MS100 pour l'accès au
|
|
LocoNet; qui a un PIC en elle qui gère tout cela correctement.
|
|
<p>
|
|
|
|
La classe MS100Action (paquet jmrix.loconet.ms100) démarre une connexion LocoNet
|
|
via un MS100. Une fois déclenché, il crée un objet MS100Frame visible.
|
|
<p>
|
|
À son tour, le MS100Frame crée un objet MS100Adapter,
|
|
montre ensuite les ports de communication disponibles , permettant à l'utilisateur d'en choisir un.
|
|
L'objet MS100Adapter met en oeuvre l'interface LnPortController, de sorte
|
|
qu'il peut éventuellement connecter un LnTrafficController à un port série et MS100.
|
|
<p>
|
|
Quand le bouton "port ouvert MS100" est enfoncé, l'objet MS100Frame
|
|
|
|
<ul>
|
|
<li> Passe du port de communication sélectionné
|
|
à l'MS100Adapter. L'adaptateur, puis MS100
|
|
se connectent à ce port et créent le
|
|
flux d'entrée et de sortie
|
|
<li> Puis s'assure qu'
|
|
un objet LnTrafficController existe en appelant le procédé LnTrafficController.instance
|
|
|
|
<li> Relie cette instance LnTrafficController à l'MS100Adapter (sous-classe de LnPortController)
|
|
<li> Commence LnTrafficController dans un nouveau fil pour qu'il puisse gérer les
|
|
messages entrants de façon asynchrone.
|
|
</ul>
|
|
|
|
<h4> LocoBuffer </h4>
|
|
|
|
Très semblable au cas MS100, avec la même séquence d'opérations. La configuration du port
|
|
est quelque peu différente. Les classes sont dans le paquet jmrix.loconet.locobuffer.
|
|
|
|
<h4> HexFile </h4>
|
|
|
|
Les classes HexFile (paquet jmrix.loconet.hexfile ) sont destinées à
|
|
simuler une connexion LocoNet partir d'un fichier de données.
|
|
La fourniture des types de connections du "Simulateur LocoNet".
|
|
Un fichier de données de format hexadécimal se nourrit dans les messages
|
|
comme s'ils provenaient d'une connexion externe.
|
|
<p>
|
|
L'initialisation est fournie par la classe HexFileAction.
|
|
Une fois déclenchée, elle crée un objet HexFileFrame visible.
|
|
Cela fournit un bouton, que l'utilisateur peut utiliser pour sélectionner un fichier d'entrée.
|
|
<p>
|
|
Quand un fichier est sélectionné, l'objet HexFileFrame
|
|
<ul>
|
|
<li> Crée un objet HexFileAdapter
|
|
connecté à ce fichier
|
|
<li> Puis s'assure qu'
|
|
un objet LnTrafficController existe en appelant le procédé LnTrafficController.instance.
|
|
<li> Relie cette instance LnTrafficController à l'HexFileAdapter (sous-classe de LnPortController)
|
|
<li> Commence LnTrafficController dans un nouveau fil pour qu'il puisse gérer les
|
|
messages entrants de façon asynchrone.</li>
|
|
</ul>
|
|
|
|
<h2>Slot et gestion du Programmateur</h2>
|
|
|
|
<p>Les "slots" sont à la base du fonctionnement d'une station de commande LocoNet. Ils sont
|
|
représentés
|
|
par la classe LocoNetSlot. Comme LocoNetMessage, cette classe n'a pas (encore) fourni un grand nombre
|
|
de support pour la création et le décodage des statuts des slots . La classe SlotManager écoute le trafic LocoNet
|
|
pour garder une idée des mise à jour du contenu des slot des centrales de commande. Il pourrait un jour
|
|
être nécessaires pour la SlotManager de communiquer activement avec la station de commande pour
|
|
mise à jour de cette information, mais pour ne pas que la SlotManager écoute seulement pour les slots les commande de changement qui
|
|
proviennent du LocoNet ou sont transmis par le programme.</p>
|
|
<p>
|
|
L'interface SlotListener devraient être appliquée par toute classe qui veut être
|
|
notifiée lorsqu'un slots change .
|
|
<p>
|
|
Parce que les stations de commande Digitrax gérent la programmation via un emplacement réservé spéciale
|
|
, l'interface jmri.Programmer est également implémentée par la classe loconet.SlotManager.
|
|
Cela complique grandement la classe, mais elle est acceptable pour l'instant.</p>
|
|
|
|
<p>LocoNet® est une marque séposée de <a href="http://www.digitrax.com">Digitrax, Inc.</a></p>
|
|
|
|
<!--#include virtual="/help/fr/parts/Footer_fr.shtml" -->
|
|
</div>
|
|
</div>
|
|
<script src="/js/help.js"></script>
|
|
</body>
|
|
</html>
|