Создание блока передаточной функции с переменными коэффициентами
В стандартной библиотеке Simulink отсутствует блок передаточной функции, для которой можно было бы задавать коэффициенты числителя и знаменателя в виде входных векторов. Наличие такого блока позволило бы моделировать объекты, свойства которых меняются с течением времени. К таким объектам относятся и технологические объекты. Создать такой блок можно используя следующую методику [3]. Передаточная функция: представляется в виде , где . Затем численно решается дифференциальное уравнение, соответствующее передаточной функции . Для этого значения производных определяются на основе вычисления правых частей следующей системы нормальных дифференциальных уравнений: где u - входное воздействие, x1, x2, x3, …. xn, - переменные состояния. Искомое решение (выходная переменная) находится следующим образом: Для реализации изложенного алгоритма разработан блок Transfer Fcn (vp), схема и пиктограмма которого показаны на рис.2.1. Рис. 2.1 Входное воздействие подается на входной порт In, а выходной сигнал снимается с порта Out. На вход Num должен быть подан вектор коэффициентов числителя, а на вход Den - вектор коэффициентов знаменателя. Для создания блока Transfer Fcn (vp) необходимо в библиотеке Simulink взять блок «S-Function» и определить его параметры так, как показано на рисунке 2.2: Рис. 2.2 Затем необходимо собрать схему, показанную на рис. 2.1 и объединить её в субсистему. После создания субсистемы необходимо открыть для нее «Mask Editor» и прописать все необходимые параметры, так как показано на рис. 2.3а – 2.3с.
а) б)
в) с) Рис. 2.3 В окне задания параметров (рис. 2.4) необходимо указать размерность векторов коэффициентов числителя и знаменателя. Рис. 2.4 Параметры блока: Numerator length: [Размерность вектора коэффициентов числителя]. Размерность вектора коэффициентов числителя не должна превышать размерность вектора коэффициентов знаменателя. Denominator length: [Размерность вектора коэффициентов знаменателя]. Сам алгоритм расчета выходного сигнала блока реализован с помощью S-функции, текст которой с необходимыми комментариями приведен ниже.
function [sys,x0,str,ts] = PF_DR(t,x,u,flag,n_chisl,n_znam) % Дробно-рациональная передаточная функция. Коэффициенты % числителя и знаменателя передаются через вход S-функции % В параметрах S-функции необходимо указать размерности векторов % числителя (n_chisl) и знаменателя (n_znam) % Определение максимальной размерности знаменателя: if n_znam <=1 n_znam_max = 1; else n_znam_max = n_znam; end switch flag, % В зависимости от значения переменной flag происходит % вызов того или иного метода: %===============% % Инициализация % %===============% case 0, [sys,x0,str,ts] = mdlInitializeSizes(n_znam,n_znam_max,n_chisl); dx1 = 0; % Присвоение производной первой переменной состояния нулевого % начального значения set_param(gcb,'UserData',dx1); % Запоминание значения dx1 в параметре UserData блока S-function %====================% % Расчет производных % %====================% case 1, sys = mdlDerivatives(t,x,u,n_znam,n_znam_max,n_chisl); dx1 = sys(n_znam-1); % Извлечение производной первой % переменной состояния set_param(gcb,'UserData',dx1); % Запоминание значения dx1 в параметре UserData блока S-function %===========================================% % Расчет значений вектора выходных сигналов % %===========================================% case 3, dx1 = get_param(gcb,'UserData'); % Присвоение значения dx1, извлеченного из параметра UserData % блока S-function sys = mdlOutputs(t,x,u,n_znam,n_chisl,dx1); %=========================================% % Неиспользуемые значения переменной flag % %=========================================% % В примере не используются методы для завершения работы S-функции, % нет дискретных переменных состояния, % поэтому значения переменной flag = 2, 4, 9 не используются. % Результатом S-функции в этом случае является пустая матрица. case { 2, 4, 9 } sys=[]; %======================================% % Неизвестное значение переменной flag % %======================================% otherwise error(['Unhandled flag = ',num2str(flag)]); end % Окончание csfunc % %===============================================================% % mdlInitializeSizes % % Функция инициализации % % Расчет начальных условий, значений вектора шагов модельного % % времени,размерности матриц % %===============================================================% % function [sys,x0,str,ts]=mdlInitializeSizes(n_znam,n_znam_max,n_chisl) sizes = simsizes; sizes.NumContStates = n_znam_max; % Число непрерывных переменных % состояния. sizes.NumDiscStates = 0; % Число дискретных переменных состояния. sizes.NumOutputs = 1; % Число выходных переменных (размерность % выходного вектора). sizes.NumInputs = (1 + n_znam + n_chisl); % Число входных переменных (размерность входного вектора). sizes.DirFeedthrough = 1; % Прямой проход. Есть проход входного % сигнала на выход sizes.NumSampleTimes = 1; % Размерность вектора шагов модельного % времени. sys = simsizes(sizes); x0 = zeros(n_znam_max,1); % Задание вектора начальных значений % переменных состояния. % Начальные условия нулевые, если порядок % числителя меньше порядка знаменателя str = []; % Параметр зарезервирован для будущего использования. ts = [0 0];% Матрица из двух колонок, задающая шаг модельного % времени и смещение. % Окончание mdlInitializeSizes % %=============================================================% % mdlDerivatives % % Функция для расчета значений производных вектора состояния % % непрерывной части системы % %=============================================================% % function sys = mdlDerivatives(t,x,u,n_znam,n_znam_max,n_chisl); [u_vh,a,b] = param(u,n_znam,n_chisl); % Извлечение из входного сигнала входной переменной, % а также векторов знаменателя и числителя sys = zeros(n_znam_max,1); if n_znam > 1 for k = 1:(n_znam - 2); sys(k) = x(k+1); end s = 0; for k = 1:(n_znam - 1); s = s + (a(k)/a(n_znam))*x(k); end sys(n_znam-1) = u_vh - s; % Вычисление производных выходного % сигнала end % Окончание mdlDerivatives % %========================================================% % mdlOutputs % % Функция для расчета значений вектора выходных сигналов % %========================================================% % function sys=mdlOutputs(t,x,u,n_znam,n_chisl,dx1) [u_vh,a,b] = param(u,n_znam,n_chisl); % Извлечение из входного сигнала входной переменной % и векторов знаменателя и числителя x1=x; x1(n_znam) = dx1; sys = 0; for k = 1: n_chisl; sys = sys + b(k)/a(n_znam)*x1(k); % Вычисление выходного % сигнала end if t == 0 % Вычисление выходного сигнала для момента времени t == 0 if n_chisl == n_znam sys = u_vh*b(n_chisl)/a(n_znam); % Если порядки числителя и знаменателя равны, то выходной сигнал % равен входному, умноженному на отношение свободных членов else sys = 0; % В противном случае выходной сигнал равен 0. end end % Окончание mdlOutputs function [u_vh,a,b] = param(u,n_znam,n_chisl); % Функция извлечения из входного сигнала входной переменной % и векторов знаменателя и числителя u_vh = u(1); % Извлечение входного сигнала % Извлечение вектора коэффициентов знаменателя: n = n_znam; for k = 2:(2 + n_znam - 1); a(n) = u(k); n = n - 1; end % Извлечение вектора коэффициентов числителя: n = n_chisl; for k = (2 + n_znam):(2 + n_znam + n_chisl -1); b(n) = u(k); n = n - 1; end % Окончаниие функции param На рис.2.5 показано сравнение работы нового блока со стандартным блоком Transfer Fcn. Как видно из графиков на рисунке, результаты полностью совпадают. Рис. 2.5 В том случае, если коэффициенты числителя и знаменателя заданы в виде таблиц в функции какого-либо параметра, необходимо иметь также блок, обеспечивающий интерполяцию коэффициентов при изменении этого параметра. Такой блок может быть создан на основе S-функции с применением стандартной функции MATLAB interp1. Схема и пиктограмма блока интерполяции показаны на рис.2.6. Окно задания параметров показано на рис.2.7. Рис. 2.6 Окно задания параметров: Рис. 2.7 Параметры блока: Vector of input values: [Вектор входных значений]. Размерность вектора коэффициентов числителя не должна превышать размерность вектора коэффициентов знаменателя. Matrix (vector) of output values: [Матрица или вектор выходных значений]. Каждая строка в матрице выходных значений соответствует новому набору коэффициентов. Interpolation method: [Метод интерполяции]. Значение параметра выбирается из списка: · linear - линейная интерполяция, · cubic - кубическая интерполяция, · spline - сплайн-интерполяция. Сам алгоритм расчета выходного сигнала блока реализован с помощью S-функции, текст которой с необходимыми комментариями приведен ниже. function [sys,x0,str,ts] = Interp_table(t,x,u,flag,x_vh,y_vh,method) % Функция для интерполирования коэффициентов полиномов % передаточной функции. % x_vh - вектор аргумента % y_vh - матрица значений табличной функции % method - метод интерполяции switch flag, % В зависимости от значения переменной flag % происходит вызов того или иного метода: %===============% % Инициализация % %===============% case 0, [sys,x0,str,ts]=mdlInitializeSizes(y_vh); %===========================================% % Расчет значений вектора выходных сигналов % %===========================================% case 3, sys=mdlOutputs(t,x,u,x_vh,y_vh,method); %=========================================% % Неиcпользуемые значения переменной flag % %=========================================% % В примере не используются методы для завершения работы S-функции, % нет дискретных переменных состояния, нет вычисления производных, % поэтому значения переменной flag = 1, 2, 4, 9 не используются. % Результатом S-функции в этом случае является пустая матрица. case {1, 2, 4, 9} sys=[]; %======================================% % Неизвестное значение переменной flag % %======================================% otherwise error(['Unhandled flag = ',num2str(flag)]); end % Окончание csfunc % %===============================================================% % mdlInitializeSizes % % Функция инициализации % % Расчет начальных условий, значений вектора шагов модельного % % времени, размерности матриц % %===============================================================% % function [sys,x0,str,ts]=mdlInitializeSizes(y_vh) [size_x size_y] = size(y_vh); sizes = simsizes; sizes.NumContStates = 0; % Число непрерывных переменных состояния. sizes.NumDiscStates = 0; % Число дискретных переменных состояния. sizes.NumOutputs = size_y; % Число выходных переменных % (размерность выходного вектора). sizes.NumInputs = 1 ; % Число входных переменных % (размерность входного вектора). sizes.DirFeedthrough = 1; % Прямой проход. Есть проход входного % сигнала на выход sizes.NumSampleTimes = 1; % Размерность вектора шагов модельного времени. sys = simsizes(sizes); x0 = []; % Задание вектора начальных значений переменных состояния. % Начальные условия нулевые str = []; % Параметр зарезервирован для будущего использования. ts = [0 0]; % Матрица из двух колонок, задающая шаг модельного % времени и смещение. % Окончание mdlInitializeSizes % %======================================================% % mdlOutputs % % Функция для расчета значений вектора выходных сигналов % %======================================================% % function sys=mdlOutputs(t,x,u,x_vh,y_vh,method) sys = interp1(x_vh,y_vh,u,method); % Окончание mdlOutputs На рис. 2.8 показана схема, в которой интерполяция коэффициентов передаточной функции производится с помощью разработанного блока Interp Fcn. Значения коэффициентов числителя и знаменателя считываются из файлов с помощью блока Load Num & Den. Схема выполняет расчет для любого значения переменной x, лежащего в пределах от 0 до 6.6. Рис. 2.8 Задание 1. Создание блока передаточной функции с переменными коэффициентами по методике изложенной выше. 2. В модели лабораторной работы 1 (рис 1.9) заменить передаточную функцию ДПТ на передаточную функцию, полученную в пункте 1. Исследовать полученную модель при изменении параметров во времени. 3. Сделать выводы. Лабораторная работа № 3 Цель работы Настройки параметров промышленных регуляторов с использованием блока «Nonlinear Control Design Blockset»
Популярное: Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние... Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (586)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |