Загрузите код для функционального блока MATLAB во время выполнения Simulink

Я хотел бы иметь некоторый файл myfunc.m в моем пути к MATLAB и каким-то образом загрузить его содержимое в функциональный блок MATLAB автоматически непосредственно перед запуском симуляции. Таким образом, я могу использовать внешний редактор для написания этих встроенных функций, контролировать их версии отдельно как независимые файлы и т. д.

Есть ли способ добиться этого программно?

Моя первоначальная попытка состояла в том, чтобы попытаться получить доступ к содержимому функционального блока, используя что-то вроде get_param, но я не могу получить доступ для чтения/записи к самому коду.


person safwanc    schedule 26.04.2012    source источник
comment
Вам действительно нужно модифицировать функциональный блок или допустимо использовать функциональный блок, который не делает ничего, кроме вызова myfunc?   -  person mars    schedule 26.04.2012
comment
Чем отличается вызов прямо перед началом симуляции и в начале симуляции?   -  person Rasman    schedule 26.04.2012
comment
@mars: я бы предпочел изменить его напрямую, потому что я думаю, что вызов myfunc с чем-то вроде eml.extrinsic или просто использование блока, который вызывает функцию в рабочей области MATLAB, снижает общую производительность.   -  person safwanc    schedule 26.04.2012


Ответы (3)


Если целевой блок MATLAB Function еще не существует, вы можете добавить его следующим образом (см. это сообщение SO):

load_system('eml_lib');
libname = sprintf('eml_lib/MATLAB Function');
add_block(libname,'myModel/myBlockName');

Затем вы можете изменить код блока с помощью API Stateflow:

sf = sfroot();
block = sf.find('Path','myModel/myBlockName','-isa','Stateflow.EMChart');
block.Script = 'Your code goes here';

См. также эту публикацию в MATLAB Answers.

person Florian Brucker    schedule 28.03.2014

Во-первых, вам нужно будет добавить папку, содержащую m-файл, в путь по умолчанию. Сделать это:

(В командном окне) Перейдите в меню «Файл» -> «Установить путь» -> «Добавить папку» (выберите папку, содержащую m-файл)

Теперь вы должны использовать обратный вызов InitFcn в свойствах модели для вызова вашей функции. Для этого откройте модель:

(В окне «Модель») Перейдите в «Файл» -> «Свойства модели» -> «Обратные вызовы» -> «InitFcn». В поле редактирования, предназначенном для InitFcn, напишите команду для вызова вашей функции, т. е. myfunc(); Вам придется изменить эту команду в соответствии с вашими функциями и требованиями.

После этого примените изменения в окне свойств модели и смоделируйте модель.

person Akanksha    schedule 12.07.2016

Я думаю, что обратные вызовы модели могут быть способом сделать то, что вы хотите, хотя я сам не использовал эту технику.

person KAE    schedule 01.05.2012