begin process at 2012 05 30 17:43:49
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

SOS reception et affichage sur port serie


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

SOS reception et affichage sur port serie

mercredi 9 mai 2007 à 10:27:49 | SOS reception et affichage sur port serie

dgac

J'ai dévellopé le programme suivant pour recevoir et afficher une chaine de carractére pour un port serie . J'aimerai de l'aide pour recevoir un carractére (la configuration du port a été testé et fonctionne).

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <conio.h>
#include <time.h>
HANDLE hCom;
int esclave,code,adressePF,adressepf,motPF,motpf,CRC_PF,CRC_pf;
char reception();

char reception()
{DWORD nb_read;
unsigned char buffer[1024];
char D;
D=ReadFile (hCom,buffer,sizeof(buffer),&nb_read,NULL);
return D;
}

void config_com()//fonction de configuration du port
{
DCB dcb;
int Data_size;//variable nombre de bits(7,8)
int Vitesse;//variable vitesse (4800bauds....)
int parity;//variable parité(impair,paire,sans)
int stop_bit;//variable nombre de bits stop (1, 1.5 , 2)
int COM;//variable du port
DWORD dwError;

printf("selection du COM utilise:1,2,3 ou 4\n");
scanf("%d",&COM);//saisie du port utilisé
switch(COM)//menu pour choix du port
{case 1:
hCom = CreateFile ("COM1",GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,NULL);
/*choix du port 1 en lecture écriture ,ouvre un fichier existant avec un accés
exclusif à ce périphérique. S'il est déjà ouvert, CreateFile échoue.*/
break;
case 2:hCom = CreateFile ("COM2",GENERIC_READ | GENERIC_WRITE,0,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
/*choix du port 2 en lecture écriture ,ouvre un fichier existant avec un accés
exclusif à ce périphérique. S'il est déjà ouvert, CreateFile échoue.*/
break;
case 3:hCom = CreateFile ("COM3",GENERIC_READ | GENERIC_WRITE,0,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
break;
case 4:hCom = CreateFile ("COM4",GENERIC_READ | GENERIC_WRITE,0,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
break;
default:printf("erreur\n");
}
if (hCom == INVALID_HANDLE_VALUE) //fonction de test d'erreur d'ouverture du COM
{
dwError = GetLastError();
/* Fichier non créer Gérer l'erreur */
}

printf("selectionner le nombre de bits de donnees\n");
scanf("%d",&Data_size);//selection nombre de bits de donnees
printf("selectionner de la vitesse\n");
scanf("%d",&Vitesse);//selectionner de la vitesse
memset (&dcb,0,sizeof(dcb));
dcb.DCBlength = sizeof (dcb);//configure le port(taille)
dcb.BaudRate =Vitesse;//configure le port(vitesse)
dcb.ByteSize = Data_size;////configure le port(format)
printf("selectionner de la parite:\npaire=1\nimpaire=2 \nsans parite=3\n");
scanf("%d",&parity);//selectionner de la parité
switch(parity)//menu selection de la parité
{
case 1:dcb.Parity = EVENPARITY;//configure une Parité paire
break;
case 2:dcb.Parity = ODDPARITY;//configure une Parité impaire
break;
default :dcb.Parity = NOPARITY;//Pas de parité
}
printf("selectionner de le nombre de bit de stop\n");
printf("1=1bit de stop\n2=1.5bit de stop\n3=2 bits de stop\n");
scanf("%d",&stop_bit);//selection du nombre de bit de stop
switch(stop_bit)
{case 1:dcb.StopBits = ONESTOPBIT;//1 bit de stop
break;
case 2:dcb.StopBits = ONE5STOPBITS;//1.5 bit de stop
break;
default:dcb.StopBits = TWOSTOPBITS;// 2 bit de stop

}
if(!SetCommState (hCom,&dcb))//fonction de test de la configuration
{printf("erreur fatale");//si probléme de config on affiche un msg d'erreur
}
}


int main ()
{char R;
code=0;
config_com();//configure le port
do
{
R=reception();
printf("%c",R);
}while(1);
CloseHandle(hCom); //ferme le fichier

return 0;
}

 

mercredi 9 mai 2007 à 13:36:32 | Re : SOS reception et affichage sur port serie

DeAtHCrAsH

Regarde dans les sources de ymca2003 tu trouveras de quoi faire.
Puis essaye au moins de faire une recherche sur le forum avant de poster ton message car des réponses à cette question se comptent à la pelle!

Shell
mercredi 9 mai 2007 à 14:45:03 | Re : SOS reception et affichage sur port serie

dgac

J'avais déja regardé et fouillé dans le forum et sur google mais J'aurai besoin de l'affichage de ce que je recois afin de vérifier que ma fonction de réception est correcte.
ce qui a mon avis n'est pas le cas et je ne comprend pas pourquoi car quand je tappe
char reception()
{
DWORD nb_read;
unsigned char buffer[1024];
char D;
D=ReadFile (hCom,buffer,sizeof(buffer),&nb_read,NULL);
printf("%c",buffer);
return D;
}
je ne sort jamais de cette fonction (bloqué par le readfile) mais pourquoi et est ce que un readfile est suffisant pour recevoir et afficher quelquechose
mercredi 9 mai 2007 à 15:11:29 | Re : SOS reception et affichage sur port serie

emmatopiak

Salut,

Dans ta fonction reception, tu fais D = readFile(..., buffer, ...)
et après tu retournes ce D, mais le D est pas le char que tu attends, D t'indique combien de caractères sur les 1024 ont été lus (d'ailleurs ça devrait être un int).
 Le char que tu recherches se trouve en buffer[0]
_donc pour tester je te conseille de faire
 int D;
 D = ReadFile(hCom, buffer, 1, &nbRead, NULL);
 return buffer[0];
Bon essaye et dis moi si ça marche
@++

Une autruche ne se cuit pas aux petits lardons.
mercredi 9 mai 2007 à 15:33:20 | Re : SOS reception et affichage sur port serie

SAKingdom

Membre Club
ReadFile retourne une valeur de type BOOL. En gros, elle retourne TRUE ou FALSE et non le nombre d'octets lue. Le 4ème paramètre est fait pour ça.

C++ (@++)

mercredi 9 mai 2007 à 15:38:17 | Re : SOS reception et affichage sur port serie

SAKingdom

Membre Club
Et puis, si ce n'est que pour lire qu'un seul caractère, inutile de déclarer un buffer d'un ko. Simplement à faire

char c;
ReadFile(hfile, &c, 1, &byte, 0);

Je te conseil aussi vivement les sources de ymca2003 pour ce genre de chose.

C++ (@++)

mercredi 9 mai 2007 à 15:50:40 | Re : SOS reception et affichage sur port serie

SAKingdom

Membre Club
Voici:
http://www.cppfrance.com/codes/COMMUNICATION-SERIE-RS232-WIN32_18704.aspx
C'est en C++ mais l'utilisation du port série reste la même.

C++ (@++)

jeudi 10 mai 2007 à 09:25:16 | Re : SOS reception et affichage sur port serie

dgac

merci beaucoup de votre aide !!!LA reception marche avec la solution SAKingdom  et l'utilité de déclarer un buffer de 1 ko (pour le test d un carractére) est de pouvoir recevoir des trames JBUS.


Cette discussion est classée dans : port, printf, stop, hcom, dcb


Répondre à ce message

Sujets en rapport avec ce message

Reception sur port COM1 sous Builder [ par Ardeje26 ] Bonjour,Je travail sous Borland Builder 5 et j'ai un problème pour récupérer les datas sur mon port COM1 avec le code suivant.Je peut simplement savoi Aide pour un programme,création variable [ par pirana ] bonjour à vous tous ... Voila je suis un débutant en C... j'ai récupéré ce code sur le site et j'aimerai me simplifié la vie...mais je n'y arrive pas probleme rs232 [ par rhumone ] j'arrive pas a récupérer la totalitée des données sur ma liaison rs232 je dois recevoir environ 7000 octet j'en recois que 4000 octet.voila mon source ouverture d'un port serie [ par KryztL ] bonjour tout le monde,j aurai besoin d aide pour le projet que je suis entrain de programmer.je souhaite ouvrir un port serie sous visual studio C++, Communication RS232 : Pb de vitesse [ par arb ] Bonjour Je me suis insipiré du code de ymca2003 (Code source N°22441) pour faire un petit programme qui envoie le contenu d'un fichier via une liais Communication RS232 : Pb de vitesse [ par arb ] Bonjour Je me suis insipiré du code de ymca2003 (Code source N°22441) pour faire un petit programme qui envoie le contenu d'un fichier via une liais port serie [ par maurejac ] bonjour, je dois realiser un petit programme de communication avec une carte par port serie, la plupart du temps il marche tres bien mais de temps en reception et envoi d'une trame sous rs232 [ par fl2010 ] bonjour je suis entrain d'ecrire un programme pour faire la communication entre un PC et un regulateur eurotherm à l'aide du rs232. j'ai fait un progr Com RS232 [ par Dohko10270 ] Bonjour, Actuellement je cherche à récupérer une trame via la liaison RS232, je réussi très bien à faire ce que je veux à l'aide d'hyperterminal, c'e RS232 sous vb.net 2005 [ par dragonfly95 ] bonjour, je cherche à ouvrir un port RS232 sur un PC sous vb.net 2005 en MFC mais il ne veut jamais l'ouvrir. J'utilise la fonction CreateFile(,,,,) m


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,796 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales