Appel sous vi, fermeture du sous vi
Bonjour à tous,
J'utilise une strucutre évènementielle qui me permet d'appeler la face avant d'un sous vi à l'appui du bouton correspondant. Notamment, grâce à configuration du noeud du sous vi.
Cela fonctionne très bien, mais lorsque je ferme mon sous vi, mon vi principal (menu) reste bloqué. Ce que je ne souhaite pas car je souhaite laisser la possibilité de revenir au menu et changer de mode d'execution.
Pourriez-vous m'aider à résoudre ce problème s'il vous plaît ?
Mon menu se trouve dans le vi "Main"
Cordialement
Résolu !
Accéder à la solution.
Pièces jointes :
PASTEC 1.0.zip 2288 KB
Bonjour Nathan et Titou,
J'observe le même comportement que Titou.
Le sous-vi relatif au mode manuel ne termine par son exécution quand on appuie sur stop et ne rend pas la main au vi main (ce qui bloque les menus).
Dans une sous-vi du Mode Manuel, la structure événement permettant de régler la rampe et le palier à un timeout infini. Si Stop passe à vrai, la variable sera lue à la prochaine itération de la boucle, c'est-à-dire au prochain événement.
Cordialement,
Isabelle
Isabelle G.
National Instruments France
#adMrkt{text-align: center;font-size:11px; font-weight: bold;} #adMrkt a {text-decoration: none;} #adMrkt a:hover{font-size: 9px;} #adMrkt a span{display: none;} #adMrkt a:hover span{display: block;}
Été de LabVIEW 2014
12 présentations en ligne, du 30 juin au 18 juillet
Similar Messages
-
Appel de programmes en C sous labView
Bonjour,
Je souhaiterai savoir s'il est possible d'appeler sous LabView un programme en C afin de lui passer des paramètres (comme des arguments d'une fonction) et que ce dernier nous renvoie des valeurs récupérables sous LabView?
Pour être plus clair, je pourrai avoir un programme C qui calcul la résolution d'une équation du second degré ax2+bx+c, je lui passe les paramètres a,b et c sous LabView et le programme C me retourne les solutions que je récupére sous LabView
En espérant m'être bien fait comprendre, je vous remercieBonjour,
C'est possible en utilisant les Code Interface Node (CIN).
Mais je n'ai jamais trouve cela tres simple a mettre en place ni tres propre.
Je vous invite a lire ce tutoriel sur la mise en place d'un CIN : http://zone.ni.com/devzone/cda/tut/p/id/4161 vous devrez y trouver les donnees necessaires pour realiser ce que vous souhaitez.
Cordialement,
Da Helmut -
Bonjour tout l'monde.
Voilà mon problème :
Je souhaite appeler un sous-Vi à l'aide de la méthode "ExécVI". Cela fonctionne parfaitement jusqu'a ce que j'appelle un sous-Vi contenant un autre sous-Vi appelé également à l'aide de cette méthode.
Mon programme "Supervision.vi" appel un premier sous-VI ("Open_csv_files_UV.vi") qui lui même doit en appeler un autre. C'est dans ce cas de figure qu'une erreur remonte (cf. PJ).
Dans un premier temps j'ai pensé qu'il était impossible de cumuler un appel de référence dans un autre appel de référence du genre :
Supersion.vi
-> Appel "Sous-VI_1.vi"
-> Appel "Sous-VI_2.vi"
->Fin "Sous-VI_2.vi"
-> Fin "Sous-VI_1.vi"
Supervision.vi
Mais après des test dans un autre programme je me rend compte que c'est possible de le faire. Pourquoi dans mon cas cela ne fonctionne donc pas ? Est-ce lié aux valeurs "AttendreLaFin" ou "Suppr ref. auto" de la méthode "ExécVI" (j'ai testé toutes les combinaisons possible) ? Ou bien dans les propriétés du VI (Exécution) ?
Si quelqu'un à une idée sur le sujet ou à déjà rencontré le problème je suis preneur.
Cordialement.
Résolu !
Accéder à la solution.
Pièces jointes :
Erreur_1000.PNG 13 KBBonjour Dei_91,
L'erreur que tu rencontres est expliqué ici: http://digital.ni.com/public.nsf/allkb/790AC75B07D971ED86256C53007BDCE9?OpenDocument
Tu peux trouver un exemple ici: http://www.ni.com/example/26384/en/
Ton code ressemble à ça ?
Cordialement,
Benoit S. - Field Sales Engineer
Certified LabVIEW Developer
Certified TestStand Developer
National Instruments France
#adMrkt{text-align: center;font-size:11px; font-weight: bold;} #adMrkt a {text-decoration: none;} #adMrkt a:hover{font-size: 9px;} #adMrkt a span{display: none;} #adMrkt a:hover span{display: block;}
Été de LabVIEW 2014
12 présentations en ligne, du 30 juin au 18 juillet -
Mesures simultanées fréquences (labview 2010)
Bonjour,
je développe un programme dans le but de faire de l'analyse vibratoire. J'utilise le matériel suivant:
-châssis NI-cDaQ 9188
-une carte NI 9234 pour l'acquisition des données provenant des accéléromètres (4 accéléro)
-une carte NI 9401 pour la mesure de fréquences (2 fréquences). Je récupère mes fréquences à l'aide de compteurs.
Pour l'acquisition des données provenant des accéléro, aucun soucis.
En revanche, pour les mesures des fréquences, ça va moins bien.
J'ai testé 2 solutions:
-la première, je crée 2 tâches dans le MAX que j'appelle sous labview (cf. vib 5.jpg), dans ce cas, j'ai le message d'erreur suivant pour la 2ème tâche: "Le périphérique ne peut pas être configuré en entrée ou en sortie car des lignes ou des terminaux qui lui sont connectés sont utilisés par une autre tâche ou une autre connexion. Cette opération nécessite que toutes les lignes et tous les terminaux soient temporairement réservés à la communication, ce qui interfère avec l'autre tâche ou connexion."
-la seconde, je crée les tâches directement dans labview (cf. vib 5.jpg), ce qui semble fonctionner. Mais dans ce cas-ci, c'est à l'analyse des résultats que je constate le problème.
je voudrais faire un enregistrement simultané des données provenant des accéléro, et de mes 2 fréquences. L'enregistrement des données provenant des accéléro prend en moyenne 2 secondes. Je voudrais donc pour mes fréquences (NH et NL) enregistrer 200 points, répartis sur 2 secondes pour que l'analyse soit cohérente. Or, j'enregistre bien mes 200 points, mais a priori très rapidement, ce qui fait que lorsque je trace mes courbes, j'observe des paliers et non une évolution continue. De plus, je suppose que les acquisitions de mes 2 fréquences se font successivement.
Y a-t'il une solution pour que je puisse faire tous ces enregistrements simultanément?
En vous remerciant d'avance pour votre aide.
Galega
Pièces jointes :
vib 4.jpg 330 KB
vib 5.jpg 266 KBBonjour,
et merci pour votre réponse.
j'ai fait le test que vous m'avez suggéré, mais malheureusement ça ne fonctionne pas.
De plus je n'arrive toujours pas à obtenir une acquisition continue de mes fréquences, il me manque des valeurs (cf pièce jointe).
En espérant trouver rapidement la solution.
Merci
Pièces jointes :
courbe fréquence.jpg 33 KB -
Application builder labview 2010
Bonjour
J’utilise l'application builder pour créer un fichier exécutable,
la création se déroule normalement
à l'activation du fichier .exe de nombreux sous-vi et librairies ne sont pas chargés ou trouvés
j’ai déjà utilisé cette application sans problème sur des versions
précédentes de labview
y-a-t-il des chemins à déclarer pour que l’application builder puisse retrouver ses
sous-vi ou librairies utilisées ?
merciBonjour,
Il faut ajouter les fichiers que vous appellez (sous VIs, controles, classes, etc) dans la partie "Toujours inclus" de votre executable ainsi que de définir la destination de vos fichiers sources vers votre exécutable et non le dossier de support (tout dépend de la façon que vous appellez vos sous VIs, XControl, classes, etc).
Cordialement,
Da Helmut -
PDF: Ouvrir des liens hypertexte en local et non depuis un navigateur web
Bonjour,
J'ai inséré des liens dans un documents PDF qui dirigent mes utilisateurs vers des fichiers ou dossiers présents sur nos serveurs.
Mais lorsque mes utilisateurs cliquent sur les liens en question, le navigateur web s'ouvre et n'affiche donc pas les documents ciblés.
Est-il possible de changer le programme mis par défaut pour ouvrir les liens hypertext depuis un pdf svp?
Cordialement,La question tient dans le type d'appel à la ressource : http:// vous enverra dans le navigateur et c'est le navigateur qui détermine ce qu'il fait des fichiers : s'il tente de les ouvrir ou s'il les télécharge… Cette question de protocole et d'URI scheme me dépasse un peu, malheureusement.
Quel type de fichiers souhaitez-vous transférer ?
Une des solutions sur lesquelles je suis tombé est l'utilisation d'un script php sur le serveur qu'on appellera sous la forme :
<a href="http://www.monserveur.com/download.php?file=example.pdf">Click here to download PDF</a> -
Appelle dll créée avec LabView 8.2 sous VB6 (Booleen)
Bonjour,
Je développe un programme sous LabView8.2 pour créer une dll qui sera appelée par VB6. Lorsque que je mets un booleen VB6 me renvoie le message d'erreur "erreur de chargement de la DLL".
Y a t il une configuration à réaliser sous VB ou LabView ?
Merci de votre aideBonjour,
Voici le programme LabView l'erreur arrive lorsque je veux sélectionner la Dll dans le menu Projet\référence de VB6
Ci joint le vi et le projet qui est simple car c'est un exemple de j'ai créé pour debuguer vu qu'avec un programme compliqué ça ne fonctionnait pas.
Merci de votre aide
Cordialement
Pièces jointes :
essai.vi 8 KB
essais.lvproj 8 KB -
Bonjour,
Actuellement en possesion du toolkit Sound and Vibration et LabView 2013, j'ai créé un sous VI avec la fonction Microphone pour calibrer les micros de mon banc acoustique, j'ai appelé se sous VI dans mon VI principal. On enregistre des données dans un fichier texte (sous VI).
Quand j'éxécute mon VI principal je n'obtient aucun résultat. aurai-je manqué une manipulation ?
Merci de votre aide.
PS : j'ai joint mon projet.
Pièces jointes :
Banc acoustique.zip 105 KBAu moment de construire ton application, tu peux choisir dans les options dans quel répertoire copier les sous-VI, comme sur ce screenshot :
Par défault, ils ne sont pas inclus "physiquement". En cochant l'option "set destination for all contained items", ils le seront.
Cordialement,
J.D.
French Labview beginner
N'oubliez pas de complimenter les bonnes réponses - Don't forget Kudos for good answers -
Appeler un sous VI sur demande
Bonjour,
Je voudrais réaliser un programme sous labview qui permet d'effectuer une acquisition de données, et appelle à la demande (sans rompre le Programme) un sous VI qui affiche un graphe de données et permet de le fermer (sans perdre les données).
Merci par avanceBonjour N_Eden,
Merci d'avoir posté sur le forum National Instruments.
Il y a plusieurs manières d'arriver à faire cela en LabVIEW, alors je te
propose une solution que je trouve élégante. Elle est basée sur les files
d'attente. De mon VI principal j'utilise une file d'attente pour transférer mes
données entre 2 boucles (une boucle d'acquisition et une boucle de traitement).
J'utilise cette file d'attente pour récupérer mes données dans mon sous-VI de
visualisation grâce à la fonction Aperçu du premier élément d'une file
d'attente. Ainsi je récupère l'élément sans le supprimer de ma file d'attente.
Pour bien te démontrer ce que je dis, dans mon VI principal je récupère le
nombre d'élément généré par ma boucle d'acquisition et le nombre d'élément reçu
dans ma boucle de traitement (ils doivent être égaux sinon c'est que je perds
des éléments ;-).
PS: j'ai codé un peu vite et je n'ai pas géré complétement les erreurs
Benjamin R.
R&D Software Development Manager
http://www.fluigent.com/
Pièces jointes :
N_Eden.zip 54 KB -
Appel dynamique sous VI en mode run time
Bonjour,
En mode developpement, dans le VI principal, je lance un sous-VI de façon dynamique en faisant appel au chemin complet du sous VI en question, pas de problème.
En mode RunTime (donc une fois le programme installé sur l'ordinateur cible), ou se trouve ce sous VI ? Je sais comment retrouvé le chemin de l'appli, mais je ne sais pas ou trouver le sous VI pour l'appel dynamique ... est-il dans une librairie ? est-il inclus dans l'exe ? comment le lancer ?
Merci d'avance.
Wilfried.
Résolu !
Accéder à la solution.Au moment de construire ton application, tu peux choisir dans les options dans quel répertoire copier les sous-VI, comme sur ce screenshot :
Par défault, ils ne sont pas inclus "physiquement". En cochant l'option "set destination for all contained items", ils le seront.
Cordialement,
J.D.
French Labview beginner
N'oubliez pas de complimenter les bonnes réponses - Don't forget Kudos for good answers -
Ne pas appeler la face avant d'un sous VI
Bonjour,
Lorsque j'execute une commande de T_Consigne à partir de mon VI principal (Cadencement_Maître_Esclave_bis), le sous VI "Ecriture_T_Consigne" est appelé le temps de l'execution.
Comment faire pour empêcher cet appel?
Ci-joint mon programme.
Cdt
Résolu !
Accéder à la solution.
Pièces jointes :
PASTEC 1.0.zip 273 KBVoici le sous-vi que tu peux utiliser.
Francis M | Voir mon profil
Certified LabVIEW Developer
Pièces jointes :
VGF_ex.vi 15 KB -
Bonjour
Je viens de finir un programme.
Le programme marche trés bien sur le pc de développement. Lorsque je crée mon exe, l'exe marche sur le pc de developpement.
Par contre lorsque je le met sur le pc du banc test qui n'as pas labview. Une erreur systeme apparait à un endroit précis.
La structure de mon programme est la suivante.
1 programme principale qui appele 6 sous vi avec des faces avant visibles ou non.
Il y en a 1 sur les 6 qui lancent un cycle de mesure, le cycle est composée d'un sous vi mesure puis d'un sous vi traitement mesure.
Donc mon programme principale lance le sous vi cycle de mesure ( pas de face avant visible)
Le vi cycle de mesure lance automatiquement le sous vi mesure (interface utilisateur)
Une fois que mesure est terminéee, le cycle de mesure lance le sous vi traitement ( interface utilisateur)
Et c'est sur cette interface qu'une erreur windows apparait systematiquement, des fois à l'ouverture du sous vi, des fois à la fermeture.(voir fichier joint)
Sinon tous le reste fonctionne correctement, mais c'est le seul ou il y plusieurs sous vi d'affiler sans repasser par le vi principale.
Merci de votre aide
Pièces jointes :
erreur windows.JPG 112 KBEn fait, j'ai compris. Il se trouve que dans les 2 VI il y a une boucle while infinie, donc quand je mets l'une dans l'autre, le programme ne quitte plus la boucle interne.
J'ai mis en pièce jointe le VI qui controle un moteur pas a pas. (le sous-VI de mon fichier principal)
Je cherche à pouvoir controler le moteur 1 non plus en cliquant sur le bouton comme cela est prévu dans ce fichier, mais automatiquement du moment qu'une valeur de consigne est entrée. Je souhaite également mettre une condition de fin à cette boucle (afin de résoudre le problème décrit précédemment) qui me permettrait de sortir de celle-ci quand la valeur de consigne (position) est atteinte par la moteur.
Cela fait un moment que je traine ca, avec que des problèmes, j'arrive à rien.
PS: ce VI n'a pas été concu par moi-même donc j'essaie de le modifié mais je ne compris pas tout le fonctionnement
Attachments:
LidarCrystalControl Go To a defined Position.vi 85 KB -
Erreur lors de la création d'un executable sous LabVIEW SP1
Bonjour,
Je travaille actuellement sur un projet relativement imposant sous LabVIEW 2010 SP1.
Le projet étant assez imposant,j'ai voulu en faire un exécutable.
J'ai alors la fenêtre suivante qui apparaît (voir piéce jointe):
"Une erreur est survenue lors de l'appel de l'éditeur des régles de construction. Veuillez vérifier si les VIs sont brisés dans le répertoire du gestionnaire correspondant."
Mon Vi fonctionne trés bien lorsque je l'éxecute, donc je ne comprends pas. De plus j'ai déja créer d'autres exécutables sans probléme jusqu'a présent.
Quelqu'un aurait-il une idée pour solutionner ce probleme?
Merci d'avance.
Résolu !
Accéder à la solution.
Pièces jointes :
erreur.JPG 11 KB@Ramses:
Je pense que Julien utilise une option du menu Outils (je ne sais plus son nom, et elle n'apparait pas sur mon PC car je n'ai pas l'application builder), qui permet de préparer son VI pour un exécutable. A ce moment, cela va créer automatiquement un projet avec une spécification de construction.
Cependant, je suis de l'avis de Ramses. Il est préférable de se créer son projet et de travailler dedans, puis de créer les spécifications de construction par la suite...
Et désolé, mais je n'ai pas d'explication à votre problème, à part éventuellement des dépendances particulières. Lorsque vous ouvrez votre VI, LabVIEW vous demande-t-il de charger des fichiers particuliers?
Cordialement
Olivier L. | Certified LabVIEW Developer -
Bonjour,
J'ai plusieurs questions concernant mon programme avec LabWindows CVI 9.0 et 4 cartes NI PCI 6229, sous Windows XP et dual core Intel 3GHz.
Je souhaite réaliser un programme qui réalise une boucle d’asservissement et également un contrôle et affichage sur des acquisitions. Je n’ai malheureusement pas le choix sur l’OS et je ne peux pas m’orienter sur une solution temps réel.
Pour cela, je souhaite réaliser
- une boucle qui gère l’asservissement (acquisition sur 20 entrées, calcul sur ces acquisitions, et génération sur 10 sorties, tout ceci en 10ms, c’est la BOUCLE CRITIQUE)
- une boucle pour le contrôle (simple contrôle sur ces acquisitions: comparaison à une valeur seuil, 10ms)
- une boucle pour l’affichage (affichage des résultats sur la face avant des contrôles OK ou non OK, toutes les 200ms)
Je souhaitais à la base utiliser 3 timers asynchrones de CVI, mais je me suis aperçu qu’on ne pouvait utiliser qu’un seul Timer asynchrone à la fois.
J’ai donc vu qu’il y avait une autre solution, le multithread en utilisant les thread pool. Cette solution m’intéresse, car je souhaiterai mettre la boucle critique dans 1 thread sur le 1er coeur, la boucle de contrôle dans un 2ème thread sur le 2ème coeur, et la boucle d’affichage dans un 3ème thread sur le 2ème coeur.
La boucle d’asservissement est la boucle critique et doit être de 10ms à +/- 2ms.
Les autres bouclent ne sont pas critiques et peuvent avoir un décalage de +/- 10ms, le but est de ne pas perdre de données et de contrôler toutes les acquisitions. Un affichage toute les 200ms suffit.
Voilà j’ai alors 2 questions :
- est-ce que mon approche (timers en multithread et diviser sur les 2 cœurs) convient pour mon application ?
- et comment mettre un timer classique dans un thread spécifique ? J’ai vu qu’il fallait utiliser «CmtScheduleThreadPoolFunction (int Pool_Handle, ThreadFunctionPtr Thread_Function, void *Thread_Function_Data, int *Thread_Function_ID)” Mais cette fonction appelle une fonction de type “CVICALLBACK FonctionThread(void *functionData)” et mon timer classique est de type “CVICALLBACK Timer_Classique (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)” Comment donc appeler un timer classique avec une fonction CmtScheduleThreadPoolFunction ? Faut-il procéder d’une autre manière ?
Je vous remercie de votre aide.
Cordialement,
Hédi.Bonjour,
L'approche multi-thread est en effet la bonne, dès qu'il faut séparer plusieurs tâches. Je vous invite à consulter cet article du Rebel Site, qui traite du multithread et constitue une référence en la matière. Attention, le multithread n'implique pas obligatoirement une gestion multicoeur. Il faut pour le mettre en oeuvre passer par l'API de Windows.
Est-il bien nécessaire de faire de du contrôle 10ms? (deuxième boucle) Au quel cas, je ne suis pas absolument sûr qu'il faille créer un thread séparé. Si cette tâche peut supporter un cadencement plus lent, il serait plus malin de venir la traiter dans le troisième thread.
Il serait intéressant d'utiliser une Thread Safe Queue pour faire circuler les données d'un thread à l'autre. Ce mécanisme permettra de ne pas perdre de données. D'autre part, vous pouvez alors installer une callback sur un nombre d'éléments dans la TSQ (Thread Safe Queue) et venir déclencher la callback associée à cette TSQ dès que 20 éléments sont présents pour piloter le troisième thread depuis le premier.
Dans cette configuration, il n'y a plus besoin que d'un timer, pour la partie temps critique - bien que sous Windows, on ne puisse pas garantir le déterminisme d'une boucle à 10ms - les autres thread étant 'esclave' du premier.
Cordialement,
.mrLeft{float:left} .mrInfo{border-left:solid 1px #989898;font-size:x-small;color:#989898}
Mathieu R.
CTD - Certified TestStand Developer / Développeur TestStand Certifié
CLAD - Certified LabVIEW Associate Developer -
Adobe Reader sous IE8 - Hyperlien vers une page ne fonctionne pas
Bonjour,
J'ai des PDF ouverts sous IE8 ( Acrobat Reader encaspsulé dans IE donc)
Ces derniers ont des liens hypertexte vers d'autres PDF sur des pages précises dans le document appelé.
Hors ces derniers s'ouvrent en début de document et non à la page demandée.
Sous Reader directement, tous fonctionne parfaitement
Et sous Internet Explorer 6, cela fonctionne également.
Si quelqu'un a une astuce pour que cela fonctionne également sous IE8
Cordialement.Bonjour,
A priori ça ressemble plutôt à un "bug humain".
Reste à savoir quelle manip fait cet utilisateur et que ne font pas les autres…
Maybe you are looking for
-
New iMac, new HP all-in-one - will they be compatible?
I am new to Macs, and loaded Leopard as soon as I got it. Immediately after, I loaded the software for my brand new HP C4280 all-in-one. All seems fine except the scanner - I get a message indicating that the USB is not connected, or a message that n
-
Converting XML as table to XML as string
All, I am successfully able to convert XML table from Internal Table. Now, I would like to convert this XML Table into XML string. Any help on this will be appreciated. Regards, Salil Moderator message: please search for available information/documen
-
File to idoc scenario error - not working yet :(
Hello! I'm trying to make changes in business partner record in CRM using idoc CRMXIF_PARTNER_SAVE_M01 I have an error 56 EDI: Partner profile not available. In Control record in we02 transaction, I have right Partner number for Recipient information
-
Hi, I have a page A with a button, clicking on which will forward (forwardImmediate) to Page B. Even in page B there is a button which will take you back (again forwardImmediate) to page A. When I click the button in Page A, it takes me to Page B wit
-
I am trying to shorten a song that I am burning from iTunes onto a disc...How do I do this?