如何从MATLAB脚本初始化Simulink模型的常数?

问题描述 投票:2回答:1

我正在用Matlab Function块构建Simulink模型。这些功能块具有很多常量,例如g=9.8。我想一次在Matlab脚本中初始化所有这些常量,这样我就不必在每个功能块中都这样做。

这是到目前为止我尝试过的:

  • Matlab Function块中,我已使用Constant块初始化了变量,将其作为功能块的输入提供。这个系统可以工作,但是模型中有很多常量块,并且它变得非常聚集。

example

  • 我也曾尝试在Matlab脚本中将这些变量声明为global变量。这不起作用。

  • 我尝试的另一种方法是为这些常量创建一个功能脚本,然后将该功能脚本加载到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

解决此问题的最佳方法是什么?

matlab global simulink
1个回答
0
投票

您可能只有一个包含变量的结构,可以在Matlab Function块中有选择地使用它。这意味着您可以只具有一个Constant块和从脚本中初始化的其他功能输入。

[此MathWorks文章显示了如何将结构转换为Simulink总线以在模型中使用(不能直接在常量块中使用该结构):

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;
© www.soinside.com 2019 - 2024. All rights reserved.