【问题标题】:Assign vectors from MATLAB workspace (struct) to Simulink Model将向量从 MATLAB 工作区(结构)分配给 Simulink 模型
【发布时间】:2018-05-29 17:00:32
【问题描述】:

我需要帮助来运行 Simulink 模型,其中包含来自结构体的 MATLAB 工作区的数据。下面是我想做的一个非常简化的用例

用例:

我在 MATLAB 工作区中有一个名为“data_in”的结构,它有两个字段 x 和 y,它们是向量。我有一个 simulink 模型,其中有两个名为 x 和 y 的 Inports

这就是我想要的:

一个。从 Simlunk 模型中读取 Inport 的名称。在这种情况下,它将是 x 和 y

b.以编程方式将结构中的数据 - “data_in”分配给 Simulink 模型中的端口“x”和“y”。结构“data_in”包含要映射到 Simulink Inports 的两个向量“x”和“y”

上述用例是一个非常简化的场景。我打算使用的模型可以有 100 个输入端口,因此我不想使用“来自工作区”块,因为添加 100 个输入端口对我来说是不切实际的

如何在 Simulink 中处理这种情况。我不仅仅是 MATLAB 和 Simulink 的初学者。所以,详细的回答会对我有很大帮助

【问题讨论】:

    标签: matlab simulink


    【解决方案1】:

    如果我正确地回答了您的问题,并且输入是时间变量,您可以使用From Workspace 并通过InitFcnCallbacks 中调用您的初始化脚本。

    假设您有一个名为 init_script 的初始化脚本:

    输入InitFcn这个:init_script;因此,当您运行 Simulink 时,该脚本首先运行。

    假设这是您在init_script 中的时间序列:

    ts = timeseries(randn(10,2),'Name','TS');
    

    将 ts 放入From Workspace

    但是,如果这些不是时变向量,则执行相同的操作并改用constant 块,在其值字段中输入向量的名称,然后再次将包含这些向量的脚本放入InitFcnCallbacks:

    X = randi(10,6,1); 
    Y = randi(10,6,1);
    

    然后执行您需要的操作:

    所以名为 simout 的 To Workspace 块将为您提供:

    simout.Data(:,:,1)
    ans =
    
    14
     9
    16
    16
    10
     3
    

    最后,如果您有很多这些向量和组件,您可以从 Matlab Workspace 轻松创建它们:

    my_struct.x = randn(6,1);my_struct.y = randn(6,1);
    new_system('myModel')
    open_system('myModel')
    pos = [10   10   20   30]
    for i =1:10
        add_block('built-in/Inport',['myModel' '/In1'],'Position',pos);
        add_block('built-in/Constant',['myModel' strcat('/Cx', num2str(i))],'Position',pos+2);
        add_block('built-in/Constant',['myModel' strcat('/Cy', num2str(i))],'Position',pos+i);
        pos = pos + 1;
        X_vector = my_st.x
        set_param(strcat('myModel/Cx', num2str(i)),'Value', X_vector)
        Y_vector = my_st.x
        set_param(strcat('myModel/Cy', num2str(i)),'Value', Y_vector)
    ....
    

    当然,这个 for 循环代码是为了给你一个想法,实际上会更复杂,你会知道如何最好地处理它。

    【讨论】:

      猜你喜欢
      • 2016-04-22
      • 1970-01-01
      • 1970-01-01
      • 2014-04-03
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多