Математические модели релейно-импульсных регуляторов

y71frexa7n3dfwgnjnm6sfn2q4o.png

Введение

Важнейшей задачей автоматического управления любыми технологическими процессами является разработка математического описания, расчет и анализ динамики автоматических систем регулирования (АСР).

Практика промышленного использования микропроцессорных регулирующих приборов (МРП) показала, что «идеальные алгоритмы» физически не реализуемы. Синтезированная на их основе АСР не отражает поведение реальной системы [1].

Отклонения алгоритмов от идеализированных при определенных условиях, например, для релейно-импульсных регуляторов, когда скорость исполнительного механизма соответствует реальной динамике объекта, поведение реальной системы с достаточной степенью точности соответствует результатам математической модели.

Релейно-импульсные регуляторы применяются в микропроцессорных регулирующих приборах, где наблюдается следующая тенденция. Например, в публикации [2] описаны возможности применения протокола modbus для создания собственной Scada системы на базе Python.
В публикации [3] описано использование Python для работы с Arduino. Продолжаю эту тенденцию и я в надежде, что Python окончательно овладеет этой новой областью применения.

1.Типовые линейные алгоритмы регулирования

Привожу идеальные алгоритмы регулирования, которые определяются уравнениями:

П- алгоритм:

2txcarh2x8ag8aawr0pyb85mjb4.png

ПИ- алгоритм:

zztuyfzvtbcijcsca3vluyljqpy.png

ПИД- алгоритм:

v2q5lrklurlxo9rbbv-zqq9pcs8.png

где qi_xvk3v_z9rfiu_wmrs8fo9euo.png — регулирующее воздействие; ujfyhq7z-f_tcqjk65jqud6mxje.png — сигнал рассогласования; 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()

Характер переходных процессов показан на графике:

xgyfyxbcyd_gwcprb0tcbje_ifa.png

На основе типовых идеальных алгоритмов регулирования в теории управления развиты методы оптимального параметрического синтеза и исследованы общие свойства АСР.

В промышленных автоматических регуляторах типовые алгоритмы реализуется приближенно. Отклонение алгоритма регулирования от идеального не оказывает существенного влияния на поведение системы, если регулятор работает в области «нормальных» режимов.

Для этого необходимо знать и учитывать существенные особенности реального алгоритма, обусловленные способом его технической реализации. В практике автоматизации получили широкое распространение электрические (электронные) регуляторы косвенного действия в форме виртуальных модулей микропроцессорных контроллеров.

Рассмотрим классификацию автоматических электрических регуляторов по способу реализации алгоритма [1]:

twesznedne2nrlh_e42en_yyudm.png

В соответствии с представленной классификацией в этой и следующих публикациях будет рассматриваться реализация математических моделей регуляторов средствами Python.

2. Регуляторы релейно-импульсного действия

В автоматических системах управления технологическими процессами используются исполнительные механизмы (ЭИМ) с электрическими асинхронными реверсивными двигателями с постоянной частотой вращения выходного вала. Это и определило способ реализации алгоритма регулирования.

Принцип реализации ПИ-алгоритма при наличии ЭИМ постоянной скорости иллюстрирует схема, представленная на рисунке:

aa6bijsu5ux27y9jh21abjboqrg.png

Регулирующий блок (РБ) формирует управляющие ЭИМ прямоугольные импульсы постоянной амплитуды, длительность и скважность которых зависят от значений параметров настройки регулятора и значения входного сигнала.

Прямой канал РБ содержит нелинейный элемент — трехпозиционное реле с зоной нечувствительности ∆н зоной возврата ∆в, приведённое на рисунке:

trgq3lrzfyi6pmd7fkjg7n_jwjg.png

Модель нелинейного элемента
#!/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)0:
                  z=0
         elif  -b<4*sin(t)

Анализируем результат работы модели по двум следующим графикам:

ver1sqv8uygu1q1qut77yykxxic.png

ltd-zboz6fsdwgbsrj5j3pcobri.png

Дискретная модель РЭ основана на разностных уравнениях. Формирующая ПИ-алгоритм обратная связь реализована с использованием апериодического звена с передаточной функцией:

r_yhytbibgevzn-nqmnt_lsucqi.png

Регулирующий блок (РБ) представляет собой широтно-импульсный модулятор (ШИМ), который может быть построен с использованием как аналоговых, так и цифровых средств.

Регулирующий блок совместно с исполнительным механизмом постоянной скорости обеспечивают при определенных условиях достаточно точную реализацию ПИ-алгоритма:

cd6eopp70uhl9m-j25if34esj6i.png (1)

И соответственно переходной характеристики:

reidfxethdgbotkbmk3dk-ek-yk.png (2)

Для реализации ПИД-алгоритма ко входу ПИ-регулятора релейно-импульсного действия подключается дифференциатор W (s) по схеме:

weoqxsdxwktd4ji7qkkggjqjob8.png

Введенная передаточная W (s) образуется одним или двумя последовательно включенными дифференцирующими звеньями. Регулирующий блок совместно с исполнительным механизмом постоянной скорости обеспечивает при определенных условиях достаточно точную реализацию ПИД-алгоритма:

kfbr6nwfa_suwyzzo0injskdsvw.png (3)

И соответственно переходной характеристики:

owwish6hfgcx2leybugt21ikrke.png (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()  

Анализируем график переходных процессов для выбранных настроек ПИ- и ПИД-алгоритмов.

udone54o_2lch6ofuabbq8pyst0.png

Линейные модели релейно-импульсных регуляторов не исключают возможности мгновенного изменения регулирующего воздействия (выходной величины регулятора).

У реальных релейно-импульсных регуляторов перемещение выходного вала или штока ЭИМ происходит за некоторое конечное время, зависящее как от установленных значений параметров настройки, так и  скорости исполнительного механизма so.

Так, при ступенчатом изменении входного сигнала, длительность импульса на выходе регулирующего блока РБ для П-алгоритма определяется соотношением:

ddta6kknhv6azztpmg4nlqdp_8s.png

Длительность первого импульса на выходе РБ для ПИ-алгоритма определяется уравнением:

qr6ravs6joenslco3ljmj_q-mp0.png

Последующие импульсы постоянной длительности tи повторяются через следующие интервалы времени:

gbptnugqrqjrk9zz6yky06grrac.png

где tlmkjspqdoyd752wzqfhwczthso.png— коэффициент передачи регулятора; ygjyfsttk4omiso4hcrx_blc3f8.png — постоянная интегрирования, с; y81nn_dvo6sxes-aod2ieyjpe3a.png— скорость исполнительного механизма, wbdumamfkeflqxf0v0wu32frdd8.png.

3. Моделирование динамики релейно-импульсных П-ПИ- и ПИД-регуляторов в неравновесных режимах

Граф релейно-импульсного ПИД-регулятора приведен на следующем рисунке:

x7a-hoqzysvzb4bmb3grso1gcco.png

Листинг модели динамики релейно-импульсных регуляторов
#!/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 -ax[j]:
                        z1[j+1]=0
                else:
                        z1[j+1]=sign(x[j-1])
                if -bx[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()

Анализируем полученные результаты.

h1gjnq67xt7hw_miph3wqjgexzi.png

pawwis-uoamhmd8sewizvvv3kfu.png

Характеристика регулятора зависит как от скорости исполнительного механизма so, так и параметров релейного элемента а, b. Значение so предопределяется типом ЭИМ и характеризуется параметром Тим — минимальное время полного хода. Для стандартных ЭИМ значения Тим равно 10,25,63, 100 и 160 с.

Значение b (половина зоны нечувствительности) устанавливается по величине допустимого отклонения, на которое регулятор не должен реагировать.
Параметры настройки регулятора Кр, Ти, Кд, Тд находятся в нелинейной зависимости от скорости исполнительного механизма so, параметров обратной связи Ка, Та и релейного элемента а, b.

Выводы

Средствами языка программирования Python, с применением метода конечных разностей, получены математические модели электронных релейно-импульсных регуляторов косвенного действия.

Полученные модели могут быть использованы при проектировании микропроцессорных регулирующих приборов.

Ссылки

  1. Расчёт и моделирование автоматических систем регулирования в среде Mathcad.
  2. ScadaPy — использование OPC UA.
  3. Веб-сервер — ваша первая сетевая программа Arduino.

© Habrahabr.ru