11-27-2008 01:58 AM
Bonjour
je programme avec Visualstudio 2008, et j'utilise DaqMX 8.8.
Je souhaite de faire un asservisement de position, pour cela je dois a interval regulier faire lecture point puis ecriture point.
Si je laisse tourner en boucle sans timer, j'attends une vitesse de boucle d'environ 0.2 ms. Je n'ai besoin que de maintenir une frequence de 1ms, ou peut etre 0.5ms.
Y a til des timer assez performant et prioritaire, pour faire ce genre de declenchement ?
Merci de votre aide
Fredo
11-28-2008 04:56 AM - edited 11-28-2008 04:58 AM
Bonjour,
Pour poster en français vous pouvez venir sur le forum de la communauté française. Concernant votre question je pense qu'il s'agirait plutôt d'un cadencement de boucle que d'un timer. Pour cela utlisez un cadencement matériel comme par ex sous cvi :
" DAQmxErrChk (DAQmxCfgSampClkTiming(gTaskHandle,"",rate,DAQmx_Val_Rising,DAQmx_Val_ContSamps,sampsPerChan)); "
Ou bien paramétrez (entre autres) une fonction attente dans un timer afin de ralentir votre appli :
http://www.codeproject.com/KB/vb/Speed_up__Web_application.aspx et Cf forum msdn
Cordialement,
11-28-2008 02:27 PM
Bonjour,
un cadencement n'est pas la bonne solution, je crois, car on recupère les info par des evenements, et ça, c'est tres hazardeux coté Windows. si il y a par exemple un event tout les 10 ms, souvent, il n'a rien pendant 30ms ou plus, puis plusieurs qui se suivent.
Si on fait des lecteure ou ecritures d'un seul point sans cadencement, puis on recommence, c'est tres regulier est stable, mais on fait tourner la boucle a la vitesse maxi possible, qui est trop elevé sur ma machine. J'ai un colluege qui programme en CVI, qui m'a parler des timers plus fiables, que ceux du visualstudio, qu'il utilise pour ce genre de tache, mais il ne savait pas comment les trouver dans Visualstudio?
Le forum français , je le trouve comment ?
merci
fredo
12-01-2008 02:46 AM
12-04-2008 05:54 AM
Bonjour,
Je pense que votre collègue parlait de cela peut-être ?
CVI et MS sont différents produits. Autrement dit, CVI est un ide à part entière alors que MS n'est qu'un add-on de Visual Studio.
Ensuite pour avoir un timer performant il faut savoir que Windows n'est pas un OS temps réel, en revanche NI propose des solutions temps réel.
Sinon en .net je pense que le plus simple est d'utliser la Sleep method de la classe Threads :
for (Int32 i = 0; i < 5; i++)
System.Threading.Thread.Sleep(numMilliseconds)
Ou bien http://support.microsoft.com/?kbid=306979
Comme vous pouvez le voir il y a de nombreux mécanismes de timer en .net, en effet : http://msdn.microsoft.com/fr-fr/magazine/cc164015(en-us).aspx
Autrement, une recherche sur google vous permettra de trouver les timer adéquats pour visual studio .
Cordialement,