FONCTION DE GESTION DU PORT SÉRIE (OUVERTURE,EMISSION,RECEPTION)
eldered
Messages postés232Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention25 mai 2022
-
24 juil. 2003 à 20:18
cs_zeom
Messages postés19Date d'inscriptionjeudi 18 mars 2010StatutMembreDernière intervention21 avril 2010
-
5 avril 2010 à 14:19
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_zeom
Messages postés19Date d'inscriptionjeudi 18 mars 2010StatutMembreDernière intervention21 avril 2010 5 avril 2010 à 14:19
salut est c que j'ai peut utilisé cette programme pour faire une communication entre visuel studio 2008 et un automate Omron
ramiaramila1
Messages postés1Date d'inscriptionvendredi 9 mai 2008StatutMembreDernière intervention13 mai 2008 13 mai 2008 à 09:29
est ce que vous pouvez me donner des documents sur la communication entre pc et automate (protocole, programme, ...), svp j'en ait besoin pour realiser un projet pour ma soutenance de mémoire.
cs_quentennis
Messages postés2Date d'inscriptionvendredi 18 avril 2008StatutMembreDernière intervention19 août 2008 18 avril 2008 à 09:27
Salut à tous
Ce code est vraiment génial, bien commenté et facile à comprendre, c'est vraiment un plaisir !!!
J'ai eu quelques petites difficultés à corriger les différentes erreurs (minimes !!), mais maintenant, ça marche impécable ! Le problème de la réception des données qui n'intervient que lorsque l'on a déjà ouvert une autre application via le port série vient en effet des variables que tu définis au départ :
Voilà, j'espère que ça aidera ! Et encore merci à pour cette aide précieuse !
cs_Grandnord
Messages postés6Date d'inscriptionjeudi 27 mars 2003StatutMembreDernière intervention10 octobre 2006 30 oct. 2007 à 23:32
Bonjour à tous,
Je désire faire fonctionner une boite d'interrupteur sous Linux. Pour cela je dois envoyer la chaine de caractères "N1" + le caractère ENTRER par le port série 1.
Est-ce que quelqun a une idée comment s'y prendre?
J'ai essayé:
g_ErrCom=EmissionCom("N1\0",sizeof("N1\0")); ????
Mais ca ne fonctionne pas... :C
Merci.
DarkIndra
Messages postés21Date d'inscriptionvendredi 15 juin 2007StatutMembreDernière intervention 9 juillet 2007 15 juin 2007 à 09:23
Bonjour à tous, je suis en bts electronique, a la suite d'un dut informatique, et je suis en stage, je dois faire une interface lecteur de badge/base de données access. voila pour les "présentations" ^^
pour l'interface c'est fait, je test ce que je reçois avec le programme ci dessus (legerement modifier pour ne pas emettre par exemple) et donc j'envoi 2 octets (par l'intermédiaire d'un pic, et d'un max232 pour l'adaptation en tension) sur mon port série, seulement voila, par exemple je veux lui envoyer 1111.1111 1111.1111 (le point pour séparer pour la visibilité ;)
et lui il me reçoit 111.1111 0111.1111
donc pour finir, pourquoi n'accepte t'il que 7 bits et non les 8? (en effet le zéro devant la premiere série étant non significatif, il ne l'affiche pas ), j'ai beau chercher, cela vient de la fonction readfile et pourtant elle est paramétrée pour accepter 8bits.
Sinon pour les petites info, j'utilise dev-C++
Merci de votre attention et éventuellement de votre aide :)
Pilloutche
Messages postés1Date d'inscriptionsamedi 9 septembre 2006StatutMembreDernière intervention 7 avril 2007 7 avril 2007 à 17:09
Salut a tous!
Vraiment géniale cette source!
avec ces deux lignes dans le programme 'test' cité plus haut, ca fonctionne parfaitement:
unsigned int NbCarRecus;
g_ErrCom=ReceptionCom(TrameRecue,NbMaxCar,&NbCarRecus);
Merci beaucoup ;-)
cs_rexdan
Messages postés1Date d'inscriptionmardi 26 septembre 2006StatutMembreDernière intervention26 septembre 2006 26 sept. 2006 à 12:16
salut à tous
Je suis nouveau sur CPPFRANCE, et aussi dans la merde.... n'étant pas non plus un Dieu en C, je dois réaliser un code en C (SIMPLE!!!) sur VC++, et le programme de gplog ne fonctionne pas géniale (sans aucun doute du à mon ignorance du C); surtout au niveau de la réception des données. En fait je dois envoyer des données en Hexa du genre 23 01 24 0D... et ensuite recevoir des données d'une carte controleur.
Voici mon main, où je tente de débugger/comprendre un peu... mais je patauge.... Y aurait il une bonne ame....
Merci
Rex
void main (void)
{
char buffer[256];
unsigned int NbMaxCar=100;
unsigned int *NbCarRecus;
printf("enter the command: \n");
scanf("%s",&buffer);
//Exemple de configuration du port serie :
g_ErrCom=OuvreCom(PORT1,V19200,BITS_8,PAS_DE_PARITE,BIT_DE_STOP_1);
//Exemple d'emission
g_ErrCom=EmissionCom(buffer,sizeof(buffer) );
printf("the buffer sent is: %s \n",buffer);
Famidoo
Messages postés13Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention17 juillet 2006 7 juin 2006 à 10:26
et pour l'USB, c'est similaire ?
Geaby
Messages postés1Date d'inscriptionmercredi 17 mai 2006StatutMembreDernière intervention17 mai 2006 17 mai 2006 à 12:44
Bonjour,
je suis en stage et debutant en programmation. Dans le cadre de mon projet je dois controler chaque broche de mon port serie pour asservir des servo-moteurs. Je souhaiterai donc savoir comment ce programme utilise physiquement les broches des ports. Ou si quelqu'un connait un programme controllant individuellement chaque broche du port, je suis preneur :)
Merci
A plus
seedtrunks
Messages postés4Date d'inscriptionmercredi 12 avril 2006StatutMembreDernière intervention 9 juin 2006 12 avril 2006 à 15:21
Bonjour,
Je suis en stage et débutant en programmation et je cherche un programme qui fonctionne avec dev C++ sous XP qui permettrai d'activer les ports série.Si quelqu'un a ce programme je suis preneur.
Merci d'avance
salut,
depuis ce matin je cherche des sources pour voir un peu comment utiliser le port série, et ben ça fait plaisir qu'il y ait des gens qui ne programment pas comme des "porcs". Enfin un code qu'on comprend quand on le regarde ! gg ;)
Pas encore testé, mais il a le mérite d'être clair :)
a+
cs_proj
Messages postés5Date d'inscriptionmardi 21 mars 2006StatutMembreDernière intervention31 mars 2006 27 mars 2006 à 16:38
voilà j'ai testé le prog de GPLOG et mon compilateur (Borland C++) ne reconnait pas la fonction OuvreCom().
Que doi-je faire?
Je travaille sous windows 2000
Merci
momo_le_dingue
Messages postés2Date d'inscriptionmardi 17 mai 2005StatutMembreDernière intervention 7 juin 2005 17 mai 2005 à 19:30
voila je sis debutant en programmation. je suis en bts info et pour mon stage je dois faire un petit programme pour faire tourner des petits mooteurs et je crois qui se branchent en port série. je souhaiterai de l'aide. merçi d'avance
cs_NiChaN
Messages postés27Date d'inscriptionsamedi 20 avril 2002StatutMembreDernière intervention29 décembre 2008 20 avril 2005 à 18:05
Moi je ne comprend pas pourquoi personne ne pense a faire des class, c beaucoup plus simple d'utilisation en finale !!
Une class GesComSerie pas exemple, et grace au methode n'importe qui peut l'utiliser a ca convenance dans son main ou bien meme en MFC GRAPHIQUE !
Voila !!
Pensez à cree des class !!
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 18 avril 2005 à 11:33
Erreur de frappe qui peux préter à confusion dans ma première phrase du post précédent (mien au lieu de mieux):
"Le code dont tu parles et dont tu fourni le lien est le mien apparemment."
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 18 avril 2005 à 11:31
Le code dont tu parles et dont tu fourni le lien est le mieux apparemment.
Celui-ci (en tout cas la version originale de messources sur ce site) fonctionne sur n'importe quelle version de Windows 32 bits (Win9x, ME, NT, 2k, XP).
Ton pb doit venir du fait que tu compile en Debug et non en Release.
Revan777
Messages postés2Date d'inscriptionlundi 7 février 2005StatutMembreDernière intervention18 avril 2005 18 avril 2005 à 11:24
J'ai pensé aussi à une histoire de librairies supplémentaires à ajouter car l'errreur que j'obtiens en executant le programme sous Win98 c'est à la reception:
TestCOM a causé une défaillance de page dans le module MSVCRT.DLL à 0167:7800ffd0......
(Ce fichier dll comprend apparemment une bibliothèque de fonctions pour les applications Visual.)
Revan777
Messages postés2Date d'inscriptionlundi 7 février 2005StatutMembreDernière intervention18 avril 2005 18 avril 2005 à 10:55
Salut, je suis en BTS IRIS en alternance et je dois développer justement un prog en C pour la reception de donnees sur le port COM (lecture de Code-barr à partir d'une douchette automatique).
J'ai trouvé un code qui ressemble à celui-ci et que j'ai modifié pour pouvoir stocker mes Code-barr dans un fichier pour ensuite les insérer dans une BDD sur l'intranet de l'entreprise. Mais le problème que j'ai, c'est que mon code n'est pas compatible Windows98 (sur XP, nickel). Alors voila suis en stress pour pouvoir fournir le prog à temps. SVP HELP ME.
Je laisse mon code complet avec le fichier de config (certes modeste, fo pas exagerer j'suis qu'en 1ere annee !) sur le site que je développe actuellement:
http://btsiris.network-hosting.com/COM/COM.zip
Je souhaitais savoir si le code de gplog était compatible Win98 et comment le modifier pour qu'il fasse exactement comme celui que vous trouverez sur mon site.
MERCI !
perig
Messages postés358Date d'inscriptionvendredi 1 novembre 2002StatutMembreDernière intervention 5 septembre 2006 14 avril 2005 à 09:52
finalement ca marche... ca ne marche que les jours pair lol
perig
Messages postés358Date d'inscriptionvendredi 1 novembre 2002StatutMembreDernière intervention 5 septembre 2006 13 avril 2005 à 16:37
salut et merci ca marche
Mais je cherche a envoyer une trame 0xAA soit '10101010' et je ne recois que 0x0A soit '00101010' (je perd le bit de poid fort de toutes mes trames) on dirait qu'il n'envois que 7 bits pourtant j'ai bien mis 8bits dans la config du port.
sais tu d'ou ca peut venir
merci
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 5 avril 2005 à 17:00
Et ces 2 lignes :
unsigned int NbCarRecus;
g_ErrCom=ReceptionCom(TrameRecue,NbMaxCar,&NbCarRecus);
angsthase
Messages postés72Date d'inscriptionmardi 20 juillet 2004StatutMembreDernière intervention11 avril 20051 5 avril 2005 à 16:59
et avec cette ligne :
g_ErrCom=ReceptionCom(TrameRecue,NbMaxCar,&NbCarRecus);
ca ne marche pas!
angsthase
Messages postés72Date d'inscriptionmardi 20 juillet 2004StatutMembreDernière intervention11 avril 20051 5 avril 2005 à 16:56
Merci pour ta source ( ca fais toujours plaisir) !!!
Mais chez moi j'ai voulu tester( le truc avec les broches ) et quand il veut faire la reception, Windows 2000 SP4 me mùets un message d'erreur et ferme l'appli ?!?!?!?!?!?!?!?!?
J'utilise dev-c++!
mon main donne ceci à present :
/*************************************************************
* MAIN
*************************************************************/
main()
{
unsigned char TrameRecue[100];
unsigned int NbMaxCar=100;
unsigned int *NbCarRecus;
//Exemple de configuration du port serie :
g_ErrCom=OuvreCom(PORT3,V9600,BITS_8,PARITE_PAIRE,BIT_DE_STOP_1);
tagadaboum
Messages postés1Date d'inscriptionlundi 21 février 2005StatutMembreDernière intervention25 mars 2005 25 mars 2005 à 10:31
Merci beaucoup pour le source il m'a fait gagné du temps par contre il m'en a fait perdre aussi ....
Mais j'ai finit par trouver le problem :
Attention :
Quand tu fais SetCommState(g_hCom,&g_DCB); tu testes pas le retour et il se trouve que ça plante.
Pourquoi ?
Par ce que les constante que tu définis ne sont pas les bonnes pour :
/#define BIT_DE_STOP_1 1
#define BIT_DE_STOP_2 2
#define PAS_DE_PARITE 'N'
#define PARITE_IMPAIRE 'O'
#define PARITE_PAIRE 'E'
Il faut utiliser ces constante qui sont déjà définis dans je ne sais quel .h :
NOPARITY EVENPARITY ODDPARITY
ONESTOPBIT ONE5STOPBITS TWOSTOPBITS
et là ça marche !
blaise_laporte
Messages postés6Date d'inscriptionmercredi 2 mars 2005StatutMembreDernière intervention18 juillet 2005 2 mars 2005 à 16:21
Bonjour
Dabord, merci beaucoup pour cette source qui m'a évité de longues heures laborieuse (je debute en programation).
Le probleme:
Lorsque je fais un boucle contenant l'ouverture de la com, l'écriture et la fermeture (pour envoyer plusieur fois d'affillé le même message) il me dit qu'il n'a pas reussi à créer le flux des la deuxieme ocurence de la boucle, alors que la premiere fois, ça fonctionne impec. Je ne sais pas à quoi c'est dus.
Merci.
olischlo
Messages postés3Date d'inscriptionjeudi 24 juin 2004StatutMembreDernière intervention 6 octobre 2004 6 oct. 2004 à 17:57
sbommer > C'est bien possible que ce soit cela... j'avais corrigé le problème, mais je ne me souvient plus vraiment comment...
sbommer
Messages postés2Date d'inscriptionlundi 20 octobre 2003StatutMembreDernière intervention 6 octobre 2004 6 oct. 2004 à 11:56
pour le petit soucis avec le code,(olischlo)
il s'agit visiblement d'un probleme sur les valeurs
de Parity et StopBits.
en forcant ces valeur dans le "OuvreCom"
g_DCB.Parity=NOPARITY; //=Parity;
g_DCB.StopBits=ONESTOPBIT; // =StopBits;
le probleme se resoud.C'est donc juste un petit soucis sur les formats de ces 2 variables.
Ce code est super, merci à gplog
sbommer
Messages postés2Date d'inscriptionlundi 20 octobre 2003StatutMembreDernière intervention 6 octobre 2004 6 oct. 2004 à 09:53
Je rencontre exactement le meme probleme que Olischlo,
Si quelqu 'un trouve la source de ce problème, je suis vraiment interessé (testé sur XP fam et XP pro)
Merci
olischlo
Messages postés3Date d'inscriptionjeudi 24 juin 2004StatutMembreDernière intervention 6 octobre 2004 2 juil. 2004 à 14:38
Il y a juste un petit souci avec ce code.
Lorsque je le lance l'appli, cela ne fonctionne que si prélablement une autre appli (ex: Hyperterminal) a déjà utilisé le PortCom. Sinon tous semble bien se passer, mais dans les fait aucun carractère n'est lu ou envoyé via le port série...
Super ton code!!
je te remercis, car ca fait un petit moment que j'en cherché un, qui
tienne la route en C, car je boss en VB, mais j'essais de passé en C,
ton code va bcq m'aider merci encore ;)
jackyjacky
Messages postés23Date d'inscriptionlundi 9 février 2004StatutMembreDernière intervention18 janvier 2005 11 févr. 2004 à 11:38
Salut
j'aimerais savoir si on pourrais adapter le code pour transmettre un fichier complet par exemple (de taille résonnable)
Merci
Looping.net
Messages postés2Date d'inscriptionmercredi 19 novembre 2003StatutMembreDernière intervention23 janvier 2004 23 janv. 2004 à 13:19
Merci à ymca2003 pour sa petite correction, ca marche pile poil :) En tout cas sous 2000.
Je n'ai toujours pas réussit à faire fonctionner ce code sous Windows 98.
J'ai par contre trouvé entre temps ce site :
http://www.wince.org.uk/vc/intermediate/serialrw.htm les deux fichiers zip contiennent les sources qui fonctionnent après une ou deux petites modif (faut rajouter une ligne blanche à la fin de chaque fichier .h et .cpp et il faut rajouter #include <stdio.h> )
Et ce code fonctionne sous Windows 98. L'inconvénient c'est qu'il travaille bit par bit au lieu de travailler par chaîne de caractère comme le programme de gplog.
Je vais travailler dessus pour essayer de comprendre, et dès que j'ai plus d'infos, je reposte un message.
Si quelqu'un trouve la solution avant moi ce serait cool de poster
Looping
cs_lioyoyo
Messages postés1Date d'inscriptionvendredi 19 décembre 2003StatutMembreDernière intervention20 janvier 2004 20 janv. 2004 à 15:08
Bonjour,
Ce code marche bien mais j'ai un souci pour declencher l'envoi des données de ma carte d'acquisition (srs245). J'ai lu que l'envoi se déclenchait quand le signal DTR (terminal de donnée pret) sur la pin 20 est validé. La fonction de réception prend-t-elle en compte ce genre de considération? Dans le cas contraire, comment forcer la validation de la pin 20?
Merci
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 12 janv. 2004 à 12:48
dans la correction que j'avaid donné, il y a une erreur sur le dernier paramètre
unsigned char TrameReçue[100];
unsigned int NbMaxCar=100;
unsigned int NbCarReçus;
g_ErrCom=ReceptionCom(TrameReçue,NbMaxCar,&NbCarReçus);
pierrejarod
Messages postés2Date d'inscriptionsamedi 10 janvier 2004StatutMembreDernière intervention12 janvier 2004 12 janv. 2004 à 10:01
Rebonjour,
Petit rajout :
Le programme reste apparemment bloqué sur : " *pCountRead=NCarLus; ".
Merci
pierrejarod
Messages postés2Date d'inscriptionsamedi 10 janvier 2004StatutMembreDernière intervention12 janvier 2004 12 janv. 2004 à 09:47
Bonjour,
Je programme sur Borland 5.0 et j'ai un problème avec ce programme (mais pas le même que tout le monde semble avoir).
Le voici : "L'exécutable a provoqué une classe d'exception EAccessViolation avec le message 'Violation d'accès à l'adresse 0040130B. Ecriture de l'adresse 00000000' ".
Est-ce que quelqu'un aurait rencontré la même erreur ou/et aurait une idée?
Merci d'avance
cs_vavincavent
Messages postés1Date d'inscriptiondimanche 21 décembre 2003StatutMembreDernière intervention21 décembre 2003 21 déc. 2003 à 23:59
Bonjour,
je suis totalement débutant en programmation C.
Votre code m'intéresse pour extraire des données d'un ordinateur de plongée.
j'ai installé dev-c++ et je souhaiterai écrire la lecture du port com1 dans un fichier. Comment faire?
Il faudrait que le programme se mette en attente d'un flux de données puis qu'il enregistre les données reçues.
merci de votre aide.
Vincent
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 14 déc. 2003 à 16:34
Pour réception : pb dans la solution de gplog :
void * TrameReçue;
unsigned int NbMaxCar=100;
unsigned int* NbCarReçus;
g_ErrCom=ReceptionCom(TrameReçue,NbMaxCar,NbCarReçus);
les données recus vont être écrite là où pointe TrameReçue c'est à dire à peu près n'importe où en mémoire (pointeur non initialisé)
=> à remplacer par :
unsigned char TrameReçue[100];
unsigned int NbMaxCar=100;
unsigned int* NbCarReçus;
g_ErrCom=ReceptionCom(TrameReçue,NbMaxCar,NbCarReçus);
ender_
Messages postés4Date d'inscriptionlundi 1 décembre 2003StatutMembreDernière intervention11 décembre 2003 11 déc. 2003 à 09:44
En ce qui me concenre , je développe sous Windows 2000 Pro,
sous l'environnement Visual C++ 7 de la plate forme .NET 2003..le programme marche bien, il bug seulement lors de la lecture (ReadFile(...) )
j'utilise une boucle locale : seulement les pins 2 et 3 du port série sont reliées...l'erreur provient de là?
merci d'avance.
cs_loic81
Messages postés26Date d'inscriptionjeudi 3 juillet 2003StatutMembreDernière intervention25 février 2004 10 déc. 2003 à 10:04
Je n'ai pas la réponse, mais je vous indique que ça ne fonctionne pas sous windows 95 (et oui, ça existe encore!!!) compilé avec Borland 5.02.
par contrre, ça fonctionne sous windows NT4
Bon courage
ender_
Messages postés4Date d'inscriptionlundi 1 décembre 2003StatutMembreDernière intervention11 décembre 2003 9 déc. 2003 à 10:46
En fait l'erreur est ERROR_NOACCESS
qq'un peut m'aider pour remedier ce problème?
ender_
Messages postés4Date d'inscriptionlundi 1 décembre 2003StatutMembreDernière intervention11 décembre 2003 9 déc. 2003 à 09:25
je pense que le problème provient du fait que le ponteur de fichier "dépasse" le EOF courant lors de la lecture du fichier...
Seulement comment remédier ce problème..qqu'un a une suggestion?
ender_
Messages postés4Date d'inscriptionlundi 1 décembre 2003StatutMembreDernière intervention11 décembre 2003 8 déc. 2003 à 18:14
j'ai le même problème que Looping.net. Si vous avez une solution, prière de l'expliquer sur le forum..
Looping.net
Messages postés2Date d'inscriptionmercredi 19 novembre 2003StatutMembreDernière intervention23 janvier 2004 19 nov. 2003 à 12:17
Hello,
vraiment chouette ce morceau de code, après 3 jours de recherche sur le net, c'est le plus simple et un des rares que j'ai réussit à compiler !
L'ouverture du port et l'écriture se passent sans problèmes, par contre pour la lecture j'ai un petit soucis : il m'indique l'erreur suivante :
"L'instruction à "0x0040160a" emploie l'adresse mémoire "0x78001e6e". La mémoire ne peut pas être "written"."
J'utilise Windows 2000 SP2 et comme compilateur, j'utilise Dev C++ 4.
En placant quelques printf dans la fonction "ReceptionCom",
Je vois qu'il passe la fonction ClearCommError, et que la variable nCarALire n'est pas nulle. Mais il plante ensuite, et m'affiche l'erreur.
Est-ce que quelqu'un a eut ce problème et sait comment le résoudre ?
cs_loic81
Messages postés26Date d'inscriptionjeudi 3 juillet 2003StatutMembreDernière intervention25 février 2004 24 sept. 2003 à 09:54
à mon avis, avec les readfile() et writefile(), tu ne pourras pas l'utiliser sous linux, car ce sont des fonctions de windows API...
shkyo
Messages postés1Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention23 septembre 2003 23 sept. 2003 à 17:51
Salut, une simple petite question, tu mets que c'est en C ANSI, mais je vois dans les includes windows, winbase et conio, donc cela peut-il marcher sous Linux ???
cs_loic81
Messages postés26Date d'inscriptionjeudi 3 juillet 2003StatutMembreDernière intervention25 février 2004 17 sept. 2003 à 15:47
Merci, ça marche impec.
gplog
Messages postés82Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juillet 20091 16 sept. 2003 à 09:27
Salut loic,
voila pour toi un exemple de réception :
// Déclaration des Variables :
// Pointeur sur les caractères reçus
void * TrameReçue;
// Nombre maxi de caractère a lire (ici 100)
unsigned int NbMaxCar=100;
// Pointeur sur le nombre de caractère recus
unsigned int* NbCarReçus;
//Exemple de réception
g_ErrCom=ReceptionCom(TrameReçue,NbMaxCar,NbCarReçus);
Je sais pas trop si ça fonctionne parceque j'ai rien pour tester.
cs_loic81
Messages postés26Date d'inscriptionjeudi 3 juillet 2003StatutMembreDernière intervention25 février 2004 12 sept. 2003 à 17:44
Salut,
chouette ce driver pour pour com. Pour info, il marche aussi sous win95...
T'aurrais pas une ligne de code avec un exemple de réception Stp ?
merci d'avance...
remarque amicale à Matt48 : le forum, c'est fais pour partager des connaissances, donc l'utilisations d'email, c'est pas super pour ceux qui aurons besoin des mêmes infos que toi...
cs_loic81
Messages postés26Date d'inscriptionjeudi 3 juillet 2003StatutMembreDernière intervention25 février 2004 12 sept. 2003 à 17:43
Salut,
chouette ce driver pour pour com. Pour info, il marche aussi sous win95...
T'aurrais pas une ligne de code avec un exemple de réception Stp ?
merci d'avance...
remarque amicale à Matt48 : le forum, c'est fais pour partager des connaissances, donc l'utilisations d'email, c'est pas super pour ceux qui aurons besoin des mêmes infos que toi...
matt48
Messages postés2Date d'inscriptionmardi 18 février 2003StatutMembreDernière intervention28 août 2003 28 août 2003 à 12:41
Ok, merci.
C'est ce que je voulais tester.
Mais je vois que d'autres ouvrent le port ce cette façon :
CreateFile("COM1:",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL)
Alors que toi, tu utilises : (FILE_FLAG_WRITE_THROUGH | FILE_FLAG_NO_BUFFERING) à la place de FILE_ATTRIBUTE_NORMAL.
Quelles sont les différences ?
tu connais la fonction SetupComm, si oui, comment l'utiliser, stp.
Merci.
A+
Mon E-mail : matt48@wanadoo.fr
gplog
Messages postés82Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juillet 20091 28 août 2003 à 09:41
Arff, alors là, matt je peut pas faire grand chose pour toi, j'ai toujours dévelloppé sur Win2000.
Et donc, j'ai jamais eu de problèmes.
Pour voir si des infos passent sur ton port série, tu peut utiliser un bouchon (tu relie les broches numéro 2 et 3 de ton port série). Avec le bouchon, tout ce que tu envoi revient vers ton PC donc, tu peut vérifier ce que tu envoi en faisant un réception sur ton port.
matt48
Messages postés2Date d'inscriptionmardi 18 février 2003StatutMembreDernière intervention28 août 2003 27 août 2003 à 18:39
Bonjour,
Je trouve ce code super.
Ca fonctionne très bien sous mon windows 2000, mais ça ne marche pas du tout sous win98. Comme si rien ne passait sur le port. Tu aurais une idée. J'ai testé mon executable sur 3 PCs avec win98.
Merci, d'avance,
Matthieu
gplog
Messages postés82Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juillet 20091 25 juil. 2003 à 14:17
C'est normal si y s'arrete tout de suite. Y'as presque rien dans le main(un exemple de main). C'est juste un outil pour utiliser le port série, à toi de l'utiliser selon ton application.
Ici le main envoie seulement la chaine "UneTrame" vers le port série.-->donc c'est tres court.
eldered
Messages postés232Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention25 mai 2022 25 juil. 2003 à 13:09
okok, ton prog je n'arrive pas le lancer sous dev c+, je le compile et le lance, ms il s'arréte de suite ... tu compiles avec koi ? tu pe mettre un exe plz ? !
++
gplog
Messages postés82Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juillet 20091 25 juil. 2003 à 08:54
Je suis en formation post bts en informatique industrielle et automatisation.
eldered
Messages postés232Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention25 mai 2022 24 juil. 2003 à 20:18
5 avril 2010 à 14:19
13 mai 2008 à 09:29
18 avril 2008 à 09:27
Ce code est vraiment génial, bien commenté et facile à comprendre, c'est vraiment un plaisir !!!
J'ai eu quelques petites difficultés à corriger les différentes erreurs (minimes !!), mais maintenant, ça marche impécable ! Le problème de la réception des données qui n'intervient que lorsque l'on a déjà ouvert une autre application via le port série vient en effet des variables que tu définis au départ :
BIT_DE_STOP_1 1
BITS_DE_STOP_2 2
PAS_DE_PARITE
PARITE_PAIRE
PARITE_IMPAIRE
Il faut supprimer ces variables que tu définis, et lorsque tu appelles ta fonction pour ouvrir le port série, il faut les remplacer par :
ONESTOPBIT
TWOSTOPBITS
NOPARITY
EVENPARITY
ODDPARITY
Voilà, j'espère que ça aidera ! Et encore merci à pour cette aide précieuse !
30 oct. 2007 à 23:32
Je désire faire fonctionner une boite d'interrupteur sous Linux. Pour cela je dois envoyer la chaine de caractères "N1" + le caractère ENTRER par le port série 1.
Est-ce que quelqun a une idée comment s'y prendre?
J'ai essayé:
g_ErrCom=EmissionCom("N1\0",sizeof("N1\0")); ????
Mais ca ne fonctionne pas... :C
Merci.
15 juin 2007 à 09:23
pour l'interface c'est fait, je test ce que je reçois avec le programme ci dessus (legerement modifier pour ne pas emettre par exemple) et donc j'envoi 2 octets (par l'intermédiaire d'un pic, et d'un max232 pour l'adaptation en tension) sur mon port série, seulement voila, par exemple je veux lui envoyer 1111.1111 1111.1111 (le point pour séparer pour la visibilité ;)
et lui il me reçoit 111.1111 0111.1111
donc pour finir, pourquoi n'accepte t'il que 7 bits et non les 8? (en effet le zéro devant la premiere série étant non significatif, il ne l'affiche pas ), j'ai beau chercher, cela vient de la fonction readfile et pourtant elle est paramétrée pour accepter 8bits.
Sinon pour les petites info, j'utilise dev-C++
Merci de votre attention et éventuellement de votre aide :)
7 avril 2007 à 17:09
Vraiment géniale cette source!
avec ces deux lignes dans le programme 'test' cité plus haut, ca fonctionne parfaitement:
unsigned int NbCarRecus;
g_ErrCom=ReceptionCom(TrameRecue,NbMaxCar,&NbCarRecus);
Merci beaucoup ;-)
26 sept. 2006 à 12:16
Je suis nouveau sur CPPFRANCE, et aussi dans la merde.... n'étant pas non plus un Dieu en C, je dois réaliser un code en C (SIMPLE!!!) sur VC++, et le programme de gplog ne fonctionne pas géniale (sans aucun doute du à mon ignorance du C); surtout au niveau de la réception des données. En fait je dois envoyer des données en Hexa du genre 23 01 24 0D... et ensuite recevoir des données d'une carte controleur.
Voici mon main, où je tente de débugger/comprendre un peu... mais je patauge.... Y aurait il une bonne ame....
Merci
Rex
void main (void)
{
char buffer[256];
unsigned int NbMaxCar=100;
unsigned int *NbCarRecus;
printf("enter the command: \n");
scanf("%s",&buffer);
//Exemple de configuration du port serie :
g_ErrCom=OuvreCom(PORT1,V19200,BITS_8,PAS_DE_PARITE,BIT_DE_STOP_1);
//Exemple d'emission
g_ErrCom=EmissionCom(buffer,sizeof(buffer) );
printf("the buffer sent is: %s \n",buffer);
// reception
g_ErrCom=ReceptionCom(buffer,sizeof(buffer),&NbCarRecus);
}
7 juin 2006 à 10:26
17 mai 2006 à 12:44
je suis en stage et debutant en programmation. Dans le cadre de mon projet je dois controler chaque broche de mon port serie pour asservir des servo-moteurs. Je souhaiterai donc savoir comment ce programme utilise physiquement les broches des ports. Ou si quelqu'un connait un programme controllant individuellement chaque broche du port, je suis preneur :)
Merci
A plus
12 avril 2006 à 15:21
Je suis en stage et débutant en programmation et je cherche un programme qui fonctionne avec dev C++ sous XP qui permettrai d'activer les ports série.Si quelqu'un a ce programme je suis preneur.
Merci d'avance
11 avril 2006 à 14:10
depuis ce matin je cherche des sources pour voir un peu comment utiliser le port série, et ben ça fait plaisir qu'il y ait des gens qui ne programment pas comme des "porcs". Enfin un code qu'on comprend quand on le regarde ! gg ;)
Pas encore testé, mais il a le mérite d'être clair :)
a+
27 mars 2006 à 16:38
Que doi-je faire?
Je travaille sous windows 2000
Merci
17 mai 2005 à 19:30
20 avril 2005 à 18:05
Une class GesComSerie pas exemple, et grace au methode n'importe qui peut l'utiliser a ca convenance dans son main ou bien meme en MFC GRAPHIQUE !
Voila !!
Pensez à cree des class !!
18 avril 2005 à 11:33
"Le code dont tu parles et dont tu fourni le lien est le mien apparemment."
18 avril 2005 à 11:31
Celui-ci (en tout cas la version originale de messources sur ce site) fonctionne sur n'importe quelle version de Windows 32 bits (Win9x, ME, NT, 2k, XP).
Ton pb doit venir du fait que tu compile en Debug et non en Release.
18 avril 2005 à 11:24
TestCOM a causé une défaillance de page dans le module MSVCRT.DLL à 0167:7800ffd0......
(Ce fichier dll comprend apparemment une bibliothèque de fonctions pour les applications Visual.)
18 avril 2005 à 10:55
J'ai trouvé un code qui ressemble à celui-ci et que j'ai modifié pour pouvoir stocker mes Code-barr dans un fichier pour ensuite les insérer dans une BDD sur l'intranet de l'entreprise. Mais le problème que j'ai, c'est que mon code n'est pas compatible Windows98 (sur XP, nickel). Alors voila suis en stress pour pouvoir fournir le prog à temps. SVP HELP ME.
Je laisse mon code complet avec le fichier de config (certes modeste, fo pas exagerer j'suis qu'en 1ere annee !) sur le site que je développe actuellement:
http://btsiris.network-hosting.com/COM/COM.zip
Je souhaitais savoir si le code de gplog était compatible Win98 et comment le modifier pour qu'il fasse exactement comme celui que vous trouverez sur mon site.
MERCI !
14 avril 2005 à 09:52
13 avril 2005 à 16:37
Mais je cherche a envoyer une trame 0xAA soit '10101010' et je ne recois que 0x0A soit '00101010' (je perd le bit de poid fort de toutes mes trames) on dirait qu'il n'envois que 7 bits pourtant j'ai bien mis 8bits dans la config du port.
sais tu d'ou ca peut venir
merci
5 avril 2005 à 17:00
unsigned int NbCarRecus;
g_ErrCom=ReceptionCom(TrameRecue,NbMaxCar,&NbCarRecus);
5 avril 2005 à 16:59
g_ErrCom=ReceptionCom(TrameRecue,NbMaxCar,&NbCarRecus);
ca ne marche pas!
5 avril 2005 à 16:56
Mais chez moi j'ai voulu tester( le truc avec les broches ) et quand il veut faire la reception, Windows 2000 SP4 me mùets un message d'erreur et ferme l'appli ?!?!?!?!?!?!?!?!?
J'utilise dev-c++!
mon main donne ceci à present :
/*************************************************************
* MAIN
*************************************************************/
main()
{
unsigned char TrameRecue[100];
unsigned int NbMaxCar=100;
unsigned int *NbCarRecus;
//Exemple de configuration du port serie :
g_ErrCom=OuvreCom(PORT3,V9600,BITS_8,PARITE_PAIRE,BIT_DE_STOP_1);
//Exemple d'emission
g_ErrCom=EmissionCom("UneTame",sizeof("UneTame"));
system("PAUSE");
//Exemple reception.
g_ErrCom=ReceptionCom(TrameRecue,NbMaxCar,NbCarRecus);
system("PAUSE");
}
25 mars 2005 à 10:31
Mais j'ai finit par trouver le problem :
Attention :
Quand tu fais SetCommState(g_hCom,&g_DCB); tu testes pas le retour et il se trouve que ça plante.
Pourquoi ?
Par ce que les constante que tu définis ne sont pas les bonnes pour :
/#define BIT_DE_STOP_1 1
#define BIT_DE_STOP_2 2
#define PAS_DE_PARITE 'N'
#define PARITE_IMPAIRE 'O'
#define PARITE_PAIRE 'E'
Il faut utiliser ces constante qui sont déjà définis dans je ne sais quel .h :
NOPARITY EVENPARITY ODDPARITY
ONESTOPBIT ONE5STOPBITS TWOSTOPBITS
et là ça marche !
2 mars 2005 à 16:21
Dabord, merci beaucoup pour cette source qui m'a évité de longues heures laborieuse (je debute en programation).
Le probleme:
Lorsque je fais un boucle contenant l'ouverture de la com, l'écriture et la fermeture (pour envoyer plusieur fois d'affillé le même message) il me dit qu'il n'a pas reussi à créer le flux des la deuxieme ocurence de la boucle, alors que la premiere fois, ça fonctionne impec. Je ne sais pas à quoi c'est dus.
Merci.
6 oct. 2004 à 17:57
6 oct. 2004 à 11:56
il s'agit visiblement d'un probleme sur les valeurs
de Parity et StopBits.
en forcant ces valeur dans le "OuvreCom"
g_DCB.Parity=NOPARITY; //=Parity;
g_DCB.StopBits=ONESTOPBIT; // =StopBits;
le probleme se resoud.C'est donc juste un petit soucis sur les formats de ces 2 variables.
Ce code est super, merci à gplog
6 oct. 2004 à 09:53
Si quelqu 'un trouve la source de ce problème, je suis vraiment interessé (testé sur XP fam et XP pro)
Merci
2 juil. 2004 à 14:38
Lorsque je le lance l'appli, cela ne fonctionne que si prélablement une autre appli (ex: Hyperterminal) a déjà utilisé le PortCom. Sinon tous semble bien se passer, mais dans les fait aucun carractère n'est lu ou envoyé via le port série...
Ceci a été testé sur plusieurs PC sous Win2000.
J'ai pas vraiment réussi à trouver le pourquoi...
7 avril 2004 à 20:11
#include <windows.h> //compatibilité entre windows
#include <winbase.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
merci ca m'aiderai bcp :)
7 avril 2004 à 18:43
je te remercis, car ca fait un petit moment que j'en cherché un, qui
tienne la route en C, car je boss en VB, mais j'essais de passé en C,
ton code va bcq m'aider merci encore ;)
11 févr. 2004 à 11:38
j'aimerais savoir si on pourrais adapter le code pour transmettre un fichier complet par exemple (de taille résonnable)
Merci
23 janv. 2004 à 13:19
Je n'ai toujours pas réussit à faire fonctionner ce code sous Windows 98.
J'ai par contre trouvé entre temps ce site :
http://www.wince.org.uk/vc/intermediate/serialrw.htm
les deux fichiers zip contiennent les sources qui fonctionnent après une ou deux petites modif (faut rajouter une ligne blanche à la fin de chaque fichier .h et .cpp et il faut rajouter #include <stdio.h> )
Et ce code fonctionne sous Windows 98. L'inconvénient c'est qu'il travaille bit par bit au lieu de travailler par chaîne de caractère comme le programme de gplog.
Je vais travailler dessus pour essayer de comprendre, et dès que j'ai plus d'infos, je reposte un message.
Si quelqu'un trouve la solution avant moi ce serait cool de poster
Looping
20 janv. 2004 à 15:08
Ce code marche bien mais j'ai un souci pour declencher l'envoi des données de ma carte d'acquisition (srs245). J'ai lu que l'envoi se déclenchait quand le signal DTR (terminal de donnée pret) sur la pin 20 est validé. La fonction de réception prend-t-elle en compte ce genre de considération? Dans le cas contraire, comment forcer la validation de la pin 20?
Merci
12 janv. 2004 à 12:48
unsigned char TrameReçue[100];
unsigned int NbMaxCar=100;
unsigned int NbCarReçus;
g_ErrCom=ReceptionCom(TrameReçue,NbMaxCar,&NbCarReçus);
12 janv. 2004 à 10:01
Petit rajout :
Le programme reste apparemment bloqué sur : " *pCountRead=NCarLus; ".
Merci
12 janv. 2004 à 09:47
Je programme sur Borland 5.0 et j'ai un problème avec ce programme (mais pas le même que tout le monde semble avoir).
Le voici : "L'exécutable a provoqué une classe d'exception EAccessViolation avec le message 'Violation d'accès à l'adresse 0040130B. Ecriture de l'adresse 00000000' ".
Est-ce que quelqu'un aurait rencontré la même erreur ou/et aurait une idée?
Merci d'avance
21 déc. 2003 à 23:59
je suis totalement débutant en programmation C.
Votre code m'intéresse pour extraire des données d'un ordinateur de plongée.
j'ai installé dev-c++ et je souhaiterai écrire la lecture du port com1 dans un fichier. Comment faire?
Il faudrait que le programme se mette en attente d'un flux de données puis qu'il enregistre les données reçues.
merci de votre aide.
Vincent
14 déc. 2003 à 16:34
void * TrameReçue;
unsigned int NbMaxCar=100;
unsigned int* NbCarReçus;
g_ErrCom=ReceptionCom(TrameReçue,NbMaxCar,NbCarReçus);
les données recus vont être écrite là où pointe TrameReçue c'est à dire à peu près n'importe où en mémoire (pointeur non initialisé)
=> à remplacer par :
unsigned char TrameReçue[100];
unsigned int NbMaxCar=100;
unsigned int* NbCarReçus;
g_ErrCom=ReceptionCom(TrameReçue,NbMaxCar,NbCarReçus);
11 déc. 2003 à 09:44
sous l'environnement Visual C++ 7 de la plate forme .NET 2003..le programme marche bien, il bug seulement lors de la lecture (ReadFile(...) )
j'utilise une boucle locale : seulement les pins 2 et 3 du port série sont reliées...l'erreur provient de là?
merci d'avance.
10 déc. 2003 à 10:04
par contrre, ça fonctionne sous windows NT4
Bon courage
9 déc. 2003 à 10:46
qq'un peut m'aider pour remedier ce problème?
9 déc. 2003 à 09:25
Seulement comment remédier ce problème..qqu'un a une suggestion?
8 déc. 2003 à 18:14
19 nov. 2003 à 12:17
vraiment chouette ce morceau de code, après 3 jours de recherche sur le net, c'est le plus simple et un des rares que j'ai réussit à compiler !
L'ouverture du port et l'écriture se passent sans problèmes, par contre pour la lecture j'ai un petit soucis : il m'indique l'erreur suivante :
"L'instruction à "0x0040160a" emploie l'adresse mémoire "0x78001e6e". La mémoire ne peut pas être "written"."
J'utilise Windows 2000 SP2 et comme compilateur, j'utilise Dev C++ 4.
En placant quelques printf dans la fonction "ReceptionCom",
Je vois qu'il passe la fonction ClearCommError, et que la variable nCarALire n'est pas nulle. Mais il plante ensuite, et m'affiche l'erreur.
Est-ce que quelqu'un a eut ce problème et sait comment le résoudre ?
24 sept. 2003 à 09:54
23 sept. 2003 à 17:51
17 sept. 2003 à 15:47
16 sept. 2003 à 09:27
voila pour toi un exemple de réception :
// Déclaration des Variables :
// Pointeur sur les caractères reçus
void * TrameReçue;
// Nombre maxi de caractère a lire (ici 100)
unsigned int NbMaxCar=100;
// Pointeur sur le nombre de caractère recus
unsigned int* NbCarReçus;
//Exemple de réception
g_ErrCom=ReceptionCom(TrameReçue,NbMaxCar,NbCarReçus);
Je sais pas trop si ça fonctionne parceque j'ai rien pour tester.
12 sept. 2003 à 17:44
chouette ce driver pour pour com. Pour info, il marche aussi sous win95...
T'aurrais pas une ligne de code avec un exemple de réception Stp ?
merci d'avance...
remarque amicale à Matt48 : le forum, c'est fais pour partager des connaissances, donc l'utilisations d'email, c'est pas super pour ceux qui aurons besoin des mêmes infos que toi...
12 sept. 2003 à 17:43
chouette ce driver pour pour com. Pour info, il marche aussi sous win95...
T'aurrais pas une ligne de code avec un exemple de réception Stp ?
merci d'avance...
remarque amicale à Matt48 : le forum, c'est fais pour partager des connaissances, donc l'utilisations d'email, c'est pas super pour ceux qui aurons besoin des mêmes infos que toi...
28 août 2003 à 12:41
C'est ce que je voulais tester.
Mais je vois que d'autres ouvrent le port ce cette façon :
CreateFile("COM1:",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL)
Alors que toi, tu utilises : (FILE_FLAG_WRITE_THROUGH | FILE_FLAG_NO_BUFFERING) à la place de FILE_ATTRIBUTE_NORMAL.
Quelles sont les différences ?
tu connais la fonction SetupComm, si oui, comment l'utiliser, stp.
Merci.
A+
Mon E-mail : matt48@wanadoo.fr
28 août 2003 à 09:41
Et donc, j'ai jamais eu de problèmes.
Pour voir si des infos passent sur ton port série, tu peut utiliser un bouchon (tu relie les broches numéro 2 et 3 de ton port série). Avec le bouchon, tout ce que tu envoi revient vers ton PC donc, tu peut vérifier ce que tu envoi en faisant un réception sur ton port.
27 août 2003 à 18:39
Je trouve ce code super.
Ca fonctionne très bien sous mon windows 2000, mais ça ne marche pas du tout sous win98. Comme si rien ne passait sur le port. Tu aurais une idée. J'ai testé mon executable sur 3 PCs avec win98.
Merci, d'avance,
Matthieu
25 juil. 2003 à 14:17
Ici le main envoie seulement la chaine "UneTrame" vers le port série.-->donc c'est tres court.
25 juil. 2003 à 13:09
++
25 juil. 2003 à 08:54
24 juil. 2003 à 20:18