JMRI® c'est
PanelPro®
Avancées
Applications
Par la communauté JMRI.org:
Outils
JMRI fournit des outils puissants pour travailler avec réseau:
Automatisation du Réseau
JMRI peut être utilisé pour automatiser des parties de votre réseau, depuis un simple contrôle d'un croisement à la commande des trains en toîle de fond.
Materiel pris en Charge
JMRI prend en charge un large éventail de "Centrale" DCC produits par différents fournisseurs pour l'automatisation de réseaux miniatures.
Systèmes d'Exploitation Supportés

Système d'Aide JMRI

Table des Matières Index
Glossaire FAQ *)
Des pages marqué *) sont en Anglais.

Donner à JMRI Faites un don à JMRI.org

JMRI:Guide Utilisateur DecoderPro

-

Définitions Avancées des Décodeurs

Cette page fournit des informations sur les fonctionnalités avancées dans les fichiers de définiton décodeur pour le Programmateur Symbolique DecoderPro .

Formatage sur la page

Vous pouvez faire une mise en forme limitée sur l'écran en utilisant les balises HTML de formatage.

Vous pouvez intégrer du HTML dans le texte du volet, mais il doit être enfermé dans les Mots clés < html > ... < /html > .

Ceci est un peu difficile à cause du chevauchement entre les "balises comme partie de la structure XML du fichier décodeur" et "les balises HTML inclus dans le fichier décodeur". Toutes les balises HTML doivent être citées, avec leurs caractères < et > remplacées par leurs chaines &lt; et &gt; et tous les guillemets intégrés remplacés par &quot;.

Par exemple:

 <label label="&lt;html&gt;&lt;strong&gt;JMRI 3.7.2 ou plus tard est requis pour utiliser cette définition.&lt;/strong&gt;&lt;/html&gt;"/>
Après le XML est lu, les contenus de ce label seront affiché depuis le texte dans l'attribut "label", qui est:
 <html><strong>JMRI 3.7.2 ou plus tard est requis pour utiliser cette définition.</strong></html>
et qui apparaitre à l'écran comme

   JMRI 3.7.2 ou plus tard est requis pour utiliser cette définition.

Pour plus d'exemple voir: xml/decoders/esu/v4readMePane.xml.

Ceci fournit seulement le support HTML5, ainsi si quelque chose n'est pas affichée comme vous l'attendiez, voyiez si une approche utilisant un simple HTML fonctionnera.

Identification

Trois parties:
Fabricant:
Valeur numérique depuis CV8, qui est adaptée à un nom en utilisant les entrées dans le fichier xml/decoderIndex.xml.
Version code:
Valeur numérique depuis CV7, qui est adaptée pour modéliser le nom (s) en utilisant les valeurs lowVersionID et highVersionID sur les éléments du modèle au sein de toutes les définitions de décodeur pour le fabricant spécifique. Ceci est un processus complexe qui n'aboutit pas toujours en raison des valeurs à dupliquer , etc..
Code Identification Produits:
à l'origine une valeur numérique lu à partir d'un CV ou CVs spécifique au fabricant; cela ne fonctionne que pour certains fabricants. Le processus de lecture est traité dans le code ( la classe jmri.jmrit.decoderdefn.IdentifyDecoder ) et doit être mis à jour chaque fois qu'un fabricant commence à fournir des valeurs dans un ou plusieurs nouveaux CV. Lorsque le code produit est présent, il devrait briser toute dégénérescence entre chevauchement des valeurs de CV7 dans une famille de décodeur.

L'aide a aussi été ajoutée pour trouver cette valeur en utilisant le ProtocoleLocoNet SV2 quelque fois au cours de la validation de la série JMRI 4.1. Voir les notes de release pour plus infos sur la progression.

Étant donné que le code produit fonctionne avec les opérations d'inclusion/exclusion décrites ci-dessous vous pouvez également l'utiliser dans les cas où il n'y a pas de CV ou CV qui en contiennent. Dans ce cas , aucune ID automatique n'est donnée, mais la valeur depuis le id_produit attribut du modèle sélectionné par l'utilisateur est utilisée pendant le traitement et l'extension de la définition du décodeur ultérieur. Les valeurs productId sont quelques fois utilisées pour pour éviter les conflits avec les valeurs numériques trouvées dans les CV.

Par exemple: <décodeurcoder> <Nom de famille="Mon Nom de Famille" mfg="NMRA"> <model model="Modèle A" lowVersionID="16" highVersionID="19" productID="400" /> </model> <model model="Modèle B" lowVersionID="21" highVersionID="22" productID="401" /> </model> </décodeur> Si l'utilisateur sélectionne manuellenment un décodeur modèle, cettte sélection définie les trois valeurs pour une utilisation lorsque la définition de décodeur est élargie pour la programmation (voir la section Définitions Conditionnelles de Décodeur ci-dessous).

Volet Considérations

Les volets du programmateur sont utilisées pour répartir et organiser les variables du décodeur dans des catégories nommées pratiques.

Volet de Remplacement

Les volets personnalisés sont habituellement ajoutés aux fichiers définition pour une des raisons suivantes:
  1. Les éléments à montrer ne sont dans aucunes des catégories définies par les noms standards des volets.
    • Dans ce cas le <name>se l'élément du volet doit être différent d'un nom standard existant..
    • Le nouveau volet personnalisé sera ajouté à la fin de la liste volet.
  2. La catégorie standard volet applicable n'a pas la disposition correcte ou le nombre de variables.
    • Dans ce cas l'élément volet <name> correspondra exactement à un élément standard volet <name> existant.
    • Le nouveau volet personnalisé remplace le panneau standard du même nom.

Volets Vides

Les volets vides sont définis comme ceux qui n'ont aucun éléments variables actifs à afficher pour le décodeur sélectionné. Ils peuvent encore contenir du texte..

Visibilité Volet

La visibilité volet est régit par un ensemble de règles complexes:

Bonne Pratique

Les utilisateurs expérimentés peuvent choisir de masquer des volets vides, mais Montrer Onglets Vides est activé par défaut ainsi les utilisateurs débutants ont besoin de savoir pourquoi les volets sont vides et où trouver les éléments qui ne sont pas sur les volets attendus

La meilleur pratique recommandée est:

Dans quelques cas, exemple: un décodeur accessoire pour servos où aucun des volets décodeur-locomotive n'a de sens, ainsi la définition du décodeur contient un nombre de panneau personnalisés, c'est une simplification de mettre un attribut showEmptyPanes="no" dans l'élément <decoder-config> de la définition XML et de masquer tous les panneaux vides par défaut.

Inclusion de Fragment de Fichier

Des parties communes des définitions de décodeur peuvent être placées dans des "fragments de fichiers", qui peuvent alors être inclus dans de multiples fichiers de définitions de décodeur. Ceci rend plus aisé la maintenance et l'actualisation de ces définitions communes, exemple: les traduire dans d'autres langues.

Par convention, nous avons ces fichiers fragmentés dans les sous-répertoires:

xml/decoders/nmra
Les définitions The NMRA pour les CVs, utilisé par beaucoup de décodeurs types
xml/decoders/(mfg)
Les variables spécifiques Constructeurs, par exemple xml/decoders/esu
Le format pour une inclusion est: <xi:include href="http://jmri.org/xml/decoders/nmra/shortAndLongAddress.xml"/> Le programme cherche ces fragments de fichier d'abord dans le répertoire <preferences>, puis dans le répertoire <programme>. Le chemin complet doit être présent, exemple vous avez besoin d'un répertoire xml qui contient un répertoire décodeurs dans votre répertoire <preferences> pour le fragment de fichier à trouver.

Utilisez un fichier existant comme un exemple pour pour les meilleurs éléments et & le format nécessaire.

Actualisations et Migration

Quelquefois, nous remplaçons une définition décodeur par une meilleure. La plus vieille est en service, mais nous aimerions déplacer les utilisateurs vers la nouvelle éventuellement. Il y a des attributs model-level qui peuvent être ajoutés à l'ancienne ( pas la nouvelle ) définition pour faciliter cette tâche: <model show="no" model="A4X" replacementModel="A4X" replacementFamily="Jan 2012"> Quand l'utilisateur sélectionne "Mise à Jour Définitions de Décodeur" depuis le menu Débogage de la fenêtre PanelPro ou le menu Action dans DecoderPro, toutes les entrées inventaire existantes qui utilisent la définition décodeur avec "replacementModel" et/ou "replacementFamily" définie seront mises à jour avec la définition décodeur de remplacement spécifiée. Cela permet au gens d'utiliser la vieille et confortable définition décodeur ( l'ancien fichier reste dans JMRI ) jusqu'à ce qu'ils décident d'avancer pour la nouvelle.

L'attribut de l'élément model "show" permet de garantir que les nouveaux utilisateurs démarrent avec la nouvelle définition. Ses valeurs possibles sont:

Pour créer une nouvelle définition complète pour un modèle existant:
  1. Décidez où vous voulez que le nouveau modèle soit défini. Il doit y avoir soit un nouveau nom de modèle, un nouveau nom de famille (nouveau fichier) ou les deux
  2. Créer votre définition.
  3. Ajouter les attributs "replacementModel" et "replacementFamily"pour la vieille définition.
  4. Généralement, définissez l'attribut "show" dans l'ancienne définition à «no». La seule exception à cette règle est lorsque certains utilisateurs voudront sélectionner encore l'ancienne définition pour un nouveau décodeur, peut-être parce que l'identification automatique peut indiquer l'usage de l'ancienne définition depuis de la nouvelle. ( Par exemple, vous allez partager l'ancienne définition en deux parties, car une nouvelle version locomotive existe )

Capacités de Programmation

Quelques décodeurs peuvent faire des opérations de programmation supplémentaires, par exemple en contournant les limitations de la programmation de CV dans la station de commande. Les éléments "Capability" sont utilisés pour indiquer ceux-ci à DecoderPro.

Accès aux CV d'adresses Hautes

Certaines centrales de commandes peuvent seulement accéder aux CV 256 ou CV 512. Quelques fabricants de décodeur ont construit des mécanismes pour contourner cela. Par exemple, quelques décodeurs ESU peuvent utiliser l'écritures sur divers CV pour accéder aux CV adresse CV. Pour dire à DecoderPro qu'un décodeur peut faire cela, utilisez un élément comme: <capability> <name>High Access via Double Index</name> <parameter name="Adresse CV Max ">256</parameter> <parameter name="CV Adresse Haute ">96</parameter> <parameter name="CV Adresse basse">97</parameter> <parameter name="CV Accès Registre">99</parameter> <parameter name="Modulo">100</parameter> </capability>

Les paramètres doivent apparaître dans l'ordre montré. Ils signifient:

Par exemple, pour écrire 21 dans le CV 614 avec les valeurs montrées, DecoderPro écrira:

Pour un exemple d'où placer cette élément "capability" dans le fichier, etc,... voir le fichier xml/decoders/ESU_LokSoundV4_0.xml .

Autre approche utilisée par exemple par Zimo, est de fournir un moyen d'accès à la page. par exemple, pour écrire 21 dans le CV614 avec un de ceux-ci, vous devez écrire:

Cet élément "capability" va faire: <capability> <name>High Access via Partial Index</name> <parameter name="CV Adresse Max ">100</parameter> <parameter name="CV Adresse Haute">7</parameter> <parameter name="Multiplicateur Adresse Haute">10</parameter> <parameter name="Modulo">100</parameter> </capability> Notez que "name" a une valeur différente. C'est ce qui sélectionne l'algorithme nécessaire ici.

Les paramètres doivent apparaître dans l'ordre montré. Ils signifient:

Une autre approche utilisé, exemple: Zimo utilise une page registre qui sera effacée ensuite. Par exemple, pour écrire 21 dans CV614 avec une de celles-ci vous devez:

Cet élément "capability" fera ceci wi: <capability> <name>High Access via Partial Index with Reset</name> <parameter name="CV Adresse Max ">100</parameter> <parameter name="CV Adresse Haute">7</parameter> <parameter name="Multiplicateur Adresse Haute">10</parameter> <parameter name="Modulo">100</parameter> <parameter name="Indicateur">200</parameter> </capability>

Les paramètres doivent apparaître dans l'ordre montré. Ils signifient:

Décodeur Accessoire Mode Ops( Exploitaion )

Les paquets spéciaux de programmation sont utilisés par certains décodeurs accessoires pour configurer leur CVs depuis le signal DCC de la voie. La <capability> à faire ceci est écrite: <capability> <name>Ops Mode Accessory Programming</name> </capability> Il n'y a pas de paramètres. Notez que ceci fonctionne seulement pour l'écriture en mode Ops; ces paquets NMRA DCC particuliers ne remplissent pas les opérations de lecture, ils ne travaillent pas en mode service (voie de programmation).

Accès CV Indexé

Pour accéder à des CV indexés, inclure cet élément de <capability>:: <capability> <name>Indexed CV access</name> <parameter name="PI">31</parameter> <parameter name="SI">32</parameter> <parameter name="cvFirst">false</parameter> </capability> Si cvFirst est true (vrai), le format est CV.PI ou CV.PI.SI comme utilisé par QSI. S'il est false (faux), le format est PI.CV ou PI.SI.CV comme utilisé par ESU.

Si à la fois ceci et les capacités "accès à CV haut" sont présents, celui-ci devrait être énuméré en deuxième.

Pour un exemple de l'endroit où le positionner etc., voir le fichier xml/decoders/ESU_LokSoundV4_0.xml.

Accès Décodeur TCS WOW

Les Décodeurs TCS WOW utilisent utiliser plusieurs méthodes uniques (pour le moins) d'accès aux CV.. JMRI les reçoit par l'intermédiaire d'un élément de capacité spéciale: <capability> <name>TCS 4 CV access</name> </capability> Ceci fournit deux formats personnalisés de CV: Par exemples sur comment l'utiliser, voir la définition décodeur TCS WOW .

Partage de Variables - "Adresses longues sur 2 CVs

Quelques décodeurs, principalement des décodeurs accessoires, utilisent des adresses "longues" qui sont réparties sur 2 CVs, contigus ou non.

CV1 et CV9 sont standardisés par le NMRA pour les adresses primaires des décodeurs d'accessoires, voir NMRA standard 9.2.2.

Les adresses longues peuvent être accessible par le type "splitVal", comme dans les exemples suivants:

<variable CV="1" item="Accessory Address" default="1" minOut="1"> <splitVal highCV="9" upperMask="XXXXXVVV"/> <label>Accessory Address</label> </variable>

Le premier CV déclaré est le LSB (l'octet le moins significatif) tandis que dans le"CV HautV" se trouve le MSB (l'octet le plus significatif).

splitVal actuellement a deux paramètres, un "Factor" et un "Offset":

<splitVal highCV="9" factor="4" offset="-3"/>

Pour exemple, voir le fichier xml/decoders/SPROG_DCC_Servo6.xml .

Pour les détails et les fonctionnalités avancées , voir cette page JavaDoc page

Définitions Conditionnelles de Décodeur

Pour réduire le nombre de fichiers de définition décodeur nécessaires, chaque fichier peut contenir les définitions pour de multiples modèles de décodeur. JMRI fournit les moyens d'adaptation de la définition à des modèles spécifiques à la fois quand le fichier est initialement développé pour une utilisation, et plus tard tandis que le programme travaille sur la définition. Il y a des utilisations particulières utilisant des fragment de fichiers communs qui peuvent être inclus par de multiple fichiers de définition de décodeur (définition différente-mais-familles similaires)

Inclure/Exclure lors de l'Expansion de la Variable

Un élément "variable" développé et utilisé peut être rendu conditionnel au décodeur type utilisant les attributs "include" et "exclude" dans les éléments <variables> et <variable>.

Une définition de variable ne peut pas être développée et utilisée:

Ces deux conditions doivent être vrai, et il est possible d'utiliser à la fois inclure et exclure sur le même élément, mais il est plus habituel d'en utiliser qu'un.

Exemple:

      <variable label="My Variable" CV="72" include="ModelA,400">
        <decVal/>
      </variable>

La variable ci-dessus apparaît seulement lors du développement de la définition pour le ModelA ou le product ID 400.

Vous pouvez aussi mettre des attributs inclure et exclure sur des choix individuels dans une variable de type énumération. Ceci peut être utilisé par exemple pour inclure des options spécifiques d'éclairage dans certaines familles de décodeur.

Les attributs sur un élément <variable> agissent sur tous les éléments <variable> en son sein, ainsi que tous les attributs include ou exclude sur les variables individuelles.

Inclure/Exclure Pendant la Création d'un Volet

si un volet (ou partie d'un volet) est créé il peut être rendu conditionnel sur le type de décodeur en utilisant les attributs "include" et "exclude" sur le <pane> et les éléments <group>.

Un volet ne peut pas être créé

Ces deux conditions doivent être vrai, et il est possible d'utiliser à la fois inclure et exclure sur le même élément, mais il est plus habituel d'en utiliser qu'un.

Exemple:

      <pane label="My Pane" include="ModelA,400">
        ...
      </pane>

"My Pane" sera créé seulement lors du développement de la définition décodeur pour le ModelA ou l'ID produit 400.

Vous pouvez aussi créer un élément <group> avec les attributs inclus et exclus. Les éléments au sein du <group> seront créer seulement si les conditions <group> sont respectées. Ceci peut être utilisé par exemple pour afficher des étiquettes texte spécifiques pour certains modèles de décodeurs.

Exemple:

      <group include="ModelA,400">
        <label>
          <text>Ces décodeurs sont très vieux.</text>
        </label>
        <label>
          <text>Quelques fonctions sont indisponibles.</text>
        </label>
      </group>

Le texte sera créer seulement lors du développement de la définition décodeur pour le ModelA ou le produit ID 400.

Qualification de Temps d'exécution de Variables

Qualification des variables
Un éléments "qualifier" sur un élément variable pour permettre d'activer ou désactiver la variable dépendant des valeurs actuelles d'une autre variable. Ceci peut être utile si, par exemple, le décodeur a un CV "mode" qui détermine la signification des autres CVs.

Si une variable est qualifiée d'inactive, elle ne doit pas apparaître dans aucun volet et ni lue ou écrite dans le décodeur quand vous faites les opérations de lecture ou d'écriture "All" ou "Changes only". La valeur est sauvée dans l'inventaire et sera rechargée quand l'entrée inventaire sera réouverte plus tard.

Dans l'exemple suivant, un CV est interprêté comme deux variables différentes selon que le décodeur est réglé pour un adressage court ou long.

  <variable label="Variable for Short Address" CV="11">
    <qualifier>
      <variableref>Address Format</variableref>
      <relation>eq</relation>
      <value>0</value>
    </qualifier>
    <decVal/>
  </variable>
  <variable label="Variable for Long Address" CV="11">
    <qualifier>
      <variableref>Address Format</variableref>
      <relation>eq</relation>
      <value>1</value>
    </qualifier>
    <decVal/>
  </variable>
D'autres opérateurs disponibles incluent "gt", "ge", "ne", "lt", "le" and "exists". L'opérateur "exists" vérifie si une variable est définie ou pas; une valeur "1" signifie qu'elle l'est, et un "0" signifie qu'elle ne l'est pas.

Si de multiple élément "qualifier" sont présent, tout doit être vrai pour que la variable soit active et affichée.

Qualification des Volets
Un élément "qualifier" sur un élément volet vous permet d'activer ou de désactiver le volet dépendant de la valeur actuelle d'une variable.

Si un volet est qualifié d'inactif, ses contenus ne seront plus affichés. Ceci inclus tous les labels ou autres décorations sur le volet, en plus de toutes les variables qu'il contient. Dépendant d'autres options,le volet peut soit être montré vide ou pas montré du tout. Pourtant, Les variables en son sein sont toujours actives, et un "Lire toutes les feuilles" ou "Écrire toutes les feuilles" les écriront toujours. Si vous avez des définitions de variables qui se chevauchent, examiner attentivement si cela est ce que vous voulez. Vous pourriez avoir besoin de qualifier les variables qui se chevauchent individuellements.

L'exemple suivant active un des deux volets dépendant du décodeur selon qu'il est actuellement fixé à un adressage court ou à long .

  <pane name="Courte Seulement">
    <qualifier>
      <variableref>Address Format</variableref>
      <relation>eq</relation>
      <value>0</value>
    </qualifier>
    <column><row>
      <label label="Volet Courte Seulement"/>
    </row></column>
  </pane>
  <pane name="Longue Seulemnt">
    <qualifier>
      <variableref>Address Format</variableref>
      <relation>eq</relation>
      <value>1</value>
    </qualifier>
    <column><row>
      <label label="Volet Longue Seulement"/>
    </row></column>
  </pane>
Autre opérateur incluant disponible "gt", "ge", "ne", "lt" et "le".

Si de multiple éléments "qualifier" sont présent, tous doivent être vrais pour que le volet soit actif et affiché.

Qualification des Éléments sur un Volet
Un élément "qualifier" sur un élément "label", "soundlabel", "row", "column", "grid" or "griditem" vous permet d'activer ou désactiver l'affichage de cet élément sur un volet spécifique.

L'exemple suivant affiche un message d'avertissement si une variable version-number a une valeur trop faible:

    <label label="Version number too low!">
      <qualifier>
        <variableref>Version Number</variableref>
        <relation>lt</relation>
        <value>3</value>
      </qualifier>
    </label>

Vous pouvez utiliser le même "qualifier" pour de multiple éléments en enfermant les éléments dans un élément "group" et en ajoutant le "qualifier" à l'élément "group":

    <group>
      <qualifier>
        <variableref>Version Number</variableref>
        <relation>lt</relation>
        <value>3</value>
      </qualifier>
      <label label="Version number too low!"/>
      <label label=" "/>
      <label label="Please update."/>
    </group>

Une fois que vous avez lu le "Version Number" (variable ou CV) depuis le décodeur Le label s'affichera si ce version-number est trop faible. Notez qu'initialement avant que les valeurs soient lues depuis le décodeur, cet affichage dépendra de la valeur par défaut depuis le fichier qui pourrait induire en erreur l'utilisateur.