Capture de flux via RS232 [Résolu]

Signaler
Messages postés
7
Date d'inscription
jeudi 20 avril 2006
Statut
Membre
Dernière intervention
1 juin 2006
-
Messages postés
746
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
23 mai 2007
-
bonjour a tous j'ai un soussi pour capturer un flux via rs232 afin de l'analiser et d'utiliser les bytes capturer pour les mettres dans un programme de traitement.
je ne connais pas les fonctions qui permettent de lire directement le flux.

merci a tous de reflechir a ce petit probleme.

9 réponses

Messages postés
746
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
23 mai 2007
9
#include <windows.h> uniquement (ce sont des fonctions de l'API Win32).
Messages postés
206
Date d'inscription
samedi 29 octobre 2005
Statut
Membre
Dernière intervention
7 mars 2012

Salut,

utilise ReadFile(HANDLE hCom, void * buffer, int nbCarALire, int * nbCarLus, NULL)

++
Messages postés
7
Date d'inscription
jeudi 20 avril 2006
Statut
Membre
Dernière intervention
1 juin 2006

je ni arrive pas !!
si tu pouvais me donner un model fonctionnel je te serais reconnaissant.
merci de ton aide.
Messages postés
206
Date d'inscription
samedi 29 octobre 2005
Statut
Membre
Dernière intervention
7 mars 2012

Salut,

// Permet de lire les octets dans le buffer du port série
char * lireBuffer(HANDLE handleCom, int * telCodeErreur)
{
    if(handleCom == NULL)
         return NULL;

    // Pour connaitre le nombre d'octets dans le buffer d'entrée
    COMSTAT stat;
    DWORD errors;
    ClearCommError(handleCom,&errors,&stat);
   
    int nbCarALire = stat.cbInQue;
   
    if(nbCarALire==0)
     // si le buffer est vide
         return NULL;

    char * leBuffer = new char[nbCarALire+1];
    memset(leBuffer,'\0',nbCarALire+1);
       
    // On effectue la lecture si il y a des caractères présents
    unsigned long nbCarLus = 0; 
    if(ReadFile(handleCom,leBuffer,nbCarALire,&nbCarLus,NULL)==0)
    { // Echec
        delete leBuffer;
        return NULL;
    }

    return leBuffer; // le buffer a été lu
}// lireBuffer

voilà, voilà,

A+
Messages postés
206
Date d'inscription
samedi 29 octobre 2005
Statut
Membre
Dernière intervention
7 mars 2012

Oublié d'enlever int * telCodeErreur

// Permet de lire les octets dans le buffer du port série
char * lireBuffer(HANDLE handleCom)
Messages postés
7
Date d'inscription
jeudi 20 avril 2006
Statut
Membre
Dernière intervention
1 juin 2006

je te remerci , il me manque la bibliotheque que je dois utiliser.
cordialement iraclus.
Messages postés
7
Date d'inscription
jeudi 20 avril 2006
Statut
Membre
Dernière intervention
1 juin 2006

merci, ton application ce lance bien maintenant je jois pouvoir visualiser ce flux .
Messages postés
7
Date d'inscription
jeudi 20 avril 2006
Statut
Membre
Dernière intervention
1 juin 2006

#include <cstdlib>
#include
#include<stdio.h>
#include<windows.h>


using namespace std;
char * lireBuffer(HANDLE handleCom);
int main(int argc, char *argv[])
{
    int i;
    i=0;
    char * mot;
    while(true)
    {
    mot = lireBuffer();
    printf("%s\n",mot);
    i++;
    if(i==100)break;
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}
// Permet de lire les octets dans le buffer du port série
char * lireBuffer(HANDLE handleCom)
{
    if(handleCom == NULL)
         return NULL;


    // Pour connaitre le nombre d'octets dans le buffer d'entrée
    COMSTAT stat;
    DWORD errors;
    ClearCommError(handleCom,&errors,&stat);
   
    int nbCarALire = stat.cbInQue;
   
    if(nbCarALire==0)
     // si le buffer est vide
         return NULL;


    char * leBuffer = new char[nbCarALire+1];
    memset(leBuffer,'\0',nbCarALire+1);
       
    // On effectue la lecture si il y a des caractères présents
    unsigned long nbCarLus = 0; 
    if(ReadFile(handleCom,leBuffer,nbCarALire,&nbCarLus,NULL)==0)
    { // Echec
        delete leBuffer;
        return NULL;
    }


   
    printf("%c\n",leBuffer);
    return leBuffer; // le buffer a été lu
}// lireBuffer

je n'arrive tjs pas a visualiser sur la console les bites transmis
je devrai peut-etre indiquer l'adresse de mon port serie , le nbre de byte de la trame a lire et la parité mais je ne sais pas faire.
peut tu encore m'aider....
merci.
Messages postés
746
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
23 mai 2007
9
Il faut récupérer le handle du port COM avec CreateFile (regarde dans la MSDN) et le passer en paramètre à la fonction lireBuffer.