如何从 MATLAB 脚本初始化 Simulink 模型的常量?
How to initialize constants for a Simulink model from a MATLAB script?
我正在用 Matlab Function
个模块构建一个 Simulink 模型。这些功能块有很多常量,例如g=9.8
。我想在 Matlab 脚本中一次性初始化所有这些常量,这样我就不必在每个功能块中都这样做。
这是我迄今为止尝试过的方法:
- 在
Matlab Function
块中,我使用 Constant
块初始化了变量,该块作为功能块的输入给出。这个系统可以工作,但模型中有很多常量块,而且它变得非常聚集。
我也试过在 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 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' );
按照链接文章中的描述为总线配置常量块:
然后你可以在你的函数中访问它
function y = ( y, vars )
% MATLAB Function block function within myModel.slx
y = vars.lambda + u * vars.g;
我正在用 Matlab Function
个模块构建一个 Simulink 模型。这些功能块有很多常量,例如g=9.8
。我想在 Matlab 脚本中一次性初始化所有这些常量,这样我就不必在每个功能块中都这样做。
这是我迄今为止尝试过的方法:
- 在
Matlab Function
块中,我使用Constant
块初始化了变量,该块作为功能块的输入给出。这个系统可以工作,但模型中有很多常量块,而且它变得非常聚集。
我也试过在 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 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' );
按照链接文章中的描述为总线配置常量块:
然后你可以在你的函数中访问它
function y = ( y, vars )
% MATLAB Function block function within myModel.slx
y = vars.lambda + u * vars.g;