Кэшировать или помнить недавно сгенерированное UITree в модели Matlab / Simulink - PullRequest
0 голосов
/ 19 июня 2019

Я создал блок simulink, в котором хранятся данные, выбранные из файла dbc с помощью файла uitree.Данные, выбранные из дерева, затем сохраняются в блоке.Моя проблема заключается в том, что при загрузке файла dbc требуется 10-15 секунд для полного заполнения uitree, что хорошо при первом создании дерева, но будет относительно неудобным, если имеется несколько таких блоков, особеннопотому что моя модель Simulink потенциально может потребовать более десятка таких блоков.Необходимость воссоздания uitree дюжину раз, по 15 секунд каждый раз, потратила бы приличный кусок времени.

Немного больше информации о том, как работает код:

Мой пользовательский блок отброшенв модель Simulink.Пользователь нажимает на блок.Блок вызывает скрипт Matlab.Затем этот сценарий предлагает пользователю с помощью файла uigetfile выбрать dbc.Сценарий matlab затем собирает данные из файла dbc и заполняет им.У uitree может быть сто узлов, каждый из которых может иметь 2-40 подузлов, поэтому генерация занимает так много времени.В настоящее время проблема заключается в том, что это должно происходить для каждого отдельного пользовательского блока в модели.

Есть ли способ кэширования uitree или каким-то образом, что simulink / matlab может запомнить uitree при первой загрузкеиз конкретного файла DBC?Таким образом, в следующий раз, когда блок попытается открыть его, потребуется всего несколько секунд, чтобы открыть дерево, которое было сгенерировано ранее, вместо того, чтобы полностью воссоздать uitree несколько раз?

Спасибо

1 Ответ

0 голосов
/ 20 июня 2019

Предполагая, что uitree отображается в окне рисунка MATLAB, текущая проблема заключается в том, что каждый раз, когда фигура закрывается, все данные в ней уничтожаются. Что вам нужно сделать, так это написать CloseFcn для вашей фигуры, чтобы вместо уничтожения она просто стала невидимой.

Вам также нужно добавить код, чтобы,

  • каждый раз, когда открывается блок (т. Е. Выбирается файл dbc), вы проверяете, существует ли окно с рисунком, отображающее эти dbc uitrees. Если это так, сделайте это видимым. Если это не так, то создайте его.
  • обрабатывает заполнение правильного блока выбранными данными (учитывая, что несколько блоков могут использовать одно и то же окно с цифрой dbc uitree.)
  • обрабатывает уничтожение всех фигур (независимо от того, являются ли они видимыми или невидимыми) при закрытии модели (путем добавления кода в CloseFcn.)

Вы могли бы также рассмотреть вопрос об использовании только одной фигуры, содержащей все уже открытые ditc uitress, возможно, поместив каждую из них на отдельную панель uitab.

...