Discussions au sujet des autres produits NI

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

Vitesse d’exécution d'une tache sous Windows

Bonjour, Je programme sous LabWindows 7.0, j'utilise un timer assynchrone (NewAsyncTimer) cadencé à 10ms, ce timer appel une fonction qui fait clignoter une sortie digitale. J'ai testé 2 hardware differents : 1 PCI 6519, puis 1 Carte PCL724, dans les 2 cas le programme fonctionne, mais le comportement est légèrement diffèrent. Explication : je mesure la sortie concernée avec un scope, sur la PLC724, pas de soucis j'ai des créneaux bien régulier de 10ms, et ceux quoi que je fasse avec le PC, accès disque, analyse antivirus ou autre. Par contre, avec la PCI6519, j'ai bien des créneaux de 10ms, mais leurs régularités est très vite perturbé dés que je sollicite un peux le PC, en lançant un scan avec l'antivirus, j'obtient des créneaux pouvant aller jusqu'à 150ms !!! puis derrière un tel créneau, j'en ai peu être 10 en 20ms, comme s'ils avaient été stocké par Windows puis tous exécutés d'un coup. Voici la ligne utilisé avec la PCL724 : outp( S_B1CN0PB, SortieTest ); Voici 2 méthode différentes utilisées avec la PCI6519 : DAQmxWriteDigitalLines (TaskSortiesPort1, DAQmx_Val_Auto, 1, 10.0, DAQmx_Val_GroupByChannel, TabSorties, &Nb_S, 0); DIG_Out_Line (Board1, 3, SortieTest, Etat_S_Test); Mon problème est que la carte PLC724 est une carte ISA, et je dois travailler avec des PC qui n'ont pas de port ISA, je suis donc obligé d'utiliser un carte du type PCI6519 mais je ne vois pas comment faire pour ne pas être dérangé par Windows. Merci de vos réponses.
0 Compliments
Message 1 sur 8
3 849 Visites

Bonjour fdalbera,

 

Le comportement que vous observez n'est pas anormal; la carte PCI-6519 n'a pas d'horloge matérielle, le cadencement ne se fait qu'a travers l'OS. Si vous souhaitez une meilleur précision  pour la génération d'un signal numérique, vous pouvez envisager d'utiliser une carte DIO cadencée matériellement ou alors une carte compteur.

 

Bonne journée,

Flo

Message 2 sur 8
3 836 Visites

Bonjour, et merci de votre réponse.

 

Je comprend votre explication, mais en fait mon pb est lié à la manière de piloté la carte d'E/S, car le séquencement de mon programme fonctionne très bien grâce au timer asynchrone, et il n'est pas altérer par l'OS.

En fait je comprend bien que l'OS joue un rôle, mais lorsque je commande une sortie sur une carte ISA, qui n'a pas d'horloge matériel non plus, avec la commande outp(), je n'ai aucun problème, et en fait j'aimerai trouver une commande équivalente pour les cartes PCI afin de ne pas être perturber par l'OS, et avoir ma sortie qui réagisse bien quand je la commande et pas 150ms plus tard.

 

Encore merci pour votre aide.

0 Compliments
Message 3 sur 8
3 832 Visites

Bonjour,

 

Toujours pas de solution à mon problème, personne n'a été confronté au même problème ?

 

Je vais etre obligé de continuer à utiliser des cartes sur le bus ISA ...

 

Merci de votre aide.

0 Compliments
Message 4 sur 8
3 731 Visites

Petite question, avez vous créé un processus ou un thread spécifique pour la commande de vos cartes ? Si oui avez vous assigné une priorité au thread / processus ?

 

 

Da Helmut
Voir le profil de Maxime M. sur LinkedIn - View Maxime M.'s profile on LinkedIn
0 Compliments
Message 5 sur 8
3 728 Visites

Non, il y a juste des taches crées dans mesurement, et qui sont appelées par mon timer pour actualiser les sorties digitales.

 

Merci pour votre aide.

0 Compliments
Message 6 sur 8
3 726 Visites

Dans votre cas j'essayerai de voir de ce côté là, même si le driver DAQmx créé un thread spécifique, il peut êter utile de créer un processus (dans le meilleur des cas, voir l'API Windows) ou un thread qui va avoir une priorité haute dans la pile.

Da Helmut
Voir le profil de Maxime M. sur LinkedIn - View Maxime M.'s profile on LinkedIn
0 Compliments
Message 7 sur 8
3 716 Visites

En fait je vais poser le problème autrement, en vous décrivant ce que j'aimerais réaliser.

Mon but est de pouvoir piloter une sortie numérique dans un programme en C sous LabWindows CVI (Version 7.1).

J'ai une zone mémoire qui est l'image de mes sorties, avec laquelle je travail dans mon programme, et un timer qui vient, à intervalle de temps régulier, copier l'image de mes sorties sur mes sorties, afin de les actualiser.

Je n'ai aucune problème avec le timer, les intevalles de temps sont très précis et très réguliers.

Mais lorsque j'ai une sortie qui change d'état en mémoire, elle devrait etre mise à jour physiquement au coup de timer suivant, hors dans mon cas il y a un délai, qui peut aller jusqu'à plus de 150ms, alors que mon timer tourne à 20ms. Ceci avec une carte digital I/O PCI, lorsque j'utilise le même soft avec une carte digital I/O sur bus ISA, il n'y a pas de problème, les sorties sont mises à jour au coup de timer près.

J'aimerais donc savoir s'il est possible de réaliser la même chose avec une carte PCI ou si du fait de la conception, c'est impossible.

Encore merci pour votre réponse.

0 Compliments
Message 8 sur 8
3 712 Visites