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