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 :

Ecouter Port COM [Débutant]


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2015
    Messages : 99
    Points : 45
    Points
    45
    Par défaut Ecouter Port COM
    Bonjour

    Je souhaite faire un petit programme qui écoute le port COM

    J'ai cherché partout mais je n'ai trouvé aucun moyen qui n'a fonctionné à ma guise pour le faire c'est pourquoi je viens vers vous m'adresser pour de l'aide

    J'ai un lecteur USB de badges, nommé "USB Serial Port (Com3)" dans mes gestionnaires de périphériques. Le n° du COM est variable donc il faudrait que je me base sur le nom USB Port Serial pour l'écouter et pas sur le nom complet.

    Quand je me connecte sur le Com3 avec Putty j'obtiens ceci :

    088008800880088075AC2C26CC00220552FF0880088008800
    Le lecteur envoie en boucle la chaîne "0880" en continu, et au moment où je passe un badge il envoi la chaîne de mon badge : 75AC2C26CC00220552FF , ensuite il recommence avec des envois de 0880

    À l'intérieur de cette chaîne se trouve mon numéro de badge --> ici : 220552 c'est toujours sur 6 digit et toujours avant le FF,

    Comment écouter ce port et détecter quand un badge est lu, et envoyé les 6 digits avant le FF dans une variable String ?

    L'idée est de faire un thread séparé qui est connecté sur "USB Serial Port*, qui soit connecté en permanence dessus, et au moment où il détecte autre chose que "0880" il prend la valeur devant le FF ?

    Merci.

    J'ai déjà ça : je vois bien du texte défilé dans ma RichTextbox, il ne s'ajoute pas mais il défile, 0880, quand je passe le badge il me l'affiche puis repasse en 0880
    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
    public SerialPort sp;
            string dataReceveid = string.Empty;
            private delegate void SetTextDeleg(string text);
     
            public Form1()
            {
                InitializeComponent();
            }
     
            private void Form1_Load(object sender, EventArgs e)
            {
                sp = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
                this.sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
     
                sp.Open();
            }
     
            void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                try
                {
                    // Read data from 
                    string data = sp.ReadExisting();
                    Invoke(new Action(() => richTextBox1.Text = data.Trim()));
                    i if (data.IndexOf("FF") != -1)
                    {
                        sp.Close();
                        strNoBadge = "";
                        MessageBox.Show("String contain FF");
                        strNoBadge += data.Substring(6, data.IndexOf("FF"));
                        textbox1.Text = strNoBadge;
                    }
                }
                catch
                {
     
                }
     
            }
    Avec mon IF, je détecte le "FF", quand je passe le badge la messagebox s'affiche correctement, le SP se close
    Par contre il ne me rempli pas ma variable ni mon textbox, comme s'il passait pas dedans ! en pas à pas il se sauve du IF et passe dans le catch après le strNoBadge += ...
    Maintenant je n'arrive pas à sortir les 6 digits avant le FF dans une variable

    Merci

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Voit tu défiler le numéro de badge dans ta richTextBox1 ? Autrement dit est ce qu'il est lu à un moment donnée ?
    Lorsque tu est à cette ligne "MessageBox.Show("Test");" que contient "data" ?

  3. #3
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2015
    Messages : 99
    Points : 45
    Points
    45
    Par défaut
    Salut

    Oui le badge est correctement lu et je le vois apparaître et la preuve supplémentaire il arrête et affiche la textbox

    La valeur "DATA" Contient "FF\u0003" suivi d'un carré

    Et lorsque j'essaie d'ajouter data au Textbox il me dit en bas en mode débug :

    {Text = L'évaluation de fonction nécessite l'exécution de tous les threads.}

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Pourrai tu modifier la ligne en ajoutant les données lu à data, badger et nous donner le contenu de data.

    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
    public SerialPort sp;
            string dataReceveid = string.Empty;
            private delegate void SetTextDeleg(string text);
     
            public Form1()
            {
                InitializeComponent();
            }
     
            private void Form1_Load(object sender, EventArgs e)
            {
                sp = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
                this.sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
     
                sp.Open();
            }
     
    	string data = "";
            void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                try
                {
                    // Read data from 
                    data += sp.ReadExisting();
                    Invoke(new Action(() => richTextBox1.Text = data.Trim()));
                    i if (data.IndexOf("FF") != -1)
                    {
                        sp.Close();
                        strNoBadge = "";
                        MessageBox.Show("String contain FF");
                        strNoBadge += data.Substring(6, data.IndexOf("FF"));
                        textbox1.Text = strNoBadge;
                    }
                }
                catch
                {
     
                }
     
            }

  5. #5
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Je voit que tu as effectuer une modification "strNoBadge"

  6. #6
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2015
    Messages : 99
    Points : 45
    Points
    45
    Par défaut
    Voilà ce qu'il se passe en point à point :

    Il arrive à la MessageBox je fais F11, il me l'affiche je fais ok, il passe à la ligne strNoBadge += data.Substring(6, data.IndexOf("FF"));
    À ce niveau là (ligne jaune) data contient : "\u00020880\u0003\u00027DAC2C26CC00230308FF\u0003" et strNoBadge est vide ("")
    Je fais F11 pour continuer, la flèche jaune du pas à pas passe au Catch sans passer par textBox1.Text = strNoBadge;

    Puis je continue mes F11 et le programme s'arrête.

    Si je change la ligne pour passer direct la Substring de data dans la textbox : textBox1.Text = data.Substring(6, data.IndexOf("FF"));

    en pas à pas , il passe bien dessus en jaune cette fois et il me dit pour textBox1 : {Text = L'évaluation de fonction nécessite l'exécution de tous les threads.} Si je développe dans AccessibilityObject : TextBox1.AccessibilityObject a levé une exception de type "System.InvaludOperationException" en erreur

  7. #7
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Au lieu de "ReadExisting" essai avec "ReadLine" avec un retour ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data += sp.ReadLine() + "\r\n";
    J'espère obtenir :
    0880
    0880
    7DAC2C26CC00230308FF
    0880
    0880

  8. #8
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2015
    Messages : 99
    Points : 45
    Points
    45
    Par défaut
    Alors j'ai testé et là plus rien n'arrive dans ma richtextbox
    Par contre si je mets ton "\r\n" en laissant en sp.ReadExisting() là j'obtiens ce que tu espères (à peu près)

  9. #9
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    On peut essayer avec "ReadChar" ?

  10. #10
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2015
    Messages : 99
    Points : 45
    Points
    45
    Par défaut
    J'obtiens ceci :
    2
    48
    56
    56
    48
    3
    2
    48
    56
    56
    48

    Plus rien à voir

    par contre j'ai une erreur avec mon Substring,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strNoBadge += data.Substring(6, data.IndexOf("FF"));
    Quelque chose doit être faux là dedans car la variable strNoBadge reste vide, je veux les 6 caractères avant le FF mais ça ne fonctionne pas

    De plus , il n'arrive pas à inscrire strNoBadge dans la TextBox à cause d'un problème de Thread toujours le même

  11. #11
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    \u0002 -> Début de texte
    \u0003 -> Fin de texte

  12. #12
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2015
    Messages : 99
    Points : 45
    Points
    45
    Par défaut
    OK et qu'est-ce qu'on peut faire avec ?

    la preuve que le Substring ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            private void button1_Click_1(object sender, EventArgs e)
            {
                string strTest = "08807DAC2C26CC00230308FF0880";
                strTest = strTest.Substring(data.IndexOf("FF"), 6);
                textBox1.Text = strTest;
            }
    J'obtiens une erreur avec le StartIndex

  13. #13
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Oui si tu peux enlever pour le moment ce qui génère des erreurs plz.

    Tu as ReadTo qui parait intéressant on pourrai lui demander de lire les donner jusqu’à ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data += sp.ReadTo('\u0003') + "\r\n";

  14. #14
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    2 -> Début de texte
    48 -> 0
    56 -> 80
    56 -> 80
    48 -> 0
    3 -> Fin de texte
    2 -> Début de texte
    48
    56
    56
    48

  15. #15
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Réponse à ton substring

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                string strTest = "08807DAC2C26CC00230308FF0880";
                strTest = strTest.Substring(strTest.IndexOf("FF") - 6, 6);

  16. #16
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2015
    Messages : 99
    Points : 45
    Points
    45
    Par défaut
    Ok je mets le ReadTo, mais j'arrive pas à le formater il me souligne en rouge le \u003
    avec les ' et ", les \
    Comment le formater ?

    Qu'est-ce qu'il doit se passer ? Je laisse le IF ?

  17. #17
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2015
    Messages : 99
    Points : 45
    Points
    45
    Par défaut
    Ok le substring c'est en ordre et ça fonctionne

    Conclusion, je n'ai plus qu'à réussir à envoyer la Substring dans la textBox1.Text mais j'ai ce problème de Thread qui persiste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     data += sp.ReadExisting();
                    Invoke(new Action(() => richTextBox1.Text = data.Trim()));
     
                    if (data.IndexOf("FF") != -1)
                    {
                        //sp.Close();
                        strNoBadge = "";
     
                        strNoBadge += data.Substring(data.IndexOf("FF") - 6, 6);
                        MessageBox.Show(strNoBadge);
                        data = "";
                        textBox1.Text = strNoBadge;
                    }
    Il reste plus qu'à pouvoir envoyer le strNoBadge au textBox1

    La variable dans MessageBox.Show est correcte à chaque passage (j'essaie avec différents badges)

    Comment accéder à un contrôle "InterThread" , d'un autre Thread ?

  18. #18
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Pour la textBox1 il faut que tu fasse comme pour la richrichTextBox1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Invoke(new Action(() => richrichTextBox1.Text = strNoBadge.Trim()));

  19. #19
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2015
    Messages : 99
    Points : 45
    Points
    45
    Par défaut
    Super ! Ça fonctionne plus qu'à merveille !

    Il reste encore un dernier point à traiter

    J'ai un lecteur USB de badges, nommé "USB Serial Port (Com3)" dans mes gestionnaires de périphériques. Le n° du COM est variable donc il faudrait que je me base sur le nom USB Port Serial pour l'écouter et pas sur le nom complet.
    Comment résoudre ce problème ?

    Par avance je te remercie

  20. #20
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Tu n'a pas l'air de te baser sur le nom complet "USB Serial Port (Com3)" ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Ecoute de port COM possible avec des applets?
    Par Baltha83 dans le forum Applets
    Réponses: 1
    Dernier message: 20/04/2012, 12h16
  2. [socket] envoyer des données vers un port com
    Par Slimer dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 20/07/2004, 17h35
  3. [debutant][Port COM]
    Par Shooter dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 06/07/2004, 09h43
  4. [javaComm]Communication port COM
    Par gui4593 dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 04/06/2004, 12h35
  5. port com
    Par jeremi dans le forum C
    Réponses: 12
    Dernier message: 16/09/2002, 11h37

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