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 :

[JNI] Lecture/Ecriture sur port série RS232


Sujet :

Entrée/Sortie Java

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut [JNI] Lecture/Ecriture sur port série RS232
    Bonjour,

    Dans le cadre d'un projet, je dois développer un programme qui peut lire et écrire des informations sur le port série. L'interface graphique est en Java et le code qui s'occupe de la communication est en C++ (la bibliothèque javax.comm n'étant plus supporté sous windows, et le code ayant été débuté dans ces languages)

    Le problème est que dès l'ouverture du port COM j'ai un souci. J'utilise l'instruction CreateFile mais malheureusement celle-ci me renvoi une erreur INVALID_HANDLE_VALUE lorsqu'elle est exécuté via JNI (aucun problème ailleurs)
    Je ne peux donc pas communiquer avec mes ports

    je vous mets en pièce jointe code java et C du projet

    d'avance merci
    Fichiers attachés Fichiers attachés

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    bonjour Mr jabesq

    j'ai réaliser pour mon projet fin d'étude "RFID" et j'ai travailler avec le port série, tu va trouvé dans les pièces joint les 2 classe envoi et réception + javax.comm.properties + win32com.dll que tu doit ajouter ce dernier ds System32 et javax.comm.properties dans la Jre, et j'espert qu'il va marcher pour vous
    Fichiers attachés Fichiers attachés

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 3
    Points : 4
    Points
    4
    Par défaut problème avec l'installation de JavaComm
    Bonjour,

    Dans le cadre d’un stage je suis amenée à travailler avec des modules ADAM qui communiquent avec mon PC par un port COM (RS-232/485). Je dois écrire un programme en Python permettant de communiquer avec ces modules. Pour cela je dois utiliser le module « serial » de Python.

    Or pour pouvoir utiliser ce module il est noté qu’il faut posséder « JavaComm ». J’ai donc téléchargé comm.jar , win32com.dll et javax.comm.properties mais je ne sais pas dans quels répertoires les placer. De plus je n’ai pas d’environnement Java, est-ce un problème ? (Je n’ai jamais programmé en Java dans le passé).

    Je suis complètement débutante dans la matière et je suis un peu perdue…
    Merci d’avance pour vos réponses.

  4. #4
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 126
    Points : 46
    Points
    46
    Par défaut
    salut ,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    j'ai réaliser pour mon projet fin d'étude "RFID" et j'ai travailler avec le port série, tu va trouvé dans les pièces joint les 2 classe envoi et réception + javax.comm.properties + win32com.dll que tu doit ajouter ce dernier ds System32 et javax.comm.properties dans la Jre, et j'espert qu'il va marcher pour vous
    quant je complie il m'a dit il na pas le class main ?

  5. #5
    Membre expérimenté

    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2009
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 553
    Points : 1 672
    Points
    1 672
    Par défaut
    Mais pourquoi s'obstiner avec javax.comm alors qu'il y a RXTX ???

  6. #6
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 126
    Points : 46
    Points
    46
    Par défaut
    salut
    je utilise ce code pour envoyer sur le port res232 la lettre "d", et recevoir normalement ( mon but) un login et mot de passe mais je sais pas comment programmer cette partie ,
    voila mon code ( j'ai ajouter .trim() pour
    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
     
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.comm.*;
    import com.sun.comm.Win32Driver;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.*;
    public class rs232 implements Runnable, SerialPortEventListener {
        static CommPortIdentifier portId;
    static CommPortIdentifier saveportId;
    static Enumeration        portList;
    InputStream           inputStream;
    SerialPort           serialPort;
    Thread           readThread;
    static OutputStream      outputStream;
    static boolean        outputBufferEmptyFlag = false;
     
    public static void main(String[] args) {
     boolean           portFound = false;
     String           defaultPort;
     
     Win32Driver w32Driver= new Win32Driver();
     w32Driver.initialize();
     
     //déterminer le nom du port série sur plusieurs systèmes d'exploitation
     String osname = System.getProperty("os.name","").toLowerCase();
     if ( osname.startsWith("windows") ) {
             // windows
     defaultPort = "COM1";
     
     } else {
     System.out.println("Sorry, your operating system is not supported");
     return;
     }
     
     if (args.length > 0) {
     defaultPort = args[0];
          }
    System.out.println("Set default port to "+defaultPort);
    //ports analyser et si le port par défaut est trouvé, initialisé le lecteur
    portList = CommPortIdentifier.getPortIdentifiers();
    while (portList.hasMoreElements()) {
    portId = (CommPortIdentifier) portList.nextElement();
    if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
    if (portId.getName().equals(defaultPort)) {
    System.out.println("Found port: "+defaultPort);
    portFound = true;
    // init reader thread
    rs232 reader = new rs232();
        }
      }
    }
    if (!portFound) {
    System.out.println("port " + defaultPort + " not found.");
          }
     
       }
    public void initwritetoport() {
    //initwritetoport () suppose que le port a déjà été ouvert et
    //initialisé par "nulltest publique ()"
    try {
    // obtenir le flux sortant
    outputStream = serialPort.getOutputStream();
    } catch (IOException e) {}
    try {
    // activer le notifiant OUTPUT_BUFFER_EMPTY
    serialPort.notifyOnOutputEmpty(true);
    } catch (Exception e) {
             System.out.println("Error setting event notification");
             System.out.println(e.toString());
             System.exit(-1);
          }
     
       }
         public void writetoport(String s) {
          System.out.println("Writing \""+s+"\" to "+serialPort.getName());
          try {
     // Donnez votre chaîne sur le port série
             outputStream.write(s.getBytes());
          } catch (IOException e) {}
       }
    public rs232() {
          // initalize port série
          try {
             serialPort = (SerialPort) portId.open("SimpleReadApp", 2000);
          } catch (PortInUseException e) {}
     
          try {
             inputStream = serialPort.getInputStream();
          } catch (IOException e) {}
     
          try {
             serialPort.addEventListener(this);
          } catch (TooManyListenersException e) {}
     
          // activate the DATA_AVAILABLE notifier
          serialPort.notifyOnDataAvailable(true);
     
          try {
      // définir les paramètres de port
      serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8,
      SerialPort.STOPBITS_1,
      SerialPort.PARITY_NONE);
          } catch (UnsupportedCommOperationException e) {}
     
          // commencer à lire le fil
          readThread = new Thread(this);
          readThread.start();
     
       }
     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:
    // nous obtenons ici si les données ont été reçues
    	         byte[] readBuffer = new byte[20];
    	         try {
    // données lues
    	            while (inputStream.available() > 0) {
    	               int numBytes = inputStream.read(readBuffer);
    	            }
    // données d'impression
    	            String result  = new String(readBuffer).trim();
    	            System.out.println("Read: "+result);
    	         } catch (IOException e) {}
     
    	         break;
    	      }
    	   }
         public void run() {
     
    // première chose que dans le fil, on initialise l'opération d'écriture
          initwritetoport();
     // écrit une chaîne dans le port, le serialEvent vais le lire
        	     writetoport("d");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException ex) {
                Logger.getLogger(rs232.class.getName()).log(Level.SEVERE, null, ex);
            }
    }
    }
    par exemple si on tappe de l'autre pc :azerty à l'aide de hyperTerminal
    dans le console de l'interface graphique de mon application :

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut java et lecteur cd/dvd
    bonsoir exuser mais me demandais s'il existe une classe en java pour gerer le lecteur cd

Discussions similaires

  1. Lecture écriture sur port série
    Par lio59 dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 06/02/2011, 12h49
  2. Ecriture sur port série
    Par jackk dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 09/03/2009, 16h03
  3. ecriture sur port série
    Par badmec10 dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 07/06/2007, 10h21
  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. [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