begin process at 2012 05 30 11:17:24
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Périphériques

 > 

Reception sur port COM1 sous Builder


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

Reception sur port COM1 sous Builder

vendredi 6 février 2004 à 17:13:36 | Reception sur port COM1 sous Builder

Ardeje26


Bonjour,
Je travail sous Borland Builder 5 et j'ai un problème pour récupérer les datas sur mon port COM1 avec le code suivant.Je peut simplement savoir lorsu'il y a une data qui est envoyée.Si quelqu'un a une idée...Merci.
//---------------------------------------------------------------------------

#include <vcl.h>
#include <stdio.h>
#include <math.h>


#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int v=0;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
int InitCOM(char *Port,char *Parite,char *Vitesse,char *Data,char *StopBit)

{

DCB dcb; // déclarer une variable contenant la configuration du port
HANDLE hCom; // déclarer un handle
DWORD dwError; // n° de l'erreur
BOOL fSuccess; // tout c'est bien passé
/*--------------------------------------------------------*/
/* Ouverture du port de Com */
/*--------------------------------------------------------*/
hCom = CreateFile(
Port, // Choix du port « COMx »
GENERIC_READ | GENERIC_WRITE, // accès pour lire et écrire sur le port
0, // accès exclusif au port de COM
NULL, // sécurité par défaut
OPEN_EXISTING, //Doit être à cette valeur car se n'est pas un fichier
0,
NULL // mode synchrone
);


/*-----------------------------------------------------------*/
/* Vérifier si handle ouvert correctement */
/*-----------------------------------------------------------*/
if (hCom == INVALID_HANDLE_VALUE)
{
dwError = GetLastError();
/* Fichier non créer Gérer l'erreur */
}

/*-----------------------------------------------------------*/
/* Lecture Configuration initiale */
/*-----------------------------------------------------------*/
fSuccess = GetCommState(hCom, &dcb);

if (!fSuccess)
{
/* Gérer l'erreur*/
}

/*-------------------------------------------------------------------*/
/* Configuration du port */
/*-------------------------------------------------------------------*/
/* Gestion de la vitesse */
dcb.BaudRate = StrToInt(Vitesse);
/* Gestion du nombre de bits */
dcb.ByteSize = StrToInt(Data);
/* Gestion de la parité */
if (strcmp(Parite,"Aucune")==0)
dcb.Parity = NOPARITY;

if (strcmp(Parite,"Paire")==0)
dcb.Parity = EVENPARITY;

if (strcmp(Parite,"Impaire")==0)
dcb.Parity = ODDPARITY;

/* Gestion du Stop Bit */
if (strcmp(StopBit,"1")==0)
dcb.StopBits = ONESTOPBIT;
if (strcmp(StopBit,"1.5")==0)
dcb.StopBits = ONE5STOPBITS;
if (strcmp(StopBit,"2")==0)
dcb.StopBits = TWOSTOPBITS;

dcb.DCBlength;
dcb.BaudRate;
dcb.fBinary=1;
dcb.fParity=0;
dcb.fOutxCtsFlow=0;
dcb.fOutxDsrFlow=0;
dcb.fDtrControl=0;
dcb.fDsrSensitivity=0;

dcb.fTXContinueOnXoff=0;
dcb.fRtsControl=0;

/*-----------------------------------------------*/
/* Configurer le port */
/*-----------------------------------------------*/
fSuccess = SetCommState(hCom, &dcb);

if (!fSuccess)
{
/* Gérer l'erreur*/
}

/*------------------------------------------*/
/* fermer le port de com */
/*------------------------------------------*/
CloseHandle(hCom);

return(fSuccess);
}

/*-----------------------------------------------------------------------------*/
/* Envoyer une chaine de caractére sur la RS232 */
/* */
/* Paramètres : */
/* char *Chaine La chaine à Envoyer */
/* char *Port, le port de COM : "COM1" ou "COM2" */
/* char *EolChar, le caractère fin de ligne */
/* */
/* Retour : 0 si erreur */
/*-----------------------------------------------------------------------------*/
int EnvoiChaineRS232(char *Chaine,char *Port,char *EolChar)
{
HANDLE hCom;
DWORD dwError;
BOOL fSuccess;
DWORD dwEvtMask;
int i;
int NbOctet;
char *Message;
unsigned long nBytesWrite;


Message = new char[200];
/*-----------------------------------------------*/
/* Ouverture du port de communiucation */
/*-----------------------------------------------*/
hCom = CreateFile(Port,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL
);
/*--------------------------------------------------*/
/* Envoi de la chaine + Eol caractére */
/*--------------------------------------------------*/
if(strcmp(EolChar,"CR")==0)
sprintf(Message,"%s%c",Chaine,0x0D);

if(strcmp(EolChar,"LF")==0)
sprintf(Message,"%s%c",Chaine,0x0A);

if(strcmp(EolChar,"LF/CR")==0)
sprintf(Message,"%s%c%c",Chaine,0x0A,0x0D);

if(strcmp(EolChar,"CR/LF")==0)
sprintf(Message,"%s%c%c",Chaine,0x0D,0x0A);
// compter le nombre d'octet à envoyer
NbOctet = StrLen(Message);

// écrire dans le fichier
WriteFile(hCom,Message,NbOctet,&nBytesWrite,NULL);

// Fermer le handle de com
CloseHandle(hCom);

// Libération mémoire
delete[] Message;

return(fSuccess);
}


/*------------------------------------------------------------------------------*/
/* Recevoir une chaine de caractére sur la RS232 */
/* */
/* Paramètres : */
/* char *ChaineRecue , buffer de réception */
/* char *Port, le port de COM : "COM1" ou "COM2" */
/*------------------------------------------------------------------------------*/
int RecevoirRS232(char *ChaineRecue,char *Port)
{
DCB dcb;
HANDLE hCom;
DWORD dwError;
BOOL fSuccess;
BOOL bResult;
DWORD dwEvtMask;
COMMTIMEOUTS tTimeout;
unsigned long nBytesRead;
char *inBuffer;
int TimeoutRead;

int i;
int NbOctet;
char c;

/*-------------------------------------*/
/* Initialisation des variables */
/*-------------------------------------*/
inBuffer = new char[200]; // réservation mémoire pour le buffer de récéption
sprintf(inBuffer,"%s","");
nBytesRead=0;
/*-----------------------------------------------*/
/* Ouverture du port de communication */
/*-----------------------------------------------*/
hCom = CreateFile(Port,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL
);
/*----------------------------------*/
/* Définition des timeouts */
/*----------------------------------*/
TimeoutRead = 500; // timeout de 500ms

tTimeout.ReadIntervalTimeout = MAXWORD;
tTimeout.ReadTotalTimeoutMultiplier = 0;
tTimeout.ReadTotalTimeoutConstant = TimeoutRead; // pas de time out = 0
tTimeout.WriteTotalTimeoutMultiplier = 0;
tTimeout.WriteTotalTimeoutConstant = 0;

// configurer le timeout
SetCommTimeouts(hCom,&tTimeout);

/*-------------------------------------------------------------*/
/* boucle d'attente de lecture des octets */
/* Sortie de la boucle par timeout par exemple, si */
/* l'on suppose le format de la trame reçu n'est */
/* variable. */
/*-------------------------------------------------------------*/
bResult = ReadFile(hCom,inBuffer,199,&nBytesRead,NULL);

if (nBytesRead!=0) // Il existe des octets lus
{
v=1;
// Mettre en forme la trame : recherche de CR
}
else
sprintf(inBuffer, "%s ", "Pas de donnée reçue") ;

sprintf(ChaineRecue,"%s",inBuffer); // Retourner la chaine recue

// fermer le port
CloseHandle(hCom);

// Libérer la mémoire
delete[] inBuffer;

return(fSuccess);
}


//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{

int Erreur ;
char *TrameRecue ;

TrameRecue = new char[200] ;
char Port[4];
sprintf(&Port[0],"%s","COM1");
char Parite[7],Vitesse[4],Data[1],StopBit[1];
sprintf(&Parite[0],"%s","Aucune");
sprintf(&Vitesse[0],"%s","4800");
sprintf(&Data[0],"%s","8");
sprintf(&StopBit[0],"%s","1");
while(1)
{
Erreur=InitCOM(&Port[0],"Aucune","4800","8",&StopBit[0]) ;
if (Erreur !=0) // périphérique initialisé correctement
{

// envoi de la commande d'identification
// EnvoiChaineRS232(" ID ? ", " COM1 ", " CR ") ;
// recevoir la réponse
RecevoirRS232(TrameRecue, "COM1") ;
if(v==1)
{
MessageBox(NULL,TrameRecue,"Reception",MB_OK);
v=0;
}
// Traiter la trame recue
}
else
{
// afficher une erreur
}
}
// Libération mémoire
delete[] TrameRecue ;


}
//--------------------------------------------
mardi 24 février 2004 à 10:51:02 | Re : Reception sur port COM1 sous Builder

Dvdmizo

Réponse acceptée !

DvdMizo

Salut,

pour pouvoir recevoir des informations sur le port COM il faut l'ouvrir en début de programme et surtout ne pas le refermer tant que tu n'as pas fini de recevoir tout ce que tu as a recevoir (en général il vaut mieux fermer le port seulement à la fin en quittant)
à chaque fois que tu initialises le port (avec hCom = CreateFile(Port, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL ); ) tu perds toutes les données déja reçues.

J'espère que ça pourra t'aider


Cette discussion est classée dans : port, char, hcom, sprintf, dcb


Répondre à ce message

Sujets en rapport avec ce message

reception et envoi d'une trame sous rs232 [ par fl2010 ] bonjour je suis entrain d'ecrire un programme pour faire la communication entre un PC et un regulateur eurotherm à l'aide du rs232. j'ai fait un progr probleme rs232 [ par rhumone ] j'arrive pas a récupérer la totalitée des données sur ma liaison rs232 je dois recevoir environ 7000 octet j'en recois que 4000 octet.voila mon source port serie [ par maurejac ] bonjour, je dois realiser un petit programme de communication avec une carte par port serie, la plupart du temps il marche tres bien mais de temps en ouverture d'un port serie [ par KryztL ] bonjour tout le monde,j aurai besoin d aide pour le projet que je suis entrain de programmer.je souhaite ouvrir un port serie sous visual studio C++, SOS reception et affichage sur port serie [ par dgac ] J'ai dévellopé le programme suivant pour recevoir et afficher une chaine de carractére pour un port serie . J'aimerai de l'aide pour recevoir un carra RS232 sous vb.net 2005 [ par dragonfly95 ] bonjour, je cherche à ouvrir un port RS232 sur un PC sous vb.net 2005 en MFC mais il ne veut jamais l'ouvrir. J'utilise la fonction CreateFile(,,,,) m Runtime ?! [ par Chaminouonw ] Bonjour, je tente de faire un programme qui supprime les accents d'un fichier, voila mon source : #include #include [mfc]XON/XOff [ par katzemen ] bjr a tous je voudrai savoir si quelqu'un sais lire sur le port serie avec le protocole XON/XOFF. Voici mon code pr l'initialisation du port: ouvertur Aide pour un programme,création variable [ par pirana ] bonjour à vous tous ... Voila je suis un débutant en C... j'ai récupéré ce code sur le site et j'aimerai me simplifié la vie...mais je n'y arrive pas C++ communication avec port COM [ par seignseifer ] Bonjour tout le monde, aidez moi s'il vous plait et si vous avez le temps, je vais craquer. JE pense que c'est assez basique, mais je suis debutant, d


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

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 : 1,326 sec (4)

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