INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Verschiedene Ergebnisse bei Typ Cast?



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

31.07.2015, 09:26
Beitrag #1

n4f3ts Offline
LVF-User
*


Beiträge: 30
Registriert seit: May 2014

LabVIEW 2014, 2015
2014
DE


Deutschland
Verschiedene Ergebnisse bei Typ Cast?
Hallo zusammen,

für eine CAN-Bus Nachricht ist in meinem CAN-Bus Protokoll ein Wert als 24 Bit Integer definiert.
Der Benutzer kann auf dem Frontpanel einen gewünschten Double-Wert eingeben, dieser wird dann in ein 24 Bit FXP umgewandelt. Mein CAN-Bus Treiber erwartet ein U8 Byte Array, der Wert muss also noch auf 3 Byte aufgeteilt werden.

Jetzt habe ich beim ausprobieren folgendes festgestellt, was ich mir nicht erklären kann:
Im Blockdiagramm wird die Umwandlung nach FXP einmal mit dem Element "Nach Festkomma" und einmal mit "Typ Cast" gemacht:
   

Meiner Meinung nach müssten bei beiden Verfahren die gleichen Ergebnisse rauskommen, dem ist aber nicht so. Das Ergebnis von "Output 1" ist so wie ich es bei einem Eingabewert von 4000000 erwartet habe, das Ergebnis von "Output 2" kann ich mir nicht erklären...
   

Kann mir evtl jemand erklären warum dies so ist?
Falls ich das falsche Unterforum gewählt habe, bitte ich den Beitrag entsprechend zu verschieben.

Danke!

Gruß
Stefan


Angehängte Datei(en)
14.0 .vi  TypCastTest.vi (Größe: 8,08 KB / Downloads: 247)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
31.07.2015, 10:34 (Dieser Beitrag wurde zuletzt bearbeitet: 31.07.2015 10:41 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.480
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Verschiedene Ergebnisse bei Typ Cast?
Hallo n4,

erstmal eine wichtige Info: ein FXP belegt im Speicher, egal wie du es parametriert hast, immer 64 bit. Steht auch in der LabVIEW-Hilfe!

Dann:
Ein Typecast interpretiert nur die Daten im Speicher um!
Einmal wandelst du deinen Input per Konvertierfunktion in ein FXP um, im anderen Fall per Typecast. Das sind zwei vollkommen unterschiedliche Dinge und kann nicht gut gehen…

Weiterhin:
Zitat:in meinem CAN-Bus Protokoll ein Wert als 24 Bit Integer definiert.
Warum ist dein Input dann ein DBL?
Warum wandelst du dann in FXP um?
Warum wandelst du den Integer nicht direkt in 3 Bytes um?
    (Umwandlung quasi zu Fuß…)

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
31.07.2015, 12:11
Beitrag #3

n4f3ts Offline
LVF-User
*


Beiträge: 30
Registriert seit: May 2014

LabVIEW 2014, 2015
2014
DE


Deutschland
RE: Verschiedene Ergebnisse bei Typ Cast?
Hallo GerdW,

danke für deine Antwort.

Zitat:Warum ist dein Input dann ein DBL?
Weil die Werte noch skaliert werden und ich dem Benutzer eine vereinfachte Eingabe ermöglichen möchte. Er soll sich nicht noch damit befassen müssen den Sollwert (beispielsweise für eine Drehzahl) umzurechnen.
Beispiel: 8000000(int24) := 20000rpm das entspricht dann einer Auflösung von 0,0025rpm
Der Benutzer soll einfach zum Bespiel 3765,54 rpm eingeben können (und nicht 1506216(int24) rpm). Im Programm wird es dann umgerechnet, gerundet und in ein U8-Byte-Array umgewandelt.

Zitat:Warum wandelst du dann in FXP um?
Weil ich den FXP auf 24Bit einstellen kann (auch wenn er im Speicher 64 Bit belegt)Big Grin

Zitat:Warum wandelst du den Integer nicht direkt in 3 Bytes um?
So ähnlich war auch mein erster Ansatz, den ich aber wieder verworfen hatte, da ich nicht zum richtigen Ergebnis gekommen bin... Werde es mal so wie in deinem Screenshot versuchen. Evtl. hatte ich hier High und Low Byte vertauscht...


Gruß
Stefan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
31.07.2015, 12:24
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.480
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Verschiedene Ergebnisse bei Typ Cast?
Hallo n4,

Zitat:Der Benutzer soll einfach zum Bespiel 3765,54 rpm eingeben können (und nicht 1506216(int24) rpm). Im Programm wird es dann umgerechnet, gerundet und in ein U8-Byte-Array umgewandelt.
   
Und wo ist das Problem?

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
31.07.2015, 12:48
Beitrag #5

n4f3ts Offline
LVF-User
*


Beiträge: 30
Registriert seit: May 2014

LabVIEW 2014, 2015
2014
DE


Deutschland
RE: Verschiedene Ergebnisse bei Typ Cast?
Hallo,

Zitat:Und wo ist das Problem?
Nirgends. Big Grin

Ich habe nur nicht verstanden warum (siehe erster Post) zwei unterschiedliche Werte rauskommen wenn ich einmal mit "Nach Fixpoint" und einmal mit "Typ Cast" arbeite...
100% klar ist es mir leider immer noch nicht. Ich weiß jetzt, dass die beiden Funktion anscheinend was völlig unterschiedliches machen, was mir vorher nicht bewusst war.
Ich dachte, dass nach der Funktion "Nach FXP" ein entsprechender Fixpoint rauskommt und mit TypCast (FXP am Typ Anschluss) das gleiche...


Gruß
Stefan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
31.07.2015, 12:58 (Dieser Beitrag wurde zuletzt bearbeitet: 31.07.2015 13:00 von GerdW.)
Beitrag #6

GerdW Offline
______________
LVF-Team

Beiträge: 17.480
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Verschiedene Ergebnisse bei Typ Cast?
Hallo n4,

Zitat:100% klar ist es mir leider immer noch nicht.
Computer arbeiten nur mit Bits und Bytes, erst die Programme bringen Ordnung hinein: Was die Bytes bedeuten, legt erst das Programm fest!

Bei einer Konvertierung wird die Zahl so umgewandelt, dass im Zieldatentyp der gleiche Wert herauskommt. Beispiel: aus einem U8 mit Wert 123=0x7b wird ein DBL mit den 8 Bytes "40 5E C0 00 00 00 00 00". Beides mal der Wert 123, aber vollkommen unterschiedliche Bytes im Speicher!

Ein TypeCast lässt den Speicher, in dem ein Wert liegt, unverändert und interpretiert diesen Wert nur anders. Aus einem I32 mit den Bytes "01 02 03 04" kann man ein U8-Array mit 4 einzelnen Bytes machen. Oder zwei U16 mit "01 02" und "03 04". Oder ein SGL, welcher dann dummerweise den Wert "2.38794E-38" hat…

Ein TypeCast ist KEINE Konvertierung. Das sind zwei vollkommen unterschiedliche Funktionen!

Du hast in einem Fall einfach die Bytes im Speicher uminterpretiert und im anderen Fall erst andere Bytes daraus gemacht und dann nochmal uminterpretiert!

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
01.08.2015, 21:31 (Dieser Beitrag wurde zuletzt bearbeitet: 02.08.2015 13:20 von Lucki.)
Beitrag #7

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: Verschiedene Ergebnisse bei Typ Cast?
Es geht hier doch darum, eine Gleitkommazahl mit Fixkomma (z.B mit zwei Kommastellen) in ein 24 bit Integerformat (als 3 Byte-Array) zu konvertieren. Das geht natürlich nur innerhalb eines gewissen Zahlenbereichs. Es sollen auch negative Werte vorkommen dürfen (Wenn nicht, würde die Hin- und Rückkonvertierung etwas einfacher als in den unten angehängten VI. Außerdem würde der dann nur im positiven liegende Zahlenbereich verdoppelt).

Zur Lösung dieses Problems solltest Du das Format FXP vergessen. Das ist z.B dazu geeignet, im Finanzwesen bei Berechnungen mit Millionenbeträgen noch alles auf den Pfennig Cent genau zu haben. Was es in Labview zu suchen hat, weiß ich nicht, es wird dort jedenfalls kaum verwendet - wenn überhaupt.

So etwa würde ich das machen:

   

14.0 .vi  DblToThreeBytes.vi (Größe: 10,68 KB / Downloads: 281)


Der Zahlenbereich, in dem die Übertragung im Beispiel mit 2 Kommastellen funktioniert, ist
-83886.08 .. 83886.07

..und hier noch das alternative Progrämmchen mit Typecast - um diesen Vergleich gings doch:
(Die beiden 3-Byte-Array sind natürlich gleich. Der Code ist etwas einfacher, aber nicht unbedingt einfacher zu kapieren)

   

14.0 .vi  DblToThreeBytes2.vi (Größe: 10,04 KB / Downloads: 269)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.08.2015, 08:30
Beitrag #8

dimitri84 Offline
Astronaut
*****


Beiträge: 1.496
Registriert seit: Aug 2009

2020 Developer Suite
2009
DE_EN

53562
Deutschland
RE: Verschiedene Ergebnisse bei Typ Cast?
(01.08.2015 21:31 )Lucki schrieb:  Was es in Labview zu suchen hat, weiß ich nicht, es wird dort jedenfalls kaum verwendet - wenn überhaupt.

Hallo Lucki,

wird im Zusammenhang mit LV-FPGA verwendet. Meine LV-Version (immer noch 2011) kann zB gar kein Gleitkomma auf FPGA Ebene.


Beste Grüße
Dimitri

„Sag nicht alles, was du weißt, aber wisse immer, was du sagst.“ (Matthias Claudius)
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.08.2015, 08:33
Beitrag #9

GerdW Offline
______________
LVF-Team

Beiträge: 17.480
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Verschiedene Ergebnisse bei Typ Cast?
Hallo,

Zitat:wird im Zusammenhang mit LV-FPGA verwendet
Jupp, jedes Analog-Messmodul (im cRIO) gibt seine Messwerte als FXP aus…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.08.2015, 10:20
Beitrag #10

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: Verschiedene Ergebnisse bei Typ Cast?
Danke, wieder etwas dazugelernt. Und um das zu erfahren, war doch der Versuchsballon mit der hingeworfenen Bemerkung "..wird kaum verwendet, wenn überhaupt" keine schlechte Idee Big Grin
Gruß Ludwig
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  verschiedene Datentypen über TCP/IP / UDP AgesKing 15 13.647 04.02.2013 19:47
Letzter Beitrag: jg

Gehe zu: