begin process at 2012 05 29 18:47:40
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Système

 > 

Autre

 > 

Pb de réception sur liaison RS232


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Pb de réception sur liaison RS232

vendredi 1 février 2008 à 20:35:31 | Pb de réception sur liaison RS232

CTotophe85

        Bonjour à tous, j'ai écrit une classe qui me permet de communiquer via une laison RS232 par le port COM, mais bon voilà le problème que je rencontre c'est que je peux utiliser plusieurs fois la méthode pour envoyer les messages mais la méthode pour rcevoir ne marche au'au premier appel, après il la zappe et du coups je ne reçoit plus rien, si quelqu'un à une idée, merci d'avance.

voici le code source:
RS232.h
/*--------------- DECLARATION DES BIBLIOTHEQUES ----------------*/

#include <iostream>            //flux d'entrée/sortie
using namespace std;
#include <iomanip>       
using namespace std;
#include <stdio.h>
#include <windows.h>
/*--------------------------------------------------------------*/


/******************************************************
\class <RS232>
<Elle permet l'initialisation d'un port pour communiquer via une liaison RS232>
\version 1.0
/////////////////////////////////////////////////////*/
class RS232
{
    /*-------------- Attributs --------------*/
    HANDLE hCom;// le port est référencé avec un identifiant de type HANDLE
    DWORD  NbOctetsEcrits, NbOctetsLu;//indique l'adresse d'un DWORD contenant le nombre d'octets réellement transmis.

    /*-------------- Méthodes ---------------*/
public:
    RS232(unsigned char numPort, unsigned char nbDonnees=8, unsigned char nbStop=1, unsigned char parite=0, unsigned int vitesse=115200);
    ~RS232(void);
    bool envoyerMessage(unsigned char caractere);
    bool recevoirMessage(unsigned char* caractere);

};


RS232.cpp:


#include "RS232.h"

//------------------------- RS232 ----------------------------
/**
\brief Constructeur : initialisation de la communication RS232

\param  numPort: correspond au numéro du port, par exemple 1 pour COM1
        nbDonnees: indique le nombre de donnees à envoyer (7 ou 8 bits)
        nbStop: nombre de bits de stop
        parite: type de parite ('EVENPARITY', 'OODPARITY', 'NOPARITY')
        vitesse:  vitesse de transmission
       
\section Algorithme
*/
//-------------------------------------------------------------
RS232::RS232(unsigned char numPort, unsigned char nbDonnees, unsigned char nbStop, unsigned char parite, unsigned int vitesse)
{
    char nomPort[5];
   
    sprintf(nomPort,"COM%d",numPort);
   

    //----------- Ouverture du port ------------------
    hCom=CreateFile("COM6",GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING ,0,NULL);
    if (hCom == INVALID_HANDLE_VALUE)
        exit(0);

    //----------- Configuration du port --------------------
    DCB dcb;    //Cette structure "Device-Control Block" definit l'initialisation d'un périphérique de communications.
           
    if (GetCommState(hCom,&dcb) == false)// Lecture des paramétres physiques.
    {
        exit(0);
    }
    else                                   
    {
        dcb.ByteSize=nbDonnees;                //    -Nombre de bits de Données
        dcb.StopBits=nbStop;                //    -Nombre de bit(s) de Stop
        dcb.Parity=parite;                    //    -Type de parité
        dcb.BaudRate=vitesse;                //    -Vitesse de transfert des données
        SetCommState(hCom,&dcb);            //  Ecriture de ces paramètres.
    }
}


//------------------------- ~Transmission_CANOpen ----------------------------
/**
\brief Destructeur: Fermeture de la connexion avec le périphérique.
                   
\section Algorithme
*/
//---------------------------------------------------------------------------
RS232::~RS232(void)
{
    CloseHandle(hCom);// Fermeture du Handle hCom.
}

//--------------------------- envoyerMessage --------------------------------
/**
\brief : Elle permet d'envoyer un message (un caractere ou une valeur hexdecimale
         sur un octet non signé.

\param CARACTERE: message à transmettre
\return on retourne un booléen qui présise si l'envoie s'est bien passer.
        TRUE: OK.
        FALSE: Un probeme est survenue lors de l'envoie du message
\section Algorithme
*/
//---------------------------------------------------------------------------
bool RS232::envoyerMessage(unsigned char caractere)
{
    return WriteFile(hCom,&caractere,1,&NbOctetsEcrits,NULL);
}

//--------------------------- recevoirMessage --------------------------------
/**
\brief : Elle permet de recevoir un message (un caractere ou une valeur hexdecimale
         sur un octet non signé.

\param CARACTERE: adresse de reception du message
\return on retourne un booléen qui présise si la reception s'est bien passer.
        TRUE: OK.
        FALSE: Un probeme est survenue lors de lla reception du message
\section Algorithme
*/
//---------------------------------------------------------------------------
bool RS232::recevoirMessage(unsigned char* caractere)
{
    return ReadFile(hCom,caractere,1,&NbOctetsLu,NULL);
}

et le main:
void main(void)
{
    unsigned char caractere;
    unsigned char roue_droite=MOTOR_STOP;
    unsigned char roue_gauche=MOTOR_STOP;
   
    RS232 o(6);

    cout << "Que voulez vous faire?" << endl;
    cin  >> caractere;
    cout << "caractere:" << caractere << endl;

    do
    {
        switch (caractere)
            case 'M':
                o.envoyerMessage(COMMANDE_MOTOR);
                SetEvent(event_carac);
                //o.recevoirMessage(&caractere);
                flag=true;

                //COMMANDE ROUE DROITE
                o.envoyerMessage(roue_droite);
                SetEvent(event_carac);
                o.recevoirMessage(&caractere);
                flag=true;

                //COMMANDE ROUE GAUCHE
                /*o.envoyerMessage(roue_gauche);
                SetEvent(event_carac);
                o.recevoirMessage(&caractere);
                flag=true;
            break;

            //default: break;*/

        cout << "Que voulez vous faire?" << endl;
        cin  >> caractere;
    }
    while(caractere!='Q');
}
mardi 26 août 2008 à 16:44:55 | Re : Pb de réception sur liaison RS232

Anguel

Bonjour
 Je ne peu pas te donner un exemple en C ou C+ mais
en règle général , avant de utiliser les donnes reçu il faut mettre le buffer de la porte a Zéro en Visual Basic  c'est :
MScomm.DiscardInBuffer()

j'espère que ca t'aidera.

Anguel



Cette discussion est classée dans : caractere, char, rs232, unsigned, hcom


Répondre à ce message

Sujets en rapport avec ce message

Debutant - unsigned char* [ par DoudouBidou ] Bonjour, j'ai 2 question de débutant concernant unsigned char* 1- es-ce normal que le 1er caractere soit la longueur de la chaine? 2 - comment on sup ajouter la longueur de la chaine à unsigned char * [ par DoudouBidou ] Bonjour, j'ai encore un problème avec une variable unsigned char * ma variable contient au maximum 255 caractere et je dois ajouter la longueur reel Convertir unsigned long en const char * [ par sman0 ] bonjour je cherche a convertir un unsigned long en char pour l'afficher dans une MessageBox comment puis-je proceder ? Pointeurs et Desallocation [ par gilimcce ] Bonjour à tous....je declare une fonctionloadJpegImage(char *, unsigned char*, int*, int*)1e parametre : le chemin de l'image chargee2e // Pointeur cast [ par gwenChina ] Bonjour a tous,J'ai en fait un petit probleme avec un message que le compilateur me renvoie: [Warning] assignment makes pointer from integer without a socket RAW ICMP - fonctionnement et implémentation... [ par smirnoff69ice ] Salut, Je suis sur un projet et je dois simuler l'envoi de paquets ICMP sur le réseau. J'ai déjà fait un petit programme de test (repris en partie dep Structure alignment [ par Gargagol ] Voilà je programme sous MS VC++J'ai la structure suivante:typedef struct{ unsigned short port; unsigned char showMessage; unsigned char hashMonitor[16 comment convertir un long en unsigned char ? [ par igorpastis ] voila mon probleme : je doit récupere dans un fichier texte des données. j'ai donc réalisé une fonction que j'apelle à chaque fois que j'en ais besoin directx 9 affichage buffer pixel (unsigned char *) [ par bibnouille78 ] Bonjour a tous !je cherches des infos pour afficher grace a directx un framebuffer provenant d'une webcam en passant pas une fonction qui aurait comme union, quand tu nous tien... [ par julienbj ] Bon, ben voila, j'ai un probleme avec des unions.Voici la déclaration de l'union:typedef struct s_node{    union    {        struct  &nbs


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,917 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales