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

avec Java Discussion :

Problème de lecture sur port série


Sujet :

avec Java

  1. #1
    Membre régulier Avatar de stpaul04
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 271
    Points : 116
    Points
    116
    Par défaut Problème de lecture sur port série
    Bonjour à tous,

    je suis en train d'essayer le tutorial pour lire le port sérial.
    Mon but est le suivant:

    j'ai une station météo de marque Vaisala type WXT520.
    avec le code suivant, j'arrive à savoir que le port COM1 est utilisé.
    mais je n'arrive pas à voir la trame que la station envoie.

    En même temps si je me connecte par Hyper Terminal, mon code dit que le port est utilisé par une appilcation Windows.
    ce qui est logique.

    comment faire pour récupérer la trame de ma station météo?

    Merci

    voici le 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 java.io.*;
    import java.util.*;
    import javax.comm.*;
    import com.sun.comm.Win32Driver;
    import com.sun.comm.Win32Driver;
     
    public class SimpleRead implements Runnable, Seriai lPortEventListener {
        static CommPortIdentifier portId;
        static Enumeration portList;
     
        InputStream inputStream;
        SerialPort serialPort;
        Thread readThread;
     
        public static void main(String[] args) {
            portList = CommPortIdentifier.getPortIdentifiers();
     
            while (portList.hasMoreElements()) {
                portId = (CommPortIdentifier) portList.nextElement();
                if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
                     if (portId.getName().equals("COM1")) {
    			//                if (portId.getName().equals("/dev/term/a")) {
                        SimpleRead reader = new SimpleRead();
                    }
                }
            }
        }
     
        public SimpleRead() {
            try {
                serialPort = (SerialPort) portId.open("SimpleReadApp", 2000);
            } catch (PortInUseException e) {System.out.println(e);}
            try {
                inputStream = serialPort.getInputStream();
            } catch (IOException e) {System.out.println(e);}
    	try {
                serialPort.addEventListener(this);
    	} catch (TooManyListenersException e) {System.out.println(e);}
            serialPort.notifyOnDataAvailable(true);
            try {
                serialPort.setSerialPortParams(9600,
                    SerialPort.DATABITS_8,
                    SerialPort.STOPBITS_1,
                    SerialPort.PARITY_NONE);
            } catch (UnsupportedCommOperationException e) {System.out.println(e);}
            readThread = new Thread(this);
            readThread.start();
        }
     
        public void run() {
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {System.out.println(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) {System.out.println(e);}
                break;
            }
        }
    }

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Dans la boucle de lecture du flux, tu dois placer le System.out.println à l'intérieur de la boucle, sinon tu n'auras que les derniers octets. Tu dois aussi utiliser la valeur de retour du read, qui t'indique combien de cases ont été remplies dans ton tableau. Ca t'évitera d'afficher la fin du tableau s'il n'est rempli que partiellement.
    Ajoute une trace dans la méthode serialEvent juste avant le switch pour savoir si la méthode est appelée lorsque des données sont disponibles.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

Discussions similaires

  1. SERIALPORT - Problème de lecture sur port série
    Par PIMSOU dans le forum VB.NET
    Réponses: 7
    Dernier message: 13/01/2012, 14h03
  2. Lecture sur port série sous Linux
    Par DangerousBowlOfJelly dans le forum C
    Réponses: 6
    Dernier message: 28/03/2008, 17h00
  3. Pb lecture sur port série sous XP SP2
    Par ViveLesQuads dans le forum Delphi
    Réponses: 7
    Dernier message: 09/06/2006, 17h12
  4. Problème de lecture sur port COM
    Par Marthym dans le forum MFC
    Réponses: 10
    Dernier message: 11/04/2006, 15h36
  5. [C#] lecture sur port série
    Par Iokanaan dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/05/2005, 13h50

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