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 :

Données perdues port série


Sujet :

C#

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 131
    Points : 46
    Points
    46
    Par défaut Données perdues port série
    Bonjour,

    mon projet d'interface de communication, je reçois des chaînes de caractères à partir de une machine distante, ces données sont afficher dans une textBox.

    sachant la machine distante m'envoie à chaque fois des pâque de 100 caractère et le nombre total de boucle est de 1278.
    les données sont décimale de 0 jusqu'à 9.

    quand je compare les données reçu a celle que la machine envoie, je constate quelle il y'a des données qui manque.
    voila le code:
    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
     
     
    private void serialPort2_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
               serialPort2.Write("\u000D");// il est nécessaire pour lancer la communication
               while(serialPort2.BytesToRead > 0)
                        {  char[] buffer = new char[255];
                            longueur_bytes_read = serialPort2.Read(buffer, 0, buffer.Length);
                         for (i = 0; i < longueur_bytes_read; i++)
                            {
                                value += buffer[i];
                            }
          }
    }
     
     private void button1_ecrir_Click(object sender, EventArgs e)
            {
                textBox1.AppendText(value.ToString() + "\r\n"); }
    pouvez-vous m'aider

    Merci

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    une liaison série peut en effet perdre des données, ou les corrompre, quand il y a des interférences sur le cable par exemple

    c'est à toi de traiter ce problème en ajoutant à cette liaison une norme de gestion d'intégrité et/ou d'acquittement
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2011
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2011
    Messages : 72
    Points : 107
    Points
    107
    Par défaut
    quand je compare les données reçu a celle que la machine envoie, je constate quelle il y'a des données qui manque
    Bonjour,
    Essaye de mettre une tempo de x ms juste après ton Write, Teste plusieurs valeurs de tempo. (Le but c'est d'attendre que ton buffer soit plein et qu'il ait le temps de se remplir.)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      serialPort2.Write("\u000D");// il est nécessaire pour lancer la communication
     
                  System.Threading.Thread.Sleep(100);
     
                  while(serialPort2.BytesToRead > 0)
                        {  char[] buffer = new char[255];
                                ...

  4. #4
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 131
    Points : 46
    Points
    46
    Par défaut
    bonjour,

    Merci pour ta réponse #Dudule70, ça ma beaucoup aidé.

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 131
    Points : 46
    Points
    46
    Par défaut
    j'ai un petit souci.

    Quand j'envoie mes données il y'a le retour à la ligne (\r) qui est compter avec les données.

    Pour être plus clair, avec mon code j'envoie des paquet de 100 caractère (valeur numérique) ou lieu d'envoyer 100 valeur numérique seulement il compte le (\r) comme caractère.
    exemple: "0000000000000000000000000000000000000000000000000000000000000000000000000\r10001600018004100011010160"
    si on compte le nombre de chiffre on a 99 chiffre plus le caractère (\r) sa ferra 100 caractère. du coût j'ai un décalage dans mes paquet.

    Comment faire pour enlever le (\r) et envoyer les 100 caractère?

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Points : 762
    Points
    762
    Par défaut
    Citation Envoyé par tintine Voir le message
    j'ai un petit souci.
    Comment faire pour enlever le (\r) et envoyer les 100 caractère?
    Envoyer ? Je croyais que tu recevais les données ?

    Si tu reçois 100 octets de données et que seuls 99 t'intéressent il suffit de n'ajouter que ceux-la...
    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
     
    int cptGlobal = 0;//comte le nombre total d'octets reçus. A remettre à zéro lorsqu'on fait la demande
    		private void serialPort2_DataReceived(object sender, SerialDataReceivedEventArgs e)
    		{
    			serialPort2.Write("\u000D");// il est nécessaire pour lancer la communication
    			while (serialPort2.BytesToRead > 0)
    			{
    				char[] buffer = new char[255];
    				longueur_bytes_read = serialPort2.Read(buffer, 0, buffer.Length);
    				for (i = 0; i < longueur_bytes_read; i++)
    				{
    					if (cptGlobal == 0 || cptGlobal % 100 != 0)//on n'ajoute les données que si c'est le 1er octets ou bien que ce n'est pas un 100ième octet
    					{
    						value += buffer[i];
    					}
    					cptGlobal++;
    				}
    			}
    		}

  7. #7
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 131
    Points : 46
    Points
    46
    Par défaut
    Envoyer ? Je croyais que tu recevais les données ?
    c'et une interface de communication qui fait l'envoie et la réception des données via le port série.

Discussions similaires

  1. Capture des données du port série
    Par pfrossard dans le forum Linux
    Réponses: 3
    Dernier message: 05/01/2011, 22h13
  2. Capture des données du port série
    Par pfrossard dans le forum Applications et environnements graphiques
    Réponses: 0
    Dernier message: 20/12/2010, 12h20
  3. acquisitions données du port série
    Par pierre bernard dans le forum Langage
    Réponses: 2
    Dernier message: 07/09/2010, 10h22
  4. Lire les données du port série RS232
    Par Sytchev3 dans le forum Langage
    Réponses: 2
    Dernier message: 16/06/2008, 08h47
  5. [VB6]Réception de données sur port série
    Par lindecker dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 08/03/2006, 06h48

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