From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, 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

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

Aide labview séparation de trame de donnée

Résolu !
Accéder à la solution

Bonjour,

Je vous explique premiérement le contexte.

Je travail en ce moment sur un projet qui comporte deux capteurs de températures et de sept capteurs de courant, ces deux fonctions sont gérés par un arduino. L'arduino envois toutes ses données via le port série du PC vers Labview.

 

Ma question est : J'aimerais faire en sorte de séparer des trames de données, je m'explique, ma température est envoyés sur le port série toutes les secondes, mais les données de mes capteurs sont envoyés qu'une seule fois, j'aimerais séparer une trame qui par example ressemblera à "A2.7B3.2C4.2D1.7E0" J'aimerais pouvoir séparer ses données, les stockés dans un tableau, et en fonction de la valeur, allumer des Leds(booléen).

 

Mon probléme est que dés que j'envoi les valeurs de mes capteurs de courant, mon graphique de température redescend et me fausse mon résultat.

J'aimerais séparer mes données et les identifier par les lettres présente devant chaque valeur.

 

Merci d'avance pour votre aide.

 

Bonne journée

 

PS: j'ai la possibilité de changer l'apparacence de mes trames de données dans mon code Arduino.

0 Compliments
Message 1 sur 10
6 537 Visites

Bonjour,

il est plus simple de vous dire où votre code ne marche pas et ce qu'il faut faire lorsque l'on a un code à regarder. pouvez vous mettre votre vi en pièce jointe.

Cordialement
L.MICOU
0 Compliments
Message 2 sur 10
6 532 Visites

Ce n'est qu'un début de programme, j'essaye des choses un peu dans tous les sens pour faire fonctionné chaque partie une par une et les reunir ensuite.

 

 

0 Compliments
Message 3 sur 10
6 530 Visites

Salut Bentox.

 

Effectivement, tu as essayé un peu de tout dans ton VI...

Ce que je peux te proposer, si j'ai bien compris ce que tu souhaitais faire, c'est de passer par un truc assez simple.

Dans un premier temps, avant d'entrer dans la boucle, initialiser du port COM (avec le VI VISA que tu as bien utilisé) et ouvrir le port COM avec le VI "VISA Open".

Après, tu peux utiliser une machine à état, ou une structure séquence empilée comme tu l'as fait avec dans l'ordre :

Etat 1 : Lecture du Buffer VISA (avec le VI "VISA Read"), identification de la trame reçue (qu'est ce qui différentie les trames des capteurs courant des trames de température ? Le premier octet est différent ? Le nombre d'octet renvoyé ? Bref ici il faut réussir à savoir si la trame reçue est une trame d'un capteur courant ou une trame température...)

Une fois identifiée, tu peux mettre une variable Enum à la valeur que tu veux ("Courant" ou "T°" ou "None", par exemple) ou passer des booléens à True, bref quelque chose qui permettra de faire passer l'info d'identification à l'étape d'après.

Etat 2 : Intégrer une structure condition.

      2A/ : On a constaté que c'était une trame courant : stocker la trame dans un tableau et analyser la trame pour allumer les LEDs qu'il faut pour ton applic.

      2B/ : On a constaté que c'était une trame température : intégrer la trame dans un graph déroulant.

      2C/ : On a constaté que c'était ni l'une ni l'autre, terminer le test / recommencer le test / continuer le test en incrémentant un compteur d'erreur, selon ce que tu as envie)

 

Recommencer le test While Stop != True.

Bilsix.
0 Compliments
Message 4 sur 10
6 489 Visites

Merci de ta réponse, vu que j'etais bloqué aux niveaux des identifications de trames j'ai un peux modifié le tout

Pour te repondre, je ne sais pas si identifier par nombre d'octet est bien bon car mes valeurs de tension de mes capteurs de courant peuvent varier donc le nombre d'octet peux aussi varier.

Je pense pouvoir simplifier le problème du coté de mon arduino en fesant en sorte de ne pas recevoir les deux simultanéments, récuperer mes trames de capteur de courant en premier et ensuite enchainé sur mes valeur de températures. (pour infos la trame recu sera "A2,5 B2,7 C2,1 D1,7 E1,9 F2,3 G2,9" , j'ai effectué mes séparations par des espaces), je cherche maintenant a les listés dans un tableau et aussi a supprimer la lettre qui est devant chaque valeur.

 

Merci de ton aide.

0 Compliments
Message 5 sur 10
6 481 Visites

Merci de ta réponse, vu que j'etais bloqué aux niveaux des identifications de trames j'ai un peux modifié le tout

Pour te repondre, je ne sais pas si identifier par nombre d'octet est bien bon car mes valeurs de tension de mes capteurs de courant peuvent varier donc le nombre d'octet peux aussi varier.

Je pense pouvoir simplifier le problème du coté de mon arduino en fesant en sorte de ne pas recevoir les deux simultanéments, récuperer mes trames de capteur de courant en premier et ensuite enchainé sur mes valeur de températures. (pour infos la trame recu sera "A2,5 B2,7 C2,1 D1,7 E1,9 F2,3 G2,9" , j'ai effectué mes séparations par des espaces), je cherche maintenant a les listés dans un tableau et aussi a supprimer la lettre qui est devant chaque valeur.

 

Merci de ton aide.

Tout télécharger
0 Compliments
Message 6 sur 10
6 481 Visites
Solution
Accepté par l'auteur du sujet Bentox

Bentox a écrit :

. (pour infos la trame recu sera "A2,5 B2,7 C2,1 D1,7 E1,9 F2,3 G2,9" , j'ai effectué mes séparations par des espaces), je cherche maintenant a les listés dans un tableau et aussi a supprimer la lettre qui est devant chaque valeur.

 


A2,5 B2,7 C2,1 D1,7 E1,9 F2,3 G2,9 tu vas avoir plusieurs problèmes:

  1. le séparateur décimal "," : sur un PC français tu peux avoir "," ou "." sur un anglais "."
  2. tu as un espace entre les données : c'est bien pour transformer la chaîne en un tableau 1D, avec séparateur de colonne "espace"
  3. mais après il faut boucler pour supprimer le premier caractère

avec ton acien format A2.7B3.2C4.2D1.7E0" >> tu avais directement la fonction match pattern (PS c'est un snippet VI)

 

string.png

banniere Luc Livre NXG Champion.png

Luc Desruelle | Mon profil | Mon blog LabVIEW | Auteur livre LabVIEW : Programmation et applications - G Web
Certified LabVIEW Architect (CLA) & Certified TestStand Developper (CTD) | LabVIEW Champion

MESULOG - LinkedIn site | NERYS - NERYS Group
| directeur CEO MESULOG
| CODIR - NERYS group

0 Compliments
Message 7 sur 10
6 460 Visites

PS le code est pas directement fonctionel, il faut supprimer le dernier élément du tableau.

banniere Luc Livre NXG Champion.png

Luc Desruelle | Mon profil | Mon blog LabVIEW | Auteur livre LabVIEW : Programmation et applications - G Web
Certified LabVIEW Architect (CLA) & Certified TestStand Developper (CTD) | LabVIEW Champion

MESULOG - LinkedIn site | NERYS - NERYS Group
| directeur CEO MESULOG
| CODIR - NERYS group

0 Compliments
Message 8 sur 10
6 459 Visites

Merci a toi, je regarde les deux solutions, aux niveaux des séparateur de décimal, ce seront obligatoirement des points, je me suis tromper dans mon ecriture les séparateur sont des points et non des virgules.

 

Je ne comprend pas ce que tu veux dire par "mais après il faut boucler pour supprimer le premier caractère" 

et pour la fonction match pattern, je n'est pas plus de 7valeur de courant differentes donc pas besoin d'aller jusqu'a Z si je comprend bien ce diagramme

Message 9 sur 10
6 451 Visites

Bonjour, 

je fais un programme sur labview pour un envoyé des trame de vie avec le bus can mais a chaque je reçoit cet erreur 

///////////
/0/1:40_BN_DRV_CAN.vi - NI-CAN Action
(ncAction.vi)/0,000000/
/1/1:40_BN_DRV_Can_Continue_echange_TCP_CTRL.vi - 40_BN_DRV_Can_Continue_echange_TCP_CTRL.vi- Erreur_paramètre_ecritureL'erreur -1074388956 s'est produite à : 40_BN_DRV_Can_Continue_echange_TCP_CTRL.vi- Erreur_paramètre_ecriture

Raisons possibles :

NI-CAN : (Hex 0xBFF62024) Le handle d'objet (ObjHandle) n'est pas valide. Solutions : vérifiez que la fonction Open a réussi ; vérifiez que vous n'avez pas fermé le handle dans un autre thread d'exécution (par exemple, avec ncReset)./0,000000/--

pouvez vous m'aide merci

0 Compliments
Message 10 sur 10
752 Visites