Bonjour,
j'utilise un logiciel qui se nomme LabWindows/CVI, dont le code est en C. J'ai un problème avec une de mes variables qui ne se conservent pas et qui se met à jour alors que je ne le désire pas.
Chaque seconde, je fais apel à la fonction suivante qui doit récupérer la valeur d'un compteur, la soutrait à la valeur précedente pour n'avoir que le nombre de tour fait un 1 seconde, et la multiplie par 60 pour avoir le nombre de tour par seconde.
Voici ma fonction :
- Lorsque je passe pour la première fois, il n'y a pas d'erreur et tout fonctionne normalement. Puis j'execute le code suivant :
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 int CVICALLBACK Timer1s (int panel, int control, int event,void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_TIMER_TICK: { if ( debut==1 ) { frequ=(uInt32*)(data - tempon); } if ( debut==0 ) { frequ=data; debut=1; } tempon=data; SetCtrlVal(panelHandle,PANEL_DATA2,(*(int*)frequ * 60) ); } break; } return 0; }
- Qui sert à compter mes tours en permanence. Le probleme est que lorsqu'il passe à la fonction "DAQmxReadCounterScalarU32", il me la valeur dans data ainsi que dans tempon ce qui fait que lorsque je passe dans la fonction Timer1s le rapport des 2 est nul, alors que je voudrais concerver tempon à sa valeur d'avant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 int CVICALLBACK TimerCallback(int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { if( event==EVENT_TIMER_TICK && gTaskHandle ) { //Lecture des informations DAQmxReadCounterScalarU32(gTaskHandle,10.0,data,NULL); SetCtrlVal(panelHandle,PANEL_DATA,*(int*)data); } return 0; }
Et si je déclare tempon en variable local de fonction Timer1s, lorsque j'en sort il me supprimer la valeur aussi.
Partager