Вопрос по matlab – Код загрузки для функционального блока MATLAB во время выполнения Simulink

3

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

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

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

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

Ваш Ответ

3   ответа
1

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

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

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

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

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

0

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

2

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

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';

Смотрите такжеэтот пост на MATLAB Ответы.

Похожие вопросы