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