Imprimer   Dernière mise à jour 16/9/2017

Les interfaces de programmation JAO 2013

La programmation, autrement dit l’automatisation de conduite de maquettes ferroviaires sous JAO, peut être réalisée avec deux moyens :

Les macro-commandes, interface de premier niveau avec le logiciel

Les composants COM interface entre le logiciel JAO et les scripts, voire avec les programmes développés par les utilisateurs.


Présentation synthétique

Présentation macros

La programmation par macro-commandes forme 1
Macro mono-évènement

Les macro-commandes, une forme de langage informatique qui permet de formaliser des commandes et leurs conditions d’exécution par des mnémoniques.

Les mnémoniques permettent d’exprimer des conditions et de les combiner.
Par exemple les conditions suivantes ‘Si le convoi 42 occupe la canton 7 et se dirige vers la canton 14’ s’exprimerons en mnémoniques JAO comme suit:
O7,42&a14,42

Les mnémoniques permettent de commander les trains, les signaux et les aiguillages .
Par exemple assigner une vitesse à un convoi et passer un signal au vert:
V2,100SV22.

Les mnémoniques permettent d’enregistrer et de partager des informations basiques sous forme de variables numériques
Exemple: §50=47

Les mnémoniques permettent de créer des évènements, des évènements nommés.
Les évènements nommés sont utilisés dans des scripts pour déclencher des processus (programmation en langage évolué).
Exemple: E’Alerte’

Les mnémoniques permettent de jouer des sons, des wav
Exemple: µ’commentaire1.wav’

Les mnémoniques permettent d’invoquer des programmes rédigés en langage évolué, des scripts vbs
Exemple: µ’analyseconflit.vbs "EnGare"’

Les macro-commandes, forme 1, sont invoquées sur 4 types d’évènements:
  Le changement d’état des capteurs
  Les commandes passées par le TCO
  L’appui sur une partie des touches de fonctions du clavier
  La sélection d’une touche de fonction sous l’interface HTML
Un évènement provoque le passage de commandes sous conditions.

Par exemple déclenchement du départ d’un train au passage d’un autre sur un canton.
7,1(o7,42&p5,42&o17,2&s0,2) V2,100
Un évènement: 7,1 capteur 7 activé
Des conditions combinées: o test d’occupation, p test de positionnement de convoi et s test d'état du convoi
Un ordre unique dans cet exemple: V affectation de puissance

JAO fournit une cinquantaine de mnémoniques pour piloter les maquettes. Il ne semble pas opportun aujourd’hui, d’enrichir les macro-commandes, nous proposons en alternative ou en complément d’utiliser une forme plus évoluée de programmation, le ‘scripting’, en langage basic (vbs) ou java (js) entre autres.


Positionnement par rapport aux autres formes de programmation
Avantages
    Déclenchement fiable et précis sur évènement matériel
    Simplicité d’usage.
    Potentiel de programmation important sous des descriptions compactes: codage ‘économique’ par rapport à celui demandé par un langage de programmation
Inconvénients
    Tributaires des évènements capteurs
    Peu lisible, demande à être documenter
    Pseudo langage propriétaire
    Complexité engendrée par la syntaxe des mnémoniques (vocabulaire abstrait, non explicite)
    Interactions entre macros limitées du fait du passage de données par l’intermédiaire de variables numériques, les variables §


La programmation par macro-commandes forme 2
Macro signalisation

Des macro-commandes pour piloter la signalisation et uniquement la signalisation.
Contrairement aux macro-commandes en forme 1 les macros de signalisation (dites forme 2) ne sont pas déclenchées sur évènements capteurs, mais sur tout évènement produit par le système JAO.
Les macros de signalisation jouent également un rôle de description: le positionnement et la forme des signaux sur le synoptique.
Dédiées à la signalisation les macros, forme 2, n’ont pas pour autant le monopole du pilotage des signaux, ceux-ci peuvent être pilotés sous toutes les formes de programmation proposées par JAO

Elles permettent soit de confier au système le pilotage des signaux, pilotage dit automatique, soit de programmer les signaux en utilisant le langage de macro-commandes; Les deux méthodes peuvent être combinées.
Le pilotage automatique est basé sur une table de vérité modifiable.
La table de vérité est un moyen de résoudre des problèmes complexes ou des problèmes faisant intervenir de nombreux facteurs de décision. C’est aussi un moyen de permettre la modification d’un processus sans avoir à intervenir dans le programme, un des moyens de paramétrer un algorithme.
L’utilisation de la table de vérité sous JAO permet de ne pas avoir à programmer la signalisation, partiellement ou totalement, tout en maitrisant les règles qui régissent le fonctionnement des signaux.

Pilotage automatique par table de vérité
Exemple de programmation automatique du signal 14, situé dans une gare
n:14/e:1/a:270/z:1/r:1/c:69/p:0/x:19/y:57/m:2(*);
Une description du signal générée automatiquement lors du dessin de réseau: n:14/e:1/a:270/z:1/r:1/c:69/p:0/x:19/y:57
Une macro pour piloter le signal: /m:2(*)
   2 pour désigner l’ensemble des règles régissant les signaux en gare.
   (*)
pour définir le périmètre des évènements à prendre en compte, ici sur tous les cantons du réseaux.

Pilotage spécifique via macro-commandes
Tous les mnémoniques de conditions des macro-commandes sont utilisables pour piloter les feux, les commandes de feux et uniquement celles-ci peuvent être utilisées.
Les macros s’expriment sous une forme adaptée au traitement de la signalisation:
   Définition d’un périmètre d’évènements et de la couleur de signal en initialisation (au démarrage)
   Définition de chaque changement de couleur en fonction de conditions
Exemple de programmation spécifique pour le signal 31 situé en gare:
n:31/e:1/a:270/z:1/r:9/c:156/p:0/x:23/y:63/m:SR31(31,26,28,10)SR31(^w31,2+)SR31(c23,1|o26,?)SJ31(q31&a26,!&s3,!&fR26);
Une description du signal générée automatiquement lors du dessin de réseau: n:31/e:1/a:270/z:1/r:9/c:156/p:0/x:23/y:63
Une définition du périmètre d’évènements et de la couleur de signal en initialisation :
    SR31(31,26,28,10) le signal est au rouge au démarrage et tant qu’aucun évènement n’est signalé sur le liste de cantons 31 26 28 10
Des programmations du signal en fonction de conditions:
   SR31(^w31,2+) le signal est au rouge si l’exploitation de la table de vérité ne donne pas de résultat, (^w31,2) et dans le cas contraire le traitement continue avec les autres conditions
   SR31(c23,1|o26,?) le signal est au rouge si l’aiguillage 23 est direct, c23,1, ou si le canton 26 est occupé par un train quel qu’il soit, o26,?
   SJ31(q31a26,!&s3,!&fR26) le signal est au jaune si le train qui a réservé le canton 26 se dirige vers ce canton, q31a26,!,
Et si ce convoi est en allure non contrainte, s3,!
Et si le signal 26 est au rouge,fR26

Positionnement par rapport aux autres formes de programmation
Avantages
   Simplification du fait de l’utilisation d’un processus dédié à la signalisation, pas de confusion possible.
   Prise en compte de tous les évènements sur un périmètre défini
Inconvénients
   Pas de synchronisation précise avec les entrées et sorties de cantons


La programmation par macro-commandes forme 3
Macro multi-évènements

Contrairement aux macros forme 1, les macros de forme 3 ne sont pas déclenchées sur évènements capteurs, mais sur tout évènement produit par le système JAO.
Plusieurs macros peuvent être décrites pour un ensemble d’évènements
Pour chaque ensemble de macros, un périmètre d’évènements est défini par rapport aux cantons: Les évènements produits sur ces cantons et seulement ceux-ci déclenchent les commandes associées.
Les macros s’expriment sous une forme adaptée au traitement simultané de plusieurs évènements:
 Définition d’un périmètre d’évènements et optionnellement de commandes en initialisation (au démarrage)
    Cette définition n’est exploité qu’une seule fois, au démarrage.
 Définition d’ensembles commandes/conditions
    Ces définitions sont exploitées chaque fois qu’un évènement se produit dans le périmètre assigné
Lorsque les conditions d’une définition sont remplies la ou les commandes sont exécutées et le traitement s’arrête sur cette action
Lorsque les conditions d’une définition ne sont pas remplies, le traitement se poursuit avec les autres définitions

Exemple de macro élémentaire utilisée au démarrage d’un réseau
1[µ'PresentDemo.vbs']()
1 : identificateur de la macro, un numéro libre mais obligatoire destiné au processus du serveur
[µ'PresentDemo.vbs']: une commande, lancer le script PresentDemo.vbs au démarrage du réseau
(): aucun périmètre d’évènement dans ce cas simple.

Exemple de macro de conduite de trains sur évènements, une détection de conflit entre plusieurs convois
*Conflit entre convoi sur canton 6 et convois sur canton 1 ou 2
1 [](6,1,2)[§1,101](§1=0&o6,?&q6t6,!&s0,!&a5,!&(o1,?&q1t1,!&a5,!&s0,!&o2,?&q2t2,!&a5,!&s0,!))
1 : identificateur de la macro, un numéro libre mais obligatoire destiné au processus du serveur
[](6,1,2): définition du périmètre, pas d’action au démarrage du réseau
[§1,101]: fixer la valeur de la variable §1 à 101 si les conditions qui suivent sont remplies
(§1=0&o6,?&q6t6,!&s0,!&a5,!&(o1,?&q1t1,!&a5,!&s0,!&o2,?&q2t2,!&a5,!&s0,!)):
Si le conflit n’a pas encore été détecté la variable §1 est à 0, §1=0
Et si le canton 6 est occupé et si le convoi est arrêté , tête de convoi sur 6 etc. … §1=0&o6,?&q6t6,!&s0,!&a5,!
Et si il y a des conditions de conflits sur cantons 1 et 2 avec le convoi sur canton 6, (o1,?&q1t1,!&a5,!&s0,!&o2,?&q2t2,!&a5,!&s0,!)

Positionnement par rapport aux autres formes de programmation
Avantages
   Définition de périmètres d’évènements
   Prise en compte de tous les évènements
   Potentiel de programmation important sous des descriptions compactes: codage ‘économique’ par rapport à celui demandé par un langage de programmation
Inconvénients
   Pas de synchronisation précise avec les entrées et sorties de cantons, évènement capteurs
   Peu lisible, demande à documenter chaque macro
   Pseudo langage propriétaire


La programmation sous langage informatique conventionnel
Scripting

Les Langages de programmation dont ceux utilisés souvent en scripts, vbs ou js peuvent être utilisés pour piloter les maquettes sous JAO. Nous traiterons ici du cas des scripts vbs.
Les scripts doivent utiliser un objet COM, l’interface avec le système JAO. Sans entrer dans des explications complexes ou du moins trop techniques sur COM, on peut dire qu’il s’agit tout simplement d’un complément de fonctionnalités: Des fonctionnalités de pilotage de maquettes ferroviaires avec JAO.
Il est donc possible de programmer le fonctionnement de maquettes avec des langages informatiques conventionnels.
Il est aussi possible, sans que cela soit obligatoire, de programmer ‘orienté objet’ ou encore ‘évènementiel’, de quoi satisfaire les amateurs de ce style de programmation.
L’utilisation de langages de programmation suppose un investissement, une formation à la programmation. Cependant avec des langages comme basique ou java souvent utilisés avec les produits bureautiques tels que Microsoft Office ou Open Office, les utilisateurs de PC ont déjà acquis les connaissances suffisantes pour tirer profit de l’interface COM de JAO.
JAO ne se permet pas de fournir une formation au ‘scripting’, nous nous limitons à fournir quelques exemples de script vbs.
Positionnement par rapport aux autres formes de programmation
Avantages
   Une partie des difficultés liées à l’usage de macro-commandes, peut être contournée: mnémoniques difficiles à mémoriser, limitation d’algorithmes, fonctionnalités limitées au pilotage de la maquette, entre autres…
   Complémentarité évidente avec la programmation sous macro-commandes: La solution pour faire ce que JAO ne sait pas faire ou ne saurait faire.
Inconvénients
   Investissement en formation à la programmation
   Implication des utilisateurs en terme de responsabilité sur dysfonctionnements pouvant impacter l’ordinateur.
 La programmation sous scripts permet d’utiliser toutes les ressources offertes par les PCs et suppose donc que le programmeur en connaisse les conséquences.


Scripting
Scripting