Разработанная в MATLAB модель системы управления представлена на рисунке 6. Как показано на этом рисунке, разработанная модель содержит сразу две системы управления с идеальным и реальным объектом управления. На рисунке 7 представлены переходные процессы в системе управления, на рисунке 8 – фазовый портрет системы.
Рисунок 6.Разработанная система управления
Рисунок 7. Переходные процессы в системе управления
Рисунок 8. Фазовый портрет.
Приложение 1.
Листинг скрипта code1.m:
%Организация рабочего места------------------------------------------------
clc; %очищаем комманд виндоу
clear all; %удаляем переменные
close all; %закрываем все графики
%--------------------------------------------------------------------------
Ms=50;%Масса створки двери
Fmax=300;%Максимальная тяга привода
mu=0.2;%коэффициент трения
xg=4;%Конечное положение створки двери
%---------Расчет ПД-Регулятора-----------
K0=Fmax;%Коэффицент идеального источника
K1=1/Ms;%Коэффициент идеального накопителя
K2=mu*Ms*9.8;%Коэффициент потерь
K3=0;%Коэффициент реакции внешней среды
f=0;%неконтроллируемое воздействие(возмущающее)
%Параметры модального ПД-регулятора
T0=0.01;%время квантования
beta=T0*23;%тангенс угла наклона заданной траектории(Быстродействие)
Kp=1/K0/K1/T0/(beta+T0/2);%основное время квантования ПД регулятора
Kd=Kp*(T0+beta);%коэффициент при производной ошибки регулирования
%Симуляция-----------------------------------------------------------------
mdl = 'dver1';
simOut = sim(mdl); %запустить выполнение модели
t=simout.time; %задаем время
u=simout.signals.values(:,1); %снимаем сигнал управления
x=simout.signals.values(:,2); %снимаем координату положения нашего ОУ
px=simout.signals.values(:,3); %снимаем скорость нашего ОУ
ur=simout.signals.values(:,4);
xr=simout.signals.values(:,5);
pxr=simout.signals.values(:,6);
%--------------------------------------------------------------------------
%Построение графиков-------------------------------------------------------
figure(1); %отображаем показания, снятые при симуляции
c_i='b';
c_r='r';
set(gcf, 'color', 'w');
subplot(3,1,1);
polozen='North';
plot(t,x,c_i,'LineWidth',2);
hold on;
plot(t,xr,c_r,'LineWidth',2);
legend('идеальный объект','реальный объект','Location',polozen);
set(gca, 'FontName', 'TimesNewRoman');
set(gca, 'FontSize', 14);
title('x(t) - координата');
xlabel('время t, сек');
ylabel('x(t),м');
grid on;
subplot(3,1,2);
plot(t,px,c_i,'LineWidth',2);
hold on;
plot(t,pxr,c_r,'LineWidth',2);
set(gca, 'FontName', 'TimesNewRoman');
set(gca, 'FontSize', 14);
title('v(t) - производная координаты');
xlabel('время, сек');
ylabel('v(t),м/с');
grid on;
subplot(3,1,3);
plot(t,u,c_i,'LineWidth',2);
hold on;
plot(t,ur,c_r,'LineWidth',2);
set(gca, 'FontName', 'TimesNewRoman');
set(gca, 'FontSize', 14);
title('u(t) - сигнал управления');
xlabel('время, сек');
ylabel('u(t)');
grid on;
figure(2); %отображаем фазовый портрет
set(gcf,'Color','w')
set(gca, 'FontName', 'TimesNewRoman');
set(gca, 'FontSize', 14);
title('Фазовый портрет pe(e)');
grid on;
hold on;
%Расчеты к построению оптимальной фазовой траектории***********************
pemin=-max(px); %динамическое определение диапазонов
pemax=max(px);
pe=pemin:(pemax-pemin)/20:pemax;
e=-(Ms.*pe.*abs(pe)/(2*Fmax));
%**************************************************************************
plot(e,pe,'g:','LineWidth',3);
hold on;
%Расчет к построению заданной фазовой траектории***************************
e=-beta*pe;
%**************************************************************************
plot(e,pe,'r--','LineWidth',3);
hold on;
%Расчеты к построению идеальной фазовой траектории**************************
e=x(length(x))-x;
pe=-px;
%**************************************************************************
plot(e,pe,'b','LineWidth',3);
hold on;
%Расчеты к построению реальной фазовой траектории**************************
e=xr(length(xr))-xr;
pe=-pxr;
%**************************************************************************
plot(e,pe,'k','LineWidth',3);
legend('оптимальная ф.т.','заданная ф.т.','идеальная ф.т.','реальная ф.т.','Location',polozen);
xlabel('ошибка регулирования, м');
ylabel('производная ошибки регулирования, м/с');
%--------------------------------------------------------------------------