【问题标题】:How to initialize constants for a Simulink model from a MATLAB script?如何从 MATLAB 脚本初始化 Simulink 模型的常量?
【发布时间】:2020-02-03 07:54:09
【问题描述】:

我正在使用 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 global simulink


    【解决方案1】:

    您可以有一个包含变量的结构,可以有选择地在您的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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-08
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多