2016-07-29 12 views
1

"UDP Send"ブロックを使用して送信されたSimulinkモデルで一定の値を得ました。特定のポートで入力値を待機するJavaソケット・プログラムがあります。さて、私がJavaコードで受け取る値は、Simulinkモジュールから送られた値と同じではありません。たとえば、Simulinkモデルから値1を送信すると、Javaコードでは1072693248が返されます。JavaコードでSimulink定数値を受け取る方法は?

バイト配列を整数に変換するためにByteBuffer.wrap(...)を使用します。 Javaコードで何か問題がありますか?

答えて

2

1.0を表すdoubleの32ビットをとり、それらを整数として扱うと、1072693248 = 1023 * 2^20(またはJavaの表記を使用する1023 <)が得られます。この値を取得するには、数値がビッグエンディアン形式で保存されている場合はを最初にに、リトルエンディアン形式で保存した場合はの最後の文字を 32ビットにする必要があります。これの例はthis questionを参照してください - これはリトルエンディアンバージョンだと思います。

この問題は、Javaコードで整数が必要な場合にSimulinkがdoubleを送信することによって発生します。 Simulinkと一般的なMATLABでは、特に指定しない限り、数値をdouble型として扱うので、これは偶然にも簡単に起こります。あなたが32ビット整数を送信したいと仮定すると、最も簡単な修正はConstantブロックの設定を更新することです。出力データタイプは、ブロックパラメータダイアログのSignal Attributesタブから明示的に設定するか、またはそのセットを「Constant Valueから継承する」のままにして、値自体を「1」から「1」に変更します。 "int32(1)"。

+0

パーフェクト!ありがとう、マイク。私は値をint32(1)に変更し、うまくいった! – arun

関連する問題