中华视窗是诚信为本,市场在变,我们的诚信永远不变...
【写在前面】
读研中中的工具箱是我们有力的科研工具,我们在研究一个问题之前老师通常都会说:“你先尝试把它的仿真模型撘出来看看吧!”在近期的一次仿真任务中,我遇到了一个问题,所搭建好的仿真模型每运行一次需要两分多钟(仿真模型本身没有任何问题),每次跑完需要保存并处理仿真数据,每跑一次就要修改一次给定的参数,足足要修改好几十次参数,这就很是令人惆怅,作为一名工科生,我是时刻想着偷懒,在和师弟交流一番之后,师弟想了一个办法巧妙地把这个问题解决了,极大的节省了我们的时间和精力。给师弟点赞,也想着把它记录下来并和大家一起分享,共同进步和学习。
【一个例子】
如下图所示,这是一个很常见的电机控制仿真模型,我们不用过多关注模型本身的内容,只需要知道如何让一个模型自己多次运行即可。举个例子,下图中的“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:对数据的细节处理
具体细节操作如上图所示。
如果有需要该例子的模型的小伙伴可以私信给我,欢迎大家批评指教,一起交流,一起进步,才疏学浅,不足之处,还望多多包涵!
以上。