Поиск в коде функционального блока Simulink MATLAB для соответствующей строки в командном окне MATLAB - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь найти способ поиска в коде функциональных блоков MATLAB модели Simulink для поиска подходящей строки.

Для отдельных файлов функций MATLAB я могу просто использовать findstr из команды Windowsнезамедлительный.Однако это не выполняет поиск пользовательских функций в файлах .slx (функциональные блоки MATLAB).Он работает для файлов .m.

Я могу выполнить поиск вручную с помощью CTRL + F в модели Simulink.(CTRL + F -> «Просмотреть больше» -> Введите строку поиска -> «Нажмите здесь, чтобы выполнить поиск в текущей системе и ниже»).Это дает мне все блоки с пользовательскими функциями MATLAB, содержащими соответствующие строки.Я хотел бы иметь возможность сделать это через командное окно в MATLAB или командную строку Windows.

Я попытался найти справку по справке Simulink и потратить время на поиск в Интернете, ничего не находя.

Есть ли способ выполнить этот поиск с помощью выполнения кода?

1 Ответ

0 голосов
/ 05 октября 2018

Во-первых, вам нужно получить маркеры для всех блоков MATLAB Function в вашей модели.Это можно сделать с помощью

blockHandles = find(slroot, '-isa', 'Stateflow.EMChart')

. Обратите внимание, что блоки MATLAB Function на самом деле являются просто особым типом диаграммы Stateflow (которая поставляется с Simulink, не требуя лицензии для самой Stateflow).Если вам нужен только дескриптор определенного блока, вы можете уточнить поиск, используя

blockHandles = find(slroot, '-isa', 'Stateflow.EMChart', 'Path', gcb)

, где gcb - имя интересующего вас блока.

Текст вфункция хранится в свойстве Script объекта.Чтобы отобразить его (или записать в него), используйте

blockHandles(idx).Script

, где idx - индекс, указывающий, какой из блоков вас интересует. Вы можете использовать его в цикле для поиска во всех них,

for idx = 1:numel(blockHandles)
   strfind(blockHandles(idx).Script,'text_to_search_for')
end
...