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 : 

LabVIEW Macro

Résolu !
Accéder à la solution

Bonjour,

Je me présente, je suis stagiaire dans une entreprise où nous cherchons à faire de la spectroscopie.

Je dois à l'aide de LabVIEW controler OPUS (by brunker) qui est logiciel d'acquisition de spectre spécifique à la spéctroscopie.

Je dispose de LabVIEW 2014 et d'OPUS version 7.0.129.

Pour cela un collègue m'a lancé sur la piste de gestion d'OPUS via la méthode DDE(dynamic data exchange).

J'ai pu avancer sur le sujet et je peux donc maintenant contrôler au minimum OPUS via DDE ( fermeture d'OPUS, chargement de spectre, chargement des paramètres). Il me reste donc une seul tache à faire : le lancement d'acquisition.

 

J'ai tout d'abord pensez utiliser ActiveX ( et cela a été confirmé par un autre post de ma part sur ce forum.) mais j'ai découvert qu'à cause d'un fichier corrompu je ne peux pas utiliser ActiveX sur LabVIEW ( le fichier DDClnt36.ocx si quelqu'un à des infos).

 

Je suis donc retourner sur DDE et je me suis rendu compte qu'au final c'est pas si mal.

 

Me re-voilà donc !

 

Mon problème est le suivant :

Je peux grâce à LabVIEW contrôler en partie OPUS. Une seule commande me resiste (tel les irreductibles gaulois) , c'est le lancement d'une acquisition.

Je sais que la plupart d'entre vous ne connaissent pas mon logiciel OPUS mais c'est un logiciel comme un autre. En ce moment j'essaye donc de lancer une Macro via DDE.

Sans titre.png

Sans titre2.png 

 

Voilà à quoi ressemble mon diagramme ( ne fait pas attention au graphe c'est pour une autre partie de mon VI).

 

Je vous joint le code de la macro (si cela peut vous être utile) :

REM This Macro shows how to measure a spectrum
VARIABLES SECTION

REM When using the macro editor this FILE variable is automatically added after inserting the MeasureSample function
FILE <$ResultFile 1> = AB;

PROGRAM SECTION

REM The measured spectrum is returned in the FILE Variable
REM Note that ONLY the experiment path and name are required for measurement commands!
<$ResultFile 1> = MeasureSample (0, {EXP='Default.xpm', XPP='C:\OPUS_NT\XPM'});

PARAMETER SECTION




(Rem : ligne de commentaire)

 

Et je vous joint aussi une partie du PDF ci-joint concernant les différentes fonctions que j'utilise (ceci n'est pas un code) :

 

1ère commande :

12.3.21 START_MACRO
Syntax:
“START_MACRO <Macro file name>[<Number of input parameters>]”
Description:
Starts an OPUS macro. Input parameters can be forwarded to the macro. If
parameters are exchanged, the total number of parameters must be defined as
the second parameter. If this number is omitted, then it will be set to 0; in this
case, no parameters are read. If the number of input parameters is larger than 0,
the input parameters <input parameter 1>, <input parameter 2>, ...., <input
parameter N> have to be sent by the client program.

2ème commande ( similaire ) :

12.3.26 RUN_MACRO
Syntax:
Equivalent to START_MACRO
Description:
The RUN_MACRO command starts a macro. Contrary to START_MACRO,
the control is returned immediately after the macro was started. The
RUN_MACRO command does not wait for the macro to terminate and also
doesn’t return any results.

COMMANDE DE RÉPONSE :

12.3.27 MACRO_RESULTS
Syntax:
“MACRO_RESULTS <MacroID>”
Description:
The MACRO_RESULTS command retrieves the result parameters of a macro
session that was started with the ID <MacroID>, using the RUN_MACRO command.

La MacroID correspond à une suite de chiffre présent dans mon data (sortie de ma fonction request ).

 

 

 

Le problème est là : Dès que je lance un macro il me dit qu'il y a une erreur dans le macro "Error in Macro" ( alors que je sais que non puisque celui-ci marche bien sur mon logiciel OPUS).

 

Mon diagramme est-il bon pour lancer un macro ? Ne trouvant aucune doc sur les différents VIs de DDE , le VI resquest est-il le bon VI à utiliser ? Si non , quel VI faut-il utiliser ?

Quelle est vraiment la différence entre le VI Request et Execute ?

 

Je viens vers vous puisque j'ai épuisé mes choix en consultant la plupart des sites concernant LabVIEW et le DDE.

 

 

Je vous remercie encore de votre temps.

Yotip

0 Compliments
Message 1 sur 10
5 676 Visites

Bonjour Yotipp,

 

Merci d'avoir posté sur le forum de National Instruments.

 

Il est un peu compliqué de répondre à votre problématique et d'examiner votre code sur des captures d'écrans. Auriez-vous la possibilité de nous fournir votre code.

 

Cordialement.

0 Compliments
Message 2 sur 10
5 633 Visites

Bonjour ,

 

Pas de souci je vous le met en pièce jointe.

 

Je l'ai fait sous forme d'un FGV (variable globale fonctionelle) avec les différentes fonctions qui m'interesse sachant que seul celle qui doit ouvrir le macro me resiste !

Action_Opus.ctl est un contrôle qui va forcement avec le VI du dessus.

 

Cordialement.

 

Yotipp

 

Tout télécharger
0 Compliments
Message 3 sur 10
5 620 Visites

Bonjour Yotipp,

 

Je vous renvoi votre code commenté.Je n'ai pas fait une analyse approfondie il y a à mon avis pas mal de modifications et des bons usages à acquérir sous LabVIEW.

Néanmoins le code est propre et vos request ont l'air censées. Je n'ai jamais utilisé OPUS donc le mieux serait encore de tester.

 

Essayer de vous renseigner sur les notions que j'ai mises en commentaires, peut-être est-ce la source de votre problème.

 

Tenez nous au courant.

 

A bientôt.

Message 4 sur 10
5 598 Visites

Bonjour pierre.denis,

 

Je vous remercie grandement de tout votre temps !

 

Il est vrai que OPUS est logiciel très spécifique à mon département d'étude (à mon plus grand déplaisir). J'ai pu étudier le registre à décalage comme vous l'avez suggerer. Grâce à vous je vais pouvoir étudier de nouvelle piste quant à la résolution de mon problème.

 

Il s'avère en fait que mon VI ici est une sorte de FGV. Je m'explique :

J'avais dans l'intention de regrouper ici, dans ce VI, toutes les fonctions qui touchent à mon logiciel pour ensuite pouvoir les appeler librement dans mon VI principale sous forme de commande (Load, Unload, Load_XPM, Run macro...)

 

C'est pourquoi on peut voir une boucle avec une structure condition à l'interieur. Je n'ai fait que reprendre certains exemples de FGV de mes collègues (pour la structure). En effet la boucle ne m'interesse pas beaucoup puisque je ne demande qu'une commande unique.

Elle est sans doute utile pour mon case "Graph" pour pouvoir afficher en continu mon graph mais rien d'autre sinon. J'ai donc placer un bolléen False dans le but que dès que ma commande est envoyé  (Load, Load_XPM, Graph...) celle-ci ne se reproduise plus et que le VI s'arrête. J'ai eu le cas de file dialog qui s'ouvre continuellement parceque je ne pouvais pas appuyer sur le bouton stop (Bolléen sur la face connecté à la boucle sur le diagramme).

 

En clair, ma boucle est un peu inutile puisque celle-ci ne fait qu'un tour.

 

Quant à mon problème initiale, je pense que cela doit venir du logiciel OPUS et de ma mauvaise compréhension de l'utilisation de ses commandes.

 

Je vous remercie encore beaucoup pour votre temps,

 

Vous souhaitant une agréable journée,

 

Cordialement

 

Yotipp

0 Compliments
Message 5 sur 10
5 577 Visites

Bonjour Yottip,

 

Merci de votre réponse.

 

En effet si votre code s'inscrit dans une FGV, votre True relié au terminal d'arrêt de boucle est parfaitement judicieux mais il vous faudra des registres à décalages pour stocker votre valeur pour l'appel suivant. L'un ne va pas sans l'autre.

 

Je vous conseil de regarder ce lien qui pourra surement lever quelques doutes: http://www.ni.com/example/31375/fr/

 

A bientôt.

0 Compliments
Message 6 sur 10
5 570 Visites
Solution
Accepté par Yotipp

Bonjour,

 

J'ai finalement trouver une solution à mon problème.

En effet la commande RUN_MACRO est sans doute obselète ( signalé dans le pdf).

Ainsi je me suis dit que les commandes présentes dans le macro était sans doute des commandes que le logiciel OPUS pouvais lire et comprendre.

J'ai donc par la suite placer les commandes présentes dans le macro dans un string directement relier au REQUEST.

Et ... miracle !

Cela marche !

 

Je vous remercie tous de votre temps.

 

Cordialement

 

Yotipp

 

ps: un petit screen pour vous montrer.

 

Message 7 sur 10
5 525 Visites

Bonjour Yottip,

 

Parfait, je suis heureux si tout fonctionne comme vous le désirez.

 

N'hésitez pas à mettre votre forum comme résolu pour en aider certains qui pourrait se servir d'OPUS.

 

Bonne journée à vous et bon code.

 

Message 8 sur 10
5 518 Visites

bravo!

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 9 sur 10
5 485 Visites

Hi,
Excuse me, I don't speak french so I'm not sure about results of this discussion. Anyway I have also error DDClnt36.ocx when I try to control OPUS by LV. Did you solve that problem or you walked around it by different way?

 

 

Thank you

0 Compliments
Message 10 sur 10
5 382 Visites