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

Cache or remember recently generated UITree in Matlab/Simulink model

我创建了一个 simulink 块,用于存储使用 uitree select 从 dbc 文件编辑的数据。从 uitree 中提取的数据 select 然后存储在块中。我的问题是,当加载dbc文件时,uitree需要10-15秒才能完全填充,这对于第一次创建树来说很好,但如果有多个这样的块就会相对不方便,尤其是因为我的 simulink 模型可能需要十几个这样的模块。必须重新创建 uitree 十几次,每次 15 秒,会浪费大量时间。

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

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

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

谢谢

假设 uitree 在 MATLAB 图 window 中呈现,当前的问题是每次关闭图时,其中的所有数据都会被破坏。你需要做的是为你的人物写一个CloseFcn,这样它就不会被摧毁,而是变得不可见。

您还需要添加代码,以便

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

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