Discussions au sujet de NI LabVIEW

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

Probléme de communication trame RS232

Résolu !
Accéder à la solution

Bonjour la communautés,

 

je viens vers vous car je rencontre un souci avec un projet qui utilise une communication RS232.

 

Le but de mon projet est de communiquer avec une carte qu'on m'a fournis en RS232. Le but est de transmettre des instructions à cette carte pour générer des PWM.

 

Voici une trame d'exemple que j'ai repris du document du fournisseur pour générer une PWM à 75%. J'ai copié cette trame pour essayer dans un premier temps de communiquer avec la carte.

exemple_trame.png

 

 

 

 

 

 

0x56 0x57 0x58 0x05 0x0C 0x00 0x03 0xFF 0x5F 0x72

 

Pour débuter mes essais j'ai conçu ce Vi (qui se trouve aussi en pièce jointe)

 

Programe_RS232.png

Lors de mes essai j'ai également installé un sniffer de réseau RS232, Serial Port Monitor qui m'a permis de voir que j'envoi bien ma trame.

Application_2.png

 

(La partie en violet est la trame que je reçois de la carte et celle en marron c'est ce que j'essaye d'envoyer)

La différence que je dois est que ma donnée se trouve dans la partie DATA (Chars) (Vert) alors que normalement elle devrait se trouver dans DATA(Rouge) ?

 

Est ce que j'ai fait une erreur dans mon programme ?

 

Pouvez vous m'aider s'il vous plait.

 

Cordialement.

 

Baba59

 

0 Compliments
Message 1 sur 11
4 800 Visites

Bonjour Baba59,

j'ai deux remarques à faire, deux choses qui m'interpellent dans ton Vi.

Tu commences par une lecture du port série! Je suis étonné, en général, les devices répondent à des commandes ou demandes qui leur sont préalablement envoyées, et renvoyent ensuit des données ou des confirmations d'actions réalisées (config etc...).

N'ayant pas le datasheet de ton équipement, difficile de se prononcer sur l'utilité de la lecture en première boucle.

Seconde remarque, tu envoyes à ton équipement une chaine de caractère reprenant les 0x, mais je pense qu'il ne sont là que pour indiquer dans le datasheet que les valeurs sont en hexadécimal, et qu'il faut en tenir compte pour envoyer tes commandes; si tu envoyes ta chaine de caractère ainsi, je ne suis pas certain qu'elle soit bien interprétée.
Une dernière remarque, il est bon, dans la boucle, de vider les buffers entrée/sortie pour éviter des "restes" qui pourraient parasiter les commandes/données suivantes!

Message 2 sur 11
4 781 Visites

En premier lieu 0x de devrait pas être inclus dans le message. Ensuite tu peux essayer ceci: fait un clic droit sur ton contrôle buffer d'écriture et sélectionne "hex display" tu verras ainsi ce que tu envois à ta carte (beaucoup plus que 10 bytes). Maintenant, toujours en mode hax display écris 5657 5805 0C00 03FF 5F72 (l'espacement entre les paquets de fait automatiquement) et vérifie si tu obtiends le résultat prévu.

 

Si tu vas dans propriétés -> apparence du contrôle buffer d'écriture coche "display style visible" ce sera plus évident que l'affichage est en mode hexadécimal.

 

Ben64

 

 

Message 3 sur 11
4 768 Visites

Bonjour PhilB,

 

je découvre la communication RS232 avec Labview donc il est certainement probable que mon programme présente des erreurs.

 

Je tiens compte de vos remarques pour améliorer mon code. Afin de répondre à votre première remarque je voulais commencer par une lecture du port série car lors de l'allumage la carte envoi un message sur le réseau RS232. Je voulais juste faire un essai si la carte était allumé et que j'avais bien configurer ma communication.

 

Pour la seconde remarque j'ai effectué un essai en hexa avec mon logiciel de test de communication RS232. Et j'ai bien vus que la carte répondait à ma commande. Donc j'ai pu envoyer la trame suivant :

 

0x56 0x57 0x58 0x05 0x0C 0x00 0x03 0xFD 0x19 0x2A

 

Pour pouvoir communiquer avec ma carte il faudrait que je transforme ceci en trame (hexadécimal). Pour l'envoyer comme ceci :

 

 essai_Monitor.png

 

Bonjour Ben,

J'ai fais cet essai également mais cela ne fonctionne pas. Il faut vraiment que la trame correspondent à l'image ci-dessus.

Sur Labview je sais qu'on peut écrire en Hexa à travers une chaîne de caractère. Mais cela correspond pas à ce que je souhaite auriez vous une idée de ce que je devrais utiliser ? 

 

Merci d'avance.

 

Cordialement.

 

Baba59

0 Compliments
Message 4 sur 11
4 760 Visites
Solution
Accepté par Baba59

@Baba59 wrote:

Pour pouvoir communiquer avec ma carte il faudrait que je transforme ceci en trame (hexadécimal). Pour l'envoyer comme ceci :

 

 essai_Monitor.png

 

Bonjour Ben,

J'ai fais cet essai également mais cela ne fonctionne pas. Il faut vraiment que la trame correspondent à l'image ci-dessus.

Sur Labview je sais qu'on peut écrire en Hexa à travers une chaîne de caractère. Mais cela correspond pas à ce que je souhaite auriez vous une idée de ce que je devrais utiliser ? 

 


Je ne vois pas de différence entre ma méthode et ce que tu montres dans ton image.

hex command display.png

C'est regroupé en Word au lieu d'être en Byte mais ce n'est que l'affichage, ça ne change pas ce qui est envoyé à la carte.

 

Ben64

Message 5 sur 11
4 749 Visites

maiiiiis, Baba59, ils sont un peu petits tes extraits d'écran, j'arrive pas à lire avec mes vieux yeux Smiley triste
Ben64 a raison, ça devrait fonctionner avec ce qu'il te conseille Smiley tirant la langue
Et n'oublie pas les vidanges de buffers, c'est souvent une source de soucis quand on ne le fait pas!!

Message 6 sur 11
4 739 Visites

Quel est le fabricant et le modèle de la carte que tu utilises?

 

Ben64

Message 7 sur 11
4 731 Visites

je confirme, ce serait bien de partager ces infos, ou un lien vers le datasheet!!
plus on en sait, mieux on peut t'aider 😉

Message 8 sur 11
4 725 Visites

Bonjour à vous,

 

Premièrement merci pour votre aide et désolé pour le manque d'information mais je suis assez limité aux niveau information a partager je suis un peu pied et poing lié.

 

Néanmoins, j'ai fais un essai avec les informations que vous m'avez fournis et cela fonctionne correctement. J'arrive à envoyer des trames fixe à ma carte, maintenant je souhaiterais faire varier ma PWM avec une commande numérique.

 

Donc je suis partie de ce principe.

 

Programe_RS232.png

Mais je ne sais pas comment je peux faire pour rassembler mes chaîne car la concaténation me donne pas le résultat ressemblant à ce que je souhaite. Auriez vous une idée ?

 

Cordialement.

 

Baba59 

0 Compliments
Message 9 sur 11
4 699 Visites

Salut Baba59,

on avance, c'est bien 🙂

On n'a pas d'info sur la chaine de commande que tu envoies à ton équipement, difficile de se prononcer sur une éventuelle erreur à ce niveau 😞

J'ai vu que tu as suivis mes conseils de vider les buffers, mais je pense que le Vi que tu utilises pour ça ne convient pas, je pense que CLR supprime les buffers mais ne les vide pas.
Le Vi a utiliser est Flush Buffers, une image vaut mieux qu'un long discours 😉

Message 10 sur 11
4 696 Visites