cs_proj
Messages postés5Date d'inscriptionmardi 21 mars 2006StatutMembreDernière intervention31 mars 2006
-
22 mars 2006 à 13:38
cs_siskozed
Messages postés11Date d'inscriptionjeudi 25 janvier 2007StatutMembreDernière intervention20 mars 2009
-
11 mars 2008 à 15:34
Bonjour Tout le monde,
Je suis pas une as en programmation et il m'est demandé dans le cadre de mes études de réaliser un programme en C gérant la liaison sur un PC sous Windows.
Je vous remercie d'avance pour votre aide.
//******************************************************************************
// Destructeur: fermeture du port serie
//******************************************************************************
CRS232::~CRS232()
{
CloseHandle(hPort);
}
//******************************************************************************
// ConfigurerLiaison: configuration du port serie
//******************************************************************************
bool CRS232::ConfigurerLiaison(char* Port)
{
bool fSuccess;
DWORD Error;
// Ouverture du port de Com
hPort = CreateFile (Port,GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL);
// Vérifier si handle ouvert correctement
fSuccess = hPort;
if (!fSuccess)
{
Error = GetLastError();
CloseHandle(hPort);
}
else
{
cs_proj
Messages postés5Date d'inscriptionmardi 21 mars 2006StatutMembreDernière intervention31 mars 2006 23 mars 2006 à 18:10
Hi
j'ai bien reçu vos propositions, merci.
Surtout ne rigolez mais où est ce que je dois rentrer le programmer pour faire communiquer les ports de mes pCs entre eux.
En passant , à quoi renvoi les paramètres GENERIC_READ | GENERIC_WRITE et comment sont ils utilisés.
hCom = CreateFile( pcCommPort,
GENERIC_READ | GENERIC_WRITE,
0, // must be opened with exclusive-access
NULL, // no security attributes
OPEN_EXISTING, // must use OPEN_EXISTING
0, // not overlapped I/O
NULL // hTemplate must be NULL for comm devices
);
if (hCom == INVALID_HANDLE_VALUE)
{
// Handle the error.
printf ("CreateFile failed with error %d.\n", GetLastError());
return (1);
}
// Build on the current configuration, and skip setting the size
// of the input and output buffers with SetupComm.
fSuccess = GetCommState(hCom, &dcb);
if (!fSuccess)
{
// Handle the error.
printf ("GetCommState failed with error %d.\n", GetLastError());
return (2);
}
// Fill in DCB: 57,600 bps, 8 data bits, no parity, and 1 stop bit.
dcb.BaudRate = CBR_57600; // set the baud rate
dcb.ByteSize = 8; // data size, xmit, and rcv
dcb.Parity = NOPARITY; // no parity bit
dcb.StopBits = ONESTOPBIT; // one stop bit
fSuccess = SetCommState(hCom, &dcb);
if (!fSuccess)
{
// Handle the error.
printf ("SetCommState failed with error %d.\n", GetLastError());
return (3);
}
printf ("Serial port %s successfully reconfigured.\n", pcCommPort);
return (0);
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Tekila48
Messages postés15Date d'inscriptionmardi 21 janvier 2003StatutMembreDernière intervention26 mars 2006 24 mars 2006 à 19:56
GENERIC_READ et GENERIC_WRITE servent à te donner les droits standard en lecture et en écriture
argc et argv servent à récuperer les paramètres de la ligne de commande
si tu tapes en ligne de commande : prog.exe -t c:\test.txt *.bin
tu auras dans argc le nombre de paramètres et dans argv les paramètres eux-mêmes :
argv[0] = "-t"
argv[1] = "c:\\test.txt"
argv[2] = "*.bin"
Dans ton cas, je doute que tu aies besoin de t'en servie, à moins que tu veuilles passer le numero du port à partir de la ligne de commande.
Pour faire communiquer tes deux PC, le plus simple est d'appeller les fonctions dans main, qui est le point d'entrée de ton programme.
Ex (désolé, le html marche pas chez moi, donc c'est du texte sans frioritures):
#include "com_port.h" //contient les fonctions de ports COM
#include ... (inclure les en-tetes necessaires)
int main(int argc, char *argv)
{
char Buffer[256]; //buffer contenant le texte
short Run = 1; //continuer à tourner ou quitter
unsigned long* pnId = new unsigned long; //numero du port com
unsigned long* pBytesRead = new unsigned long; //nombre de bytes lus
unsigned short i; //index de caractère
C_COM_PORT* Port = new C_COM_PORT; //Créer un nouvel objet COM_PORT (défini dans com_port.h)
printf("\r\n Port COM to open : "); //Demander le numéro du port COM à ouvrir
scanf("%d", pnId);
while(Run)
{
//Si l'utilisateur tapes sur une touche, récuperer toutes les touches jusqu'à l'appui de ENTREE ( \r )
i 0; //Index de caractères 0
if(kbhit())
{
printf("\r\n%s >> ", Port->GetPortName()); //Affiche >> pour signaler à l'utilisateur qu'il peut taper son texte
while((Buffer[i] = getch()) != '\r') //Tant que la touche n'est pas ENTREE
{
if(Buffer[i] == 0x8) //si backspace effacer le car precedent
{
putch(0x20); //mettre un espace pour enlever le caractère
putch(0x8); //revenir sur l'espace pour le modifier
i--; //décrémenter l'index de caractère
}
else i++; //si différent de backspace, incrémenter l'index de caractère
} //END WHILE : l'utilisateur a tapé ENTREE, envoyer le message :
printf("\r\n"); //Afficher le retour chariot
Buffer[i] = '\0'; //Fermer la chaine
if(!strcmp(Buffer, "exit")) Run = 0; //si le texte est "exit", quitter le programme
}
//Envoi du message :
strcat(Buffer, "\r\n"); //ajouter \r\n (la plupart des appareils RS232 attendent \r\n à la fin d'un message
Port->WriteCOM(Buffer); //Ecrire buffer sur le port
strcpy(Buffer, ""); //Effacer buffer
//Test de lecture : si de caractères sont detectés sur le port :
if(Port->ReadCOM(Buffer, 256, pBytesRead))
printf("%s\r\n", Buffer); //Afficher le buffer
}
return(0); //quitter sans erreurs
}
-------------------------------------------------------------------------------
Comme tu peux le voir, je n'utilise pas les paramètres d'entrée.
cs_proj
Messages postés5Date d'inscriptionmardi 21 mars 2006StatutMembreDernière intervention31 mars 2006 27 mars 2006 à 16:19
Bonjour TEKILA48
j'ai testé ton programme sur Borland C++ mais le compilateur ne reconnait la librairie "com_port.h".
Apparemment c'est un fichier que tu as surement créer.
Est ce que tu pourrais me l'envoyer STP.
cs_siskozed
Messages postés11Date d'inscriptionjeudi 25 janvier 2007StatutMembreDernière intervention20 mars 2009 11 mars 2008 à 15:34
je suis trop paumé... ma station météo "oregon WM928NX professional" connectée à l'hyperterminal en 9600 8 N 1 par lisaison série m'envoie n'importe quoi...
Je vois des trames mais ce n'est pas de l'héxa mais des coeurs, des piques, des têtes de bonhommes des fleches... bref de la merde.
Ma station météo sera plus tard reliée par RS232 à une carte SC13 DK51 puis le modufle sera lui relié par RJ45 au pc. Ensuite affichage dans l'ihm puis enregistrement toutes les 5 minutes des mesures.
Alors j'ai plusieurs problemes :
Je ne connais pas la trame envoyée
Je ne sais pas comment récupérer la trame (programme fossil ? je n'y comprend rien à toutes ces librairies clib.h, fossil.h etC...)
Je ne sais pas comment envoyer la trame dans le programme général (par socket surement).