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

Windows Forms Discussion :

Utilisation de l'objet SerialPort & de l'évènement DataReiceved


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Ingénieur industrialisation et test
    Inscrit en
    Mars 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur industrialisation et test
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 20
    Par défaut Utilisation de l'objet SerialPort & de l'évènement DataReiceved
    Salut à tous,

    Je démarre l'apprentissage de C# , et j'aimerais réaliser un "chat" par port série.
    Lorsque j'écris vers le port distant, pas de problèmes les données sont envoyées et s'affiche sur un terminal.
    Dans l'autre sens, j'aimerai recevoir des données(terminal vers mon appli) grâce l'évènement DataReiceved de l'objet SerialPort mais la aucun évènement se lève.

    Les exemples d'utilisation Serialport que 'jai trouvé n'utilise pas les évènements donc si quelqu'un à une idée et peu me filer un coup de main , je lui en serai très reconnaissant !

    Cdt


    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    namespace WindowsApplication1
    {
        public partial class TestSerialCom : Form
        {
            private string strPortCom = "COM5";
            //private string strNameSys = "Application1";
            private string strMess = "PING";
            private string strUserName = "Yo";
            private string strUserDistant = "User Test";
     
     
            public TestSerialCom()
            {
                //init des composant graphiques
                InitializeComponent();
                //Abonnement à l'événement DataReceived de l'obj DataReceived => réalisé dans TestSerialCom.Designer.cs
                //this.serialPort1.DataReceived +=new SerialDataReceivedEventHandler(serialPort1_DataReceived)
     
                // Obtenir la liste des noms de Port
                string[] ports = SerialPort.GetPortNames();
                Console.WriteLine(" Les ports suivants ont été trouvés: ");
                rtbEchange.AppendText(" Les ports suivants ont été trouvés: \n\n");
                // Affiche la liste des ports dispo
                foreach (string port in ports)
                {
                    Console.WriteLine(port);
                    rtbEchange.AppendText(String.Format("port = {0} \n", port));
                    cboxListPort.Items.Add(port);
                }
            }
     
            private void btnEnvoi_click(object sender, EventArgs e)
            {
                if (tbEnvoi.Text != "" && serialPort1.IsOpen)
                {
                    serialPort1.WriteLine(String.Format("[{0}] >> [{1}] :{2}", strUserName, strUserDistant, tbEnvoi.Text));
                    rtbEchange.AppendText(String.Format("[{0}] >> [{1}] :{2} \n", strUserName, strUserDistant, tbEnvoi.Text));
                }
                if (serialPort1.IsOpen == false )
                {
                    textBox1.Text = "Port " + strPortCom + " fermé";
                }
                textBox1.Text = "";
            }
     
     
            #region Evenements
     
            private void TestSerialCom_Load(object sender, EventArgs e)
            {
                serialPort1.ReadBufferSize = 2;
                serialPort1.ReceivedBytesThreshold = 2;
                serialPort1.Handshake = Handshake.None;
                serialPort1.ReadTimeout = 500;
                serialPort1.WriteTimeout = 500;
     
                ///serialPort1.BreakState = true;
                // instance du SerialPort
                serialPort1 = new SerialPort(strPortCom, 9600, Parity.None, 8, StopBits.One);
                // ouverture du port COM1
                serialPort1.Open();
                // envoi d'une trame PING
                serialPort1.WriteLine(String.Format("Nouvelle session <{0}>:  {1}", strUserName, strMess));
     
     
                textBox1.Text = strPortCom;
            }
     
            private void TestSerialCom_FormClosing(object sender, FormClosingEventArgs e)
            {
                serialPort1.Close();
            }
     
     
            //Gestion événementielle de la réception des données sur le port serie
            private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                Console.WriteLine(String.Format("Value={0}",e.EventType.ToString()));
                rtbEchange.AppendText(String.Format("[{0}]<<[{1}] :{2} \n",strUserName ,strUserDistant , serialPort1.ReadLine()));
            }
     
     
            private void quitterToolStripMenuItem_Click(object sender, EventArgs e)
            {
                serialPort1.Close();
                this.Close();
                this.Dispose();
            }
     
            private void cboxListPort_SelectedIndexChanged(object sender, EventArgs e)
            {
                strPortCom = cboxListPort.SelectedItem.ToString();
            }
     
            #endregion
        } 
    }

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Je pense que tu vas avoir un peu de mal à trouver du monde qui programme le port série, a fortiori en C#. Ca ne s'utilise plus beaucoup

  3. #3
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    Je pense que tu vas avoir un peu de mal à trouver du monde qui programme le port série, a fortiori en C#. Ca ne s'utilise plus beaucoup
    Détrompe toi, j'emploie les ports série chaque jour, trois quarts des automates et appareils industriels s'interfacent que sur du RS-232.
    Il en est de même pour tout le matériel de point de vente, les scanners et les lecteurs de cartes.

    Bon pour ce qui est du code, ne serait-ce pas à cause du EventHandler qui est en commentaire? Par ailleurs, ta connexion c'est du Null modem?

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par _skip Voir le message
    Détrompe toi, j'emploie les ports série chaque jour, trois quarts des automates et appareils industriels s'interfacent que sur du RS-232.
    Je n'avais évidemment pas oublié ce cas là, mais, en industriel, j'ai vu plus souvent du RS-422 ou du Rs-485 (pour cause de multi-point, de distance et de moindre sensibilité à un environnement EM "chargé").

    Il en est de même pour tout le matériel de point de vente, les scanners et les lecteurs de cartes.
    Certes, mais ces derniers "s'usb-isent" de plus en plus.

  5. #5
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    Le problème c'est qu'en USB ça coute le double suivant quoi, enfin surtout les périphériques epson.

  6. #6
    Membre averti
    Profil pro
    Ingénieur industrialisation et test
    Inscrit en
    Mars 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur industrialisation et test
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 20
    Par défaut
    bonsoir _skip,

    En effet mon câble est un null modem.
    Concernant le code, le SerialDataEventHandler est declaré dans la feuille designer.cs en automatique par visual studio mais j'ai quand même essayé de le rajouté dans la classe mais rien n'y fait: com toujours unidirectionnel


    Citation Envoyé par _skip Voir le message
    Détrompe toi, j'emploie les ports série chaque jour, trois quarts des automates et appareils industriels s'interfacent que sur du RS-232.
    Il en est de même pour tout le matériel de point de vente, les scanners et les lecteurs de cartes.

    Bon pour ce qui est du code, ne serait-ce pas à cause du EventHandler qui est en commentaire? Par ailleurs, ta connexion c'est du Null modem?

  7. #7
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    Et après avoir envoyé tes données depuis hyperterminal, si tu appelles la propriété BytesToRead depuis ton code (dans le code d'un bouton par exemple) ça te répond quoi?

  8. #8
    Membre averti
    Profil pro
    Ingénieur industrialisation et test
    Inscrit en
    Mars 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur industrialisation et test
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 20
    Par défaut
    Salut ,

    Effectivement la propriété BytesToReadme me retourne le nombre caractères que j'ai envoyé avec l'hyperterminal, et je peux les récupérer avec la méthode Read.

    j'ai également joué avec la propriété ReceivedBytesThreshold mais toujours pas d'événement DataReceive ! La je comprend pas trop ...

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

Discussions similaires

  1. [9i] savoir la dernière utilisation d'un objet
    Par sygale dans le forum Oracle
    Réponses: 3
    Dernier message: 18/05/2006, 10h04
  2. Utilisation de l'objet SOAPCall
    Par WalidNat dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 09/05/2006, 15h28
  3. [COM] Utilisation d'un objet COM
    Par Sophy75 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 03/04/2006, 19h43
  4. Message d'erreur lors d'utilisation d'un Objet
    Par dirty_boy dans le forum Langage
    Réponses: 3
    Dernier message: 28/10/2005, 17h16
  5. Réponses: 4
    Dernier message: 25/10/2005, 09h48

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