Capture de flux via RS232

Résolu
iraclus Messages postés 7 Date d'inscription jeudi 20 avril 2006 Statut Membre Dernière intervention 1 juin 2006 - 18 mai 2006 à 14:08
nightlord666 Messages postés 746 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 23 mai 2007 - 1 juin 2006 à 16:59
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

nightlord666 Messages postés 746 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 23 mai 2007 10
31 mai 2006 à 15:53
#include <windows.h> uniquement (ce sont des fonctions de l'API Win32).
dmk04 Messages postés 206 Date d'inscription samedi 29 octobre 2005 Statut Membre Dernière intervention 7 mars 2012
18 mai 2006 à 14:25
Salut,

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

++
iraclus Messages postés 7 Date d'inscription jeudi 20 avril 2006 Statut Membre Dernière intervention 1 juin 2006
30 mai 2006 à 19:06
je ni arrive pas !!
si tu pouvais me donner un model fonctionnel je te serais reconnaissant.
merci de ton aide.
dmk04 Messages postés 206 Date d'inscription samedi 29 octobre 2005 Statut Membre Dernière intervention 7 mars 2012
31 mai 2006 à 11:19
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+

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dmk04 Messages postés 206 Date d'inscription samedi 29 octobre 2005 Statut Membre Dernière intervention 7 mars 2012
31 mai 2006 à 11:21
Oublié d'enlever int * telCodeErreur

// Permet de lire les octets dans le buffer du port série
char * lireBuffer(HANDLE handleCom)
iraclus Messages postés 7 Date d'inscription jeudi 20 avril 2006 Statut Membre Dernière intervention 1 juin 2006
31 mai 2006 à 15:38
je te remerci , il me manque la bibliotheque que je dois utiliser.
cordialement iraclus.
iraclus Messages postés 7 Date d'inscription jeudi 20 avril 2006 Statut Membre Dernière intervention 1 juin 2006
1 juin 2006 à 10:01
merci, ton application ce lance bien maintenant je jois pouvoir visualiser ce flux .
iraclus Messages postés 7 Date d'inscription jeudi 20 avril 2006 Statut Membre Dernière intervention 1 juin 2006
1 juin 2006 à 10:16
#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.
nightlord666 Messages postés 746 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 23 mai 2007 10
1 juin 2006 à 16:59
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.
Rejoignez-nous