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#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Par défaut découper un message reçu par port COM
    Bonjour,

    dans le cadre d'un projet je dois recevoir 6 bytes via le port com. Ces 6 bytes sont tout à fait indépendant les un des autres.
    Le but final est de séparer ces 6 bytes pour les affichez chacun dans une textbox particulière :
    byte0 -> textbox1
    byte1 -> textbox2
    ...
    byte5 -> textbox6

    Je reçois convenablement l'ensemble des bytes dans une seule textbox
    Je voudrais les séparer pour les afficher chacun dans la textbox appropriée, comment pourrais-je faire?

    Merci de votre aide

  2. #2
    Membre confirmé Avatar de lasrevinu
    Inscrit en
    Février 2010
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 215
    Par défaut
    Salut,
    je me suis remis à faire du port serie,
    et je voulais avoir une précision,
    est-ce que tu interroge ton materiel ou pas ?
    (tu fait du serialPort.write ?)

  3. #3
    Membre confirmé Avatar de lasrevinu
    Inscrit en
    Février 2010
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 215
    Par défaut
    La raison de ma question est simple,
    en communication serie, il y a deux approche,

    l'approche "Terminal", tu n'interroge pas ton materiel, tu recoit des infos tu peux en envoyer, mais il n'en fera rien (exactement comme le terminal windows par exemple)

    l'approche "client-serveur", ou "question reponse",
    tu interroge ton materiel et il te repond.

    la programmation differe dans les deux cas,
    pour l'approche terminal, il faut un dataReceived event qui se declenchera des qu'il y a un message en entrée.

    pour l'approche question reponse,
    la classe serial port comporte des methode super efficace,
    le readExisting, le readTo, le ReadChar etc..
    et pas besoin de dataReceived event handler

    il faut avoir ca en tete quoi..

    voila pour l'info.

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Par défaut
    Salut,

    je vais réfléchir à ce problème

    J'ai une autre question rien à voir avec ce post.
    Quand je reçois des données du port série, je reçois par exemple ?, *, ...

    Comment obtenir la valeur décimale 63, 42, ...

    voici 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
    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
     
            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());
            }
     
     
     
                    textBox1.Invoke(new EventHandler(delegate
                    {
     
     
                        //textBox1.SelectedText = string.Empty;
                        this.textBox1.Text = "";
                        textBox1.AppendText(String.Format(msg));
                        textBox1.ScrollToCaret();
                        //textBox1.Text = msg[0].ToString();
     
                        //textBox2.SelectedText = string.Empty;
                        this.textBox2.Text = "";
                        textBox2.AppendText(msg.ToString());
                        textBox2.ScrollToCaret();
                        //textBox2.Text = msg[1].ToString();
     
                        //textBox3.SelectedText = string.Empty;
                        this.textBox3.Text = "";
                        textBox3.AppendText(msg.ToString());
                        textBox3.ScrollToCaret();
                        //textBox3.Text = msg[2].ToString();
     
                        //textBox4.SelectedText = string.Empty;
                        this.textBox4.Text = "";
                        textBox4.AppendText(msg.ToString());
                        textBox4.ScrollToCaret();
                        //textBox4.Text = msg[3].ToString();
     
                    }));
            }
    merci bcp

  5. #5
    Membre confirmé Avatar de lasrevinu
    Inscrit en
    Février 2010
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 215
    Par défaut
    utilises-tu des seriealPort.write?
    en resumé c'etait ca ma question

    pour les charactere qui te sont renvoyé
    ca doit etre un probleme de formatage,

    essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    serialPort.encoding = encoding.ASCII;
    si tu sait pas de quel encodage il s'agit, essaie un peu tout.

    voila

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Par défaut
    Salut,

    non, j'utilise pas serialport.write
    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
     
      private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                string value = "";
                while (serialPort1.BytesToRead > 0)
                {
                    char[] buffer = new char[6];
                    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();
     
                    }));
            }
    Je ne fait que recevoir via le port COM pas d'envois de données.

    j'ai testé ton "encoding..." mais je reçois le code ascii de la donnée, pas la valeur decimale.
    J'ai testé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    textBox4.AppendText(convert.ToInt32(msg));
    mais ça va pas Textbox.text demande un string ^^

    bon je débute dons je test plein de choses...
    Mais là, je sais pas faire.

    D'ailleur pour séparer les données, je n'y suis tjs pas arrivé. Je veux dire que je reçois tjs l'ensemble des données dans une seule textbox. Je ne les distribuent pas...

    j'ai testé comme 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
     
     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();
     
                    }));
            }
    Le programme compile, mais le programme s'arrête en mettant :
    L'index se trouve en dehors du tableau.
    Je suis près du but je suppose...j'en suis certain, mais je bloque ^^

    Merci de votre aide

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: 01/09/2010, 23h52
  2. Problème envoi caractère par port COM
    Par Briceba dans le forum Windows Forms
    Réponses: 1
    Dernier message: 08/09/2008, 09h29
  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, 09h21

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