Документация Engee
Notebook

Моделирование систем автоматического управления с использованием моделей объектов

Модель системы автоматического управления (САУ) представляют в виде структурной схемы. Она содержит блоки, которые описывают динамику отдельных объектов. Например, исполнительный механизм, датчики и контроллеры. В данном материале рассмотрим функции для работы с моделью САУ. Определим способы задания моделей объектов, некоторые функции для структурных преобразований и построения временных характеристик.


Рассмотрим структурную схему САУ, которая содержит блоки фильтра $F(s)$, объекта управления $G(s)$, контроллера $C(s)$ и датчика $S(s)$.

controlsystemmodelingwithmodelobjectsexample_01.png

Для работы с системами управления в Engee используется библиотека ControlSystems.jl.

In [ ]:
#Подключение библиотеки
using ControlSystems

Каждый из компонентов системы можно представить в виде модели объекта. Например, объект управления $G(s)$ задать в виде коэффициента усиления с двойным полюсом в s=-1, воспользовавшись функцией zpk(). Контроллер, обозначенный $C(s)$, представить в виде ПИД регулятора, используя функцию pid(). Модели $F(s)$ и $S(s)$ можно указать в виде передаточных функций, используя tf().

In [ ]:
G = zpk([], [-1, -1], 1)
Out[0]:
TransferFunction{Continuous, ControlSystemsBase.SisoZpk{Int64, Int64}}
       1
1--------------
 (s + 1)(s + 1)

Continuous-time transfer function model
In [ ]:
C = pid(2, 1.3, 0.3; Tf = 0.5)
Out[0]:
TransferFunction{Continuous, ControlSystemsBase.SisoRational{Float64}}
0.6s^2 + 2.0s + 1.5384615384615383
----------------------------------
     0.125s^3 + 0.5s^2 + 1.0s

Continuous-time transfer function model
In [ ]:
S = tf(5, [1, 4])
Out[0]:
TransferFunction{Continuous, ControlSystemsBase.SisoRational{Int64}}
  5
-----
s + 4

Continuous-time transfer function model
In [ ]:
F = tf(1, [1, 1])
Out[0]:
TransferFunction{Continuous, ControlSystemsBase.SisoRational{Int64}}
  1
-----
s + 1

Continuous-time transfer function model

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

In [ ]:
op = C*G*S
Out[0]:
TransferFunction{Continuous, ControlSystemsBase.SisoZpk{Float64, ComplexF64}}
                       (1.0s + 2.128916830187693)(1.0s + 1.2044165031456413)
24.0-------------------------------------------------------------------------------------------
    (1.0s^2 + 3.999999999999999s + 7.999999999999997)(1.0s)(1.0s + 1.0)(1.0s + 1.0)(1.0s + 4.0)

Continuous-time transfer function model

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

In [ ]:
cl = feedback(C*G,S)
Out[0]:
TransferFunction{Continuous, ControlSystemsBase.SisoZpk{Float64, ComplexF64}}
                          (1.0s + 4.000000000000038)(1.0s + 2.1289168301875057)(1.0s + 1.2044165031463534)(1.0s^2 + 1.9999999999994214s + 0.9999999999994851)
4.8----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
   (1.0s + 1.0)(1.0s + 1.0)(1.0s + 3.433002308222685)(1.0s^2 + 5.173461151904168s + 9.378541159192764)(1.0s^2 + 0.21173364799880784s + 1.6173060165378987)(1.0s + 1.1818028918743357)

Continuous-time transfer function model

Получим передаточную функцию всей системы с учетом фильтра $F$. Для этого применим функцию series().

In [ ]:
W = series(cl, F)
Out[0]:
TransferFunction{Continuous, ControlSystemsBase.SisoZpk{Float64, ComplexF64}}
                                (1.0s + 4.000000000000039)(1.0s + 2.1289168301875256)(1.0s + 1.2044165031460183)(1.0s^2 + 1.9999999999997238s + 0.9999999999997489)
4.8----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
   (1.0s + 1.0)(1.0s + 1.0)(1.0s + 1.0)(1.0s + 3.433002308222685)(1.0s^2 + 5.173461151904168s + 9.378541159192764)(1.0s^2 + 0.21173364799880784s + 1.6173060165378987)(1.0s + 1.1818028918743357)

Continuous-time transfer function model

Все полученные функции можно проанализировать с помощью библиотеки ControlSystems.jl. Например, обратимся к временным характеристикам. Построим переходную характеристику системы, используя функцию step(), и импульсную характеристику, используя impulse().

In [ ]:
#Подключение библиотеки для построения графиков
using Plots

ht = step(W,30)
plot(ht, title="Переходная функция", label="h(t)")
Out[0]:
In [ ]:
#Построение импульсной характеристики
kt = impulse(W,30)
plot(kt, title="Импульсная функция", label="k(t)")
Out[0]:

Существуют и другие функции для анализа моделей систем автоматического управления в библиотеке ConrtrolSystems.jl. Их можно изучить в разделе Анализ временных и частотных характеристик.