LabVIEWForum.de
Binärdateien schreiben/lesen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenbank & File IO (/Forum-Datenbank-File-IO)
+---- Thema: Binärdateien schreiben/lesen (/Thread-Binaerdateien-schreiben-lesen)



Binärdateien schreiben/lesen - Matze - 28.10.2010 20:14

Hi zusammen,

ich habe heute Stunden vergebens verbracht, einen Fehler zu suchen, der beim Auslesen von Binärdateien auftritt.
Das Projekt ist zu umfangreich, um es anzuhängen und beim Versuch, nur den relevanten Code zu extrahieren, funktionierte (leider) alles.

Ich schreibe einen Cluster über "Binärdatei schreiben" in eine Binärdatei (Windows-PC). Auf einem RT-Target lese ich das ganze über "Binärdatei lesen" wieder aus.
Das Ganze klappt leider nicht richtig.
Manche Werte werden korrekt ausgelesen, manche komplett falsch und ich weiß nicht mal ansatzweise, wonach ich suchen soll.

Eine geschriebene 1, wird z.T. etwas wie 1,22434E-385 (die genaue Zahl weiß ich nicht mehr, aber der Exponent stimmt glaub).

Eine 1,234 im Cluster (mehrere numerische Felder) war z.T. eine 1,234, aber in anderen Feldern eine 1072938614 oder -1,76176E+42.

Das ist echt frustrierend.

Habt ihr eine Idee, wo ich mit der Fehlersuche anfangen könnte?

Der Cluster ist eine strikte Typendefinition. Und mehr als den "popeligen" Code (lesen + schreiben) mache ich eigentlich nicht. Der Modus (z.B. Big Endian) ist auch überall der gleiche.
Wie kann es denn dazu kommen, dass die Werte so komisch interpretiert werden? Rundungsfehler, Überläufe o.ä. sind beim Schreiben/Lesen auszuschließen.

Schreibe ich die Binärdatei auf dem RT-System und versuche sie unter Windows zu lesen, kommt irgendein EOF-Fehler.

Hat jemand von euch eine Idee, was hier schief laufen könnte?Sad

Lese ich die unter Windows geschriebene Datei unter Windows aus, ist dort alles ok.
Beide Anwendungen sind mit LV 2010 programmiert.

Grüße


Binärdateien schreiben/lesen - Lucki - 28.10.2010 21:34

Poste doch mal den Cluster als VI. Ich nehme an, daß der Cluster mindestens 1 Element veränderlicher Länge (String oder Array) enthält, und dann wirds kompliziert.


Binärdateien schreiben/lesen - Matze - 28.10.2010 21:41

Es enthält mehrere Arrays, ja. Doch das ist eigentlich kein Problem. Ich habe den Cluster in einem neuen Projekt binär gespeichert und am RT-Target geladen - null Probleme.

Den Cluster habe ich grad nicht hier, aber wie gesagt, das funktioniert in einem Mini-Projekt mit diesem Cluster einwandfrei.
Ich vermute, in der Binärdatei ist eine Art Mini-Header vor dem Array angestellt, das die länge o.ä. beinhaltet. Auf jedenfall funktioniert das ohne manuelle Veränderungen mit dem Standard-VI.


Binärdateien schreiben/lesen - jg - 29.10.2010 00:02

Oder enthält dein Cluster Booleans? Auch da gab es Änderungen zwischen den LabVIEW-Version, wie das Binär abgespeichert wird. Lies dir am besten die Hilfe zu TypeCast und FlattenToString durch. Vielleicht hast du auch ein Problem mit Big Endian und Little Endian?

Gruß, Jens


Binärdateien schreiben/lesen - Matze - 29.10.2010 05:54

' schrieb:Oder enthält dein Cluster Booleans? Auch da gab es Änderungen zwischen den LabVIEW-Version, wie das Binär abgespeichert wird.
' schrieb:Lese ich die unter Windows geschriebene Datei unter Windows aus, ist dort alles ok.
Beide Anwendungen sind mit LV 2010 programmiert.

' schrieb:Vielleicht hast du auch ein Problem mit Big Endian und Little Endian?
' schrieb:Der Modus (z.B. Big Endian) ist auch überall der gleiche.

Und nein, booleans sind keine enthalten.
Es ist ein Cluster, das ein Array of Cluster enthält. In den inneren Clustern sind nur numerische Anzeigewerte und Enums.
Und wie gesagt, wenn ich das unter Windows schreibe und lese geht alles. SObald ich die Daten zwischen Windows und RT-System austauschen möchte, funktioniert es nicht mehr.

Ich habe zum Schreiben/Lesen auch ein SubVI geschrieben, das das Binär-VI (File I/O) und dessen Einstellungen wie Big Endian enthält, um sicherzugehen, dass es überall gleich ist. Selbst mit meinen SubVIs tritt das Problem auf.
Ich weiß gar nicht, was ich da heute noch machen könnte und ohne das, komme ich nicht weiter.

Ein Demo-Projekt kann ich leider auch nicht an NI schicken, da bei einem kleinen, neuen Projekt, alles tut.Sad


Binärdateien schreiben/lesen - Matze - 29.10.2010 14:26

Also das Problem war folgendes:

Ich bin her gegangen und habe für die Win- und RT-Anwendung je ein eigenständiges Verzeichnis erstellt.
Die strikte Typendefinition der Binärdatei habe ich als Ctl-Datei doppelt gehabt (in jedem Verzeichnis einmal).

In einem Fall hat das funktioniert, im anderen nicht, obwohl die Dateien identisch waren.
Ich habe sie nun in ein Verzeichnis gelegt und binde die Ctl-Datei jeweils von dort ein. Nun geht es.

Wieso es allerdings mit 2 physikalischen Dateien nicht ging, ist mir ein Rätsel.


Binärdateien schreiben/lesen - jg - 29.10.2010 16:00

Um dieses Rätsel zu lösen, müsstest du die ctl-Dateien einmal hochladen.Glas2

Vielleicht hast du unbewusst einmal die Reihenfolge innerhalb des einen Clusters getauscht, oder, oder, oder...

Gruß, Jens


Binärdateien schreiben/lesen - Matze - 29.10.2010 18:15

Ne, hab sie per Copy&Paste sogar ersetzt. Die waren daher identisch.

Also ich verstehe das nicht und merke mir einfach, dass ich nicht mehrere Dateien verwenden sollte.