Polymorphe VIs und Funktionen haben die Fähigkeit, sich automatisch verschiedenen Arten von Eingangsdaten anzupassen. Funktionen können auf unterschiedliche Weise polymorph sein: keine, einige oder alle Eingänge können polymorph sein. Einige Funktionseingänge arbeiten mit Zahlen oder booleschen Werten. Für andere sind Zahlen oder Strings zulässig. Daneben sind für einige polymorphe VIs nicht nur skalare Zahlen, sondern beispielsweise auch Arrays und Cluster mit numerischen Werten oder Arrays aus Clustern mit numerischen Werten zulässig. Einige akzeptieren nur eindimensionale Arrays, wobei die Array-Elemente von jedem Datentyp sein können. Manche Funktionen lassen alle Datentypen zu, komplexe Zahlen eingeschlossen. Sie auch polymorphe Einheiten erstellen und verwenden.

Umwandeln von Zahlen

Jede numerische Darstellung kann in jede andere numerische Darstellung konvertiert werden. Wenn Sie mehrere numerische Eingänge unterschiedlichen Formats mit einer Funktion verbinden, wird am Ausgang in der Regel der genauere Wert ausgegeben. Die Funktionen wandeln das Format der kleineren Darstellungen vor der Ausführung in die genaueste Darstellung um, und es wird ein Typumwandlungspunkt am entsprechenden Anschluss angezeigt.

Einige Funktionen, wie Dividieren, Sinus oder Cosinus, geben per Voreinstellung Fließkommazahlen aus. Wenn Sie Ganzzahlen an den Eingängen eingeben, wandeln diese Funktionen die Ganzzahlen vor der Ausführung der Berechnung in Double-Fließkommazahlen um. Die meisten numerischen Funktionen lassen sich jedoch so konfigurieren, dass der angegebene Datentyp ausgegeben wird.

Für skalare Mengen mit Fließkommazahlen werden normalerweise am besten Double-Fließkommazahlen verwendet. Single-Fließkommazahlen sparen wenig oder keine Ausführungszeit und laufen sehr viel schneller über. Die Analysebibliotheken verwenden beispielsweise Double-Fließkommazahlen. Fließkommazahlen erweiterter Genauigkeit sollten nur wenn notwendig verwendet werden. Die Leistung und Genauigkeit arithmetischer Operationen mit Fließkommazahlen erweiterter Genauigkeit hängt von der jeweiligen Plattform ab.

Für ganze Zahlen wird normalerweise am besten ein vorzeichenbehafteter 32-Bit-Integer verwendet.

Wenn ein Ausgang mit einem Ziel verbunden wird, das mit einer anderen numerischen Darstellung arbeitet, konvertiert LabVIEW die Daten entsprechend den folgenden Regeln:

  • Ganzzahl mit oder ohne Vorzeichen in Fließkommazahl—LabVIEW konvertiert Daten in den nächstmöglichen Wert. Wenn die Fließkommazahl genauer als die Ganzzahl ist, erfolgt die Umwandlung ohne Genauigkeitsverlust. Ist die Ganzzahl genauer als die Fließkommazahl, behält LabVIEW bei der Konvertierung die größtmögliche Genauigkeit bei.
  • Fließkommazahl in Ganzzahl mit oder ohne Vorzeichen—LabVIEW wandelt Werte außerhalb des Bereichs in den Maximal- oder Minimalwert der Ganzzahl. Die meisten der ganzzahligen Objekte, wie zum Beispiel der Iterationsanschluss einer For-Schleife, runden Fließkommazahlen auf beziehungsweise ab. Bruchteile von 0,5 werden auf die nächste gerade Ganzzahl gerundet. So wird beispielsweise 6,5 auf 6 und nicht auf 7 gerundet.
  • LabVIEW behandelt Enums wie vorzeichenlose Integer—Wenn Sie zum Beispiel die Fließkommazahl -1 in eine Enum umwandeln, wird der Wert an den Enum-Wertebereich angepasst. Wenn der Wertebereich der Enum zwischen 0 und 25 liegt, wird der Wert in 0 umgewandelt.
  • Ganzzahl in Ganzzahl—LabVIEW wandelt Werte außerhalb des Bereichs nicht in den Maximal- oder Minimalwert der Ganzzahl um. Wenn der Ausgangswert kleiner als der Zielwert ist, wird das Vorzeichen eines vorzeichenbehafteten Ausgangswerts erweitert und in die überzähligen Bits eines vorzeichenlosen Ausgangswerts werden Nullen eingefügt. Wenn der Wertebereich des Ausgangswerts größer als der des Zielwerts ist, werden nur die niedrigstwertigen Bits des Werts kopiert.
  • Integer, Fließkommazahl oder Festkommazahl in Fließkommazahl—LabVIEW wandelt Werte außerhalb des gewünschten Bereichs für die Festkommazahl in einen Wert um, der zwischen dem Maximum und dem Minimum der Festkommazahl liegt.

Polymorphie von numerischen Funktionen

Die Eingangswerte für arithmetische Funktionen müssen numerisch sein. Mit einigen Ausnahmen, auf die bei den Funktionsbeschreibungen hingewiesen wird, besitzt der Standardausgang dieselbe numerische Darstellung wie der Eingang. Bei verschiedenen Darstellungen der Eingänge erfolgt die Standardausgabe in der größeren Darstellung. Wenn Sie beispielsweise einen 8- und einen 16-Bit-Integer addieren, ist die Ausgabe ein 16-Bit-Integer. Beim Konfigurieren des Ausgangs einer Numerischen Funktion überschreiben die von Ihnen vorgenommenen Einstellungen die Standardeinstellung.

Die arithmetischen Funktionen arbeiten mit Zahlen, Arrays mit Zahlen, Clustern mit Zahlen, Arrays mit Clustern von Zahlen, komplexen Zahlen, und so weiter. Die formale und rekursive Definition des zulässigen Eingabetyps lautet:

Zahlentyp = numerischer Skalar ODER Array [Zahlentyp] ODER Cluster [Zahlentypen]

Die numerischen Skalare können Fließkommazahlen, Ganzzahlen oder komplexe Fließkommazahlen sein. LabVIEW lässt keine Verwendung von Arrays aus anderen Arrays zu.

Arrays können eine beliebige Anzahl Dimensionen jeder Größe haben. Cluster können eine beliebige Anzahl von Elementen enthalten. Der Ausgangstyp von Funktionen besitzt dieselbe numerische Darstellung wie der Eingangstyp. Bei Funktionen mit nur einem Eingang verarbeiten die Funktionen jedes Element des Arrays oder Clusters.

Bei Funktionen mit zwei Eingängen können Sie die folgenden Eingangskombinationen verwenden:

  • Ähnlich—Beide Eingangswerte haben die gleiche Struktur und der Ausgangswert hat die gleiche Struktur wie die Eingangswerte.
  • Ein Skalar—An einem Eingang liegt ein numerischer Skalar an und am anderen ein Array oder Cluster und es wird ein Array oder Cluster ausgegeben.
  • Array—An einem Eingang liegt ein Zahlen-Array an und am anderen eine Zahl und es wird ein Array ausgegeben.

Bei ähnlichen Arten von Eingangswerten führt LabVIEW die Funktion für die jeweiligen Elemente der Strukturen durch. Beispielsweise werden zwei Arrays Element für Element addiert. Beide Arrays müssen die gleiche Dimensionsanzahl haben. Sie können Arrays mit einer unterschiedlichen Anzahl von Elementen addieren, aber dann werden nur so viele Elemente ausgegeben, wie das kleinere der Eingangs-Arrays enthält. Cluster müssen in der Anzahl ihrer Elemente übereinstimmen und die Elemente müssen im Typ übereinstimmen.

Bei Operationen mit einem Skalar und einem Array oder Cluster führt LabVIEW die Funktion mit dem Skalar und den entsprechenden Elementen der Struktur durch. LabVIEW kann beispielsweise unabhängig von der Dimensionsanzahl des Arrays von allen Elementen eines Arrays einen Wert subtrahieren.

Bei Operationen mit einem numerischen Typ und einem Array des betreffenden Typs führt LabVIEW die Funktion für jedes Array-Element durch. Bei einem Graphen handelt es sich beispielsweise um ein Array von Punkten, wobei ein Punkt in Form eines Clusters aus den Zahlen xund y dargestellt wird. Um einen Graphen 5 Einheiten in x-Richtung und 8 Einheiten in y-Richtung zu verschieben, können Sie den Punkt (5, 8) zum Graphen addieren.

In der folgenden Abbildung sind mögliche polymorphe Kombinationen der Additionsfunktion dargestellt.

Polymorphie von booleschen Funktionen

Die Logikfunktionen nehmen boolesche und numerische Eingangsdaten sowie Fehler-Cluster an. Bei einem numerischen Eingangswert führt LabVIEW die Operation bitweise durch. Wenn am Eingang eine Ganzzahl anliegt, ist der Ausgangswert ebenfalls eine Ganzzahl. Fließkommawerte werden auf einen 32-Bit-Integer gerundet und die Ausgangswerte sind ebenfalls 32-Bit-Integer. Wenn der Eingang ein Fehler-Cluster ist, gibt LabVIEW nur den TRUE- oder FALSE-Wert des Parameters Status des an den Eingangsanschluss weiter.

Die Logikfunktionen arbeiten mit Zahlen oder booleschen Werten, Clustern mit Zahlen oder booleschen Werten, Arrays mit Clustern von Zahlen oder booleschen Werten und so weiter.

Die formale und rekursive Definition des zulässigen Eingabetyps lautet:

Logiktyp = boolescher Skalar ODER numerischer Skalar ODER Array [Logiktyp] ODER Cluster [Logiktypen]

mit der Ausnahme, dass komplexe Zahlen und Arrays von Arrays nicht zugelassen sind.

Bei Logikfunktionen mit zwei Eingängen können die Eingangswerte wie bei den arithmetischen Funktionen kombiniert werden. Die Logikfunktionen unterliegen jedoch der Beschränkung, dass die Grundoperationen nur zwischen zwei booleschen Werten oder zwei Zahlen erfolgen können. Eine UND-Operation zwischen einem booleschen Wert und einer Zahl ist beispielsweise nicht möglich. In der folgenden Abbildung sehen Sie einige Kombinationen boolescher Werte für die UND-Funktion.

Polymorphie von Array-Funktionen

Die meisten Array-Funktionen arbeiten mit n-dimensionalen Arrays beliebigen Typs. Die Verbindungsdiagramme in den Funktionsbeschreibungen zeigen als Standarddatentyp numerische Arrays.

Polymorphie von String-Funktionen

Die Funktionen String-Länge, In Großbuchstaben, In Kleinbuchstaben, String umkehren und String rotieren arbeiten mit Strings, Clustern und Arrays aus Strings sowie Arrays aus Clustern. Daneben arbeiten die Funktionen "In Großbuchstaben" und "In Kleinbuchstaben" auch mit Zahlen, Clustern aus Zahlen sowie Arrays aus Zahlen, wobei die Zahlen als ASCII-Zeichen interpretiert werden. Die Eingänge für Breite und Genauigkeit müssen skalar sein.

Polymorphie von String-Konvertierungsfunktionen

Die Funktionen Pfad nach String und String nach Pfad sind polymorph. Das heißt, sie arbeiten mit skalaren Werten, Arrays von Skalaren, Clustern von Skalaren, Arrays von Clustern mit Skalaren, und so weiter. Der Ausgangswert hat die gleiche Struktur wie der Eingangswert, entspricht aber dem neuen Typ.

Polymorphie von zusätzlichen Funktionen zur Konvertierung von Strings in Zahlen

Die Funktionen "Zahl nach String (Dezimaldarstellung)", "Zahl nach String (Hexadezimaldarstellung)", "Zahl nach String (Oktaldarstellung)", "Zahl nach String (Technische Notation)", "Zahl nach String (Fließkommadarstellung)" und "Zahl nach String (Exponentialdarstellung)" können Cluster oder Arrays aus numerischen Werten verarbeiten und geben Cluster oder Arrays mit Strings aus. Die Funktionen "Zahl nach String (Dezimaldarstellung)", "Zahl nach String (Hexadezimaldarstellung)" und "Bruch-/Exponential-String nach Zahl" können Cluster und Arrays aus Strings verarbeiten und geben Cluster und Arrays aus Zahlen aus. Die Eingänge für Breite und Genauigkeit müssen skalar sein.

Polymorphie von Cluster-Funktionen

Die Funktionen Elemente bündeln und Aufschlüsseln zeigen erst dann die Datentypen für die einzelnen Eingangs- oder Ausgangsanschlüsse, wenn Objekte mit den betreffenden Anschlüssen verbunden werden. Wenn Sie diese Anschlüsse verbinden, sehen sie ähnlich wie die Datentypen der entsprechenden Frontpanel-Anschlüsse der Bedien- oder Anzeigeelemente aus.

Polymorphie von Vergleichsfunktionen

Die Vergleichsfunktionen Gleich?, Nicht gleich? und Wählen arbeiten mit Eingangswerten beliebigen Typs, solange der Typ aller Eingangswerte gleich ist.

Die Funktionen Größer oder gleich?, Kleiner oder gleich?, Kleiner?, Größer?, Max & Min und Wertebereich prüfen und erzwingen arbeiten mit allen Arten von Eingangsgrößen außer komplexen Zahlen, Pfad und Referenzen, solange diese dem gleichen Typ angehören. So können zum Beispiel Zahlen, Strings, boolesche Werte, Arrays aus Strings, Cluster aus Zahlen oder Cluster aus Strings verglichen werden. Dagegen ist zum Beispiel ein Vergleich einer Zahl mit einem String oder eines Strings mit einem booleschen Wert nicht möglich.

Die Funktionen, die Werte mit Null vergleichen, akzeptieren numerische Skalare, Cluster und Arrays aus Zahlen. Diese Funktionen geben boolesche Werte in derselben Datenstruktur wie der Eingang aus.

Die Funktion Keine Zahl/Pfad/Referenz arbeitet mit den gleichen Typen von Eingangswerten wie die Funktionen, die Werte mit Null vergleichen. Diese Funktion kann auch Pfade und Referenzen verarbeiten. Die Funktion "Keine Zahl/Pfad/Referenz" gibt boolesche Werte in der gleichen Datenstruktur aus, wie sie am Eingang anliegen.

Die Funktionen Dezimalziffer?, Hexadezimalziffer?, Oktalziffer?, Druckbar? und Nicht darstellbare Zeichen? arbeiten mit skalaren Strings oder Zahlen, Clustern aus Strings oder nicht komplexen Zahlen, von Arrays aus Strings oder nicht komplexen Zahlen und so weiter. Am Ausgang werden boolesche Werte mit der gleichen Datenstruktur wie die Eingangswerte ausgegeben.

Die Funktion Leerer String/Pfad? arbeitet mit Pfaden, skalaren Strings, Clustern aus Strings, Arrays aus Strings und so weiter. Am Ausgang werden boolesche Werte mit der gleichen Datenstruktur wie die Eingangswerte ausgegeben.

Die Funktionen "Gleich?", "Ungleich?", "Keine Zahl/Kein Pfad/Keine Referenz?", "Leerer String/Pfad" und "Auswählen" sind die einzigen Vergleichsfunktionen, die Pfade und Referenzen verarbeiten können.

Bei Vergleichsfunktionen, die Arrays und Cluster verwenden, werden normalerweise boolesche Arrays und Cluster mit identischer Struktur erzeugt. Wenn die Funktion einen booleschen Wert ausgeben soll, klicken Sie diese mit der rechten Maustaste an und wählen Sie aus dem Kontextmenü die Option Vergleichsmodus»Elementsätze vergleichen, um die Elementsätze zu vergleichen.

Polymorphie für logarithmische Funktionen

Die logarithmischen Funktionen verarbeiten Zahlen. Wenn am Eingang eine ganze Zahl anliegt, wird am Ausgang eine Fließkommazahl mit doppelter Genauigkeit ausgegeben. Andernfalls hat der Ausgabewert die gleiche Zahlendarstellung wie der Eingangswert.

Diese Funktionen arbeiten mit Zahlen, Arrays mit Zahlen, Clustern mit Zahlen, Arrays mit Clustern von Zahlen, komplexen Zahlen, und so weiter. Die formale und rekursive Definition des zulässigen Eingabetyps lautet:

Zahlentyp = numerischer Skalar ODER Array [Zahlentyp] ODER Cluster [Zahlentypen]

mit der Ausnahme, dass Arrays aus Arrays nicht zugelassen sind.

Arrays können eine beliebige Größe und eine beliebige Anzahl Dimensionen haben. Cluster können eine beliebige Anzahl von Elementen enthalten. Die Ausgangswerte haben die gleiche Zahlendarstellung wie die Eingangswerte und die Funktionen verarbeiten jedes Element des Clusters oder Arrays. Für logarithmische Funktionen mit zwei Eingängen sind die folgenden Kombinationen von Eingangstypen zulässig:

  • Ähnlich—Beide Eingangswerte haben die gleiche Struktur und der Ausgangswert hat die gleiche Struktur wie die Eingangswerte.
  • Ein Skalar—Der eine Eingangswert ist eine Skalarzahl, der andere ein Array oder Cluster aus Zahlen und am Ausgang wird ein Array oder Cluster ausgegeben.