nicolebarge23
Messages postés4Date d'inscriptionmardi 22 avril 2008StatutMembreDernière intervention 9 juin 2008
-
9 juin 2008 à 10:08
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 2009
-
9 juin 2008 à 14:17
Bonjour,
Je dois réaliser un logiciel permettant de récupérer et d'afficher des données provenant d'une communication RS232.
Je récupère correctement ces données, et les affiche aussi de la bonne façon.
MAIS je suis encore incapable de rafraichir le buffer contenant les données et incapable aussi de les afficher au rythme des transmissions.
Pour l'instant j'effectue un updateallview(0,0) dans ma fonction de lecture du port COM, mais cela ne fonctionne pas correctement ....
Si quelq'un pouvait m'expliquer comment effectuer un rafraichissement de données ainsi que le rafraichissement de la vue
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 9 juin 2008 à 10:30
Bonjour,
On ne maîtrise pas l'arrivée des données sur le port RS232 donc il faut un programme qui soit en permanence à l'écoute de ce port. Dans votre programme il faut donc créer un thread qui ne fait que la lecture du port RS232 et qui place ce qu'il reçoit dans le buffer (qui est une file d'attente). Quant à la partie "visualisation", au lieu de lire le port RS232, elle lit le buffer : tant qu'il y a quelque chose dans la file d'attente, on traite et on visualise. Les 2 actions sont ainsi désynchronisées et fonctionnent à leur propre rythme. A priori la précaution principale à prendre est de ne pas saturer la file d'attente.
nicolebarge23
Messages postés4Date d'inscriptionmardi 22 avril 2008StatutMembreDernière intervention 9 juin 2008 9 juin 2008 à 10:41
Merci, mais justement comment j'effectue cette lecture en permanance de ce port??
Parce que moi, mas fonction de lecture s'effectue de la facon suivante :
J'appuis sur le bouton CONNECT, puis j'appelle la fonction d'ouverture du port COM, et une fois le port COM ouvert, j'appelle la fonction de lecture du port COM, et une fois ensuite, à l'aide d'une boite de dialogue, j'appelle la fonction d'affichage.
et justement mon problème est que je ne sais pas comment dire à ma fonction de lecture du port COM de s'effectuer tout le temps.. je remplis bien un buffer sous forme de file d'attente, mais cela se stoppe lorsque je l'affiche .....
CString Chaine;
Chaine.Format(" Appuyer sur ENTER pour commencer");
AfxMessageBox(Chaine);
if (!ClearCommError(hFile,&CodeErreur,&EtatCom))
{
// Handle the error.
CString Chaine;
Chaine.Format(" ClearCommError failed with error %d", GetLastError());
AfxMessageBox(Chaine);
return FALSE;
} // Si rien, alors pas de périphérique.
else // Si présence port, alors définir :
{
NbOctetsALire = EtatCom.cbInQue;
}
//--------- Lecture de tous les octets reçus et stockage dans le tableau BufferIn---
BufferIn=new BYTE[NbOctetsALire];
// Allocation dynamique
if (!ReadFile(hFile , BufferIn , NbOctetsALire , &NbOctetsLus , NULL))
{
CString Chaine;
Chaine.Format(" Could not read to file (error %d)", GetLastError());
AfxMessageBox(Chaine);
return FALSE;
}
// UpdateAllViews(NULL);
//Retour du buffer contenant toutes les données transmises par le port
return BufferIn;
}
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 9 juin 2008 à 13:45
Un "thread" (fil en français) est un programme (assez court en général) qui va être exécuté indépendemment du programme principal qui l'a lancé via la fonction CreateThread(). Au vu de vos explications, je dirais que l'appui sur le bouton CONNECT va lancé ce thread qui contient les instructions d'ouverture de la connexion suivit de la boucle de lecture du port/écriture dans la file d'attente. La fonction d'affichage lira et traitera cette file d'attente.
nicolebarge23
Messages postés4Date d'inscriptionmardi 22 avril 2008StatutMembreDernière intervention 9 juin 2008 9 juin 2008 à 13:56
Merci pour la réponse, je vais m'orienter sur cette voie de THREAD.
En effet, une fois que je suis connecté à mon port COM, j'ai besoin de tout le temps utiliser la fonction de lecture de ce port.
Une fois, ce thread lancé, il faut utiliser différentes instructions spécifiques pour actualiser ou cela se fait-il tout seul???
MERCI
Vous n’avez pas trouvé la réponse que vous recherchez ?