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 :

Affichage trames correctement


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 52
    Points : 29
    Points
    29
    Par défaut Affichage trames correctement
    Bonjour,

    J'ai réussi à créer une petite application qui me permet d'ouvrir un port serie et d'écouter le port ainsi donc que d'afficher les trames fournis (par des équipements marins et un gps), un peu comme hyperterminal !
    Mais j'aurais besoin de votre aide, mes trames ne sont pas bien structurés comme dans hyperterminal, là elles vont à la ligne quasiment à chaque espace dans la trame; or je voudrais qu'il y a avant chaque $ par exemple !

    Je vous met ci-dessous uniquement la fonction ReadBuffer de ma classe RS232 car je pense que le problème vient de là

    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
    bool RS232::ReadBuffer(AnsiString & test, DWORD & a)
    {
            char c;
            int i;
            DWORD NbrCar;
     
            ClearCommError(Com,&ErreurLigne,&StatutPort);
     
            i=StatutPort.cbInQue;
     
            while(i!=0)
            {
                    ReadFile(Com,&c,1,&NbrCar,NULL);
                    test=test+c;
                    i--;
            }
            return(true);
    }
    merci d'avance

    PS : j'en profite pour demander si vous aviez une idée pour en même temps que d'afficher dans mon application les trames, les écrire dans un fichier texte ? car je dois ensuite traiter ces trames avec un autre programme !

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 50
    Points : 60
    Points
    60
    Par défaut
    Bonjour,

    As-tu vérifié l'exactitude des données reçues en exécution au pas par pas?

    Car je n'ai pas l'impression que ton problème vienne de ce code. Peut-être au moment de l'affichage?

    Pour ma part, j'ai utilisé un buffer BYTE* de taille retournée par ClearCommError et cela fonctionne très bien.

    Penses à tester le retour de tes fonctions (ClearCommError,...).

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    J'ai testé sans rentré dans les détails voir ce qu'il faisait en pas à pas et je pige pas car un coup il va à la ligne après un espace un coup il va à la ligne après 2 espaces !


    Par contre ton buffer BYTE* je vois pas du tout ce que c'est


    Je suis pas un pro, je suis plus débutant mais j'ai encore du boulot

    déjà merci pour ta réponse

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 50
    Points : 60
    Points
    60
    Par défaut
    Bonjour,

    Un BYTE c'est ni plus ni moins un unsigned char que je recopie après dans une std::string. Si tu es sous Visual C++, lances ton programme en mode debug et avance ligne par ligne en visualisant le contenu de tes variables.

    Envoies donc une chaine avec des espaces sur ton port série et vérifies l'intégrité des caractères. En testant ton programme au pas par pas, affiches leurs valeurs hexadécimales (0x20 pour les espaces) pour savoir si ton problème vient de la réception des caractères ou de ton affichage.

    Je n'ai jamais utilisé le type AinsiString, mais hormis cela, je n'ai pas l'impression que l'erreur vienne de ce bout de code. Peux-tu fournir le code de l'affichage?

    Pour l'écriture dans un fichier, utilises les fstream sur réception de tes caractères.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    je travail avec Builder
    le problème c'est que j'ai essayé en pas à pas mais j'arrive à rien afficher niveau donné soit il passe l'étape soit il me met des hexa qui ne signifie rien !

    Peut-être que simplement je suis pas du tout sur le bon truc pour réaliser mon programme

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 50
    Points : 60
    Points
    60
    Par défaut
    mais j'arrive à rien afficher niveau donné soit il passe l'étape soit il me met des hexa qui ne signifie rien !
    S'il passe l'étape, c'est qu'il n'y a peut-être pas de données à lire. Quand tu dis que les valeurs hexa ne signifient rien, peux-tu être plus précis? Donnes un exemple, un tableau de valeur hexa et la chaine attendue. Je ne peux malheureusement pas t'aider s'il s'agit d'un problème d'utilisation de C++ Builder. Regardes la: http://pottiez.developpez.com/tutoriels/BCB/debogage/


    Tu peux également écrire dans un fichier les caractères reçus et comparer les données écrites avec les données que tu affiches.

    Envoies des exemples de ce que tu reçois, le code d'affichage. Difficile de t'aider plus sans ça.

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 04/04/2011, 21h22
  2. Réponses: 11
    Dernier message: 05/04/2009, 11h31
  3. Affichage non correct d'une image
    Par AnonCoder dans le forum Langage
    Réponses: 2
    Dernier message: 03/11/2006, 13h51
  4. Aide pour un affichage correcte
    Par Premium dans le forum C
    Réponses: 5
    Dernier message: 28/05/2006, 11h24
  5. [MySQL] Requete SQL correcte Mais aucun affichage
    Par jenga dans le forum PHP & Base de données
    Réponses: 21
    Dernier message: 10/04/2006, 13h55

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