Bonjour ...

Voila, je pense que le titre est assez explicite ...

Mais je vais vous planter le décors ...

J'ai réaliser un code que je compile en une DLL ... Cette dll je vais l'inclure dans labView (si vous connaissez) pour pouvoir utiliser les fonctions de ma dll.

La fonction que j'appelle est une peu sur le principe de grafcet !

Donc c'est une suite d'instruction avec des étapes ...

Dans une des étapes, je dois faire une demande toute les secondes +/- ...

Pour l'instant ce que je fais, c'est que j'utilise une variable que j'incremente a chaque passage dans ma boucle et quand elle vaut une certaine valeur, j'effectue mon action ... et je recommence ainsi de suite ...

Voici d'ailleur le code pour illustrer la chose
(il y a des appelles a des fonctions que j'ai réalisé, step est une variable globale qui est changée dans la fonction appellée si tout c'est bien passé)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 
__declspec(dllexport) int LAfonction(short stop, statMeasRead *cluster1, unsigned short paramLv[]){
 
  // Test fermeture du programme
  if(stop == 1){
    step = 3;
  }
 
  // Step = 0 -> Initialisation + connection.
  if(step == 0){
    connection();
  }
 
  // Step = 1 -> Recuperer tout les parametres.
  if(step == 1){
 
    sending(2, cpt, 0);
    receive(cluster1, paramLv);
 
    // Compteur de passage dans initialisation
    cpt++;
 
    // Initialisation terminee
    if(cpt == NBPARAM){
      memcpy((void *)paramOld, (const void*)paramLv, NBPARAM*sizeof(unsigned short));
      step = 2;
    }
  }
 
  //Step = 2 -> Envoyer et recevoir des données normalement.
  if(step == 2){
 
    // Boucle pour voir si le tableau des parametres a été modifié.
    for(cpt = 0; cpt < NBPARAM; cpt++){
      if(paramLv[cpt] != paramOld[cpt]){
        sending(3, cpt, paramLv[cpt]);
        receive(cluster1, paramLv);
        paramOld[cpt] = paramLv[cpt];
        break;
      }
    }
 
    // Status and Measures reading (TCS request)
    cptReqStat++;
    if(cptReqStat == 10000){
      sending(1,0,0);
      receive(cluster1, paramLv);
      cptReqStat = 0;
    }
  }
 
  //Step = 3 -> Deconnection.
  if(step == 3){
    disconnection();
    return 1;
  }         
}
et la partie plus précisement dont je vous parlais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
    cptReqStat++;
    if(cptReqStat == 10000){
      sending(1,0,0);
      receive(cluster1, paramLv);
      cptReqStat = 0;
    }
Maintenant cette solution n'est pas très précise ...

Comment pourrais je faire pour utiliser plutot un style de timer ? Histoire d'avori quelque chose de plus propre et de plus précis ?


Merci d'avance