双容水箱上水箱的传递函数为 1/(80*s+1)*exp(-2*s),下水箱的传递函数为1/(60*s+1)*exp(-8*s),试以下水箱为主要对象设计DMC-PID串级控制系统,给出matlab代码
时间: 2024-01-17 11:23:05 浏览: 87
好的,以下是基于您提供的信息设计的DMC-PID串级控制系统的Matlab代码:
```matlab
% 计算双容水箱上水箱的传递函数和下水箱的传递函数
num1 = 1;
den1 = [80 1];
sys1 = tf(num1, den1);
sys1 = exp(-2*s) * sys1;
num2 = 1;
den2 = [60 1];
sys2 = tf(num2, den2);
sys2 = exp(-8*s) * sys2;
% 设计DMC控制器
N = 10;
M = 2;
lambda = 0.8;
D = 100;
sysd1 = c2d(sys1, T);
sysd2 = c2d(sys2, T);
G = [sysd1, 0; -sysd2, sysd1];
G = G(1:N, 1:M);
Mp = zeros(N-1, D);
for i = 1:N-1
j = 1;
while (i+j <= N) && (j <= D)
Mp(i, j) = G(i+j, 2);
j = j + 1;
end
end
M = zeros(N-1, 1);
for i = 1:N-1
M(i) = G(i+1, 1);
end
K = (Mp'*Mp + lambda*eye(D))^-1 * Mp';
% 设计PID控制器
Kp = 1.2;
Ti = 2.5;
Td = 0.5;
numc = [Kp*Td Kp Ti];
denc = [1 0];
sysc = tf(numc, denc);
sysc = c2d(sysc, T, 'tustin');
% 串级控制器
sysp = series(sysc, sys1);
sysp = c2d(sysp, T, 'tustin');
% 仿真系统响应
sys = feedback(series(sysp, sys2), [1, -1], +1);
t = 0:0.1:100;
r = ones(size(t));
[y, t] = lsim(sys, r, t);
% 显示结果
plot(t, r, 'b--', t, y, 'r-');
xlabel('Time (s)');
ylabel('Water level');
legend('Setpoint', 'Output');
```
请注意,这只是一个基本的代码示例,您可能需要根据您的具体需求进行修改和调整。
阅读全文