LabVIEWForum.de - Fehler beim Typecast: u32->sgl, sgl->u32

LabVIEWForum.de

Normale Version: Fehler beim Typecast: u32->sgl, sgl->u32
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

in einem komplexeren Prüfsystem wird auf einer RT-Hardware ein SGL-Array erzeugt, das unter anderen auch Daten von einem Bool-Array enthält, das ganze wird zum PC geschickt (TCP-IP) dann wird SGL-Array wieder zerlegt und das Bool-Array extrahiert.

Dabei tritt bei Bit 22 in einem 32iger Bool-Array ein Fehler auf.

Ich konnte das ganze ohne RT-Hardware auf dem PC reproduzieren.

In dem Beispiel (Anhang) sind zwei Varianten per Disable-Structure möglich.

[attachment=33138]

Einmal funktioniert der Typcast fehlerfrei, beim anderen Mal nicht.

Kann mir da bitte jemand weiterhelfen?

Vorab vielen Dank!!!
Hallo rdugg,

abgesehen davon, dass es grenzwertig ist aus einem Array mit 32 Elementen irgendwas bei Index 32 und 64 auszuschneiden, scheint beim BuildArray eine Prüfung der SGL-Werte stattzufinden. Aus einem "beliebigen" NaN wird dann ein korrektes NaN und der dahinterliegende 32bit-Wert ändert sich... Ohne BuildArray passiert auch nichts mit dem Bitmuster!

Mögliche Lösung:
Caste doch in ein U32-Array...
(06.04.2011 14:46 )rdugg schrieb: [ -> ]Einmal funktioniert der Typcast fehlerfrei, beim anderen Mal nicht.

Kann mir da bitte jemand weiterhelfen?

Hast Du Dir schon mal den Wert der Fliesskommazahl angeschaut? Das ergibt NaN (Not a number). Und gemäss Standard ist ein ganzer Range von Bit Patterns equivalent zu NaN, und ist NaN == NaN immer falsch.

Im einen Fall funktioniert es weil LabVIEW alles inplace tut und der binäre Wert der 4 Bytes im Speicher dadurch nie ändert. Im anderen Fall ist es wegen dem Array alles ausser Inplace. Und da immer: NaN != NaN, macht es auch nichts aus, wenn LabVIEW beim kopieren einer NaN Zahl ein anderes Bitpattern nimmt das ebenfalls NaN angibt, und das ist dann die kanonische NaN mit allen Bits gesetzt.
Referenz-URLs