java - 在自定义工具箱的 Matlab Simulink block 内存储自定义 java 对象

标签 java matlab simulink

我正在致力于构建一个自定义 Simulink block 作为 Matlab 工具箱。为了避免使用matlab语言来对系统进行编程,我希望尽可能用Java来制作系统。我研究了 Matlab <-> Java 接口(interface),似乎可以做到这一点。然而,我找不到任何相关信息的一件事是将我的自定义 Java 对象(保存 block 的数据)存储在 Simulink block 内。

我进行了快速测试,看来存储 Java.lang.String 实例是可能的。然而,这是一个相对简单的测试。在开始之前,我想检查一下这是否可能。有人有类似设置的经验吗?对象是否只需要可序列化即可工作?

对于背景信息,我希望在 Java 中实现非数学部分(GUI 代码、处理等)。数学相关元素可能会保留在 matlab 中。

最佳答案

要将 Java 对象存储在 block 内,您应该使用其 UserData block 参数。根据文档,您可以在此参数中放置任何数据类型。

我能看到的唯一问题是保存/加载和创建新 block 。保存/加载应该使用序列化来解决,但您必须尝试一下才能看到。如果这不起作用,那么您可以为 block 创建一个隐藏掩码参数,将 Java 对象序列化为字符串,并在 PreSaveFcn 回调期间将数据保存在该掩码中。可以从 LoadFcn 回调中的掩码参数反序列化数据。

要创建新 block ,您应该设置库 block 的 PreCopyFcn 回调并在其中创建新的 Java 对象。我有一种感觉,如果您不这样做,那么 MATLAB 将从 UserData 复制对您的对象的引用(如果那里已经存在),这可能不是您想要的。

您可能还想覆盖 OpenFcn 回调,因为您的目标是将 Java 对象用作一种增强的掩码,以便当用户双击该 block 时,您可以显示自定义 UI。

有关 block 回调参数的更多信息,请参阅 this .

关于java - 在自定义工具箱的 Matlab Simulink block 内存储自定义 java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15774376/

相关文章:

java - 如何在一个框架中添加绘图(绘画方法)和另一个带有控件的面板?

java - Oozie > Java 操作 > 为什么属性 oozie.launcher.mapred.child.java.opts 不起作用

java - 在android中无需单击按钮即可查看实例

matlab - 通过 MatLab 计算 Blob 数量

matlab - 工作区,.m脚本和Simulink模型之间的关系是什么,如何有效使用它们?

c - SIMULINK 保持信号的先前值

java - java中有没有办法禁止子类调用父类(super class)的public方法?

python - 我可以将 python 配置为像打印一样使用 matlab 吗?

algorithm - 优化数组压缩

matlab - 如何在 Simulink Matlab 功能 block 中使用 syms