exponenta event banner

Применение ограничений для контроллеров PID

В этом примере показано, как применить известные ограничения для приложения контроллера PID с помощью блока «Применение ограничений».

Обзор

Для этого примера динамика растений описывается следующими уравнениями [1].

x˙1=-x1+ (x12 + 1) u1x˙2=-x2+ (x22 + 1) u2

Целью установки является отслеживание требуемых траекторий, определенных как:

θ˙=0.1πx˙1d=-rcos (start) x˙2d=rsin (start)

Пример изучения и применения неизвестной функции ограничения для одного и того же приложения управления PID см. в разделе Изучение и применение ограничений для контроллеров PID.

Сконфигурируйте параметры модели и исходные условия.

r = 1.5;            % radius for desired trajectory
Ts = 0.1;           % sample time
Tf = 22;            % duration
x0_1 = -r;          % initial condition for x1
x0_2 = 0;           % initial condition for x2

Проектирование контроллеров МТС

Перед наложением ограничений спроектируйте контроллеры PID для отслеживания опорных траекторий. trackingWithPIDs модель содержит два контроллера PID с усилениями, настроенными с помощью приложения PID Tuner. Дополнительные сведения о настройке контроллеров PID в моделях Simulink см. в разделе Введение в настройку PID на основе модели в Simulink.

mdl = 'trackingWithPIDs';
open_system(mdl)

Смоделировать контроллеры PID и построить график производительности отслеживания.

% Simulate the model.
out = sim(mdl);

% Extract trajectories.
logData = out.logsout;
x1_traj = logData{3}.Values.Data;
x2_traj = logData{4}.Values.Data;
x1_des = logData{1}.Values.Data;
x2_des = logData{2}.Values.Data;

% Plot trajectories.
figure('Name','Tracking')
xlim([-2,2])
ylim([-2,2])
plot(x1_des,x2_des,'r')
xlabel('x1')
ylabel('x2')
hold on
plot(x1_traj,x2_traj,'b:','LineWidth',2)
hold on
plot(x1_traj(1),x2_traj(1),'g*')
hold on
plot(x1_traj(end),x2_traj(end),'go')
legend('desired','traj','start','end')

Функция ограничения

В этом примере известные ограничения применяются к приложению с помощью блока «Применение ограничений», который настраивает управляющие действия в соответствии с функцией ограничения.

В этом примере выполнимая область для установки задается {x:x1≤1,xx≤1}. Поэтому условие следующего состояния установки xk + 1 = [x1 (k + 1) x2 (k + 1)] должно удовлетворять xk+1≤[11].

Аппроксимировать динамику растений можно по следующему уравнению.

xk+1≈ [(1-Ts) 00 (1-Ts)] xk + [Ts (1 + x12 (k)) 00Ts (1 + x22 (k))] uk

При применении ограничений к этому уравнению создается следующая функция ограничений.

[(1-Ts) 00 (1-Ts)] xk + [Ts (1 + x12 (k)) 00Ts (1 + x22 (k))] uk≤[11].

Блок «Применение ограничений» принимает ограничения fx+gxu≤c формы. Для этого применения коэффициенты этой функции ограничения следующие.

fx = [(1-Ts) 00 (1-Ts)] xk, gx = [Ts (1 + x12 (k)) 00Ts (1 + x22 (k))], c = [11]

Моделирование контроллера PID с применением ограничений

trackingWithConstraintPID модель содержит контроллеры PID, динамику завода и реализацию ограничений.

mdl = 'trackingWithKnownConstraintPID';
open_system(mdl)

Чтобы просмотреть реализацию ограничения, откройте подсистему ограничения. Здесь известная функция ограничения реализуется с использованием блока MATLAB Function, и блок ограничения принудительно применяет функцию ограничения.

Запустите модель и постройте график результатов моделирования. На сюжете показано, что состояния растения меньше единицы.

% Simulate the model.
out = sim(mdl);

% Extract trajectories.
logData = out.logsout;
x1_traj = zeros(size(out.tout));
x2_traj = zeros(size(out.tout));
for ct = 1:size(out.tout,1)
    x1_traj(ct) = logData{4}.Values.Data(:,:,ct);
    x2_traj(ct) = logData{5}.Values.Data(:,:,ct);
end

x1_des = logData{2}.Values.Data;
x2_des = logData{3}.Values.Data;

% Plot trajectories.
figure('Name','Tracking with Constraint');
plot(x1_des,x2_des,'r')
xlabel('x1')
ylabel('x2')
hold on
plot(x1_traj,x2_traj,'b:','LineWidth',2)
hold on
plot(x1_traj(1),x2_traj(1),'g*')
hold on
plot(x1_traj(end),x2_traj(end),'go')
legend('desired','traj','start','end','Location','best')

Блок «Применение ограничений» успешно ограничивает действия управления таким образом, что состояния установки остаются меньше единицы.

bdclose('trackingWithPIDs')
bdclose('trackingWithKnownConstraintPID')

Ссылки

[1] Роби, Александр, Хаймин Ху, Ларс Линдеманн, Ханьвэнь Чжан, Димос В. Димарогонас, Стивен Ту и Николай Матни. «Изучение функций контрольных барьеров из демонстраций экспертов». Препринт, представлен 7 апреля 2020 года. https://arxiv.org/abs/2004.03315

См. также

Блоки

Приложения

Связанные темы