Script XML

Introduction

Le script XML peut être utilisé en combinaison avec l'action de run ext. program .
Son objectif principal est de simplifier et de réduire le nombre d'action et de conditions.
Le script XML utilisé est le même que celui utilisé dans Rocrail plan.xml.


Exigences

  • UTF-8 Editor, par exemple Notepad++ ou Gedit. (L'éditeur Notepad de windows n'est pas pris en charge.)
  • Quelques connaissances en programmation XML.


Recommandation

  • Faire des XmlScripts court et sans aller en longueur et sans longues boucles; Cela bloquera l'objet appelant du traitement des événements et des commandes s'il n'est pas défini comme Asynchrone.
  • N'essayez pas de surpasser le mode automatique; Publiez une demande de fonctionnalité dans le forum si quelque chose de basique manque.
  • Les ID d'objet avec des espaces ne sont pas pris en charge; utilisez plutôt des caractères de soulignement.


Paramètrage

Les espaces dans le chemin d'accès ou le non de fichier ne sont pas autorisés!

  1. Créez un Script Xml et enregistrez_le dans un fichier. (voir: Exemple simple)
  2. Créez un programme action “run ext.” .
  3. Sélectionnez le fichier Script Xml . (Si le fichier Script se trouve dans le répertoire de l'espace travail, un chemin n'est pas nécessaire.)
  4. Prêt à employer cette action sur n'importe quel objet Rocrail.


Exemple simple

Mettre le réseau sous tension et démarrer le mode auomatique :

<xmlscript>
  <sys cmd="go"/>
  <auto cmd="on"/>
</xmlscript>


Edition sur le Serveur

Pour créer et modifier les Scripts Xml sur le serveur, la boite de dialogue d'action peut être utilisée:

Ouvre l'éditeur. L'analyseur a détecté une erreur après validation ou enregistrer.

Si le Script Xml n'existe pas déjà sur le serveur, une ossature script Xml sera créé:

<?xml version="1.0" encoding="UTF-8"?>
<xmlscript>
 
</xmlscript>
L'éditeur de Script Xml peut également être ouvert en double-cliquant sur l'index.


Si le ”<Script Xml>” est modifié avec la description ”<desc=“xxx”>” (par exemple, nom du Script ), la description sera affichée dans l'emplacement. Par exemple.

<?xml version="1.0" encoding="UTF-8"?>
<xmlscript desc="My_Script.xml">
 
</xmlscript>

Validation

Vérifiez si le code Xml est “bien formé”. 1)

Insertion


Insérez l'instruction ou la commande sélectionnée en position de curseur.
Le [\n] de la boite de dialogue contrôle les flux de lignes avant et après l'instruction.


macOS

:!: Pour utiliser cet éditeur, l'option “Utilisez les guillemets et les tirets” doit être désactivée pour éviter de créer un Xml invalide:

Préférence du système → Language & Région → Préférence Clavier → Texte

Avec cette option activée par défaut, elle convertit automatiquemen les deux tirets (--), utilisés en commentaires Xml, dans les signes (—), les guillemets rectilignes et caractères typographiques de type (“curly”). .
Cela rendra le Script Xml non valide.


Instructions

foreach

La boucle foreach est utilisée pour “faire ceci à tout dans cette table” avec une condition optionnel d'état Et/Ou.
La boucle peut être arrêtée avec une déclaration de pause ou de sortie.
Si la condition d'état Et/Ou ne correspond pas, il passe à l'objet suivant dans ce tableau.

<xmlscript>
  <foreach table="lclist" condition="#var2%oid% < &time|#var1 < &time" alltrue="true">
    <fn fnchanged="3" f3="true"/>
    <vr id="var2%oid%" text="empty"/>
    <vr id="var2%oid%" value="0"/>
    <lc cmd="go"/>
    <sleep time="10"/>
  </foreach>
</xmlscript>

Ce Script itérait la table locomotive et allumera la fonction 3 et donnera la commande Go pour chaque locomotive.
L'oid, l'ID de l'objet actuel dans la liste, est automatiquement généré dans la boucle.
dans le cas ou le tableau est lclist, l'ID courte peut également être utilisée: %soid%”.2)

<xmlscript>
  <foreach table="lclist" condition="%lcclass% # BA">
    <lc cmd="go"/>
  </foreach>
</xmlscript>

Cette “foreach” démarre chaque locomotive avec la classe BA.

<xmlscript>
<foreach table="lclist" state="co Test = on">
    <if state="lc %oid% = Block3|lc %oid% = Block2|lc %oid% = Block1" alltrue="false">
    <then>
     <lc cmd="go"/>
    </then>
   </if>
</foreach>
</xmlscript>

Démarrer chaque locomotive qui réside dans le 'Bloc3', 'Bloc2' ou 'Bloc1'.


while

L'instruction while est une boucle et peut vérifier, le statut et la classe. Au moins l'un d'entre eux devrait être défini, sinon la boucle while ne sera pas exécutée.
Tant que l'instruction est vraie, les commandes dans while seront exécutées.

<xmlscript>
  <vr id="var1" value="0"/>
  <while condition="#var1 < 10" max="10">
    <vr id="var1" value="#var1 + 1"/>
    <continue condition="#var1 = 4" cmt="var1 is 4"/>
    <sys cmd="go"/>
  </while>
</xmlscript>

Si la boucle while est sans fin, elle sera arrêtée par l'attribut max qui de par défaut de 100.


if

L'instruction if est utilisée pour le contrôle du flux et peut vérifier la condition, les états et la classe.
Si la déclaration est vraie, les commandes seront alors (then) exécutées, Sinon (else) ce n'est pas vrai, les autres commandes seront exécutées.
Le else est optionel.

<xmlscript>
  <if condition="#var1 < &time" state="sg sem3 = green" class="bk 4711 = AB" alltrue="true">
    <then>
      <lc id="@loco" cmd="go"/>
      <tx id="booster1" format="var1 is #var1"/>
    </then>
    <else>
      <lc id="@loco" cmd="stop"/>  
      <lc id="@loco" cmd="classset" class="AB"/>  
      <bk id="4711" cmd="classdel" class="AB"/>  
      <bk id="4711" cmd="classadd" class="CD"/>  
    </else>
  </if>
</xmlscript>

La valeur de la variable texte de la loco contient l'ID de la locomotive.
Si l'ID de la locomotive n'existe pas, un bloc sera recherché par cette identification et, s'il existe l'identification de la locomotive dans le bloc sera utilisé.
Lacondition et l' état peuvent être utilisés dans l'instruction if . Au moins une d'entre elles doit être spécifiée.

<xmlscript>
  <if state="st b1-b2 = locked|st b2-b3 = locked" alltrue="false">
    <then>
      <tx id="tx1" format="route is locked"/>
    </then>
    <else>
      <tx id="tx1" format="route not locked"/>
    </else>
  </if>
</xmlscript>

Le texte tx1 est défini sur “Itinéraire est verrouillé ” si l'itinéraire “b1-b2OU l'itinéraire “b2-b3” est en état verrouillé.
Si ces itinéraires ne sont pas verrouillés, le texte tx1 est défini “Itinéraire non verrouille”.


switch

La valeur entière de Switch var est utilisée pour sélectionner la “case” avec la même valeur.
Si aucune correspondance n'a été trouvée, la valeur par défaut sera utilisée au cas où elle serait définie.

Exemple avec des nombres

<xmlscript>
  <switch var="#var1">
    <case val="0">
      <sys cmd="go"/>
    </case>
    <case val="1">
      <auto cmd="on"/>
    </case>
    <default>
      <sys cmd="stop"/>
    </default>
  </switch>
</xmlscript>

Exemple avec chaîne de caractères

<xmlscript>
  <switch var="%callerid%">
    <case val="loco1">
      <sys cmd="go"/>
    </case>
    <case val="but1">
      <sys cmd="reset"/>
    </case>
  </switch>
</xmlscript>

Note: Une déclaration “switch” n'a rien à voire avec l'objet-switch Rocrail .


call

Les fonctions doivent être déclarées dans le premier niveau de Sript Xml et doivent avoir défini l'ID.
Appelez la fonction avec l'ID souhaité: <call id=“doeIets”/>
Plusieurs fonctions sont autorisées.

<xmlscript>
  <function id="doeIets">
    <tx id="tx1" format="function doeIets"/>
  </function>
 
  <switch var="#var1">
    <case val="0">
      <sys cmd="go"/>
    </case>
    <default>
      <sys cmd="stop"/>
      <call id="doeIets"/>
    </default>
  </switch>
</xmlscript>

Restrictions

  • Dans une fonction “Call” n'est pas pris en charge.


exit

Quitez le Script Xml. Le cmt=“reason” peut être utilisé pour le traçage

<xmlscript>
  <if condition="">
    <then>
      <exit cmt="Test."/>
   </then>
  </if>
</xmlscript>


break

Termine une boucle “foreach” avec ou sans condition. Le cmt=“reason” peut être utilisé pour le traçage.
Cette déclaration n'a aucun effet si elle n'est pas dans une boucle “foreach”.

<xmlscript>
  <foreach table="lclist">
    <if condition="">
      <then>
        <break cmt="Test."/>
     </then>
    </if>
  </foreach>
</xmlscript>


trace

Les traces Script Xml seront de couleur verte dans Rocview.

<xmlscript>
  <trace text="Hi there! I'm %callerid%. :)"/>
</xmlscript>


sleep

Un temps de sommeil en ms.

<xmlscript>
  <foreach table="lclist">
    <if condition="">
      <then>
        <sleep time="100"/>
     </then>
    </if>
  </foreach>
</xmlscript>


sub

Appelez un autre Script Xml avec un file=“script.xml” et la fonction id=“functionName”

<xmlscript>
  <sub file="lib1.xml" id="doeIets"/>
</xmlscript>

Si l'ID de la fonction est définie au caractère de soulignement id=“_”, l'intégralité du Script Xlm sera exécuté à l'exclusion des définitions de fonction.3)
Si aucune ID de fonction n'est définie %oid% sera utilisé pour trouver une fonction d'ajustement.

Exemple librairie lib1.xml:

<xmlscript>
  <function id="doeIets">
    <sys cmd="stop"/>
  </function>
</xmlscript>

L'ID de fonction doit être utilisé pour appeler des fonctions à partir d'un fichier de bibliothèque Script Xml.
Le plus utile si plus d'un Script Xlm partage des fonctions communes.

query

Avec l'instruction query, une variable peut être utilisée pour obtenir le texte de l'attribut et la valeur entière d'un certain objet.

  <query vr="var1" table="waybilllist" id="%oid%" get="cartype"/>

Aprés la requête, la variable peut être utilisée pour comparer le texte et/ou les chiffres. Le texte normal aura un résultat de valeur nulle.

Pour obtenir une valeur à partir d'un “sous-nœud”:

  <query vr="var1" table="sclist" id="%oid%" sub="scentry" subidx="3" get="text"/>

Au lieu de subidx, le subid peut également être utilisé si le “sous-nœud” a une ID.

set

Avec l'instruction”set”, une variable peut être utilisée pour définir le texte d'attribut ou la valeur entière d'un certain objet.

  <set vr="var1" table="waybilllist" id="%oid%" set="cartype" setint="false"/>


Pour définir une valeur d'un”sous-nœud”:

  <set vr="var1" table="sclist" id="%oid%" sub="scentry" subidx="3" set="text" setint="false"/>

Au lieu de subidx, le subid peut être utilisé si le sous-nœud a une ID.

Condition format

valeur comparateur valeur

Les conditions supplémentaires doivent être séparées avec un caractère spécifique “|” sans blanc supplémentaire:

condition="#var2%oid% < &time|#var1 < &time"

Voir les variables : Variables texte (EN)

Variables Système
&time modèle de temps en secondes


Comparateurs
= nombre égal
! nombre inégal
# texte égal
> plus grand que le nombre
< plus petit que le nombre

alltrue

alltrue est vrai par défaut s'il n'est pas défini.
Si alltrue est mis à “faux”, seule une des conditions doit être vraie .

Format Etat/Classe

Type d'objet ID d'object sans blancs Comparateur Valeur Etat/Classe

Les valeurs doivent être séparées par des blancs.
Les états supplémentaires doivent être séparés avec un caractère de type |sans blanc supplémentaire:

state="st b1-b2 = locked|st b2-b3 ! locked"

:!: Les ID d'objet avec des espaces ne sont pas pris en charge; Utilisez plutôt des caractères de soulignement ou des points.

Comparateurs
= Etat égal
! Etat inégal


Etat Objets

Nom de l'objet Type d'objet Valeur d'état Remarques
Signal sg red, green, yellow, white, blank, aspect number
Switch sw left, right, straight, turnout, locked, free, unlocked
Sensor fb true, false, on, off true (vrai) = on, false (faux) = off
Output co on, off, active
Block bk free, occupied, closed, open, reserved
Route st free, locked, unlocked, closed
System sys go, stop
Automode auto on, off
Locomotive lc fwd, rev, +, -, min, mid, cruise, max, block, ”blockID”, steam, diesel, electric, automobile, idle, wait, auto, f0…f28 bloc est vrai sila loco est dans un bloc
blockID” est vrai si la loco est dans un bloc ”blockID
Car car empty, loaded, maintenance, cartype, waybill, ”blockID voir locomotive
Waybill waybill waiting, shipping, delivered, ”destinationID”, ”originID

Classe Objets

Nom de l'objet Type d'Objet
Block bk
Loco lc
Route st


Commandes

Note:

  • Avec”Commands All” toutesles commandes d'objets spécifiées sont prises en charge dans Rocrail plan.xml
  • Les commandes spéciales d'action sont répertoriées séparément.


Nom de l'objet Type d'objet Commandes Etats Remarques Exemple
Loco lc All http://rocrail.net/software/rocrail-snapshot/rocrail/wrapper-en.html#lc l'attribut “bkid” peut être utilisé pour obtenir un ID de locomotive dans un bloc.
La commande "regularreset" est identique à "softreset" mais supprime également le calendrier assigné.
Function fn All and fndesc, fncmd La description de fonction “fnchanged” ou le “fndesc”, attribut les signaux dont la fonction a été modifiée: f0…f28 (true (vrai)/false(faux)).
Le “fncmd” peut être utilisé pour on/off/flip.
<fn id="loco1" fndesc="Horn" fncmd="flip"/>
Switch sw All
Signal sg All
Accessory Group accgroup on, off, flip
Output co All
Power powercmd on, off L'“id” est le “boosterID”. Si laissé vide la est pour tous les boosters
Block bk All, reserve open, closed Utilisez “lcid” en cas de commande “reserve”. <bk id="x" state="closed"/>
Sensor fb All, on, off, flip
Route st go, lock, free, classset, classadd, classdel open, closed La commande verrouillage et déverrouillage nécessite l'attribut supplémentaire locid=“myLoco”. <st id="x" state="closed"/>
Text tx showon, showoff Evénement de mise à jour de l'attribut format.
L'option bkid et lcid peuvent être utilisés dans la commande également.
<tx id="tx1" format="the loco id is %lcid%"/>
Variable vr random, start, stop
start, length (for substring)
Valeur de l'attribut: valeur=“0” texte=“zero” <vr id="var1" text="Rocrail"/>
<vr id="var2" text="@var1-XML-Scripting." tokeniser="-"/>
<vr id="var2" text="@var1" start="1" length="3"/>
Action control actionctrl l'“id” dans l'“actionctrl” est une référence à une action existante. Condition, ajoutez des “nœuds-enfants”.
Operator operator emptycar, loadcar, addcar, leavecar Dans l'attribut “carids” une liste de viture doit être spécifiée .
System sys All http://rocrail.net/software/rocrail-snapshot/rocrail/wrapper-fr.html#sys
Automat auto All http://rocrail.net/software/rocrail-snapshot/rocrail/wrapper-fr.html#auto
Car car empty, loaded, maintenance, assignwaybill, resetwaybill, loco & function empty, loaded, maintenance, cartype, location <car id="test" cmd="assignwaybill" waybill="testbill"/>
Staging block sb All http://rocrail.net/software/rocrail-snapshot/rocrail/wrapper-fr.html#sb
Fiddle Yard seltab All http://rocrail.net/software/rocrail-snapshot/rocrail/wrapper-fr.html#seltab
Location location All http://rocrail.net/software/rocrail-snapshot/rocrail/wrapper-fr.html#location <location id="Blaak" cmd="info" svalue="tx1"/>
Clock clock All http://rocrail.net/software/rocrail-snapshot/rocrail/wrapper-fr.html#clock
Turntable tt All http://rocrail.net/software/rocrail-snapshot/rocrail/wrapper-fr.html#tt
External ext All http://rocrail.net/software/rocrail-snapshot/rocrail/wrapper-fr.html#ext

Valeurs d'attribut

Si une valeur d'attribut de commande commence par un point d'interrogation, elle sera remplacée par la valeur d'attribut de l'objet référencé.
Exemple:

  <lc id="loco1" cmd="useschedule" scheduleid="?startupscid"/>

la valeur "?startupscid" sera remplacée par startupscid de loco1:

20160422.085709.015 r9999I tid0x8BA OXmlScri 0571 execute [lc] id[loco1] cmd[useschedule] oid[] callerid[wefiu]
20160422.085709.016 r9999I tid0x8BA OXmlScri 0521 replaced attribute value: scheduleid="?startupscid" with "1-2"
20160422.085709.017 r9999a tid0x8BA OLoc     3644 <lc id="loco1" cmd="useschedule" scheduleid="1-2"/>


ID d'objet

L'ID d'objet peut contenir des variables.
Voir les variables possibles: Variables texte (EN)

Exemple

<xmlscript>
  <tx id="%callerid%-%substate%" format="%lcimg%"/>
</xmlscript>


Conseils

Bien mettre en forme XML

Pour vérifier si le Script Xml est bien mise en forme, il peut être ouvert dans un navigateur Web .
Certains caractères doivent être “escaped (remplacés)”:

Caractères Escaped
< &lt;
& &amp;
> &gt;

Exemple

Ce n'est pas bien mis en forme, mais accepté par l'analyseur de syntaxe XML Rocrail :

condition="#var2%oid% < &time"

Pour vérifier avec un navigateur WEB il doit être changé en:

condition="#var2%oid% &lt; &amp;time"

Cei est également valable pour l'analyseur de syntaxe XML Rocrail.


1) Un document Xml avec une syntaxe correcte s'appelle “bien formé”.
2) 10073+
3) 12.545+

Personal Tools