40
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

Programmation Avancée sous LabVIEW

  • Upload
    vutuyen

  • View
    256

  • Download
    6

Embed Size (px)

Citation preview

Page 1: Programmation Avancée sous LabVIEW

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

Page 2: Programmation Avancée sous LabVIEW

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

Page 3: Programmation Avancée sous LabVIEW

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

Page 4: Programmation Avancée sous LabVIEW

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

Page 5: Programmation Avancée sous LabVIEW

Luc DESRUELLE

Chef Projet

FORUMS

CLA

Le présentateur

Octobre 2013 Programmation Avancée sous LabVIEW 5

Page 6: Programmation Avancée sous LabVIEW

Le constat

Du code LabVIEW … au code Spaghetti

Octobre 2013 Programmation Avancée sous LabVIEW 6

Page 7: Programmation Avancée sous LabVIEW

Certaines « erreurs » sont acceptables…

si « rares »

Octobre 2013 Programmation Avancée sous LabVIEW 7

Page 8: Programmation Avancée sous LabVIEW

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

Page 9: Programmation Avancée sous LabVIEW

Le code LabVIEW le plus célèbre

Octobre 2013 Programmation Avancée sous LabVIEW 9

Spaghetti à la LabVIEW

Page 10: Programmation Avancée sous 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

Page 11: Programmation Avancée sous LabVIEW

Erreurs de programmation

Le style (la forme)

Octobre 2013 Programmation Avancée sous LabVIEW 11

2 types

La technique ou

architecture (le fond)

Page 12: Programmation Avancée sous LabVIEW

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

Page 13: Programmation Avancée sous LabVIEW

Où trouver de l’aide ?

Octobre 2013 Programmation Avancée sous LabVIEW 13

Page 14: Programmation Avancée sous LabVIEW

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

Page 15: Programmation Avancée sous LabVIEW

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

Page 16: Programmation Avancée sous LabVIEW

Quelques Règles de Style

Octobre 2013 Programmation Avancée sous LabVIEW 16

de Base…

Page 17: Programmation Avancée sous LabVIEW

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

Page 18: Programmation Avancée sous LabVIEW

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

Page 19: Programmation Avancée sous LabVIEW

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…

Page 20: Programmation Avancée sous LabVIEW

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

Page 21: Programmation Avancée sous LabVIEW

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

Page 22: Programmation Avancée sous LabVIEW

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

Page 23: Programmation Avancée sous LabVIEW

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.

Page 24: Programmation Avancée sous LabVIEW

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 »

Page 25: Programmation Avancée sous LabVIEW

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

Page 26: Programmation Avancée sous LabVIEW

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?

Page 27: Programmation Avancée sous LabVIEW

Race condition

Situation de compétition ?????????????

Octobre 2013 Programmation Avancée sous LabVIEW 27

Page 28: Programmation Avancée sous LabVIEW

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

Page 29: Programmation Avancée sous LabVIEW

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

Page 30: Programmation Avancée sous LabVIEW

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

Page 31: Programmation Avancée sous LabVIEW

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

Page 32: Programmation Avancée sous LabVIEW

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

Page 33: Programmation Avancée sous LabVIEW

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

Page 34: Programmation Avancée sous LabVIEW

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

Page 35: Programmation Avancée sous LabVIEW

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

Page 36: Programmation Avancée sous LabVIEW

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

Page 37: Programmation Avancée sous LabVIEW

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

Page 38: Programmation Avancée sous LabVIEW

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

Page 39: Programmation Avancée sous LabVIEW

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

Page 40: Programmation Avancée sous LabVIEW

Questions

Octobre 2013 Programmation Avancée sous LabVIEW 40