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

avec Java Discussion :

Envoie d'une commande ASCII via le port serie


Sujet :

avec Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Envoie d'une commande ASCII via le port serie
    Bonjour à tous,

    Voila je doit récupérer des données d'un système qui communique via un port série. Le système envoie les données à la réception de la commande ASCII : RV, mais je ne sais pas trop comment faire pour envoyer cette commande. J'ai utilisé les cours dispo ici pour m'aider à faire le code mais au moment de l'exécution cela semble se "bloquer" (sans pour autant relever d'exception) au niveau de l'envoie de la requête ou de la réception des données je n'arrive pas trop à savoir. (au niveau des lignes en rouge sur le code qui suit)

    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
    public class Lecture{
    
    	private StringTokenizer DATA = null;
    	private SerialPort portSerie = null;
    	private BufferedReader fluxLecture = null;
    	private OutputStream fluxEcriture = null;
    	private CommPortIdentifier portId = null;
    
    
    [...]
    
    
    	public void Connect() {
    		Win32Driver w32Driver = new Win32Driver();
    		w32Driver.initialize();
    			
    			//connection au port serie
    			try {
    				portId = CommPortIdentifier.getPortIdentifier("COM1");
    			} catch (NoSuchPortException e) {
    				Ecrire(""+e);
    			}
    			
    			try {
    				portSerie = (SerialPort) portId.open("Lecture", 10000);
    			} catch (PortInUseException e) {
    				Ecrire(""+e);
    			}
    			
    			try {
    				portSerie.setSerialPortParams(9600, SerialPort.DATABITS_8,
    						SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
    				portSerie.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
    			} catch (UnsupportedCommOperationException e) {
    				Ecrire(""+e);
    			}
    			
    			try {
    				fluxEcriture = portSerie.getOutputStream();
    				fluxLecture = new BufferedReader(
    							  new InputStreamReader(portSerie.getInputStream()));
    				
    				String msg = "RV";
    				fluxEcriture.write(msg.getBytes());
    				DATA = new StringTokenizer((String)fluxLecture.readLine(), SEPARATOR);
    			} catch (IOException e) {
    				Ecrire(""+e);
    			}
    			
    			try {
    				fluxEcriture.close();
    				fluxLecture.close();
    			} catch (IOException e) {
    				Ecrire(""+e);
    			}
    			portSerie.close();
    	}
    
    
    [...]
    
    
    }
    la données sont sous la forme d'une chaine de charactere type A,B,C,D que je veut en suite trier d'où l'utilisation du tokenizer, mais cela ne me pose pas de problème, c'est juste la réception des données (ou l'envoie de la commande) qui me pose souci. La méthode Ecrire(); me sert a créer un fichier permettant de recenser avec date et heure de toutes les exceptions relevées.

    Je me forme sous java depuis quelques semaines seulement avec l'aide des cours dispo ici et la donc il y a surement des chose que je n'ai pas encore bien comprises et qui vous sembleront aberrantes je vous prie de m'en excuser.

    Si jamais vous pouviez m'aider sur mon souci d'envoi et de réception de donnée.
    Merci d'avance pour le coup de main.

    P.S : Les paramètres que j'ai choisi pour le port serie sont ceux qui me permettent de recevoir les données quand j'utilise l'hyperterminal pour communiquer avec mon système.

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Je lui ai fait afficher du texte entre chaque opération pour voir ou ça "bloquait" genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.print("test1");
    il s'avère qu'après la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DATA = new StringTokenizer((String)fluxLecture.readLine(), SEPARATOR);
    Le texte ne s'affiche plus, comme si il continuait à essayer de lire indéfiniment, est-ce que ça peut être à cause de l'absence de données envoyées auquel cas ce serait ma requête qui ne serait pas bonne, ou faut il écrire dans le code qu'il doit s'arrêter de lire ?

  3. #3
    Membre éclairé Avatar de unknow0
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 452
    Points : 676
    Points
    676
    Par défaut
    readLine lit jusqu'a un retour a la ligne donc si il n'y en a pas il ne s'arete pas

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    les données envoyées sont du types A,B,C,D <CRLF> donc il y a bien le retour a la ligne, donc ca viendrait de la requete que j'envoie qui ne serait pas correcte et donc du coup il n'y a pas de données donc pas de retour à la ligne ?

  5. #5
    Membre éclairé Avatar de unknow0
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 452
    Points : 676
    Points
    676
    Par défaut
    posible ca.

    peu etre en rajoutant un retour a la ligne dans les donner envoyer: String msg = "RV\n";

    il y a peu etre aussi une histoir avec les retour a la ligne qui ne sont pas pareil sous win et linux mais ca je ne connais pas les detail donc bon je peu pas dire

Discussions similaires

  1. gestion d'une carte via un port serie
    Par leo_OrNg dans le forum Composants
    Réponses: 1
    Dernier message: 04/12/2008, 16h41
  2. Envoyer commandes AT via un port USB
    Par mlepretre dans le forum Débuter
    Réponses: 13
    Dernier message: 19/09/2008, 16h36
  3. envoi d'une commande DOS via C++Builder possible ?
    Par tomguiss dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/01/2008, 10h23
  4. [pyserial]Envoi d'une chaine hexadécimal par le port serie
    Par cesear dans le forum Général Python
    Réponses: 3
    Dernier message: 19/12/2007, 12h12
  5. Envoi d'une commande reseau
    Par nicolas_cs2i dans le forum VB.NET
    Réponses: 1
    Dernier message: 24/02/2007, 23h40

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