python

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

  • четверг, 28 декабря 2017 г. в 03:12:12
https://habrahabr.ru/post/345714/
  • Разработка под Windows
  • Математика
  • Анализ и проектирование систем
  • Алгоритмы
  • Python




Введение

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

Практика промышленного использования микропроцессорных регулирующих приборов (МРП) показала, что “идеальные алгоритмы” физически не реализуемы. Синтезированная на их основе АСР не отражает поведение реальной системы [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, с применением метода конечных разностей, получены математические модели электронных релейно-импульсных регуляторов косвенного действия.

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

Ссылки

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