在Matlab Simulink块中存储自定义java对象以用于自定义工具箱

时间:2013-04-02 21:06:14

标签: java matlab simulink

我正在构建一个自定义Simulink块作为Matlab工具箱。为了避免使用matlab的语言对系统进行编程,我想尽可能地用Java编写系统。我研究了Matlab< - > Java界面,似乎可以做到这一点。但是,我找不到任何有关信息的一件事是将我的自定义Java对象(保存块的数据)存储在Simulink块中。

我进行了快速测试,似乎可以存储Java.lang.String实例。但是,这是一个相对简单的测试。在先跳头之前,我想检查一下是否可能。有没有人有类似设置的经验?该对象是否只需要Serializable才能工作?

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

1 个答案:

答案 0 :(得分:1)

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

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

要创建新块,您应该设置库块的PreCopyFcn回调并在那里创建新的Java对象。我觉得如果你不这样做,那么MATLAB会从UserData复制对你的对象的引用(如果已存在),这可能不是你想要的。

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

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