From 04:00 PM CDT – 08:00 PM CDT (09:00 PM UTC – 01:00 AM UTC) Tuesday, April 16, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

Discussions au sujet de NI LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

Labview : Communication série avec un périphérique

Solved!
Go to solution

Bonjour,

 

Sous Labview, j'essaie de communiquer via un port série à un périphérique. En parallèle, j'essaie de recevoir et d'envoyer des données. Je voudrais me placer en mode écoute (Activer la réception sur ce port : Visa read) puis envoyer une commande (Visa write). De ce fait, en se plaçant en écoute avant l'envoie de la commande, je suis sûr de recevoir la réponse du périphérique.

 

Je veux donc envoyer un caractère tout en écoutant sur le même port com la réponse de mon périphérique (J'ai déjà un doute à ce sujet. Avec un port série, on peut lire et écrire en même temps ? )

 

Mon problème est le suivant : En lançant ce programme sous Labview, il se place en écoute mais n'envoie pas le caractère de commande (montage en parallèle). Après le timeout de l'écoute (Visa read), le programme écrit bien le caractère (Visa write) comme un fontionnement série.

 

Comment réaliser des tâches multiples en parallèle sur LabView ? Auriez-vous un exemple ou plus d'information à ce sujet ?

 

Merci,

 

Jérémy

 

0 Kudos
Message 1 of 6
(5,935 Views)

bonjour,

pouvez vous postez le code que vous avez testé.

Cordialement
L.MICOU
0 Kudos
Message 2 of 6
(5,926 Views)

Bonjour Jérémy,

 

Je ne suis pas un spécialiste, mais il me semble impossible de lire et écrire en même temps sur le même UART. J'ai déjà entendu parler de DUART (qui combinent 2 UART sur une même puce), mais je n'ai pas plus d'info que ça là-dessus.

Ceci dit, est-il réellement nécessaire de lire et écrire en même temps à la milliseconde près sur le même port COM ?

Tu n'as pas à avoir peur de "rater" la réponse du périphérique : en réalité, le VISA Read lit un buffer ! C'est-à-dire qu'il lit les derniers octets qui sont arrivés sur le port, qui sont stockés dans une case mémoire de l'ordi, bien au chaud, en attendant d'être utilisé...

Je te propose d'essayer de d'abord écrire sur ton port grâce à VISA Write puis de lire la réponse grâce à VISA Read... Si j'ai bien compris ton problème, ça devrait marcher.
Si le buffer de lecture est trop petit à ton goût, tu peux en changer la tailler grâce à VISA Set I/O Buffer Size.

 

Bilsix.

Bilsix.
Message 3 of 6
(5,914 Views)

Bonjour,


je confirme le fait qu'un UART ne peut pas travailler en "parallèle".

Pour dialoguer avec un équipement, il faut envoyer une commande "Write" si besoin, pour que le produit te réponde.

Tu récupères ensuite la réponse avec un "Read".


Pour dimensionner le nombre de données à lire, plusieurs méthodes par la suite se présente à toi.
- Attendre un certain temps : Interruption de la lecture sur timeout

- Attendre un caractère de terminaison \A : 0xD par défaut.

- Lire un certain nombre d'octet : Utilisation du noeud de propriétés nbre de bytes sur la liaison fortmeent conseillé.

 


Si après une manipulation simple, tu ne relies pas de données, n'hésites pas à mettre une temporisation de 100 ms entre ta requête et ton écoute, il n'est pas rare d'avoir des équipements avec un temps de réponse de l'ordre de 50ms sur port série (spécification présente dans la documentation de l'équipement en général).


Bonne journée,


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 4 of 6
(5,893 Views)

Bonjour,

 

Merci pour vos réponses !

 

Problème résolu, je suis parti sur un write en série avec un read.

 

Bonne journée,

 

Jérémy

0 Kudos
Message 5 of 6
(5,870 Views)
Solution
Accepted by topic author Jeremy.T

Excellent !

N'hésite pas à passer le topic en "Résolu".

Bonne journée à toi également !

 

Bilsix.

Bilsix.
0 Kudos
Message 6 of 6
(5,867 Views)