mardi 15 décembre 2009

Comment choisir entre LabVIEW, LabWindows/CVI, Measurement Studio .NET et TestStand

National Instruments, qui est actuellement le leader des solutions d’instrumentation, test et mesure, propose des solutions pour le développement de logiciels dans trois langages différents : LabVIEW, LabWindows/CVI et Measurement Studio; et un autre logiciel de développement spécialisé : TestStand. Mais, j’en convient et surtout vu de l’œil du non initié, on peut être un peut perdu face à toutes ces solution. Aussi, je vais faire une courte présentation de ces produits avec leurs différences et leurs points forts.

LabVIEW logo LabVIEW

LabVIEW est le produit phare de National Instruments depuis 1984.

  • Utilisation : développement de logiciels orientés industrie et science, le plus souvent fortement liés aux instruments de mesure, capteurs et appareils électroniques, sous Windows, Unix, Linux ou Macintosh, PDA (Windows Mobile et Palm OS), cible temps réel (de NI), FGPA (de NI).
  • Langage : langage G pour Graphique. On programme en posant des icones (représentant des fonctions) sur un diagramme et on les relie par des fils (représentants les flux de données, les variables).
  • Avantage : le langage G, entièrement graphique, permet de développer très rapidement des applications sans connaissance étendu de la programmation.

LabWindows/CVI logo LabWindows/CVI

LabWindows/CVI est une déclinaison de LabVIEW pour la programmation en langage C.

  • Utilisation : développement de logiciels orientés industrie et science le plus souvent fortement liés aux instruments de mesure, capteurs et appareils électroniques, sous Windows, Unix, Linux et cible temps réel (de NI) - depuis la version 9.0 pour ce dernier point.
  • Langage : langage C. LabWindows/CVI contient bon nombre d’assistant pour faciliter le développement d’interfaces graphiques, la déclaration des variables, l’insertion de fonctions et structure du code et la communication avec les instruments et autres appareils électroniques.
  • Avantage : le langage C est un langage de base souvent connu des ingénieurs et techniciens. C’est un langage majeur qui permet l’utilisation de code source déjà existants. La programmation est facilité grâce aux assistants.

Measurement Studio logo Measurement Studio

Measurement Studio est un pack de classes et librairies similaires à LabVIEW pour Visual Studio.

  • Utilisation : développement de logiciels orientés industrie et science le plus souvent fortement liés aux instruments de mesure, capteurs et appareils électroniques, sous Windows.
  • Langage : langages C++, C# et Visual Basic.
  • Avantage : facilite le développement d’applications d’instrumentation et de mesure sous Visual Studio grâce à ses librairies de fonctions dédiées et ses objets graphiques spécialisés.

TestStand-Logo TestStand

TestStand est un outil, ou plus exactement une suite de fonctionnalités, ou Framework, permettant de faciliter le développement de logiciels de type séquenceur.

  • Utilisation : développement de séquenceurs dans les domaines de l’industrie et des sciences, le plus souvent pour le séquencement de mesures et de tests sous Windows.
  • Langage : compatibilité avec LabVIEW, LabWindows/CVI, Java, HTbasic et tous langages produisant des DLL, EXE, des composants ActiveX et .NET. TestStand possède également son propre langage simple de script.
  • Avantage : il possède toutes les fonctions nécessaires à un séquenceur de tests; c’est autant de temps de gagné sur le développement. Il dispose, entre autres, des fonctions suivantes : génération de rapports, éditeur de séquence, génération automatique de code source, connexion aux bases de données, parallélisme, composants graphiques pour l’interface opérateur, gestions des droits des utilisateurs.

dimanche 8 novembre 2009

Conférence sur le test et mesure au Mexique

J’ai été invité pour donner une conférence dans le cadre du SIECC 2009 de titre “Fusing Worlds”, symposium international étudiant de science informatique sur trois jours, organisé par Institut Technologique de Durango au Mexique.

12652_169092777849_107759907849_2596261_4426841_n

Le titre de ma conférence était “La mécatronique dans la qualité industrielle et la recherche scientifique” où j’ai exposé les enjeux du contrôle, de la mesure, du test et de la simulation dans des problématiques de plus en plus complexes au sein de la recherche et de l’industrie, agrémentée de d’exemples tirés de mon expérience professionnelle.

16649_179577636768_533411768_2849826_1199836_n16649_179577671768_533411768_2849831_2633575_n

Entre autres conférenciers, on pouvait compter Leo Prieto (leo.prie.to), un chilien qui est à la tête de Fayerwayer.com premier site d’Amérique latine avec 4 millions de visiteurs par jour, pour parler de l’hyper connectivité; Álvaro López Ortega (Octality), espagnol, créateur du serveur libre “Cherokee”,  pour présenter les modèles économiques applicables pour une entreprise développant en Open Source; Ricardo Meza, mexicain, membre de Mozilla, pour nous parler de FireFox et de l’Open Source; Mauricio Pastrana, colombien, pour nous parler des enjeux économiques des communautés du web; Alejandro Martinez, mexicain, membre de Microsoft pour nous présenter les nouvelles innovations technologiques de Microsoft; et Carlos Montelongo pour parler des applications JAVA. Ci-dessous une photo des conférenciers :

11440_167937514139_558214139_2568405_2940484_n

voir le site de l’évènement : siecc09.com

lundi 10 août 2009

Nouvelles fonctions de LabVIEW 2009

labview2 LabVIEW 2009 vient de sortir (on notera que le numéro de la version est en faite la 9.0). En plus des nouveautés annoncées par National Instruments sur son site, j’ai voulu faire un tour d’horizon des nouveautés dans les palettes de commandes en face avant et de fonctions pour les diagrammes. En voici la synthèse (les nouveautés sont encadrées en rouge :

Nouveautés dans les commandes (face avant)

  • Numérique
labview2009-moderne-numerique ajout de la commande de type réservoir
  • Graphe
labview2009-moderne-graphe ajout du tracé de compas, tracé à barres d’erreur, tracé de plume et matrice de tracés XY et ajout de la palette dédiée au graphe 3D
  • Graphe 3D
labview2009-moderne-graphe-graphe-3d ajout des graphes 3D de type nuage, barres, camembert, bâtons, rubans, contour, champ vectoriel, comète, surface, maillage et chute d’eau.

 

Nouveautés dans les fonctions (diagramme)

  • Programmation, numérique, virgule fixe
labview2009-programmation-numerique-virgule-fixe ajout de : adapter de virgule fixe à entier, adapter d’entier à virgule fixe
  • Programmation, tableau, matrice
labview2009-programmation-tableau-matrice nouvelle palette avec : taille de matrice, construire une matrice, redimensionner une matrice, transposée d’une matrice, obtenir la diagonale d’une matrice, obtenir les éléments d’une matrice, obtenir une sous-matrice, définir une diagonale de matrice, définir des éléments de matrice, définir une sous-matrice
  • Programmation, cluster, classe et variant
labview2009-programmation-cluster-classe-et-variant ajout de préserver la classe à l’exécution
  • Programmation, E/S sur fichiers, constantes de fichiers
labview2009-programmation-es-sur-fichiers-constantes-de-fichiers ajout de : obtenir le répertoire système et répertoire de l’application
  • Programmation, E/S sur les fichiers, XML, parseur XML
labview2009-programmation-es-sur-fichiers-xml-parseur-xml
  • ajout de : obtenir le premier nœud correspondant et obtenir tous les nœuds correspondants.
  • à noter le changement des icones nouveau et fermer.
  • Programmation, E/S sur les fichiers, TDM en continu
labview2009-programmation-es-sur-fichiers-tdm-en-continu ajout de : TDMS – convertir le format, créer des informations de mise à l’échelle
  • Programmation, contrôle d’applications, contrôle de mémoire
labview2009-programmation-controle-applications-controle-de-memoire ajout de : nouvelle référence de valeur de données, supprimer une référence de valeur de données
  • Programmation, contrôle d’applications, informations sur le processeur
labview2009-programmation-controle-applications-informations-sur-le-processeur nouvelle palette avec : information sur le processeur, nombre de niveaux de cache, taille du cache de données
  • Programmation, waveform, waveforme numérique
labview2009-waveform-waveform-numerique ajout de grouper les signaux numériques
  • Traitement du signal, opérations sur les signaux
labview2009-traitement-du-signal-operations-sur-les-signaux ajout de nœud de délai de transformée en Z
  • Mathématiques, équations différentielles, équations différentielles partielles
labview2009-mathematiques-equations-differentielles-partielles nouvelle palette avec : définir une EDP, définir un domaine d’EDP, définir la condition aux limites d’une EDP, définir la condition initiale d’une EDP, résolution d’EDP, rendu d’EDP
  • Communication de données, variable partagée
labview2009-communication-de-donnees-variable-partagee
  • ajout de fonctions pour simplifier l’utilisation des variables partagées : établir une connexion à la variable, lire une variable, écrire une variable, fermer une connexion à une variable, nœud de propriété de variable.
  • pour les variable PSP : ouvrir et vérifier la connexion d’une variable, établir une connexion à une variable en arrière plan.
    pour les variables
  • E/S : lecture par balayage de la variable, écriture par balayage de la variable, lecture directe de la variable, écriture directe de la variable
  • Entrées/Sorties de mesures, moteur de balayage NI
labview2009-es-de-mesures-moteur-de-balayage-ni nouvelle palette avec : synchronisation avec le moteur de balayage, obtenir la période du moteur de balayage, définir la période du moteur de balayage, obtenir le mode du moteur de balayage, définir le mode du moteur de balayage, rafraichir les modules locaux
  • Entrées/Sorties de mesures, moteur de balayage NI, contrainte
labview2009-es-de-mesures-moteur-de-balayage-ni-contrainte nouvelle palette avec : activer les contraintes de variables, désactiver les contraintes de variables, effacer les contraintes de variables, contraindre une variable, annuler une contrainte de variable

  • Entrées/Sorties de mesures, moteur de balayage NI, défaillances
labview2009-es-de-mesures-moteur-de-balayage-ni-defaillances nouvelle palette avec : obtenir une liste de défaillances, définir une défaillance, effacer une défaillance, effacer toutes les défaillances
  • Entrées/Sorties de mesures, moteur de balayage NI, configuration de défaillances
labview2009-es-de-mesures-moteur-de-balayage-ni-configuration-de-defaillances nouvelle palette avec : définir une configuration de défaillance, effacer une configuration de défaillance, obtenir toutes les configurations de défaillances

lundi 27 juillet 2009

Utilisation de JAVA avec TestStand

logoteststand On peut maintenant faire appel à des classes JAVA directement depuis les séquences TestStand.

On sait que TestStand permet d’appeler des composants de type LabVIEW (VI), LabWindows/CVI (.C, .obj, .lib, .dll), DLL (donc tous langages capable de produire des DLL : C++, Pascal Object avec Delphi, Visual Basic et autres….), ActiveX (et donc tous langages compatibles), .NET assemblies (et langages compatibles…), HTbasic. On pourrait se dire que ces adaptateurs (adapters in english) sont principalement des technologies Microsoft. Choix commercial peut être, mais c’est sans compter sur la possibilité de les programmer soit même, surtout que l’ont peut prendre exemple des sources des adaptateurs, précédemment listés, qui nous sont fournis avec TestStand.

Dans cette veine, un nouvel adaptateur nous est livré : l’adaptateur JAVA. Il comprend trois groupes :

  • StartStop : pour le démarrage et l’arrêt de la machine virtuelle JAVA (JVM).
  • Methods : appel à une méthode d’une classe
  • Static methods : appel à une méthode statique d’une classe

L’appel aux méthodes permet les types de pas suivants : Numeric Limit Test, String Value Test, Pass/Fail Test et Action.

Regardez ci-dessous un exemple d’une séquence (ici pour une carte mère d’un PC) écrit avec des pas JAVA (voir Java dans le dossier des exemples TestStand).

TestStand-java
Séquence de test en JAVA sous TestStand

Il est à noter que les sources des adaptateurs JAVA sont codés en C sous LabWindows/CVI. L’interface de configuration des propriétés ci-dessous est donc modifiable.

Java_EditJavaCall_db
Propriétés d’un pas JAVA sous TestStand

L’adaptateur JAVA est compatible avec TestStand 3.0 et supérieur, LabWindows 6.0 et supérieur et Java 2 version 1.4.

mercredi 24 juin 2009

Options de compilation sous LabWindows/CVI

imageLes options de compilation sont souvent un peu oubliées alors que l’on développe un programme; hors, elles sont aussi importantes que le code lui même et cela pour plusieurs raisons : elles permettent de configurer la profondeur d’analyse de détection d’erreur du code source et de gestion mémoire lors de l’exécution, elle fixent les adressages pour la compatibilité avec d’autres composants, DLL par exemple. Ainsi, on l’aura compris, la modification d’une option peut changer le niveau de détection des erreurs par le debugger de LabWindows/CVI. On aurait alors un comportement instable de notre programme sans en avoir été averti lors de la compilation ou de l’exécution en mode “debug”. Aussi, pour vous aider dans vos débuts sous LabWindows/CVI, je vous propose d’adopter la configuration ci-après pour les “Build Options” du menu “Options” de LabWindows/CVI 9.0 (les options sont légèrement différentes pour les versions précédentes mais l’essentiel est resté).

Build Options LabWindows/CVI 9.0

lundi 22 juin 2009

Structuration du code LabVIEW

labview_thumb On peut définir un bon code source par plusieurs caractéristiques : déjà il faut qu’il fonctionne, qu’il soit facile à lire et facile à modifier donc aisément maintenable. Dans ces fins, on recherchera à structurer et non à jeter son code pèle-mêle sur le diagramme. On utilisera la palette de structures avec les Palette "structures" de LabVIEW boucles FOR ou WHILE, les CONDITIONS, la structure d’événements (pour gérer les actions sur des éléments de l’interface graphique comme un clic sur un bouton) ou encore les séquences, sans oublier les décorations comme les encadrés et les texte pour ajouter des commentaires. Mais aussi des sous-VI qui regrouperons des instructions, se qui allégera les diagrammes, capitalisera les fonctionnalités et ainsi rendra aisé la distribution des sources et qui permettra, en outre, une meilleur gestion des ressources mémoire par le moteur de LabVIEW lors de l’exécution.

vendredi 20 février 2009

Historique de LabWindows/CVI

cviComme je le fais pour LabVIEW, j’écris l’historique des versions de LabWindows/CVI sur Wikipédia ici.

 

  • 1989 : LabWindows 1.0, sous DOS, première version publique
  • 1991 : LabWindows 2.0, sous DOS, aides au développement d'IHM
  • 1994 : LabWindows/CVI 3.0, sous Windows 3.1 et Solaris
  • 1995 : LabWindows/CVI 3.1, génération automatique de code
  • 1996 : LabWindows/CVI 4.0, compatibilité accrue avec les compilateurs externes
  • 1998 : LabWindows/CVI 5.0, compatibilité VXI et IVI
  • 2000 : LabWindows/CVI 5.5, librairies multitâches
  • 2001 : LabWindows/CVI 6.0, support ActiveX et amélioration de l'IHM
  • 2003 : LabWindows/CVI 7.0, intégration des workspaces
  • 2004 : LabWindows/CVI 7.1, complétion automatique
  • 2005 : LabWindows/CVI 8.0, nouveau système de déploiement, support des .NET assemblies
  • 2006 : LabWindows/CVI 8.1, variables réseau, contrôles graphiques du style Windows
  • 2007 : LabWindows/CVI 8.5, amélioration de la gestion du microprocesseur multi cœur, édition du code pendant le débogage, première version du toolkit temps réel
  • 2008 : LabWindows/CVI 9.0, gestionnaire de mémoire et compilation optimisée, support du C ANSI version 99 (notamment les tableaux dynamiques)

Historique de LabVIEW

labview Je suis en cours de rédaction sur Wikipédia de l’historique des versions de LabVIEW (pour voir l’article sur wikipédia):

 

  • 1986 : LabVIEW 1.0, première version sous Mac OS
  • 1990 : LabVIEW 2.0, optimisation des performances
  • 1992 : LabVIEW 2.5, sous Windows 3.1 et Sun OS (Solaris)
  • 1993 : LabVIEW 3.0
  • 1994 : LabVIEW 3.0.1, sous Windows NT
  • 1994 : LabVIEW 3.1
  • 1995 : LabVIEW 3.1.1, intégration de l'Application Builder
    1996 : LabVIEW 4.0
  • 1997 : LabVIEW 4.1
  • 1998 : LabVIEW 5.0, multitâche, conteneurs ActiveX, assistant pour les cartes d'acquisition (DAQ) et assistant pour le contrôle d'instrument
  • 1999 : LabVIEW 5.1, portage sous linux; première version de LabVIEW RT
  • 2000 : LabVIEW 6.0, contrôles au look 3D, référence d'un contrôle
  • 2001 : LabVIEW 6.1, optimisations et corrections
  • 2003 : LabVIEW 7.0, VI Express
  • 2004 : LabVIEW 7.1, traduit en français, allemand et japonais
  • 2005 : LabVIEW 8.0, Project Explorer, XControls, shared variables
  • 2005 : LabVIEW 8.1, optimisations et corrections
  • 2006 : LabVIEW 8.20, programmation orientée objets
    2007 : LabVIEW 8.5, première version du toolkit FPGA et du toolkit Statechart
  • 2008 : LabVIEW 8.6, nettoyage automatique des diagrammes

Il me manque encore quelques infos sur certaines versions mais j’y travaille et toutes infos à ce sujet sont les bienvenues.

mardi 10 février 2009

La programmation orientée objet sous LabVIEW

labviewSaviez-vous que depuis la version 8.20 de LabVIEW, sortie en 2006, il est possible de programmer avec une architecture objet ? On peut ainsi créer des classes avec leurs propriétés et leurs méthodes, comme en C++, Java, C#, pascal object (Delphi) et autres langages évolués.
J'entends certains d'entre vous dire "mais qu'est-ce que ça nous apporte en plus pour le développement de logiciel de test et mesure ?". Serte, il est vrai que pour un petit logiciel qui fait une mesure ou plusieurs mesures et un traitement simple, le langage objets n'est pas forcément le plus adapté... quoi que : on pense toujours développer en "one shot" et on se rend très souvent compte, après coup, qu'il faut faire évoluer le logiciel et/ou récupérer une fonctionnalité pour l'intégrer dans un autre développement. C'est là que la programmation objet (LVOOP sous LabVIEW pour LabView Oriented-Object Programming) a tout son intérêt : elle permet un concept et une architecture plus proche du monde physique et donc du raisonnement humain (exemple d'objet : une voiture avec ses méthodes, tourner, freiner, et ses propriétés, vitesse maximum, couleur). De plus, on peut alors profiter des outils de modélisation qui permettent de concevoir sous forme de schémas semi-formels la structure d'un programme, basé par exemple sur UML (d'ailleurs il y a un toolkit dédié sous LabVIEW).

mercredi 21 janvier 2009

Wikipédia et le test et mesure

Depuis 2006 je contribue à quelques articles sur ce merveilleux outil du savoir qu'est l'encyclopédie libre Wikipédia. Je m'étais pour le moment attelé à la rédaction d'articles sur l'histoire et la culture du nord du Mexique.
Depuis quelque temps, je participe, quand j'ai le temps, à l'ajout d'articles concernant le test et la mesure et ses différents outils (mon profile sous Wikipédia : http://fr.wikipedia.org/wiki/Utilisateur:Adrienj). Si vous souhaitez participer à cet effort, qui n'a de noblesse que le partage des connaissances, alors rien de plus simple : créez un compte sous Wikipédia.
Pas mal de chose reste à compléter, comme les articles sur : LabVIEW, LabWindows/CVI, TestStand, Measurement Studio, PXI, VXI... et beaucoup d'autres définitions ne font pas encore partie de l'encyclopédie : à vos claviers !

dimanche 11 janvier 2009

LabWindows/CVI 9.0 : les tables dynamique

Avec l'implémentation du standard C99, une avancé est fait quant à la gestion de la mémoire : la déclaration de tables dynamiques (variable-length arrays in english).

Vous me direz, les tables je connais, je la déclare un tableau de dix entiers en dimensionnant avec une constante comme suit : int iTable[10]. Les tables dynamiques, ok je connais, je déclare un pointeur puis je fais un malloc ou calloc pour la dimmensionner avec une variable, en n'oubliant pas de libérer la mémoire allouée avec un free à la fin du traitement.

Alors que sont les variable-length arrays ?
C'est la possibilité de declarer des tables en les dimensionnant avec des variables et non plus qu'avec les seules constantes.
Voici deux exemples pour illustrer l'utilisation d'un tableau dynamique : On demande à l'utilisateur de dimmensionner une table que l'on alloue puis on affiche le contenu de cette table.

AVANT
int rows, cols;
int i, j;
int *piTable = NULL;

printf("Entrez le nombre de ligne de la table: ");
scanf("%d", &iNbLigne);
printf("Entrez le nombre de colonne de la table: ");
scanf("%d", &iNbColonne);

*piTable = (int*)malloc(iNbLigne*iNbColonne*sizeof(int));
if (piTable != NULL)
{
  for (int i = 0; i < iNbLigne;i++)
  {
    for (int j = 0; j <
iNbColonne;j++)
    {
      piTable[i][j] = i*iNbColonne + j;
      printf("%d ", piTable[i][j]);
    }
    printf("\n");
  }
}
free(piTable);
piTable = NULL;


MAINTENANT
Dans le code suivant, on utilise également une autre nouveauté de la C99 : la déclaration des variables n'est plus cantonnée au début des blocs { }.

int iNbLigne, iNbColonne;
int i, j;

printf("Entrez le nombre de ligne de la table: ");
scanf("%d", &iNbLigne);
printf("Entrez le nombre de colonne de la table: ");
scanf("%d", &iNbColonne);

int tiTable[iNbLigne][iNbColonne];
for (int i = 0; i < iNbLigne; ++i)
{
  for (int j = 0; j < iNbColonne; ++j)
  {
    tiTable[i][j] = i*iNbColonne + j;
    printf("%d ",
tiTable[i][j]);
  }
  printf("\n");
}

Ici, la libération de la mémoire alouée à tiTable est effectuée à la fin de "vie" de cette variable. Comme tiTable est une variable locale, elle sera désalouée à la fin du traitement la fonction dans laquelle elle est déclarée.

jeudi 8 janvier 2009

Les nouveautés de LabWindows/CVI 9.0 : le standard C99

Pas mal de nouveautés sont disponibles dans LabWindows/CVI 9.0 surtout avec l'implémentation du dernier standard du langage C : la C99. On aura donc attendu dix ans, le temps de maturation, pour bénéficier des avantages de ce nouveau standard.
Qu'apporte la C99 ?
Voici la liste de ces améliorations :
  • La déclaration des variables n'est plus cantonnée au début des blocs { }.
  • On peut déclarer des tables en les dimensionnant avec des variables et non plus qu'avec les seules constantes.
  • Chaque éléments des tables, structures et unions est maintenant initialisable distinctement et nommément.
  • Les éléments des tables, structures et unions peuvent être initialisés avec des variables.
  • nouveau type : les entiers de 64 bits (long long).
  • nouvelles fonctions snprintf et vsnprintf qui sont des versions "sécurisées" de sprintf et vsprintf puisqu'elles évitent les dépassements en contrôlant la taille de la chaîne d'entrée.
  • les macros à n arguments (...).
  • ajout de la variable du pré-compilateur __func__ contenant le nom de la fonction courante.
Je remarque que cette dernière nouveauté (__func__) de la C99 était déjà présente depuis quelques versions de CVI.

Je détaillerai dans des articles dédiés chaque aspect de la C99 pour LabWindows/CVI.

Ouverture du blog

Je parlerai ici des techniques de développement pour le Test et la Mesure :
  • programmation : principalement autour des solutions de National Instruments comme LabVIEW, LabWindows/CVI, TestStand, Measurement Strudio .NET...
  • instrumentation : les composants d'un banc de test, mesure ou validation, les différents bus industriels et les nouveautés