Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1105 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Port serie RS232 recuperer une frame ...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Port serie RS232 recuperer une frame ...

n°1330841
wfs-tibal
Posté le 23-03-2006 à 10:47:33  profilanswer
 

Salut a tous,
voila j ai un probleme de port serie... je m'arrache les cheveux depuis plusieurs semaines sans resultat.
Je dois recuperer une frame venant d'un chronometre relié a mon ordi via le port serie(RS232).
 
J'ai instaler les api et meme créé un programme pour voir les port serie, tt marche les ports serie sont reconnu, mais je travail sur le port serie COM1 et la pas moyen de recuperer quelque chose.
 
Voici les parametres du chrono :
Liaison serie Type RS232 sans controle de flux. 1200bauds, 8 bit, 1 stop bit, pas de parité.
 
Exemple de Trame envoyé par le Chronometre : (9 octets par frame)  
FA+00+11+12+02+24+96+EE+OD
FA = debut de trrame  
OD = Fin de trame
Le reste sont des données de chronometrage...
 
Voila je voudrais savoir si quelqu'un pourrais m'aider a trouver un code permettant de recuperer les données du chrono via le port serie RS232, en sachant que ses donnée peuvent arriver n'importe quand lorsqu'on a effectué la liaison au COM1.
 
Merci a tt ceux qui pourront m'aider car j'ai peur de finir chauve, en plus je ne suis pas trés experimenté en Java...

mood
Publicité
Posté le 23-03-2006 à 10:47:33  profilanswer
 

n°1331052
wfs-tibal
Posté le 23-03-2006 à 14:23:09  profilanswer
 

Sa y es j'ai reussi a faire fonctionner le port serie !
Je ne finirais pas chauve !
 
voila le code pour ceux qui serait dans le meme cas que moi ...
 

Code :
  1. package portserie;
  2. import javax.comm.*;
  3. import java.io.*;
  4. import java.util.*;
  5. /*
  6. Cette classe permet de tester les ports séries disponibles
  7. en les listant puis en créant un stream d'entrée et de sortie
  8. */
  9. public class test{
  10. CommPortIdentifier portId;
  11. BufferedReader in;
  12. PrintWriter out;
  13. SerialPort serialPort;
  14. /*
  15. Constructeur de la classe test qui prend en paramètre le port série à utiliser.
  16. Dans un premier temps on liste les ports disponibles sur le pc
  17. */
  18. public test (String com)
  19. {
  20. System.out.println("liste des ports série disponibles:" );
  21. listePortsDispo();
  22. try
  23. {
  24. // ouverture du port série:
  25. portId=CommPortIdentifier.getPortIdentifier(com);
  26. serialPort=(SerialPort)portId.open("Envoi",2000);
  27. // on sélectionne tous les paramètres de la connexion série:
  28. serialPort.setSerialPortParams(1200,SerialPort.DATABITS_8,
  29.             SerialPort.STOPBITS_1,
  30.             SerialPort.PARITY_NONE);
  31. System.out.println("Ouverture du port "+com);
  32. // pour lire avec des streams:
  33. in=new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
  34. // Teste de lecture sur le port série
  35. String codeBarre = new String();
  36. try {
  37.  //lecture du buffer et affichage
  38.  codeBarre = (String) in.readLine();
  39.  System.out.println(codeBarre);
  40. } catch (IOException e) {
  41. }
  42. in.close();
  43. }
  44. catch (Exception e)
  45. {
  46. e.printStackTrace();
  47. }
  48. }//fin constructeur
  49. public void listePortsDispo()
  50. {
  51. System.err.println("recherche..." );
  52. Enumeration portList=CommPortIdentifier.getPortIdentifiers();
  53. if (portList==null)
  54. {
  55. System.err.println("Aucun port de communication détecté" );
  56. return;
  57. }
  58. while (portList.hasMoreElements())
  59. {
  60. portId=(CommPortIdentifier)portList.nextElement();
  61. System.out.println("* "+portId.getName());
  62. } //fin while
  63. } //fin de la methode listePortsDispo()
  64. /*
  65. Methode main qui permet de tester notre classe de tester en ouvrant une connexion sur le port COM1.
  66. */
  67. public static void main(String args[])
  68. {
  69. new test ("COM1" );
  70. }//fin du main
  71. }//fin de la classe

n°1331554
blaise_lap​orte
Posté le 24-03-2006 à 11:19:13  profilanswer
 

sinon, à tout hasard, un lien qui m'a pas mal servie sur l'utilisation du port série via javax.com:
 
http://christophej.developpez.com/ [...] /javacomm/
 
Un trés bon tuto trés bien fais

n°1332388
hibougarou
Posté le 26-03-2006 à 10:45:15  profilanswer
 

Bonjour
 
lors du telechargement de cette librairie, il est ecrit qu'elle est disponible pour les machines solaris et linux. Marche - t- elle sous windows? si non, connaissez vous une librairie JAVA pour utiliser le port serie (ou le bluetooth) sous windows?
 
Merci de votre aide.
 
Hibougarou

n°1338210
nico66
Posté le 03-04-2006 à 21:24:05  profilanswer
 

Bonjour,
 
J'ai récupéré le code proposé par  ' wfs-tibal ', que je remercie d'ailleurs  :hello:.
Mon problème après l'exécution, est qu'il n'arrive même pas à lister les ports de mon PC !
Je ne connecte rien sur le port COM1 de mon PC car je ne veux, pour le moment, que lister les ports dispo de mon PC ! Mais sans succès... :fou:  :fou:  :fou:  
 
Ma fenêtre console m'affiche ça :

Code :
  1. liste des ports série disponibles:
  2. recherche...
  3. Exception in thread "main" java.lang.NullPointerException
  4. at javax.comm.CommPortEnumerator.hasMoreElements(CommPortIdentifier.java:568)
  5. at ModeEvenement.listePortsDispo(ModeEvenement.java:77)
  6. at ModeEvenement.<init>(ModeEvenement.java:26)
  7. at ModeEvenement.main(ModeEvenement.java:92)


 :heink:  :heink:  
 
Merci de m'aider  :love:  :love:  
 
 

n°1339561
blaise_lap​orte
Posté le 05-04-2006 à 12:25:06  profilanswer
 

D'aprés ton Exception, je dirais que tu travailles sur un liste vide.
 
voici le code que j'ai utilisé pour mon cas avec javax.comm
 
Ce code n'est pas brillant brillant, je l'ai fais quand je debuttait en java.
En esperant qu'il puisse vous être utile
 

Code :
  1. import javax.comm.*;
  2. import com.sun.comm.Win32Driver;
  3. import java.io.*;
  4. import java.util.*;
  5. public class CommunicationRail{
  6. private SerialPort sPort; //le port série   
  7. private CommPortIdentifier portId;//identifiant du port
  8. private Win32Driver w32Driver;
  9. private String port = "COM1";
  10. boolean autorisationCommunique = true;
  11. boolean communication;
  12. /**constructeur initialise le driver de la com et repertorie toutes les ports present sur l'ordinateur.
  13. ATTENTION si ce constructeur est appeller une deuxieme fois, les ports détecté s'ajouteront à ceux détéctés lors du premier appelle.  
  14. */
  15. public CommunicationRail(){
  16.  w32Driver = new Win32Driver();
  17.  w32Driver.initialize();
  18. }
  19. /**repertorie les ports serie utilisable par le rail.
  20. @return un tableau de string de tout les noms des ports que peut utiliser le rail.
  21. */
  22. public String[] getListePortRail(){
  23.  ArrayList tableauPortId = new ArrayList();
  24.  Enumeration listPort = CommPortIdentifier.getPortIdentifiers();
  25.  while( listPort.hasMoreElements()){
  26.   tableauPortId.add(listPort.nextElement());
  27.  }
  28.  int i;
  29.  for (i = 0; i<tableauPortId.size(); i++){
  30.   if ((((CommPortIdentifier)tableauPortId.get(i)).getPortType())!= CommPortIdentifier.PORT_SERIAL){
  31.    tableauPortId.remove(i);
  32.    i--;
  33.   }
  34.  }
  35.  i = tableauPortId.size();
  36.  String []listePortRail = new String[i];
  37.  CommPortIdentifier portId;
  38.  for (i = 0; i<tableauPortId.size(); i++){
  39.   portId = (CommPortIdentifier)tableauPortId.get(i);
  40.   listePortRail[i]= portId.getName();
  41.  }
  42.  return listePortRail;
  43. }
  44. }

n°1676824
bechforum
Posté le 25-01-2008 à 15:27:05  profilanswer
 

Pas de problème pour compiler, mais l'exécution (sous Linux) ne marche pas.
 
Quelques éléments de configuration :
 
java est installé dans le répertoire : /usr/lib/j2sdk1.4-sun/bin (donc version 1.4)
 
2 répertoires sur mon compte utilisateur :
- commapi : est le répertoire de la classe communication
- java est le répertoire contenant le programme de test ci-dessus
 
Depuis le répertoire java, la compilation marche en faisant :
javac -classpath ../commapi/jar test.java
 
Il a juste fallu utiliser la commande jar pour désarchiver le fichier .jar (que j'ai laissé dans son répertoire)
 
Jamais réussi à exécuter.
 
Quelques essais :
 
java test
Exception in thread "main" java.lang.NoClassDefFoundError: test (wrong name: portserie/test)
        at java.lang.ClassLoader.defineClass0(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:539)
        (...)
Normal, on n'a rien indiqué pour trouver les classes gérant le port série
 
java -classpath ../commapi/jar test
Exception in thread "main" java.lang.NoClassDefFoundError: test
(encore normal)
 
java -classpath ../commapi/jar:. test
Exception in thread "main" java.lang.NoClassDefFoundError: test (wrong name: portserie/test)
        at java.lang.ClassLoader.defineClass0(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:539)
        (...)
 
java -classpath .:../commapi/jar test
Exception in thread "main" java.lang.NoClassDefFoundError: test (wrong name: portserie/test)
        at java.lang.ClassLoader.defineClass0(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:539)
        (...)
 
java -classpath .:$HOME/commapi/jar test
idem
 
java -classpath .:../commapi/jar/com/sun/comm test
toujours pareil
 
Même problème en utilisant une variable d'environnement $classpath
 
Je ne sais plus comment faire pour faire tourner ce programme

n°1982918
pikamo
Posté le 11-04-2010 à 11:58:23  profilanswer
 

salut a tous ,  
wfs-tibal , je veux utiliser ton code pour reçu par le port serie ces données:
login = pika ; password = 1111  
normalement c'est ca lapartie a motifier  
# // pour lire avec des streams:
# in=new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
#
# // Teste de lecture sur le port série
#
# String codeBarre = new String();
# try {
#  //lecture du buffer et affichage
#  codeBarre = (String) in.readLine();
#  System.out.println(codeBarre);
# } catch (IOException e) {
# }


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Port serie RS232 recuperer une frame ...

 

Sujets relatifs
récuperer une seule valeur via une requete sqlProtocole de communication par le port série
Ouvrir un portRécupérer la valeur des bouttons radio
recuperer un nom de fichier sans extension dans un for[Résolu] Changement de port sur une page web
[HTML] [PHP] problème d'affichage dans une framerequête mysql pour récupérer plusieurs valeurs sur 1 champ
[RESOLU] Recuperer des champs de formulaire "inconnus" 
Plus de sujets relatifs à : Port serie RS232 recuperer une frame ...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR