JMRI is...

Écriture de Scripts

Information sur écriture de scripts pour contrôler JMRI plus en detail:

Outils

Les objets généraux disponibles pour commander votre réseau.

JMRI: Automatisation Réseau en Java

La bibliothèque JMRI fournit un ensemble puissant d'outils pour automatiser votre réseau. Si les outils intégrés à PanelPro ou les capacités de scripts ne sont pas suffisantes pour faire ce que vous voulez, la solution sera d'écrire vous-même vos propres programme de commande.

Cette page décrit les classes Java qui ont en charge l'écriture "Automatisation" JMRI du code en Java. C'est des choses comme les signaux d'exploitation, les trains, et même des choses subtiles comme l'évolution du volume du son du décodeur quand un train passe dans un tunnel.

Notez que vous pouvez aussi écrire votre code d'automatisme en utilisant Jython comme "scripts" JMRI . Pour plusieurs raisons, ceci peut être plus simple parce qu'il plus réactif et a un meilleur support de débogage. Java est réellement le meilleur pour les cas longs et complexes, ou si vous écrivez quelque chose que vous voulez finalement voir contribuer à JMRI lui-même.

Introduction

La classe"Automat" fournit un moyen facile d'écrire l'automatisation par Java pour votre réseau en utilisant JMRI.

La classe clé est AbstractAutomaton, qui fournit un support de liaison pour simplifier le code d'automatisation personnalisé.

Aspect essentiel: Ceux-ci s'exécutent dans un lien séparé, de sorte qu'ils peuvent attendre que quelque chose se produise pour que le reste du programme continue. Effectivement, chaque Automat est un programme distinct s'exécutant quand il le doit.

Il y a plusieurs exemples:

  • SampleAutomaton - surveille un capteur, et ajuste l' état d'un aiguillage afin qu'il corresponde à l'état du Capteur.
  • SampleAutomaton2 - surveille un capteur, et ajuste le mouvement d'un décodeur de locomotive utilisant le mode de programmation mode ops lorsque l'état du capteur change.
  • SampleAutomaton3 - une locomotive fonctionne en avant et en arrière sur un morceau de voie en regardant deux capteurs, inversant la locomotive quand ils changent d'état.

Notez qu'ils ne peuvent rien faire d'utile sur votre réseau, car ils ont les numéros de Loco qui ne sont pas modifiables. Ils sont censés être des exemples pour votre propre programmation, pas des outils utiles.

Commande de Locomotives

// Récupère l'instance du régulateur pour l'"adresse courte" 3
throttle = getThrottle (3, false);

Cet extrait de code assigne "adresse courte 3" à la variable "régulateur" ( le "false" sélectionne l'adresse courte; "true" aurait été pour l'adresse longue). Si cela ne fonctionne pas pour une raison quelconque, vous obtiendrez un message périodique "toujours en attente de régulateur" dans la fenêtre de Java, et le programme attendra.

Interaction avec l'utilisateur

Vous pouvez mettre en place des boîtes de message directement à partir de Java, mais cela prend un peu de code pour le faire. Pour simplifier, au début, j'ai ajouté une classe d'assistance "MsgFrame" à la bibliothèque JMRI.

Pour faire une boîte de message, vous devez d'abord faire un objet de la classe "MsgFrame":

MsgFrame box = nouveau MsgFrame ();

(Vous pouvez appelez ça comme vous voulez, bien sûr). Cette ligne devrait aller avec les autres déclarations, par exemple à droite après la ligne "DccThrottle throttle= null;. "

Puis, à l'intérieur des routines de test, il y a quelques choses que vous pouvez faire. Pour afficher un message et attendre que l'utilisateur clique sur un bouton "Continuer", faites: .

box.show ("mon texte du message va ici", true);

Le 2ème argument montre le bouton "Continuer" et attend si elle est vraie, et continue si elle est fausse. Donc, si vous souhaitez afficher un message d'état pendant que le programme continue à à se dérouler, faire:

box.show ("text message d'état", false);

Si vous avez fait cela, vous pouvez modifier le message avec un autre "show", ou vous pouvez faire partir la boîte avec:

box.hide ();

Java a fait faire des travaux pour faire apparaître la boîte et la dessiner. Nous ne voulons pas retarder le programme de test principal, donc j'ai écrit cette classe d'aide pour faire tout ce genre de travail en tant que 2ième plus faible priorité. Vous devriez être capable de mettre en place des messages sur l'écran sans ralentir considérablement le fonctionnement (à moins que le programme attende que le bouton "Continuer" soit pressé pour continuer, bien sûr). Et attendre que "Continuer" soit pressé ne fera pas arrêter l'exécution du reste du programme.

Exécution de Votre Code
Il y a deux façons de le faire: Rendre votre code Java disponible pour JMRI et l'appeler.

La manière la plus simple pour rendre votre code accessible est de faire un fichier .jar et de le placer dans le répertoire "lib" dans le répertoire du programme JMRI. Autrement, vous pouvez créer un répertoire "Classes", et compiler votre class Java à l'intérieur. Dans ce cas, il devrait se retrouver dans: classes/MyCode.class Si vous n'avez pas spécifié de code dans votre paquet, ou classes/MyCode.class ou classes/jmri/jmrit/automat/SampleAutomaton.class comme un exemple de la façon dont le code est stocké dans un package spécifique .

La manière la plus simple pour appeler votre code est d'utiliser le support script de JMRI. Ouvrir une fenêtre Sortie Script ( ainsi vous verrez les erreurs ) depuis le menu Panneaux, puis une fenêtre Entrée Script, entrez: MyCode().start() ou import jmri.jmrit.automat jmri.jmrit.automat.SampleAutomaton().start() et appuyez sur Executer. La deuxième ligne crée une instance de votre class et lui dit de démarrer une exécution.

Une fois que vous avez obtenu qu'il travaille, vous pouvez le mettre dans un petit fichier script et l'appeler au démarrage, via un Logix ou autre chose.

Retour à la page d'Aide Automatisation.