Discussions au sujet de NI LabVIEW

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

Commande de carte NI par Scilab

Résolu !
Accéder à la solution

Bonjour,

Actuellement élève en école d'ingénieur, je suis confronté à un souci de commande sur scilab.

J'utilise un carte NI 6008.

Du côté "digital" j'ai les ports P0 et P1.

Le port 0 possède 8 entrées.

Le port 1 en possède 4

Ainsi j'ai P0.0, P0.1, ... P0.7 qui sont les 8 entrées du port 0

et P1.0, P1.1, P1.2, P1.3 qui sont les 4 entrées du port 1

 

Sur les ports P1.0 P1.1 et P1.2, j'ai trois LEDs branchées.

Sur les ports P0.6 et P0.7 j'ai un moto réducteur qui doit tourner dans un sens ou dans l'autre selon la sortie que je sélectionne.

 

Le programme est construit correctement : lorsque je veux contacter les LEDs, j'utilise la fonction writeDigPort suivante :

 

Version:0.9 StartHTML:-1 EndHTML:-1 StartFragment:0000000111 EndFragment:0000007413

function writeDigPort(value)
// Channel parameters
//  chan    = "Dev1/ao1";
  chan    = "Dev1/port0";   // "Dev1/port1" donne accès aux LEDs
// Timing parameters

  samplesPerChan = 1;
// Data write parameters
  pointsToWrite = 1;
  timeout       = 10.0;
  data          = uint32(value); // 0x55
  
  [task,err] = DAQ_CreateTask("");
  DAQ_ErrChk(task,err); //tache d'acquisition

  [err] = DAQ_CreateDOChan(task,chan);
  DAQ_ErrChk(task,err);

  [err] = DAQ_StartTask(task);
  DAQ_ErrChk(task,err);

  [pointsWritten,err] = DAQ_WriteDigitalU32(task,1,%t,timeout, DAQ("Val_GroupByChannel"),data);
  DAQ_ErrChk(task, err);

  DAQ_StopTask( task );
  DAQ_ClearTask( task );

 

La 4ème ligne devrait selon moi être le souci, si j'écris Dev1/port1, je peux accéder aux LEDs, et si je mets des valeurs dedans, les LEDs s'allument selon un code donné.

1 = Led rouge

2 = Led verte, etc

 

Selon moi je devrais donc écrire Dev1/port0 et me fier au code donné pour le moto réducteur, à savoir

1 = monter

2 = descendre

 

Mais ça ne fonctionne pas ...

Le programme est un conglomérat de programmes divers trouvés dans des tutos, je ne suis pas expert ...

La fonction readNIdata devrait être juste puisque ça marche pour les LEDs ...

 

Si quelqu'un avait une idée, ce serait formidable !

 

Merci,

 

Valentin

0 Compliments
Message 1 sur 7
3 505 Visites

Bonjour,


Quand on communique avec un DAQ Ni, il y a plusieurs méthodes pour adresse des I/O :

 

- DevX/portY : On écrit sur le port Y de la carte X. La valeur est codé sur un octet, donc pour activer les 8 sorties, on envoit 255 ou 0xFF.

-DevX/lineY:Z : On écrit de la sortie Y à Z de la carte X. La valeur est codé en binaire en fonction du nombre d'entrée, avec le bit de poids faible sur la première sortie adresse.

-DevX/lineY : On pilote uniquement la sortie Y de la carte X. La valeur est binaire soit 0 ou 1.

 

Quand tu indiques que cela ne fonctionne pas ? Quels sont les erreurs constatées ?

Comme ton modo réducteur est câblé entre P0.6 & P0.7, ta valeur doit donc être soit 0x20 (0d32) soit 0x40 (0d64), selon ton sens de rotation.


NB : Ton sujet n'est pas forcément dans la bonne catégorie, vue qu'il ne touche pas à LV mais à un périphérique NI.

 

Cdt,
Michael

“En science, la phrase la plus excitante que l'on peut entendre, celle qui annonce des nouvelles découvertes, ce n'est pas "Eureka" mais c'est "drôle"
Isaac ASIMOV
Message 2 sur 7
3 496 Visites

Bonjour, merci de cette réponse rapide et intéressante !

 

Voici les erreurs constatées par Scilab :

 

 

   !--error 10000
DAQmx Error: -50405: NI Platform Services:  No transfer is in progress because the transfer was aborted by the client. The operation could not be completed as specified.
Task Name: _unnamedTask<0>

Status Code: -50405
at line      10 of function DAQ_ErrChk called by :  
at line      20 of function writeDigPort called by :  
at line       3 of function monterbelier_callback called by :  
ckobject(164);monterbelier_callback(handles);if exists("%oldgcbo") then gcbo = %oldgcbo;
while executing a callback
 
 
 !--error 10000
DAQmx Error: -50405: NI Platform Services:  No transfer is in progress because the transfer was aborted by the client. The operation could not be completed as specified.
Task Name: _unnamedTask<1>

Status Code: -50405
at line      10 of function DAQ_ErrChk called by :  
at line      20 of function writeDigPort called by :  
at line       3 of function descendrebelier_callback called by :  
bject(166);descendrebelier_callback(handles);if exists("%oldgcbo") then gcbo = %oldgcbo;
while executing a callback
 
 
 !--error 10000
DAQmx Error: -50405: NI Platform Services:  No transfer is in progress because the transfer was aborted by the client. The operation could not be completed as specified.
Task Name: _unnamedTask<2>

Status Code: -50405
at line      10 of function DAQ_ErrChk called by :  
at line      20 of function writeDigPort called by :  
at line       3 of function stopperbelier_callback called by :  
kobject(165);stopperbelier_callback(handles);if exists("%oldgcbo") then gcbo = %oldgcbo;
while executing a callback

 

 

En ce qui concerne l'appelation par ligne, je vais essayer, je cherche actuellement le nom de la ligne p0.6 et p0.7

 

je n'ai pas bien compris votre ligne :

 

"Comme ton modo réducteur est câblé entre P0.6 & P0.7, ta valeur doit donc être soit 0x20 (0d32) soit 0x40 (0d64), selon ton sens de rotation."

 

Merci encore !

0 Compliments
Message 3 sur 7
3 489 Visites
Solution
Accepté par tino0684

Le principe de pilotage d'un DAQ sous LV se base sur des voies virtuelles. Je suis parti de l'hypothèse que ce fonctionnement est similaire via un pilotage par SCILAB.


Quand tu crées ta voie virtuelle avec la définition Dev1/Port0, cela implique que la valeur écrite correspondra à l'image des 8 sorties de ton Port Codé sur 8bits, avec ta sortie 0 en bits de poids faible.

 

P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7

0       0      0      0       0      0      0       0             -> 0x0 ou 0d0

 

P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7

0       0      0      0       0      0      1       0             -> 0x40 ou 0d64

 

P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7

0       0      0      0       0      0      0       1             -> 0x80 ou 0d128

 

J'avais décalé les valeurs dans mon explication d'ailleurs ......

 Regarde la version NI qui sera peut être plus compréhensible 🙂 http://digital.ni.com/public.nsf/allkb/9A2AF5E10E0C893386256FE8006807DF

As tu essayé de piloter toutes tes sorties par Max dans un premier temps pour vérifier le câblage de ton montage.

“En science, la phrase la plus excitante que l'on peut entendre, celle qui annonce des nouvelles découvertes, ce n'est pas "Eureka" mais c'est "drôle"
Isaac ASIMOV
Message 4 sur 7
3 477 Visites

Bonjour,

en ce qui concerne le cablage il est bon, il fonctionne avec une application de test donnée en .exe

Je suis donc certain que le souci vient du code...

 

J'ai essayé avec les adresses que vous m'avez donné, que je donne 0d64 ou que je tente d'accéder à la ligne 6 du port 0, en y mettant la valeur 0 ou 1, ça ne fonctionne toujours pas...

 

Que signifie piloter toutes les sorties par Max ?

 

Peut être devrais je déplacer le sujet dans une section scilab, comment faire ?

 

Merci dans tous les cas pour votr temps !

0 Compliments
Message 5 sur 7
3 453 Visites

Quels idiots !

Après votre message nous avions utilisé 0d128 comme instruction à donner (nous étions trop bloqués sur l'info que vous donniez) en essayant par culot cet après midi nous avons juste donné 128 sans le préfixe 0d et là ça a marché, vos conseils étaient bons il fallait juste envoyer 2^6 pour accéder à la ligne 6 et 2^7 pour accéder à la ligne 7 !

 

Merci à vous,

On planchait dessus depuis un moment et on a même pas pensé à ça...

Bref, c'est la bonne nouvelle de la journée !

0 Compliments
Message 6 sur 7
3 408 Visites

Ah oui, excusez de la syntaxe 🙂 A force de travailler avec des personnes de divers langages, j'ai pris l'habitude de mettre un suffixe 0d pour décimal et 0x pour hexadécimal en entrée de mes valeurs, en considérant que la personne l'enlevait au moment de l'utilisation......

 

A force de travailler dans un environnement donné, on prend de mauvaise habitude.


Ta dernière compréhension est la bonne 😉 heureux que tu sois débloqué, bon courage pour la suite.

“En science, la phrase la plus excitante que l'on peut entendre, celle qui annonce des nouvelles découvertes, ce n'est pas "Eureka" mais c'est "drôle"
Isaac ASIMOV
0 Compliments
Message 7 sur 7
3 406 Visites