Как инициализировать константы для модели Simulink из сценария MATLAB? - PullRequest
2 голосов
/ 03 февраля 2020

Я строю модель Simulink с Matlab Function блоками. Эти функциональные блоки имеют много констант, например g=9.8. Я хочу инициализировать все эти константы в одной go в сценарии Matlab, чтобы мне не приходилось делать это в каждом функциональном блоке.

Вот что я пробовал до сих пор:

  • В блоке Matlab Function я инициализировал переменные, используя блок Constant, который задается как вход для функции блок. Эта система работает, но в модели много постоянных блоков, и она становится очень кластеризованной.

example

  • Я также пытался объявить эти переменные как global переменных в сценарии Matlab. Это не работает.

  • Другой способ, который я попробовал, состоит в том, чтобы создать сценарий функции для этих констант и затем загрузить этот сценарий функции в блоке Matlab Function. Это не работает.

Есть ли способ, которым я могу просто инициализировать эти значения из сценария Matlab, а модель Simulink считывает его из сценария Matlab, без необходимости использовать эти константы блоки?

%refercode
%matlabscript

Initialization values;
sim('filenmae.slx');
post processing;

%simulink model 

constant blocks(initialization values) -> matlab function block -> output;

%end

Как лучше всего решить эту проблему?

1 Ответ

0 голосов
/ 03 февраля 2020

У вас может быть одна структура, содержащая ваши переменные, которые можно выборочно использовать в ваших Matlab Function блоках. Это означает, что вы можете иметь только один Constant блок и дополнительные функции, инициализированные из вашего скрипта.

В этой статье MathWorks показано, как вы можете преобразовать структуру в Simulink Bus для использования в вашей модели (вы можете не используйте структуру в константном блоке напрямую):

https://blogs.mathworks.com/simulink/2011/12/05/initializing-buses-using-a-matlab-structure/

Даю вам что-то вроде этого:

% initialise constants within struct, keeps the workspace tidy too!
vars = struct();
vars.g = 9.8;
vars.lambda = 2;
% Create bus data for the variables struct
varsInfo = Simulink.Bus.createObject(vars);
% Sim the model
sim( 'myModel.slx' );

С вашим постоянный блок, настроенный для шины, как описано в связанной статье:

bus config

Затем вы можете получить к нему доступ в своей функции

function y = ( y, vars )
    % MATLAB Function block function within myModel.slx
    y = vars.lambda + u * vars.g;
...