1

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

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

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

4

1 回答 1

1

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

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

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

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

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

于 2013-04-03T10:36:33.767 回答