Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : SOS reception et affichage sur port serie [ Divers / Débutant(e) ] (dgac)

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é 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 inclure un thread dans une classe C++ [ par savate83 ] Bonjour a tous, mon probleme est le suivant : je dois realiser une classe qui me permette d'executer un thread de reception a chaque instance car g pl [mfc]XON/XOff [ par katzemen ] bjr a tous je voudrai savoir si quelqu'un sais lire sur le port serie avec le protocole XON/XOFF. Voici mon code pr l'initialisation du port: ouvertur transmission de donnees via port serie [ par seignseifer ] Bonjour tout le monde, j'ai fait un petit programme en  C++ sous Borland C++6.0, car je veux envoyer via le port serie, des information a un analyseur


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,343 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.