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 envoi Serial javax.comm


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 70
    Par défaut Problème envoi Serial javax.comm
    Bonjour,

    Voici le code au plus simple, afin de se connecter au port série :
    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
    public class SerialPortManager 
    {
    	private Win32Driver w32Driver = new Win32Driver();
    	private SerialPort portSerie;
     
    	private SerialPortManager() 
    	{
    		w32Driver.initialize();
    	}
     
        private static class Loader 
        {
            private static final SerialPortManager instance = new SerialPortManager();
        }
     
        public static SerialPortManager getInstance() 
        {
            return Loader.instance;
        }
     
     
       public SerialPort getPort()
       {
    		CommPortIdentifier portId=null;
    		try
    		{
    			portId=CommPortIdentifier.getPortIdentifier("COM1");
    		}
    		catch(NoSuchPortException ex)
    		{
    			System.err.println("Impossible to connect to the port");
    		}
     
    		try 
    		{
    			portSerie=(SerialPort)portId.open("RealTime", 2000);
    		}
    		catch (PortInUseException ex) 
    		{
    			System.err.println("Port already in use.");
    		}
     
    		return portSerie;
       }
     
       public SerialPort putConfiguration(SerialPort port)
       {	   
    	   try
    	   {
    			port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
    			port.setSerialPortParams(115200, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
    	   }
    	   catch (UnsupportedCommOperationException ex)
    	   {
    			System.err.println("Impossible to configure the port that way.");
    	   }
     
    	   return port;
       }    
     
    }
    Ici j'envoi une commande à l'appareil branché ("start") par exemple et je lis en boucle les résutats. Le problème est qu'il semble y avoir un problème au niveau de l'envoi de la commande car la carte ne répond rien. Si je fais un start à partir d'un hyperterminal, alors là l'appareil me retourne des valeurs.

    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
    public void getDataFromSerial() throws InterruptedException, IOException
    	{
    		String message;
    		SerialPortManager serialPortManager = SerialPortManager.getInstance();
    		SerialPort serialPort = serialPortManager.getPort();
    		serialPort = serialPortManager.putConfiguration(serialPort);
     
    		InputStreamReader inputSerial = new InputStreamReader(serialPort.getInputStream());
    		BufferedReader bfInSerial = new BufferedReader(inputSerial);
    		OutputStream outputSerial = serialPort.getOutputStream();
    		PrintWriter pwSerial = new PrintWriter(outputSerial);
     
    		InputStreamReader reader = new InputStreamReader(System.in);
    		BufferedReader bReader = new BufferedReader(reader);
    		String s = bReader.readLine();
     
    		pwSerial.println(s);
    		pwSerial.flush();
     
    		while(true)
    		{	
    			try 
    			{
    				System.out.println("Reading serial..." );
    				try
    				{
    					while((message = bfInSerial.readLine())!= null)
    					{
    						if(!message.equals(" "))
    						{
    							System.out.println("Serial message: " + message + " (length: " + message.length() + ")");
    						}
    					}
    				}
    				catch (IOException ioe) 
    				{
    					System.err.println("Impossible to read from the serial port" );
    					serialPort.close();
    					inputSerial.close();
    					outputSerial.close();
    				}
    			}
    			catch (IOException ex) 
    			{
    				System.err.println("Cannot instanciate the serial connection");
    			}
    		}			
    	}

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 70
    Par défaut
    Finalement le problème semble venir de la configuration de la carte. Avec un seul caractère envoyé (par exemple "s"), cela fonctionne.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 342
    Par défaut
    test ta carte avec un terminal.

    envoi start et tu verra bien si tu a une reponse

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 70
    Par défaut
    Citation Envoyé par rolfone Voir le message
    test ta carte avec un terminal.

    envoi start et tu verra bien si tu a une reponse
    Citation Envoyé par Fabthebug Voir le message
    Si je fais un start à partir d'un hyperterminal, alors là l'appareil me retourne des valeurs.
    Il n'empêche que j'ai toujours des problèmes... j'ai changé 'Start' par 's' donc plus de gestion de string à envoyer caractère par caractère. Mais à partir d'un petit prog VB, lorsque j'envoi 's' (ou à partir d'un terminal), la carte répond bien. Par contre en Java RIEN.

    PS : J'ai testé plein de trucs différents. Tentative d'envoi directement dans le OutputStream, dans un PrintWriter et un BufferWriter. Rajouter un "\r\n", rajouter un println() qui donne le même résultat que "\r\n" mais rien n'y fait.

    PS2 : nouvelle tentative à mettre à mon crédit, PrintStream, et là surprise... ah non en fait toujours rien.


    En fait ce paramètre : SerialPort.PARITY_NONE était en SerialPort.PARITY_EVEN !!! Tant de temps perdu pour ça ! (bah c'est l'informatique)

    Merci tout de même à ceux qui ont pris le temps de me lire et de réfléchir.

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

Discussions similaires

  1. Problème Win32Driver & API javax.comm
    Par a-mix dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 04/05/2013, 21h38
  2. envoi de fax à l'aide de javax.comm
    Par jijaLaClasse dans le forum Multimédia
    Réponses: 1
    Dernier message: 04/11/2007, 12h57
  3. [API javax.comm] Problème getInputStream
    Par goddet dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 16/05/2007, 14h32
  4. [API javax.comm] Problème bibliothèque
    Par goddet dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 20/03/2007, 13h40
  5. [javax.comm] Problème au lancement
    Par Tocraz dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 06/01/2007, 01h39

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