le 01-20-2014 04:20 AM
Bonjour,
Je suis actuellement étudiante et débutante en LabView, mais je dois effectuer un Checksum (je suis partie sur le principe du OU exclusif), qui doit tenir sur 1 seul octet, et l'ajouter à ma trame.
J'ai essayé plusieurs choses, par exemple la fonction "Nombre en chaîne décimale", le problème dans ce cas est que si mon checksum est par exemple 26, il envera le caractère 2 et le caractère 6, soit 2 octets.
De même, j'ai utilisé la fonction "adapter type" mais j'avoue ne pas savoir l'utiliser puisque je ne vois pas quoi mettre en entrée "type" justement.. Et que si je ne la relie pas, cela envois 3 octets. J'ai repéré un sujet similaire qui l'utilise mais qui ne dit pas comment (Post Adapter Type).
En vous remerciant d'avance, je vous joins mon sous-vi Checksum
Résolu ! Accéder à la solution.
le 01-20-2014 04:41 AM
Bonjour,
Considérant que votre calcul du CRC est correct, nous sommes d'accord que c'est la conversion du résultat sous la forme d'un caractère chaine qui vous gêne.
Il faut effectivement utiliser la fonction "adapter type", qui n'a pas besoin d'entrée Type puisqu'elle utilise le type Cjaine par défaut.
En revanche, si vous ne voulez n'avoir qu'un seul octet, il faut que votre donnée soit codée en U8 avant. Ici vous avez un I32, vous devriez donc avoir 4 octets après conversion (et non 3 comme expliqué dans votre post)!
Cordialement,
Olivier L. | Certified LabVIEW Developer
le 01-20-2014 04:49 AM
Bonjour Olivier,
je laisse ta réponse "en premier plan" ...
mais j'ai passé 10 min sur cette question ... alors je place "aussi" (trop bête d'avoir fait ça pour rien )
C'est en fait la même chose que ce que tu as dit.
le 01-20-2014 09:41 AM
Rebonjour;
Merci beaucoup à vous deux, c'était effectivement ce qu'il me fallait.
Ci-joint ma nouvelle version, ça pourra peut être servir à quelqu'un !
01-22-2014 05:11 AM - modifié 01-22-2014 05:14 AM
Pourquoi utiliser une fonction "Index_Array" cablée sur le Terminal d'Itération ... et pas un Tunnel d'entrée indexé ?
(comme repris dans l'image 2 messages plus haut)
Vos 2 variables locales sont "flottantes".
En vertu du dataflow, rien ne vous permet d'affirmer que cette initialisation sera exécutée avant le reste du code.
avec une constante U8 (et pas I32) vous éliminez le point de coercition.
Que pensez-vous de ceci :
le 01-27-2014 03:24 AM
Bonjour,
J'avoue que tout ce qui concerne l'indexation je n'y connais pas grand chose, et que j'ai coder ça avec mon idée en C en tête.
Si je comprends bien le tunnel indexé va permettre d'avancer pas à pas dans mon tableau ?
En revanche en ce qui concerne les variables flottantes je n'ai pas tout compris...
Désolée de poser ce genre de question apparament basiques mais j'avoue être un peu perdue dés qu'on rentre dans ce genre de détails.
01-27-2014 04:01 AM - modifié 01-27-2014 04:05 AM
dans ce genre de détails ....
my God ! Ce ne sont pas des détails !
Vous touchez là aux fondements de Labview
"l'indexation" avec LV est une chose très puissante.
oui ... en entrée l'indexation vous permet de "prendre" les éléments d'un Tableau un par un.
et en sortie ... l'indexation va vous permettre de "re-construire" un Tableau.
variables flottantes.
Le principe "de base" de LV est le "flux de données" ...
ça veut dire quoi ?
ça veut dire que dans LV, un code s'exécute "en suivant la progression les données".
Dès qu'une fonction, ou quoi que ce soit, dispose à ses entrées des données nécessaires, cette chose est susceptible de s'excécuter.
Cette chose va-t-elle s'exécuter immédiatement ? (si elle dispose des données nécessaires à ses entrées)
Là ... c'est LV qui décide ... qui répartit le temps processeur entre les "modules qui sont en état d'être exécutés".
Que se passe-t-il avec votre code ?
a) les variables locales ont les données nécessaires à leurs entrées pour que leur initialisation s'exécute.
mais en même temps ...
b) la boucle For a "aussi" ce dont elle a besoin à ses entrées pour s'exécuter.
Qui va s'éxécuter en premier ... "a" ou "b" ... personne ne peut le dire !
Pourquoi ?? ... parceque entre "a" et "b" il n'y a pas "de lien flux de données" ...
"a" ne dépend pas de "b" (et l'inverse) ... "a" et "b" sont indépendants.
et alors ?
et alors ... votre boucle For peut très bien s'exécuter avant l'initialisation de vos variables
LV peut très bien exécuter l'init des variables locales en fin d'exécution (cela est possible) .
Solution ?
Utiliser une Structure Séquence pour établir un "lien de données" entre l'initialisation des variables locales et le reste du code
De cette façon, on sera certain que ces variables seront initialisées en premier.
Désolée de poser ce genre de question
faut pas, allez-y, posez ...
le 01-27-2014 04:50 AM
Rebonjour !
On ne pouvait pas faire plus clair ^^. Effectivement, c'est bien plus optimisé comme ça.
Mais cela me fait poser une autre question du coup. J'ai une boucle while que je veux infinie jusqu'à un arrêt d'urgence, qui enverra une trame d'arrêt d'urgence au robot (via une liaison série RS232, pour la petite histoire). Dés qu'il y aura un appuis dessus il sortira, ou bien il peut y avoir des cas où il ne sortira pas de la boucle tout de suite ?
01-27-2014 05:03 AM - modifié 01-27-2014 05:05 AM
Une While infinie ?
mis à part "l'arrêt d'urgence" ... vous la soppez comment cette While ? ...
ça tourne jusqu'à ce que le PC tombe en panne ? (je taquine)
pour ce problème, il ya plusieurs solutions possibles ...
(si .. il y a moyen de "sortir tout de suite d'une While" ... avec une astuce en forme de Structure Event)
je reviens après votre réponse.
01-27-2014 06:19 AM - modifié 01-27-2014 06:21 AM
Je préfère avec le "Code Principal" en dehors de la Structure Event.
Pour "l'instantanéité" de l'arrêt d'urgence, c'est mieux.