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