JMRI: DecoderPro User Guide - Advanced Decoder Definitions

# 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.

- JMRI fournit un jeu standard de volets, défini par les éléments <pane> inclus dans les éléments <programmer> de chacun des fichiers des Programmateur standard (Basique, Complet, Avancé etc.) dans le dossier xml/programmers/.
- Les fichiers définition Décodeur peuvent contenir des volets personnalisés pour des décodeurs particuliers ou des familles de décodeurs, définis par les éléments <pane> inclus dans l'élément (Haut-niveau) <decoder-config> du fichier décodeur.
- Les noms de volets sont spécifiés par un élément <name> en haut de chaque élement <pane>.

#### 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:

- Indépendamment de toutes les autres règles, un volet ne sera pas affiché s'il échoue à "inclure" ou "exclure" des attributs dans son élément <pane>.
- La visibilité d'un volet vide est contrôlée par ce qui suit, par ordre de priorité croissante:
  - les Préférences->Inventaire->programmateur->Montre des Onglets de réglages Vides.
  - Si présent, un attribut showEmptyPanes dans le fichier programmateur actuel XML.
  - Si présent, un attribut showEmptyPanes dans le fichier definition décodeur XML.
- Le fait qu'un volet vide spécifique (tel que défini dans Volets vides ci-dessus) indique également dépend du type de volet :
  - Si le volet vide est un volet standard ( comme défini dans Considérations Volet ci- dessus ) il ne se montrera que si showEmptyPanes est en vigueur. Cependant, son contenu usuel sera remplacé par un message générique expliquant que le volet est inutilisé puisque ses contenus sont inapplicables ou apparaissent dans un autre volet.
  - Si le volet vide est un volet de remplacement (comme défini dans l'élément de Volet de Remplacement ci-dessus ), il ne se montrerera que si showEmptyPanes est en vigueur.
  - Si le volet vide est est un volet personnalisé ( comme défini dans l'élément A de Volet de Remplacement ci-dessus ), il sera toujours montré, indépendamment du fait que showEmptyPanes soit en vigueur.

#### 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:

- Où c'est possible, les éléments doivent utiliser les volet standard existant
- Où un volet particulier standard existant ne convient pas en termes de nombre d'éléments ou de mise en page :
  - Créez un volet de remplacement avec le même nom que le panneau standard existant.
  - Par exemples, voir les volets Avancés et Sons du décodeur des ESU_LokSoundV4_0 .
- Si un volet standard existant ne convient pas en termes de conception:
  - Créez un ou plusieurs nouveaux volets personnalisés avec un des noms descriptifs uniques.
  - Créez des volets de remplacements d'information seulement ( pas d'affichage d'éléments, rien que du texte ) avec les mêmes noms que les volets standards existants non-utilisés. Utilisez ces volets pour expliquer pourquoi chaque volet est inutilisé et/ou trouver les informations qu'un utilisateur peut raisonnablement espérer trouver sur ces volets. Utilisez un formatage HTML pour améliorer l'affichage de ces panneaux explicatifs.
  - Par exemples, voir les volets de Niveaux Lumière et Sons de la définition du décodeur ESU_LokSoundV4_0 .
- Les volets personnalisés d'Information seront toujours affichés.

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:

- "yes" (par défaut) - le comportement traditionnel, montre toujours ce modèle et la famille qu'il contient
- "no" - ne jamais montrer ce modèle, même s'il correspond à une sélection possible. Utilisé pour les anciennes (vieilles) définitions qui ont été remplacées par des nouvelles.
- "maybe" - afficher uniquement si elle correspond à une (possible) identification automatique.

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:

- "CV Adresse Max" - Les adresses CV égale ou inférieure n'utilisent pas ce mécanisme. ( Le mécanisme ne sera pas utilisée si la centrale de commande peut directement lire/écrire le CV demandé, mais même si elle ne peut pas, ce mécanisme ne sera pas utilisé en dessous de cette valeur )
- "CV Adresse Haute" - La partie haute ( voir Modulo ) de l'adresse CV est écrite ici au début de l'opération
- "CV Adresse basse" -La partie basse (voir Modulo) de l'adresse de CV est écrite ici en 2ème partie de l'opération.
- "CV Accès Registre" - après que les valeurs d'adresse sont définies, ceci est le CV qui est lu ou écrit pour lire ou régler le CV réel désiré.
- "Modulo" - valeur utilisée pour partager l'adresse réelle des CVs entre l'adresse haute et basse.

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

- 6 =(614/100) dans le CV 96 pour la partie haute de l'adresse
- 14 = (614 mod 100) dans le CV 97 pour la partie basse de l'adresse
- 21 dans CV 99 pour écrire dans le CV actuel

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:

- 60 =(614/100)*10 dans le CV 7 pour la partie haute de l'adresse
- 21 dans le CV 14 (614 mod 100) pour écrire dans le CV actuel

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:

- "CV Adresse Max" - Les adresses CV égale ou inférieure n'utilisent pas ce mécanisme. ( Le mécanisme ne sera pas utilisée si la centrale de commande peut directement lire/écrire le CV demandé, mais même si elle ne peut pas, ce mécanisme ne sera pas utilisé en dessous de cette valeur )
- "CV Adresse Haute" - La partie haute ( voir Modulo ) de l'adresse CV est écrite ici au début de l'opération
- "Multiplicateur Adresse Haute" - Ceci multiplie la partie haute de l'adresse du CV avant qu'il soit stocké dans l'Adresse Haute du CV. Par exemple, mettre un 10 ici stockera la partie haute de l'adresse dans le "10ieme digit" de l'Adresse Haute du CV.
- "Modulo" - valeur utilisée pour partager l'adresse réelle des CVs entre l'adresse haute et basse.

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:

- Écrire 260 =(614/100)*10+200 dans CV 7 pour la partie haute de l'adresse Le"200" est un indicateur pour utiliser ce mode.
- Écrire 21 dans CV 14 (614 mod 100) pour écrire dans le CV actuel
- Écrire 0 dans CV7 pour réinitialiser l'indexage.

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:

- "CV Adresse Max" -Les adresses CV égale ou inférieure n'utilisent pas ce mécanisme. ( Le mécanisme ne sera pas utilisée si la centrale de commande peut directement lire/écrire le CV demandé, mais même si elle ne peut pas, ce mécanisme ne sera pas utilisé en dessous de cette valeur )
- "CV Adresse Haute" - La partie haute (voir Modulo) de l'adresse CV est écrite ici au début de l'opération
- "Multiplicateur Adresse Haute" - Ceci multiplie la partie haute de l'adresse CV avant quelle soit stockée dans le cv Adresse Haute. Par exemple, mettre un 10 ici stockera la partie haute de l'adresse le "10ieme digit" de l'Adresse Haute du CV.
- "Modulo" - valeur utilisée pour partager l'adresse réelle des CVs entre l'adresse haute et basse. CVs.
- "Indicateur" - valeur ajoutée à la valeur stockée dans le CV Adresse Haute pour dire au décodeur d'utiliser ce mode.

#### 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:

- T2CV.11.12 Écrit 11 dans le premier CV index (201), 12 dans le second CV index(202), puis lit/écrit/confirme les opérations sur les CV 203 et 204
- T3CV.11.12.13 Écrit 11 ans le premier CV index (201), la donnée dans le second CV index (202), puis écrit 12 dans le CV 203 et 13 dans le CV204.

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":

- Valeur à mettre dans les CVs = ((valeur dans le champ texte) - Offset)/Factor
- Valeur à mettre dans le champ texte = ((valeur dans les CVs) * Factor) + 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:

- Si un attribut "exclude" est présent, ni si l'ID produit décodeurs, nom de modèle, nom de famille est trouvé dans la liste exclure.
- Si un attribut "include" est présent, au moins l'une des ID produit décodeurs, le nom du modèle, ou le nom de famille se trouve dans la liste d'inclusion.

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éé

- Si un attribut "exclude" est présent, ni si l'ID produit décodeurs, nom de modèle, nom de famille est trouvé dans la liste exclure.
- Si un attribut "include" est présent, au moins l'une des ID produit décodeurs, le nom du modèle, ou le nom de famille se trouve dans la liste d'inclusion.

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.