【问题标题】:How to receive a Simulink constant value in Java code?如何在 Java 代码中接收 Simulink 常量值?
【发布时间】:2016-07-29 19:53:02
【问题描述】:

我的 Simulink 模型中有一个使用“UDP Send”块发送的常量值。有一个 Java Socket 程序可以在特定端口上侦听任何输入值。现在,我在 Java 代码中收到的值与从 Simulink 模块发送的值不同。例如,如果我从 Simulink 模型发送值 1,在 Java 代码中我会收到 1072693248。

我使用 ByteBuffer.wrap(...) 将字节数组转换为整数。我的 Java 代码有什么问题吗?

【问题讨论】:

    标签: java matlab sockets simulink


    【解决方案1】:

    数字 1072693248 = 1023 * 2^20(或 1023 first 32 位;如果数字以 little-endian 方式存储,则需要采用 last 32 位——端方式。有关此示例,请参阅 this question - 我认为这是 little-endian 版本。

    所以问题是由 Simulink 在您的 Java 代码需要一个整数时发送一个双精度数引起的。这很容易意外发生,因为 Simulink 和一般的 MATLAB 将数字视为双精度数,除非您另有说明。假设您确实想要发送一个 32 位整数,最简单的解决方法是更新您的 Constant 块的设置。您可以从模块参数对话框的 Signal Attributes 选项卡中显式设置输出数据类型,或者将该设置保留为“从常量值继承”并将值本身从“1”更改为例如“int32(1)”。

    【讨论】:

    • 完美!。谢谢,迈克。我将值更改为 int32(1) 并且它起作用了!
    猜你喜欢
    • 2012-03-30
    • 1970-01-01
    • 2023-04-09
    • 2016-05-01
    • 1970-01-01
    • 2016-12-27
    • 2015-08-04
    • 1970-01-01
    • 2016-08-26
    相关资源
    最近更新 更多