2012-04-26 3 views
3

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

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

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

+0

Вам действительно нужно изменить функциональный блок или допустимо использовать функциональный блок, который ничего не делает, кроме вызова 'myfunc'? – mars

+0

Как это называется прямо перед началом симуляции и в начале моделирования? – Rasman

+0

@mars: Я бы предпочел изменить его напрямую, потому что я вызываю 'myfunc' с чем-то вроде' eml.extrinsic' или просто используя блок, который вызывает функцию в рабочем пространстве MATLAB, замедляет общую производительность. – safwanc

ответ

0

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

2

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

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

Вы можете затем изменить код блока, используя в Stateflow API:

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

См. Также this post on MATLAB Answers.

1

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

(В окне командной строки) Перейти в меню Файл -> Set Path -> Add Folder (выберите папку, содержащую м-файл)

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

(в окне модели) Перейти в меню Файл -> Свойства модели -> Callbacks -> InitFcn В окне редактирования, предусмотренном для InitFcn, напишите команду для вызова функции ИЭ MyFunc(); Вам необходимо будет изменить эту команду в соответствии с вашими функциями и требованиями.

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

Смежные вопросы