我正在构建一个自定义Simulink块作为Matlab工具箱 . 为了避免使用matlab的语言对系统进行编程,我想尽可能地用Java编写系统 . 我研究了Matlab < - > Java接口,似乎可以做到这一点 . 但是,我找不到任何有关信息的一件事是将我的自定义Java对象(保存块的数据)存储在Simulink块中 .
我进行了快速测试,似乎可以存储Java.lang.String实例 . 但是,这是一个相对简单的测试 . 在先跳头之前,我想检查一下是否可能 . 有没有人有类似设置的经验?该对象是否只需要Serializable才能工作?
有关背景信息,我希望用Java实现非数学部分(GUI代码,处理等) . 数学相关元素可能会保留在matlab中 .
1 回答
要将Java对象存储在块中,应使用其
UserData
块参数 . 根据文档,您可以在此参数中添加任何数据类型 .我能看到的唯一问题是保存/加载和创建新块 . 保存/加载 should 可以使用序列化来解决,但您必须尝试查看 . 如果这不起作用,那么您可以为块创建隐藏的掩码参数,将Java对象序列化为字符串,并在
PreSaveFcn
回调期间将数据保存在此掩码中 . 可以从LoadFcn
回调中的mask参数反序列化数据 .要创建新块,您应该设置库块的
PreCopyFcn
回调并在那里创建新的Java对象 . 我觉得如果你不这样做,那么MATLAB将从UserData复制你的对象的引用(如果已存在),这可能不是你想要的 .您可能还想覆盖
OpenFcn
回调,因为您的目标是将Java对象用作一种加强掩码,这样当用户双击该块时,您可以显示自定义UI .有关块回调参数的更多信息,请参见this .