Files
2026-06-17 14:00:51 +02:00

278 lines
15 KiB
Plaintext

<!DOCTYPE html>
<html lang="fr">
<!-- Updated by Blorec Herv&#233; 2017-01-30-->
<head>
<title>JMRI Support - LocoNet&reg; 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&reg;</h1>
Cette page d&#233;crit les diverses structures de haut niveau sur la mise en oeuvre de JMRI LocoNet.
S'il vous pla&#238;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&#233;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&#233;senter
divers domaines et les valeurs dans les messages LocoNet. A un certain moment, certaines de celles-ci
devraient &#234;tre int&#233;gr&#233;es dans des classes sp&#233;cifiques (c.-&#224; LocoNetMessage) de sorte que le codage et les
algorithmes de d&#233;codage n'ont pas &#224; appara&#238;tre dans de nombreux endroits.
<h2> Envoi et R&#233;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 &#224; LocoNet pour les classes utilisateurs
. Les messages sont envoy&#233;s en les passant &#224; une prise en charge LocoNetInterface
et vous pouvez vous inscrire avec un LocoNetInterface
pour &#234;tre avis&#233; 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 &#224; construire et &#224; d&#233;coder les paquets LocoNet, mais les
contient juste. Ce devrait &#234;tre am&#233;lior&#233;.
<p>
Les &#233;tapes pour envoyer un message &#224; LocoNet sont:
<ol>
<li> Cr&#233;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&#233;cessaire de remplir la v&#233;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 &#234;tre situ&#233; 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&#233;sir d'&#233;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&#231;oivent des messages entrants LocoNet
dans n'importe quel fil sp&#233;cifique. En particulier, ils ne doivent pas pr&#233;sumer qu'ils
recoivent ces messages dans un fil GUI, donc ils ont &#224; 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&#233;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&#233; 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&#233; 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&#233;canisme de mise en oeuvre pour trouver une LocoNetInterface utilisable.
<p>
La routine addLocoNetListener et les m&#233;thodes removeLocoNetListener sont mises en oeuvre ici,
avec une m&#233;thode de notification pour transmettre LocoNetMessages aux auditeurs.
<p>
L'instance statique () est utilis&#233;e par un grand nombre de classes jmrix.loconet
pour trouver une LocoNetInterface pour transmettre et recevoir des messages. Elle fonctionne gr&#226;ce &#224;
un membre statique "automatique", qui est initialis&#233; avec un LnTrafficController
objet sous-classe qui est cr&#233;&#233;. Tous les objets qui veulent envoyer ou recevoir &#224; travers la
LocoNet utiliserons la dernier&#233; cr&#233;ation de l'application LnTrafficController.
Voir la section sur les "<a href="#startup"> D&#233;marrages </a>" pour plus d'informations &#224; 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>
&#233;tend la mise en oeuvre de LnTrafficController pour envoyer et recevoir
des paquets sur un lien s&#233;rie LocoBuffer &#224; 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&#232;res.
Ceux-ci communiquent &#224; travers des flux de Java qui transportent les messages LocoNet comme des
s&#233;quences de caract&#232;res. La mise en oeuvre de LnPortController est
disponible pour le LocoBuffer, MS100 et pour la lecture d'un fichier Rapport hexad&#233;cimal.
<p>
Il utilise des fils s&#233;par&#233;s pour la transmission et la r&#233;ception de caract&#232;res &#224; partir des flux.
L'op&#233;ration de r&#233;ception se fait dans un fil de sorte qu'il peut facilement d&#233;crocher si aucun message
n'est disponible. L'op&#233;ration d'&#233;mission se fait dans un fil pour une raison analogue;
parfois l'entr&#233;e d'un LocoBuffer s'&#233;teindra (sortie du programme), ce qui provoque
le d&#233;crochage du flux des op&#233;rations d'&#233;criture. En faisant ceci dans un fil s&#233;par&#233;, nous pouvons
d&#233;tecter ou au moins contourner ceci sans que la totalit&#233; du programme ne s'arr&#234;te.
<h3>LnTrafficRouter</h3>
La classe
<a href="https://jmri.org/JavaDoc/doc/jmri/jmrix/loconet/LnTrafficRouter.html"> LnTrafficRouter </a>
fournit une op&#233;ration de Dispersion-Regroupement pour l'interface LocoNetListener.
Notez que cette mise en oeuvre ne transforme pas la LocoNetMessages dans le trafic s&#233;rie.
<br> <img Src="images/LocoNetConnections.gif" alt="Drawing comment les diff&#233;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 &#224; travers le lien &#224; distance.
<p>
Notez que la communication "une classe distante " pourrait &#233;galement &#234;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&#244;t que de communiquer avec un LocoNet r&#233;el, il fournit un &#233;chafaudage pour
rendre facile &#224; tester la transmission et la r&#233;ception de messages.
<h2> <a name="startup"> D&#233;marrage </a> </h2>
Il y a des classes "action" qui se connectent &#224; une source d'entr&#233;e. Le principal
programme met celle-ci dans un menu, sur un bouton, etc, afin que l'utilisateur puisse s&#233;lectionner la
connexion souhait&#233;e. L'ensemble actuel (Mars 2002) est:
<ul>
<li> LocoBufferAction - cr&#233;e un objet LocoBufferAdapter et configure pour un fonctionnement
avec un LocoBuffer
<li> MS100Action - cr&#233;e un objet MS100Adapter et configure pour fonctionner avec
une MS100
<li> LnHexFileAction - cr&#233;e un objet LnHexFilePort et configure pour un fonctionnement
comme "LocoNet Simulator" (auparavant, cela &#233;tait connu comme "Le fichier Hex LocoNet", comme il
peut charger le contenu d'un fichier de cha&#238;nes de caract&#232;res hexad&#233;cimcommaux)
</ul>
<br>
En plus de configurer l'adaptateur pour la source d'entr&#233;e,
quelque chose &#224; configurer l'ensemble des objets g&#233;rant et les objets manipul&#233;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&#233;s sur LocoNet pour les
Interfaces JMRI de niveau sup&#233;rieur.
<p>
Les m&#233;thodes de configuration () dans les divers adaptateurs de classes font cela.
Ce n'est pas un m&#233;canisme tr&#232;s g&#233;n&#233;ral. Bien qu'un LnPacketizer
soit la bonne chose pour se connecter &#224; chacun des adaptateurs port s&#233;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&#233;aliser des mises en oeuvres communes pour l'adaptateur de
classes qui se connectent &#224; des ports s&#233;rie avec des protocoles sp&#233;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&#233;lestage et la retransmission ne sont pas coch&#233;es. La meilleure solution disponible maintenant
est d&#233;sormais d'utiliser un LocoBuffer au lieu d'un MS100 pour l'acc&#232;s au
LocoNet; qui a un PIC en elle qui g&#232;re tout cela correctement.
<p>
La classe MS100Action (paquet jmrix.loconet.ms100) d&#233;marre une connexion LocoNet
via un MS100. Une fois d&#233;clench&#233;, il cr&#233;e un objet MS100Frame visible.
<p>
&#192; son tour, le MS100Frame cr&#233;e un objet MS100Adapter,
montre ensuite les ports de communication disponibles , permettant &#224; l'utilisateur d'en choisir un.
L'objet MS100Adapter met en oeuvre l'interface LnPortController, de sorte
qu'il peut &#233;ventuellement connecter un LnTrafficController &#224; un port s&#233;rie et MS100.
<p>
Quand le bouton "port ouvert MS100" est enfonc&#233;, l'objet MS100Frame
<ul>
<li> Passe du port de communication s&#233;lectionn&#233;
&#224; l'MS100Adapter. L'adaptateur, puis MS100
se connectent &#224; ce port et cr&#233;ent le
flux d'entr&#233;e et de sortie
<li> Puis s'assure qu'
un objet LnTrafficController existe en appelant le proc&#233;d&#233; LnTrafficController.instance
<li> Relie cette instance LnTrafficController &#224; l'MS100Adapter (sous-classe de LnPortController)
<li> Commence LnTrafficController dans un nouveau fil pour qu'il puisse g&#233;rer les
messages entrants de fa&#231;on asynchrone.
</ul>
<h4> LocoBuffer </h4>
Tr&#232;s semblable au cas MS100, avec la m&#234;me s&#233;quence d'op&#233;rations. La configuration du port
est quelque peu diff&#233;rente. Les classes sont dans le paquet jmrix.loconet.locobuffer.
<h4> HexFile </h4>
Les classes HexFile (paquet jmrix.loconet.hexfile ) sont destin&#233;es &#224;
simuler une connexion LocoNet partir d'un fichier de donn&#233;es.
La fourniture des types de connections du "Simulateur LocoNet".
Un fichier de donn&#233;es de format hexad&#233;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&#233;clench&#233;e, elle cr&#233;e un objet HexFileFrame visible.
Cela fournit un bouton, que l'utilisateur peut utiliser pour s&#233;lectionner un fichier d'entr&#233;e.
<p>
Quand un fichier est s&#233;lectionn&#233;, l'objet HexFileFrame
<ul>
<li> Cr&#233;e un objet HexFileAdapter
connect&#233; &#224; ce fichier
<li> Puis s'assure qu'
un objet LnTrafficController existe en appelant le proc&#233;d&#233; LnTrafficController.instance.
<li> Relie cette instance LnTrafficController &#224; l'HexFileAdapter (sous-classe de LnPortController)
<li> Commence LnTrafficController dans un nouveau fil pour qu'il puisse g&#233;rer les
messages entrants de fa&#231;on asynchrone.</li>
</ul>
<h2>Slot et gestion du Programmateur</h2>
<p>Les "slots" sont &#224; la base du fonctionnement d'une station de commande LocoNet. Ils sont
repr&#233;sent&#233;s
par la classe LocoNetSlot. Comme LocoNetMessage, cette classe n'a pas (encore) fourni un grand nombre
de support pour la cr&#233;ation et le d&#233;codage des statuts des slots . La classe SlotManager &#233;coute le trafic LocoNet
pour garder une id&#233;e des mise &#224; jour du contenu des slot des centrales de commande. Il pourrait un jour
&#234;tre n&#233;cessaires pour la SlotManager de communiquer activement avec la station de commande pour
mise &#224; jour de cette information, mais pour ne pas que la SlotManager &#233;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 &#234;tre appliqu&#233;e par toute classe qui veut &#234;tre
notifi&#233;e lorsqu'un slots change .
<p>
Parce que les stations de commande Digitrax g&#233;rent la programmation via un emplacement r&#233;serv&#233; sp&#233;ciale
, l'interface jmri.Programmer est &#233;galement impl&#233;ment&#233;e par la classe loconet.SlotManager.
Cela complique grandement la classe, mais elle est acceptable pour l'instant.</p>
<p>LocoNet&reg; est une marque s&#233;pos&#233;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>