Auteur Sujet: JMRI  (Lu 3767 fois)

CATPLUS

  • Sr. Member
  • ****
  • Messages: 261
    • Voir le profil
Re : JMRI
« Réponse #15 le: juin 09, 2020, 02:04:44 pm »
Bonjour,
Ce matin un lapin etc, etc... j'ai lu ce qui suit sur le site de MRH

https://model-railroad-hobbyist.com/node/37319

Certes il n'apporte pas des réponses à la programmation de certain décodeur, mais 2 choses mon interpellé,

1 La configuration des préférences entre Jmri et DCC++ (Arduino)
2 La seconde la valeur des résistances R1 & R2 dans le Shield
Marcel



Best Regards

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2024
  • 100% Arduino et N
    • Voir le profil
Re : JMRI
« Réponse #16 le: juin 09, 2020, 02:22:08 pm »
La valeur de 0,15 ohms pour la mesure de courant dans les cartes L298 doit être associée au gain de l’ampli op (lm358 en général) de façon à obtenir une relation entre la tension lue sur une entrée analogique de l’Arduino et le courant mesuré :
Mesure de consommation : 1.65V/A

A titre de rappel, la lecture de CVs se fait par la détection d’impulsions de 60mA pendant 6mS, générées par le décodeur qui actionne le moteur pour cela.
Notons que certains décodeurs ne réagissent pas comme on l’attend et ceci n’est pas un problème de JMRI qui doit être d’abord configuré comme il faut !
Sinon les problèmes s’empilent et ça devient compliqué  :P
Cordialement

Chris

  • Newbie
  • *
  • Messages: 9
    • Voir le profil
Re : JMRI
« Réponse #17 le: septembre 15, 2020, 06:26:27 pm »
Bonjour,
impossible de daire fonctionner les scripts, tout le reste fonctionne, mais dans la console système de JMRI j'ai le message suivant :

2020-09-15 18:17:16,288 jython.RunJythonScript                ERROR - Unable to execute script. [AWT-EventQueue-0]
javax.script.ScriptException: NameError: global name 'extport' is not defined in <script> at line number 86
....
....
Caused by: Traceback (most recent call last):
  File "<script>", line 86, in <module>
  File "<script>", line 22, in __init__
NameError: global name 'extport' is not defined

Ne connaissant pas JavaScript, je suis incapable d'en déduire quelque chose.
j'ai bien mis mon port "COM6" partout,
la même vitesse, toutes les opérations dans l'ordre, rien n'y fait.
Merci d'avance pour vos lumières.

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2024
  • 100% Arduino et N
    • Voir le profil
Re : JMRI
« Réponse #18 le: septembre 15, 2020, 07:13:05 pm »
C’est portant écrit : « export » n’a pas été défini !
Cordialement

Souris verte

  • Newbie
  • *
  • Messages: 35
  • HO, DCC, Arduino...
    • Voir le profil
Re : JMRI
« Réponse #19 le: septembre 15, 2020, 08:40:33 pm »
Extport, pas export...
Erreur de frappe ? ;)

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2024
  • 100% Arduino et N
    • Voir le profil
Re : Re : JMRI
« Réponse #20 le: septembre 15, 2020, 09:19:44 pm »
Extport, pas export...
Erreur de frappe ? ;)

Voilà une piste de recherche !
Cordialement

Chris

  • Newbie
  • *
  • Messages: 9
    • Voir le profil
Re : JMRI
« Réponse #21 le: septembre 16, 2020, 04:16:57 pm »
C'est bien extport (port externe) qu'il y a dans le script .
Pourtant j'ai bien mis mon port "COM6" identifié par l'arduino dans la ligne voulue.

Souris verte

  • Newbie
  • *
  • Messages: 35
  • HO, DCC, Arduino...
    • Voir le profil
Re : JMRI
« Réponse #22 le: septembre 16, 2020, 06:44:42 pm »
Hello,
La compil trouve un pb ligne 86 puis 22...
Sans le script, pas facile de t’aider.

Pour le COM6, je ne vois pas trop le lien.

Chris

  • Newbie
  • *
  • Messages: 9
    • Voir le profil
Re : JMRI
« Réponse #23 le: septembre 16, 2020, 09:33:05 pm »
Le script est le suivant : sensor_scan.py :

# Capture Sensor Data from an Arduino Serial Transmission
# In the form: Character "A" followed by
# 1 byte: bit 7 Sensor ON/OFF bit 6-0 sensor # 1-127
# Author: Geoff Bunza 2018 based in part on a script by
# Bob Jacobsen as part of the JMRI distribution
# Version 1.2
# An Automat object to create a separate thread
# that can sit there, waiting for each character to arrive

import jarray
import jmri
import purejavacomm

class SerialSensorMux(jmri.jmrit.automat.AbstractAutomaton) :
    # ctor starts up the serial port
    def __init__(self, portname) :
        global extport
        self.portID = purejavacomm.CommPortIdentifier.getPortIdentifier(portname)
   try:
            self.port = self.portID.open("JMRI", 50)
        except purejavacomm.PortInUseException:
            self.port = extport
        extport = self.port
        # set options on port
        baudrate = 115200
        self.port.setSerialPortParams(baudrate,
            purejavacomm.SerialPort.DATABITS_8,
            purejavacomm.SerialPort.STOPBITS_1,
            purejavacomm.SerialPort.PARITY_NONE)
        # Anticipate the Port Opening will restart the Arduino
        # Uncomment the following line for use on RPi You may need to fiddle with the 2000
        # msec delay this works on my RPi 3 B+
        #self.waitMsec(2000)
      # get I/O connections for later
        self.inputStream = self.port.getInputStream()
        self.outputStream = self.port.getOutputStream()
        return

    # init() is the place for your initialization
    def init(self) :
        return

    # handle() is called repeatedly until it returns false.
    def handle(self) :
        global ttest
        if ttest == 1 :
                self.outputStream.write('!')
                self.outputStream.write('!')
                self.outputStream.write('!')
                self.outputStream.write(0x0D)
                ttest = 0
        # get next character   
        if self.inputStream.read() != 65 :
                return 1
        sensor_num = self.inputStream.read()
        sensor_state = ( sensor_num>>7 ) & 1
        sensor_num = sensor_num & 0x7f
        mesg = "AR:%d" % (sensor_num)
        if sensor_num == 1 and sensor_state == 1 :
            print "Sensor Read Ends"
            self.inputStream.close()
            self.outputStream.close()
            self.port.close()
            return 0
        s = sensors.getByUserName( mesg )
        if s is None :
                print mesg, " Not Available"
                return 1
        if sensor_state == 1 :
                s.setKnownState(ACTIVE)
        if sensor_state == 0 :
                s.setKnownState(INACTIVE)

        return 1    # to continue 0 to Kill Script

    def write(self, data) :
        # now send
        self.outputStream.write(data)
        return

    def flush(self) :
        self.outputStream.flush()
        return
ttest=1
# create one of these; provide the name of the serial port
a = SerialSensorMux("COM6")

# set the thread name, so easy to cancel if needed
a.setName("SerialSensorMux script")

# start running
a.start();

# setup  complete
a.flush()


la ligne
 "self.portID = purejavacomm.CommPortIdentifier.getPortIdentifier(portname)"

récupère un identifiant du port série portname (ici COM6) pour ensuite ouvrir le port par un open, mais ne le trouve pas (enfin me semble-t-il) d'où le extport non défini.
Mais je ne comprends pas pourquoi... l'arduino communique bien avec mon ordi via ce port puisque je peux televerser le sketch.
Je fais le test de communication entre JMRI et Arduino en lecture de capteurs.
De l'article "Communications entre JMRI et Arduino"

msport

  • Hero Member
  • *****
  • Messages: 1000
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : JMRI
« Réponse #24 le: septembre 16, 2020, 10:30:40 pm »
Bonsoir,
ça me rappelle une expérience avec un script de JMRI qui établissait une liste des port COM du PC et considérait que c'était le nième qu'il fallait ouvrir. Pas de chance, il y avait un port virtuel(?) qui décalait la liste.
Attention c'est ce dont je me souviens et que les années n'ont pas amélioré. Dominique avec un Mac se demandait ce que problème de port COM pouvait bien être.
Finalement il suffisait de décaler de un dans la liste, donc modifier le script fourni.
Bon, ça n'a peut-être rien à voir, c'est pour faire avancer le schimblick. Bonne chance.
Cordialement

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2024
  • 100% Arduino et N
    • Voir le profil
Re : JMRI
« Réponse #25 le: septembre 16, 2020, 11:00:55 pm »
Chris,

A mon avis vous n’avez pas lu attentivement la totalité de l’article et/ou respecté les indications concernant les ports utilisés, notamment les choix des bons scripts, ce qui pourrait expliquer que la globale « extport » ne doit pas définie.
En tout cas à l’époque de l’écriture de cet article ça marchait bien.
Peut-être une evolution de JMRI a changé quelque script.

Les spécialistes de JMRI pourront sans doute vous dépanner (je n’ai rien pour le faire en ce moment).
Cordialement

Chris

  • Newbie
  • *
  • Messages: 9
    • Voir le profil
Re : JMRI
« Réponse #26 le: septembre 18, 2020, 04:25:10 pm »
Bonjour et merci pour vos tentatives de réponse,
j'ai fini par trouver la raison de mon problème dont je vous fais part... ça peut aider d'autres novices comme moi sur l'arduino, et JMRI.

Alors voilà :
 - J'ai bien configuré ma liaison série dans l'arduino en COM6 et 115200 bauds
 - même chose dans le script Sensor_Scan.py pour JMRI

Mais comme j'ai utilisé  PanelPro pour essayer de commander mes locos, j'avais configuré ce dernier en mode DCC++ sur le port série.
Du coup, en ajoutant mon tableau de capteurs en Internal comme précisé dans l'article de Dominique,
 le script Sensor_Scan.py trouvait toujours le port occupé pour le DCC

La solution est finalement évidente : On ne peut visiblement pas faire les 2 en même temps.
Et en désactivant la liaison DCC++, ça marche ! :D :D :D
(A une exception prêt cependant : le script s'attend à gérer des capteurs dénommés "AR:" et non "AR", mais cela a déjà été signalé par ailleurs me semble-t-il)
Voilà.
Donc moi qui voulais utilisé un arduino pour les entrées capteurs et un pour les commandes d'aiguilles+ train, je vais devoir revoir mon schéma.
Peut-être comme suit :
JMRI en gestionnaire sur 2 ports USB relié à 2 arduino :
L'un transmettant les détections, et autres E/S en internal et l'autre en DCC pour les sorties Trains et Aiguillages

Cordialement

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2024
  • 100% Arduino et N
    • Voir le profil
Re : JMRI
« Réponse #27 le: septembre 18, 2020, 04:47:28 pm »
Bravo !
Je suis sûr que ça va aider d’autres JMRIstes.

Merci d’avoir persévéré .

Cordialement