Matlab/Simulink的一些功能用法笔记(3)

01--引言

最近加入到一个项目组,有一些测试需要去支持,通过了解原先团队的测试方法后,自己作了如下改善,大大提高了工作效率。这也许就是软件开发的意义吧,能够去除一些重复的机械的人工操作并且结果还非常不可靠。

大概的情况是有3个输入,其中一个输入的曲线在一定的时间内已经固定,另外两个输入是由是不同的工况点,需要测试根据不同的工况点,在固定时间内通过内部计算逻辑获得输出值。最终要把获取的输出值取最大值(周期比取最小值小10倍),输出值取最小值且按照不同的时间分为3部分,并把最终值通过填表拉成曲线。

具体化:

假如有一个输入I,运行时间总共10s,前4秒以200A运行,4-6s以50A运行,6-10s以100A运行

另外一个输入T,需要采集如下温度点(-25 -10 0 15 20),求输出P的值

第3个输入H2,分别在某个固定温度下,H2量范围0-100%,以5%为精度下,求P的值

最终求得的P的值最小值按时间分为三段,0-2s,2-5s,5-10s,设定周期为0.1s

最终求得的P的值取10s内的最大值,设定周期为1s

02--建模

1.求解器时间设置

2.输入I给定

3.暂时先固定T=-25,H2给定

4.假定内部算法如下:

查表数据:

5.运行一下

6.求得的P的值取10s内的最大值建模

内部:

7.求得的P的值最小值按时间分为三段,0-2s,2-5s,5-10s,设定周期为0.1s建模

内部:

子系统内部:

8.输出值导入到工作区间

导入的是一个结构体,需要改成单独变量,设置如下(去掉所有的打钩选项)

9.总体模型

10.由于最大值模型要比最小值模型周期调度小10倍,故在设置内设置为原子子系统,并把采样周期设置为1s

11.运行一下,检查是否为最值

P的值

PMax的值

看看short、mid、long(取最后一个点的值即为最值)

short

mid

long

12.去工作区间取值,取最后一个点

为了方便取点,把H2的百分比数值放在纵向,需要把取到的值重新定义下

分别为p,s,m,l

再把p值复制粘贴到Excel表中

除了第一次要选外,下一次直接Ctrl+c即可

最终根据不同的温度运行后,将数值复制到表格中如下:

拉成曲线:

13.模型资源见下载附件

2024.01.05

update:

完全进行自动化脚本

%create by xutian,2024.01.05
open_system('ByXT_ECM_LiBB_output8');            %打开需要进行测试的模型
mos_T = -30;                                     %设定需要测试的温度点
sim('ByXT_ECM_LiBB_output8');                    %进行仿真
cm30=Charge(19501,1:101);sm30=Short(1951,1:101); %求得该温度下的4个电压值
mm30=Mid(1951,1:101);lm30=Long(1951,1:101);
mos_T = -25;
sim('ByXT_ECM_LiBB_output8');
cm25=Charge(19501,1:101);sm25=Short(1951,1:101);
mm25=Mid(1951,1:101);lm25=Long(1951,1:101);
mos_T = -20;
sim('ByXT_ECM_LiBB_output8');
cm20=Charge(19501,1:101);sm20=Short(1951,1:101);
mm20=Mid(1951,1:101);lm20=Long(1951,1:101);
mos_T = -10;
sim('ByXT_ECM_LiBB_output8');
cm10=Charge(19501,1:101);sm10=Short(1951,1:101);
mm10=Mid(1951,1:101);lm10=Long(1951,1:101);
mos_T = 0;
sim('ByXT_ECM_LiBB_output8');
c0=Charge(19501,1:101);s0=Short(1951,1:101);
m0=Mid(1951,1:101);l0=Long(1951,1:101);
mos_T = 10;
sim('ByXT_ECM_LiBB_output8');
c10=Charge(19501,1:101);s10=Short(1951,1:101);
m10=Mid(1951,1:101);l10=Long(1951,1:101);
mos_T = 25;
sim('ByXT_ECM_LiBB_output8');
c25=Charge(19501,1:101);s25=Short(1951,1:101);
m25=Mid(1951,1:101);l25=Long(1951,1:101);
mos_T = 40;
sim('ByXT_ECM_LiBB_output8');
c40=Charge(19501,1:101);s40=Short(1951,1:101);
m40=Mid(1951,1:101);l40=Long(1951,1:101);
mos_T = 65;
sim('ByXT_ECM_LiBB_output8');
c65=Charge(19501,1:101);s65=Short(1951,1:101);
m65=Mid(1951,1:101);l65=Long(1951,1:101);
mos_T = 70;
sim('ByXT_ECM_LiBB_output8');
c70=Charge(19501,1:101);s70=Short(1951,1:101);
m70=Mid(1951,1:101);l70=Long(1951,1:101);
mos_T = 80;
sim('ByXT_ECM_LiBB_output8');
c80=Charge(19501,1:101);s80=Short(1951,1:101);
m80=Mid(1951,1:101);l80=Long(1951,1:101);
%---------------------------------------------------------------------------------------------------------
%准备绘图
soc=0:0.01:1;
soc=100*soc;
subplot(4,1,1);
% plot(soc,cm40);
% hold on
plot(soc,cm30,'',soc,cm25,soc,cm20,'',soc,cm10,'',soc,c0,'',soc,c10,'',soc,c25,'',soc,c40,'',soc,c65,'',soc,c70,soc,c80);
hold on
title('充电工况SEV曲线','fontweight','bold');
xlabel('%SOC');
ylabel('预测电压');
legend('-30℃','-25℃','-20℃','-10℃','0℃','10℃','25℃','40℃','65℃','70℃','80℃');
subplot(4,1,2);
% plot(soc,sm40);
% hold on
plot(soc,sm30,soc,sm25,soc,sm20,soc,sm10,soc,s0,soc,s10,soc,s25,soc,s40,soc,s65,soc,s70,soc,s80);
hold on
title('放电工况ShortSEV曲线','fontweight','bold');
xlabel('%SOC');
ylabel('预测电压');
legend('-30℃','-25℃','-20℃','-10℃','0℃','10℃','25℃','40℃','65℃','70℃','80℃');
subplot(4,1,3);
% plot(soc,mm40);
% hold on
plot(soc,mm30,soc,mm25,soc,mm20,soc,mm10,soc,m0,soc,m10,soc,m25,soc,m40,soc,m65,soc,m70,soc,m80);
hold on
title('放电工况MidSEV曲线','fontweight','bold');
xlabel('%SOC');
ylabel('预测电压');
legend('-30℃','-25℃','-20℃','-10℃','0℃','10℃','25℃','40℃','65℃','70℃','80℃');
subplot(4,1,4);
% plot(soc,lm40);
% hold on
plot(soc,lm30,soc,lm25,soc,lm20,soc,lm10,soc,l0,soc,l10,soc,l25,soc,l40,soc,l65,soc,l70,soc,l80);
hold on
title('放电工况LongSEV曲线','fontweight','bold');
xlabel('%SOC');
ylabel('预测电压');
legend('-30℃','-25℃','-20℃','-10℃','0℃','10℃','25℃','40℃','65℃','70℃','80℃');
%----------------------------------------------------------------------------------------------------------
%总结数据
%充电
SevCData(1:101,1)=cm30';
SevCData(1:101,2)=cm25';
SevCData(1:101,3)=cm20';
SevCData(1:101,4)=cm10';
SevCData(1:101,5)=c0';
SevCData(1:101,6)=c10';
SevCData(1:101,7)=c25';
SevCData(1:101,8)=c40';
SevCData(1:101,9)=c65';
SevCData(1:101,10)=c70';
SevCData(1:101,11)=c80';
%放电short阶段
SevSData(1:101,1)=sm30';
SevSData(1:101,2)=sm25';
SevSData(1:101,3)=sm20';
SevSData(1:101,4)=sm10';
SevSData(1:101,5)=s0';
SevSData(1:101,6)=s10';
SevSData(1:101,7)=s25';
SevSData(1:101,8)=s40';
SevSData(1:101,9)=s65';
SevSData(1:101,10)=s70';
SevSData(1:101,11)=s80';
%放电middle阶段
SevMData(1:101,1)=mm30';
SevMData(1:101,2)=mm25';
SevMData(1:101,3)=mm20';
SevMData(1:101,4)=mm10';
SevMData(1:101,5)=m0';
SevMData(1:101,6)=m10';
SevMData(1:101,7)=m25';
SevMData(1:101,8)=m40';
SevMData(1:101,9)=m65';
SevMData(1:101,10)=m70';
SevMData(1:101,11)=m80';
%放电long阶段
SevLData(1:101,1)=lm30';
SevLData(1:101,2)=lm25';
SevLData(1:101,3)=lm20';
SevLData(1:101,4)=lm10';
SevLData(1:101,5)=l0';
SevLData(1:101,6)=l10';
SevLData(1:101,7)=l25';
SevLData(1:101,8)=l40';
SevLData(1:101,9)=l65';
SevLData(1:101,10)=l70';
SevLData(1:101,11)=l80';

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值