- PVSM.RU - https://www.pvsm.ru -

Использование библиотеки Python Control Systems Library для проектирования систем автоматического управления

Использование библиотеки Python Control Systems Library для проектирования систем автоматического управления - 1

Здравствуйте!

С появлением библиотеки Python Control Systems Library [1], решение основных задач проектирования систем автоматического управления (САУ) средствами Python значительно упростилось и теперь практически идентично решению таких задач в математическом пакете Matlab.

Однако, проектирование систем управления с применение указанной библиотеки имеют ряд существенных особенностей, которых нет в документации [1], поэтому особенностям использования Python Control Systems Librar и посвящена данная публикация.

Начнём с инсталляции библиотеки. В документации говориться о загрузке двух модулей slycot и control, на самом деле для нормальной работы нужна ещё библиотека numpy+mkl, остальные устанавливаются автоматически при загрузке control.

Указанные модули можно скачать с сайта [2]. В документации так же сказано, что для интерфейса по умолчанию нужно просто импортировать контрольный пакет следующим образом: import control.

Однако, при таком импортировании библиотека не работает ни одном из примеров. Для импортирования библиотеки необходимо применить from control import* как и для импортировании окружения matlab: from control. matlab import *[1].

Рассматривать специализированную библиотеку Python Control Systems Library можно только применительно к задачам проектирования систем автоматического управления, поэтому мы так и поступим.

1. Модели соединений систем (функции tf и feedback)

Ввод передаточных функций:

# -*- coding: utf8 -*-
from control.matlab import *
f = tf(1, [1, 1]);
g = tf(1, [2 ,1]);

Параллельное соединение блоков или систем:

Использование библиотеки Python Control Systems Library для проектирования систем автоматического управления - 2

# -*- coding: utf8 -*-
from control.matlab import *
f = tf(1, [1, 1]);
g = tf(1, [2 ,1]);
w = f + g
print (w)

(3 s + 2)/(s^2 + 3 s + 1)

Последовательное соединение блоков или систем:

Использование библиотеки Python Control Systems Library для проектирования систем автоматического управления - 3

# -*- coding: utf8 -*-
from control.matlab import *
f = tf(1, [1, 1]);
g = tf(1, [2 ,1]);
w = f* g
print (w)

1/(2 s^2 + 3 s + 1)

Контур с обратной связью:

Использование библиотеки Python Control Systems Library для проектирования систем автоматического управления - 4

a) Контур с отрицательной обратной связью:

# -*- coding: utf8 -*-
from control.matlab import *
f = tf(1, [1, 1]);
g = tf(1, [2 ,1]);
w = feedback(f, g)
print(w)

(2 s + 1)/(2 s^2 + 3 s + 2)

б) Контур с положительной обратной связью:

# -*- coding: utf8 -*-
from control.matlab import *
f = tf(1, [1, 1]);
g = tf(1, [2 ,1]);
w = f/(1-f*g)
print(w)

(2 s^2 + 3 s + 1)/(2 s^3 + 5 s^2 + 3 s)

Вывод:

При помощи функций tf и feedback можно моделировать соединений блоков и систем.

2. Динамические и частотные характеристики систем автоматического управления (САУ)

Зададим передаточную функцию САУ:

Использование библиотеки Python Control Systems Library для проектирования систем автоматического управления - 5

Найдем ее динамические и частотные характеристики:

# -*- coding: utf8 -*-
from control.matlab import *
""" Создадим LTI-объект с именем w, для этого выполним:"""
num= [1., 2.]
den= [3., 4., 5.,3]
w= tf(num, den)
""" Найдем полюса и нули передаточной функции с использованием команд pole, zero"""
print('Передаточная функция САУ : n %s'%w)
print("Полюса: n %s"%pole(w))
print("Нули:n %s -n "%zero(w))

Передаточная функция САУ:

( s + 2)/(3 s^3 + 4 s^2 + 5 s + 3)

Полюса:

-0.26392546+1.08251346j
-0.26392546-1.08251346j
-0. 80548241+0.j
Нули: -2

Построим переходную функцию командой step(w):

# -*- coding: utf8 -*-
from control.matlab import *
import matplotlib.pyplot as plt
""" Создадим LTI-объект с именем w, для этого выполним:"""
num= [1., 2.]
den= [3., 4., 5.,3]
w= tf(num, den)
y,x=step(w)
plt.plot(x,y,"b")
plt.title('Step Responsse ') 
plt.ylabel('Amplitude')
plt.xlabel('Time(sec)')
plt.grid(True)
plt.show()

Использование библиотеки Python Control Systems Library для проектирования систем автоматического управления - 6

Построим импульсную переходную функцию командой impulse(w):

# -*- coding: utf8 -*-
from control.matlab import *
import matplotlib.pyplot as plt
""" Создадим LTI-объект с именем w, для этого выполним:"""
num= [1., 2.]
den= [3., 4., 5.,3]
w= tf(num, den)
y,x=impulse(w)
plt.plot(x,y,"r")
plt.title('impulse Responsse ') 
plt.ylabel('Amplitude')
plt.xlabel('Time(sec)')
plt.grid(True)
plt.show()

Использование библиотеки Python Control Systems Library для проектирования систем автоматического управления - 7

Диаграмму Боде получим используя команду bode(w):

# -*- coding: utf8 -*-
from control.matlab import *
import matplotlib.pyplot as plt
""" Создадим LTI-объект с именем w, для этого выполним:"""
num= [1., 2.]
den= [3., 4., 5.,3]
w= tf(num, den)
mag, phase, omega = bode(w, dB=True)
plt.plot()
plt.show()

Использование библиотеки Python Control Systems Library для проектирования систем автоматического управления - 8

Вывод:

Построение = bode диаграммы имеет некоторые особенности, приведенные в листинге.

Мы рассмотрели простые задачи, теперь попробуем совсем немного поднапрячь библиотеку Python Control Systems Library.

3. Найдем дискретную передаточную функцию исполнительного механизма, уравнения состояния которого имеют вид:

Использование библиотеки Python Control Systems Library для проектирования систем автоматического управления - 9 (1)

Для вычисления воспользуемся матричной экспонентой:

Использование библиотеки Python Control Systems Library для проектирования систем автоматического управления - 10 (2)

где h – интервал квантования.

Найдем ее преобразование Лапласа от (2), которое будет равно.

Использование библиотеки Python Control Systems Library для проектирования систем автоматического управления - 11 (3)

где I – единичная матрица.

После подстановки в (3) матрицы А получим.

Использование библиотеки Python Control Systems Library для проектирования систем автоматического управления - 12 (4)

Вычислим обратную матрицу.

Использование библиотеки Python Control Systems Library для проектирования систем автоматического управления - 13 (5)

Откуда, осуществляя z – преобразование последней матрицы, найдем матрицу перехода дискретной системы Ad.

Использование библиотеки Python Control Systems Library для проектирования систем автоматического управления - 14 (6)

где h – интервал дискретизации по времени.

Матрица Bd в соответствии с (2) будет равна.

Использование библиотеки Python Control Systems Library для проектирования систем автоматического управления - 15

Тогда дискретный аналог модели исполнительного механизма будет выглядеть:

Использование библиотеки Python Control Systems Library для проектирования систем автоматического управления - 16 (7)

Этот пример на Python Control Systems Library для h=0,1 запишется так:

# -*- coding: utf8 -*-
from control.matlab import *
import numpy as np
A=np.matrix([[-1,0],[1,0]])
B=np.matrix([[1],[0]])
C=np.matrix([[0,1]])
D=0
sn=ss(A,B,C,D)
print("Непрерывная модель: n s%"sn)
h=1
sd=c2d(sn,h)
print("Дискретная модель : n s%"%sd)

Непрерывная модель:

 A = [[-1  0]
 [ 1  0]]
B = [[1]
 [0]]
C = [[0 1]]
D = [[0]]

Дискретная модель:

A = [[0.36787944 0. ]
 [0.63212056 1. ]]
B = [[0.63212056]
 [0.36787944]]
C = [[0 1]]
D = [[0]]
dt = 1

Вывод:

С использованием библиотеки на Python Control Systems Library получена математическая модель исполнительного механизма, основанная на системе дифференциальных уравнений (1). В модели использованы матричные операторы.

Уверен, что ценителям Python понравиться новая библиотека, существенно расширяющая возможности любимого языка программирования. Однако читатели знают, что любая новая библиотека требует большого труда для её адаптации к реальным задачам и только после этого она становиться востребованной и популярной.

Всем спасибо за внимание!

Ссылки:

1. Python Control Systems.

2. Unofficial Windows Binaries for Python Extension Packages. [1]

Автор: Юрий Тараненко

Источник [2]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/python/276611

Ссылки в тексте:

[1] Unofficial Windows Binaries for Python Extension Packages. : https://www.lfd.uci.edu/~gohlke/pythonlibs/#pywin32

[2] Источник: https://habrahabr.ru/post/352492/?utm_source=habrahabr&utm_medium=rss&utm_campaign=352492