2016-07-29 31 views
1

Ich habe einen konstanten Wert in meinem Simulink-Modell gesendet mit "UDP Send" -Block. Es gibt ein Java-Socket-Programm, das einen bestimmten Port nach beliebigen Eingabewerten abhört. Jetzt ist der Wert, den ich im Java-Code erhalte, nicht der gleiche wie der, der vom Simulink-Modul gesendet wird. Wenn ich zum Beispiel den Wert 1 aus dem Simulink-Modell sende, empfange ich im Java-Code 1072693248.Wie erhalte ich einen Simulink-Konstantenwert in Java-Code?

Ich benutze ByteBuffer.wrap (...), um Byte-Array in Integer zu konvertieren. Gibt es etwas, das ich im Java-Code falsch verstanden habe?

Antwort

2

Die Nummer 1072693248 = 1023 * 2^20 (oder 1023 < < 20 Java-Notation zu verwenden) erhalten Sie, wenn Sie 32 Bits des Double, das 1.0 darstellt, behandeln und sie als Ganzzahl behandeln. Um diesen Wert zu erhalten, müssen Sie die ersten 32 Bits, wenn die Zahlen auf eine Big-Endian-Weise gespeichert sind oder die 32 Bits, wenn sie in einer Little-Endian-Weise gespeichert sind. Ein Beispiel dafür finden Sie unter this question - ich denke, das ist die Little-Endian-Version.

Das Problem wird dadurch verursacht, dass Simulink ein Double sendet, wenn Ihr Java-Code eine ganze Zahl erwartet. Dies könnte leicht passieren, weil Simulink und MATLAB im Allgemeinen Zahlen als doppelt behandeln, wenn Sie nichts anderes angeben. Angenommen, Sie möchten eine 32-Bit-Ganzzahl senden, besteht die einfachste Lösung darin, die Einstellungen Ihres Constant-Blocks zu aktualisieren. Sie können den Ausgabedatentyp explizit auf der Registerkarte Signalattribute des Blockparameterdialogfelds festlegen oder den Wert "Von konstantem Wert übernehmen" beibehalten und den Wert selbst von "1" in z. "int32 (1)"

+0

Perfekt !. Danke, Mike. Ich habe den Wert in int32 (1) geändert und es hat funktioniert! – arun