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 :

[BufferedWriter] Cadencer l'envoi des données


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de Torg666
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 230
    Par défaut [BufferedWriter] Cadencer l'envoi des données
    Bonjour,
    J'ai une carte électronique avec un Bus RS485 à qui je dois envoyer des commande.
    Mon problème, c'est que apperement elle est un peu lente. Les commandes que je lui passe "à la main" marche. Par contre dès que je lui envoi, via un bufferedwriter une commande elle ne fonctionne presque jamais.
    Je voudrais lui envoyer la commande caractere par caractere, en mettant une "pause" entre chaque envoi.
    J'ai déjà essayer avec:
    Thread.sleep(10);=>java.io.IOException: write error
    this.wait(10);=> java.lang.IllegalMonitorStateException
    Je vois pour l'instant pas d'autre solution pour mettre des pauses entre chaque envoi...
    Quelqu'un aurai une idée?

    Merci d'avance!

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Torg666 Voir le message
    Thread.sleep(10);=>java.io.IOException: write error
    Thread.sleep() ne peut pas générer d'IOException, donc le problème vient d'ailleurs... Montre ton code et l'exception complète ainsi que la correspondance des lignes...


    Citation Envoyé par Torg666 Voir le message
    this.wait(10);=> java.lang.IllegalMonitorStateException
    wait() doit être utilisé pour de la synchronisation inter-thread, et non pas pour "attendre"...


    Enfin, penses que le BufferedWriter est bufférisé !!! Les données sont écrites par bloc !

    a++

  3. #3
    Membre expérimenté Avatar de Torg666
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 230
    Par défaut
    Je me sert de cette fonction pour lire les registres de la carte:
    (c'est la fonction originale)
    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
     
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.util.Calendar;
    import java.util.GregorianCalendar;
     
    import javax.comm.CommPortIdentifier;
    import javax.comm.NoSuchPortException;
    import javax.comm.PortInUseException;
    import javax.comm.SerialPort;
    import javax.comm.UnsupportedCommOperationException;
     
    import com.sun.comm.Win32Driver;
     
    public String getEtatRegistre(){
    		config=gestionnaire.getConfig();
    		w32Driver = new Win32Driver();
    		w32Driver.initialize();
    		try {
    			portId = CommPortIdentifier.getPortIdentifier(config.getPortCom());
    		} catch (NoSuchPortException nspe) {
    			nspe.printStackTrace();
    		}
    		try {
    			serialPort = (SerialPort) portId.open("FGEPesage", 2000);
    		} catch (PortInUseException piue) {
    			piue.printStackTrace();
    		}
    		try {
    			serialPort.setSerialPortParams(
    				config.getBauds(),
    				config.getDataBit(),
    				config.getBitStop(),
    				config.getParite());
    		} catch (UnsupportedCommOperationException ucoe) {
    			ucoe.printStackTrace();
    		}
    		try {
    			fluxLecture =new BufferedReader (new InputStreamReader(serialPort.getInputStream()));
    			fluxEcriture =new BufferedWriter(new OutputStreamWriter(serialPort.getOutputStream()));
    			String arret="W<201";
    			String demande="R1";
    			String demarrer="W<200";
    			char[] envoi;
    			envoi=arret.toCharArray();
    			for(int cpt=0;cpt<envoi.length;cpt++){
    				fluxEcriture.write(envoi[cpt]);
    				fluxEcriture.flush();
    				Thread.sleep(1000);
    			}
    			envoi=demande.toCharArray();
    			for(int cpt=0;cpt<envoi.length;cpt++){
    				fluxEcriture.write(envoi[cpt]);
    				fluxEcriture.flush();
    				Thread.sleep(1000);
    			}
    			etatRegistre=fluxLecture.readLine();
    			Thread.sleep(1000);
    			envoi=demarrer.toCharArray();
    			for(int cpt=0;cpt<envoi.length;cpt++){
    				fluxEcriture.write(envoi[cpt]);
    				fluxEcriture.flush();
    				Thread.sleep(1000);
    			}
    			if(etatRegistre.length()==149){
    				for(int cpt=0;cpt<etatRegistre.length()-7;cpt++){
    					checksum=checksum+etatRegistre.charAt(cpt);
    				}
    				checksum=65535-checksum;
    				anneemoisjour=etatRegistre.substring(2, 8);
    				heureminuteseconde=etatRegistre.substring(9, 15);
    				r0PGA1=etatRegistre.substring(16, 21);
    				r0PGA2=etatRegistre.substring(22, 27);
    				r1PGA1=etatRegistre.substring(28, 33);
    				r1PGA2=etatRegistre.substring(34, 39);
    				r2PGA1=etatRegistre.substring(40, 45);
    				r2PGA2=etatRegistre.substring(46, 51);
    				r3PGA1=etatRegistre.substring(52, 57);
    				r3PGA2=etatRegistre.substring(58, 63);
    				r4PGA1=etatRegistre.substring(64, 69);
    				r4PGA2=etatRegistre.substring(70, 75);
    				r5PGA1=etatRegistre.substring(76, 81);
    				r5PGA2=etatRegistre.substring(82, 87);
    				r6PGA1=etatRegistre.substring(88, 93);
    				r6PGA2=etatRegistre.substring(94, 99);
    			}else{
    				etatRegistre=null;
    			}
    		} catch (IOException ioe) {
    			ioe.printStackTrace();
    		} catch (InterruptedException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}finally{
    			try {
    				fluxEcriture.close();
    				fluxLecture.close();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
     
    			serialPort.close();
    		}
    		return etatRegistre;

  4. #4
    Membre expérimenté Avatar de Torg666
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 230
    Par défaut
    Résolu:
    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
     
    public String getEtatRegistre(){
    		etatRegistre="";
    		config=gestionnaire.getConfig();
    		w32Driver = new Win32Driver();
    		w32Driver.initialize();
    		try {
    			portId = CommPortIdentifier.getPortIdentifier(config.getPortCom());
    		} catch (NoSuchPortException nspe) {
    			nspe.printStackTrace();
    		}
    		try {
    			serialPort = (SerialPort) portId.open("FGEPesage", 2000);
    		} catch (PortInUseException piue) {
    			piue.printStackTrace();
    		}
    		try {
    			serialPort.setSerialPortParams(config.getBauds(),config.getDataBit(),config.getBitStop(),config.getParite());
    			try {
    				fluxLecture =new BufferedReader (new InputStreamReader(serialPort.getInputStream()));
    				fluxEcriture =new OutputStreamWriter(serialPort.getOutputStream());
    				//Arret de l'emission de données des capteurs
    				fluxEcriture.write((char)'w');
    				fluxEcriture.flush();
    				Thread.sleep(100);
    				fluxEcriture.write((char)'<');
    				fluxEcriture.flush();
    				Thread.sleep(100);
    				fluxEcriture.write((char)'2');
    				fluxEcriture.flush();
    				Thread.sleep(100);
    				fluxEcriture.write((char)'0');
    				fluxEcriture.flush();
    				Thread.sleep(100);
    				fluxEcriture.write((char)'1');
    				fluxEcriture.flush();
    				Thread.sleep(100);
    				fluxEcriture.write((char)'');
    				fluxEcriture.flush();
    				Thread.sleep(100);
    				//Demande d'envoi des registres
    				fluxEcriture.write((char)'r');
    				fluxEcriture.flush();
    				Thread.sleep(100);
    				fluxEcriture.write((char)'1');
    				fluxEcriture.flush();
    				Thread.sleep(100);
    				fluxEcriture.write((char)'');
    				fluxEcriture.flush();
    				//lecture des données transmises
    				char lire;
    				while((lire=(char)fluxLecture.read())!=''){
    					etatRegistre=etatRegistre+lire;
    				}
    				System.out.println(etatRegistre);
    				System.out.println(etatRegistre.length());
    				//Demarrage de l'emission de données des capteurs
    				fluxEcriture.write('w');
    				fluxEcriture.flush();
    				Thread.sleep(100);
    				fluxEcriture.write((char)'<');
    				fluxEcriture.flush();
    				Thread.sleep(100);
    				fluxEcriture.write('2');
    				fluxEcriture.flush();
    				Thread.sleep(100);
    				fluxEcriture.write('0');
    				fluxEcriture.flush();
    				Thread.sleep(100);
    				fluxEcriture.write('0');
    				fluxEcriture.flush();
    				Thread.sleep(100);
    				fluxEcriture.write('');
    				fluxEcriture.flush();
    				Thread.sleep(100);
    ...
    Le problème semblait venir du readLine en plus de devoir mettre des pauses.

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

Discussions similaires

  1. Réponses: 18
    Dernier message: 26/06/2008, 10h10
  2. [SQL] Pb Sql lors de l envoie des données via un formulaire
    Par xtiand4 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/06/2006, 14h18
  3. Envoi des données via mail
    Par zorba49 dans le forum ASP
    Réponses: 4
    Dernier message: 10/04/2006, 14h35
  4. Réponses: 1
    Dernier message: 05/04/2006, 09h49
  5. socket : envois des données impossible
    Par thechief dans le forum Réseau
    Réponses: 16
    Dernier message: 18/03/2006, 19h28

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