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 Reference
Paris Web 2015 - Atelier desendettement javascript
Techniques de programmation avancée LabVIEW : gestion des données de la locale vers la DVR
1. Programmation Avancée sous LabVIEW
Partie I : Gestion des données : De la Locale vers la DVR…
Journée Technique LabVIEW du 15/10/2013
Luc DESRUELLE – Certifié LabVIEW Architect - MESULOG
www.mesulog.fr
2. 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
3. La société MESULOG en bref
www.mesulog.fr
Exemples de réalisation
Réalisations
Exemples de présentation
technique
LabVIEW
TestStand
Société -> Présentations techniques
Octobre 2013
Programmation Avancée sous LabVIEW
3
4. La société MESULOG en bref
Ils nous ont fait confiance :
Octobre 2013
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
...
Programmation Avancée sous LabVIEW
4
6. Le constat
Du code LabVIEW … au code Spaghetti
Octobre 2013
Programmation Avancée sous LabVIEW
6
7. Certaines « erreurs » sont acceptables…
si « rares »
Octobre 2013
Programmation Avancée sous LabVIEW
7
8. 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
9. Le code LabVIEW le plus célèbre
Spaghetti à la LabVIEW
Octobre 2013
Programmation Avancée sous LabVIEW
9
10. 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
11. Erreurs de programmation
2 types
Le style (la forme)
Octobre 2013
La technique ou
architecture (le fond)
Programmation Avancée sous LabVIEW
11
12. Sommaire
Où trouver de l’aide?
Quelques règles de style
Quelques techniques d’architecture sous LabVIEW, pour
la gestion des données
Octobre 2013
Contrôle, Indicateur, Locale, Globale
FGV : Functional Global Variable
AE : Action Engine
OOP et SM – QDMH
DVR : Data Value Reference
Programmation Avancée sous LabVIEW
12
13. Où trouver de l’aide ?
Octobre 2013
Programmation Avancée sous LabVIEW
13
14. Où trouver de l’aide ?
La communauté travaille pour vous
2 Forums National Instruments Francophone
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
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
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
15. LUGE - développeurs Rhône-Alpes
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)
Octobre 2013
https://decibel.ni.com/content/community/regional/france/labview?view=all#/?tagSet=1780
Rencontre - Echange entre développeurs
Programmation Avancée sous LabVIEW
15
16. Quelques Règles de Style
de Base…
Octobre 2013
Programmation Avancée sous LabVIEW
16
17. L’indispensable « Checklist »
Document : LabVIEW Style Checklist
Regroupe les points à vérifier
Octobre 2013
Front Panel Checklist
Block Diagram Checklist
VI Checklist
Programmation Avancée sous LabVIEW
17
18. 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
19. Quelques Règles d’architecture
Ma présentation …
Dans les présentations du matin de l’équipe NI…
Octobre 2013
Programmation Avancée sous LabVIEW
19
20. Quizz N°1
Pour transmettre la donnée « Data In », faut-il mieux
connecter le contrôle sur :
A.
B.
C.
D.
Octobre 2013
La variable locale de « Data Out »
Le terminal de l’indicateur « Data Out »
Le nœud de propriété implicite « value » de « Data Out »
Le nœud de propriété par référence « value » de « Data Out »
Programmation Avancée sous LabVIEW
20
21. 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
22. 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
Mise à jour de l’IHM
Operate Buffer
Copie données
Buffer de transfert =
protection
Transfer Buffer
Copie données
Données exécution
du code
Octobre 2013
Execution Buffer
Programmation Avancée sous LabVIEW
22
23. 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
Locale
V.S.
Copie donnée « Transfert
Buffer »
Tout les Threads
Copie donnée « Operate
Buffer » seulement si IHM
en mémoire
Race condition
Programmation Avancée sous LabVIEW
23
24. 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)
Eviter 3. et 4. juste
pour « value »
Octobre 2013
Programmation Avancée sous LabVIEW
24
25. Quizz N°2
Pour transmettre la donnée, faut-il mieux connecter le
contrôle « Data In » sur :
A.
B.
Octobre 2013
La variable locale de « Data Out »
La globale « Data »
Programmation Avancée sous LabVIEW
25
26. Résultat Quizz N°2
Globale
Copie donnée « Transfert
Buffer »
V.S.
Locale
Race Condition
Copie donnée « Transfert
Buffer »
Copie donnée « Operate
Buffer » seulement si IHM
en mémoire
Race Condition
Match Nul?
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
Octobre 2013
Programmation Avancée sous LabVIEW
26
28. Rappel « bug » Race condition
Situation de compétition
« Bug » Accès « concurrent » de 2 codes à la même
variable.
Valeur « instable » de la variable
X=0 et
Y=0
Pas X=1 et Y=1
Data Out = ??
Octobre 2013
Programmation Avancée sous LabVIEW
28
29. 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
30. Réponse Quizz N°3
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
Octobre 2013
Ajoute des actions, principe de l'encapsulation
Programmation Avancée sous LabVIEW
30
31. Exemple FGV - Réponse Quizz N°3
Exemple FGV = Remplace la globale
Mémorisation
2 états :
> Set = Ecriture
> Get = Lecture
Octobre 2013
Programmation Avancée sous LabVIEW
31
32. Exemple AE - Réponse Quizz N°3
Exemple AE
FGV + Actions
Code autonome – réutilisable – Gestion erreur
Liste des
actions
Mémorisation
Code de
l’action
Octobre 2013
Programmation Avancée sous LabVIEW
32
33. Quizz N°4
La FGV évite-t-elle « le bug » des accès concurrents –
Race Conditions?
Data In
X=0
Y= 0
Data Out = ??
X=?
Y= ?
Octobre 2013
Programmation Avancée sous LabVIEW
33
34. 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
35. Quizz N°5
L’AE évite-t-elle « le bug » des accès concurrents – Race
Conditions?
Data Out = ??
X=?
Y= ?
Data In
X=0
Y= 0
Octobre 2013
Programmation Avancée sous LabVIEW
35
36. 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
37. Quizz N°6
La DVR : Data Value Reference permet :
A.
B.
Octobre 2013
D’éviter les copies de données
De protéger contre les accès concurrents – Race Conditions
Programmation Avancée sous LabVIEW
37
38. 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
39. 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
Data
Data Copy
Reference
Data Copy
Reference
Reference
Protection contre les
accès concurrent
Octobre 2013
Programmation Avancée sous LabVIEW
39