www.mesulog.fr
Darwin appliqué à LabVIEW :
l’évolution de la gestion des données
Luc DESRUELLE – Certifié LabVIEW Architect - MESULOG
Evoluer pour s’adapter
La loi du plus fort appliquée au concept « mémorisation » du flux de données :
contrôle vers indicateur - Locale - Globale - FGV - AE – SEQ - DVR - OOP – SM - QDMH
Avant de commencer
 Faire évoluer la présentation en fonction de vous
 Vous pouvez m’interrompre
 Détailler en fonction de vos demandes
 Mes excuses pour les
mots anglais = technique LV
Octobre 2013 Programmation Avancée sous LabVIEW 2
La société MESULOG en bref
 Activité : Développement logiciel test et mesure
 Compétences : LabVIEW (Windows, RT, PDA, DSC, FPGA),
TestStand
VeriStand
 Localisation : Grenoble (Moirans, 38)
 Partenaire National Instruments (2001)
 Développeurs certifiés LabVIEW et TestStand
Juin 2014 Programmation Avancée sous LabVIEW Partie II 3
La société MESULOG en bref
 www.mesulog.fr
 Réalisations (article utilisateur)
 Présentations techniques
 LabVIEW
 TestStand
 VeriStand
Octobre 2013 Programmation Avancée sous LabVIEW 4
Réalisations
Société -> Présentations techniques
La société MESULOG en bref
 Ils nous ont fait confiance :
 ALSTOM Grid
 AREVA NP
 CEA (Commissariat à l'Énergie Atomique)
 CETIAT (Centre Technique des Industries Aérauliques et Thermiques)
 CNES (Centre National d'Études Spatiales)
 CNRS (Centre National de la Recherche Scientifique)
 EDF
 HONEYWELL Security
 LNE (Laboratoire National d'Essais)
 ONERA
 PECHINEY
 RADIALL
 RENAULT
 STMicroelectronics
 THALES Alenia Space
 THALES LCD
...
Octobre 2013 Programmation Avancée sous LabVIEW 5
Luc DESRUELLE
Architecte
Logiciel
NI Forums
Community
CLA
Le présentateur
Octobre 2013 Programmation Avancée sous LabVIEW 6
Community blogue
https://decibel.ni.com/content/blogs/
Luc_Desruelle
• Gif animé pour éviter du code
• Fenêtre pas rectangulaire
• Gestion IHM
• Projet LabVIEW
• OOP
• Modbus
• ….
 Co-auteur Livre « LabVIEW : programmation et applications »
 3iéme Édition, Dunod 05/2015
 Lien internet du livre
 Auteurs : F. COTTET + M. PINARD + L. DESRUELLE
 Chapitres 1 et 2 : prise en main de l’outil avec des exemples simples
 Chapitre 3 : programmation avancée avec des techniques et architectures
permettant au code d’être maintenable, évolutif, documenté et performant.
 Chapitres 4, 5 et 6 : acquisition, analyse et présentation des données.
Le présentateur
Octobre 2013 Programmation Avancée sous LabVIEW 7
« Toujours » le constat
 Certaines « erreurs » sont acceptables… si « rares »
Octobre 2013 Programmation Avancée sous LabVIEW 8
Le code LabVIEW le plus célèbre
Octobre 2013 Programmation Avancée sous LabVIEW 9
Spaghetti à la LabVIEW
Votre avis
Octobre 2013 Programmation Avancée sous LabVIEW 10
 Quelles sont les erreurs (programmation LabVIEW) ?
Erreur des Spaghettis sous « LabVIEW »
1. Style, écriture du code
 Pas de style!
 Documentation
2. Technique, Gestion des données
 Trop de locale – Globale
 Flux de données
3. Architecture, Structure application (Framework) :
 Absence modèle de conception
 Pas gestion d’erreur, Gestion arrêt du logiciel?
4. Gestion Projet
 Version, SCC, bug, tâche
 Test, analyse
Octobre 2013 Programmation Avancée sous LabVIEW 11
Nous n’aborderons pas
 Nous n’aborderons pas la gestion « projet »:
Présentation LUGE 2013 et NIDays 2014 :
Les outils qui nous veulent du bien
Plus de temps pour développer en LabVIEW
 Nous n’aborderons pas la gestion « style »
Présentation LUGE 2016 et NIDays 2017:
Avoir du style avec LabVIEW
Octobre 2013 Programmation Avancée sous LabVIEW 12
Nous aborderons
 Les différentes techniques de gestion des données
 Mémoriser une donnée
 Réutiliser une donnée déjà produite
 Quand, comment, pourquoi utiliser certaines techniques ?
Chapitre 3 du livre LabVIEW….
 Pas les techniques d’échange de données :
 Entre processus;
 Entre boucles;
 Entre applications.
FIFO, notifier, Variable partagée, TCP, UDP, ActiveX, .Net,
Network streams, DMA, Web service…
Chapitre 6 du livre LabVIEW….
Octobre 2013 Programmation Avancée sous LabVIEW 13
Sommaire : Darwin appliqué à LabVIEW
I. Où trouver de l’aide?
II. Histoire de la présentation
III. L’Evolution : Mémorisation des Données
IV. L’Evolution : Structures Application
V. L’Evolution : Programmation Orientée Objet (OOP)
Octobre 2013 Programmation Avancée sous LabVIEW 14
I] Où trouver de l’aide ?
Octobre 2013 Programmation Avancée sous LabVIEW 15
Où trouver de l’aide ?
 La communauté travaille pour vous
 2 Forums National Instruments Francophone
 http://forums.ni.com/t5/Discussions-au-sujet-de-NI/bd-p/4171
 http://forums.ni.com/t5/Discussions-au-sujet-des-autres/bd-p/4170
 1 communauté Francophone
 https://decibel.ni.com/content/community/regional/france/labview
 Rencontre développeurs : cf LUGE
 Mais aussi… l’ensemble des forums et communautés de NI
 LabVIEW Development Best Practices
 Large Applications : ni.com/largeapps
Octobre 2013 Programmation Avancée sous LabVIEW 16
 Livre LabVIEW : programmation et applications
 3iéme Édition, Dunod 05/2015
 Lien internet du livre
Livre Français
Octobre 2013 Programmation Avancée sous LabVIEW 17
Chapitre 3 du livre = cette
présentation (en plus court)
II] Histoire de la présentation
Octobre 2013 Programmation Avancée sous LabVIEW 18
Histoire de Darwin
 Charles Robert Darwin ( 1809 – 1882)
 Hypothèse : tous les êtres vivants ont un seul ancêtre
commun
 Les « êtres vivants » ont évolué et se sont adaptés
 Processus connu sous le nom de « sélection naturelle »
(la loi du plus fort) ou théorie de l’évolution.
Octobre 2013 Programmation Avancée sous LabVIEW 19
 Humour
 « Personnellement j’aime » le // entre
 « être vivant » qui s’adapte (pour survire)
 La gestion des données sous LabVIEW qui s’adapte (pour
éviter « les problèmes »)
 Evoluer pour s’adapter aux besoins
Darwin appliquée à LabVIEW
Octobre 2013 Programmation Avancée sous LabVIEW 20
 Comment et pourquoi la Mémorisation des données
a-t-elle évoluée?
Darwin appliquée à LabVIEW
Octobre 2013 Programmation Avancée sous LabVIEW 21
Darwin LabVIEW
Un seul ancêtre commun Contrôle (le)
à tous les êtres vivants À toutes les techniques de
mémorisation des Données
S’adapter pour Survivre S’adapter pour Eviter les bugs
La loi du plus fort Ajouter des fonctionnalités
Histoire
 Il était une fois…. Une donnée
Octobre 2013 Programmation Avancée sous LabVIEW 22
II] Evolution famille « données »
Octobre 2013 Programmation Avancée sous LabVIEW 23
Quizz N°1
 Pour transmettre la donnée « Data In », faut-il mieux
connecter le contrôle sur :
A. La variable locale de « Data Out »
B. Le terminal de l’indicateur « Data Out »
C. Le nœud de propriété implicite « value » de « Data Out »
D. Le nœud de propriété par référence « value » de « Data Out »
Octobre 2013 Programmation Avancée sous LabVIEW 24
Expliquer la réponse du Quizz N°1
L’explication de la réponse n’est pas si simple
 Comme démontrer 𝑥 × 0 = 0 … Parce que
 Avant de donner la véritable réponse :
 Vous faire sentir (la réponse) par une mesure
 Vous pouvez me croire… ou pas
Octobre 2013 Programmation Avancée sous LabVIEW 25
Expliquer la réponse du Quizz N°1
Démonstration
Octobre 2013 Programmation Avancée sous LabVIEW 26
Expliquer la réponse du Quizz N°1
Explication « simplifiée »
 Définition Les nœuds de propriété :
 Se synchronisent sur le thread « interface utilisateur ». Seul
système d’exécution pas multithread (Bloquant)
 Forcent à redessiner la face-avant à chaque appel (Lenteur)
 Forcent la face-avant à être chargée en mémoire (les
commandes et indicateurs auront plusieurs copies de
données supplémentaires – diagramme et face-avant)
Octobre 2013 Programmation Avancée sous LabVIEW 27
Résultat Quizz N°1
 Nœud de propriété
 Copies donnée
 Que Thread UI
 Lenteur, bloquant
 Force IHM en mémoire
 Race Condition
Octobre 2013 Programmation Avancée sous LabVIEW 28
 Locale
 Copies donnée
 Tout les Threads
 Race condition
V.S.
Réponse Quizz N°1
1. L’indicateur « Data Out »
2. La variable locale (copie buffer)
3. Le nœud de propriété implicite (thread UI + copie buffer)
4. Le nœud de propriété par référence (référence)
Octobre 2013 Programmation Avancée sous LabVIEW 29
Eviter 3. et 4. juste
pour « value »
Quizz N°2
 Pour transmettre la donnée, faut-il mieux connecter le
contrôle « Data In » sur :
A. La variable locale de « Data Out »
B. La globale « Data »
Octobre 2013 Programmation Avancée sous LabVIEW 30
Résultat Quizz N°2
Octobre 2013 Programmation Avancée sous LabVIEW 31
Match Nul(presque)
A éviter
 Eviter les variables Locale – Globale - nœud de propriété
 Copies des données (attention « Grosse Structure »)
 Lenteurs
 Pas de protection contre « Race Conditions »
 Pas de gestion d’erreur
 1 fois (OK) mais L’exagération nuit à l’évolution
Octobre 2013 Programmation Avancée sous LabVIEW 32
A éviter
 Eviter les variables Locale – Globale - nœud de propriété
Comment ????
Octobre 2013 Programmation Avancée sous LabVIEW 33
 FGV : Functional Global Variable ou LV2
 Registre à décalage non initialisé, d’un vi non réentrant
 Mémorise une valeur sur un Set (Write)
 Retourne la valeur sur un Get (Read)
FGV : Functional Global Variable
Octobre 2013 Programmation Avancée sous LabVIEW 34
Quizz N°3
 Vous connaissez tous?
 Pourquoi le nom FGV ou variable LV2?
Octobre 2013 Programmation Avancée sous LabVIEW 35
Exemple FGV
 Exemple FGV = Remplace la globale
Octobre 2013 Programmation Avancée sous LabVIEW 36
2 états :
> Set = Ecriture
> Get = Lecture
Mémorisation
Race condition
 Situation de compétition ?????????????
Octobre 2013 Programmation Avancée sous LabVIEW 37
Rappel « bug » Race condition
 Situation de compétition
 « Bug » Accès « concurrent » de 2 codes à la même
variable.
 Valeur « instable » de la variable
Octobre 2013 Programmation Avancée sous LabVIEW 38
Pas X=1 et Y=1
Data Out = ??
X=0 et
Y=0
Quizz N°4
 La FGV évite-t-elle « le bug » des accès concurrents –
Race Conditions?
Octobre 2013 Programmation Avancée sous LabVIEW 39
Data Out = ??
X = ?
Y= ?
Data In
X = 0
Y= 0
Résultat Quizz N°4
 Non
Démonstration code LabVIEW
Code téléchargeable sur le site MESULOG >> Société >> Présentations Techniques
www.mesulog.fr/presentations_techniques
Octobre 2013 Programmation Avancée sous LabVIEW 40
Utilisation recommandée de la FGV
 1 écriture
 N Lectures
Octobre 2013 Programmation Avancée sous LabVIEW 41
Race condition
 Comment éviter les Situations de compétition
?????????????
 N écritures
 N Lectures
Octobre 2013 Programmation Avancée sous LabVIEW 42
 AE : Action Engine
 Evolution de la FGV en ajoutant des actions,
 Principe de l'encapsulation
 La donnée reste dans la fonction logicielle = protection
AE : Action Engine
Octobre 2013 Programmation Avancée sous LabVIEW 43
Exemple AE
 Exemple AE
 FGV + Actions
 Code autonome – réutilisable – Gestion erreur
Octobre 2013 Programmation Avancée sous LabVIEW 44
Code de
l’action
Liste des
actions
Mémorisation
Quizz N°5
 L’AE évite-t-elle « le bug » des accès concurrents – Race
Conditions?
Octobre 2013 Programmation Avancée sous LabVIEW 45
Data Out = ??
X = ?
Y= ?
Data In
X = 0
Y= 0
Résultat Quizz N°5
 Oui, via l’encapsulation : rassembler les données et les
méthodes au sein d'une même structure
Démonstration code LabVIEW
Code téléchargeable sur le site MESULOG >> Société >> Présentations Techniques
www.mesulog.fr/presentations_techniques
Octobre 2013 Programmation Avancée sous LabVIEW 46
DVR : Data Value Reference
 Manipulation de la référence de la donnée mais pas la
données : pas de copie, pointeur zone mémoire
Octobre 2013 Programmation Avancée sous LabVIEW 47
Data Copy
Data Copy
Data
 Protection contre les
accès concurrent
Reference
Reference
Reference
Quizz N°5
 La DVR (Data Value Reference) permet-elle? :
A. D’éviter les copies de données (« grosse structure »)
B. De protéger contre les accès concurrents – Race Conditions
C. De gérer les erreurs
Octobre 2013 Programmation Avancée sous LabVIEW 48
Résultat Quizz N°5
 Réponse A, B et C : Oui
Démonstration code LabVIEW
Code téléchargeable sur le site MESULOG >> Société >> Présentations Techniques
www.mesulog.fr/presentations_techniques
Octobre 2013 Programmation Avancée sous LabVIEW 49
Synthèse évolution « données »
Octobre 2013 Programmation Avancée sous LabVIEW 50
Données
1 fois (OK) mais
L’exagération nuit à
l’évolution
S’adapter à un besoin
• N écritures
• Code autonome
• Réutilisable
• Gestion erreur personnalisée
Synthèse évolution « données »
Octobre 2013 Programmation Avancée sous LabVIEW 51
Fonctionnalités - Performance
Simplicité
d’utilisation
Évolution structure application
Octobre 2013 Programmation Avancée sous LabVIEW 52
 Toutes les techniques permettent de gérer des données
 Pas des applications
IV] Famille « structure application »
Octobre 2013 Programmation Avancée sous LabVIEW 53
 Evolution techniques pour gérer les données vers une
structure pour gérer les applications
Framework
Données
 Rappel l’Action Engine (AE) :
 Réalise une action sur la données (exemple X+1 ou Y+1)
 Puis fin
 Jusqu’au prochain appel de la fonction logicielle
De l’action à l’état
Octobre 2013 Programmation Avancée sous LabVIEW 54
 Modèle « Machine à états », basé sur diagramme états-
transitions:
 Etats = actions à réaliser
 Chaque section de code détermine la transition suivante
 Découpage clair des tâches à effectuer
 Ne « sort » du code que si fin du programme principal
Pour une application : Machine à états
Octobre 2013 Programmation Avancée sous LabVIEW 55
Machine à états
 Tout le monde connait cette technique avec LabVIEW?
Octobre 2013 Programmation Avancée sous LabVIEW 56
SM la Machine à états
Octobre 2013 Programmation Avancée sous LabVIEW 57
 La Machine à états, ou State Machine (SM), est une
structure d’application
STATE
Registre à décalage pour les
transitions d’états
Case structure = un pour chaque état
STATE = Etat
?
Registre à décalage pour la
mémorisation des données
Execution du
code de
l'état NEXT STATE
Exemple code LabVIEW de la SM
 Démonstration
Octobre 2013 Programmation Avancée sous LabVIEW 58
Synthèse de la Machine à états
 Fondamentale du développement logiciel LabVIEW
 Code simple, documenté et intuitif
 Point faible : peut perdre des états si en même temps
 Idées d’évolutions ?
Octobre 2013 Programmation Avancée sous LabVIEW 59
Autres évolutions « Framework »
 Quelques exemples disponibles
 Producteur/consommateur avec File d’attente (Queue)
 Boite de dialogue avec structure évènementielle (event driven)
 Gestionnaire de Messages dans une File d'attente (GMF en
Français ou QDMH en English) = INDISPENSABLE
 Actor Framework
 En Annexe : QDMH : indispensable pour vos projets
Octobre 2013 Programmation Avancée sous LabVIEW 60
Le modèle de projet QDMH
Octobre 2013 Programmation Avancée sous LabVIEW 61
 Queue Driven Message Handler (QDMH)
 LabVIEW 2012 : les modèles de projet LabVIEW via le gestionnaire
de projet.
V] Famille « Objet » : OOP
Octobre 2013 Programmation Avancée sous LabVIEW 62
 Evolution de la gestion des données vers OOP
Données
OOP
Programmation Objet sous LabVIEW
 Une classe est un ensemble de données (privées) et d’actions
(méthodes) qui permettent d’agir sur ces données
 + Concept : héritage, dispatch dynamique
 + Concept : encapsulation
Octobre 2013 Programmation Avancée sous LabVIEW 63
Programmation Objet sous LabVIEW
 OOP évolution de l’ancêtre AE (Action Engine)
 Registre à décalage devient données de la class
 Actions devient Méthodes (encapsulation)
Octobre 2013 Programmation Avancée sous LabVIEW 64
Action 1
= case 1
Action 2
= case 2
Action …
= case
1. Donnée = registre
2. Actions = états
Actions = méthodes = 1 vi
AE = Action Engine OOP
Quizz N°6
 OOP évite-t-elle « le bug » des accès concurrents – Race
Conditions?
Octobre 2013 Programmation Avancée sous LabVIEW 65
Data Out = ??
X = ?
Y= ?
Data In
X = 0
Y= 0
Résultat Quizz N°6
 Non (by data)
Démonstration code LabVIEW
Code téléchargeable sur le site MESULOG >> Société >> Présentations Techniques
www.mesulog.fr/presentations_techniques
Octobre 2013 Programmation Avancée sous LabVIEW 66
Objet by value vers by Ref
Octobre 2013 Programmation Avancée sous LabVIEW 67
Objet by value vers by Ref
 Remarque : par défaut by Value
 Possibilité : Utiliser la DVR pour créer une référence
 DVR + OOP by data = by Ref
Octobre 2013 Programmation Avancée sous LabVIEW 68
Quizz N°7
 OOP by Ref évite-t-elle « le bug » des accès concurrents –
Race Conditions?
Octobre 2013 Programmation Avancée sous LabVIEW 69
Résultat Quizz N°7
 Oui (by ref)
Démonstration code LabVIEW
Code téléchargeable sur le site MESULOG >> Société >> Présentations Techniques
www.mesulog.fr/presentations_techniques
Octobre 2013 Programmation Avancée sous LabVIEW 70
Conclusion : évolution pour LabVIEW
L’exagération nuit à l’évolution
S’adapter à un besoin pour éviter les bugs et ajouter des fonctionnalités
Octobre 2013 Programmation Avancée sous LabVIEW 71
Framework
Données
OOP
Liens
Plus de présentations techniques
www.mesulog.fr/presentations_techniques
National Instruments : luc desruelle's Blogue
Tutoriels developpez.com : luc Desruelle
Plus de livres
"LabVIEW programmation et applications" 3iéme édition, Dunod
Plus de National Instruments Francophone
Forum francophone NI LabVIEW
Forum francophone Autres produits NI
Communauté Francophone
Luc Desruelle | LinkedIn
Octobre 2013 Programmation Avancée sous LabVIEW 72
Questions
Octobre 2013 Programmation Avancée sous LabVIEW 73
Annexe 1
 Annexe 1
 Le modèle de projet QDMH
Octobre 2013 Programmation Avancée sous LabVIEW 74
Le modèle de projet QDMH
Octobre 2013 Programmation Avancée sous LabVIEW 75
 Queue Driven Message Handler (QDMH)
 LabVIEW 2012 : les modèles de projet LabVIEW via le gestionnaire
de projet.
Le modèle de projet QDMH
Octobre 2013 Programmation Avancée sous LabVIEW 76
 La structure repose sur un modèle producteur –
consommateur
 la boucle productrice : la structure évènementielle
 capture les actions utilisateurs, sur la face-avant, et produit le «
message » via une FIFO
 Le message est un cluster composé d’un état « case » et une
donnée facultative Data de type variant
 la boucle consommatrice : basée sur un modèle de machine
à états, dépile sur apparition les données de la FIFO.
Améliorer le QDMH
Octobre 2013 Programmation Avancée sous LabVIEW 77
 Gestion erreur : quitte l’application sur « erreur »
 Remplacer « Exit » par « Error »
 Ajouter un état « Error » dans la "Boucle de gestion de messages".
 Affichage de l'erreur
 Sauvegarde
 Filtrage si l'utilisateur le décide.
 N’affiche pas la version du logiciel
 Ajouter les VIs de gestion de version de LabVIEW
 La structure event driven sort sur erreur –
 Remplacer par un vi qui transfère l'erreur à la "Boucle de gestion de
messages" via la FIFO
 Supprimer le code "exemple«
 …
Votre Modèle
Octobre 2013 Programmation Avancée sous LabVIEW 78
 Distribuer votre modèle
 Partie 2/3 : Distribuer des modèles de projet personnalisés
avec le gestionnaire de projet LabVIEW - version Simple
 Partie 3/3 : Distribuer son Framework de projet, modèle de
projet personnalisé, avec le gestionnaire de projet LabVIEW -
version distribution personnalisée
Annexe 2
 Annexe 2
 IHM est en mémoire
Octobre 2013 Programmation Avancée sous LabVIEW 79
Mise à jour d’une IHM en mémoire
 Si l’IHM est en mémoire :
 les commandes et indicateurs – sur la face-avant - ont leur
propre copie des données
Octobre 2013 Programmation Avancée sous LabVIEW 80
Copie données
Operate Buffer
Transfer Buffer
Execution Buffer
Buffer de transfert =
protection
Mise à jour de l’IHM
Données exécution
du code
Copie données

Darwin appliqué à LabVIEW : l’évolution de la gestion des données

  • 1.
    www.mesulog.fr Darwin appliqué àLabVIEW : l’évolution de la gestion des données Luc DESRUELLE – Certifié LabVIEW Architect - MESULOG Evoluer pour s’adapter La loi du plus fort appliquée au concept « mémorisation » du flux de données : contrôle vers indicateur - Locale - Globale - FGV - AE – SEQ - DVR - OOP – SM - QDMH
  • 2.
    Avant de commencer Faire évoluer la présentation en fonction de vous  Vous pouvez m’interrompre  Détailler en fonction de vos demandes  Mes excuses pour les mots anglais = technique LV Octobre 2013 Programmation Avancée sous LabVIEW 2
  • 3.
    La société MESULOGen bref  Activité : Développement logiciel test et mesure  Compétences : LabVIEW (Windows, RT, PDA, DSC, FPGA), TestStand VeriStand  Localisation : Grenoble (Moirans, 38)  Partenaire National Instruments (2001)  Développeurs certifiés LabVIEW et TestStand Juin 2014 Programmation Avancée sous LabVIEW Partie II 3
  • 4.
    La société MESULOGen bref  www.mesulog.fr  Réalisations (article utilisateur)  Présentations techniques  LabVIEW  TestStand  VeriStand Octobre 2013 Programmation Avancée sous LabVIEW 4 Réalisations Société -> Présentations techniques
  • 5.
    La société MESULOGen bref  Ils nous ont fait confiance :  ALSTOM Grid  AREVA NP  CEA (Commissariat à l'Énergie Atomique)  CETIAT (Centre Technique des Industries Aérauliques et Thermiques)  CNES (Centre National d'Études Spatiales)  CNRS (Centre National de la Recherche Scientifique)  EDF  HONEYWELL Security  LNE (Laboratoire National d'Essais)  ONERA  PECHINEY  RADIALL  RENAULT  STMicroelectronics  THALES Alenia Space  THALES LCD ... Octobre 2013 Programmation Avancée sous LabVIEW 5
  • 6.
    Luc DESRUELLE Architecte Logiciel NI Forums Community CLA Leprésentateur Octobre 2013 Programmation Avancée sous LabVIEW 6 Community blogue https://decibel.ni.com/content/blogs/ Luc_Desruelle • Gif animé pour éviter du code • Fenêtre pas rectangulaire • Gestion IHM • Projet LabVIEW • OOP • Modbus • ….
  • 7.
     Co-auteur Livre« LabVIEW : programmation et applications »  3iéme Édition, Dunod 05/2015  Lien internet du livre  Auteurs : F. COTTET + M. PINARD + L. DESRUELLE  Chapitres 1 et 2 : prise en main de l’outil avec des exemples simples  Chapitre 3 : programmation avancée avec des techniques et architectures permettant au code d’être maintenable, évolutif, documenté et performant.  Chapitres 4, 5 et 6 : acquisition, analyse et présentation des données. Le présentateur Octobre 2013 Programmation Avancée sous LabVIEW 7
  • 8.
    « Toujours »le constat  Certaines « erreurs » sont acceptables… si « rares » Octobre 2013 Programmation Avancée sous LabVIEW 8
  • 9.
    Le code LabVIEWle plus célèbre Octobre 2013 Programmation Avancée sous LabVIEW 9 Spaghetti à la LabVIEW
  • 10.
    Votre avis Octobre 2013Programmation Avancée sous LabVIEW 10  Quelles sont les erreurs (programmation LabVIEW) ?
  • 11.
    Erreur des Spaghettissous « LabVIEW » 1. Style, écriture du code  Pas de style!  Documentation 2. Technique, Gestion des données  Trop de locale – Globale  Flux de données 3. Architecture, Structure application (Framework) :  Absence modèle de conception  Pas gestion d’erreur, Gestion arrêt du logiciel? 4. Gestion Projet  Version, SCC, bug, tâche  Test, analyse Octobre 2013 Programmation Avancée sous LabVIEW 11
  • 12.
    Nous n’aborderons pas Nous n’aborderons pas la gestion « projet »: Présentation LUGE 2013 et NIDays 2014 : Les outils qui nous veulent du bien Plus de temps pour développer en LabVIEW  Nous n’aborderons pas la gestion « style » Présentation LUGE 2016 et NIDays 2017: Avoir du style avec LabVIEW Octobre 2013 Programmation Avancée sous LabVIEW 12
  • 13.
    Nous aborderons  Lesdifférentes techniques de gestion des données  Mémoriser une donnée  Réutiliser une donnée déjà produite  Quand, comment, pourquoi utiliser certaines techniques ? Chapitre 3 du livre LabVIEW….  Pas les techniques d’échange de données :  Entre processus;  Entre boucles;  Entre applications. FIFO, notifier, Variable partagée, TCP, UDP, ActiveX, .Net, Network streams, DMA, Web service… Chapitre 6 du livre LabVIEW…. Octobre 2013 Programmation Avancée sous LabVIEW 13
  • 14.
    Sommaire : Darwinappliqué à LabVIEW I. Où trouver de l’aide? II. Histoire de la présentation III. L’Evolution : Mémorisation des Données IV. L’Evolution : Structures Application V. L’Evolution : Programmation Orientée Objet (OOP) Octobre 2013 Programmation Avancée sous LabVIEW 14
  • 15.
    I] Où trouverde l’aide ? Octobre 2013 Programmation Avancée sous LabVIEW 15
  • 16.
    Où trouver del’aide ?  La communauté travaille pour vous  2 Forums National Instruments Francophone  http://forums.ni.com/t5/Discussions-au-sujet-de-NI/bd-p/4171  http://forums.ni.com/t5/Discussions-au-sujet-des-autres/bd-p/4170  1 communauté Francophone  https://decibel.ni.com/content/community/regional/france/labview  Rencontre développeurs : cf LUGE  Mais aussi… l’ensemble des forums et communautés de NI  LabVIEW Development Best Practices  Large Applications : ni.com/largeapps Octobre 2013 Programmation Avancée sous LabVIEW 16
  • 17.
     Livre LabVIEW: programmation et applications  3iéme Édition, Dunod 05/2015  Lien internet du livre Livre Français Octobre 2013 Programmation Avancée sous LabVIEW 17 Chapitre 3 du livre = cette présentation (en plus court)
  • 18.
    II] Histoire dela présentation Octobre 2013 Programmation Avancée sous LabVIEW 18
  • 19.
    Histoire de Darwin Charles Robert Darwin ( 1809 – 1882)  Hypothèse : tous les êtres vivants ont un seul ancêtre commun  Les « êtres vivants » ont évolué et se sont adaptés  Processus connu sous le nom de « sélection naturelle » (la loi du plus fort) ou théorie de l’évolution. Octobre 2013 Programmation Avancée sous LabVIEW 19
  • 20.
     Humour  «Personnellement j’aime » le // entre  « être vivant » qui s’adapte (pour survire)  La gestion des données sous LabVIEW qui s’adapte (pour éviter « les problèmes »)  Evoluer pour s’adapter aux besoins Darwin appliquée à LabVIEW Octobre 2013 Programmation Avancée sous LabVIEW 20
  • 21.
     Comment etpourquoi la Mémorisation des données a-t-elle évoluée? Darwin appliquée à LabVIEW Octobre 2013 Programmation Avancée sous LabVIEW 21 Darwin LabVIEW Un seul ancêtre commun Contrôle (le) à tous les êtres vivants À toutes les techniques de mémorisation des Données S’adapter pour Survivre S’adapter pour Eviter les bugs La loi du plus fort Ajouter des fonctionnalités
  • 22.
    Histoire  Il étaitune fois…. Une donnée Octobre 2013 Programmation Avancée sous LabVIEW 22
  • 23.
    II] Evolution famille« données » Octobre 2013 Programmation Avancée sous LabVIEW 23
  • 24.
    Quizz N°1  Pourtransmettre la donnée « Data In », faut-il mieux connecter le contrôle sur : A. La variable locale de « Data Out » B. Le terminal de l’indicateur « Data Out » C. Le nœud de propriété implicite « value » de « Data Out » D. Le nœud de propriété par référence « value » de « Data Out » Octobre 2013 Programmation Avancée sous LabVIEW 24
  • 25.
    Expliquer la réponsedu Quizz N°1 L’explication de la réponse n’est pas si simple  Comme démontrer 𝑥 × 0 = 0 … Parce que  Avant de donner la véritable réponse :  Vous faire sentir (la réponse) par une mesure  Vous pouvez me croire… ou pas Octobre 2013 Programmation Avancée sous LabVIEW 25
  • 26.
    Expliquer la réponsedu Quizz N°1 Démonstration Octobre 2013 Programmation Avancée sous LabVIEW 26
  • 27.
    Expliquer la réponsedu Quizz N°1 Explication « simplifiée »  Définition Les nœuds de propriété :  Se synchronisent sur le thread « interface utilisateur ». Seul système d’exécution pas multithread (Bloquant)  Forcent à redessiner la face-avant à chaque appel (Lenteur)  Forcent la face-avant à être chargée en mémoire (les commandes et indicateurs auront plusieurs copies de données supplémentaires – diagramme et face-avant) Octobre 2013 Programmation Avancée sous LabVIEW 27
  • 28.
    Résultat Quizz N°1 Nœud de propriété  Copies donnée  Que Thread UI  Lenteur, bloquant  Force IHM en mémoire  Race Condition Octobre 2013 Programmation Avancée sous LabVIEW 28  Locale  Copies donnée  Tout les Threads  Race condition V.S.
  • 29.
    Réponse Quizz N°1 1.L’indicateur « Data Out » 2. La variable locale (copie buffer) 3. Le nœud de propriété implicite (thread UI + copie buffer) 4. Le nœud de propriété par référence (référence) Octobre 2013 Programmation Avancée sous LabVIEW 29 Eviter 3. et 4. juste pour « value »
  • 30.
    Quizz N°2  Pourtransmettre la donnée, faut-il mieux connecter le contrôle « Data In » sur : A. La variable locale de « Data Out » B. La globale « Data » Octobre 2013 Programmation Avancée sous LabVIEW 30
  • 31.
    Résultat Quizz N°2 Octobre2013 Programmation Avancée sous LabVIEW 31 Match Nul(presque)
  • 32.
    A éviter  Eviterles variables Locale – Globale - nœud de propriété  Copies des données (attention « Grosse Structure »)  Lenteurs  Pas de protection contre « Race Conditions »  Pas de gestion d’erreur  1 fois (OK) mais L’exagération nuit à l’évolution Octobre 2013 Programmation Avancée sous LabVIEW 32
  • 33.
    A éviter  Eviterles variables Locale – Globale - nœud de propriété Comment ???? Octobre 2013 Programmation Avancée sous LabVIEW 33
  • 34.
     FGV :Functional Global Variable ou LV2  Registre à décalage non initialisé, d’un vi non réentrant  Mémorise une valeur sur un Set (Write)  Retourne la valeur sur un Get (Read) FGV : Functional Global Variable Octobre 2013 Programmation Avancée sous LabVIEW 34
  • 35.
    Quizz N°3  Vousconnaissez tous?  Pourquoi le nom FGV ou variable LV2? Octobre 2013 Programmation Avancée sous LabVIEW 35
  • 36.
    Exemple FGV  ExempleFGV = Remplace la globale Octobre 2013 Programmation Avancée sous LabVIEW 36 2 états : > Set = Ecriture > Get = Lecture Mémorisation
  • 37.
    Race condition  Situationde compétition ????????????? Octobre 2013 Programmation Avancée sous LabVIEW 37
  • 38.
    Rappel « bug» Race condition  Situation de compétition  « Bug » Accès « concurrent » de 2 codes à la même variable.  Valeur « instable » de la variable Octobre 2013 Programmation Avancée sous LabVIEW 38 Pas X=1 et Y=1 Data Out = ?? X=0 et Y=0
  • 39.
    Quizz N°4  LaFGV évite-t-elle « le bug » des accès concurrents – Race Conditions? Octobre 2013 Programmation Avancée sous LabVIEW 39 Data Out = ?? X = ? Y= ? Data In X = 0 Y= 0
  • 40.
    Résultat Quizz N°4 Non Démonstration code LabVIEW Code téléchargeable sur le site MESULOG >> Société >> Présentations Techniques www.mesulog.fr/presentations_techniques Octobre 2013 Programmation Avancée sous LabVIEW 40
  • 41.
    Utilisation recommandée dela FGV  1 écriture  N Lectures Octobre 2013 Programmation Avancée sous LabVIEW 41
  • 42.
    Race condition  Commentéviter les Situations de compétition ?????????????  N écritures  N Lectures Octobre 2013 Programmation Avancée sous LabVIEW 42
  • 43.
     AE :Action Engine  Evolution de la FGV en ajoutant des actions,  Principe de l'encapsulation  La donnée reste dans la fonction logicielle = protection AE : Action Engine Octobre 2013 Programmation Avancée sous LabVIEW 43
  • 44.
    Exemple AE  ExempleAE  FGV + Actions  Code autonome – réutilisable – Gestion erreur Octobre 2013 Programmation Avancée sous LabVIEW 44 Code de l’action Liste des actions Mémorisation
  • 45.
    Quizz N°5  L’AEévite-t-elle « le bug » des accès concurrents – Race Conditions? Octobre 2013 Programmation Avancée sous LabVIEW 45 Data Out = ?? X = ? Y= ? Data In X = 0 Y= 0
  • 46.
    Résultat Quizz N°5 Oui, via l’encapsulation : rassembler les données et les méthodes au sein d'une même structure Démonstration code LabVIEW Code téléchargeable sur le site MESULOG >> Société >> Présentations Techniques www.mesulog.fr/presentations_techniques Octobre 2013 Programmation Avancée sous LabVIEW 46
  • 47.
    DVR : DataValue Reference  Manipulation de la référence de la donnée mais pas la données : pas de copie, pointeur zone mémoire Octobre 2013 Programmation Avancée sous LabVIEW 47 Data Copy Data Copy Data  Protection contre les accès concurrent Reference Reference Reference
  • 48.
    Quizz N°5  LaDVR (Data Value Reference) permet-elle? : A. D’éviter les copies de données (« grosse structure ») B. De protéger contre les accès concurrents – Race Conditions C. De gérer les erreurs Octobre 2013 Programmation Avancée sous LabVIEW 48
  • 49.
    Résultat Quizz N°5 Réponse A, B et C : Oui Démonstration code LabVIEW Code téléchargeable sur le site MESULOG >> Société >> Présentations Techniques www.mesulog.fr/presentations_techniques Octobre 2013 Programmation Avancée sous LabVIEW 49
  • 50.
    Synthèse évolution «données » Octobre 2013 Programmation Avancée sous LabVIEW 50 Données 1 fois (OK) mais L’exagération nuit à l’évolution S’adapter à un besoin • N écritures • Code autonome • Réutilisable • Gestion erreur personnalisée
  • 51.
    Synthèse évolution «données » Octobre 2013 Programmation Avancée sous LabVIEW 51 Fonctionnalités - Performance Simplicité d’utilisation
  • 52.
    Évolution structure application Octobre2013 Programmation Avancée sous LabVIEW 52  Toutes les techniques permettent de gérer des données  Pas des applications
  • 53.
    IV] Famille «structure application » Octobre 2013 Programmation Avancée sous LabVIEW 53  Evolution techniques pour gérer les données vers une structure pour gérer les applications Framework Données
  • 54.
     Rappel l’ActionEngine (AE) :  Réalise une action sur la données (exemple X+1 ou Y+1)  Puis fin  Jusqu’au prochain appel de la fonction logicielle De l’action à l’état Octobre 2013 Programmation Avancée sous LabVIEW 54
  • 55.
     Modèle «Machine à états », basé sur diagramme états- transitions:  Etats = actions à réaliser  Chaque section de code détermine la transition suivante  Découpage clair des tâches à effectuer  Ne « sort » du code que si fin du programme principal Pour une application : Machine à états Octobre 2013 Programmation Avancée sous LabVIEW 55
  • 56.
    Machine à états Tout le monde connait cette technique avec LabVIEW? Octobre 2013 Programmation Avancée sous LabVIEW 56
  • 57.
    SM la Machineà états Octobre 2013 Programmation Avancée sous LabVIEW 57  La Machine à états, ou State Machine (SM), est une structure d’application STATE Registre à décalage pour les transitions d’états Case structure = un pour chaque état STATE = Etat ? Registre à décalage pour la mémorisation des données Execution du code de l'état NEXT STATE
  • 58.
    Exemple code LabVIEWde la SM  Démonstration Octobre 2013 Programmation Avancée sous LabVIEW 58
  • 59.
    Synthèse de laMachine à états  Fondamentale du développement logiciel LabVIEW  Code simple, documenté et intuitif  Point faible : peut perdre des états si en même temps  Idées d’évolutions ? Octobre 2013 Programmation Avancée sous LabVIEW 59
  • 60.
    Autres évolutions «Framework »  Quelques exemples disponibles  Producteur/consommateur avec File d’attente (Queue)  Boite de dialogue avec structure évènementielle (event driven)  Gestionnaire de Messages dans une File d'attente (GMF en Français ou QDMH en English) = INDISPENSABLE  Actor Framework  En Annexe : QDMH : indispensable pour vos projets Octobre 2013 Programmation Avancée sous LabVIEW 60
  • 61.
    Le modèle deprojet QDMH Octobre 2013 Programmation Avancée sous LabVIEW 61  Queue Driven Message Handler (QDMH)  LabVIEW 2012 : les modèles de projet LabVIEW via le gestionnaire de projet.
  • 62.
    V] Famille «Objet » : OOP Octobre 2013 Programmation Avancée sous LabVIEW 62  Evolution de la gestion des données vers OOP Données OOP
  • 63.
    Programmation Objet sousLabVIEW  Une classe est un ensemble de données (privées) et d’actions (méthodes) qui permettent d’agir sur ces données  + Concept : héritage, dispatch dynamique  + Concept : encapsulation Octobre 2013 Programmation Avancée sous LabVIEW 63
  • 64.
    Programmation Objet sousLabVIEW  OOP évolution de l’ancêtre AE (Action Engine)  Registre à décalage devient données de la class  Actions devient Méthodes (encapsulation) Octobre 2013 Programmation Avancée sous LabVIEW 64 Action 1 = case 1 Action 2 = case 2 Action … = case 1. Donnée = registre 2. Actions = états Actions = méthodes = 1 vi AE = Action Engine OOP
  • 65.
    Quizz N°6  OOPévite-t-elle « le bug » des accès concurrents – Race Conditions? Octobre 2013 Programmation Avancée sous LabVIEW 65 Data Out = ?? X = ? Y= ? Data In X = 0 Y= 0
  • 66.
    Résultat Quizz N°6 Non (by data) Démonstration code LabVIEW Code téléchargeable sur le site MESULOG >> Société >> Présentations Techniques www.mesulog.fr/presentations_techniques Octobre 2013 Programmation Avancée sous LabVIEW 66
  • 67.
    Objet by valuevers by Ref Octobre 2013 Programmation Avancée sous LabVIEW 67
  • 68.
    Objet by valuevers by Ref  Remarque : par défaut by Value  Possibilité : Utiliser la DVR pour créer une référence  DVR + OOP by data = by Ref Octobre 2013 Programmation Avancée sous LabVIEW 68
  • 69.
    Quizz N°7  OOPby Ref évite-t-elle « le bug » des accès concurrents – Race Conditions? Octobre 2013 Programmation Avancée sous LabVIEW 69
  • 70.
    Résultat Quizz N°7 Oui (by ref) Démonstration code LabVIEW Code téléchargeable sur le site MESULOG >> Société >> Présentations Techniques www.mesulog.fr/presentations_techniques Octobre 2013 Programmation Avancée sous LabVIEW 70
  • 71.
    Conclusion : évolutionpour LabVIEW L’exagération nuit à l’évolution S’adapter à un besoin pour éviter les bugs et ajouter des fonctionnalités Octobre 2013 Programmation Avancée sous LabVIEW 71 Framework Données OOP
  • 72.
    Liens Plus de présentationstechniques www.mesulog.fr/presentations_techniques National Instruments : luc desruelle's Blogue Tutoriels developpez.com : luc Desruelle Plus de livres "LabVIEW programmation et applications" 3iéme édition, Dunod Plus de National Instruments Francophone Forum francophone NI LabVIEW Forum francophone Autres produits NI Communauté Francophone Luc Desruelle | LinkedIn Octobre 2013 Programmation Avancée sous LabVIEW 72
  • 73.
    Questions Octobre 2013 ProgrammationAvancée sous LabVIEW 73
  • 74.
    Annexe 1  Annexe1  Le modèle de projet QDMH Octobre 2013 Programmation Avancée sous LabVIEW 74
  • 75.
    Le modèle deprojet QDMH Octobre 2013 Programmation Avancée sous LabVIEW 75  Queue Driven Message Handler (QDMH)  LabVIEW 2012 : les modèles de projet LabVIEW via le gestionnaire de projet.
  • 76.
    Le modèle deprojet QDMH Octobre 2013 Programmation Avancée sous LabVIEW 76  La structure repose sur un modèle producteur – consommateur  la boucle productrice : la structure évènementielle  capture les actions utilisateurs, sur la face-avant, et produit le « message » via une FIFO  Le message est un cluster composé d’un état « case » et une donnée facultative Data de type variant  la boucle consommatrice : basée sur un modèle de machine à états, dépile sur apparition les données de la FIFO.
  • 77.
    Améliorer le QDMH Octobre2013 Programmation Avancée sous LabVIEW 77  Gestion erreur : quitte l’application sur « erreur »  Remplacer « Exit » par « Error »  Ajouter un état « Error » dans la "Boucle de gestion de messages".  Affichage de l'erreur  Sauvegarde  Filtrage si l'utilisateur le décide.  N’affiche pas la version du logiciel  Ajouter les VIs de gestion de version de LabVIEW  La structure event driven sort sur erreur –  Remplacer par un vi qui transfère l'erreur à la "Boucle de gestion de messages" via la FIFO  Supprimer le code "exemple«  …
  • 78.
    Votre Modèle Octobre 2013Programmation Avancée sous LabVIEW 78  Distribuer votre modèle  Partie 2/3 : Distribuer des modèles de projet personnalisés avec le gestionnaire de projet LabVIEW - version Simple  Partie 3/3 : Distribuer son Framework de projet, modèle de projet personnalisé, avec le gestionnaire de projet LabVIEW - version distribution personnalisée
  • 79.
    Annexe 2  Annexe2  IHM est en mémoire Octobre 2013 Programmation Avancée sous LabVIEW 79
  • 80.
    Mise à jourd’une IHM en mémoire  Si l’IHM est en mémoire :  les commandes et indicateurs – sur la face-avant - ont leur propre copie des données Octobre 2013 Programmation Avancée sous LabVIEW 80 Copie données Operate Buffer Transfer Buffer Execution Buffer Buffer de transfert = protection Mise à jour de l’IHM Données exécution du code Copie données