Accueil > Forum > > > > suveiller presence d'une liaison série
suveiller presence d'une liaison série
jeudi 2 octobre 2003 à 12:20:01 |
suveiller presence d'une liaison série

raton_vicious
|
Bonjour, Dans le cadre d'un projet que je suis en train de faire, je travaille avec les API Win pour manipuler une liaison série avec un equipement mais je ne sait pas quelle structure (DCB,COMSTAT ou autre) utiliser pour savoir si l'equipement est bien connécté
|
|
jeudi 2 octobre 2003 à 12:33:51 |
Re : suveiller presence d'une liaison série

WormsTeam
|
Hi, La fonction suivante te donne le minimum minimorum pour te permettre d'ouvrir un port com en travaillant avec les api win. Pour savoir si ton équipemement est connecté, il ne s'agit plus que d'un problème de protocole. ++. short Open(short PortCom,HANDLE *hSerialPort) { char csPortName[256]; DCB MyDCB; COMMTIMEOUTS MyComTime; HANDLE h; sprintf(csPortName, "COM%d:", PortCom); /* Ouverture du port de com*/ h = CreateFile(csPortName, GENERIC_WRITE|GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); *hSerialPort=h; if (hSerialPort == INVALID_HANDLE_VALUE) { return INVALIDE; } /* recupère la config actuelle du port. On est donc sur qu'elle est correcte.*/ if ((GetCommState(*hSerialPort, &MyDCB)) == FALSE) { Close(hSerialPort); return CANT_GET_STATE; } /* Changement de la config du port*/ MyDCB.BaudRate = CBR_115200; //Test du nouveau débit. //MyDCB.BaudRate = CBR_19200; // ligne d'origine. // MyDCB.BaudRate = CBR_9600; // MRJ : Ligne de test fréquence basse MyDCB.ByteSize = 8; MyDCB.StopBits = ONESTOPBIT; MyDCB.Parity = NOPARITY; /* ReConfiguration du port de com avec les nouvelles valeurs.*/ if ((SetCommState(*hSerialPort, &MyDCB)) == FALSE) { Close(*hSerialPort); return CANT_SET_STATE; } return NO_COMM_ERROR; } // Open WormsTeam aka RiVoIrE|ErIoViRJoueDuMiroir 
|
|
jeudi 2 octobre 2003 à 13:06:46 |
Re : suveiller presence d'une liaison série

raton_vicious
|
Merci bien mais j'ai deja toute la structure d'ouverture, d'envoi et de reception selon mon protocole. Si tu ve j'ai fait un timer (WM_TIMER) qui toute les seconde demande a mon equipement si il a des evenements a m'envoyer (envoi trame pour connaitre nombre d'evt puis si nombre!= 0 reception des evenements) donc je lis et ecrit constamment sur la voie série mais comme je n'ai pa gérer la deconnexion du cable mon appli plante des que je debranche l'equipement du PC (a la lecture donc) et j'aimerai avoir des conseil pour savoir comment resoudre le probleme... Merci ++
|
|
jeudi 2 octobre 2003 à 14:42:29 |
Re : suveiller presence d'une liaison série

WormsTeam
|
Je sais pas si ton problème vient de là mais configure le timeout de la lecture/ecriture sur ton port. Pour ceci, utilise la fonction SetCommTimeouts. Pour plus de détail sur son fonctionnement, voir doc (msdn par exemple). Si t'as pas de doc, reposte un message, je te la ferait suivre. ++ WormsTeam aka RiVoIrE|ErIoViRJoueDuMiroir 
|
|
jeudi 2 octobre 2003 à 16:54:33 |
Re : suveiller presence d'une liaison série

raton_vicious
|
C bien la mon probleme, je ne compren pas bien comment marche la structure COMMTIMEOUT pour la lecture, don je rentre dans une boucle infini, pe etre devrais-je faire autrement??? voici ma boucle
while(lect == 0) { ClearCommError(h_port,&erreur,&stat); if(stat.cbInQue) { if(nbrToRead == MAXDWORD) erreur = ReadFile(h_port,Buff,stat.cbInQue,&lect,NULL); else erreur = ReadFile(h_port,Buff,nbrToRead ,&lect,NULL); if(erreur == 0) { wsprintf(MessageError,"Erreur dde lecture: %ld ",GetLastError()); break; } } }
|
|
jeudi 2 octobre 2003 à 16:55:37 |
Re : suveiller presence d'une liaison série

raton_vicious
|
Oua c inlisible je reesaye... while(lect == 0) { ClearCommError(h_port,&erreur,&stat); //verif param de la ligne pour verif si ya des cars en attente ds tampon if/*while*/(stat.cbInQue) { if(nbrToRead == MAXDWORD) erreur = ReadFile(h_port,Buff,stat.cbInQue,&lect,NULL/*&m_OverR*/); else erreur = ReadFile(h_port,Buff,nbrToRead ,&lect,NULL/*&m_OverR*/); if(erreur == 0) wsprintf(MessageError,"Erreur dde lecture: %ld ",GetLastError()); ClearCommError(h_port,&erreur,&stat); if(erreur != 0) break; } }
|
|
jeudi 2 octobre 2003 à 16:59:47 |
Re : suveiller presence d'une liaison série

raton_vicious
|
Dsl voila la bonne version
while(lect == 0) { ClearCommError(h_port,&erreur,&stat); if(stat.cbInQue) { if(nbrToRead == MAXDWORD) erreur = ReadFile(h_port,Buff,stat.cbInQue,&lect,NULL); else erreur = ReadFile(h_port,Buff,nbrToRead ,&lect,NULL); if(erreur == 0) { wsprintf(MessageError,"Erreur dde lecture: % ld ",GetLastError()); break; } } }
|
|
jeudi 2 octobre 2003 à 17:34:45 |
Re : suveiller presence d'une liaison série

WormsTeam
|
oué moi je ferais plutot un truc du genre : int erreur = NO_ERR; while(erreur == NO_ERR) { int nBytes = 0; if ((nBytes = ReadFile(h_port,Buff,stat.cbInQue,&lect,NULL)) == true) { //Traitement spécifique sur une lecture de bytes sur le port com stat.cbInQue -= nBytes; } else//Cas d'erreur !!!! { ....erreur = GetLastError(); //Traitement spécifique de l'erreur } } Bref, ne détecte pas une erreur sur le port com avec le nombre d'octet lu mais plutot avec le code retour de la fonction ReadFile. Bon a priori, ta technique doit marcher, mais c'est mieux de tester le code retour de readfile. Là, tu me dis que ta technique marche pas, donc vérifie bien ta config des time out. Peut-être qu'elle est trop breve ??? Voilà. ++ WormsTeam aka RiVoIrE|ErIoViRJoueDuMiroir 
|
|
jeudi 2 octobre 2003 à 18:29:53 |
Re : suveiller presence d'une liaison série

raton_vicious
|
Merci pour l'idée, je vai essayer... Mais comme tu di je dois avoir un pbl de timeout car quand je deconnecte l'equiepement ça plante, je vois sa demain Merci bcp!!
|
|
jeudi 2 octobre 2003 à 19:16:11 |
Re : suveiller presence d'une liaison série

FreeYo
|
FreeYoLa gestion d'une communication RS232 avec l'API Win32 est beaucoup plus compliquée et sensible qu'il n'y paraît ! Je pense que tes problèmes proviennent d'une mauvaise gestion des Lectures/Ecritures provoquant an 'unpredicted result' au niveu des tampon d'entrée et de sortie. Le mode synchrone convient pour l'envoie d'un fichier, mais pour une communication full duplex, il est vivement recommander d'utiliser le mode asynchrone. Il faut donc utiliser ReadFile et WriteFile avec des structures overlapped et créer des Thread de lecture et d'écriture. Ensuite, il faut gérer tout ça avec des WaitForMultipleObjects répondant aux evènements des structures Overlapped. Ne surtout pas utiliser WaitCommEvent qui déconne au niveau de la file d'attente du buffer d'entrée. Mots Clés : CreateFile et FILE_FLAG_OVERLAPPED CreateEvent CreateThread (AfxBeginThread en MFC) ReadFile with Overlapped GetLastError() et ERROR_IO_PENDING WaitForMultipleObjects GetOverlappedResult ResetEvent
|
|
Cette discussion est classée dans : série, liaison, presence, equipement, suveiller
Répondre à ce message
Sujets en rapport avec ce message
Aidez moi SVp ->Kylix + Liaison série [ par oyoboy ]
Bonjour je suis étudiant en BTS et je n'arrive pas à m'en sortir avec la programmation sous linux. Nous sommes en plein projet et nous n'avons qu'une
liaison série et multithread [ par icarus13 ]
Salut, je cherche à réaliser une communication entre 2 port série et du multithread en Visual C++. Est-ce que quelqu'un a des infos ??Merci d'avance.Y
liaison série sous NT [ par icarus13 ]
Salut,je cherche à communiquer via la liaison série sous NT. Est-ce que quelqu'un sait comment faire ??Merci d'avance.Yann
Liaison série [ par projetas2 ]
Je cherche un programme en C qui puisse me permettre d'envoyer des données via le port série du PC. Il faut que je saisisse des caractères, puis ils d
Liaison série RS232 [ par NerOcrO ]
Je cherche des programmes pour m'aider à programmer sur la liaison série RS232 en DOS.
liaison série avec Qt [ par popinou92 ]
bonjours a tous je suis nouveau dans la programmationet j ai besoin d'aide pour la gestion de ma liaison série avec Qt le problème consiste à que j'ai
Comment faire ? Interaction PHP - C++ liaison série [ par Cethywolf ]
Voilà, Dans le cadre de mon projet de fin d'année de BTS IRIS, je dois développer un "site" qui doit interagir avec le port com (liaison série). J'ai
Envoie et reception par liaison série d'un entier [ par birmingham ]
Bonjour, Voilà j'ai besoin de transmettre un entier depuis un PC vers un microconotroleur (PIC16F84).Mais je débute totalement dans ce domaine. Quelqu
Interruption liaison série [ par ben_chamb ]
Salut,Tout est dans le titre.Je cherche a réaliser une lecture du port série du PC mais par interruption.J'ai testé les différents programmes, traitan
Liaison série DSR [ par joey11 ]
Bonjour à tous, J'utilise une liaison série pour recevoir et traiter des données issue d'un GPS. Sachant que la broche Rx (réception de données) est d
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2010 : SHAREPOINT 2010 POUR LES DéVELOPPEURSTECHDAYS PARIS 2010 : SHAREPOINT 2010 POUR LES DéVELOPPEURS par ROMELARD Fabrice
Animé par: Laurent Cotton Le développement dans SharePoint 2010 passe par plusieurs axes qui seront évoqués dans cette session, mais plus particulièrement les développements simples lié au besoin Business Business Connectivity Services Ce BCS es...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOURTECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOUR par ROMELARD Fabrice
Cette session est la dernière pleinière de ces 3 jours de TechDays Paris 2010. Généralement, cette troisième journée est plus axée sur l'avenir vu par Microsoft. Après un retour sur l'avenir vu par la Science Fiction ou par ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion
Forum
RE : WIN APIRE : WIN API par racpp
Cliquez pour lire la suite par racpp
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|