Simulink变参数自动仿真

前言

在用Simulink进行仿真时,经常会需要研究某一参数变化时,模型仿真结果的变化情况。此时,需要不断地改变仿真模型中的某一参数,仿真,记录数据,依次循环,非常麻烦。实际上,这一工作完全可以通过代码来完成。下面介绍方法。

实验平台

Matlab R2023b

案例

研究传统三相全桥逆变器和分裂电容式三相全桥逆变器在带三相不平衡负载时,输出电压的变化情况。输出负载均为电阻负载,星形连接。

输入电压:750V
输出电压:三相50Hz,220 V r m s \mathrm{V_{rms}} Vrms正弦波
额定输出功率:单相2kW,三相6kW。即单相额定负载 22 0 2 / 2000 = 24.2 Ω 220^2/2000=24.2\Omega 2202/2000=24.2Ω,记为 R L R_\mathrm{L} RL
由于本文核心在于介绍Simulink自动化仿真的方法,三相逆变器控制直接使用简单的开环控制,调制方式直接使用SPWM调制方式。

分别在Simulink中搭建仿真模型。传统三相全桥逆变器的仿真模型命名为Inverter3ph.slx
在这里插入图片描述
开关频率设置为50kHz,仅对三相负载电压进行测量,保存在变量vo中。
在这里插入图片描述
在这里插入图片描述
在Simulink仿真界面按快捷键Ctrl+E,对数据导出进行设置:

这样,在我们模型仿真完毕时,在工作区会出现vo这个变量而不是out变量,更方便我们操作。
分裂电容式三相全桥逆变器仿真模型命名为Inverter3ph_SepCap.slx
在这里插入图片描述
其余设计与传统三相全桥逆变器完全相同。

研究两种拓扑结构,四种负载状况下输出电压的变化情况:

  1. 三相平衡负载,三相均满载,即RLA、RLB与RLC均设置为 R L R_\mathrm{L} RL
  2. 三相平衡负载,三相均空载,本次仿真中,将RLA、RLB与RLC均设置为 1 0 9 Ω 10^9\Omega 109Ω
  3. 三相不平衡负载,A相空载,BC相满载,即RLA设置为 1 0 9 Ω 10^9\Omega 109Ω,RLB与RLC均设置为 R L R_\mathrm{L} RL
  4. 三相不平衡负载,AB相空载,C相满载,即RLA与RLB均设置为 1 0 9 Ω 10^9\Omega 109Ω,RLC设置为 R L R_\mathrm{L} RL

因此,总计需要仿真八次。

代码实现

%% Simulink变参数批量仿真
simPath='E:\Files\Files\Files\documents\Master1\CSDN\SimulinkBatchSim\Simulation\'; %仿真文件所在文件夹路径
simModels={'Inverter3ph','Inverter3ph_SepCap'}; %仿真模型名称,不需要带扩展名
savePath='E:\Files\Files\Files\documents\Master1\CSDN\SimulinkBatchSim\Data\'; %数据存储路径

RL=220^2/2e3; %额定负载
strRL=num2str(RL); %额定负载数值转化为字符串
% 仿真负载情况
RLAList={strRL,'1e9','1e9','1e9'};
RLBList={strRL,'1e9',strRL,'1e9'};
RLCList={strRL,'1e9',strRL,strRL};

% 存储数据名称
saveVarList={'vo','vo_LightLoad','vo_BC','vo_C'}; %保存变量名称
saveVars={'Data.mat','Data_SepCap.mat'}; %保存数据名称
% 开始批量仿真
cd(simPath); %将工作目录切换到仿真文件所在文件夹目录下
for i=1:1:length(simModels)
    model=simModels{i}; %选择模型
    open_system(model); %打开模型
    load_system(model); %加载模型
    for j=1:1:length(saveVarList)
        set_param([model,'/RLA'],'Resistance',RLAList{j}); %设置模型内RLA的模块的Resistance参数
        set_param([model,'/RLB'],'Resistance',RLBList{j});
        set_param([model,'/RLC'],'Resistance',RLCList{j});
        sim(model); %开始仿真
        eval([saveVarList{j},'=vo']); %将仿真完成后工作区保存到vo数据另存
    end
    save_system(model); %保存模型
    close_system; %关闭模型
    save([savePath,saveVars{i}],'vo*'); %保存数据
end

核心流程就是:

  1. 找到模型,用open_system(model)打开模型;
  2. load_system(model)加载模型;
  3. 找到要改变的参数所在的模块名称,本例中,即为RLA、RLB、RLC(首次拖入模型时,单击模型可以看到模型的默认名称,点击即可修改。例如,下图中,Series RLC Branch1即为默认名称。已修改过的名称会像上面的仿真模型图一样显示在模块左侧,鼠标单击可以进行再一次修改)
    在这里插入图片描述
  4. 定位模块在模型中的层级。例如,在本例中,RLA、RLB与RLC没有嵌套在子系统中,因此直接在set_param的第一个参数中,写成[model,'/RLA']。如果嵌套了子系统,则要逐级嵌套。例如,将三相负载封装到一个子系统内:
    在这里插入图片描述
    在这里插入图片描述

此时,要改变RLA、RLB和RLC的参数,则set_param的第一个参数应该写成[model,'/Load/RLA'],其中,Load为子系统名称。更多级的子系统嵌套依此类推。
5. 定位参数在模块中的参数名称。一般情况下,双击模块时,填入参数的输入栏上面的描述就是。
在这里插入图片描述
不确定时,也可以用get_param获取模块的所有参数名称:

% 获取模块所有参数名称
h=getSimulinkBlockHandle([model,'/RLA'],true);
get_param(h,'DialogParameters')

输出结果:
在这里插入图片描述
显然,我们要设置的参数是Resistance
值得注意的是,set_param的最后一个参数用于设置参数的值,但类型必须设定为字符类型!
代码运行后,会自动变参数在Simulink中进行仿真,并将仿真得到的数据保存在Data.matData_SepCap.mat中,每个mat文件内包含vovo_LightLoadvo_BCvo_C四个变量,变量均为带时间的结构体。可以对数据进行进一步处理:

% 数据进一步处理
clear;
clc;
load('E:\Files\Files\Files\documents\Master1\CSDN\SimulinkBatchSim\Data\Data.mat');
plot(vo.time,vo.signals.values(:,1),'LineWidth',4);
hold on;
plot(vo_LightLoad.time,vo_LightLoad.signals.values(:,1),'LineWidth',4);
plot(vo_BC.time,vo_BC.signals.values(:,1),'LineWidth',4);
plot(vo_C.time,vo_C.signals.values(:,1),'LineWidth',4);
legend('三相满载','三相空载','A相空载BC相满载','AB相空载C相满载')

在这里插入图片描述

扩展

有时候,当模型参数很多时,会使用数据字典进行管理。那么,这种情况下如何改变数据字典中的参数,进行变参数批量仿真呢?

例如,Inverter3ph.slxInverter3ph_SepCap.slx中的一些共性参数放置在Inverter3ph.sldd中进行统一管理。仿真时,对Inverter3ph.sldd中的开关频率fs(仅作演示说明,一般不会改变开关频率)进行修改与仿真:

dataDictPath='E:\Files\Files\Files\documents\Master1\CSDN\SimulinkBatchSim\Simulation\Inverter3ph.sldd'; %数据字典所在路径
fsList=['50e3','20e3','10e3'];
% 打开模型,加载模型
% …………

% 修改数据字典中的耦合系数
for i=1:1:length(fsList):
	dictData=Simulink.data.dictionary.open(dataDictPath); %打开数据字典
	dataSec=getSection(dictData,'Design Data'); %获取数据字典中,Design Data的Section,通常设置的参数默认都在这一Section
	evalin(dataSec,['fs=',fsList{i},';']); %修改数据字典参数
	saveChanges(dictData); %保存更改
	close(dictData); %关闭数据字典
	% 进行仿真
	% …………
	% 保存数据
	% …………
end
  • 10
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要实现Simulink参数仿真自动重新开始,可以使用Simulink的模型回调函数和MATLAB脚本来实现。具体步骤如下: 1. 在Simulink模型中添加一个模型回调函数,选择“模型配置参数”菜单下的“回调函数”选项,然后在“模型启动”回调函数中添加以下代码: ``` set_param(bdroot,'SimulationCommand','stop'); set_param(bdroot,'SimulationCommand','start'); ``` 2. 编写一个MATLAB脚本,该脚本用于改Simulink模型中的参数。可以使用以下代码示例: ``` % Load the Simulink model load_system('model_name'); % Change the value of a parameter set_param('model_name/parameter_name','Value','new_value'); % Close the Simulink model close_system('model_name'); ``` 3. 将MATLAB脚本保存为.m文件,并在Simulink模型回调函数中添加以下代码: ``` evalin('base','run(''script_name.m'')'); ``` 其中,script_name.m是你保存的MATLAB脚本的文件名。 这样,当你改Simulink模型中的参数并保存脚本后,每次运行该脚本时,Simulink模型都会自动重新开始仿真。 ### 回答2: 在Simulink中,如果需要改参数并重新开始仿真,可以按照以下步骤操作: 1. 在Simulink模型中,点击上方工具栏的“仿真”按钮,选择“模拟设置”。 2. 在弹出的对话框中,选择“停止时间”选项,并将其设置仿真时间的最大值,确保仿真能够一直运行,而不会在某个特定时间停止。 3. 在模拟设置对话框中,点击“应用”按钮,关闭对话框。 4. 在Simulink模型中找到需要修改的参数,在参数设置对话框中修改参数的值。 5. 在Simulink模型中点击上方工具栏的“仿真”按钮,选择“常规”下的“运行”选项,或者按下键盘上的快捷键Ctrl + D。此时,将会重新开始仿真,并且新的参数值会应用到仿真过程中。 6. 查看仿真结果,可能需要等待一段时间才能得到新的结果。 通过以上步骤,即可实现在Simulink中改参数并重新开始仿真的操作。 ### 回答3: 在Simulink中,可以通过更改仿真参数来重新开始仿真。首先,打开Simulink模型,并选择“仿真”选项卡上的“模型配置参数”按钮。在模型配置参数对话框中,找到“仿真停止时间”选项,并更改其数值为你想要重新开始仿真的时间点。然后,点击对话框右下角的“应用”按钮,再点击“确定”按钮完成参数的更改。 接下来,你可以选择重新开始仿真的方式。一种方式是选择“仿真”选项卡上的“开始”按钮来手动开始仿真。另一种方式是通过设置仿真参数中的“仿真开始时间”来自动重新开始仿真。在模型配置参数对话框中找到“仿真开始时间”选项,并设置其数值为你想要重新开始仿真的时间点。然后,点击对话框右下角的“应用”按钮,再点击“确定”按钮完成参数的更改。 当你按下“开始”按钮或设置了新的仿真开始时间后,Simulink将会重新开始仿真过程。它将丢弃之前的仿真数据,将仿真时间重置为设定的开始时间,并重新执行模型中的所有计算和更新操作。你可以观察仿真输出和结果来确认是否成功重新开始了仿真。 值得注意的是,重新开始仿真可能会对模型的计算和结果产生影响。因此,在更改参数和重新开始仿真之前,你应该先保存好当前的仿真数据和结果,以防止丢失。此外,还要确保你对模型和仿真参数的修改符合你的需求,避免产生错误或不正确的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值