luc desruelle's Blogue

Navigateur communautaire
annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 
Desruelle_luc
8682 Visites
2 Commentaires

I] Introduction : les problèmes avec l'invite de commande

Il est possible de faire "beaucoup de choses" avec l'invite de commande de Windows, la fameuse fenêtre "cmd" de Windows.

 

Sous LabVIEW, il faut utiliser le vi "Commande système" connu sous le nom "system Exec.vi".

commande systeme.png

Le vi permet d'exécuter une commande système, une ligne de commande au niveau du système ,qui peut inclure tous les paramètres supportés par l'application que vous voulez lancer

 

  • Mais comment bien l'utiliser?  En effet comment gérer l'erreur retournée par la commande système ?
  • Mais dans quelle langue est le texte? Avez-vous regardé le texte de la sortie? texte "étrange"? avec des R‚ponse des ::1ÿ:
  • Comment analyser le retour de la fenêtre?

 

Exemple de réponse de la commande système via LabVIEW:

Envoi d'une requˆte 'ping' avec 32 octets de donn‚esÿ:

R‚ponse de ::1ÿ:ponse de ::1ÿ: temps<1ms 

R‚ponse de ::1ÿ: temps=2 ms 

Statistiques Ping pour ::1:     Paquetsÿ: envoy‚s = 4, re‡us = 4, perdus = 0 (perte 0%), Dur‚e approximative des boucles en millisecondes :     Minimum = 0ms, Maximum = 2ms, Moyenne = 0ms

 

 

 

II] Mais dans quelle langue est le texte de retour de la commande?

 

Les fenêtres de type console ou invite de commandes, sur les systèmes Microsoft Windows en Europe occidentale, utilisent la page de code 850. C'est une page de code définie par IBM et qui est utilisée en Europe occidentale avec le système DOS et d’autres systèmes de la même époque.

 

C’est une extension de l’ASCII sur 8 bits, partiellement compatible avec la page de code 437 dont elle est dérivée et qu’elle modifie. 

 

Plus d'information sur wikipedia http://fr.wikipedia.org/wiki/Page_de_code_850 

 

Le code page 850 est IBM/OEM/Microsoft Code page

 

Pour "traduire", convertir, la chaine de texte de retour de l'invite de commande, string au format OEM, il va falloir utiliser la user32.dll avec la fonction "OemToChar", qui permet : cf MSDN : Translates a string from the OEM-defined character set into either an ANSI or a wide-character string 

 

2 user32 OEMto charA.png

 

Par exemple sur une commande "ping"

texte2.png

 

 

III] Comment gérer l'erreur retournée par l'invite de commande?

Il faut distinguer l'erreur de la fonction "invite de commande", via le vi LabVIEW "system Exec.vi" et l'erreur de la commande système appelée par "l'invite de commande".

 

Le vi LabVIEW ne gére pas, dans le clusteur "standard" Erreur Out, l'erreur retourneé par la fonction "utilisée" dans l'invite de commande.  Il ne gére que l'erreur de la fonction invite de commande.

 

Par contre, la fonction LabVIEW retourne pour la commande utilisée : un indicateur de retour "code de retour" et le texte de l'erreur.

 

Pour gérer l'erreur, dans la fonction utilisée, le code va ressembler à cela :

  • si code 0, pas d'erreur
  • sinon utiliser le vi Error Cluster From Error Code.vi pour créer une erreur LabVIEW, dans les règles de l'art. Nous allons convertir, via la fonction "OemToChar",  le texte de l'erreur de la commande systéme que nous allons ajouter dans le texte de l'erreur LabVIEW.

 

code erreur3.png

 

 

IV] Exemple de code

 

 

Luc desruelle code system execution cmd commande systemeV2.png

Luc Desruelle | avatar_ld.gif | Voir le profil LinkedIn de Luc DesruelleVoir mon profil

CLA : Certified LabVIEW Architect / Certifié Architecte LabVIEW
CLD : Certified LabVIEW Developer / Certifié Développeur LabVIEW

 

Contact , About me. , Google+. , Twitter.

Desruelle_luc
6291 Visites
0 Commentaires

Pour faire simple, il n'est besoin de fermer que les références "créés" programmatiquement, et pas par "clic droit"

http://www.ni.com/white-paper/5320/en/

http://www.ni.com/white-paper/14393/en/ 

 

The standard method of referencing objects is to open a reference to the object, use the object, and close the reference to the object. Whether you close a control reference depends on how you generated it-with a control reference constant, a Property Node, or the Event structure 

 

When you open a reference to an application, project, VI, or other reference source, LabVIEW allocates memory to store that reference. To free up the space in memory where LabVIEW stored the reference source, you must close the reference. It is always safe to close a reference when you no longer need it. You can use the Close Reference function (linked below) to close a reference.  

 

Exceptions : Implicit References and Unwired Property and Invoke Nodes  Although you should usually close references when you no longer need them, you can leave implicit references and references returned in the reference out terminal of unwired property and invoke nodes open, shown below, because a Close Reference function does not actually close these references or remove the target objects from memory.   

 

If you do not close a reference, your application is susceptible to reference leaks that can use up memory and slow the execution time of the application. LabVIEW automatically closes a reference when the top-level VI that opened the reference goes idle, but if the application runs for extended periods of time, the effects of reference leaks gradually increase.

 

Quelques exemples de référence à ne pas fermer

ref2.png

 

De même (le close n'est pas utile)

 

ref.png