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 :

découper un message reçu par port COM


Sujet :

C#

  1. #21
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Points : 45
    Points
    45
    Par défaut
    je les envois à l'aide d'un microcontrôleur.

    je les envois pour le test, mas ma machine (ordinateur) ne fait que recevoir les données.

    En bref, mes données viennent de l'extérieur de ma machine à une vitesse de 9600 bauds.

    ais-je répondu a a question?

  2. #22
    Membre habitué Avatar de lasrevinu
    Inscrit en
    Février 2010
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 215
    Points : 134
    Points
    134
    Par défaut
    Tu n'as pas repondu à ma question non,
    est ce que tu sais ce que tu envoie ?
    si oui,
    donne moi en detail comment c'est envoyé

  3. #23
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Points : 45
    Points
    45
    Par défaut
    Voila,

    je sais exactement ce que j'envois.
    J'ai un microcontrôleur qui envois des données en usart.
    Le code du microcontrôleur est celui-ci

    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
     
    void main()
    {
        UART1_Init(9600);
     
     
     
            Delay_ms(2000);
        UART1_Write(0x31);
        UART1_Write(0x32);
        UART1_Write(0x33);
        UART1_Write(0x34);
     
            Delay_ms(2000);
        UART1_Write(0x35);
        UART1_Write(0x36);
        UART1_Write(0x37);
        UART1_Write(0x38);
     
                Delay_ms(2000);
        UART1_Write(0x39);
        UART1_Write(0x3A);
        UART1_Write(0x3B);
        UART1_Write(0x3C);
    }
    C'est à dire que j'envoie à une vitesse de 9600 bauds
    -j'attends 2 secondes
    -1,2,3,4
    - j'attend 2 secondes
    -5,6,7,8
    - j'attend 2 secondes
    -9,je ne sais plus, je ne sais plus, je ne sais plus

    voila...je penses que ça te conviens mieux, non?

  4. #24
    Membre habitué Avatar de lasrevinu
    Inscrit en
    Février 2010
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 215
    Points : 134
    Points
    134
    Par défaut
    c'est plus clair

    je vois que tu attend 2 secondes avant d'envoyer la ligne suivante,

    ca serai :
    je recupere les données dans le buffer, je les met dans le textbox je vide le buffer,
    pas besoin de thread.sleep

  5. #25
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Points : 45
    Points
    45
    Par défaut
    oui, j'attend 2 secondes

    mais ça bug toujours lors de la 2 ème série de byte reçu (5ème à 8 ème byte)
    je rempli le buffer,

    j'affiche, je vide
    et voici l'erreur :
    L'index et la longueur doivent faire référence à un emplacement situé dans la chaîne.
    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
     
            private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                string value = "";
                while (serialPort1.BytesToRead > 0)
                {
                    char[] buffer = new char[255];
     
                        int bytes_read = serialPort1.Read(buffer, 0, buffer.Length);
     
                        for (int i = 0; i < bytes_read; i++)
                        {
                            value += buffer[i];
                        }
     
     
                        safeInput(value.ToString());
     
                }
     
             }
     
     
            private void safeInput(string msg)
            {
     
                    textBox1.Invoke(new EventHandler(delegate
                    {
     
                        ////textBox1.SelectedText = string.Empty;
                        //this.textBox1.Text = "";
                        ////textBox1.AppendText(String.Format(msg));
                        //textBox1.Text = msg[0].ToString();
     
                        ////textBox2.SelectedText = string.Empty;
                        //this.textBox2.Text = "";
                        //textBox2.AppendText(msg.ToString());
                        ////textBox2.Text = msg[1].ToString();
     
                        ////textBox3.SelectedText = string.Empty;
                        //this.textBox3.Text = "";
                        //textBox3.AppendText(msg.ToString());
                        ////textBox3.Text = msg[2].ToString();
     
                        ////textBox4.SelectedText = string.Empty;
                        //this.textBox4.Text = "";
                        ////textBox4.AppendText(msg.ToString());
                        //textBox4.Text = msg[3].ToString();
     
                        // on efface les textboxs
                         textBox1.SelectedText = string.Empty;
                         this.textBox1.Text = "";
                         textBox2.SelectedText = string.Empty;
                         this.textBox2.Text = "";
                         textBox3.SelectedText = string.Empty;
                         this.textBox3.Text = "";
                         textBox4.SelectedText = string.Empty;
                         this.textBox4.Text = "";
     
                         // séparation du message en 4 morceaux
                        string W = msg.Substring(0, 1);
                        string X = msg.Substring(1, 1);
                        string Y = msg.Substring(2, 1);
                        string Z = msg.Substring(3, 1);
     
     
                        // mise des morceaux du message dans un tableau
                        string[] tableau_valeur = new string[4];
                        tableau_valeur[0] = W;
                        tableau_valeur[1] = X;
                        tableau_valeur[2] = Y;
                        tableau_valeur[3] = Z;
     
                        // mise en textbox approprié des valeur inscrite dans le tableau!
                        textBox1.Text = tableau_valeur[0];
                        textBox2.Text = tableau_valeur[1];
                        textBox3.Text = tableau_valeur[2];
                        textBox4.Text = tableau_valeur[3];
     
                        serialPort1.DiscardInBuffer();
     
                    }));
            }

    je ne comprend pas où se trouve l'erreur...
    lorsque le programme s'arrête il y a une fleche verte (dans le programme) devant cette ligne (programme counter?)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    textBox1.Invoke(new EventHandler(delegate
    on va y arriver...je suis persuadé...

  6. #26
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Points : 45
    Points
    45
    Par défaut
    je n'arrive pas à vider le buffer...je ne sais pas pq...

    lors du bug du programme
    msg = 5, c'est pas fort étonnant...

    mais je ne vois pas où est le problème...je pensais vider le buffer au bon endroit...

  7. #27
    Membre habitué Avatar de lasrevinu
    Inscrit en
    Février 2010
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 215
    Points : 134
    Points
    134
    Par défaut
    Allé,
    petite séance de debugging,
    tu va mettre un breakpoint sur ton datareceived handler,
    (le petit point rouge)
    apres lance l'application
    et vas y pas à pas (F11)
    et regarde comment ca se passe

  8. #28
    Membre habitué Avatar de lasrevinu
    Inscrit en
    Février 2010
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 215
    Points : 134
    Points
    134
    Par défaut
    Essaie aussi de mettre au lieu de 255 characteres, 4 charactere,
    (255 c'etait pour mon programme )
    vas-y fait ca
    et tien moi au courant

Discussions similaires

  1. (Labview) acquisition de données par port COM d'un ordi
    Par howtosayhello dans le forum LabVIEW
    Réponses: 0
    Dernier message: 02/09/2010, 00h52
  2. Problème envoi caractère par port COM
    Par Briceba dans le forum Windows Forms
    Réponses: 1
    Dernier message: 08/09/2008, 10h29
  3. [VB6]Code Manchester par port com
    Par alamaison62 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 02/02/2006, 10h21

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