最新公告:

中华视窗是诚信为本,市场在变,我们的诚信永远不变...

中华视窗

咨询热线

400-123-4657

公司动态

当前位置: 首页 > 新闻动态 > 公司动态

Matlab如何实现Simulink仿真的并行运行

添加时间:2024-02-01

/

【写在前面】

读研中中的工具箱是我们有力的科研工具,我们在研究一个问题之前老师通常都会说:“你先尝试把它的仿真模型撘出来看看吧!”在近期的一次仿真任务中,我遇到了一个问题,所搭建好的仿真模型每运行一次需要两分多钟(仿真模型本身没有任何问题),每次跑完需要保存并处理仿真数据,每跑一次就要修改一次给定的参数,足足要修改好几十次参数,这就很是令人惆怅,作为一名工科生,我是时刻想着偷懒,在和师弟交流一番之后,师弟想了一个办法巧妙地把这个问题解决了,极大的节省了我们的时间和精力。给师弟点赞,也想着把它记录下来并和大家一起分享,共同进步和学习。

【一个例子】

如下图所示,这是一个很常见的电机控制仿真模型,我们不用过多关注模型本身的内容,只需要知道如何让一个模型自己多次运行即可。举个例子,下图中的“speed”是我们需要更改的仿真参数,假设我们需要得到转速分别为100r/min—2000r/min,间隔为100,这20个转速下的仿真结果。难道我们需要每设置一个转速给定就运行一次仿真,并保存和处理数据,重述上述操作达20次吗。于我而言,除非我是疯了,不然我绝不做这种机械性的重复劳动,毫无意义。

仿真模型动态公司排名_动态仿真模型公司_仿真模型动态公司有哪些

图1:一个常见的电机控制仿真模型

【解决的思路】

让并行跑仿真,自己自动运行20次,并做好相应的处理工作就ok了!

注:上图所示的仿真模型被我命名为“”,文件格式.slx,版本。

【实现的细节】

我们先来了解几个函数(看不懂也没关系),大概看一下:

命令允许您对模型(设计)运行并行(同时)® 仿真。在这种情况下,并行运行意味着在不同的工作进程中同时运行多个模型仿真。 可让您在 monte carlo 分析、参数扫描、模型测试、实验设计和模型优化等场景中,很方便地采用不同的输入或不同的参数设置运行同一模型。

- 更改基础工作区、数据字典或模型工作区中的变量

- 更改模块参数

- 更改模型参数

- 指定在每次仿真之前先运行 函数,以在群集上进行自定义和后处理结果

- 指定在每次仿真之后运行 函数,以在群集上进行自定义和后处理结果

- 更改初始状态

- 将数值数组、时序或数据集对象指定为模型的外部输入

对涉及多个并行仿真和记录大量数据的工作流,可以使用 . 对象数组创建仿真集。这在模型测试、试验设计、Monte Carlo 分析和模型优化等场景中很有用。

允许您监视多个并行仿真。它显示仿真在并行运行时的运行进度。您可以查看每次运行的详细信息,如参数、已用时间和诊断。 是一个有用的工具,您可选择用它分析和比较 Data 中的结果。您还可以选择一项运行并将其值应用于模型。有关详细信息,请参阅 。

注:以上摘自官方文档。

我们首先打开图1所示的模型中要更改参数的speed部分:

仿真模型动态公司有哪些_动态仿真模型公司_仿真模型动态公司排名

图2:对需要修改参数的模块进行设置

动态仿真模型公司_仿真模型动态公司排名_仿真模型动态公司有哪些

首先打开模型;

open_system('PMSM_SMC');
load_system('PMSM_SMC');

设置好要修改的speed参数,这里希望转速给定从100r/min到2000r/min,间隔100r/min,共计运行20次。

speed_series =100:100:2000;%设置好要修改的转速序列

通过使用for循环创建对象数组;

model='PMSM_SMC';
speed=100;%参数初始化
in=repmat(Simulink.SimulationInput,[1 length(speed_series)]); %自动并行运行
for i = 1:1:length(speed_series)
in(i) = Simulink.SimulationInput(model);  %模型名称
in(i) = in(i).setVariable('speed',speed_series(i));  %运行变量名称
end

运行模型;

out = parsim(in, 'ShowProgress', 'on','ShowSimulationManager','on','TransferBaseWorkspaceVariables','on');

【完整代码】

%============================================
% 更多编程问题求助,请关注→ 大学生致知资源库
% 或咨询Q:571485322 
%============================================
%--------------------------------------
%Simulink自动运行程序;
%注意:需自行设置转速序列(speed_series);
%注意:需自行设置运行模型的名称;
%--------------------------------------
open_system('PMSM_SMC');
load_system('PMSM_SMC');
speed_series =100:100:2000;%设置好要修改的转速序列
model='PMSM_SMC';
speed=100;%参数初始化
in=repmat(Simulink.SimulationInput,[1 length(speed_series)]); %自动并行运行
for i = 1:1:length(speed_series)
in(i) = Simulink.SimulationInput(model);  %模型名称
in(i) = in(i).setVariable('speed',speed_series(i));  %运行变量名称
end
out = parsim(in, 'ShowProgress', 'on','ShowSimulationManager','on','TransferBaseWorkspaceVariables','on');

【运行界面】

仿真模型动态公司有哪些_仿真模型动态公司排名_动态仿真模型公司

图3:仿真的运行情况

在上述界面可以看到仿真的整个运行情况,包括运行成功与否,运行进度,以及运行时间,这时候就会发现20次仿真都在自己自动运行啦,偷懒成功!!!

仿真模型动态公司有哪些_动态仿真模型公司_仿真模型动态公司排名

图4:运行完成界面

继续分析处理数据,如下图所示,点击,记住,要双击!!!→;

仿真模型动态公司有哪些_仿真模型动态公司排名_动态仿真模型公司

图5:运行完成界面

仿真模型动态公司排名_动态仿真模型公司_仿真模型动态公司有哪些

图6:运行完成界面

动态仿真模型公司_仿真模型动态公司排名_仿真模型动态公司有哪些

图7:对数据的细节处理

具体细节操作如上图所示。

如果有需要该例子的模型的小伙伴可以私信给我,欢迎大家批评指教,一起交流,一起进步,才疏学浅,不足之处,还望多多包涵!

以上。

联系我们

电话:400-123-4657

传真:+86-123-4567

地址:浙江 温州市 温州大道欧江大厦26188号

邮箱:admin@nxdls.net

电话:400-123-4657 传真:+86-123-4567 地址:浙江 温州市 温州大道欧江大厦26188号
版权所有:Copyright © 2002-2024 中华视窗 版权所有 非商用版本 ICP备案编号:粤IP**********    网站地图