Discussions au sujet de NI LabVIEW

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

Problème de communication (RS232)

Bonjour,

 

Actuellement en stage dans le cadre de mon DUT, je rencontre un problème lorsque j’essaye de communiquer avec un capteur. Je possède les programmes qui permettent de communiquer avec mon appareil (sous format C) mais j’ai bien peur que lorsque je passe les fonctions sous labview, tout ne se passe pas correctement.

 

Mon PC est connecté via une liaison RS232 à mon capteur, les paramètres du port sont les suivants : NbBit = 8; NbStop = 1; Parite = 0;Vitesse = 300bauds. Il n’y a pas de contrôle de flux matériel, c’est une liaison à 3fils (RxD/TxD/GND). Ensuite je lui demande (via la fonction VISA write) de faire une action. D’après le programme je suis censé lui envoyer une commande de la forme : €FMMAXIBE\r\0. Toujours d’après le programme, j’envoie chaque octet à la suite. J’attends enfin que le buffer de réception se remplisse, ce qui n’arrive jamais…

 

N’étant que novice sur LabVIEW et débutant en C, j’essaye de comprendre là où la communication ne passe pas. J’utilise HyperTerminal pour vérifier que mon port est fonctionnel, et lorsque j’envoie une commande sur le port, j’ai un retour du capteur (hallelujah !). Le HIC c’est que j’ai beau lui envoyer tout un tas de commande fausse, celui-ci me répond toujours la même chose… Jusqu’à la j’ose espérer que la commande que je lui envoi ne correspond pas à ses attentes.

 

Toujours au vue du C, j’ai l’impression que c’est une API windows qui gère l’initialisation etc du port COM, comment cela se passe sous LabVIEW ? Sachant que je n’ai RIEN sur le buffer en sortie avec LabVIEW et que j’ai quelque chose sur HyperTerminal, je me demande si le problème ne viendrait pas de là (même si ce que j’ai sur HT est complètement faux, j’aimerais bien avoir la même chose avec LabVIEW pour être sûr que le problème vient de mes commandes et pas de ma com).

 

Enfin si quelqu’un qui est pro-C pouvait me dire si la commande que je lui envoi correspond à ce que le code présente (pas évident les pointeurs et l’allocation mémoire malheureusement pour moi...), ça ne serait qu’un plus appréciable !

 

Ne pouvant fournir un VI pour le moment (mauvais PC), j'utilise les fonctions basiques en VISA (write et read) pour procéder à l'écriture/lecture des données sur le port COM.

 

Merci !

0 Compliments
Message 1 sur 4
3 477 Visites

Salut Bäpîste,

 

Effectivement, l'initialisation d'un port COM est évidemment très importante... L'envoi d'un caractère via VISA Write ne va pas se faire correctement sans handshake entre les 2 terminaux censés communiquer... De fait, il est nécessaire, avant de lire ou d'écrire quoique ce soit sur le port, d'ouvrir le port via un "VISA Configure Serial Port".

 

Par ailleurs, NI a réalisé quelques exemples intéressants qui pourraient t'aider, ils se trouvent (normalement) sur ton ordi dans le
C:\Program Files\National Instruments\LabVIEW 20xx (selon la version de LabVIEW que tu utilises)\examples\Instrument IO\Serial\Serial.lvproj

 

Je ne sais pas si ça peut t'aider. Le mieux serait quand même d'avoir le .vi pour voir où est-ce que ça pourrait coincer...

Bilsix.
0 Compliments
Message 2 sur 4
3 440 Visites

Bonjour Bilsix,

 

J'avais bien fait tout le protocole nécessaire pour la communication série, mon problème provenait du fait que par défaut, quand on rajoute \r\0 à la main, labview l'interprète comme \\r\\00. Ce qui fait que mon pauvre capteur comprenait pas les trames que je lui disais !

 

Tout fonctionne correctement à présent (et pour l'instant).

 

Du coup j'en profite pour poser une question comme ça, sachant que mon capteur parle avec son protocole propre, y a t-il moyen de le normaliser (en SCPI)? J'imagine que non, ou en tout cas il faudrait faire une équivalence commande propre/SCPI qui rajouterais une couche supplémentaire (impliquant des erreurs en plus etc), mais dans les faits, est-ce possible ?

 

 

Bat'.

0 Compliments
Message 3 sur 4
3 431 Visites

Si tu souhaites mettres à la main dans une trame\r\0, il te suffit de faire clic droit sur ta commande texte, propriété d'affichage, affichage code oblique.



http://zone.ni.com/reference/fr-XX/help/371361L-0114/lvhowto/backslash_codes_display/

 

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
0 Compliments
Message 4 sur 4
3 425 Visites