将矢量从MATLAB工作空间(struct)分配给Simulink Model

时间:2018-05-28 08:49:14

标签: matlab simulink

我需要帮助运行Simulink模型,其中包含结构中包含的MATLAB工作空间中的数据。以下是我想要做的非常简化的用例

用例:

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

这就是我想要的:

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

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

上述用例是一个非常简化的场景。我打算使用的模型可以有100个输入,因此我不想使用“From Workspace”块,因为添加100个它是不切实际的

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

1 个答案:

答案 0 :(得分:1)

如果我的问题得到了正确,输入是时间变量,您可以使用From Workspace并在InitFcn中通过Callbacks调用初始化脚本。

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

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

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

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

将ts放入From Workspaceenter image description here

但是如果这些不是时变矢量,那么使用constant块代替,在其值字段中放置矢量名称,然后再将包含这些矢量的脚本放在InitFcn中{ {1}}:

Callbacks

然后执行您需要的操作: enter image description here

所以名为simout的To Workspace块会给你:

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

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

simout.Data(:,:,1)
ans =

14
 9
16
16
10
 3

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