在Matlab / Simulink模型中缓存或记住最近生成的UITree

时间:2019-06-19 19:49:11

标签: matlab simulink

我创建了一个simulink块,用于存储使用uitree从dbc文件中选择的数据。然后将从uitree中选择的数据存储在块中。我的问题是,加载dbc文件时,完全填充uitree需要10到15秒,这对于第一次创建树是可以的,但是如果有多个这样的块,会相对不方便,尤其是因为我的simulink模型可能需要十几个这样的模块。不得不重新创建uitree十二次,每次15秒,将浪费大量的时间。

有关代码当前运行方式的更多背景信息:

我的定制块已放入simulink模型中。用户单击该块。该块调用matlab脚本。然后,此脚本使用uigetfile提示用户选择dbc。然后,matlab脚本从dbc文件收集数据,并使用它填充uitree。 uitree可能有一百个节点,每个节点可能带有2-40个子节点,这就是为什么生成它需要这么长时间的原因。当前的问题是,模型中的每个自定义模块都必须发生这种情况。

是否可以缓存uitree,或者simulink / matlab可以在第一次从特定dbc文件中加载uitree时记住该uitree?这样,下次块尝试打开它时,只需要几秒钟即可打开先前生成的树,而不是多次完全重新创建uitree?

谢谢

1 个答案:

答案 0 :(得分:0)

假设uitree在MATLAB图形窗口中呈现,当前的问题是每次关闭图形时,销毁其中的所有数据。您需要做的是为您的图形写一个CloseFcn,以便它不会被破坏而变得不可见。

您还需要添加代码,以便

  • 每次打开一个块(即选择dbc文件)时,您都要检查是否存在显示dbc uitree的图形窗口。如果确实如此,则使其可见。如果没有,则创建它。
  • 处理使用所选数据填充正确的块的情况(假设多个块可能使用相同的dbc uitree图窗口。)
  • 在模型关闭时(通过向模型的CloseFcn添加代码)来销毁所有图形(无论它们是可见还是不可见)。

您还可以考虑只包含一个已经包含所有已打开的dbc uitress的图形,可能是将它们分别放在不同的uitab面板上。