资源简介
关于串级控制的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
相关资源
- ISODATA的matlab代码
- 啁啾光纤光栅matlab仿真程序
- matlab实现灰度图像roberts算子边缘检测
- 计算两个点云之间的R和T
- 《智能优化算法及其MATLAB第二版》—
- S4VM算法(Matlab)
- 自抗扰控制技术matlab代码
- 官网Mnist的数据格式ubyte转为matlab适用
- classfication_toolboxmatab版
- matlab迭代学习控制算法程序
- 基于离散Hopfield网络的车牌识别系统代
- 图像分裂合并的matlab实现.
- matlab FFT变换
- 基于matlab的随机过程仿真
- MATLAB的梯度法,内点法,外点法,罚
- 支持向量机的matlab代码
- MATLAB小波分解
- 平行束投影重建算法MATLAB程序——D
- 光纤光栅耦合模算法的MATLAB代码
- MSK 调制与平方环解调MATALB程序,有详
- 基于MATLAB的飞行仿真
- MATLAB直方图全局阈值双峰自动分割
- 格雷码转二进制码
- matlab 粗糙集属性约简
- lpc在matlab中的实现
- 基于MATLAB的整车工况仿真程序
- matlab粒子群算法工具箱
- matlab_radon图像重建
- 永磁同步电机离线辨识
- 循环平稳信号处理完整的Matlab工具箱
评论
共有 条评论