Перейти на главную Журналы

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 [81] 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175

Значение x\{k-1 )AJ к моменту времени kh уже вычислено, так что .задержки, связанные с компыотерной обработкой, минимальны. Как только вычислен сигнал управления u{kh), можно получить повое значение х, которое будет использовано длд вычисления сигнала управления наследующем niare выборки (рис. 6.26).

измерительной информаии обновление

измерительной

информаии ооновление информации обновление yl(kl)h] xl(k-i)h] y(kh) x(kh)

вычисление

u\{k-m

вычисление u(kh)

измерительной информации обновление yl(k + i)h] xl(k+i)h]

вычисление ul(k+l)h]

(k-i)h kh (k+i)h

Рис. 6.26. Последовательность вычислений для обобщенного регулятора

время

6.9.5. Алгоритм обобщенного регулятора

Приведенный алгоритм базируется на уравнении (6.60) и включает код д.ля пр-дотвращения интегрального насыщения. Параметры регулятора уже преобразовав из стандартной формы во внутреннее представление. В этой программе па язы-Pascal учтены требования работы в режиме реального времени - защита ресурсов синхронизация задач.

program general controller const n = 5; rn = 5:

(* пример обобшенного регулятора *) (* степень управляющего полинома *) (* степень упреждающего полинома *) (* по возмущению; m > п *)

var vectprotect: semaphore;

next tirne, delta tiine: time (real);

i, j: integer;

out signal, x: real;

u, uc, y, w: array[0..nj of real;

R, S, T, V:array[()..n] of real;

begin

x:=0;

vect protect := 1;

(* инициализация векторов состояния *) for i = о to n do begin

Uij:~0; uc[ij - 0; y[ij :-0; w[ij :=0; end



6.9, Реализация обобщенного дискретного регулятора 273

while true do (* основной бесконечный цикл *) begin

(* ввод текущих значений *) wa\t unt\l(next tnne)\

uc[()J AD input (ch#l); (* ввод опорного значения*) y[()j ;= ADinput (ch#2); (* ввод измерений *)

w[()J := ADinpnt (ch#3); (* ввод возмущения *)

(* вычисление управляющего сигнала *)

wait(vect protect); (* защита доступа *)

(* к управляющему полиному *) out signal Т[()] * ис[()] - S[()] * у[0] - VO * w[0] + х: signal(vect protect); (* снятие защиты *)

(* управляющего полинома *) DA output (out signal, ch#10);(* вывод сигналов управления *)

(* обновление векторов состояния *) u[OJ := out signal; for i = n downto 1 do begin j:=i-l;

u[ij := n[jj; uc[i];=ucj];

yij-=yjj;

end;

for i = ш downto 1 do w[i] ;= w[i - 1 J; (* расчет значения x *) X ;= 0;

for i = 1 to n do begin

x:"x-- RfiJ*ufiJ; x:==x + T[i]*uc[iJ; x:=x-Si]*y[iJ; end;

for i = 1 to rn do X := X - V[iJ * w[ij; next time := next tirne + dclta tiine; end; (* основной цикл *)

end; (* обобщенный регулятор *)

Функции wait и signal защищают вектора R, S, Г и V, которые являются общим Xvpco.M (ра,здел 10.4.1). Как правило, к этим переменным имеет доступ только под-•огра.м.ма регулятора, так что серьезных задержек обработки возникать не должно, другая программа получает доступ к коэффициентам pei-улятора, например для



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

Как уже неоднократно от.мечшюсь, коэффициенты полино.мов обобщенного pei лятора не и.меют пря.мой связи с физически.ми свойства.ми контура управлеш Только в са.мых простых регуляторах соотношения .между коэффициепта.ми и фи; чески.ми свойствами контура управления и.меют очевидный смысл.

В П-регуляторе все коэффициенты, кроме 5q и q, равны пулю. Количество коз фициентов 5; и t, отличных от нуля, задает порядок дискретного управнеш ПИД-регулятор имеет второй порядок, поэто.му первые три коэффициента в поли; .мах R, S W Г ненулевые, а все остальные равны нулю [уравнение (6.52)J. В конт\ упреждающего управления по воз.мущения.м процесса некоторые из коэффициент полино.ма 1/ненулевые, и то же са.мое справедливо в отноп1ении контура упрежда, щего управления по опорному значению и полино.ма Т.

В случае регулятора Смита для ко.мпенсации задержек в техническом нроцес; коэффициенты полино.ма R отличны от нуля, так что предыдущие управляющие сигналы сохраняются в течение такого количества интервалов выборки, которое сое; ветствует вре.мени задержки Т/д плюс порядок систе.мь! п - если Т/ равно 4 ик-терва/ш.м выборки, а порядок систе.мы равен 2, то старые значения хранятся в течен!: 6 интервалов.

Если из.меняется интервал выборки, то необходимо изменить и раз.мерность по;;; -но.мов R,S,Tw 1/для того, чтобы дискретные значения переменных с течением BpcN: ни сдвигались назад и были доступны для вычисления нового управляющего сип ,. ла.

Ниже приведена програ.м.ма ввода новых пара.метров ПИД-регулятора, их пре( разования в коэффициенты полино.мов R,S\iTv\ оперативного обновления .этих i эффициентов, т. е. без прерывания работы регулятора.

procedure parameter input

(* оперативный ввод параметров ПИД-регулятора *)

(* и их преобразование в коэффициенты полино.мов R, S и Т *) const п = 5; (* степень управляющего полино.ма *)

var К, Ti, Td, N, sample h: real;

C alfa, C beta, C gamma: real;

R, S, T: array[0..n]ofreal;

begin

while true do (* бесконечный цикл *) begin

writeln ("Введите следующие параметры");

input "Коэффициент усиления К ?", К;

input "Постоянная времени интегрирования Ti ?", Ti;

input "Постоянная времени дифференцирования Td ?", Td;

input "Нормирующий коэффициенты ?", N; (*уравнение(6.

input "Интервал выборки h", sampleh;




0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 [81] 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175