• 大小: 1.13MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-11-06
  • 语言: Matlab
  • 标签: DMC  程序  理论算法  

资源简介

动态矩阵DMC算法 matlab程序实现

资源截图

代码片段和文件信息

function [ADMC A y_step m_nHP m_nHM ] =  CalcStepResponseADMC( T0_gp k0_gp Ts m_nHP m_nHM  bFigure nLoop Kp2)

% 被控对象 仿真,获取 阶跃响应 向量
% y_step = 被控对象 到 稳态 的完整的阶跃响应
% A : 动态矩阵
% ADMC : deltaU = ADMC * DMC_ye
% m_nHP : 预测时域长度
% m_nHM : 控制时域长度

%m_nHP = 100;
%m_nHM = 5;
%bFigure = true;

% 第一部分:被控对象的仿真
% 被控对象参数

% 传递来的缺省参数
% T0_gp=25; k0_gp = 10;
% h_gp = T0_gp / 50; % 被控对象 仿真 时间步长
% Tend =  10 * T0_gp / h_gp;

%---- 2013 试验汽温对象
%nLoop = 1; % 内回路
%nLoop = 2; % 外回路

n_gp=5; % 5阶对象 2阶在内回路,3阶在外回路
%T0_gp = [15 15 20     20 20];
%k0_gp = [8  1 1.125  1  1 ];
h_gp  = 0.5; % 被控对象 仿真 时间步长

a_gp = exp( - h_gp ./ T0_gp );
b_gp = k0_gp .* ( 1 - a_gp );
iTimeSimuEnd = 4500; % 仿真长度
iTimeSS = 0; % 达到稳态 static state

% y_pv(: [内回路导前区汽温, 外回路惰性区汽温] )
y_pv = zeros(iTimeSimuEnd 2); % 存储仿真结果以h为仿真步长
y_step = zeros(m_nHP1);     % 控制器用以 Ts 为采样周期
y_pv(11) = 0;                % 初始状态 y1(0)=0
y_pv(12) = 0;                % 初始状态 y2(0)=0

%%%%%%%%%%%%%%%%%%%%%%%%%%%导入采样数据值%%%%%%%%%%%%%%%%%%%%%%%%%%%

uk = 1;
if ( nLoop ==1 ) % 只内回路 的
yss = 0.9999 * k0_gp(1) *k0_gp(2) * uk; % 导前汽温稳态值
nypvCol = 1;
elseif( nLoop == 2 ) % 只外回路 的
yss = 0.9999 * k0_gp(1) *k0_gp(2) * k0_gp(3) *k0_gp(4) * k0_gp(5) * uk; % 出口惰性区汽温
nypvCol = 2;
elseif( nLoop == 3 ) % 内回路 P, 外回路 DMC
Kinss = ( k0_gp(1) * k0_gp(2) * Kp2 );
Kinss = Kinss / (1 + Kinss );
% yss = 0.9999 * Kinss / (1 + Kinss ) * uk ;  % 以 内回路的稳态值,作为 ss
yss = 0.9999 * Kinss *  k0_gp(3) *k0_gp(4) * k0_gp(5) * uk;
nypvCol = 2;
end

x = zeros(n_gp+11); % 仿真中间变量 x
 x(1) = uk;
for ( it = 1 : iTimeSimuEnd-1 )
if( nLoop ==1 | nLoop== 2)
x(1) = uk; % 内回路开环的情形
elseif( nLoop == 3 )
x(1) = Kp2 *( uk - x(3) ) ; % 内回路采用P控制,KP=Kp2
end

for( inh = 1 : 5 )
x(inh+1) = a_gp(inh) * x(inh+1) + b_gp(inh) * x(inh);
end
y_pv(it+11) = x(3); y_pv(it+12) = x(6);

% 达到稳态,则退出仿真
% if( y_pv(it+11) > yss2 )
%       iTimeSS = it+1;
%        break;
% end
if( (y_pv(it+1nypvCol) > yss)  & (iTimeSS == 0 ) )
        iTimeSS = it+1;
        break;
end
end
y_len = max ( it+1 iTimeSS) ; % 画图时,尽量取更多的数据

if( bFigure )
    t_time = 0: h_gp: (y_len-1)*h_gp;
    figure();
    plot(t_time y_pv(1:y_len1) ‘r-‘ t_time y_pv(1:y_len 2) ‘k-‘);
% legend(‘导前区汽温,内回路‘ ‘惰性区汽温,外回路‘ ‘Location‘ ‘SouthEast‘);
grid on;
    hold on;
end


% 第二部分:根据控制器的采样周期,生成 控制器用的 阶跃响应
% Ts = 2; % 采样周期 =2 
mulTime = Ts / h_gp;

it2 = 1; % 阶跃响应的 循环 a(it2)
it  = 1+mulTime; % 4 = Ts / h 
while( it <= iTimeSS )
    y_step(it2) = y_pv(itnypvCol);

    it = it + mulTime;
    it2 = it2 + 1;
end
% y_step ( it2 ) = y_pv(iTimeSS);     /// 是否 aN = ass

m_nHP = min(m_nHP it2-1);

% 第三部分:计算DMC所用的 模型矩阵 A 
A=zeros(m_nHP m_nHM); % DMC的模型矩阵 A 
for( it = 1 : m_nHM )
A([it : m_nHP] it) = y_step( [1 : m_nHP+1-it] );
end

if( bFigure)
    t2_time = Ts : Ts : (it2-1)*Ts;
plot(t2_time y_step(1 : length(t2_

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2014-12-11 23:53  DMC算法\
     目录           0  2014-05-06 14:49  DMC算法\DMC\
     目录           0  2014-05-05 19:35  DMC算法\DMC-matlab\
     文件        2599  2014-05-06 14:47  DMC算法\DMC-matlab\CalcStepResponseADMC.m
     文件        1463  2014-05-06 14:44  DMC算法\DMC-matlab\CalcStepResponseADMC.mat
     文件        2082  2011-08-26 10:39  DMC算法\DMC-matlab\CalcStepResponse_D.m
     文件         716  2014-05-06 14:44  DMC算法\DMC-matlab\CalcStepResponse_D.mat
     文件         886  2014-05-03 22:58  DMC算法\DMC-matlab\closeloop1.asv
     文件         888  2014-05-03 23:01  DMC算法\DMC-matlab\closeloop1.m
     文件        4171  2011-08-23 23:39  DMC算法\DMC-matlab\dmc1.m
     文件        2035  2011-08-22 18:54  DMC算法\DMC-matlab\dmc1_p0.m
     文件        7520  2014-05-06 14:46  DMC算法\DMC-matlab\dmcbase.m
     文件        8214  2011-08-26 00:14  DMC算法\DMC-matlab\dmcbase_LRJ41.m
     文件        8048  2014-05-06 14:41  DMC算法\DMC-matlab\dmcbase_LRJ42.asv
     文件        8048  2014-05-06 14:42  DMC算法\DMC-matlab\dmcbase_LRJ42.m
     文件        7493  2011-08-27 22:24  DMC算法\DMC-matlab\dmcbase_o2.m
     文件         600  2011-08-23 13:24  DMC算法\DMC-matlab\nostable.m
     文件         432  2011-09-10 16:59  DMC算法\DMC-matlab\ref.m
     文件       15059  2014-05-03 22:47  DMC算法\DMC.docx
     文件        4488  2014-05-05 20:48  DMC算法\DMC\CalcStepResponseADMC.m
     文件      210980  2014-05-05 20:52  DMC算法\DMC\CalcStepResponseADMC_out.mat
     文件        9630  2014-05-05 20:48  DMC算法\DMC\dmcbase.m
     目录           0  2014-05-06 14:49  DMC算法\DMC\有扰动\
     文件        2562  2011-08-26 16:02  DMC算法\DMC\有扰动\CalcStepResponseADMC.m
     文件        1463  2014-05-06 14:48  DMC算法\DMC\有扰动\CalcStepResponseADMC.mat
     文件        8219  2013-04-15 08:51  DMC算法\DMC\有扰动\dmcbase_LRJ41.m
     文件        8047  2011-08-26 00:17  DMC算法\DMC\有扰动\dmcbase_LRJ42.m
     文件       30208  2014-04-11 11:25  DMC算法\DMC控制算法.doc
     文件           0  2014-05-05 15:49  DMC算法\DMC概述.docx
     文件      642048  2013-04-12 15:07  DMC算法\DMC理论及MATLAB实现.ppt
     文件       45056  2014-04-30 16:58  DMC算法\DMC程序实现.doc
............此处省略5个文件信息

评论

共有 条评论