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

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

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

С появлением библиотеки 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]);

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

# -*- 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)

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

# -*- 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)

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

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. Динамические и частотные характеристики систем автоматического управления (САУ)

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

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

# -*- 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()

Построим импульсную переходную функцию командой 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()

Диаграмму Боде получим используя команду 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()

Вывод:

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

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

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

(1)

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

(2)

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

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

(3)

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

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

(4)

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

(5)

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

(6)

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

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

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

(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.


x

Ещё Hi-Tech Интересное!

Тесное знакомство с электромеханическим сортировщиком перфокарт (экскурс в начало XX века)

VolKarev сегодня в 17:56 Старое железо, История IT Однако электромеханика сортировщика намного более элегантна и проста: весь его интеллект держится на одном датчике и на одном электромагните. Поняв, как работать с электромеханическим сортировщиком перфокарт (с точки зрения обычного пользователя), и ...

[Из песочницы] Занимательный пролог

Это когда вам в институте втирали, что программы можно не кодить, а формулировать. Привет, жители, пришло время поговорить про декларативное программирование. Отдадим должное функциональному подходу, он тут братский, и дело свое делает все глубже проникая в современность, вот вам и ...