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++Builder Discussion :

Tcomport Trame Incomplete


Sujet :

C++Builder

  1. #1
    Membre éclairé Avatar de BOUBOU81
    Profil pro
    system integrator
    Inscrit en
    Juin 2004
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : Allemagne

    Informations professionnelles :
    Activité : system integrator

    Informations forums :
    Inscription : Juin 2004
    Messages : 358
    Par défaut Tcomport Trame Incomplete
    Bonjour à tous.
    Voilà j'essaye d'utiliser le composant TComport et j'ai un souci lors de la reception de mes trames.
    Il les recoit en deux fois et parfois une.
    exemple:
    200700000-10-00
    recu 1ere fois
    200700
    deuxiéme fois
    000-10-00

    ou bien des fois je recoit la trame en une fois
    Quelqu'un à t-il une idée sur le problème
    merci d'avance.

  2. #2
    Membre expérimenté Avatar de Mattetfamilly
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 182
    Par défaut
    Si tu connais la longueur de trame tu peux attendre que tous les caractères soient arriver avant de lire.
    Pour cela utilise la fonction InputCount();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    do
    {
    Sleep(150);//150 ms
    }while (Com1->InputCount()<10)
    Si tu reçois cette commande par les événement de réception, tu as une propriété de l'évènement qui t'indiques le nombre de caractére réceptionné, mais dans ton cas, je te conseilles d'utiliser tout de même InputCount().
    L'évènement se déclenche au premier caractére reçu, de sorte que lorsque tu lis, toute la trame n'est pas forcément réceptionnée.


    Tu as aussi, surtout si tu ne connais pas le nombre de caractére de la trame, la possibilité de retarder la lecture.
    Pour cela après avoir envoyer la commande qui déclenche l'envoi de cette trame tu met un Sleep(xxxx) où xxxx est un temps que tu configures en faisant des essais.

    Dans tous les cas, je te conseille d'utiliser la propriété InputCount pour vérifier si le nombre d'octet est cohérent (exemple 5 caractéres reçus alors que la trame de réponse fait au minimum 10 caractéres...)

  3. #3
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Le mieux serais d'encapsuler les trames avant de les envoyer et de les parser à la réception. Donc dans le cas citer plus haut tu devrais mettre:
    <timestamp>200700000-10-00</timestamp>
    Tant que tu n'as pas reçu la fin "</timestamp>" tu continues de lire sur le port.

  4. #4
    Membre éclairé Avatar de BOUBOU81
    Profil pro
    system integrator
    Inscrit en
    Juin 2004
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : Allemagne

    Informations professionnelles :
    Activité : system integrator

    Informations forums :
    Inscription : Juin 2004
    Messages : 358
    Par défaut
    Pour l'encapsulation j'y avait pensé, mais le probleme c'est que ce n'est pas moi qui le fait et je ne sais pas si le matériel le permet.

    mais la méthode avec InputCount me parait correct car je connait le nombre de caractères que je dois recevoir

Discussions similaires

  1. Lire une trame avec TcomPort
    Par makroute dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/04/2008, 09h22
  2. Affichage incomplet après réception d'une trame via RS232
    Par sroge dans le forum Composants VCL
    Réponses: 3
    Dernier message: 01/02/2008, 15h50
  3. Réponses: 10
    Dernier message: 04/08/2006, 21h56
  4. Reception de trame avec Tcomport
    Par Amazone83 dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 19/06/2005, 00h18
  5. [TComPort] -> Pb de trame non complète ?
    Par MaTHieU_ dans le forum C++Builder
    Réponses: 2
    Dernier message: 09/04/2004, 14h22

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