Verfahren zur Veränderung von Daten und Strings
- Aktualisiert2025-08-27
- 4 Minute(n) Lesezeit
Bei der Kommunikation mit Geräten werden Daten vom Gerät gesendet und empfangen. Bei Treibern müssen die gesendeten und empfangenen Daten normalerweise nicht formatiert werden, da der Treiber dafür zuständig ist. Beim Erstellen von VIs zur Kommunikation mit Geräten kann allerdings ein Formatieren von Daten erforderlich sein.
Bei der Kommunikation mit einem nachrichtengesteuerten Gerät müssen Sie die Befehls-Strings ordnungsgemäß erstellen und formatieren, so dass das Gerät die richtige Operation ausführt oder die richtigen Rückmeldungen gibt.
Für Geräte mit registergesteuerter Kommunikation gibt es keine Standards. Jedes Gerät arbeitet auf verschiedene Weise. Eine Beschreibung zur Programmierung finden Sie in der entsprechenden Dokumentation des Geräts.
In der Regel ist ein Befehls-String eine Kombination aus Zahlen und Text. Bei einigen Geräten können die Befehle nur in Textform vorliegen. Das heißt, Sie müssen alle Zahlen in Text konvertieren und sie an den Befehls-String anhängen. Ebenso müssen Sie die vom Gerät ausgegebenen Daten in ein für VIs, Funktionen und Anzeigen erkenntliches Format umwandeln, so dass sie mit LabVIEW kompatibel sind.
(Windows) Mit dem Assistenten zur Instrumenten-I/O können Abfragen an ein Gerät gesendet und die empfangenen Daten formatiert werden. Legen Sie das Express-VI „Assistent zur Instrumenten-I/O“ auf dem Blockdiagramm ab, um auf den Assistenten zur Instrumenten-I/O zugreifen zu können.
Mit der Funktion In String formatieren können Sie Befehls-Strings erstellen, die an ein Gerät gesendet werden. Sie können mit der Funktion auch andere Strings oder numerische Datentypen an einen Anfangs-String anhängen.
Formatieren von empfangenen Daten
Den meisten von Geräten ausgegebenen Daten haben, genau wie die gesendeten Daten, voraus- oder hintenangestellte Informationen. Der Header (die vorangestellten Informationen) umfasst in der Regel die Anzahl der ausgegebenen Werte oder die Geräteeinstellungen. Zu den hintenangestellten Informationen gehören oft Einheiten oder andere Geräteeinstellungen. In der Dokumentation des Geräts finden Sie meistens eine Beschreibung zu den mit jedem Datentransfer ausgetauschten Informationen. Bevor die ausgegebenen Daten in LabVIEW angezeigt oder analysiert werden können, müssen die voran- und hintenangestellten Informationen entfernt werden.
Mit den Teil-String-Funktionen können Sie die voran- und hintenangestellten Informationen in einem String analysieren und in String-Anzeigen darstellen. Mit der Funktion In String suchen können Sie die Daten des Strings analysieren.
Übertragung von Signalverläufen
Geräte können Daten auch in anderen Formaten ausgeben, z. B. dem ASCII, dem 1-Byte- oder dem 2-Byte-Binärformat. Die möglichen Formate und die jeweilige Konvertierung in nutzbare Daten ist in der Gerätedokumentation beschrieben.
ASCII-Signalverläufe
Gibt ein Gerät Daten im ASCII-Format aus, können Sie sich die Daten als Zeichenfolge anzeigen lassen. Wenn Sie die Daten allerdings im Zahlenformat benötigen, z. B. für die Anzeige in einem Graphen, müssen Sie die String-Daten in dieses Format umwandeln. Gehen Sie beispielsweise von einem Signalverlauf aus, der aus 1.024 Punkten besteht und bei dem jeder Punkt einen Wert zwischen 0 und 255 hat. Mit der ASCII-Kodierung benötigen Sie maximal 4 Bytes, um jeden Datenwert darzustellen (maximal 3 Bytes für den Wert und 1 Byte für das Trennzeichen, z. B. ein Komma). Sie benötigen also maximal 4096 Byte (4 Byte 1024) sowie Header- und Trailer-Bytes, um den Signalverlauf als einen ASCII-String darzustellen. Mit der Funktion Bruch-/Exponential-String nach Zahl kann der ASCII-String in ein Array aus Zahlen umgewandelt werden.
Binärer 1-Byte-Signalverlauf
Einige Geräte können Daten nicht im ASCII-Format übertragen oder sie übertragen alle Signalverlaufsdaten im Binärformat. Da für das Binärformat kein Standard existiert, schlagen Sie bitte in der Dokumentation des Geräts nach, wie das Gerät die Daten genau speichert. Ein gängiges Binärformat ist 1-Byte-Binär. Bei dieser Art der Datenkodierung wandelt das Gerät jeden Wert vor dem Übertragen in einen binären 8-Bit-Wert um.
Wenn binäre 1-Byte-Daten von einem Bus empfangen werden, gibt das Gerät die Daten als Zeichen-String aus. Die Zeichen scheinen aber zunächst nicht den erwarteten Daten zu entsprechen. Die Binärwerte werden als ASCII-Zeichen interpretiert und entsprechend angezeigt. Wenn Sie beispielsweise den Wert 65 als einen Datenwert senden, lesen Sie das Zeichen A vom Bus. Bei einem Wert von 13 ist kein druckbares ASCII-Zeichen vorhanden, da 13 einem unsichtbaren Wagenrücklaufzeichen entspricht.
Diese nicht sichtbaren Zeichen können jedoch in einem String-Anzeigeelement dargestellt werden. Klicken Sie dazu mit der rechten Maustaste auf die Anzeige und wählen Sie '\'-Code-Anzeige aus dem Kontextmenü. Das Zeichen für einen Zeilenumbruch im String-Anzeigeelement ist dann \r.
Um Zahlen in einem ASCII-String mit dem Analyse-VI zu verwenden oder in einem Graphen oder Diagramm darzustellen, muss der Binär-String in ein Zahlen-Array umgewandelt werden. Wenn ein Gerät einen Binär-String mit 1024 binären 1-Byte-Werten überträgt, werden für den Signalverlauf lediglich 1024 Byte und die Header-Informationen benötigt. Bei der binären Kodierung ist nur ein Byte zur Darstellung eines Werts erforderlich, sofern jeder Wert ist ein vorzeichenloser 8-Bit-Integer ist. Mit den Teil-String-Funktionen und der Funktion String nach Byte-Array kann ein Binär-String in ein Array aus Integer-Werten umgewandelt werden.
Binärer 2-Byte-Signalverlauf
Daten im binären 2-Byte-Format sind ebenfalls binär kodiert. Sie werden ähnlich den Daten im binären 1-Byte-Format als ASCII-Zeichen übertragen. Allerdings wird hier jeder Wert durch 16 Bit oder 2 ASCII-Zeichen dargestellt. Dieses Format nimmt zwar doppelt soviel Platz in Anspruch wie das binäre 1-Byte-Format, dafür ist es aber besser verpackt als Daten im ASCII-Format.
Nehmen Sie beispielsweise ein Oszilloskop, das Signalverlaufsdaten in binärer Form überträgt. Der Signalverlauf besteht dabei aus 1024 Werten, wobei jeder Wert ein 2-Byte-Integer ist. Der gesamte Signalverlauf benötigt 2048 Byte sowie 5 Byte für die vorangestellten und 2 Byte für die nachgestellten Informationen. Verwenden Sie nach Entfernen des 5-Byte-Headers die Funktion String deserialisieren, um den Signalverlaufs-String in ein Array aus 16-Bit-Integer-Werten umzuwandeln.
Bei der Übertragung von Daten im binären 2-Byte-Format ist es wichtig, die Reihenfolge der empfangenen Daten zu kennen. Die 2-Byte-Kombination qH entspricht dem Integer-Wert 29000. Bei umgekehrter Byte-Reihenfolge (Hq) entspricht sie dagegen dem Wert 18545.
Wenn Sie das High-Byte zuerst empfangen, müssen Sie die Reihenfolge der Bytes umkehren, bevor Sie diese in Integer-Werte umwandeln. Mit der Funktion String deserialisieren lässt sich die Byte-Reihenfolge umkehren.