Comment effectuer une liaison serie en c++ ???

Signaler
Messages postés
3
Date d'inscription
jeudi 14 février 2002
Statut
Membre
Dernière intervention
6 mai 2002
-
Messages postés
2
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
4 mai 2007
-
Voila mon prob : je dois effectuer un liaison serie en c++ avec Builder enter un PC et une machine. Comment definir le port, et comment envoyer une ligne quelquonque a cette machine ??

Merci beaucouuuup d'avance??? Help me ??

3 réponses

Messages postés
17
Date d'inscription
samedi 23 mars 2002
Statut
Membre
Dernière intervention
25 septembre 2002

Ben moi j'utilise le protocole VISCA pour envoyer des ordres a une camera, j'ai donc dû utiliser le port série. C'est tout simple d'emploi voila en gros mon code:

#include <stdio.h>
#include <windows.h>

char buffer[2];
int i;
int valeur;

main (){ /* Writing Thread */
/*char write_buffer[20]; /* Buffer for the input from the keyboard */
HANDLE rec_h; /* Handle of the child */
DWORD rec_id; /* ID of the child */
HANDLE send_com; /* Handle of the sender device */
DCB dcb_write; /* Structure for the config. of the serial port */

DWORD wr; /* Necessary for WriteFile */

/* Creation of the receiver */
/*rec_h = CreateThread (
NULL,
0,
(LPTHREAD_START_ROUTINE) receiver,
NULL,
0,
&rec_id
);
if (rec_h == INVALID_HANDLE_VALUE)
printf("Creating receiver: %ld\n", GetLastError());*/

/* Creation of file to write to the COM1-port */
send_com = CreateFile (
"COM1",
GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL
);
if (send_com == INVALID_HANDLE_VALUE)
printf("Creating file for write access: %ld\n", GetLastError());

/* Reading the state of COM1 */
if (!GetCommState(send_com, &dcb_write))
printf("Error getting send_com-state: %ld\n", GetLastError());

/* New configuration of COM1 */
dcb_write.BaudRate = CBR_19200;
dcb_write.ByteSize = 8;
dcb_write.Parity = NOPARITY;
dcb_write.fParity = FALSE;
dcb_write.StopBits = ONESTOPBIT;
dcb_write.fBinary = TRUE;
dcb_write.fOutxCtsFlow = FALSE;
dcb_write.fOutxDsrFlow = FALSE;
dcb_write.fDtrControl = DTR_CONTROL_DISABLE;
dcb_write.fDsrSensitivity = FALSE;
dcb_write.fTXContinueOnXoff = FALSE;
dcb_write.fOutX = FALSE;
dcb_write.fInX = FALSE;
dcb_write.fErrorChar = FALSE;
dcb_write.fNull = FALSE;
dcb_write.fRtsControl = RTS_CONTROL_DISABLE;
dcb_write.fAbortOnError = FALSE;
dcb_write.XonLim = 20;
dcb_write.XoffLim = 20;

if (!SetCommState(send_com, &dcb_write))
printf("Error getting send_com-state: %ld\n", GetLastError());

/* Work of this thread */
while (1==1){
printf("Entrée: ");
scanf("%s",buffer); /* Input of the data to send */

for(i=0;i<2;i++) {
if (buffer[i]>=48 && buffer[i]<=57)
buffer[i]=buffer[i]-48;
if (buffer[i]>=97 && buffer[i]<=102)
buffer[i]=buffer[i]-87;
}
valeur=buffer[1]+buffer[0]*16;
/*while (write_buffer[i] != '\x00'){*/
/* Writing data to COM1 */
if (WriteFile(
send_com,
&valeur,
1,
&wr,
NULL
) == FALSE)
printf("Writing send_com: %ld\n", GetLastError());
i = i + 1;
/*}*/
}
return (0);
} /* End main */

jaja
Messages postés
1
Date d'inscription
mercredi 6 octobre 2004
Statut
Membre
Dernière intervention
14 mars 2005

Pourrait tu me donner les réferences ou des fichiers, adresses de site contenant des informations sur le protocole Visca.

merci d'avance
Messages postés
2
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
4 mai 2007

// portcom.cpp


#include "portcom.h"
#include
************************************************/
* Nom : Portcom()
* Description: Constructeur de la classe Portcom
afin d'initialiser les paramètres
************************************************/


PortCom::PortCom(char *nport, int Pbits, int Pparite, int Pstop, int Pflux, int Pbaud)
{
nom = new char [strlen (nport)];
strcpy(nom,nport); //copie contenu de nport dans nom
NbBits = Pbits;
Parite = Pparite;
NbStops = Pstop;
Flux = Pflux;
Vitesse = Pbaud;
}


/************************************************
* Nom : Ouvrir(void)
* Description: Ouverture et configuration du port
************************************************/


void PortCom::Ouvrir(void)
{
int XRecep;
int XTrans;
int RTS;
//Ouverture d'un port serie
hPortCom = CreateFile(nom,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
if ( hPortCom == INVALID_HANDLE_VALUE )
{
cout << "Le port selectionné ne peut etre ouvert ou l'est deja" ;
}
else
{
}
// Paramètres du port hcomm
GetCommState(hPortCom,&configuration); // Récupère les infos pour configurer le port
// Configuration des différents champs
configuration.BaudRate=Vitesse; //vitesse
configuration.Parity=Parite; //parite
configuration.ByteSize=NbBits; //nombre de bits
configuration.StopBits=NbStops; //bit de stop
//Contrôle de flux
configuration.fInX=...........; //Xon-Xoff: 0:désactiver,1:activer
configuration.fOutX=........; //Xon-Xoff: 0:désactiver,1:activer
configuration.fRtsControl=..........; //RTS-CTS
//Modifie les paramètres du port à partir du DCB
SetCommState(hPortCom,&configuration); // Mise à jour des champs
}