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

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

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.