IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

[Série] Accès au port série sous linux [FAQ]


Sujet :

Entrée/Sortie Java

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2002
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [Série] Accès au port série sous linux
    Bonjour à tous,

    J'essaye d'accéder au port série sous linux, j'ai pu trouver des informations (sur ce forum et d'autres) avec javax.comm, mais impossible de relire.

    Je dois juste lire des chaines de caractères envoyées par un lecteur de code bar.

    Voici ce qui pose problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    class portserie
    {
      static Enumeration portList;
      static CommPortIdentifier portId;
      static SerialPort serialPort;
     
      public static void main(String[] args)
      {
        portList = CommPortIdentifier.getPortIdentifiers();
        while (portList.hasMoreElements())    // !!!!!!!!!!!!!!!!!!! Renvois toujours false  !!!!!!!!!!!!!!!!
        {
          portId = (CommPortIdentifier) portList.nextElement();
          if (portId.getName().equals("/dev/ttyS0"))
          {
            .....
    J'arrive a accéder à mon port série et a relire les informations du code bar via le numéroteur internet (la fonction terminal) le port est /dev/ttyS0 (=> COM1 sous windows).

    Quelqu'un peut-il m'aider?

    Merci
    PS: J'utilise JBuilder 7 version entreprise (y a-t-il des classes prévue?)
    L'homme le plus heureux est celui qui fait le bonheur d'un plus grands nombre d'autres.

  2. #2
    Candidat au Club
    Inscrit en
    Mars 2002
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 3
    Points : 3
    Points
    3
    Par défaut rxtx
    va voir à http://www.rxtx.org/

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2002
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    J'ai essayé, mais ça fonctionne pas.

    De plus avec commapi, il ne trouve pas les ports série, j'ai essayé l'exemple BlackBox, et la même chose.
    Y a t-il un truc spécial a faire avant?

    PS: j'ai fait un programme en c++, et la pas de problème si je suis root. J'ai essayé avec java, mais même en root il ne veut pas !!!!
    L'homme le plus heureux est celui qui fait le bonheur d'un plus grands nombre d'autres.

  4. #4
    Candidat au Club
    Inscrit en
    Juin 2002
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Voici le code complet de l'exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
     
    package simpleread;
     
    import java.io.*;
    import java.util.*;
    import javax.comm.*;
     
    public class SimpleRead implements Runnable, SerialPortEventListener
    {
        static CommPortIdentifier portId;
        static Enumeration portList;
     
        InputStream inputStream;
        SerialPort serialPort;
        Thread readThread;
     
        public static void main(String[] args)
        {
            portList = CommPortIdentifier.getPortIdentifiers();
     
            while (portList.hasMoreElements())              // ==> Renvois toujours false
            {
              System.out.println("Port: " + portId.getName());
                portId = (CommPortIdentifier) portList.nextElement();
                if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL)
                {
                    if (portId.getName().equals("/dev/ttyS0"))            // -> J'ai modifié, d'origine: /dev/term/a
                    {
                        SimpleRead reader = new SimpleRead();
                    }
                }
            }
        }
     
        public SimpleRead()
        {
            try
            {
                serialPort = (SerialPort) portId.open("SimpleReadApp", 2000);
            }
            catch (PortInUseException e)
            {
            }
     
            try
            {
                inputStream = serialPort.getInputStream();
            }
     
            catch (IOException e)
            {
            }
     
            try
            {
                serialPort.addEventListener(this);
    	}
     
            catch (TooManyListenersException e)
            {
            }
     
            serialPort.notifyOnDataAvailable(true);
     
            try
            {
                serialPort.setSerialPortParams(19200,                  // => Modifier,d'origine: 9600
                    SerialPort.DATABITS_8,
                    SerialPort.STOPBITS_1,
                    SerialPort.PARITY_NONE);
            }
            catch (UnsupportedCommOperationException e)
            {
            }
     
            readThread = new Thread(this);
            readThread.start();
        }
     
        public void run()
        {
            try
            {
                Thread.sleep(20000);
            }
            catch (InterruptedException e)
            {
            }
        }
     
        public void serialEvent(SerialPortEvent event)
        {
            switch(event.getEventType())
            {
            case SerialPortEvent.BI:
            case SerialPortEvent.OE:
            case SerialPortEvent.FE:
            case SerialPortEvent.PE:
            case SerialPortEvent.CD:
            case SerialPortEvent.CTS:
            case SerialPortEvent.DSR:
            case SerialPortEvent.RI:
            case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
                break;
            case SerialPortEvent.DATA_AVAILABLE:
                byte[] readBuffer = new byte[20];
     
                try
                {
                    while (inputStream.available() > 0)
                    {
                        int numBytes = inputStream.read(readBuffer);
                    }
                    System.out.print(new String(readBuffer));
                }
                catch (IOException e)
                {
                }
                break;
            }
        }
    }
    L'homme le plus heureux est celui qui fait le bonheur d'un plus grands nombre d'autres.

  5. #5
    BDL
    BDL est déconnecté
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 3
    Points : 2
    Points
    2
    Par défaut


    J'essaye également de faire fonctionner un port série sous Linux avec javax.comm. Cela fonctionne bien sous Windows avec le comm.jar
    et la WinCom32.dll qui va bien mais sous Linux rien ne fonctionne.
    J'ai essayer avec RXTX et la solution de sun qui fournit soit pout windows soit pour solaris.
    Mais linux rien du tout.

    Si quelqu'un à la solution merci
    Merci,
    BDL

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Accès au port série sous Linux
    Bonjour à tous,

    Je dois moi-aussi lire des chaînes de caractères envoyées par un lecteur de code bar, mais en étant sous Windows. Malgré l'installation de javax.comm, je ne parviens pas à lire les données. Je travaille avec JBuilder9.

    voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    import javax.comm.*;
    import java.io.*;
    import java.util.*;
     
    /*
    Cette classe permet de tester les ports séries disponibles
    en les listant puis en créant un stream d'entrée et de sortie
    */
    public class TesteJavaComm
    {
    CommPortIdentifier portId;
    BufferedReader in;
    PrintWriter out;
    SerialPort serialPort;
     
    /*
    Constructeur de la classe TesteJavaComm qui prend en paramètre le port série à utiliser.
    Dans un premier temps on liste les ports disponibles sur le pc
    */
    public TesteJavaComm (String com)
    {
    System.out.println("listage des ports série disponibles:");
    listePortsDispo();
    try
    {
    //ouverture du port série:
    portId=CommPortIdentifier.getPortIdentifier(com);
    serialPort=(SerialPort)portId.open("Envoi",2000);
     
     
    //on sélectionne tous les paramètres de la connexion série:
    serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,
    SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
    System.out.println("Ouverture du port "+com);
     
    //pour lire et écrire avec des streams:
    in=new BufferedReader(
    new InputStreamReader(serialPort.getInputStream()));
    out=new PrintWriter(serialPort.getOutputStream());
     
     
    //Teste de lecture/ecriture sur le port série
     
    String originalText="une chaine de caractere";
    outputArray = originalText.getBytes( ); 
    out.write ( outputArray, 0 , length );
    int b = in.read()
    in.close();
    out.close();
     
    }
    catch (Exception e)
    {
    e.printStackTrace();
    }
    }//fin constructeur
     
    public void listePortsDispo()
    {
    System.err.println("recherche..."); 
    Enumeration portList=CommPortIdentifier.getPortIdentifiers();
    if (portList==null)
    {
    System.err.println("Aucun port de communication détecté");
    return;
    }
    while (portList.hasMoreElements())
    {
    portId=(CommPortIdentifier)portList.nextElement();
    System.out.println("* "+portId.getName());
    } // while
    } //fin de la methode listePortsDispo()
     
    /*
    Methode main qui permet de tester notre classe de teste en ouvrant une connexion sur le port COM1.
    */
    public static void main(String args[])
    {
    new TesteJavaComm ("COM1");
    }//fin du main
     
     
    }//fin de la classe
    voici ce que j'obtiens à la compilation :

    recherche...

    listage des ports série disponibles:

    * COM1

    * LPT1

    * LPT2

    Ouverture du port COM1

    Et il ne se passe plus rien !!! même en activant le lecteur de code barre.

    Quelqu'un peut-il m'aider à résoudre ce problème ?
    D'avance merci

  7. #7
    Expert éminent

    Avatar de christopheJ
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 600
    Points : 8 235
    Points
    8 235
    Par défaut
    Pour les utilisateurs Linux je n'ai pas d'expériences...
    Pour berni42 as-tu essayer de tracer en pas à pas ton code pour voir où il s'arrete?
    De plus il te manque le chargement du Driver. Sur mon poste de developpement en XP pro ca ne genait pas mais sur les machines de production en 98, je n'obtenais meme pas la liste des ports...
    ajoute avant de récupérér l'identifiant du port :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Win32Driver w32Driver= new Win32Driver();
    w32Driver.initialize();
    L'import associé est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import com.sun.comm.Win32Driver;

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci Christophe pour ton aide. Malheureusement, j'obtiens toujours le même résultat. Les ports sont bien listés, donc trouvés ; l'ouverture du COM1 se fait aussi, mais rien de plus. En activant le lecteur de code barre, rien ne se passe.
    je vais tenter de nouveau de suivre le code pas à pas.

  9. #9
    Futur Membre du Club
    Inscrit en
    Février 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 5
    Points : 7
    Points
    7
    Par défaut Re: Accès au port série sous Linux
    salut
    moi aussi je veux lire des caractéres à partit du port série de windows ;j'ai compilé la classe TesteJavaComm , mais j'ai une erreur à propos de variable outputArray ;qui peut m'aider,please.
    merci

  10. #10
    Expert éminent

    Avatar de christopheJ
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 600
    Points : 8 235
    Points
    8 235
    Par défaut
    Bonjour,
    si vous avez des erreurs, il faut poster le message d'erreur, ca permet d'éviter aux gens d'avoir a compiler votre code pour savoir de quelle erreur il s'agit.
    Pour le code ci dessus outputArray n'est jamais défini :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    byte[] outputArray = originalText.getBytes( );
    out.write ( outputArray, 0 , length );

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Salut a tous.
    J'ai fait des recherche sur ce theme et je n'ai pas trouvé mon probleme evoqué quelque part.

    Alors voila.
    J'ai un flasheur de code a barre qui est connecté sur le port COM1 de mon PC.
    Je veux lire ce qui se passe sur ce port et afficher la trame.
    J'utilise ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    import javax.comm.*;
    import java.io.*;
    import java.util.*;
    import com.sun.comm.Win32Driver;
     
    /*
    Cette classe permet de tester les ports séries disponibles
    en les listant puis en créant un stream d'entrée et de sortie
    */
    public class TesteJavaComm
    {
     CommPortIdentifier portId;
     BufferedReader in;
     PrintWriter out;
     SerialPort serialPort;
     
     /*
     Constructeur de la classe TesteJavaComm qui prend en paramètre le port série à utiliser.
     Dans un premier temps on liste les ports disponibles sur le pc
     */
     public TesteJavaComm (String com)
     {
      Win32Driver w32Driver= new Win32Driver();
      w32Driver.initialize();
      System.out.println("listage des ports série disponibles:");
      listePortsDispo();
      try
      {
       //ouverture du port série:
       portId=CommPortIdentifier.getPortIdentifier(com);
       serialPort=(SerialPort)portId.open("Envoi",2000);
     
       int i=0;
       do
       {
        //on sélectionne tous les paramètres de la connexion série:
        serialPort.setSerialPortParams(38400,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
        System.out.println("Ouverture du port "+com);
     
        //pour lire avec des streams:
        in=new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
     
        //Teste de lecture sur le port série
        int b = in.read();
        System.out.println(in.read());
        System.out.println(b);
        in.close();
        i++;
       }while(i!=3);
      }
      catch (Exception e)
      {
       e.printStackTrace();
      }
     }//fin constructeur
     
     public void listePortsDispo()
     {
      System.err.println("recherche..."); 
      Enumeration portList=CommPortIdentifier.getPortIdentifiers();
      if (portList==null)
      {
       System.err.println("Aucun port de communication détecté");
       return;
      }
      while (portList.hasMoreElements())
      {
       portId=(CommPortIdentifier)portList.nextElement();
       System.out.println("* "+portId.getName());
      } // while
     } //fin de la methode listePortsDispo()
     
     /*
     Methode main qui permet de tester notre classe de teste en ouvrant une connexion sur le port COM1.
     */
     public static void main(String args[])
     {
      new TesteJavaComm ("COM1");
     }//fin du main
    }//fin de la classe
    Voila ce que cela m'affiche :

    Listage des ports série disponibles
    recherche...
    * COM2
    * COM1
    * LPT1
    * LPT2
    Ouverture du port COM1
    49
    2

    Mon soucis c'est que je ne comprends pas ce que represente les valeurs '49' (in.read()) et '2' (int b) et comment afficher la trame que je flashe.

    Merci pour toute l'aide que vous pourrez m'apporter.

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/04/2014, 17h26
  2. accès au réseau windows sous linux
    Par abssef dans le forum Réseau
    Réponses: 5
    Dernier message: 18/04/2008, 10h02
  3. Webservice et refus d'accés au port série du serveur
    Par cats92 dans le forum Services Web
    Réponses: 2
    Dernier message: 01/02/2008, 08h23
  4. [C#] Problème d'accès au port série
    Par crashXpert dans le forum C#
    Réponses: 8
    Dernier message: 06/11/2006, 21h46
  5. Les ports series sous linux...
    Par barucca dans le forum Matériel
    Réponses: 11
    Dernier message: 29/04/2004, 11h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo