首页 > 解决方案 > 在 Matlab/Simulink 模型中缓存或记住最近生成的 UITree

问题描述

我创建了一个 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 时记住它?这样,下次某个block尝试打开它时,只需要几秒钟就可以打开之前生成的树,而不是多次完全重新创建uitree?

谢谢

标签: matlabsimulink

解决方案


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

您还需要添加代码,以便,

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

您还可以考虑只使用一个包含所有已打开的 dbc uitress 的图形,可能通过将它们中的每一个放在不同的 uitab 面板上。


推荐阅读