OVH Cloud OVH Cloud

je cherche à réaliser un petiti programme

3 réponses
Avatar
Vincent
[DEBUTANT ON]
Bonjour et joyeux noël à tous,
je cherche à réaliser un petit programme de lecture du port com.
J'ai repris des sources sur
http://www.cppfrance.com/code.aspx?ID=11115#commentaires mais je ne sais pas
m'en servir.
J'aimerai profiter de cette occasion pour apprendre le c++. Pouvez vous me
donner un coup de main (j'ai installé dev-c++).
Par contre dans les tutoriaux que j'ai trouvé, je n'arrive pas à utiliser
cout :-(((
Bonne journée à tous
Vincent
[DEBUTANT OFF]

3 réponses

Avatar
ricky
bonjour

Bonjour et joyeux noël à tous,


de meme

J'aimerai profiter de cette occasion pour apprendre le c++. Pouvez vous me
donner un coup de main (j'ai installé dev-c++).


oui devcpp est un programme genial je trouve :)

Par contre dans les tutoriaux que j'ai trouvé, je n'arrive pas à utiliser
cout :-(((


ou est ton probleme ?

c est le cout en general que tu n'arrives pas a utiliser ou juste dans
le cadre du port com ?

sinon, c'est simple :

#include <iostream> // c'est la qu'il se planque :)
using namespace std;
/* dans le iostream par exemple, les divers noms sont inclus dans un
espace de nom, bref ils ssont prefixes d un chtit nom qui est "std",
afin d eviter en particulier de rentrer en collision avec un nom a toi,
bon ca sert pas qu a ca bien sur :)

le using indique que si le compilo ne trouve pas le nom demande, il va
automatiquement le prefixer par std et voir s'il existe */
*/

int main()
{
cout << "bonjour";
}

si tu ne met pas le using namespace std, cela donne

#include <iostream>
int main()
{
std::cout << "bonjour";
}

euh j'espere avoir un peu compris ta question :)

@+
ricky

Avatar
Vincent
ça marche, merci beaucoup!
je n'avais pas mis std::
ou using namespace std
sinon, voici la source que j'ai en cpp pour le port com,
comment la mettre en oeuvre simplement pour lire des données et les stocker
dans un fichier. (je m'occuperai de la manipulation plus tard).

// FICHIERS D'INCLUSION
//--------------------------------------------------------------------------
----
#include <windows.h>
#include <winbase.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>

// CONSTANTES
//--------------------------------------------------------------------------
-----
// Définition du code d'erreurs
typedef enum
{
e_ErrCom_None, // Pas d'erreur
e_ErrCom_Creation, // Erreur lors de la création du flux
e_ErrCom_Utilise, // Le port com est déjà utilisé
e_ErrCom_Inexistant, // Le port com n'existe pas
e_ErrCom_Timeout, // Timeout lors d'une émission-réception
e_ErrCom_Emission, // Erreur lors de l'émission
e_ErrCom_Reception, // Erreur lors de la réception
e_ErrCom_Definition_Trame, // Erreur de définition de la trame
e_ErrCom_Nack, // Demande non prise en coompte
e_ErrCom_Checksum // Erreur de checksum
} e_ErrCom;

// Nom du port série
#define PORT1 "COM1"
#define PORT2 "COM2"

// Définition des vitesses de communication
#define V1200 1200
#define V2400 2400
#define V4800 4800
#define V9600 9600

// Définition du nombre de bits
#define BITS_7 7
#define BITS_8 8

// Définition du nombre de bits de stop
#define BIT_DE_STOP_1 1
#define BIT_DE_STOP_2 2

// Définition de la parité
#define PAS_DE_PARITE 'N'
#define PARITE_IMPAIRE 'O'
#define PARITE_PAIRE 'E'

// Codes de retour génériques
#define OK 1
#define KO 0

// Longueur max réservée pour une trame
#define LG_TRAME 100

// PROTOTYPES
//--------------------------------------------------------------------------
--
e_ErrCom OuvreCom(char *strPort,long BaudRate,int BitsSize,int Parity,int
StopBits);
e_ErrCom EmissionCom(const void *lpBuf, unsigned int nCount);
e_ErrCom ReceptionCom(void *lpBuf, unsigned int nCountMax, unsigned int
*pCountRead);
void FermeCom();

// VARIABLES GLOBALES
//--------------------------------------------------------------------------
---
DCB g_DCB; // structure dcb du port
e_ErrCom g_ErrCom= e_ErrCom_None; // Variable des erreurs de com
HANDLE g_hCom = 0; // handle de la com


void main (void)
{
//Exemple de configuration du port serie :
g_ErrCom=OuvreCom(PORT1,V9600,BITS_8,PARITE_PAIRE,BIT_DE_STOP_1);
//Exemple d'emission
g_ErrCom=EmissionCom("UneTame",sizeof("UneTame"));

}


//--------------------------------------------------------------------------
----
// FONCTION : OuvreCom
//--------------------------------------------------------------------------
----
// DESCRIPTION :
// Initialise et ouvre un port série
//
//--------------------------------------------------------------------------
----
// PARAMETRES :
// - strPort Nom du port "COM1", "COM2"
// - BaudRate Vitesse
// - BitsSize Taille de l'info
// - Parity Parité
// - StopBits Nombre de bits de stop
//
// RETOUR :Code d'erreur
//--------------------------------------------------------------------------
----
e_ErrCom OuvreCom(char *strPort,long BaudRate,int BitsSize,int Parity,int
StopBits)
{
g_ErrCom = e_ErrCom_None;

// On ouvre le port série
g_hCom = CreateFile(strPort,GENERIC_READ |
GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_WRITE_THROUGH |
FILE_FLAG_NO_BUFFERING,NULL);

if(g_hCom == INVALID_HANDLE_VALUE)
{
// Echec
g_ErrCom=e_ErrCom_Creation;
}
else
{
// On vide les buffers

PurgeComm(g_hCom,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);

// On paramètre le port série
g_DCB.DCBlength = sizeof(DCB);
//Configuration actuelle
GetCommState(g_hCom, &g_DCB);
//Modification du DCB
g_DCB.BaudRateºudRate;
g_DCB.ByteSize=BitsSize;
g_DCB.Parity=Parity;
g_DCB.StopBits=StopBits;
g_DCB.fDtrControl=DTR_CONTROL_DISABLE;
//Configuration de la liaison serie
SetCommState(g_hCom,&g_DCB);
}
return g_ErrCom;
}



//--------------------------------------------------------------------------
--
// FONCTION : EmissionCom
//--------------------------------------------------------------------------
--
// DESCRIPTION :
// Emission d'octets sur la liaison série
//
//--------------------------------------------------------------------------
--
// PARAMETRES :
// -lpBuf Pointeur sur les octets a emettre
// -nCount Nombre d'octet a emettre
//
//--------------------------------------------------------------------------
--
// RETOUR :Code d'erreur
//--------------------------------------------------------------------------
--
e_ErrCom EmissionCom(const void* lpBuf,unsigned int nCount)
{

DWORD NumBytes=0;

if(g_hCom!=NULL)
{
// On pari sur pas d'erreur
g_ErrCom=e_ErrCom_None;

//Emission du buffer
if(WriteFile(g_hCom,lpBuf,nCount,&NumBytes,NULL)==0)
{
g_ErrCom=e_ErrCom_Emission;
}
}
else
//Le port n'a pas été ouvert
g_ErrCom=e_ErrCom_Creation;

return g_ErrCom;

}

//--------------------------------------------------------------------------
-
// FONCTION : ReceptionCom
//--------------------------------------------------------------------------
-
// DESCRIPTION :
// Reception de caractères sur la liaison série
//
//--------------------------------------------------------------------------
-
// PARAMETRES :
// -lpBuf Pointeur sur le buffer de caractère a lire
// -nCountMax Nombre maxi de caractère a lire
// -pCountRead Pointeur sur le nombre de caractères lus
//--------------------------------------------------------------------------
-
// RETOUR :Code d'erreur
//--------------------------------------------------------------------------
-
e_ErrCom ReceptionCom(void *lpBuf,unsigned int nCountMax, unsigned int*
pCountRead)
{
COMSTAT Stat;
DWORD Errors;
unsigned int nCarALire;
unsigned long NCarLus=0;

if(g_hCom!=NULL)
{
//on pari sur pas d'erreur
g_ErrCom=e_ErrCom_None;

//Pour éviter de gérer un time out
Sleep(500);

//Pour connaitre le nombre d'octets dans le buffer d'entrée
ClearCommError(g_hCom,&Errors,&Stat);
nCarALire=Stat.cbInQue;

//On effectue la lecture si il y a des caractères présents
if( (nCarALire>0)&&(nCarALire<=nCountMax) )
{
if(ReadFile(g_hCom,lpBuf,nCarALire,&NCarLus,NULL)==0)
{
g_ErrCom=e_ErrCom_Reception;
}

}
*pCountRead=NCarLus;
}
else
//Le port n a pas été ouvert
g_ErrCom=e_ErrCom_Creation;

//Compte rendu de l'exécution
return g_ErrCom;

}

//-----------------------------------------------------------------------
// FONCTION : FermeCom
//-----------------------------------------------------------------------
// DESCRIPTION :
// Ferme le port série préalablement ouvert avec OuvreCom
//
//-----------------------------------------------------------------------
// PARAMETRES :
// Néant
//-----------------------------------------------------------------------
// RETOUR :Néant
//-----------------------------------------------------------------------
void FermeCom()
{
if(g_hCom!=NULL)
{
CloseHandle(g_hCom);
}
}




"ricky" a écrit dans le message de
news:bshje5$qm4$
bonjour

Bonjour et joyeux noël à tous,


de meme

J'aimerai profiter de cette occasion pour apprendre le c++. Pouvez vous
me


donner un coup de main (j'ai installé dev-c++).


oui devcpp est un programme genial je trouve :)

Par contre dans les tutoriaux que j'ai trouvé, je n'arrive pas à
utiliser


cout :-(((


ou est ton probleme ?

c est le cout en general que tu n'arrives pas a utiliser ou juste dans
le cadre du port com ?

sinon, c'est simple :

#include <iostream> // c'est la qu'il se planque :)
using namespace std;
/* dans le iostream par exemple, les divers noms sont inclus dans un
espace de nom, bref ils ssont prefixes d un chtit nom qui est "std",
afin d eviter en particulier de rentrer en collision avec un nom a toi,
bon ca sert pas qu a ca bien sur :)

le using indique que si le compilo ne trouve pas le nom demande, il va
automatiquement le prefixer par std et voir s'il existe */
*/

int main()
{
cout << "bonjour";
}

si tu ne met pas le using namespace std, cela donne

#include <iostream>
int main()
{
std::cout << "bonjour";
}

euh j'espere avoir un peu compris ta question :)

@+
ricky




Avatar
ricky
hello

ça marche, merci beaucoup!
je n'avais pas mis std::
ou using namespace std


important les namespace pour eviter de se melanger les pinceaux :)

sinon, voici la source que j'ai en cpp pour le port com,


mmm c est un source en C, pas vraiment en cpp pour commencer !

tu le compile pour commencer :)


void main (void)
{
//Exemple de configuration du port serie :
g_ErrCom=OuvreCom(PORT1,V9600,BITS_8,PARITE_PAIRE,BIT_DE_STOP_1);
//Exemple d'emission
g_ErrCom=EmissionCom("UneTame",sizeof("UneTame"));

}



c est la que tu met ce que tu veux faire...

ici, dans l exemple, il ouvre le port Com avec les parametres que tu
peux lire dans ouvrecom, et y envoie "UneT(r)ame" (je pense qu'il ma,que
le r, mais ca ne change rien lol)

c est tout !

donc si tu branche un appareil qui lit cette information, il recevra
"uneTrame" ...

mais ce n'est pas du cpp, vas plutot sur le site de c amha

@+
ricky