Итак, на данный момент читатель последовательно прошёл путь от создания простейшей блок-схемы Xcos, состоящей всего из трёх блоков, до визуального моделирования полноценных управляемых динамических систем, описываемых матричными уравнениями.
В настоящем параграфе будет затронута ещё одна задача математического моделирования – построение дискретного наблюдателя в системе дифференциальных матричных уравнений.
Данная задача особенно актуальна, так как при моделировании управляющего воздействия динамической системы, как бы удобно ни было управлять состоянием
Построение непрерывного наблюдателя
Построение системы наблюдения происходит так, чтобы на вход наблюдателя подавались значения
Отметим также, что при выборе коэффициентов усиления наблюдателя необходимо поддерживать баланс между скоростью и точностью сходимости моделируемого движения к программному и чрезмерной чувствительностью к начальным отклонениям.
Рассмотрим пример построения линейного наблюдателя для динамической системы, описываемой в пространстве состояний матричными дифференциальными уравнениями вида:
где
Непрерывный наблюдатель в данном случае, строится следующим образом:
при этом, элементы матрицы усиления
Построение матрицы
Далее определнмся, почему требование устойчивости матрицы
Введём обозначение
В уравнении (2), раскрывая скобки, получим:
Теперь вычислим
Таким образом, приходим к однородной системе матричных дифференциальных уравнений с постоянными коэффициентами вида:
об устойчивость решения
Итак, с обоснованием корректности построения описанного непрерывного наблюдателя покончено, перейдём теперь к реализации блок-схемы Xcos.
Для моделирования системы (24) с непрерывным наблюдателем (25) потребуются блоки GENSIN_f и CLOCK_c с палитры «Источники сигналов и воздействий», блоки CSCOPE и END с палитры «Регистрирующие устройства», и блок CLSS с палитры «Системы с непрерывным временем».
Моделирование данной системы подразумевает задание матриц
Для начала зададим размерности матрицы в контексте:
clc;
n = 3; m = 1;Количество строк и столбцов матриц в контексте Xcos
и сгенерируем матрицу размерности nxn:
A = rand(n,n)Для того, чтобы избежать экспоненциальной неустойчивости рассматриваемой системы, изменим матрицу
Введём обозначение
A = A max(real(spec(A)))*eye();где функция spec(A) – вычисляет собственные значения матрица, функция real() – выделяет действительную часть своего аргумента, функция max() вычисляет максимальное из поданных в неё значений, а eye() – генерирует единичную матрицу совместной размерности.
Далее сгенерируем матрицы совместных размерностей
B = rand(n, 1); C = rand(m, n); D = zeros(m, 1);И вектор-столбец
X0 = rand(n, 1);Для генерации матрицы усиления воспользуемся встроенной Scilab – функцией ppol(A,B,v), которая по заданным матрицам
Однако для нашего наблюдателя должно выполняться то же условие, но для уравнения
K = ppol(A',C', -ones(X0))';где символ «
Теперь необходимо собрать все сгенерированные матрицы в систему, что делается с помощью функции syslin(dom,A,B,C [,D [,x0] ]), которая генерирует систему вида
соответственно, в контекст необходимо прописать:
SYST = syslin('c', A-K*C, [B,K], eye(A), zeros([B,K]));После задания в контексте всех необходимых параметров системы, нужно перейти к редактированию внутренних параметров блока CLSS, где необходимо задать правильные матрицы:

Рисунок 101. Внутренние параметры блока CLSS при моделировании системы (1)-(2)
Блок схема, реализующая моделирование системы имеет несложный вид:

Рисунок 102а. Блок-схема системы с непрерывным наблюдателем
Результат моделирования представлен на рисунке 102(б):

Рисунок 102б. Графики 3-х фазовых переменных и двумерный наблюдатель
Построение дискретного наблюдателя
В связи с тем, что в параграфе упоминается наблюдатель дискретный, то вполне предсказуемым шагом является модернизация блок-схемы (рис. 102 а)) таким образом, чтобы использовать в ней дискретный наблюдатель.
Построение дискретного наблюдателя подчиняется тем же правилам, что непрерывного, основанных на получении полюсов в качестве собственных значений матрицы
Поэтому алгоритм, прописанный на данный момент в контексте рабочей области, полностью удовлетворяет нашим требованиям. Остаётся только задать шаг дискретизации и дикретизировать полученную систему
dt = 0.2;
SYST_d = dscr(SYST, dt);
[Ad, Bd, Cd, Dd] = abcd(SYST_d);где Scilab-функция dscr() производит дискретизацию непрерывной системы
В итоге контекст должен принять вид:
clc;
n=3; m=2;
A = rand(n,n); A = A - max(real(spec(A)))*eye();
B = rand(n,1); C = rand(m,n); D = zeros(m,1);
x0 = rand(n, 1);
K = ppol(A',C',-ones(x0))';
SYST = syslin('c', A-K*C, [B,K], eye(A), zeros([B,K]));
dt = 0.2;
SYST_d = dscr(SYST, dt);
[Ad, Bd, Cd, Dd] = abcd(SYST_d);Для внедрения дискретного наблюдателя воспользуемся блоком

с палитры «Системы с дискретным временем». Кроме того нам понадобятся блоки MUX и DEMUX с палитры «Маршрутизация сигналов» и блок сумматора BIGSOM_f с палитры «Математические операции». Блок-схема реализующая математическое моделирование системы дифференциальных уравнений с дискретным наблюдателем, представлена на рис. 103

Рисунок 103. Реализация динамической системы с дискретным наблюдателем в Xcos
Внутренние параметры блока дискретной линейной системы DLSS представлены на рис. 104

Рисунок 104. Внутренние параметры блока DLSS при моделировании дискретизированной системы (1)-(2)
Результат моделирования линейной динамической системы с дискретным наблюдателем представлен на рис. 105.

Рисунок 105. Фазовые координаты и дискретныйнаблюдатель динамической системы





