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

C# Discussion :

Soucis liaison RS232


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 22
    Par défaut Soucis liaison RS232
    Bonjour,
    Je suis débutant en C# et je travaille sur une application visant à piloter un appareil de mesure via un PC et une liaison RS232.
    J'arrive à envoyer une commande et recevoir la mesure envoyée par l'appareil, mon probleme survient lorsque je souhaite envoyer une seconde commande par la suite, au lieu de renvoyer la commande proprement, d'autres caractéres sont ajoutés à la fin de la trame et je ne comprends pas pourquoi.
    Lorsque je redémarre l'application la premiere commande est bonne mais pas les autres, je penses que le problème viens du buffer mais je ne sais pas comment le gerer.
    J'ai essayé d'utiliser le DiscardInbuffer/DiscardOutBuffer mais sans succés.

    Voici mon code pour recevoir les 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
    private void port_DataReceived(Object sender, SerialDataReceivedEventArgs e) 
    { 
           SerialPort sp = (SerialPort)sender; 
          _fluxRecupere = sp.ReadExisting(); 
          _donnees += _fluxRecupere; 
          _fluxRecupere = ""; 
          _port.Close(); 
          String[] _dataTab = _donnees.Split(','); //Range les données séparées par une virgule dans un tableau 
          for (int i = 0; i < (_dataTab.Count()); i++) 
              { 
                  Console.WriteLine(_dataTab[i]); 
              } 
    }
    Et mon code pour envoyer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    private void btnLancerMesure_Click(object sender, RoutedEventArgs e) 
    { 
              string[] SampleCommande = new string[2]; 
              SampleCommande[0] = "C 7 1 \x0d"; 
              SampleCommande[1] = "SS \x0d"; 
             _port.Open(); 
             for (int i = 0; i <= 1; i++) 
       { 
           _port.WriteLine(SampleCommande[i]); 
       } 
    }
    Si quelqu'un sait d'où le probléme provient et peut m'aider j'en serais trés heureux
    Merci d'avance !

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 134
    Par défaut
    Quel sont les caractères en trop que tu envoies ?

    A mon avis le problème viens de la ligne suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _port.WriteLine(SampleCommande[i]);
    Lorsque tu utilise WriteLine, les caractères \n\r sont envoyé avec la chaine.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 22
    Par défaut
    Je viens de re-tester avec simplement write et c'est le meme probléme.

    En fait il rajoute a la "trame" une partie de la commande précedente, par exemple lors du 2eme essaie j'ai reçu :

    C 7
    C 7 1
    SS


    C'est ce "C 7" qui pose probléme.
    Et si je fait un 3eme essaie j'ai carrément 4 fois la commande qui est envoyer (mais cette fois sans le "C 7", que des commandes conformes)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 134
    Par défaut
    Après le WriteLine, quel est la valeur de BytesToWrite ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 22
    Par défaut
    J'envoie un string je n'ai donc pas de valeur pour BytesToWrite.

    J'ai aussi fait des tests avec simplement

    Mais toujours le meme probleme,ce pourrait-il que ce soit au niveau du port qu'il y ai un probléme ? J'utilise un adaptateur USB/RS232 faut il prendre des mesures spécial avec ce type d'equipement ?

  6. #6
    Membre confirmé Avatar de bobjoumi
    Profil pro
    Inscrit en
    Février 2009
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2009
    Messages : 94
    Par défaut
    je me rappel avoir eu ce genre de problème et en modifiant le nombre de bits par seconde sa a fonctionné

    En bluetooth je précise !

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

Discussions similaires

  1. Reception trame et envoi trame pour liaison rs232
    Par gaetan.tranvouez dans le forum C
    Réponses: 6
    Dernier message: 09/06/2006, 14h50
  2. Aide Liaison Rs232
    Par go1985 dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 05/06/2006, 14h33
  3. Liaison RS232
    Par theanswerdu40 dans le forum C++
    Réponses: 1
    Dernier message: 28/02/2006, 07h53
  4. Liaison RS232 en langage C sur Windows
    Par Spikedu63 dans le forum Windows
    Réponses: 9
    Dernier message: 12/10/2005, 15h46
  5. Langage C et liaison RS232
    Par Spikedu63 dans le forum C
    Réponses: 9
    Dernier message: 17/09/2005, 12h26

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