techniques de programmation avancée labview : gestion des données de la locale vers la dvr
DESCRIPTION
Journées techniques LabVIEW National Instruments Présentation réalisée lors des Journées techniques LabVIEW, par Luc Desruelle - Technique de programmation avancée : gestion des données. Sommaire : Où trouver de l’aide? Quelques règles de style, LabVIEW Style Checklist Quelques techniques d’architecture sous LabVIEW, pour la gestion des données Contrôle, Indicateur VS Locale VS Globale VS Nœud propriété FGV : Functional Global Variable AE : Action Engine OOP et SM – QDMH : Object-Oriented Programming et structure DVR : Data Value ReferenceTRANSCRIPT
www.mesulog.fr
Programmation Avancée sous LabVIEW Partie I : Gestion des données : De la Locale vers la DVR…
Luc DESRUELLE – Certifié LabVIEW Architect - MESULOG
Journée Technique LabVIEW du 15/10/2013
La société MESULOG en bref
Activité : Développement logiciel test et mesure
Compétences : LabVIEW (Windows, RT, DSC, PDA, FPGA),
TestStand
VeriStand
Localisation : Grenoble (Moirans, 38)
Partenaire National Instruments (2001)
Développeurs certifiés LabVIEW et TestStand
www.mesulog.fr (exemples de réalisation)
Octobre 2013 Programmation Avancée sous LabVIEW 2
La société MESULOG en bref
www.mesulog.fr
Exemples de réalisation
Exemples de présentation
technique
LabVIEW
TestStand
Octobre 2013 Programmation Avancée sous LabVIEW 3
Réalisations
Société -> Présentations techniques
La société MESULOG en bref
Ils nous ont fait confiance : AREVA NP
ALSTOM Grid
BEAMIND
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 4
Luc DESRUELLE
Chef Projet
FORUMS
CLA
Le présentateur
Octobre 2013 Programmation Avancée sous LabVIEW 5
Le constat
Du code LabVIEW … au code Spaghetti
Octobre 2013 Programmation Avancée sous LabVIEW 6
Certaines « erreurs » sont acceptables…
si « rares »
Octobre 2013 Programmation Avancée sous LabVIEW 7
Syndrome du plat de spaghettis
Définition : Code qui ne permet pas de déterminer le
qui, le quoi et le comment d'une prise de contrôle par
une portion de programme
Code peu clair - complexe – pas documenté – pas
maintenable – pas de mise au point
Le code est donc plus long à mettre à jour
http://fr.wikipedia.org/wiki/Programmation_spaghetti
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
Erreurs de « débutant » sous LabVIEW?
Ne pas savoir où trouver de l’aide
Ne pas connaître les « bonnes règles » de
programmation
Pas d’Analyse - ni Test unitaire du code source
Pas de gestion d’erreur
Pas de sous fonction (sous vi’s)
Pas de documentation du code source
…..
Octobre 2013 Programmation Avancée sous LabVIEW 10
Erreurs de programmation
Le style (la forme)
Octobre 2013 Programmation Avancée sous LabVIEW 11
2 types
La technique ou
architecture (le fond)
Sommaire
Où trouver de l’aide?
Quelques règles de style
Quelques techniques d’architecture sous LabVIEW, pour
la gestion des données
Contrôle, Indicateur, Locale, Globale
FGV : Functional Global Variable
AE : Action Engine
OOP et SM – QDMH
DVR : Data Value Reference
Octobre 2013 Programmation Avancée sous LabVIEW 12
Où trouver de l’aide ?
Octobre 2013 Programmation Avancée sous LabVIEW 13
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
Des articles sur le site de NI + LAVA
Octobre 2013 Programmation Avancée sous LabVIEW 14
Via la Communauté Francophone https://decibel.ni.com/content/community/regional/france/labview?view=all#/?tagSet=1850
En région : communauté LUGE (Rhône-Alpes) https://decibel.ni.com/content/community/regional/france/labview?view=all#/?tagSet=1780
Rencontre - Echange entre développeurs
LUGE - développeurs Rhône-Alpes
Octobre 2013 Programmation Avancée sous LabVIEW 15
Quelques Règles de Style
Octobre 2013 Programmation Avancée sous LabVIEW 16
de Base…
L’indispensable « Checklist »
Document : LabVIEW Style Checklist
Regroupe les points à vérifier
Front Panel Checklist
Block Diagram Checklist
VI Checklist
Octobre 2013 Programmation Avancée sous LabVIEW 17
Quelques rappels
Ecriture du code de la gauche vers la droite
Gestion des erreurs Erreur In et Out
Connecteurs 4 x 2 x 2 X 4
Icône « explicite »
Remplir Aide Contextuelle ctrl + H
Commentaires développeur
Octobre 2013 Programmation Avancée sous LabVIEW 18
Quelques Règles d’architecture
Octobre 2013 Programmation Avancée sous LabVIEW 19
Ma présentation …
Dans les présentations du matin de l’équipe NI…
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 20
Expliquer la réponse du Quizz N°1
L’explication de la réponse n’est pas si simple :
Définition : Les nœuds de propriété se synchronisent sur
le thread « interface utilisateur »
UI : Seul système d’exécution pas multithread, donc si occupé
provoque des lenteurs
La face-avant du vi sera chargée en mémoire
Lexique : UI : User Interface ou Interface Utilisateur ou IHM
Article détaillé : Multitâche dans LabVIEW
http://zone.ni.com/reference/fr-XX/help/371361K-0114/lvconcepts/multitasking_in_labview/
Octobre 2013 Programmation Avancée sous LabVIEW 21
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 22
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
Résultat Quizz N°1
Nœud de propriété
Copie donnée « Transfert
Buffer »
Que Thread UI
Copie donnée « Operate
Buffer »
Force IHM en mémoire
Race Condition
Octobre 2013 Programmation Avancée sous LabVIEW 23
Locale
Copie donnée « Transfert
Buffer »
Tout les Threads
Copie donnée « Operate
Buffer » seulement si IHM
en mémoire
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 24
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 25
Résultat Quizz N°2
Octobre 2013 Programmation Avancée sous LabVIEW 26
Locale
Copie donnée « Transfert
Buffer »
Copie donnée « Operate
Buffer » seulement si IHM
en mémoire
Race Condition
V.S.
Globale
Copie donnée « Transfert
Buffer »
Race Condition
Eviter les variables Locale – Globale - nœud de propriété
Copie de données
Pas de protection contre « Race Conditions »
Pas de gestion d’erreur
Match Nul?
Race condition
Situation de compétition ?????????????
Octobre 2013 Programmation Avancée sous LabVIEW 27
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 28
Pas X=1 et Y=1
Data Out = ??
X=0 et
Y=0
Quizz N°3
Quelle est la différence entre une FGV et une AE?
FGV = Functional Global Variables = variable globale
fonctionnelle
AE = Action Engine
Octobre 2013 Programmation Avancée sous LabVIEW 29
FGV
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)
AE
Ajoute des actions, principe de l'encapsulation
Réponse Quizz N°3
Octobre 2013 Programmation Avancée sous LabVIEW 30
Exemple FGV - Réponse Quizz N°3
Exemple FGV = Remplace la globale
Octobre 2013 Programmation Avancée sous LabVIEW 31
2 états :
> Set = Ecriture
> Get = Lecture
Mémorisation
Exemple AE - Réponse Quizz N°3
Exemple AE
FGV + Actions
Code autonome – réutilisable – Gestion erreur
Octobre 2013 Programmation Avancée sous LabVIEW 32
Code de
l’action
Liste des
actions Mémorisation
Quizz N°4
La FGV évite-t-elle « le bug » des accès concurrents –
Race Conditions?
Octobre 2013 Programmation Avancée sous LabVIEW 33
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 34
Quizz N°5
L’AE évite-t-elle « le bug » des accès concurrents – Race
Conditions?
Octobre 2013 Programmation Avancée sous LabVIEW 35
Data Out = ??
X = ?
Y= ? Data In
X = 0
Y= 0
Résultat Quizz N°5
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 36
Quizz N°6
La DVR : Data Value Reference permet :
A. D’éviter les copies de données
B. De protéger contre les accès concurrents – Race Conditions
Octobre 2013 Programmation Avancée sous LabVIEW 37
Résultat Quizz N°6
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 38
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 39
Data Copy
Data Copy
Data
Reference
Reference
Reference
Protection contre les
accès concurrent
Questions
Octobre 2013 Programmation Avancée sous LabVIEW 40