Системы автоматизированного управления
В этом примере показано, как получить данные о частотной характеристике для SISO модели динамической системы пропорционально-интегрального регулятора.
ПИ-регулятор может сделать так, чтобы ошибка между желаемым значением и фактическим значением стала нулевой. Это означает, что он может добиться точности в регулировании.
Его настройка довольно проста. Нужно настроить всего два параметра: коэффициент усиления (Кр) и постоянную времени интегрирования (Ti). С помощью этих параметров можно достичь минимальной ошибки регулирования.
Справочные материалы по некоторым библиотекам:
# Установка новой библиотеки может занять около минуты
using ControlSystems
using Plots;
gr()
#plotlyjs() # для интерактивных графиков
print("Библиотеки готовы!")
Библиотеки готовы!
Соединить SISO системы, описанные в пространстве состояний
P1 = ssrand(1,1,1);
P2 = ssrand(1,1,1);
append(P1, P2)
StateSpace{Continuous, Float64}
A =
-0.2524536214471187 0.0
0.0 -0.3574162051285983
B =
0.30175105771317484 0.0
0.0 1.1500354139870772
C =
0.6210941061472228 0.0
0.0 0.9581047028078271
D =
0.3742222874580735 0.0
0.0 0.1848146926902994
Continuous-time state-space model
Изучение отклика передаточной функции
Постройте ЛАФЧХ разомкнутой и замкнутой системы
при помощи функции gangoffourplot()
, чтобы сделать выводы о чувствительности системы к колебаниям на разных частотах.
P = ControlSystems.tf(1,[1,1])^4
gangoffourplot( P, tf(1), titlefont = font(9), guidefont = font(8))
Графики показывают, что система слишком чувствительна при частотах около рад/с.
Настройка PI-регулятора
Настройте PI-регулятор для системы
Используйте функцию loopshapingPI
, указав, что в районе частоты рад/с у системы должен быть запас по фазе в 60 градусов.
Выведите 4 графика – ЛАФЧХ для разомкнутой и для замкнутой системы с помощью функции gangoffourplot
и годограф Найквиста с помощью функции nyquistplot
.
using ControlSystems, Plots
P = tf(1,[1,1])^4
ωp = 0.8
C,kp,ki = loopshapingPI(P, ωp, phasemargin=60, form=:parallel)
p1 = gangoffourplot(P, [tf(1), C]);
p2 = nyquistplot([P, P*C], ylims=(-1,1), xlims=(-1.5,1.5));
plot(p1,p2, layout=(2,1), size=(800,800))