Classe de contrôle du port série rs232 avec les api windows.

Soyez le premier à donner votre avis sur cette source.

Snippet vu 56 063 fois - Téléchargée 7 890 fois

Contenu du snippet

Les fichiers LSerie.cpp et LSerie.h contiennent une classe qui prend en charge la gestion du port série, c'est à dire:
- Ouverture d'un port série (de Com1 à Com9)
- Paramétrage de la communication (Vitesse, Time Out...)
- Lecture de l'état des lignes CTS, DSR, Ring, CD
- Ecriture de l'état des lignes RTS, DTR, TX
Cette classe est compatible avec Visual C++ (et probablement avec les autres compilateurs C++ pour windows).

Le programme SerialTest.exe (Projet Visual C++) est un exemple d'utilisation de cette librairie. Personnellement je m'en sert pour mettre au point des montages electronique connectés au port série.

Source / Exemple :


class LSerie  
{
public:
	//------ CONSTRUCTOR ------
	LSerie();									
	virtual ~LSerie();

	//------ OPEN AND CONFIGURE ------
	bool open(int numPort, long speedInBaud);	//Open the serial port COM "numPort" at the speed "speedInBaud".
							// bauds with and this adjustement : 8 bit / 1 stop bit / no parity).
							// Return: true if success.

	bool open(int numPort, long speedInBaud,		    //Open the serial port COM "numPort" at the speed "speedInBaud".
			  int nbBit, int parity, float nbStopBit);  // bauds with and this adjustement : "nbBit" bit / "nbStopBit" stop bit / parity (0=no parity, 1=odd, 2=even).
								    // Return: true if success.

	void closeCom();			                //Close the serial port.
	bool setTimeOut(DWORD ms);				//Set the time-out for receive data. Return: true if success.
	bool setSpeed(DWORD baudrate);				//Set the speed in bauds. Return: true if success.

	//------ SEND AND RECEIVE DATA ------
	int sendData(DWORD lg, LPBYTE data);		//Send table "data" of "lg" bytes.  Return: number of bytes really sent.
	int sendData(string* data);					//Send string "data".  Return: number of bytes really sent.
	int receiveData(DWORD lg, LPBYTE data);		//Receive table "data" who is limit at "lg" bytes.  Return: number of bytes received.
	int receiveData(string* data);				//Receive string "data". Return: number of bytes received.

	//------ READ AND WRITE THE STATE OF THE CONTROL LINE ------
	bool setRts(bool val);			// Set the state of RTS. Return: true if success.
	bool setDtr(bool val);			// Set the state of DTR. Return: true if success.
	bool setTxd(bool val);			// Set the state of TXD. Return: true if success.
	bool getCts();					// Return: The state of CTS.			
	bool getDtr();					// Return: The state of DTR.	
	bool getRi();					// Return: The state of RI.	
	bool getCd();					// Return: The state of CD.	
	

	string getErrorMsg();			// Return: The error message generated by the last function.

private:
	HANDLE		hcom;	//Fichier de sortie sur le port COM	| The file stream use for acces to the serial port.
	_COMMTIMEOUTS	ct;     //={0,0,0,0,0}; //Config du Time Out	| This variable contain the delay of the time-out. 
	DCB		dcb;	//Config du Port			| This object is use in order to configure the serial port.
	int	        bufferSize;
};

Conclusion :


Librairie Réalisée sous Visual C++ 7.
Pour avoir les mises à jours futur et des explications: http://mixandtec.free.fr/articles/artnorm1_1.php.

Exemple d'utilisation:
com = new LSerie();
// Tentative d'ouverture du port COM2 à une vitesse de 9600 bauds (8bit, 1bit de stop et pas de parité).
if( !com->open(2, 9600) )
{
MessageBox("Port Com indisponible", "SerialTest : Erreur!");
return;
}
// Envois d'une chaine de caractères:
std::string stdString("Message à transmettre");
if( com->sendData(&stdString) < 0 )
{
MessageBox("Envois de données imposssible", "SerialTest : Erreur!");
return;
}

A voir également

Ajouter un commentaire

Commentaires

MangaII
Messages postés
129
Date d'inscription
dimanche 9 décembre 2001
Statut
Membre
Dernière intervention
12 janvier 2009

Salu !
Ton système fonctionne sur tous les système ? win 9x ? NT ? 2000 ? XP ?
djlex03
Messages postés
12
Date d'inscription
lundi 24 juin 2002
Statut
Membre
Dernière intervention
16 juin 2008

Le programme fonctionne sur les systémes Win9x et Win NT (2000, XP...), car il utilise l'API de windows pour accéder au port série.
olischlo
Messages postés
3
Date d'inscription
jeudi 24 juin 2004
Statut
Membre
Dernière intervention
6 octobre 2004

Ca marche très bien !
Merci bien !
CYouness
Messages postés
5
Date d'inscription
dimanche 17 octobre 2004
Statut
Membre
Dernière intervention
17 octobre 2004

ca marche bien ton code merci.......pour des projets en commun contactez moi......je suis nouveau sur le site.mais on peut toujours s'entendre...à créer une application ou un jeu.........je vous attends
Pendary
Messages postés
7
Date d'inscription
jeudi 5 mai 2005
Statut
Membre
Dernière intervention
14 mai 2005

slt, je viens de dl les fichier L_SERIE.h et L_SERIE.cpp

et j'ai un peu de mal a utiliser la fonction SendData

Je dois envoyer la trame qui suit "PL,1 et le retour chariot(0x0D)"

si quelqun pourrait m'aider.

Merci d'avance ;)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.