Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
BulgaraCeha slovacaCroataEnglezaEstonaFinlandezaFranceza
GermanaItalianaLetonaLituanianaMaghiaraOlandezaPoloneza
SarbaSlovenaSpaniolaSuedezaTurcaUcraineana

BildungBiologieBücherChemieComputerElektronischFilmGeographie
GeschichteGeschichtenGrammatikKunstLebensmittelLiteraturManagementMathematik
MedizinPhilosophiePhysikalischPolitikRezepteTechnikVerschiedeneWirtschaft
Ökologie

Vorlesungsskript - Objektorientierte Softwareentwicklung mit LabVIEW

Computer



+ Font mai mare | - Font mai mic



DOCUMENTE SIMILARE

Objektorientierte Softwareentwicklung mit



Vorlesungsskript

Stand: 2007-01-05

Fachhochschule Jena

Wintersemester 2006 / 2007

Studienrichtung AT / TI / KMT

Literaturempfehlungen

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

Einführung in LabVIEW

LabVIEW

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

Virtuelle Instrumente

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

Line

Line
Line


LabVIEW Entwicklungsumgebung

Funktions-, Element- und Werkzeugpalette


Laden von VIs

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.

Speichern von VIs

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.

Frontpanel Toolbar

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

Popup Menus

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.

Menus

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

Tastenkombinationen

LabVIEW Hilfe Optionen

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.

Erzeugen, Bearbeiten und Debuggen Virtueller Instrumente

Erstellen des Frontpanels

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)

Erstellen des Blockdiagramms

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

Verbindungstypen

Verbindungstechniken

Blockdiagrammbearbeitung

Erstellen von Symbol und Anschlussfeld

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

Datenflussprogrammierung

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.

Techniken zur Fehlersuche

Übungen

Ü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.

Tipps & Tricks

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.

Ablaufstrukturen

Die For-Schleife

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.

Line


Line

Die While-Schleife

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.

Line

Line


Line

Wie die For-Schleife verfügt auch die While-Schleife über einen Iterationszähler, der die Anzahl der bisher ausgeführten Iterationen angibt.

Schleifenanschlüsse

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.

 

Bearbeiten von Schleifen

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

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

 
LineLineLine

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

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

 

Die Funktion Auswahl

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

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

 

Übungen

Ü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

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.

Arrays als Bedien- und Anzeigeelement sowie Konstante

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.

Line


Line 

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.

Autoindexierung von Arrays

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.

Zweidimensionale Arrays

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.

Funktionen zur Bearbeitung von Arrays

Array initialisieren

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

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.

 

Array erstellen

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

Array indizieren

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

Array-Teilmenge

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

Polymorphie

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

Übungen

Ü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

Cluster

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.

 

Cluster als Bedien- und Anzeigeelemente

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.

Reihenfolge der Cluster-Elemente

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.

Funktionen für die Arbeit mit Clustern

Daten bündeln

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.

 

Cluster aufschlüsseln

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.

 

Nach Namen bündeln

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.

 

Nach Namen aufschlüsseln

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.

Umwandlungen zwischen Arrays und Clustern

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

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.

Strings als Bedien- und Anzeigeelemente

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.

Funktionen zur Bearbeitung von Strings

String-Länge

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.

Strings verknüpfen

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.

In String formatieren

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.

Übungen

Ü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.

Datei-I/O

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.

Funktionen für die Arbeit mit Dateien

In Spreadsheet-Datei schreiben

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.

Aus Spreadsheet-Datei lesen

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.

Zeichen in Datei schreiben

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

Zeichen aus Datei lesen

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

Übungen

Ü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



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 3033
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved

Distribuie URL

Adauga cod HTML in site