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.
La programmation par macro-commandes forme 1
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
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
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
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.