Введение
Важнейшей задачей автоматического управления любыми технологическими процессами является разработка математического описания, расчет и анализ динамики автоматических систем регулирования (АСР).
Практика промышленного использования микропроцессорных регулирующих приборов (МРП) показала, что “идеальные алгоритмы” физически не реализуемы. Синтезированная на их основе АСР не отражает поведение реальной системы [1].
Отклонения алгоритмов от идеализированных при определенных условиях, например, для релейно-импульсных регуляторов, когда скорость исполнительного механизма соответствует реальной динамике объекта, поведение реальной системы с достаточной степенью точности соответствует результатам математической модели.
Релейно-импульсные регуляторы применяются в микропроцессорных регулирующих приборах, где наблюдается следующая тенденция. Например, в публикации [2] описаны возможности применения протокола modbus для создания собственной Scada системы на базе Python.
В публикации [3] описано использование Python для работы с Arduino. Продолжаю эту тенденцию и я в надежде, что Python окончательно овладеет этой новой областью применения.
1.Типовые линейные алгоритмы регулирования
Привожу идеальные алгоритмы регулирования, которые определяются уравнениями:
П- алгоритм:
ПИ- алгоритм:
ПИД- алгоритм:
где – регулирующее воздействие; – сигнал рассогласования; Kp,Ki,Kd — коэффициент передачи и Ti,Td постоянные времени соответствующих звеньев (параметры настройки регуляторов).
Все переходные характеристики регуляторов с учётом параметров настройки можно представить одной общей формулой, избегая неопределённости от деления на 0:
from numpy import e,arange
def hp(t,Kp,Ki,Kd,Td):
if t<0:
z=0
elif Td==0:
z=Kp+Ki*t
else:
z=Kp+Ki*t+Kp*Kd*e**(-t/Td)
return z
Следует заметить, что ПИД-регулятор в идеальном виде физически не реализуем, поэтому представлен в виде: Kp+Ki*t+Kp*Kd*e**(-t/Td) для имитации идеальности.
#!/usr/bin/env python
#coding=utf8
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.family'] = 'fantasy'
mpl.rcParams['font.fantasy'] = 'Comic Sans MS, Arial'
from numpy import e,arange
def hp(t,Kp,Ki,Kd,Td):
if t<0:
z=0
elif Td==0:
z=Kp+Ki*t
else:
z=Kp+Ki*t+Kp*Kd*e**(-t/Td)
return z
x=arange(-2,10,0.01)
y=[hp(t,2,0,0,0) for t in x]
y1=[hp(t,2,0.25,0,0) for t in x]
y2=[hp(t,2,0.25,2,2) for t in x]
plt.title('Переходные характеристики регуляторов')
plt.plot(x, y, linewidth=2, label='П регулятор')
plt.plot(x, y1, linewidth=2, label='ПИ регулятор')
plt.plot(x, y2, linewidth=2, label='ПИД регулятор ')
plt.legend(loc='best')
plt.grid(True)
plt.show()
Характер переходных процессов показан на графике:
На основе типовых идеальных алгоритмов регулирования в теории управления развиты методы оптимального параметрического синтеза и исследованы общие свойства АСР.
В промышленных автоматических регуляторах типовые алгоритмы реализуется приближенно. Отклонение алгоритма регулирования от идеального не оказывает существенного влияния на поведение системы, если регулятор работает в области “нормальных” режимов.
Для этого необходимо знать и учитывать существенные особенности реального алгоритма, обусловленные способом его технической реализации. В практике автоматизации получили широкое распространение электрические (электронные) регуляторы косвенного действия в форме виртуальных модулей микропроцессорных контроллеров.
Рассмотрим классификацию автоматических электрических регуляторов по способу реализации алгоритма [1]:
В соответствии с представленной классификацией в этой и следующих публикациях будет рассматриваться реализация математических моделей регуляторов средствами Python.
2. Регуляторы релейно-импульсного действия
В автоматических системах управления технологическими процессами используются исполнительные механизмы (ЭИМ) с электрическими асинхронными реверсивными двигателями с постоянной частотой вращения выходного вала. Это и определило способ реализации алгоритма регулирования.
Принцип реализации ПИ-алгоритма при наличии ЭИМ постоянной скорости иллюстрирует схема, представленная на рисунке:
Регулирующий блок (РБ) формирует управляющие ЭИМ прямоугольные импульсы постоянной амплитуды, длительность и скважность которых зависят от значений параметров настройки регулятора и значения входного сигнала.
Прямой канал РБ содержит нелинейный элемент – трехпозиционное реле с зоной нечувствительности ?н зоной возврата ?в, приведённое на рисунке:
#!/usr/bin/env python
#coding=utf8
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.family'] = 'fantasy'
mpl.rcParams['font.fantasy'] = 'Comic Sans MS, Arial'
from numpy import arange,sin,cos,sign
def z(t,a,b):
if -a<4*sin(t)<b and 4*cos(t)>0:
z=0
elif -b<4*sin(t)<a and 4*cos(t)<0:
z=0
else:
z=sign(sin(t))
return z
x=arange(0,6,0.005)
y=[4*sin(t) for t in x]
y1=[z(t,2,3) for t in x]
y2=[2 for t in x]
y3=[3 for t in x]
plt.figure()
plt.title('Дискретная модель РЭ: вход -выход')
plt.plot(x, y, linewidth=2, label='Входной сигнал')
plt.plot(x, y1, linewidth=2, label='Выходной сигнал')
plt.plot(x, y2, linewidth=1, label='2 ')
plt.plot(x, y3,linewidth=1, label='3')
plt.legend(loc='best')
plt.grid(True)
plt.figure()
plt.title('Дискретная модель РЭ. Характеристика РЭ')
plt.plot(y, y1, linewidth=2, label=' Характеристика РЭ')
plt.legend(loc='best')
plt.grid(True)
plt.show()
Анализируем результат работы модели по двум следующим графикам:
Дискретная модель РЭ основана на разностных уравнениях. Формирующая ПИ-алгоритм обратная связь реализована с использованием апериодического звена с передаточной функцией:
Регулирующий блок (РБ) представляет собой широтно-импульсный модулятор (ШИМ), который может быть построен с использованием как аналоговых, так и цифровых средств.
Регулирующий блок совместно с исполнительным механизмом постоянной скорости обеспечивают при определенных условиях достаточно точную реализацию ПИ-алгоритма:
(1)
И соответственно переходной характеристики:
(2)
Для реализации ПИД-алгоритма ко входу ПИ-регулятора релейно-импульсного действия подключается дифференциатор W(s) по схеме:
Введенная передаточная W(s) образуется одним или двумя последовательно включенными дифференцирующими звеньями. Регулирующий блок совместно с исполнительным механизмом постоянной скорости обеспечивает при определенных условиях достаточно точную реализацию ПИД-алгоритма:
(3)
И соответственно переходной характеристики:
(4)
#!/usr/bin/env python
#coding=utf8
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.family'] = 'fantasy'
mpl.rcParams['font.fantasy'] = 'Comic Sans MS, Arial'
from numpy import e,arange
def hp(t,Kp,Ti,Kd,Td):
z=Kp+Kp*t/Ti+Kp*Kd*e**(-t/Td)
return z
x=arange(0,10,0.02)
y1=[hp(t,2,2,0,0.5) for t in x]
y2=[hp(t,2,2,4,0.5) for t in x]
plt.title('Реализация ПИД алгоритма')
plt.plot(x, y1, linewidth=1, label='ПИ регулятор')
plt.plot(x, y2, linewidth=2, label='ПИД регулятор ')
plt.legend(loc='best')
plt.grid(True)
plt.show()
Анализируем график переходных процессов для выбранных настроек ПИ- и ПИД-алгоритмов.
Линейные модели релейно-импульсных регуляторов не исключают возможности мгновенного изменения регулирующего воздействия (выходной величины регулятора).
У реальных релейно-импульсных регуляторов перемещение выходного вала или штока ЭИМ происходит за некоторое конечное время, зависящее как от установленных значений параметров настройки, так и скорости исполнительного механизма so.
Так, при ступенчатом изменении входного сигнала, длительность импульса на выходе регулирующего блока РБ для П-алгоритма определяется соотношением:
Длительность первого импульса на выходе РБ для ПИ-алгоритма определяется уравнением:
Последующие импульсы постоянной длительности tи повторяются через следующие интервалы времени:
где — коэффициент передачи регулятора; — постоянная интегрирования, с; — скорость исполнительного механизма, .
3. Моделирование динамики релейно-импульсных П-ПИ- и ПИД-регуляторов в неравновесных режимах
Граф релейно-импульсного ПИД-регулятора приведен на следующем рисунке:
#!/usr/bin/env python
#coding=utf8
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.family'] = 'fantasy'
mpl.rcParams['font.fantasy'] = 'Comic Sans MS, Arial'
from numpy import arange,sign
def fd(Kd,Td,dt,x,x1,y):# РД -звено (дифференциатор)
return (1-dt/Td)*y+Kd*(x-x1)
def fa(Ta,Ka,dt,x,y):# апериодическое звено (обратная связь)
return (1-dt/Ta)*y+Ka*x*dt/Ta
def fi(so,dt,x,y):# интегратор (исполнительный механизм)
return y+so*x*dt
""" Подготовка исходных данных"""
te=15;N=300;dt=0.05
x0=[0 for w in arange(0,N+1)];x1=[0 for w in arange(0,N+1)]
x2=[0 for w in arange(0,N+1)];x3=[0 for w in arange(0,N+1)]
z=[0 for w in arange(0,N+1)];z1=[0 for w in arange(0,N+1)]
z2=[0 for w in arange(0,N+1)];m=[0 for w in arange(0,N+1)]
x=[0 for w in arange(0,N+1)]
""" Численное решение"""
def P(so,Ka,Ta,a,b,Kd,Td,Dl,e):
for j in arange(0,N,1):
x0[j+1]=e-Dl*m[j]
x[j+1]=x0[j+1]+x2[j]-x3[j]
if -a<x[j+1]<b and x[j+1]>x[j]:
z1[j+1]=0
else:
z1[j+1]=sign(x[j-1])
if -b<x[j+1]<a and x[j+1]<x[j]:
z2[j+1]=0
else:
z2[j+1]=sign(x[j-1])
if x[j+1]>x[j]:
z[j+1]=z1[j+1]
else:
z[j+1]=z2[j+1]
x1[j+1]=fd(Kd,Td,dt,x0[j+1],x0[j],x1[j])
x2[j+1]=fd(1,Ta,dt,x1[j+1],x1[j],x2[j])
x3[j+1]=fa(Ta,Ka,dt,z[j+1],x3[j])
m[j+1]=fi(so,dt,z[j],m[j])
return m
NN=[j*dt for j in arange(0,N+1,1)]
#P(so,Ka,Ta,a,b,Kd,Td,Dl,e)
#PID=P(1,10,5,0.4,0.5,10,1,0,1)
#PP=P(1,0.1,0.1,0.2,0.6,0,0.2,4,1)
#PI=P(1,10,5,0.4,0.5,0,0.2,0,1)
#PI1=P(0.5,10,5,0.4,0.5,0,0.2,0,1)
plt.figure()
plt.title('Моделирование динамики релейно-импульсных регуляторов')
plt.plot(NN, P(1,10,5,0.4,0.5,0,0.2,0,1), linewidth=2, label='РИ - ПИ')
plt.plot(NN,P(1,10,5,0.4,0.5,10,1,0,1), linewidth=2, label='РИ - ПИД')
plt.legend(loc='best')
plt.grid(True)
plt.figure()
plt.title('Моделирование динамики релейно-импульсных регуляторов')
plt.plot(NN, P(1,10,5,0.4,0.5,0,0.2,0,1), linewidth=2, label='РИ -ПИ. Скорость ЭИМ -1 с-1')
plt.plot(NN,P(0.5,10,5,0.4,0.5,0,0.2,0,1), linewidth=2, label='РИ -ПИ.Скорость ЭИМ -0.5 с-1')
plt.plot(NN,P(1,0.1,0.1,0.2,0.6,0,0.2,4,1), linewidth=2, label='РИ -П.Скорость ЭИМ -1 с-1')
plt.legend(loc='best')
plt.grid(True)
plt.show()
Анализируем полученные результаты.
Характеристика регулятора зависит как от скорости исполнительного механизма so, так и параметров релейного элемента а, b. Значение so предопределяется типом ЭИМ и характеризуется параметром Тим — минимальное время полного хода. Для стандартных ЭИМ значения Тим равно 10,25,63, 100 и 160 с.
Значение b (половина зоны нечувствительности) устанавливается по величине допустимого отклонения, на которое регулятор не должен реагировать.
Параметры настройки регулятора Кр, Ти, Кд, Тд находятся в нелинейной зависимости от скорости исполнительного механизма so, параметров обратной связи Ка, Та и релейного элемента а, b.
Выводы
Средствами языка программирования Python, с применением метода конечных разностей, получены математические модели электронных релейно-импульсных регуляторов косвенного действия.
Полученные модели могут быть использованы при проектировании микропроцессорных регулирующих приборов.
Ссылки
Комментарии (5)
GreyPhantom
27.12.2017 20:01Еще бы матмодели объектов управления с несколькими переменными, которые еще и влияют друг на друга (например для котла: количество подаваемого топлива, давление поддува, разрежение в топке, температура и расход теплоносителя). Очень бы пригодилось при разработке сложных систем автоматизации.
gorbln
28.12.2017 09:34Матмодель — дело хорошее. Но когда дело доходит до реальных применений — всем нужна автонастройка регулятора. То квалификация специалистов АСУ на местах не позволяет заниматься настройкой (о чём мне несколько раз заявляли — кто будет настраивать? наши могут только прикрутить), то просто нет времени и желания настраивать.
В связи с этим — вопрос. Где почитать про методику автонастройки ПИД-регуляторов с исполнительным механизмом типа 3-ходовой кран? (накачка, закрыт, сброс).
Все классические методы автонастройки — Зиглера-Никольса, Коэна-Куна, лямбда тюнинг — предполагают установку процесса на некотором стабильном уровне при увеличении управляющего воздействия. Но в случае 3-ходового крана, при любом, даже очень малом, увеличении управляющего воздействия происходит смещение состояния объекта регулирования до положения насыщения (например, для исполнительного механизма — перемещение до упора). Единственным вариантом видится использовать для автонастройки в качестве управляющего воздействия не собственно управляющее воздействие, а время его приложения. Но это приводит нас к тому, что изначально пропорциональный регулятор вырождается в релейно-импульсный со средней точкой. И даже в этом случае — внятной методики автонастройки на такой регулятор найти не удалось.San_tit
28.12.2017 09:46Посмотрите в сторону адаптивных регуляторов. Есть на базе в том числе ПИД регуляторов
alexxxst
У вас JPEG.