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 :

Problème de réception RS-232 avec Javacomm


Sujet :

Entrée/Sortie Java

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Problème de réception RS-232 avec Javacomm
    Bonjour,

    J'ai débuté la programmation d'une application sous Windows avec la librairie Javacomm pour communiquer sur une liaison série RS-232 avec mon PIC.
    Pour l'instant je n'ai pas encore le câble série, ni de circuit pour adapter les sorties/entrés du PIC avec celle de la liaison RS-232 (MAX232) donc je ne fais que simuler sur mon PC. Pour cela j'ai installé Virtual Serial Port Driver qui me permet d'émuler deux port RS-232 liés virtuellement. Le programme du PIC est émulé sous Real Pic Simulator et est lié au port "COM2", quant à mon appli java, elle tourne sur le port "COM1".

    Le programme du PIC envoie en boucle des données de 0 à 255 (0x00 à 0xff) toutes les 10ms :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void main ()
    {
         pic_init();
     
         RS232_init(1, 0, 0);
     
         while(1) {
              for (i=0; i < 256; i++) {
                  RS232_send(i);
                  Delay_ms(10);
               }
         }
    }
    Mon appli Java ne fait que réceptionner les données et les afficher dans la console :

    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
    //initialisation du driver	
    		Win32Driver w32Driver= new Win32Driver();
    		w32Driver.initialize();
     
    		Rs232 flux = new Rs232("COM1", "Connection", 2400, 8, 0, 0);
     
    		System.out.println(flux.toString());
     
    		while(true) {
     
    			System.out.println(flux.receive());
     
    			try {
    				Thread.sleep(10);
    			} catch (InterruptedException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    Le méthode receive :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public int receive() {
     
    		int reponse = 256;
     
    		try {
    			reponse = this.bufRead.read();
    			this.dataAvaible--;
     
    		} catch (IOException e) {	
    		}
     
    		return reponse;
    	}
    Le problème est que je réceptionne bien tous les nombres, sauf de 128 à 159 inclus, soit de 10000000 à 10011111, le reste est parfait. Auriez vous une explication à ce problème ?

    Voila ce que j'obtiens à la place des bonnes données :

    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
    124
    125
    126
    127
    8364
    65533
    8218
    402
    8222
    8230
    8224
    8225
    710
    8240
    352
    8249
    338
    65533
    381
    65533
    65533
    8216
    8217
    8220
    8221
    8226
    8211
    8212
    732
    8482
    353
    8250
    339
    65533
    382
    376
    160
    161
    162
    163
    164
    Je comprend plus rien Enfin peut être que ça merde juste en software avec toute ces émulations, et que ça marchera en hardware

  2. #2
    Membre confirmé
    Avatar de william44290
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juin 2009
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 400
    Points : 575
    Points
    575
    Par défaut
    Utilise hyperTerminal pour vérifier ton émission.

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    J'utilise déjà chacun des deux ports en software (real PIC simulator et l'appli java) donc je ne peux pas utiliser HyperTerminal

    Mais après plusieurs heures de recherches et de tests j'ai enfin pu résoudre le problème Il s'agissait enfaite d'un problème de buffer, qui se basait un codage de caractère UTF-8 et donc de 128 à 159 il n'y a aucun caractère de défini, d'après ce que j'ai pu comprendre.

    J'ai remplacé cette ligne à l'initialisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.bufRead = new BufferedReader(new InputStreamReader(port.getInputStream()));
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.bufRead = new InputStreamReader(port.getInputStream(), "ISO-8859-1")
    La ligne que j'ai remplacé est issue du tutoriel venant de http://christophej.developpez.com/tu...java/javacomm/ Il faudrait peut être le modifier ou insérer une petite note d'information sur cela

    Par contre, une chose que je n'ai toujours pas compris, c'est pourquoi mettre un buffer dans un buffer, new BufferedReader(new InputStreamReader(...))

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    Super merci beaucoup !!

    (j'avais exactement le même problème que toi).

    Je rajouterai par contre qu'il faut également changer le type de l'instance (même si ca coule de source).


    Encore merci

Discussions similaires

  1. Réponses: 0
    Dernier message: 16/12/2010, 12h28
  2. Problème d'envoi / réception de mails avec Exchange
    Par cynoq dans le forum Exchange Server
    Réponses: 0
    Dernier message: 09/07/2010, 17h37
  3. [Toutes versions] Problème d'envoi / réception de mails avec Exchange
    Par cynoq dans le forum Outlook
    Réponses: 0
    Dernier message: 09/07/2010, 11h49
  4. problème avec Javacomm
    Par padmasana dans le forum Entrée/Sortie
    Réponses: 0
    Dernier message: 01/04/2010, 16h37
  5. Problème de réception de mail avec java mail
    Par osiris23 dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 26/05/2008, 21h43

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