Besoin d'aide programme c++

Nemesis007 Messages postés 4 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 7 avril 2007 - 13 févr. 2007 à 18:27
mrbozzo Messages postés 11 Date d'inscription mercredi 29 octobre 2003 Statut Membre Dernière intervention 4 avril 2007 - 2 avril 2007 à 18:00
Bonsoir à tous !

Voila, je fais appel à votre aide car j'ai un gros problème pour mon programme mais tout d'abord, je vais vous définir le but de ce programme :

Le programme en question doit être capable de recevoir des trames envoyés par un réseau rs485 modbus (Je suis l'esclave) passant par un adaptateur rs232 pour être branché au PC. En recevant ces trames, je dois les analyser et en extraire certaines données en voici un exemple 0306000020001E828  (2 chiffres = 1 octet) 

En décomposant cette trame :
-> 03 : Adresse du module
-> 06 : Fonction (que je ne touche pas)
-> 00 02 : Marche  ou  00 01 : Arrêt
-> 00 01 : Adresse du registre

Une fois décomposée, je dois comparer ces valeurs à celles deja contenues dans le programme (en fait c'est comme si je remplacais le régulateur, il a une adresse déjà implémenté et je ne peux pas y toucher [j'espère que je suis clair]). Si les adresses concordent, suivant l'état (Marche ou Arrêt), je dois afficher dans mon IHM un voyant (vert pour Marche et rouge pour Arrêt).

Pour en revenir au problème, j'ai une classe LiaisonRS232 avec toutes les fonctions pour dialoguer mais on m'a dit que j'avais besoin de thread pour pouvoir analyser une trame dès que j'en recois une.

Les spécifications du programme :

- Langage C++
- IHM en document vue

Mes principales questions sont : où dois-je placer la thread ? et comment puis je faire un voyant qui change en fonction de ce que j'ai récupéré dans la trame ?

Si vous voulez voir le programme n'hésiter pas à me le demander (étant donné que c'est mon premier post, si quelqu'un demande mon programme, je souhaiterai qu'il me dise comme je peux l'upper :D ).

Merci par avance pour toute l'aide que vous me fournirez !

5 réponses

astuces_jeux Messages postés 731 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 27 mai 2010
13 févr. 2007 à 18:33
je crois qu'il y a chez microsoft :
http://www.microsoft.fr
0
Nemesis007 Messages postés 4 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 7 avril 2007
14 févr. 2007 à 13:12
J'ai besoin d'aide :(   

je suis un peu perdu là
0
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
15 févr. 2007 à 07:37
Pour ma part je construirais un type def struct voir une classe
tu dois recevoir cette trame mais après tout depend de son type pour son traitement ...
C'est pas exactement pareil si tu recois un array, une chaine ...
En esperant que cela puisse t aider
--------------------------------------------------------------------------------------------------
         Ilvaut mieux poser une question et passer pour bête que le rester toutesa vie
0
Nemesis007 Messages postés 4 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 7 avril 2007
15 févr. 2007 à 13:47
Oui le traitement dépend de son contenu mais le problème c'est de recevoir la trame ensuite pour en gérer son contenu je pense pouvoir y arriver

Le problème est toujours : Où dois-je mettre le thread ? 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mrbozzo Messages postés 11 Date d'inscription mercredi 29 octobre 2003 Statut Membre Dernière intervention 4 avril 2007
2 avril 2007 à 18:00
J'ai une proposition à te faire, tu crées une variable static, genre

static bool voyant rouge = false;

tu crée un thread qui fait ça (je ne sais pas comment on cré un thread :P

void monThread(){
    while(true){
       timer.pause(100); // là tu mets un timer qui bloque ton thread tout les 100 ms, enfin, tu mets la valeur que tu veux, c'est pour ne pas que toutes ta ressource soit bouffé par ce thread
       if(voyant_rouge) IHM.allumeRouge();
       else IHM.allumeVert();
    }
}

et un autre thread qui fait ça :P

void monDeuxiemeThread(){
    while(true){
       timer.pause(100); // pareil qu'au dessus       voyant_rouge (IHM.readStateLight() color.red);
    }
}

voilà, j'espère que tu m'as compris, parce que c'est du pseudo code, super à l'arrache, car je ne connais pas le c++ :D
0
Rejoignez-nous