2016-07-29 20 views
1

我一直在使用「UDP發送」塊寄出了Simulink模型的恆定值。有一個Java Socket程序在特定的端口上偵聽任何輸入值。現在,我在Java代碼中接收到的值與從Simulink模塊發送的值不同。例如,如果我從Simulink模型發送值1,則在Java代碼中我收到1072693248.如何在Java代碼中接收Simulink常量值?

我使用ByteBuffer.wrap(...)將字節數組轉換爲整數。在Java代碼中出現錯誤嗎?

回答

2

數字1072693248 = 1023 * 2^20(或1023 < < 20使用Java符號)是您獲得的結果,如果您將32位的double代表1.0並將它們視爲整數。爲了得到這個價值,你需要,如果號碼存儲在大端方式或最後 32位,如果它們被存儲在一個小端的方式,採取了第一 32位。有關這方面的示例,請參閱this question - 我認爲這是小端版本。

所以,問題是由Simulink中發送雙重當你的Java代碼期望一個整數引起的。這很容易發生,因爲Simulink和MATLAB一般都會將數字視爲雙打,除非您另有指定。假設你想發送一個32位整數,最簡單的方法就是更新你的Constant塊的設置。您可以從塊參數對話框的信號屬性選項卡中顯式設置輸出數據類型,或者將其設置爲「從常數值繼承」,並將值本身從「1」更改爲「INT32(1)」。

+0

完美!謝謝,邁克。我將值更改爲int32(1),它工作! – arun

相關問題