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

API standards et tierces Java Discussion :

RS232 en Java


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Par défaut RS232 en Java
    Bonjour,

    voila je developpe un programme en JAVA qui est une passerelle:

    le programme doit fair :

    recevoir sur le COM11 => l'annaliser => renvoi sur COM3 (dans un premier temp)

    mon probleme et le suivant : mon programme ne reçoi pas les bonnes valeurs qui arrive du Port com11 les valeurs en hex qui arrive sont "81 81 59 41 42 54 0D"(jutilise un programe "Free Serial Port Monitor")
    et mon programme il reçoi " 7D 7D 59 41 42 54 0D"
    jutilise javax.comm

    mon code de demmarage (en parti)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fluxLecture2 =new BufferedReader(new InputStreamReader(serialPort2.getInputStream()));
    mon code de reception
    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
    public void serialEvent(SerialPortEvent event) {
    		System.out.println("reception2 com11");
    		//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 :
    				char codeBarre2='0'; 
    				try {
    					//lecture du buffer et affichage
    					codeBarre2 = (char) fluxLecture2.read();
    					System.out.println(codeBarre2);
    				} catch (IOException e) {
    				}
    				//RS232_evenement.envoi_port1(codeBarre2);
     
     
    				break;
    		}
    	}
    je voi pas où se trouve mon problème!!!

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Par défaut
    je cherche toujours, qui peut m'aidée??

    je vien de voire que je n'arrive pas a recevoire les valeur hexa de 80 à 9F les autre je n'est pas de problème.


    0 => 7F mon programe me retourne les bonnes valeurs
    80 => 9F valeur bizard (ex pour 80 mon programe me retoure (en int) la valeur 8364, pour 81 la valeur est 65533)
    A0 => FF mon programe me retourne les bonnes valeurs.

  3. #3
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    bonjour,

    le COM11 et le port série qui envoie tes données vers le COM11 ont les même propriétés (vitesse, bits de données, bit de stop, parité, contrôle de flux, etc.) ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 96
    Par défaut
    Bonjour,

    le port de réception est-il ouvert avant que le port d'émission n'envoie les données ?

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Par défaut
    Désoler pour la réponse tardive 1mois après lol, mais g trouvé mon problème.
    Alors je v vous expliquer pk sa marche pas avec ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    codeBarre2 = (char) fluxLecture2.read();
    la réception et bon mais voila je mon programme converti se qu'il reçois en char donc table ASCII et comme dans la table ASCII il n'y a pas de caractère de pour les valeur hexa de 80 à 7F donc on a une belle exception.
    Pour résoudre se problème le code se complique mais marche bien lol
    Déclaration de la variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private DataInputStream fluxLecture;
    Initialisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try {
    			outStream = serialPort.getOutputStream();
    			fluxLecture = new DataInputStream(serialPort.getInputStream());
    		} catch (IOException e) {
    		}
    Réception

    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
    public void serialEvent(SerialPortEvent event) {
    		//System.out.println("reception com3");
    		//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 :
    				byte buffer[] = new byte[25];
    				 int n=0, offset=0, i=0;
    				try {
     
    		            while(true) {
    		                i = fluxLecture.available();//retourne le nb d'octets qui peut être lus
     
    		                n = fluxLecture.read(buffer, offset, i); //nb d'octets actuellement lus
     
    		            if (n<=0 || n == i) break;
    		                 offset+=n;
    		                 //System.out.println(n);
    		                        }
     
    		            } catch (IOException e) {
    		        }
    Merci de vos réponses

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    le type char java n'a rien a voir avec les tables ascii, c'est un entier de 16 bits non signé. Et ce n'est pas parce que vous avez stocké votre int dedans que ça change quoi que ce soit à la valeur binaire stockée.
    Démonstration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Main {
     
    	public static void main(String[] args) throws IOException, ParseException {
    		int i = 0x95;
    		char c = (char)i;
    		System.out.printf("conversion de 0x%X deviens 0x%X (%c)\n",i,(int)c,c);
    	}
     
    }
    Donne bien
    conversion de 0x95 deviens 0x95 (•)
    La valeur est conservée. Par contre evidement si vous prenez votre char et que vous essayez de l'écrire tel quel dans une Writer, c'est un autre problème, celui de l'encodage

Discussions similaires

  1. Communication RS232 java
    Par makia42 dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 14/04/2010, 14h23
  2. Liaison RS232 java
    Par chepac dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 10/04/2010, 08h37
  3. java et rs232
    Par pikamo dans le forum Général Java
    Réponses: 0
    Dernier message: 31/03/2010, 18h09
  4. communication java RS232
    Par yvonne dans le forum Général Java
    Réponses: 1
    Dernier message: 15/10/2009, 12h38
  5. RS232 via UartBridge CP2101: vitesse maximale Java en ecriture
    Par suppilou69 dans le forum Entrée/Sortie
    Réponses: 19
    Dernier message: 11/06/2008, 09h26

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