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 :

c# problème réception port série windows ce 6


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 40
    Points : 34
    Points
    34
    Par défaut c# problème réception port série windows ce 6
    bonjour,

    je débute en c#

    je communique avec une carte avec win ce 6 avec un petit soft en c#
    la transmission de la carte vers le pc est nickel mais la réception ne marche pas pourtant j'ai suivi à peu près tous les tutoriels que j'ai pu voir mais rien et pourtant je suis sûr que physiquement tout est bien raccorder car d'autres applis en c++ tourne très bien dessus

    j'ai que le DTR devait être mis à true après l'ouverture du port c'est vrai et si oui pourquoi?

    sinon j'ai essayé les read, readexisting readline avec comme caractère de fin le carriage return \r mais rien si quelqu'un a un exemple de communication série qui marche je suis preneur

    je suis sous VS2005 j'ai rajouté bêtement le composant serial port en laissant tous les caractères par défaut, j'ai juste un évènement à la réception et quand il se produit normalement je renvoie le message reçu et je n'ai rien!!!


    merci de m'aider

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 40
    Points : 34
    Points
    34
    Par défaut
    je reçois bien (pas en event mais bon) en fait mon problème est la mise à jour du text de ma textbox qui ne se fait pas car pour le voir quand je reçois une trame je la renvoie sur le port série et je vois que tout se passe bien par contre en même temps lors de la réception j'affiche la trame dans ma textbox et là rien!!!

    quelqu'un a une idée

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Points : 347
    Points
    347
    Par défaut
    Bonjour

    On ne traite pas du port série en synchrone normalement.
    Je ne sais pas si ton systeme envoie des trames mais ils faut naturellement travailler en asynchrone afin d'ajouter tes données dans un buffer et
    envoyer la donnes à ton appli quand elle est valide et complète

    Cela peut être une trame, après vérification d'un CRC.

    Pour commencer essaye de crée ton port série et d'attacher une fonction de réception

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public SerialPort serialPort;
    serialPort = null;
    serialPort = new SerialPort(PortCom, 115200, Parity.None, 8, StopBits.One);
    serialPort.Open();
    serialPort.DataReceived += new SerialDataReceivedEventHandler(OnDataReceived);
    ...
    a partir de ça crée la fonction de réception qui écrit les donnes dans un buffer

    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
     
     const char CHAR_StartOfFrame = (char)0x0A;   
     const char CHAR_EndOfFrame = (char)0x0D;
     private string inboundBuffer = "";
    public void OnDataReceived(object sender, SerialDataReceivedEventArgs e)
    {
    while (true)
    {
     inboundBuffer += serialPort.ReadExisting();
     
    // ici tu traite le buffer pour extraire la trame de donnée soit  par une //longueur, soit un caractère de début et de fin
    //je te montre ici avec caractère de début et de fin
     
     int length = inboundBuffer.Length;
     int frameStart = inboundBuffer.IndexOf(CHAR_StartOfFrame);
     if (frameStart != 0)
     {
             if (frameStart < 0)
             {
                     inboundBuffer = "";
                     break;
              }
              inboundBuffer = inboundBuffer.Substring(frameStart);
              frameStart = 0;
    }
     
                int frameEnd = inboundBuffer.IndexOf(CHAR_EndOfFrame, 0);
                 if (frameEnd < 0)
                  break;
      // A full message is available.
                    string message = inboundBuffer.Substring(1, frameEnd - 1);
                    inboundBuffer = inboundBuffer.Substring(frameEnd + 1);
     
    //ici tu peux envoyer le message a ta textbox avec un invoke si tu es dans un thread différent
       Invoke((MethodInvoker)delegate { myTextBox.Text = message;});
    }
    }
    cordialement

Discussions similaires

  1. problème réception port série.
    Par hppp01 dans le forum Débuter
    Réponses: 1
    Dernier message: 09/03/2012, 17h45
  2. Diagnostiquer un problème de port série
    Par huit_six dans le forum Linux
    Réponses: 1
    Dernier message: 05/01/2010, 01h17
  3. Réception port série (API javax.comm)
    Par trifly dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 10/06/2009, 09h13
  4. Problème de ports série sous linux
    Par Imaging dans le forum Matériel
    Réponses: 0
    Dernier message: 15/05/2009, 19h24
  5. Problème avec port Série sur Win XP
    Par alexorel dans le forum MFC
    Réponses: 9
    Dernier message: 27/10/2005, 15h32

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