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



我正在构建一个自定义的Simulink块作为Matlab工具箱。为了避免用matlab语言对系统进行编程,我尽量用Java语言来编写系统。我研究了Matlab <> Java接口,似乎可以做到这一点。然而,我找不到任何信息的一件事是存储我的自定义Java对象(持有块的数据)在Simulink块内。

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

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

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

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

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

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

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

最新更新