Можно ли открыть код локального функционального блока Simulink MATLAB в редакторе MATLAB с помощью какой-либо команды?
Например, допустим, у меня есть модель Simulink с именем mainModel.slx .
В нем есть функциональный блок MATLAB с именем localFunction .Это не определено в .m-файле.
Я мог бы редактировать функцию, путь которой равен mainModel/localFunction
, без необходимости открывать окно simulink и дважды щелкать функциональный блок.Возможно ли это?
Я, конечно, уже пробовал open mainModel/localFunction
и edit mainModel/localFunction
.У меня есть доступ к дескриптору для его StateFlow.EMChart
объекта.
РЕДАКТИРОВАТЬ: минимальный, (надеюсь) полный и проверяемый пример
Моя минимальная модель Simulinkпоказано на рисунке ниже.Код присутствует под ним.Для удобства чтения я не обращался к ошибкам или глюкам.Это не для общего использования.
Функциональный код для функционального блока MATLAB localFunction равен
function y = fcn(u)
y = 'findThis'; % I want to end up here, in the MATLAB editor!
end
Я использую следующий код для загрузки модели, поиска по всем функциональным блокам MATLAB и нахождения блоков, содержащих строку 'findThis'
.Затем должен быть найден функциональный блок MATLAB с именем 'localFunction'
.Опять же, игнорируйте ошибки.Код сохраняется в скрипте с именем tmpScript.m
.
% User set
model = 'mainModel';
expression = 'findThis';
blockType = 'Stateflow.EMChart'; % MATLAB function block, right?
% Load model
load_system(model)
% Find all MATLAB function block handles
blockHandles = find(slroot, '-isa', blockType);
% Find first block containing the defined expression
for iHandle = 1:numel(blockHandles)
tmpFind = strfind(blockHandles(iHandle).Script, expression);
if ~isempty(tmpFind)
break
end
end
foundBlockPath = blockHandles(iHandle ).Path; % Function block path
foundCharIdx = tmpFind; % Character index
% Print results in command window
fprintf('Function path: %s\n', foundBlockPath)
fprintf('Character index: %d\n', foundCharIdx)
. В этом примере путь должен быть mainModel/localFunction
и индекс символа 29
(обратите внимание на три первых пробела на втором месте функциии разрыв строки '\n'
стоит одного символа).Командное окно показывает
>> tmpScript
Function path: mainModel/localFunction
Character index: 29
>>
. Таким образом, я могу загружать модели и искать в их функциональных блоках MATLAB конкретные строки.Когда я нашел эту функцию, я хотел бы иметь возможность открыть ее в редакторе Matlab.Что называется, когда я дважды щелкаю на блоке в окне Simulink?
Это делает НЕ работа
open(foundBlockPath)
edit(foundBlockPath)
blockHandles(iHandle).openEditor
Я не могу изменить саму модель Simulink,Я не хочу изменить скрипт функции.Я просто хочу иметь возможность открыть его в редакторе MATLAB.