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 :

lecture/ecriture sur le port


Sujet :

Entrée/Sortie Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut lecture/ecriture sur le port
    Bonjour,
    J'ai quelques problèmes avec l'écriture sur le port com en java.
    Je sais qu'il y a eu des discussions la dessus et je sais aussi que christophJ a déposé un totoriaux. Mais malgrés cela, je ne comprends pas ou ce trouve mon erreur.

    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
    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
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
     // Specification:
     
    package ch.hearc.bilat.polhemus.evenementiel;
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.util.TooManyListenersException;
     
    import javax.comm.CommPortIdentifier;
    import javax.comm.NoSuchPortException;
    import javax.comm.PortInUseException;
    import javax.comm.SerialPort;
    import javax.comm.SerialPortEvent;
    import javax.comm.SerialPortEventListener;
    import javax.comm.UnsupportedCommOperationException;
     
    import com.sun.comm.Win32Driver;
     
    public class com_1 extends Thread implements SerialPortEventListener
        {
     
        /*------------------------------------------------------------------*\
         |*                            Constructeurs                            *|
         \*-----------------------------------------------------------------*/
        public com_1(String port)
            {
            // initialisation du driver
            Win32Driver w32Driver = new Win32Driver();
            w32Driver.initialize();
            try
                {
                portId = CommPortIdentifier.getPortIdentifier(port);
     
                serialPort = (SerialPort)portId.open("ecrit", 2000);
     
                out = serialPort.getOutputStream();
                fluxLecture = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
     
                serialPort.addEventListener(this);
     
                serialPort.notifyOnDataAvailable(true);
     
                serialPort.setSerialPortParams(115200, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
     
                }
            catch (NoSuchPortException e)
                {
                e.printStackTrace();
                }
            catch (PortInUseException e)
                {
                e.printStackTrace();
                }
            catch (IOException e)
                {
                e.printStackTrace();
                }
            catch (TooManyListenersException e)
                {
                }
            catch (UnsupportedCommOperationException e)
                {
                e.printStackTrace();
                }
            System.out.println("port ouvert, attente de lecture");
            ecriture("P");
            System.out.println("La commande p est envoyé!");
            }
     
        /*------------------------------------------------------------------*\
         |*                            Méthodes Public                            *|
         \*-----------------------------------------------------------------*/
        public void run()
            {
            running = true;
            while(running)
                {
                attendre(2000);
                }
            // fermeture du flux et port
            try
                {
                fluxLecture.close();
                }
            catch (IOException e)
                {
                e.printStackTrace();
                }
            serialPort.close();
            }
     
        public void serialEvent(SerialPortEvent event)
            {
            // gestion des événements sur le port :
            // on ne fait rien sauf quand les données sont disponibles
            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:
                    String trame = new String();
                    try
                        {
                        // lecture du buffer et affichage
                        trame = (String)fluxLecture.readLine();
                        System.out.println("La commande recue est: " + trame);
                        }
                    catch (IOException e)
                        {
                        e.printStackTrace();
                        }
                    break;
                }
            }
     
        public void stopThread()
            {
            running = false;
            }
     
        public void ecriture(String commande)
            {
            try
                {
                out.write(commande.getBytes());
                }
            catch (IOException e)
                {
                e.printStackTrace();
                }
            }
     
        /*------------------------------------------------------------------*\
         |*                            Méthodes Principal                        *|
         \*-----------------------------------------------------------------*/
        public static void main(String[] args)
            {
     
            String port = new String("COM1");
     
            com_1 portCom1 = new com_1(port);
            portCom1.start();
            System.out.println("taper q pour quitter");
            BufferedReader clavier = new BufferedReader(new InputStreamReader(System.in));
     
            try
                {
                String lu = clavier.readLine();
                while(!lu.equals("q"))
                    {
                    }
                }
            catch (IOException e)
                {
                }
            portCom1.stopThread();
            }
     
        /*------------------------------------------------------------------*\
         |*                            Méthodes Private                        *|
         \*-----------------------------------------------------------------*/
        private static void attendre(int temps)
            {
            try
                {
                Thread.sleep(temps);
                }
            catch (InterruptedException e)
                {
                }
            }
     
        /*------------------------------------------------------------------*\
         |*                            Attributs Private                        *|
         \*-----------------------------------------------------------------*/
        private CommPortIdentifier portId;
     
        private SerialPort serialPort;
     
        private BufferedReader fluxLecture;
     
        private boolean running;
     
        private OutputStream out;
     
        }
    Le problème est quand j'envoi ma donnée... C'est à dire la commande p!
    Svpl aidez moi.

    Bonne fin de journée

  2. #2
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Oui et le problème est ? Le pc reboot, la carte com grille, l'appli se termine, une exception est levée ? Va falloir être plus précis
    Et pour commencer, un petit détour sur les tutoriaux des bases du langage serait bienvenu. ON NE LAISSE JAMAIS UN BLOC CATCH VIDE !

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Bonsoir,
    J'ai modifier mes bloc catch. Aucune exception n'est levée.
    Le problème est que je communique avec un périphérique qui codé et qui m'envoi du code en c. Moi je travaille en java.Du coup, je n'arrive pas a récupperer ce qu'il m'envoi. Il ne met pas de caractère de fin de chaine et je ne connais pas la longueur de la chaine. Comment faire pour récupérer la donnée en java via le port rs-232 quand c'est une suite binaire que l'on a et qu'en plus, on ne connait pas la longueur de cette chaine?
    Si qqln a une idée?
    Bonne soirée
    a+

  4. #4
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    j'ai pas analysé ton code en entier mais déjà je remarque cette grosse faute d'algo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    String lu = clavier.readLine();
                while(!lu.equals("q"))
                    {
                    }
    --> si tu ne tape pas "q" dès le départ tu rentre dans une boucle inifinie...
    Pour lire au clavier généralement je fais quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    String reponse="";
    while(!reponse.equalsIgnoreCase("q")){
       reponse=clavier.readLine();
       // TRAITEMENT DE LA REPONSE
    }

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Hello,
    Merci, mais le bug n'est pas la. Ce bout de code marche parfaitement.
    Quand je presse sur q, le programme s'arrete. C'est effectivement une boucle infini, mais j'ai un thread à coté...
    Le problème est que je n'arrive pas recevoir des bytes d'un appareil.
    L'appareil en question ne renvoit pas de délimiteur de fin de chaine et en plus la longueur des chaines sont en fonction de ce que je lui demande... Donc c pas pratique du tout... Car je peux recevoir une centaine de chaine différente.

  6. #6
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    ...
    Si tu tiens à utiliser ce code pourrave, c'est ton problème.

    Si tu veux qu'on t'aide, poste nous ton code.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    C'est bon, j'ai réussi à trouver une solution,
    J'ai simplement modifier la classe dataOutputStream.
    Merci de votre aide
    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JNI] Lecture/Ecriture sur port série RS232
    Par jabesq dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 20/09/2010, 17h01
  2. Ecriture sur un port com
    Par sylviek dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 10/10/2006, 07h54
  3. C -> Perl : Lecture ecriture sur des Sockets
    Par caesarvanou dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 05/05/2006, 11h20
  4. lecture & ecriture sur le port serie
    Par anouar dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 08/07/2005, 17h15
  5. Lecture / écriture sur un port com
    Par dorian833 dans le forum C++
    Réponses: 7
    Dernier message: 07/07/2005, 15h20

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