cs_CTotophe85
Messages postés1Date d'inscriptionmercredi 30 janvier 2008StatutMembreDernière intervention 1 février 2008
-
1 févr. 2008 à 20:35
Anguel
Messages postés31Date d'inscriptionmardi 8 novembre 2005StatutMembreDernière intervention15 septembre 2011
-
26 août 2008 à 16:44
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 //flux d'entrée/sortie
using namespace std;
#include
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.
//------------------------- 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
//----------- 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.
//--------------------------- 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;
Anguel
Messages postés31Date d'inscriptionmardi 8 novembre 2005StatutMembreDernière intervention15 septembre 2011 26 août 2008 à 16:44
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.
<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>