资源简介
关于串级控制的matlab实现,一般书本上都是利用simulink搭建相应的控制回路,本程序则是通过m语言实现的,并且实现了手自动无扰切换,还加上了前馈控制。

代码片段和文件信息
clear
clc
pidBlock(1)=struct(‘blockName‘‘LIC1002‘‘direct‘1‘AMC‘‘AUT‘‘SP‘0‘PV‘0‘MV‘0‘Kc‘58‘Ti‘0.3‘Td‘0.075‘spanHigh‘2.52‘spanLow‘0‘E0‘0‘E1‘0‘E2‘0);
pidBlock(2)=struct(‘blockName‘‘LIC1001‘‘direct‘1‘AMC‘‘AUT‘‘SP‘70‘PV‘0‘MV‘0‘Kc‘8‘Ti‘2‘Td‘0.1‘spanHigh‘2.52‘spanLow‘0‘E0‘0‘E1‘0‘E2‘0);
%部分参数的值
H1=1.5;H2=1.4;
ku=0.2;A=2;
R12=2*sqrt(1.5)/0.20412;
R2=2*sqrt(1.4)/0.21129;
ts=0.1;
Qd1=0.15;Qd2=0.05;
%第一个水箱离散化
sys1=tf(R12*ku[R12*A1]);
dsys1=c2d(sys1ts‘z‘);
[num1den1]=tfdata(dsys1‘v‘);
%第二个水箱离散化
sys2=tf(R2[R12*R2*AR12]);
dsys2=c2d(sys2ts‘z‘);
[num2den2]=tfdata(dsys2‘v‘);
%扰动Qd1
sys3=tf(R12[R12*A1]);
dsys3=c2d(sys3ts‘z‘);
[num3den3]=tfdata(dsys3‘v‘);
%扰动Qd2
sys4=tf(R2[R2*A1]);
dsys4=c2d(sys4ts‘z‘);
[num4den4]=tfdata(dsys4‘v‘);
%前馈控制器
sys5=-sys4;
dsys5=c2d(sys5ts‘z‘);
[num5den5]=tfdata(dsys5‘v‘);
%初值
w=0;u1_1=0.5;u2_1=0;h1_1=0;h2_1=0;dh1_1=0;dh2_1=0;dh2f_1=0;
pidBlock(1).SP=pidBlock(1).SP/100*(pidBlock(1).spanHigh-pidBlock(1).spanLow)+pidBlock(1).spanLow-H1;%H1的实际偏差输入值
pidBlock(2).SP=pidBlock(2).SP/100*(pidBlock(2).spanHigh-pidBlock(2).spanLow)+pidBlock(2).spanLow-H2;%H2的实际偏差输入值
%程序
for k=1:1:1000
rin(k)=1;
time(k)=k*ts;
du1(k)=pidBlock(2).Kc*[(pidBlock(2).E0-pidBlock(2).E1)+ts/pidBlock(2).Ti*pidBlock(2).E0+pidBlock(2).Td*(pidBlock(2).E0-2*pidBlock(2).E1+pidBlock(2).E2)/ts];
u1(k)=u1_1+du1(k);
du2(k)=pidBlock(1).Kc*[(pidBlock(1).E0-pidBlock(1).E1)+ts/pidBlock(1).Ti*pidBlock(1).E0+pidBlock(1).Td*(pidBlock(1).E0-2*pidBlock(1).E1+pidBlock(1).E2)/ts];
u2(k)=u2_1+du2(k);
dh1(k)=-den3(2)*dh1_1+num3(2)*Qd1;%扰动Qd1的输出
dh2(k)=-den4(2)*dh2_1+num4(2)*Qd2;%扰动Qd2的输出
dh2f(k)=-den5(2)*dh2f_1+num5(2)*Qd2;%前馈控制器输出
h1(k)=-den1(2)*h1_1+num1(2)*pidBlock(1).MV*pidBlock(1).direct+dh1(k);
%h2(k)=-den2(2)*h2_1+num2(2)*h1(k)*pidBlock(2).direct+dh2(k);%无前馈控制器
h2(k)=-den2(2)*h2_1+num2(2)*h1(k)*pidBlock(2).direct+dh2(k)+dh2f(k);%有前馈控制器
pidBlock(2).PV=h2(k);
pidBlock(2)=pid_function(pidBlock(2)u1(k));
pidBlock(1).SP=u1(k);
pidBlock(1).PV=h1(k);
pidBlock(1)=pid_function(pidBlock(1)u2(k));
dh1_1=dh1(1);
dh2_1=dh2(k);
dh2f_1=dh2f(k);
u1_1=u1(k);
u2_1=u2(k);
h1_1=h1(k);
h2_1=h2(k);
%将求出的h1(k)h2(k)化为百分数
y1(k)=(h1(k)+H1-pidBlock(2).spanLow)/(pidBlock(2).spanHigh-pidBlock(2).spanLow)*100;
y2(k)=(h2(k)+H2-pidBlock(1).spanLow)/(pidBlock(1).spanHigh-pidBlock(1).spanLow)*100;
end
plot(timey2);
xlabel(‘时间/s‘);
ylabel(‘第二个水箱液位H2‘);
title(‘扰动Qd2变化前的阶跃响应曲线‘);
grid
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2013-06-12 12:39 串级控制的Matlab实现\
文件 2796 2013-01-30 14:59 串级控制的Matlab实现\main.m
文件 320 2013-01-27 16:16 串级控制的Matlab实现\pid_function.m
相关资源
- matlab_OFDM调制解调(来自剑桥大学)
- Matlab路面裂缝识别69319
- 高灵敏度GPS接收机MATLAB仿真,附捕获
- 基于MATLAB的质点弹道计算与外弹道优
- 阵列天线的matlab仿真
- MATLAB 经典程序源代码大全
- MATLAB小波软阈值去噪代码33473
- 天线阵的波束形成在MATLAB仿真程序及
- 非线性SVM算法-matlab实现
- 《MATLAB 智能算法超级学习手册》-程序
- 组合导航matlab程序
- 读取txt文件内容matlab代码实现
- Matlab实现基于相关的模板匹配程序
- matlab优化工具箱讲解
- 基于MATLAB的快速傅里叶变换
- 光纤传输中的分布傅立叶算法matlab实
- 基于matlab的图像处理源程序
- matlab 椭圆拟合程序
- 算术编码解码matlab源代码
- optical_flow 光流法 matlab 实现程序
- 引导图像滤波器 Matlab实现
- 分形几何中一些经典图形的Matlab画法
- OFDM系统MATLAB仿真代码
- SVM工具箱(matlab中运行)
- 图像小波变换MatLab源代码
- LU分解的MATLAB实现
- 冈萨雷斯数字图像处理matlab版(第三
- 替代数据法的matlab程序
- 用matlab实现的多站定位系统性能仿真
- 通过不同方法进行粗糙集属性约简m
评论
共有 条评论