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 471 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

Merci, ça m'a servi très bien.
Messages postés
2
Date d'inscription
jeudi 4 novembre 2010
Statut
Membre
Dernière intervention
5 janvier 2013

désolé je n'avais pas vu le lien pour les fichiers merci
http://mixandtec.free.fr/articles/artnorm1_1.php
Messages postés
2
Date d'inscription
jeudi 4 novembre 2010
Statut
Membre
Dernière intervention
5 janvier 2013

bonjour,

Les fichiers sources LSerie.cpp et LSerie.h ne sont pas disponibles ainsi que le programme SerialTest.exe, pouvez vous les ajouter merci
Messages postés
11
Date d'inscription
lundi 9 avril 2012
Statut
Membre
Dernière intervention
28 avril 2012
1
Pour ce qui est de la communication via les ports series j'ai trouve la solution :
http://www.siteduzero.com/forum-83-758743-p1-communication-port-serie.html#r7303079
Messages postés
4
Date d'inscription
lundi 3 janvier 2011
Statut
Membre
Dernière intervention
9 mars 2012

bonjour liligth, mon projet consiste à élaborer un programme permettant de communiquer avec les controleurs de carrefour à feux tricolores qui utilisent les protocole DIASER. cette communication est faite par liasion serie rs232 ou ethernet. Apres communication, pouvoir élaborer un systéme de telegestion afin de pouvoir receuillir le journal de bord du controleur (defaut,alarmes,...).
Sa me fera un plaisir si quelqu'un peut m'aider car j'ai 3 mois de stage or j'ai deja fais 2 mois sans avancement.
Cordialement!
Afficher les 48 commentaires

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.