matlab - 在 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?
谢谢
解决方案
假设 uitree 在 MATLAB 图形窗口中呈现,当前的问题是每次关闭图形时都会破坏其中的所有数据。你需要做的是CloseFcn
为你的人物写一个,这样它就不会被破坏,而是变得不可见。
您还需要添加代码,以便,
- 每次打开一个块(即选择一个 dbc 文件)时,您检查是否存在显示该 dbc uitrees 的图形窗口。如果确实如此,则使其可见。如果没有,则创建它。
- 处理用所选数据填充正确的块(假设多个块可能正在使用相同的 dbc uitree 图形窗口。)
- 处理模型关闭时销毁所有图形(无论它们是可见还是不可见)(通过将代码添加到模型的
CloseFcn
.)
您还可以考虑只使用一个包含所有已打开的 dbc uitress 的图形,可能通过将它们中的每一个放在不同的 uitab 面板上。
推荐阅读
- javascript - 我的数组包含一个空格 [" "]。当我 .join 带有下划线的空格时,结果字符串中的空格元素在 html 中不可见
- java - 如何使用存储在变量值中的数据类型进行转换?
- php - 如果字段名称为 logo[0][image],如何上传图片
- asp.net - 为什么 post 方法必须带有查询字符串?如何删除查询字符串?
- c++ - C++ 反射和到/从键值对(如 json)
- wordpress - 如何更改 woocommerce 页面的语言,例如结帐和添加到购物车?
- android - 如何在旋转时在Android的多选对话框中保留选择?
- java - 如何从数组列表中加载图像?
- javascript - 如何在 MutationObserver 中添加的节点上使用 querySelectorAll
- excel - 我想合并两行,如果第一行 xxxxxaxx 和第二行 xxxxxbx 那么结果应该是 xxxxabx