CATEGORII DOCUMENTE |
Bulgara | Ceha slovaca | Croata | Engleza | Estona | Finlandeza | Franceza |
Germana | Italiana | Letona | Lituaniana | Maghiara | Olandeza | Poloneza |
Sarba | Slovena | Spaniola | Suedeza | Turca | Ucraineana |
DOCUMENTE SIMILARE |
|
Objektorientierte Softwareentwicklung mit
Vorlesungsskript
Stand: 2007-01-05
Fachhochschule Jena
Wintersemester 2006 / 2007
Studienrichtung AT / TI / KMT
Rahman Jamal, Andre Hagestedt. LabVIEW: Das Grundlagenbuch. 4. Auflage, Addison-Wesley Verlag, 2004, ISBN 3827320518
Rahman Jamal, Andre Hagestedt. LabVIEW für Studenten. 4. Auflage, Pearson Studium Verlag, 2004, ISBN 3827371546
Jon Conway, Steve Watts. A Software Engineering Approach to LabVIEW. Prentice Hall Verlag, 2003, ISBN 0130093653
Wolfgang Georgi, Ergun Metin. Einführung in LabVIEW. Carl Hanser Verlag, 2006, ISBN 3446404007
Werkzeug zur Erstellung technischer und wissenschaftlicher Applikationen
Programmiersprache auf Basis des Denkmodells grafischer Blockschaltbilder
die Programmausführung wird durch Datenfluss anstatt Instruktionen bestimmt
Programmmodule werden als Virtuelle Instrumente bezeichnet (VI)
Orientierung an realen Instrumenten
verfügbar für verschiedene Betriebssysteme und Plattformen (Windows, UNIX, Mac, PDA, RT, FPGA, DSP, µC)
Einsatzgebiete:
Datenerfassung
Datenanalyse
Datenrepräsentation
Instrumentensteuerung
Datenspeicherung
Vorteile:
Entwicklung von Software ohne die syntaktische und semantische Komplexität textbasierter Sprachen
Programmatische Umsetzung von Ideen und Aufgaben in natürlicher, intuitiver Art
Reduzierter Zeitaufwand bei der Entwicklung Rapid Prototyping
Unterstützung eines breiten Hardwarespektrums (USB, FireWire, RS232/485, IEEE488.2, PCI / PXI Multifunktionskarten, CAN, Motion Control, Frame Grabber, …)
Just-In-Time-Compiler ermöglicht rapide Develop-Test- Zyklen
LabVIEW ist plattformunabhängig, erstellte Software ist portierbar
Nachteile
Anderungen können aufwändige Neustrukturierungen zur Folge haben
Inkonsequente Umsetzung des Datenflussmodells führt zu Performanceeinbußen
Der einfache Einstieg verleitet zur Klick&Fun-Programmierung (Methoden der Softwareplanung sind auch hier erforderlich)
Die Verteilung der Software erfordert eine installierte Runtime-Engine auf dem Zielsystem
LabVIEW Programme werden als Virtuelle Instrumente (VI) bezeichnet
VIs = funktionale Einheiten, welche autonom entwickelt, getestet und ausgeführt werden können
VIs können wiederum Aufrufe zu anderen VIs beinhalten (SubVIs) modulare hierarchische Struktur
Vorteile der Verwendung von SubVIs:
o Kapselung
o Erhöhte Wartungsfreundlichkeit
o Schnellere Fehlersuche
o Wiederverwendung
Hauptbestandteile von VIs:
o Frontpanel
o Block Diagramm
o Symbol und Anschlussfeld
Durch Wählen von Datei Öffnen können VIs in den Speicher geladen werden. Während des Ladevorgangs kann ein Statusfenster erscheinen welches die zu ladenden SubVIs anzeigt. LabVIEW greift dabei auf die unter Werkzeuge Optionen eingestellten Suchpfade zurück, falls ein VI nicht an der gespeicherten Stelle gefunden werden kann. Ist diese Suche erfolglos, kann das Einbinden des SubVI ignoriert werden bzw. manuell danach gesucht werden.
Durch Wählen von Speichern, Speichern unter, Alle Speichern oder Speichern mit Optionen im Menü Datei können VIs als einzelne Dateien oder gruppiert in Bibliotheken gespeichert werden. VI Bibliotheken erhalten die Endung .llb. Die Verwendung von Bibliotheken sollte jedoch vermieden werden und die VIs stattdessen als einzelne Dateien organisiert in Verzeichnissen gespeichert werden – insbesondere, wenn mehrere Bearbeiter an dem Projekt arbeiten.
|
Ausführen – Startet die Ausführung des VI |
|
Während der Bearbeitung ist der Pfeil zum Ausführen oft zerbrochen. Dies bedeutet, dass das VI Fehler enthält und nicht ausgeführt werden kann. Durch Klicken wird eine Liste aller Fehler geöffnet. |
|
Zyklische Ausführung des VI bis zum wiederholten Betätigen oder Drücken von Stopp oder Pause. |
|
Sofortiges Abbrechen der Ausführung des laufenden VIs |
|
Unterbrechen der Ausführung des laufenden VIs. Im Blockdiagramm wird der Punkt der Aktivierung der Pause hervorgehoben. Wiederholtes Klicken setzt die Ausführung an dieser Stelle fort. |
|
Definition von Schriftart, -größe und –farbe des gewählten Elements. |
|
Ausrichten von Objekten entlang Achsen |
|
Gleichmäßige Verteilung von Objekten |
|
Angleichen der Größen von Objekten |
|
Wahl der Ebene bei überlagerten Objekten |
Alle LabVIEW Objekte und freie Bereiche auf dem Frontpanel bzw. Blockdiagramm haben entsprechende Popup Menus. Verwenden Sie diese um das Aussehen oder Verhalten von Elementen auf dem Frontpanel bzw. Block Diagramm zu verändern. Um das Popup Menu zu öffnen klicken Sie mit der rechten Maustaste auf das entsprechende Objekt, Frontpanel oder Blockdiagramm.
Datei |
Öffnen, Schließen, Speichern und Drucken von VIs |
Bearbeiten |
Suchen nach und Bearbeiten von Komponenten eines VIs |
Ausführen |
Ausführen, Stoppen und Bearbeiten von Ausführungsoptionen |
Werkzeuge |
Instrumentensteuerung, Applikationserstellung, Umgebungseinstellungen |
Durchsuchen |
Navigation durch das VI und die VI Hierarchie |
Fenster |
Anzeigen von LabVIEW Fenstern und Paletten |
Hilfe |
Anzeigen der Kontexthilfe, Öffnen der LabVIEW Dokumentation, Versionsinformationen |
Verwenden Sie die Kontext-Hilfe beim Erstellen und Bearbeiten von VIs. Um die Kontexthilfe anzuzeigen wählen Sie Hilfe Zeige Kontext-Hilfe oder drücken Sie <STRG+H>. Wenn Sie den Cursor über Frontpanel und Blockdiagramm Objekte bewegen, zeigt die Kontext-Hilfe das Symbol für SubVIs, Funktionen, Konstanten, Steuer- und Bedienelemente mit ihren Anschlussdrähten.
Die LabVIEW Hilfe enthält detaillierte Beschreibungen der meisten Paletten, Menüs, Werkzeuge, VIs und Funktionen. Die Hilfe kann über den weiterführenden Link in der Kontext-Hilfe oder über den Menüeintrag Hilfe Inhalt und Index geöffnet werden.
Frontpanel = User Interface des VI
Das Frontpanel wird aus Bedien- und Anzeigeelementen aufgebaut (interaktive Ein- und Ausgabeterminals)
Bedienelemente = Eingänge des VI, Bereitstellung von Daten an das Block Diagramm (z. B. Drehknöpfe, Taster, Schalter)
Anzeigeelemente = Ausgänge des VI, Anzeige von durch das Blockdiagramm erfassten oder generierten Daten (z. B. Zeigerinstrumente, LEDs, Graphen)
Hinzufügen von Programmcode in Form grafischer Repräsentationen von Funktionen zum Steuern der Bedien- und Anzeigelemente
Bedien- und Anzeigelemente erscheinen als Anschlüsse auf dem Blockdiagramm
Elemente im Blockdiagramm (Knoten):
o Anschlüsse,
o SubVIs,
o Funktionen,
o Konstanten,
o Strukturen
Elemente im Blockdiagramm werden durch Drähte verbunden, welche Daten zwischen diesen transferieren
durch Erstellen eines Symbols und Konfigurieren des Anschlussfelds kann das VI in anderen VIs verwendet werden (SubVI)
Symbol = grafische Repräsentation des VI (Text, Bild oder Kombination hieraus)
Bei Verwendung als SubVI in einem anderen VI kann dieses durch das Symbol im Block Diagramm des VI identifiziert werden
SubVI ist vergleichbar mit Subroutine in textorientierten Sprachen
Anschlussfeld = Satz von Anschlüssen mit korrespondierenden Bedien- und Anzeigeelementen des VI (vgl. Parameterliste von Funktionen bei textbasierten Sprachen)
Anschlussfeld definiert welche Ein- und Ausgänge bei der Verwendung des VI als SubVI verdrahten werden können
Datenfluss: Anschlussfeld Bedienelement Block Diagramm Anzeigeelement Anschlussfeld
Die Abarbeitung des Blockdiagramms bei der Ausführung des VI folgt einem Datenflussmodell. Ein Knoten im Blockdiagramm wird dann ausgeführt, wenn Daten an allen Eingängen zur Verfügung stehen. Nach der Ausführung eines Knotens stellt es seine Ausgangsdaten an den Ausgangsanschlüssen bereit und übergibt diese an den nächsten Knoten im Datenflusspfad (vgl. textbasierte Sprachen: Die Abarbeitungsreihenfolge wird durch die Reihenfolge der Anweisungen bestimmt).
Im folgenden Beispiel werden zwei Zahlen addiert und der Wert 50 von der Summe abgezogen. Das Blockdiagramm wird hier von links nach rechts abgearbeitet, nicht weil die Objekte so angeordnet sind, sondern weil ein Eingang der Subtraktionsfunktion ungültig ist, solange die Additionsfunktion nicht abgeschlossen ist.
Merke: Ein Knoten wird nur ausgeführt, wenn Daten an allen angeschlossenen Eingängen vorliegen. Es liegen erst Daten an (allen) Ausgängen an, wenn die Ausführung des Knoten beendet ist.
Übung 1
Welches Codesegment wird im folgenden Beispiel zu erst ausgeführt – die Addition, die Generierung der Zufallszahl oder die Division?
Übung 2
Erstellen Sie ein VI, welches zwei Zahlen vergleicht und eine LED aktiviert, falls die erste Zahl größer oder gleich der zweiten ist. Speichern Sie das VI als Vergleich.vi.
Übung 3
Erstellen Sie ein VI, welches eine Zufallszahl zwischen 0 und 10 erzeugt und diese durch eine auf dem Frontpanel einzugebende Zahl dividiert. Ist die eingegebene Zahl Null, soll eine LED als Fehleranzeige auf dem Frontpanel aktiviert werden. Speichern Sie das VI als Teile.vi.
Übung 4
Erstellen Sie ein VI, welches den Anstieg m (Scale) und die Verschiebung n (Offset) einer durch zwei Punkte (x1, y1) und (x2, y2) definierten Geraden berechnet. Erzeugen Sie ein Symbol und ein Anschlussfeld und speichern Sie das VI als Anstieg.vi.
Zusatz: Stellen Sie den Geradenabschnitt zwischen x1 und x2 in einem x-y-Diagramm dar.
Bedienung
Verwenden Sie Shortcuts für häufig benutzte Menüoptionen:
<STRG + R> Starten eines VI
<STRG + .> Stoppen eines VI
<STRG + E> Umschalten zwischen Frontpanel und Blockdiagramm
<STRG + H> Ein- und Ausblenden der Kontexthilfe
<STRG + B> Entfernt alle zerbrochenen Drähte
<STRG + F> Suchen nach VIs, Globalen, Funktionen, Text oder anderen Objekten im Speicher oder in einer Liste von VIs
Zum Umschalten zwischen den Werkzeugen auf der Werkzeugpalette drücken Sie <TAB>. Zum Umschalten zwischen dem Positionierungs- und Verdrahtungswerkzeug auf dem Blockdiagramm bzw. zwischen dem Positionierungs- und Bedienwerkzeug auf dem Frontpanel drücken Sie <SPACE>.
Bearbeitung
Klicken Sie mit der rechten Maustaste auf ein Anschluss im Blockdiagramm und wählen Sie Erstelle --> Konstante / Bedienelement / Anzeigeelement.
Ziehen Sie Bedien- und Anzeigeelemente vom Frontpanel auf das Blockdiagramm um Konstanten zu erstellen. Ziehen Sie Konstanten vom Blockdiagramm auf das Frontpanel um Bedienelemente zu erstellen.
Um ein Objekt zu duplizieren halten Sie <STRG> während Sie mit dem Positionierungswerkzeug das Objekt ziehen.
Um die Bewegung eines Objektes nur horizontal oder vertikal durchzuführen, halten Sie <SHIFT> während Sie das Objekt mit dem Positionierungswerkzeug markieren.
Um Knoten im Blockdiagramm zu ersetzen, klicken Sie mit der rechten Maustaste auf das Objekt und wählen Sie Ersetzen.
Zum Anzeigen des Frontpanels eines SubVI doppelklicken Sie dieses im Blockdiagramm mit dem Bedien- oder Positionierungswerkzeug. Zum Anzeigen des Blockdiagramms eines SubVIs halten Sie <STRG> während Sie mit dem Bedien- oder Positionierungswerkzeug das SubVI im Blockdiagramm doppelklicken.
Um weitere Elemente zu Ringen, Enums und Case-Strukturen hinzuzufügen, verwenden Sie <SHIFT + ENTER> nach jedem Element.
Um freien Platz im Blockdiagramm zu erzeugen, halten Sie <STRG> während Sie mit dem Positionierungswerkzeug ein Rechteck ziehen.
Um Objekte ein Pixel zu bewegen verwenden Sie die Pfeiltasten. Um Objekte mehrere Pixel zu bewegen, halten Sie dabei <SHIFT>.
Verdrahtung
Verwenden Sie die Kontexthilfe um herauszufinden, welche Anschlüsse erforderlich sind. Erforderliche Anschlüsse sind fett, empfohlene Anschlüsse normal und optionale Anschlüsse grau dargestellt.
Verwenden Sie <SPACE> zum Umschalten der Verdrahtungsrichtung.
Um Punkte an Verbindungen anzuzeigen aktivieren Sie die entsprechende Checkbox unter Werkzeuge --> Optionen im Pulldown-Menü Blockdiagramm.
Zum Abbrechen einer Verdrahtung drücken Sie <ESC>, klicken Sie mit der rechten Maustaste, oder klicken Sie auf die Quelle.
Achten Sie auf die Tip Strips, welche erscheinen, wenn Sie das Verdrahtungswerkzeug über Anschlussterminals bewegen.
Die For-Schleife bildet einen Rahmen um einen Blockdiagrammbereich. Dieser wird entsprechend der am Zählerterminal N angeschlossenen Iterationen ausgeführt. Der Iterationszähler i gibt die Anzahl der bisherigen Iterationen der Schleife beginnend bei Null an. Dieser wird pro Iteration um eins inkrementiert. Nach Beendigung der Schleife wurde der enthaltene Blockdiagrammabschnitt (i + 1)-mal ausgeführt. Wird eine 0 an das Zählerterminal angeschlossen, wird der enthaltene Code nicht ausgeführt.
Die While-Schleife in LabVIEW besteht aus einem Rahmen der einen Blockdiagrammbereich umschließt. Der enthaltene Code wird wiederholt ausgeführt solange die Schleifenbedingung – repräsentiert durch einen booleschen Wert – erfüllt ist, anderenfalls wird der Datenfluss außerhalb der Schleife fortgesetzt. Da die Schleifenbedingung erst am Ende einer Iteration geprüft wird, wird der enthaltene Code mindestens einmal ausgeführt. Die Schleifenbedingung kann mit dem Bedienwerkzeug bzw. per Popup-Menü zwischen Wiederholungsterminal und Abbruchterminal umgeschaltet werden.
Wie die For-Schleife verfügt auch die While-Schleife über einen Iterationszähler, der die Anzahl der bisher ausgeführten Iterationen angibt.
Daten können in eine oder aus einer Schleife mittels Tunnels übergeben werden. Entsprechend dem Datenflussmodell müssen erst alle Daten an eine Schleife übergeben werden, bevor diese ausgeführt wird. Beide Schleifentypen arbeiten nach dem erwähnten Datenflussprinzip. Das heißt, beide Konstrukte nehmen nur zu Beginn einer Iteration Daten über Eingänge entgegen und geben diese nach innen weiter. Erst am Ende der letzten Iteration werden die resultierenden Daten an den Ausgängen der Schleife bereitgestellt. Betrachten Sie die folgenden Abbildungen. Im linken Beispiel wird der Wert des booleschen Bedienelements in jeder Iteration abgefragt und die Schleife bei TRUE gestoppt. Im rechten Beispiel wird der Wert vor dem Eintritt in die Schleife gelesen und für jede Iteration verwendet – sie erzeugen in Abhängigkeit des Wertes entweder eine Endlosschleife oder eine Schleife mit nur einer Iteration.
Richtig Falsch
Die folgenden Beispiele veranschaulichen einen ähnlichen Sachverhalt. Die numerische Anzeige im linken Beispiel wird in jeder Iteration mit einer neu erzeugten Zufallszahl beschrieben. Die numerische Anzeige im rechten Beispiel wird erst nach Beendigung der Schleife beschrieben. Sie erhält die in der letzten Iteration erzeugte Zufallszahl.
Durch Ziehen eines Rahmens im Blockdiagramm legen Sie die Grenzen der Schleife fest. Die Schleife enthält anschließend alle mit dem Rahmen eingefangenen Objekte. Sie können Objekte innerhalb der Schleife wie gewohnt hinzufügen bzw. diese per Drag & Drop in die Schleife hineinziehen. Beim Hinein- bzw. Herausziehen von Objekten wird die Begrenzung der Schleife bzw. des Blockdiagramms hervorgehoben. Die Größe der Struktur können Sie mit dem Positionierwerkzeug an den Ecken manipulieren. Überlappt die Schleife dabei ein Objekt im Blockdiagramm, erhält dieses einen schwarzen Schatten, um Sie zu warnen, dass das Objekt sich über und nicht innerhalb der Schleife befindet (siehe folgende Abbildung).
Wenn Sie eine Schleife mit dem Positionierwerkzeug markieren und diese löschen, wird auch deren Inhalt gelöscht. Um eine Schleife aus dem Blockdiagramm zu entfernen ohne deren Inhalt zu löschen klicken Sie mit der rechten Maustaste auf den Schleifenrand und wählen Sie While-Schleife entfernen bzw. For-Schleife entfernen.
Schieberegister dienen in For- und While-Schleifen für die Wiederverwendung von Daten aus vorherigen Iterationen. Ein Schieberegister lässt sich mit einer Variablen vergleichen, die in jedem Schleifendurchlauf aktualisiert wird. Sie erzeugen ein Schieberegister, indem Sie mit der rechten Maustaste auf den linken oder rechten Schleifenrand klicken und Schieberegister hinzufügen wählen. Ein Schieberegister besteht aus einem Anschlusspaar, das sich direkt gegenüber befindet. Der rechte Anschluss speichert die Daten nach einer Iteration. Diese werden dann für die nächste Iteration zum linken Anschluss „geschoben“.
in
nächste Iteration schieben
Ein Schieberegister kann jeden beliebigen Datentyp beinhalten – Numerisch, Boolesch, String, Array usw. Das Schieberegister passt sich automatisch an den zuerst angeschlossenen Datentyp an, es nimmt dabei die Farbe des Datentyps an. Ist kein Typ definiert erscheint das Schieberegister schwarz.
Betrachten Sie das folgende Beispiel. Hier wird die Summe des Iterationszählers gebildet. Nach jeder Iteration wird die neue Summe im Schieberegister gespeichert. Nach Beendigung der Schleife wird die Summe der Zahlen 0 bis 9 (45) angezeigt.
Sie können auch Daten aus mehreren vorhergehenden Iterationen in einem Schieberegister speichern. Dies ist z. B. nützlich, wenn Sie den Durchschnittswert der Daten aus mehreren Iterationen ermitteln wollen. Klicken Sie hierzu mit der rechten Maustaste auf das linke Terminal und wählen Sie Element hinzufügen, bzw. ziehen Sie das linke Schieberegister mit dem Positionierwerkzeug auf.
Es empfiehlt sich in den meisten Fällen, Schieberegister vor dem Eintritt in die Schleife zu initialisieren. Im obigen Beispiel wurde das Schieberegister mit 0 initialisiert. Wird das Schieberegister nicht initialisiert, wird bei der ersten Programmausführung der Standardwert des entsprechenden Datentyps verwendet. Bei folgenden Programmausführungen enthält das Schieberegister den Wert, der vom letzten Durchlauf erhalten geblieben ist. Ist der Datentyp des Schieberegisters numerisch, so ist der Standardwert 0, für boolesch FALSE, Strings enthalten eine leere Zeichenkette usw.
2 Läufe mit initialisierten 2 Läufe mit nicht initialisierten
Schieberegistern Schieberegistern
1. Lauf 1. Lauf
2. Lauf 2. Lauf
Beachten Sie, dass LabVIEW in nicht initialisierten Schieberegistern keine Werte zurücksetzt bis Sie das VI schließen und aus dem Speicher löschen. Dieses Verhalten kann man sich zu Nutze machen, das fehlende Initialisieren der Schieberegister kann jedoch zu schweren Fehlern VIs führen.
Die Case-Struktur ermöglicht die Ausführung des Datenflusses in Abhängigkeit von der Belegung eines Eingangswertes. Die Case-Struktur bildet einen Rahmen im Blockdiagramm mit einem Auswahlmenü am oberen Rand, mit dem zwischen den Zweigen gewechselt werden kann. An den Auswahlanschluss, gekennzeichnet mit einem Fragezeichen, wird der auszuwertende Draht angeschlossen.
Im Falle einer einfachen Verzweigung wird ein boolescher Wert am Auswahlanschluss erwartet, bei einer komplexeren Fallunterscheidung entweder eine ganze Zahl, ein Enum oder ein String.
Die einzelnen Case-Verzweigungen liegen übereinander, so dass Sie immer nur eine sehen können. Durch Klicken auf die Pfeile neben dem Auswahlmenü können Sie die Cases durchblättern. Sie können auch durch Klick auf das Auswahlmenü ein anzuzeigendes Case aus einem Pulldown-Menü auswählen.
Durch Rechtsklick auf den Rand der Case-Struktur werden Ihnen Möglichkeiten zum Hinzufügen, Duplizieren und Löschen von Cases angeboten. Bei komplexen Fallunterscheidungen können Sie Cases für einzelne Werte, Listen (durch Komma getrennt) und Bereiche (z. B. 0 .. 10) definieren. Werte außerhalb des definierten Bereiches werden automatisch auf den Standard-Case (Default) umgeleitet. Zum Definieren des Standard-Case klicken Sie mit der rechten Maustaste auf den Rahmen und wählen Sie Als Standard-Case verwenden.
Werte, die von außen in eine Case-Struktur hineingeführt werden, müssen nicht zwangsläufig in allen Cases verwendet werden. Wenn jedoch irgendein Case einen Wert ausgibt, müssen alle Cases an dieser Stelle einen Wert ausgeben, ansonsten ist das VI nicht ausführbar. Vollständig verdrahtete Ausgangstunnel werden ausgefüllt dargestellt, unvollständig verdrahtete Ausgangstunnel sind nicht ausgefüllt.
Unvollständig Vollständig
Eine Alternative für die einfache Case-Struktur mit zwei Unterscheidungen stellt die so genannte Auswahl Funktion dar, die eine etwas kompaktere Darstellung im Blockdiagramm ermöglicht. Sie finden diese Funktion in der Palette Vergleich.
Sie können mit dieser Funktion in Abhängigkeit des Auswahlanschlusses einen von zwei Eingängen an den Ausgang durchschalten. Sie können jedoch nicht wie bei der Case-Struktur in unterschiedliche Codesegmente ausführen.
Die Sequenz-Struktur besteht aus mehreren Rahmen, die nacheinander ausgeführt werden. Dadurch ist es möglich, die exakte Reihenfolge der Abarbeitung der Programmteile festzulegen, insbesondere, wenn zwischen den Programmteilen keine Datenabhängigkeit existiert.
Wie bei der Case-Struktur wird jeweils nur ein Rahmen angezeigt, sie können die Rahmen auf ähnliche Weise durchblättern. Auch das Hinzufügen, Duplizieren und Löschen von Rahmen funktioniert in gleicher Weise wie bei der Case-Struktur.
Im Gegensatz zur Case-Struktur müssen Sie bei der Sequenz nur Daten aus einem Rahmen an einen Ausgangstunnel anschließen. Die Daten werden aber erst aus der Sequenz weitergegeben, wenn der letzte Rahmen ausgeführt wurde. Daten am Eingangstunnel stehen wie bei der Case-Struktur allen Rahmen zur Verfügung.
Zum Weiterleiten von Daten aus einem Sequenz-Rahmen in darauf folgende dient die lokale Sequenz-Variable. Um eine lokale Sequenz-Variable hinzuzufügen, klicken Sie mit der rechten Maustaste auf den Rahmen und wählen Sie Lokale Sequenz-Variable hinzufügen. Sie können diese anschließend frei innerhalb des Rahmens platzieren.
Eine neu erstellte Sequenz-Variable erscheint als ein kleines gelbes Feld. Schließen Sie in einem beliebigen Rahmen Quelldaten an die Sequenz-Variable an, erscheint ein auswärts gerichteter Pfeil. In Rahmen vor dem Quellrahmen können Sie die Sequenz-Variable nicht verwenden, da noch kein Wert festgelegt wurde, es erscheint ein blasses Rechteck. In Rahmen nach dem Quellrahmen erscheint ein einwärts gerichteter Pfeil.
Neue Sequenz-Var. Nicht verwendbar Datenquelle Datensenke
Übung 1
Erstellen Sie eine kombinierte For-/While-Schleife, welche entweder bei Erreichen einer eingegebenen Zahl von Iterationen (einzugeben auf dem Frontpanel) oder bei Betätigen eines Stopp-Taste angehalten wird. Speichern Sie das VI als Combo For-While-Schleife.vi.
Übung 2
Erstellen Sie ein VI, welches in einer While-Schleife zyklisch Zufallszahlen erzeugt und den Mittelwert aus dem aktuellen und den letzten 3 Werten ermittelt. Das Programm soll mit einer Stopp-Taste beendet werden können. Der aktuelle und der Mittelwert sollen gemeinsam in einem Kurvendiagramm angezeigt werden. Speichern Sie Ihr VI als Mittelwert.vi.
Übung 3
Erstellen Sie ein VI, welches die Funktionalität eines Taschenrechners nachbildet. Auf dem Frontpanel werden zwei Zahlen in digitale Steuerelementen eingegeben und ein digitales Anzeigeelement zeigt das Ergebnis der Rechenoperation an. Wählen Sie eine geeignete Möglichkeit zum Selektieren der Rechenoperationen Addieren, Subtrahieren, Multiplizieren, Dividieren. Speichern Sie Ihr VI als Taschenrechner.vi.
Übung 4
Erstellen Sie ein VI, welches zwei Eingänge und einen Ausgang hat. Die Eingänge sind „Schwellwert“ und „Eingangsarray“, der Ausgang ist „Ausgangsarray“. Das Ausgangsarray soll alle Elemente des Eingangsarray enthalten, die größer oder gleich dem Schwellwert sind. Speichern Sie das VI als Elemente über Schwellwert.vi.
Hinweise: - Sie benötigen für diese Übung eine For-Schleife mit einem Schieberegister und einer Case-Struktur.
- Stichwort: Autoindexierung an Schleifen
Übung 5
Testen Sie Ihr VI aus Übung 4, indem Sie es als SubVI in einem VI verwenden, welches ein Array aus Zufallszahlen zwischen 0 und 1 erzeugt und dann alle Elemente, die größer oder gleich 0,5 sind ermittelt. Speichern Sie Ihr VI als Test Elemente über Schwellwert.vi.
Arrays sind eine Zusammenstellung von Elementen gleichen Typs. Ein Array kann aus einer oder mehreren Dimensionen bestehen und pro Dimension 0 bis theoretisch 231 Elemente enthalten - begrenzt durch den zur Verfügung stehenden Arbeitsspeicher. Ein Array kann aus jedem beliebigen Datentyp bestehen, außer aus einem anderen Array, einem Diagramm oder einem Graphen. Oft werden Kurvenformen in Arrays gespeichert, wobei jeder Punkt der Kurve einem Element im Array entspricht.
Zum Erstellen eines Arrays ist eine Array-Shell mit einem Datenobjekt zu verbinden. Das Datenobjekt kann dabei ein numerischer Typ, ein Boolean, ein String, Pfad oder Cluster sein. Die Array-Shell finden Sie in der Palette Array & Cluster (Frontpanel) bzw. Array (Blockdiagramm). Die folgenden Abbildungen zeigen eine leere Array-Shell auf dem Frontpanel und auf dem Blockdiagramm.
Um ein Array zu erzeugen ziehen Sie ein Datenobjekt (Bedien- bzw. Anzeigeelement oder Konstante) in das Anzeigefenster der Elemente. Neu erstellte Elemente aus der Palette können durch Klicken des Anzeigefensters auch direkt in der Shell abgelegt werden. Die Größe der Array-Shell wird daraufhin automatisch angepasst. Alle Elemente des Arrays müssen entweder Bedien- oder Anzeigeelemente sein, keine Kombination aus diesen.
Das Anschlussterminal eines Arrays auf dem Blockdiagramm wird in der Farbe des jeweiligen Datentyps dargestellt. Zur Kennzeichnung als Array wird der Datentyp in eckigen Klammern dargestellt. Das Anschlussterminal einer leeren Array-Shell ist zunächst schwarz.
Um die Größe der Elemente innerhalb des Arrays zu ändern verwenden Sie das Positionierwerkzeug und bewegen den Zeiger auf die Ecke eines Elements und ziehen Sie das Element größer oder kleiner.
Um die Anzahl der Dimensionen des Arrays zu ändern bewegen Sie den Zeiger auf die Ecke der Indexanzeige und ziehen Sie diese auf oder zu. Alternativ können Sie auch mit der rechten Maustaste auf die Indexanzeige klicken und Dimension hinzufügen bzw. Dimension entfernen wählen.
Um die Anzahl der dargestellten Elemente zu ändern bewegen Sie den Zeiger auf die Ecke der Array-Shell und ziehen Sie diese auf. Eindimensionale Arrays können Sie horizontal oder vertikal aufziehen, mehrdimensionale horizontal und vertikal. Die Anzahl der dargestellten Elemente hat keinen Einfluss auf die Anzahl der im Array enthaltenen Elemente.
Sobald der Datentyp eines Arrays festgelegt ist, können Sie Daten in das Array eingeben. Verwenden Sie dazu das Text- oder Bedienwerkzeug. Indizes, die keine Daten enthalten werden grau dargestellt. Verwenden Sie die Indexanzeige zum Blättern im Array. Das Element unmittelbar neben der Indexanzeige entspricht dem dort angezeigten Index.
Mit Hilfe von For- und While-Schleifen können Sie durch Verwenden der Autoindexierung automatisch Arrays generieren. Die Autoindexierung ist für For-Schleifen als Standardeinstellung aktiviert und für While-Schleifen deaktiviert. Sie können die Autoindexierung aktivieren bzw. deaktivieren, indem Sie auf den betreffenden Tunnel mit der rechten Maustaste klicken und Indexierung aktivieren bzw. Indexierung deaktivieren wählen. Bei aktivierter Autoindexierung wird pro Iteration ein Array-Element erzeugt und beim Verlassen der Schleife als Array übergeben. Beachten Sie, wie der Draht bei aktivierter Autoindexierung dicker wird – sich also in einen Array-Draht ändert. Bei deaktivierter Autoindexierung wird der Wert der letzten Iteration übergeben.
Autoindexierung aktiviert Autoindexierung deaktiviert
Autoindexierung wird auch verwendet, wenn Sie Arrays in Schleifen hineinführen. Bei aktivierter Autoindexierung wird pro Iteration ein Element indexiert. Beachten Sie wie der Draht bei aktivierter Autoindexierung dünner wird – sich also in einen Skalar-Draht ändert. Ist die Autoindexierung deaktiviert wird das gesamte Array auf einmal in die Schleife übertragen.
Autoindexierung aktiviert Autoindexierung deaktiviert
Sie können die Autoindexierung an For-Schleifen anstelle des Zähleranschlusses verwenden. LabVIEW setzt den Zähler automatisch auf die Array-Größe.
Schließen Sie mehrere Arrays bzw. zusätzlich den Zähleranschluss an, entscheidet das Array mit der geringsten Anzahl von Elementen, wie viele Iterationen ausgeführt werden.
Ein 2D-Array lässt sich mit einer Matrix vergleichen. Der Zugriff auf ein Element wird eindeutig über zwei Indizes ermöglicht: Den Zeilenindex und den Spaltenindex. Die folgende Abbildung zeigt ein 6 x 4 Array mit 24 Elementen. 2D-Arrays werden z. B. verwendet, wenn von mehreren Kanälen einer Datenerfassungskarte Werte gelesen werden.
Ein 2D-Array lässt sich mit zwei ineinander verschachtelten For-Schleifen erzeugen. Die innere For-Schleife erzeugt die Zeilen-Arrays mit der entsprechenden Anzahl von Spalten. Die äußere Schleife fügt die einzelnen Zeilen zu einem 2D-Array zusammen. Beachten Sie, wie sich die Darstellung des Drahtes für Skalare, 1D-Arrays und 2D-Arrays ändert.
Die Funktion Array initialisieren erzeugt und initialisiert ein n-dimensionales Array mit einem beliebigen Wert. Durch Aufziehen der Funktion können Sie Dimensionen hinzufügen. Diese Funktion ist für die Initialisierung von Schieberegistern und die Allokation von Speicher für Arrays sinnvoll.
Array-Größe gibt die Anzahl der Elemente eines Arrays zurück. Ist das Array mehrdimensional ist die Ausgabe selbst ein Array, wobei jedes Element die Größe der jeweiligen Dimension enthält.
Diese Funktion dient zum Zusammenfügen von Elementen zu einem neuen Array bzw. zum Anfügen von Elementen an ein bestehendes Array. Durch Klicken mit der rechten Maustaste und Aktivieren / Deaktivieren von Eingänge verknüpfen können Sie die Funktion konfigurieren. Beachten Sie die unterschiedliche Darstellung von Array- und Element-Eingängen. Durch Aufziehen können Sie die Anzahl der Eingänge erhöhen.
Die folgenden Abbildungen zeigen einige Beispiele für die Anwendung der Funktion Array erstellen.
Eingänge verknüpfen aktiviert fügt Skalare zu einem 1D-Array zusammen
Eingänge verknüpfen aktiviert fügt Skalare an ein 1D-Array an
Eingänge verknüpfen aktiviert verkettet Arrays
Eingänge verknüpfen aktiviert fügt ein 1D-Array an ein 2D-Array an
Eingänge verknüpfen deaktiviert fügt 1D-Arrays zu einem 2D-Array zusammen
Die Funktion Array indexieren extrahiert ein bestimmtes Element aus einem Array. Bei 2D-Arrays kann diese Funktion sowohl Einzelelemente, als auch ganze Zeilen bzw. Spalten extrahieren. Durch Aufziehen der Funktion können Sie weitere Elemente extrahieren.
Die folgenden Abbildungen zeigen einige Beispiele für die Anwendung der Funktion Array indizieren.
Extrahieren von Skalaren aus einem 1D-Array
Extrahieren von Skalaren aus einem 2D-Array
Extrahieren von Zeilen / Spalten aus einem 2D-Array
Gibt eine Untermenge aus einem Array zurück, beginnend ab einem bestimmten Index mit einer bestimmten Anzahl von Elementen.
Extrahieren von einem Teilarray aus einem 1D-Array
Extrahieren von einem Teilarray aus einem 2D-Array
Von Polymorphie spricht man bei Funktionen, die Argumente unterschiedlichen Typs akzeptieren und sich für jede Typvariante gleich verhalten. Das heißt, Eingänge polymorpher Funktionen können von unterschiedlicher Größe, Typ und Darstellung sein. Sie können z. B. skalare Daten zu einem Array addieren oder zwei Arrays addieren und hierfür dieselbe Funktion verwenden. Die folgende Abbildung zeigt einige der polymorphen Kombinationen der Funktion Addieren.
Skalar + Skalar = Skalar
Array + Skalar = Array
Array + Array = Array
Übung 1
Erstellen Sie ein VI, welches die Reihenfolge der Elemente eines Arrays mit 100 Zufallszahlen umkehrt. Array[0] wird Array[99], Array[1] wird Array[98] usw. Speichern Sie das VI als Array umkehren.vi.
Übung 2
Erstellen Sie ein VI, welches ein 2D-Array aus Zufallszahlen bestehend aus 3 Zeilen und 10 Spalten erzeugt. Indexieren Sie anschließend die Zeilen und stellen Sie diese jeweils in eigenen Graphen dar. Das Front Panel soll 3 Graphen enthalten. Speichern Sie das VI als Extrahiere 2D Array.vi.
Übung 3
Erstellen Sie ein VI, welches Würfe eines sechsseitigen Würfels simuliert und die Anzahl der jeweils geworfenen Einsen, Zweien, Dreien, Vieren, Fünfen und Sechsen zählt. Die Anzahl der Würfe kann durch den Bediener auf dem Front Panel eingegeben werden. Verwenden Sie für die Lösung lediglich ein Shift Register. Speichern Sie das VI als Würfel.vi.
Hinweis: Verwenden Sie folgende Array-Funktionen
Array initialisieren
Array indizieren
Array-Teilmenge ersetzen
Übung 4
Erstellen Sie ein VI, welches ein 1D-Array mit geradzahliger Anzahl von Elementen (zufällige Ganzzahlen zwischen 1 und 10) erzeugt und diese paarweise multipliziert ausgibt, z. B. out[0]=in[0]*in[1], out [1]=in[2]*in[3] usw. Speichern Sie das VI als Paar Multiplikation.vi.
Hinweis: Verwenden Sie folgende Funktion
1D-Array dezimieren
Das Cluster ist wie das Array eine Zusammenstellung von mehreren Datenelementen. Im Gegensatz dazu können die Elemente aber von unterschiedlichem Typ sein, die Anzahl der Elemente ist hier jedoch fest definiert. Cluster sind vergleichbar mit Strukturen in C oder anderen textorientierten Sprachen.
Man kann sich ein Cluster als ein Bündel von Drähten vorstellen. Jeder Draht stellt ein unterschiedliches Element des Clusters dar. Sie können Clusteranschlüsse nur dann verbinden, wenn der Datentyp exakt übereinstimmt, das heißt die Anzahl, der Typ und die Reihenfolge der Elemente müssen gleich sein.
Cluster werden häufig in der Fehlerbehandlung von VIs eingesetzt. Die folgenden Abbildungen zeigen die Fehler-Cluster Fehlereingang und Fehlerausgang. Diese übertragen Fehlerinformationen zwischen VIs, z. B. bei der Datenerfassung und Datei I/O.
Ein Cluster wird erzeugt, indem zunächst eine Cluster-Shell aus der Palette Array & Cluster platziert wird. Innerhalb der Cluster-Shell können dann beliebige Frontpanel-Objekte eingefügt werden – entweder durch direktes Platzieren oder per Drag & Drop.
Cluster können entweder nur Eingabe- oder nur Anzeigeelemente enthalten, weil das Cluster selbst das eine oder andere sein muss. Die folgende Abbildung zeigt ein Cluster mit 4 Eingaben.
Soll Ihr Cluster in der Größe exakt an die darin enthaltenen Elemente angepasst werden wählen Sie Automatische Anordnung Größe anpassen aus dem Popup-Menü. Hier können Sie auch wählen, ob die Elemente automatisch horizontal bzw. vertikal angeordnet werden.
Auf ähnliche Weise können Sie auch Cluster-Konstanten für das Blockdiagramm erzeugen.
Cluster-Elemente haben eine logische Reihenfolge, die unabhängig von ihrer Position innerhalb der Shell ist. Das zuerst eingefügte Element ist das Element Null, das zweite ist das Element Eins usw. Beim Löschen eines Elements wird die Reihenfolge automatisch angepasst.
Sie wechseln die Reihenfolge der Elemente innerhalb des Clusters, indem Sie Neuanordnung der Bedienelemente in Cluster… aus dem Popup-Menü wählen. In der Symbolleiste erscheinen daraufhin neue Schaltflächen und das Erscheinungsbild des Clusters ändert sich:
Die weißen Felder an den Elementen zeigen die bisherige Position, die schwarzen Felder zeigen die neue Position in der Reihenfolge. Durch Anklicken eines Elements wird diesem die in der Symbolleiste angezeigte Position zugewiesen. Sie können eine neue Zahl in das Feld eingeben, bevor Sie ein Element anklicken. Durch Klicken von OK werden die Anderungen übernommen. Beim Klicken auf das Kreuz werden die Anderungen verworfen.
Beachten Sie bei der Arbeit mit Clustern, dass die Zuordnung der Elemente von der Reihenfolge im Cluster und nicht vom Namen abhängt. Das folgende Beispiel soll das demonstrieren. Bei Cluster 2 wurde die Reihenfolge der Elemente getauscht.
Sofern die Datentypen kompatibel sind ist das VI ohne Fehler ausführbar, das Ergebnis ist jedoch nicht korrekt.
Die Funktion Elemente bündeln dient zum Erstellen eines neuen Clusters aus einzelnen Datenelementen und zum Ersetzen von Elemente in bestehenden Clustern.
Durch Aufziehen können Sie der Funktion Eingänge hinzufügen. Die Reihenfolge der angeschlossenen Elemente (von oben nach unten) entspricht der Reihenfolge der Elemente im Cluster.
Zum Ersetzen von Daten in einem Cluster schließen Sie das Eingangs-Cluster an den mittleren Anschluss der Funktion an. Für alle angeschlossenen Elementeingänge werden die jeweiligen Elemente ersetzt. Für nicht angeschlossene Elementeingänge wird der Wert aus dem Eingangscluster übernommen.
Die Funktion Cluster aufschlüsseln zerlegt ein Cluster in seine Einzelkomponenten. Die Reihenfolge der Ausgangselemente von oben nach unten entspricht der Reihenfolge im Cluster.
Die Anzahl der Ausgänge wird automatisch für das angeschlossene Cluster angepasst.
Zum Ersetzen bestimmter Elemente eines Clusters können Sie auch die Funktion Nach Namen bündeln verwenden. Im Unterschied zu Daten Bündeln wird hier jedoch auf das Element über seinen Namen und nicht über seine Position im Cluster zugegriffen. In diesem Fall muss auch immer ein Eingangscluster an den mittleren Anschluss angeschlossen werden. Außerdem dürfen die Namen der Elemente nicht leer sein, sonst können diese nicht ausgewählt werden.
Durch Aufziehen können Sie die Anzahl der zu ersetzenden Elemente anpassen. Mit dem Bedienwerkzeug können Sie das zu ersetzenden Element auswählen. Alternativ können Sie auch Objekt wählen im Popup-Menü verwenden.
Mit dieser Funktion können Sie auf Elemente des Clusters über deren Namen zugreifen. Die Auswahl der Elemente erfolgt genau wie bei der Funktion Nach Namen bündeln.
In bestimmten Anwendungsfällen kann es sinnvoll sein, Cluster in Arrays umzuwandeln und umgekehrt. Hierfür gibt es die Funktionen Array in Cluster und Cluster in Array.
Cluster in Array wandelt ein Cluster mit n Elementen des gleichen Datentyps in ein Array mit n Elementen dieses Typs um. Der Index im Array stimmt dabei mit der Position des Elements im Cluster überein. Beachten Sie, dass alle Elemente im Cluster denselben Datentyp haben müssen.
Array in Cluster konvertiert ein 1D-Array mit n Elementen in ein Cluster mit n Elementen des gleichen Datentyps. Die Größe des Ausgangs-Clusters muss manuell definiert werden, da Cluster die Anzahl ihrer Elemente nicht dynamisch anpassen. Wählen Sie dazu Cluster-Größe… aus dem Popup-Menü, die Vorgabegröße beträgt 9 Elemente. Hat ihr Array weniger Elemente, füllt LabVIEW die fehlenden Elemente mit dem nativen Standardwert des Datentyps auf (Null, False, …). Hat das Array mehr Elemente, werden diese abgeschnitten.
Strings, auch als Zeichenketten bezeichnet, sind einfach Folgen von ASCII-Zeichen. Oft verwenden Sie Strings als einfache Textbotschaften für die Kommunikation zwischen Bediener und Anwendung. Strings sind auch von Bedeutung für die Kommunikation über Schnittstellen (Seriell, TCP/IP, GPIB) und zum Abspeichern von Daten in Dateien.
Sie finden Die Bedien- und Anzeigeelemente für Strings in der Palette String & Pfad (Frontpanel) bzw. String-Konstanten in der Palette String (Blockdiagramm). Im Popup-Menü kann die Darstellung des Steuerelements gewählt werden. Zur Auswahl stehen Normale Anzeige, Code Anzeige, Passwort Anzeige und Hex Anzeige.
Die Code Anzeige dient für die Anzeige nicht darstellbarer Zeichen. Dies ist relevant für Protokolle zur Kommunikation mit Instrumenten (z. B. über serielle Anschlüsse) und anderen Geräten. Sonderzeichen werden dabei durch Escape-Sequenzen, eingeleitet durch Backslash, dargestellt. Die folgende Liste zeigt die verfügbaren Codes:
Code LabVIEW-Interpretation
00 - FF Hex-Wert eines 8-Bit-Zeichens, Großbuchstaben erforderlich
b Rückschritt (ASCII BS, entspricht 08)
f Seitenvorschub (ASCII FF, entspricht 0C)
n Zeilenvorschub (ASCII LF, entspricht 0A)
r Wagenrücklauf (ASCII CR0D)
t Tabulator (ASCII HT, entspricht 09)
s Leerzeichen (entspricht 20)
Umgekehrter Schrägstrich (ASCII , entspricht 5C)
Prozent
Wählen Sie im Kontextmenü den Befehl Passwort-Anzeige aus, um für jedes Zeichen, einschließlich Leerzeichen, das Sie in ein String-Bedienelement eingeben, ein Sternchen (*) anzuzeigen. Beim Lesen der String-Daten aus einem Blockdiagramm werden die tatsächlichen Daten abgerufen, die vom Benutzer eingegeben wurden. Es ist jedoch nicht möglich, die Daten aus dem Bedienelement zu kopieren.
Wählen Sie im Kontextmenü den Befehl Hex Anzeige, um den ASCII-Wert von Zeichen im Hexadezimalformat, anstatt das Zeichen selbst anzuzeigen. Der Befehl Hex Anzeige dient zur Fehlersuche und zur Kommunikation mit Instrumenten.
Durch den Wechsel des Anzeigemodus ändern sich nicht die im Steuerelement enthaltenen Daten – es ändert sich nur deren Darstellung.
Zeichenketten sind nicht auf die Länge einer Zeile begrenzt. Durch Drücken von Enter springt der Cursor in die nächste Zeile und Sie können weiteren Text eingeben. Um Benutzer an der Eingabe mehrzeiliger Strings zu hindern, wählen Sie im Kontextmenü den Befehl Beschränkung auf eine Zeile aus. In diesem Fall sind keine Wagenrückläufe (CR) erlaubt. Beim Betätigen von Enter wird die Texteingabe automatisch beendet.
Gibt im Parameter Länge die Anzahl der Zeichen (Bytes) im String aus. Der Eingang ist polymorph, d. h. Sie können einfache Strings, String-Arrays und String-Cluster anschließen. Der Ausgang hat dabei die gleiche Struktur wie der Eingang, der Datentyp ist aber ein Long-Integer.
Verknüpft mehrere Eingangs-Strings zu einem einzelnen Ausgangs-String. Die Eingänge können einfache Strings oder String-Arrays sein. Bei der Eingabe von Arrays verknüpft diese Funktion jedes Element des Arrays. Durch Aufziehen der Funktion können Sie weitere Eingänge hinzufügen.
Verwenden Sie die Funktion 'In String formatieren' zum Umwandeln numerischer Daten in Zeichenketten.
Format-String gibt an, wie die Eingangs-Argumente in Resultierender String konvertiert werden. Die entsprechenden Formatspezifizierer sind im Detail im LabVIEW-Handbuch und in der Online-Hilfe dokumentiert. Die folgende Tabelle zeigt einige Beispiele für das Verhalten der Funktion:
Anfangs-String |
Format-String |
Argument |
Resultierender String |
(leer) |
Ergebnis=%2d%% |
Ergebnis=87% |
|
Ergebnis= |
%2d% |
Ergebnis=87% |
|
(leer) |
Spannung = %7.2e V |
Spannung = 3,64E-2 V |
|
(leer) |
%5.3f |
5,67 N |
5,670 N |
Mit dem %-Zeichen beginnt die Festlegung der Formatierung. Bei der Angabe „%Zahl1.Zahl2“ bestimmt Zahl1 die Feldbreite und Zahl2 die Genauigkeit, d. h. die Anzahl Ziffern nach dem Komma. Ein f formatiert die Eingabe als Fließkommazahl, d als dezimale und e als Fließkommazahl in wissenschaftlicher Darstellung. Sie können die Funktion aufziehen um mehrere Werte zu konvertieren. In diesem Fall muss für jedes Argument ein Formatspezifizierer vorhanden sein. Die Argumente werden von oben nach unten den Platzhaltern im Format-String von links nach rechts zugeordnet.
Wenn Sie das Kontextmenü der Funktion 'In String formatieren' aufrufen und Format-String bearbeiten auswählen, öffnet LabVIEW ein Dialogfeld, das Sie zum Erstellen und Bearbeiten des Format-Strings verwenden können.
Übung 1
Erstellen Sie ein VI welches eine Fließkommazahl auf 4 Nachkommastellen genau in einen String, umschlossen von einem Header- und Trailer-String, formatiert. Header-String, Zahl und Trailer-String sollen durch den Benutzer eingegeben werden können. Der resultierende String sowie dessen Länge sollen angezeigt werden. Speichern Sie das VI als Erstelle String.vi.
Übung 2
Erstellen Sie ein VI, zum Suchen und Ersetzen aller Vorkommen eines Strings. Wählen Sie selbst eine geeignete Funktion aus der String-Palette. Der Bediener kann den Eingabe-String, den Such-String und den Ersetzen-String auf dem Frontpanel eingeben. Speichern Sie das VI als Suchen und ersetzen.vi.
Erweiterung: Zeigen Sie die Anzahl der ersetzten Vorkommen an.
Übung 3
Erstellen Sie ein VI, welches zyklisch das aktuelle Datum und die aktuelle Uhrzeit als zweizeiligen String formatiert ausgibt:
Wählen Sie selbst eine geeignete Funktion aus der String-Palette. Speichern Sie das VI als Date Time String.vi.
Häufig ist es erforderlich, Messdaten in einer Datei abzulegen, um diese für spätere Analysen zur Verfügung zu stellen oder diese einfach zu archivieren. Die Daten können durch LabVIEW oder auch andere Anwendungen, wie Tabellenkalkulationen, verwendet werden. Bevor Sie Ihre Daten speichern, müssen Sie sich im Klaren sein, welche Applikationen mit diesen Daten arbeiten sollen und ein geeignetes Format wählen.
Im Folgenden werden vier Funktionen vorgestellt, mit denen Sie einen Großteil der in der Praxis auftretenden Probleme auf einfache Weise lösen können. Diese komplexen Funktionen erledigen sämtliche Vorgänge wie Öffnen, Schließen und Fehlerbehandlung. Für das Streaming von Daten bei hohen Geschwindigkeiten oder in binären Formaten sei an dieser Stelle auf die fortgeschrittenen Funktionen verwiesen.
Die Funktion In Spreadsheet-Datei schreiben konvertiert ein 2D- oder 1D-Array in eine Zeichenkette für eine Tabellenkalkulation (csv: character separated values) und schreibt diese in eine Datei. Sie können wählen, ob die Datei überschrieben wird, oder ob die Daten an die Datei angehängt werden. Wird kein Dateipfad festgelegt, erscheint ein Dialogfeld, das Sie dazu auffordert, einen Namen für die Datei einzugeben.
Die Funktion Aus Spreadsheet-Datei lesen liest die angegebene Anzahl von Zeilen aus einer Spreadsheet-Datei mit numerischen Daten und wandelt diese in ein 2D-Array. Wird kein Dateipfad festgelegt, erscheint ein Dialogfeld, um eine Datei auszuwählen.
Die Funktion Zeichen in Datei schreiben schreibt einen Daten-String in eine Datei. Sie können wählen, ob die Datei überschrieben wird, oder ob die Daten an die Datei angehängt werden. Wird kein Dateipfad festgelegt, erscheint ein Dialogfeld, das Sie dazu auffordert, einen Namen für die Datei einzugeben.
LabVIEW 8.x: <LabVIEW>vi.libUtilityfile.llbWrite Characters To File.vi
Die Funktion Zeichen aus Datei lesen liest die angegebene Anzahl von Zeichen aus einer Datei. Wird kein Dateipfad festgelegt, erscheint ein Dialogfeld, um eine Datei auszuwählen.
LabVIEW 8.x: <LabVIEW>vi.libUtilityfile.llbRead Characters From File.vi
Übung 1
Erstellen Sie ein VI, welches ein 2D-Array aus Zufallszahlen bestehend aus 3 Zeilen und 100 Spalten erzeugt und die Daten transponiert in ein Spreadsheet File schreibt. Das File soll einen Header für jede Spalte enthalten. Verwenden Sie dazu die Funktionen Zeichen in Datei schreiben und In Spreadsheet-Datei schreiben. Speichern Sie das VI als Spreadsheet Array.vi
Erweiterung: Lesen Sie die Datei anschließend mit der Funktion Aus Spreadsheet-Datei lesen wieder ein, überspringen Sie dabei jedoch den Header. Stellen Sie die geschriebenen und rückgelesenen Daten zum Vergleich nebeneinander in 2D-Arrays dar.
Übung 2
Erstellen Sie folgenden einfachen Texteditor: Der Bediener kann in einem String-Bedienelement Text eingeben. Auf der Oberfläche gibt es eine Schaltfläche zum Laden eines Textes aus einer Datei ( Zeichen aus Datei lesen) und zum Speichern des Textes in eine Datei ( Zeichen in Datei schreiben). Eine Weitere Schaltfläche dient zum Beenden des Programms.
Hinweis: Erstellen Sie eine lokale Variable für das programmatische Schreiben auf das String-Bedienelement.
Speichern Sie das VI als Texteditor.vi.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 3152
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved
Distribuie URL
Adauga cod HTML in site