Transcript LabVIEW

LabVIEW

Affichage + Fichier

ME 2

e

semestre

rev. 14.3

Christophe Salzmann

Module 3

Gestion des erreurs •

Fichier •

Affichage •

Acquisition de signaux

3

Virtual instrument

•   Le VI principal est généralement constitué d'une boucle soit pressé

while

qui effectue certaine opérations jusqu'à ce que le bouton STOP int main (void) { double R; int slider, stop; do { cin>> Slider; R=(double)(rand()%100)/100.0; cout << A_B (slider,R); usleep(100*1000); // 100 ms cin>>stop; } while (!stop); return 0; } 4

Dataflow

•   •   Pour être exécuté un noeud doit avoir toutes ses entrées définies Deux noeuds indépendants sont exécutés en parallèle 5

Dataflow

•   •   Pour être exécuté un noeud doit avoir toutes ses entrées définies Deux noeuds indépendants sont exécutés en parallèle 6

Gestion des Erreurs

La gestion des erreurs est primordiale en LabVIEW de mêmq quepour dans les autres languages

LabVIEW utilise un

error cluster

pour la gestion des erreurs.

Right-click

sur le bord droit d'un

error cluster

pour avoir une information détaillés sur l'erreur courante

Error cluster

Status:

true

error

false

no error Code:

0

no error

>0

warning code

<0

error code Source:

additional info

7

Gestion des Erreurs

in !

out !

Par convention les gauche du

errors clusters connector pane

. sont connectés en bas à droit et à Assurez vous que par défaut le

cluster error

d'entrée est défini comme à

no error

. Diagram standard Dans le

diagram

, s'il y a une erreur elle doit être directement passée au

cluster

de sortie et aucun code ne sera exécuté. S'il n'y a pas d'erreur d'entrée, à vous de faire la gestion interne adéquate 8

Gestion des Erreurs

Chainez les Vis à l'aide des

errors

pour contrôler l'ordre d'exécution des VIs.

Dans les boucles (for, while), utilisez un

shift-registers

pour mettre à jour l'état des erreurs à chaque itération. Note: le

cluster error

peut être directement mixé avec un

boolean

et/ou connecté à la condition de terminaison de la boucle. 9

Gestion des Erreurs

De manière similaire aux exceptions c++, LabVIEW à un moyen pour afficher automatiquement les message d'erreurs si le connecteur d'erreur en sortie n'est pas connecté. Cette option peut être désactivée via les propriétés du VI (right click sur l'icone du VI)

From previous slide

Nothing!

!

10

Ordre d'exécution ?

Dataflow order

11

Ordre d'exécution ?

Dataflow order

Exatement l'opposé de ce qui est attendu et voulu!

Dans l'exemple ci-dessous l'ordre d'exécution ne peut PAS être determiné en regardant le

diagram

! Le VI doit être exécuté pour déterminer la chronologie des 3 appels paralleles car il n'y a aucune dépendance temporelle entre ces appels . ➂ ➁ ➀ Comment forcer l'exécution? 12

Dataflow order

Utiliser le fils d'erreur pour définir l'ordre d'exécution Comment faire si le VI

SysExec

n'avait pas de connecteurs d'erreur ? 13

Dataflow order

Utiliser une structure

sequence

pour définir l'ordre d'exécution

Risque de perturber le flot optimale de LabVIEW

14

Dataflow order

Ordre d'exécution

Créer un sub-vi avec un cluster d'erreur in et out Just pass the error

15

Fichiers

La gestion des fichier en LabVIEW est très similaire à celle de c/c++, C'est juste plus simple

J

!

•   •   •   •   LabVIEW emploie les appels OS standards Les règles sont les mêmes: accès, permission, quota, etc. Même type de gestions que le C/C++ LabVIEW gère aussi bien les fichiers au format

text

or

binary

File path "HD/myfiles/a.txt" String to File path "HD/myfiles/b.txt" File reference 0x2486172920 16

Fichiers

Path Reference

Open/create/replace file !

Le chemin ( path) doit être défini sinon un dialogue sera affiché. Plusieurs options peuvent être définie ( create/ replace/etc.

)

Close file !

Write to text file !

Option pour adapter le caractère de fin de ligne à la plateforme courante.

Read from text file !

Spécifie le nombre de caractères à lire, -1 -> tout le fichier Adapte le caractère de fin de ligne à la plateforme courante.

ofstream f; f.open ("a.txt"); f.close() f<<"Hello World!"; f.read(buffer,lenght); f.seekg (0, ios::end); length = f.tellg(); f.seekg (0, ios::beg); 17

Fichiers

Prepend array size Data format

Write to binary file !

Permet d'écrire des données binaires, p.ex. un tableau de 3 éléments, la taille (3) sera écrite avant les données du tableau. Pour un tableau multidimensionnel le VI écrira plusieurs tailles 0000 000 3 3 elements 4061 D666 6666 6666 142.7 405E 7333 3333 3333 121.8 C037 4CCC CCCC CCCD -23.3

Read from binary file !

Data format défini comment interpréter les données binaires lues sur le disque f.open("b.txt", fstream::bin ); double A[]= {142.7, 121.8, -23.3}; f<

Files I/O – format & endianess

•   •   •   •   •   •   •  

Endianness

has been invented by mad computer scientists to annoy freshman students - and others as well. It is a source of bugs, we should not have to care about such an issue… Endianness defines how data is ordered in memory and thus on disk. It is similar to writing: some languages write from left to right and others from right to left. There is no issue as long as direction is known! Big endian goes from right to left, the Most Significant Byte first

Little endian goes from right to left

(most used, x86), the Least Significant Byte first The smallest unit a processor reads/write is (generally) a byte/char.

little endian

A

!

B

!

1 Byte memory access big endian

A !

little endian: A big endian: A C

!

•   When the processor writes a longer value, ex. an integer (4 bytes), the order of the writing matters.

little endian

A " B "

big endian

A !

B !

C !

D !

little endian: CDBA big endian: ABCD 7 " A " D " F " C " E " 8 " D " 2 " 4 "

4 Bytes memory access

19

String format Default values String format

Fichiers

Format into (text) File !

Converti les entrées en une

string

conformément au

string format

et écrit cette

string

dans un fichier

Scan from (text) file !

Lit un fichier et interprète les entrées conformément au

string format

Les valeurs par défaut (

Default values

) seront utilisées en cas d'erreur de conversion. f.open("a.txt"); f<<"sinus"<<100<<2.5; a.txt sinus, 100, 2.5

double D = NaN; string S; boolean B; int I=-1; f>>D>>S>>B>>I; 20

Fichiers

Double format delimiter delimiter format

Write Spreadsheet to File !

Ex. Converti le tableau de double en une

string

conformément au

Double format

et écrit cette

string

dans un fichier

Read from Spreadsheet File !

Lit un fichier tableur et interprète les entrées conformément au

format

et

delimiter

choisi double A = {3.4, 2.1, 6.8}; string F = "%.3f"; string P = "a.txt"; S = WriteSpreadSheetToFile (P,A,F,','); double A[]; String D = ','; string P = "a.txt"; A = ReadFromSpreadSheetFile (P,'double',D); 21

Fichiers

Build path !

home/me/myFiles/Prj/LV1.vi Folders list " Files list " Is a directory ?

" " Lastest modif.

Strip path !

List folders !

Liste tous le fichiers et dossiers d'un chemin donné

File/Dir info !

Returne les infos sur pour unfichier/dossier donné

Additional utilities libraries

Preferences " XML " ZIP " Image "

Path constants !

This VI " Default " Temporary " Get System Directory " 22

This VI path "

Fichiers – exemple complet

home/me/myFiles/ demo.txt error " Construis un chemin de fichier basé sur l'emplacement du VI courant Crèe (ou remplace) un nouveau fichier Lit l'heure courante et l'ajoute au fichier, ajoute '\r' à la suite Ajoute "sinus 100 2.5" au fichier Ferme le fichier Affiche le cluster d'erreur string path = LV_GetCrtVIPath(); path += "demo.txt"; ofstream f; f.open (path.c_str()); time_t t; time (&t); f<< ctime(&t)<<"\r"; f << "sinus" << 100 << 2.5; f.close() if (f.fail()) ... 23

G data types - Matrix

? ? B = C = D

24

Matrix functions

25

Waveform

Donnée associées à des information sur le timing

t0

time instant of the first point

dt

delta t, time between sample

Y

data points, start at t0 and separated by dt 26

Waveform

Set waveform attribute

Waveforms

basic generation measurement filter . . .

27

chart

GUI - display data

graph x-y graph

28

Chart

Ajoute une (set de) valeur(s) à la fois, i.e. à chaque iteration/appel

10 1024

Utilisez un

attribute node

pour remettre le chart à 0 29

Graph

Ajoutes

n

plots à chaque appel/itération, le graph est renouvelé chaque fois

Si les données connectées sont au format waveform, l'échelle des x s'adapte automatiquement

•   •  

Ajoute une nouvelle échelle des Y Assigne chaque plot à son échelle respective Problème de mise à l'échelle ?

30

Graph - customization

Click ou right-click pour accéder ou modifier les propriétés du grap 31

Graph - customization

Crèe une nouvelle échelle puis lui assigner un plot/courbe 32

Graph - customization

Les curseurs peuvent être libres (

free

) or attachés (

attached)

à un plot donné 33

X-Y Graph

Similaires aux Graphs pour afficher une courbe paramétrique

J

The famous first vortex recording, cars race

34

LA nano cars' race

•   •   •   Acquisition, supervision & control via LabVIEW. Nano car: ~10 cm long, max speed ~4 m/s. 16 cameras give absolute car's positions and angle.

35

X-Y Graph – an example

36

X-Y Graph

Similaires aux Graphs pour afficher une courbe paramétrique

J

The famous first vortex recording, cars race

37

X-Y Graph – an example

38

X-Y Graph – an example “draw” the cars and the tails

39

X-Y Graph – an example “draw” the car and the speed given 2 pts

40

X-Y Graph – an example Compute the car’s points, given angle and radius

41

Intensity chart

GUI - display data

2D picture 3D picture

42

Demo

The famous Jean-Hubert's image selection problem

Staring

:

•   •   •   •  

Displaying Image Image computation Graph Cursor

43

Intensity Graph

X-Y graph with Z as a color

User can switch Color Look Up Table

44

2D Picture

can be tedious!

•   •   •   •   •   Index image can be 1, 4, 8 bits/pixel with color table RGB image are 24 bits/pixel You can programmatically compose your picture You can programmatically access any pixel Many image primitives are provided, still tedious 0,0

Coordinates !

RGB (24bit) pixmap 8bit image + gray CLUT 1bit image

45

2D Picture

Many image primitives are provided, especially for chart/graph

46

Chart/graph primitives

2D Picture

47

Object plot 2D primitives

2D Picture

48

Use to display video image

no more IMAQ controller on OSX

2D Picture

Use the QTLib for additional video related functionalities on OSX!

49

Cars race revisited – 2D picture

50

2D Picture

Build image as stacked layers

51

Cars race revisited

Background + Pub Cars Live info

52

Cars race revisited

53

3D Picture

can be tedious!

3D picture can be displayed in •   3D picture indicator (scene) •   •   3D graph External window

(much faster display)

Build and animate your 3D world

à-la VRML You can move the camera interactively or programmatically

54

3D Picture

Ex: animated solar system

Build your scene Set camera Animate scene display

55

3D Graph

Replace the old ActiveX graphs

•   •   •   •   •   Build with the 3D pictures in plain LV Many predefined graphs format When you drop the 3D graph control a Plot Helper vi is dropped as well Just need to feed data Can be animated same as 2D example 56

Ex: Drone flight

3D Graph

57

3D Graph

Ex: Drone flight – easy as pie!

58

Mesure en moins de 10 slides

•   •   •   LabVIEW a initialement été créé pour faire de la mesure, il a évolué en un environnement de développement complet LabVIEW peut accéder à un grand nombre d'appareils et d'interfaces de mesures (au travers de drivers) La puissance de LabVIEW vient du fait qu'il propose une interface standard qui cache la partie compliquée de l'accès au matériel

GPIB instrument DAQ card USB device cRio controller

59

Choix d'une solution DAQ

• •   •   •   •   • •

Questions pour choisir une solution/hardware

  Nombre d'entrée et de sortie   Types (digital/analogique) des entrées et des sorties Gamme d'utilisation des entrées et des sorties (volt) Résolution des entrées et des sorties (bits)   Fréquence des entrées et des sorties (Hertz) Mesure (plusieurs points à la fois) ou control (un point après l'autre) Conditionnement du signal 60

Du capteur au processeur

Le

phénomène physique

est acquis par le

capteur

, puis il est transmis au module de

conditionnement du signal

afin d'être amplifié. Il est finalement converti en un nombre par le

convertisseur analogique/digital

situé sur la carte d'acquisition

Physical phenomenon Sensor Signal Signal conditioning Signal conversion CPU memory

3FE8 A3D2 9162 BBBC 3FF7 37DD FDEA 5B9A 4006 B219 88D6 F5E7 … 400E A87C 5D9E 8424 400D EC02 80FD A183 4015 4330 3575 2CC2 4015 F6A1 A3C6 199C 61

Capteur – types de signal

Analogue

–   Forme –   Amplitude –   Fréquence

Digitale

–   Etat –   Période

Les signaux digitaux peuvent être traités comme des signaux analogues

62

0

!

Phase

Signal

Shape Period Frequency = 1/period Offset t

!

63

Conversion A->D

Convertir un signal analogique en une représentation digitale se fait en deux étapes. La première étape est de prendre un échantillon du signal analogique continu (

sample and hold circuit

). La deuxième étape est de convertir le signal analogue "mémorisé" en un nombre à l'aide du convertisseur A/D). Ce processus est répété après un certain temps appelé période d'échantillonage

sampling period

(or frequency).

sample k+1 0

!

sample k k

!

t

!

Le processus d'échantillonage est aveugle entre les échantillons. La période d'échantillonage est généralement constante entre les échantillons.

Sampling period

64

Echantillonnage du signal

La fréquence à laquelle le signal analogique est échantillonné doit être en pratique 10 fois (2 x en théorie) plus rapide que la fréquence maximum que l'on veut observer. Sinon le signal peut ne pas être reconstruit correctement Ex. Pour mesurer du 220v à 50Hz, la fréquence d'échantillonnage devrait être d'environs 500Hz.

65

Conversion A/D

Le convertisseur AD (ADC) transforme le signal analogique en une représentation digitale. La résolution du convertisseur défini le nombre possible de valeurs que peut avoir le signal de sortie [v] + 10 0 - 10 11 10 01 00 ADC 10 10 b 10 !

( 2 2 !

(2 * 5) !

10 10) = 0[ !

v

] 10 =

2 bits -> 2 2 = 4 levels

66

Conversion A/D

Le convertisseur AD (ADC) transforme le signal analogique en une représentation digitale. La résolution du convertisseur défini le nombre possible de valeurs que peut avoir le signal de sortie [v] + 10 0 - 10 1111 1110 1101 1100 1011 1010 1001 1000 0111 0110 0101 0100 0011 0010 0001 0000 ADC 1010 1010 b 10 " ( 2 4 " 10) " 10 = " 10 2.5[ v ] = !

4 bits -> 2 4 = 16 levels

67

Conversion A/D

Le convertisseur AD (ADC) transforme le signal analogique en une représentation digitale. La résolution du convertisseur défini le nombre possible de valeurs que peut avoir le signal de sortie [v] + 10 0 - 10

8 bits -> 2 8 = 256 levels

11111111 11111110 . . . 00000001 00000000 ADC 10101001 10101001 b 10 " ( 2 8 " 10) " 10 = " 10 = 3.20[ v ] ! 68

Windows – MAX & DAQ assistant

Configure tasks with

M

easurement &

A

utomation

E

xplorer (MAX) Or use DAQ assistant Express VI 69

Data acquisition (DAQ)

Les opérations d'entrée/sortie LabVIEW sont basées sur des taches. Une tache représente

une

opération sur les entrées ou les sorties. Les étapes suivantes sont nécessaires:             Create Configure Start Read/write Stop Clear

Create !

Configure !

Start !

Read !

Stop !

Clear !

Write !

70

Class 3 - recap

•   •   Arrays –   easy, same as in c Charts, graphs, x-y graphs –   I'll do nice graphics in no time! •   2D – 3D displays –   Way cool, I'll use them in my next project •   Measurements acquisition –   I never thought is was than easy 71

Slides suplémentaires

72

LabVIEW edition

Create a sub-vi from a main vi in 2 clicks 73

Playing a sound

The sound DAs converter has some specificities: •   the output rates is fixed (11025, 22050 and 44100 S/s) •   •   the DA sample resolution can be set to 8 or 16 bit two or more channels (mono, stereo) •   the converter(s) is/are connected to speaker(s) sound samples buffer

left right Next sample every 1/44100 sec

DAC

One

sample, 8bit Analog signal Speaker 74

Playing a sound

Outputting a sinusoidal at a given frequency given the output rate of 44100 S/s. Maximum theoretical playable frequency 44100/2 = 22050 Hz.

Human ear: baby ~20hz – 20khz, after 25y.o. ~16khz, computer speaker : 200Hz -12khz

Example:

Desired output frequency: 1000Hz

-> 1000 sinusoidal per second Nbr samples per sinusoidal for 1000Hz -> 44100/1000 -> 44.1 samples per sinusoidal How do we deal with the ".1" in 44.1 ? Solution:

generate more than 1 sinusoidal and shift the phase of the next sinusoidal until the phase goes back to 0. In our example every 10 sinusoidals the phase goes back to 0. Note: in the project we'll define the number of samples, not the frequency, it will calculated

Playing a sound

As easy as other DAQ operations J !

Configure !

Start !

Write !

Stop !

Clear !

Note: similar set of VIs exists for sound input operations

76