Wolfgang Georgi, Philipp Hohl
Einführung in LabVIEW
Vorwort zur sechsten Auflage
6
Inhalt
8
Teil I: Grundlagen des Programmierens in LabVIEW
18
1 Was ist LabVIEW?
20
1.1 Entwicklungsstufen
20
1.2 Was will dieses Lehrbuch?
22
1.3 Installation
22
1.4 Einführendes Beispiel
22
1.4.1 Programmierung von c = a + b
26
1.4.2 Speicherung als Programm Add.vi
29
1.4.3 Starten und Stoppen von Add.vi
29
1.4.4 Fehlersuche in Add.vi (Debugging)
30
1.5 Beispiel für eine Grafik in LabVIEW
31
1.6 Grundlegende Konzepte von LabVIEW
32
1.6.1 Frontpanel
32
1.6.2 Blockdiagramm
32
1.7 Rezepte
33
1.8 Shortcuts
34
2 Einstellungen, Paletten
36
2.1 Einstellungen
36
2.1.1 Einstellungen von LabVIEW
36
2.1.2 Frontpanel
37
2.1.3 Blockdiagramm
38
2.1.4 Ausrichtungsgitter
40
2.1.5 Wiederherstellungen
40
2.2 Paletten
40
2.2.1 Werkzeugpalette (Tools Palette)
41
2.2.2 Eingabe-/Ausgabe-Elemente
42
2.2.3 Funktionenpalette
45
2.2.4 Palette konfigurieren
48
3 Programmstrukturen
49
3.1 Strukturiertes Programmieren
49
3.2 Sequenz
51
3.3 Case-Struktur
54
3.4 Schleifen
58
3.5 Guter Programmierstil
62
4 Datentypen
64
4.1 Numerische Datentypen
64
4.1.1 Kontextmenü: 'Darstellung'
64
4.1.2 Kontextmenü: 'Anzeigeformat…'
65
4.2 Boolesche Datentypen
67
4.3 String und Pfad
69
4.4 Arrays
72
4.4.1 Definition und Initialisierung eines 1-dimensionalen Arrays
72
4.4.2 Definition und Initialisierung eines 2-dimensionalen Arrays
74
4.4.3 Array erstellen
75
4.4.4 Rechnen mit Arrays: Addition
76
4.4.5 Rechnen mit Arrays: Multiplikation
77
4.4.6 Steuerung von For-Schleifen mit Arrays
78
4.4.7 Behandlung einzelner Arrayelemente
80
4.5 Cluster
82
4.5.1 Erzeugung eines Clusters
83
4.5.2 Clusterwerte ändern
84
4.5.3 Aufschlüsseln eines Clusters
86
4.5.4 Umordnen der Elemente eines Clusters
87
4.5.5 Cluster-Arrays
88
4.6 Ring & Enum
89
4.7 Datentyp FXP
91
4.8 Datentyp Variant
93
4.9 Guter Programmierstil
95
5 Unterprogramme und Typdefinitionen
97
5.1 Wozu Unterprogramme (SubVIs)?
97
5.2 Erstellen von Unterprogrammen
98
5.2.1 Einführendes Beispiel
98
5.2.2 Weitere Hinweise für die Erstellung eines Unterprogramms
101
5.2.3 Einstellungen für Programme und Unterprogramme
103
5.2.4 Erstellen von Unterprogrammen mit internem Zustand
105
5.2.5 Erstellen von polymorphen Unterprogrammen
106
5.3 Aufruf von Unterprogrammen
109
5.3.1 Statische Bindung
109
5.3.2 Dynamische Bindung
110
5.3.2.1 VI-Referenz öffnen und schließen
110
5.3.2.2 Aufruf eines VI über seine Referenz
111
5.3.2.3 Beispiel für den SubVI-Austausch während der Laufzeit
113
5.3.2.4 Rekursiver Aufruf von Unterprogrammen
113
5.3.2.5 Testen (Debugging) von ablaufinvarianten SubVIs
114
5.4 Typdefinitionen
116
5.4.1 Beispiel einer Typdefinition für Enum-Variablen
116
5.4.2 Beispiel einer Typdefinition für Registerkarten
118
5.5 Guter Programmierstil
119
5.5.1 Vereinfachung durch Unterprogramme und Typdefinitionen
119
5.5.2 Aussagekräftige Symbole (Icons)
121
5.5.3 Anordnung häufig verwendeter Elemente
121
5.5.4 Kommentierung der Elemente und Funktionen eines VI
121
5.5.5 Detaillierte Hilfe
123
6 Prozessvisualisierung
124
6.1 OOP-Konzepte
124
6.2 Eigenschafts- und Methodenknoten
124
6.3 Grafische Ausgabe
128
6.3.1 Chart (Signalverlaufsdiagramm)
128
6.3.1.1 Darstellung einer Sinuskurve
128
6.3.1.2 Darstellung von zwei oder mehr Kurven in einem Chart
130
6.3.1.3 Legende zu einem Chart oder Graphen
131
6.3.1.4 Skalierung der Ordinate in einem Chart
132
6.3.2 Graph (Signalverlaufsgraph)
134
6.3.2.1 Darstellung einer Sinuskurve
134
6.3.2.2 Darstellung von zwei oder mehr Kurven in einem Graphen
135
6.3.2.3 Skalierung der Abszisse in einem Graphen
137
6.3.3 XY-Graph
139
6.3.3.1 Darstellung einer Relation im XY-Graphen
140
6.3.3.2 Darstellung mehrerer Relationen in einem XY-Graphen
141
6.3.4 Signalverlauf
142
6.4 Express-VIs, Programmierstil
147
6.4.1 Express-VI zur Erzeugung von Kurven
147
6.4.2 Express-VI zur Erstellung von Berichten
148
7 Referenzen, Fehlerfunktionen
150
7.1 Einführendes Beispiel
150
7.1.1 Vertauschung von zwei Variablenwerten
150
7.1.2 Referenzen auf Bedien- und Anzeigeelemente
151
7.1.3 Lösung des Vertauschungsproblems
152
7.2 Vererbung
153
7.2.1 Eigenschaften der Basisklasse
155
7.2.2 Eigenschaften von abgeleiteten Klassen
155
7.3 Fehlerfunktionen
157
7.3.1 Fehlermeldungen mit oder ohne Dialog
157
7.3.2 Wo findet man wichtige Fehlerelemente und Fehlerfunktionen?
158
7.3.3 Verschiedene Fehlerarten
159
7.3.3.1 Standardfehlerleitung
159
7.3.3.2 Funktionen ohne oder mit vereinfachter Fehlerleitung
159
7.3.4 Ausgang aus While-Schleifen
161
7.3.5 Erzwingung von sequenziellem Ablauf
162
8 Datentransfer von und zur Festplatte
163
8.1 Dateifunktionen
163
8.1.1 Allgemeines zur Speicherung von Dateien
163
8.1.2 Palette Dateifunktionen
165
8.1.3 Einführendes Beispiel
166
8.1.4 Modifiziertes Beispiel
167
8.1.5 Beispiel: Anlegen einer Protokolldatei
168
8.1.6 Überschreiben ohne Warnung
168
8.2 Pfade
169
8.2.1 Pfadkonstanten
169
8.2.2 Pfadkonstante 'Standardverzeichnis'
170
8.2.3 'Standardverzeichnis' ändern
171
8.2.4 'Standarddatenverzeichnis' ändern
172
8.2.5 Lesen und Schreiben anderer Datentypen
172
8.2.6 Verketten von Schreib- und Lesefunktionen
173
8.2.7 Tabellenkalkulation
174
8.3 Pfade in einer EXE-Datei
174
8.4 Fortgeschrittene Dateitypen
176
8.4.1 LVM- , TDMS- und TDM-Dateien
177
8.4.2 Diadem
180
8.4.3 ZIP-Dateien
180
8.4.4 Konfigurationsdateien
182
9 LabVIEW-Kurzüberblick
186
9.1 Aufbau des LabVIEW-Systems
186
9.1.1 Programmierung in G
186
9.1.1.1 Interpretieren oder kompilieren?
186
9.1.1.2 Datenflussprogrammierung
188
9.1.2 Hardware-Unterstützung
188
9.1.3 Bibliotheken mathematischer und technischer Funktionen
189
9.1.4 Benutzerschnittstelle
190
9.1.5 Technologische Abstraktion
191
9.1.6 Rechenmodelle
191
9.2 Projekte
191
9.3 Erstellung von EXE-Dateien
193
9.3.1 Erstellung einer EXE-Datei
193
9.3.2 EXE-Datei auf einem Rechner ohne LabVIEW-System
195
9.4 Strukturen zur Programmentwicklung
198
9.4.1 Deaktivierungsstrukturen
198
9.4.2 Debug-Einstellung in der Projektverwaltung
200
9.5 LabVIEW-Bibliotheken
201
9.6 Umwandeln von LLB-Bibliotheken
203
9.7 Einbindung von C-Funktionen unter Windows
205
9.7.1 Reihe in C#
206
9.7.2 Reihe in C++
210
9.7.3 Reihe mit MathScript
214
9.8 Hilfen zu LabVIEW
214
9.9 Schnelleinfügeleiste (Quickdrop)
216
9.10 Der VI Package Manager
218
9.10.1 Verwalten der LabVIEW-Entwicklungsumgebung
219
9.10.2 Eigenes Paket erstellen
221
Teil II: Technische Anwendungen
222
10 Fouriertransformation
223
10.1 Zeit- und Frequenzbereich
223
10.1.1 Die reelle Fouriertransformation
224
10.1.2 Darstellung der Fourierkoeffizienten c_k in LabVIEW
227
10.2 Diskrete Fouriertransformation
230
10.2.1 Satz von Shannon
230
10.2.2 Aliasing
232
10.2.3 Frequenzauflösung
233
11 Filterung
235
11.1 Filtertypen
235
11.1.1 Ideale und reale Filter
235
11.1.2 Beispiel eines digitalen Filters
236
11.2 LabVIEW-Filterfunktionen
239
11.3 Filterung im Frequenzbereich
241
11.3.1 Idee der Filterung im Frequenzbereich
241
11.3.2 Die inverse Fouriertransformation in LabVIEW
241
11.3.3 Beispiel eines Tiefpasses
242
12 Differenzialgleichungen
244
12.1 Lösen mit LabVIEW-ODE-Funktionen
244
12.2 Lösen nach dem Analogrechnerprinzip
246
12.2.1 Blockdiagramm-Darstellung
246
12.2.2 Vereinfachungen
249
12.3 Genauigkeit numerischer Verfahren
251
13 Systeme von Differenzialgleichungen
254
13.1 Systeme gewöhnlicher Differenzialgleichungen
254
13.2 Gekoppeltes Feder-Masse-System
254
13.2.1 Lösung mit eingebauter ODE-Funktion
255
13.2.2 Lösung mit Blockdiagramm wie in MATLAB®
256
13.3 Umwelt und Tourismus
258
14 Parallelverarbeitung, Laufzeiten, Ereignisse
261
14.1 Einführendes Beispiel
261
14.2 Grundbegriffe der Parallelverarbeitung
263
14.2.1 Multiprocessing, Multitasking, Multithreading
263
14.2.2 Synchronisierung von Prozessen
264
14.3 Parallelverarbeitung unter LabVIEW
265
14.3.1 Erzeugen von Ressourcen für die Prozesskommunikation
266
14.3.2 Freigabe von Ressourcen der Prozesskommunikation
268
14.3.3 Zeitbegrenzung Ressource schont Prozessor
269
14.4 Prozess-Synchronisierung ohne Datenaustausch
269
14.4.1 Occurrences
269
14.4.2 Semaphor
270
14.4.3 Rendezvous
272
14.5 Prozess-Synchronisierung mit Datenaustausch
273
14.5.1 Melder-Operationen
273
14.5.2 Queue-Operationen
274
14.6 Globale Variablen
275
14.7 Laufzeitprobleme und ihre Behandlung
276
14.7.1 Laufzeitprobleme bei lokalen Variablen
276
14.7.2 Laufzeitprobleme bei globalen Variablen
279
14.8 Ereignisgesteuerte Programmierung
280
14.8.1 Frontpanel-Ereignisse
280
14.8.2 Wertänderungs-Ereignisse
285
14.8.3 Gefilterte Ereignisse
286
14.9 Zeitschleifen
288
Teil III: Kommunikation
290
15 Serielle Eingabe/Ausgabe
291
15.1 RS-232
291
15.2 Programmierung der RS-232 in LabVIEW
293
15.3 Die USB-Schnittstelle
296
15.4 Feld-Bus, CAN-Bus
300
15.4.1 CAN-Protokoll
300
15.4.2 CAN-Interface
302
15.4.3 CANopen-Protokoll, ZILA-Sensor
303
15.4.4 CAN-Bus mit Laptop und zwei Sensoren
305
15.4.5 XNET-System von National Instruments
305
15.5 Der byte-serielle GPIB-Bus
316
16 Datenerfassungsgeräte
318
16.1 Datenerfassungskarten/Datenerfassungsgeräte
318
16.2 Allgemeines
319
16.2.1 Treiber, MAX (Measurement and Automation Explorer)
319
16.2.2 Physikalische und virtuelle Kanäle, Task
325
16.2.3 Programmierung von Datenerfassungs-VIs, simulierte Geräte
326
16.2.4 Programmierung von VIs zur Analogausgabe
331
16.2.5 Programmierung von VIs zum Digital-I/O
332
16.2.6 Programmierung mit Hilfe des DAQ-Assistenten
332
16.2.7 Programmatische Task-Erstellung
334
16.3 USB-Gerät NI USB-6251
335
16.3.1 Begriffe 'differenziell', 'RSE' und 'NRSE'
335
16.3.2 Zwei Analogsignale mit der NI USB-6521 lesen
337
16.3.3 Triggern mit NI USB-6521
338
16.3.4 Streaming mit NI USB-6521
339
16.4 Ältere Datenerfassungskarten/-geräte
346
16.5 TEDS
346
16.6 IVI-Gerät NI USB-513
350
Teil IV: Fortgeschrittene Techniken
356
17 Professionelle Programmentwicklung
357
17.1 Sequenzstruktur
357
17.2 Zustandsautomaten
358
17.2.1 Notation für Zustandsautomaten
359
17.2.2 Umsetzung Zustandsdiagramm - LabVIEW-Programm
360
17.2.2.1 Strings für die Zustandsauswahl
361
17.2.2.2 Enum für die Zustandsauswahl
363
17.3 Münzautomat
364
17.4 Münzautomat mit Queues und Ereignisstrukturen
373
17.5 Programmierhilfen
377
17.5.1 Arbeiten mit vorgefertigten Strukturen (Templates)
377
17.5.2 Beurteilung Programmeffizienz und geeignete Werkzeuge dazu
377
18 Objektorientierte Programmierung
381
18.1 Warum objektorientiert?
381
18.2 Erstes Beispiel zur objektorientierten Programmierung
384
18.2.1 Bildung einer Klasse
384
18.2.2 Private Eigenschaften der Klasse
385
18.2.3 Methoden der Klasse
386
18.3 Weitere Beispiele zur OOP
390
18.3.1 Vererbung
390
18.3.2 Polymorphie
394
18.3.3 Modulaustausch
398
18.4 Schutz einer Klassenbibliothek
406
19 LabVIEW: Tabellenkalkulation, Datenbanken
409
19.1 Schreib-/Lesebefehle zur Tabellenkalkulation
409
19.2 Allgemeines über ActiveX
411
19.2.1 ActiveX-Container in LabVIEW
412
19.2.2 ActiveX in LabVIEW zur Steuerung von Anwendungen
414
19.3 Beispiele zur Anwendung auf Excel
415
19.3.1 Öffnen und Schließen von Excel
416
19.3.2 Sichtbarmachen einer Excel-Tabelle
417
19.3.3 Eintragen von Daten in eine Excel-Tabelle
419
19.3.4 Geschwindigkeit der Datenspeicherung
421
19.3.5 Erstellen von Makros zum Umwandeln einer Tabelle in eine Grafik
422
19.3.6 Aufruf von Makros in LabVIEW mit Hilfe von ActiveX
425
19.3.7 Erhöhung der Geschwindigkeit
426
19.3.8 Schreiben mehrerer Dateien
429
19.4 Microsoft-Datenbank Access
433
19.4.1 Einführung
433
19.4.2 Verbindung mit der Datenbank
434
19.4.3 SQL
436
19.4.4 Verwendung von SubVIs
437
20 Internet, Server und Client
438
20.1 Allgemeine Bemerkungen zum Internet
438
20.1.1 Ethernet
438
20.1.2 Ethernet-Karten, MAC- und IP-Adresse
439
20.1.3 TCP/IP-Protokoll
439
20.2 Einfaches LabVIEW-Beispiel: Ping
440
20.3 Programmieren mit DataSocket
442
20.4 Programmieren mit TCP/IP
444
20.4.1 Server und Client
444
20.4.2 Beispiel für die Übertragung von Sinusdaten über TCP/IP
445
20.5 Webdienste
448
20.5.1 Grundbegriffe
448
20.5.2 Struktur der Webdienstkommunikation
449
20.5.3 Erstes einfaches Beispiel
449
20.5.4 Zweites einfaches Beispiel
454
20.5.5 Drittes Beispiel
457
20.5.6 Dreiecksberechnung
458
20.5.7 Webserver im Internet
463
20.5.7.1 Firmeninternes Netz
463
20.5.7.2 Aufruf im Internet
464
21 Compact RIO-System und FPGA
465
21.1 Definition
465
21.2 Installation
467
Schritt 1: Software-Installation auf dem PC
467
Schritt 2: Zusammenstellen der cRIO-Hardware
468
Schritt 3: Zuweisung einer IP-Adresse zum cRIO-System
468
Schritt 4: Installation weiterer Software auf dem cRIO-System
471
Schritt 5: Verbindung eines PC mit einem cRIO-System im Netz
471
21.3 Programmierbeispiele für FPGA
472
21.3.1 Beispiel zur Digitalausgabe
473
21.3.2 Beispiel eines Zählers
478
21.3.3 FPGA-Anwendung: Ermittlung eines Frequenzganges
480
21.3.4 Umgebungsvariablen
490
21.3.4.1 Projekt 'Shared_Einzeln'
491
21.3.4.2 Projekt 'Shared_Netzwerk'
493
21.3.4.3 Projekt 'Shared_cRIO'
496
21.3.5 FPGA-Anwendungen auf dem cRIO-9014 ohne PC-Unterstützung
498
21.3.5.1 Projekt 'RIO_MOD1_Switch'
498
21.3.5.2 Projekt 'RIO_User1_Switch'
500
21.3.5.3 Umstellung des cRIO-Systems von einem Standalone-Projekt zum nächsten
503
22 XControls
505
22.1 Unterschied zu einfachen Ctls
505
22.2 Anzeige der Flugbahn eines Steines
505
22.3 Erstellen eines XControls
507
22.3.1 Allgemeines Rezept
507
22.3.2 Beispiel XControl_Pfeil.xctl
509
22.3.3 Eigenschaften in einem XControl
515
22.3.4 Bedeutung der Rahmen [1] bis [4] im Fassaden-VI
518
22.3.5 Weitere Verbesserungen
524
22.4 XControl zur Erstellung von Symbolleisten
526
22.4.1 Zustand der Symbolleiste
527
22.4.2 Funktionen der Symbolleiste
528
22.4.2.1 Symbole hinzufügen
528
22.4.2.2 Alle Symbole löschen
529
22.4.2.3 Rückmeldung des Symbols, das unter dem Mauszeiger liegt
529
22.4.2.4 Anpassung des Erscheinungsbilds an eigene Bedürfnisse
533
22.4.3 Leistungsmerkmal 'Status für Speichern umwandeln'
533
23 LabVIEW VI-Skripte
535
23.1 Was sind VI-Skripte
535
23.2 Die VI-Skripte-Funktionen in der Palette anzeigen
535
23.3 Die VI-Skripte-Funktionen
537
23.3.1 Neues VI
537
23.3.2 Neues VI-Objekt
538
23.3.3 VI-Objektreferenz öffnen
540
23.3.4 Abstand des neuen VI-Objekts vom Referenzobjekt
540
23.3.5 GObjects suchen
542
23.3.6 GObject-Beschriftung abfragen
543
23.3.7 Klassenhierarchie mittels Klassennamen ermitteln
543
23.3.8 Weiterführende Informationen
545
23.4 Wo werden VI-Skripte eingesetzt?
546
23.5 Modifizierung der Projektvorlage 'Leeres VI'
547
23.6 Erstellen eines Quickdrop Plugins mit VI-Skripting
551
24 XNodes
554
24.1 Einführung
554
24.2 Regelungstechnische Anwendung
555
24.3 Aufbau eines XNodes
557
24.4 Wie bildet man einen XNode?
557
24.4.1 Vorbereitende Überlegungen
557
24.4.2 Programmierung von NeueKuh.xnode
562
24.4.2.1 Template-VI
562
24.4.2.2 Ability-VIs
563
24.5 Wie ändert man einen XNode?
572
24.6 XNodes in der Funktionspalette speichern
572
Literatur
576
Index
578
© 2009-2024 ciando GmbH