И.В.Черных. Simulink. И. В. Черных. "Simulink Инструмент моделирования динамических систем"
Скачать 3.7 Mb.
|
A = [0.9135 0.1594 -0.7971 0.5947]; % Матрица системы. B = [0.05189 0 0.4782 0]; % Mатрица входа. C = [0 1 1 0]; % Mатрица выхода. D = [0.01 0 0 -0.02]; % Mатрица обхода. switch flag, % В зависимости от значения переменной flag происходит % вызов того или иного метода: %===============% % Инициализация % %===============% case 0, [sys,x0,str,ts] = mdlInitializeSizes(A,B,C,D); %============================================================% % Расчет значений вектора состояний дискретной части системы % %============================================================% case 2, sys = mdlUpdate(t,x,u,A,B,C,D); %=====================================================================% % Расчет значений вектора выходных сигналов непрерывной части системы % %=====================================================================% case 3, sys = mdlOutputs(t,x,u,A,C,D); %=========================================% % Неиспользуемые значения переменной flag % %=========================================% % В примере не используются методы для завершения работы S-функции, % нет непрерывных переменных состояния, % поэтому значения переменной flag = 1, 4, 9 не используются. % Результатом S-функции в этом случае является пустая матрица. case { 1, 4, 9 } sys=[]; %======================================% % Неизвестное значение переменной flag % %======================================% otherwise error(['unhandled flag = ',num2str(flag)]); end % Окончание dsfunc % %===============================================================% % mdlInitializeSizes % % Функция инициализации % % Расчет начальных условий, значений вектора шагов модельного % % времени, размерности матриц % %===============================================================% % function [sys,x0,str,ts] = mdlInitializeSizes(A,B,C,D) sizes = simsizes; sizes.NumContStates = 0; % Число непрерывных переменных состояния. sizes.NumDiscStates = size(A,1); % Число дискретных переменных состояния. sizes.NumOutputs = size(D,1); % Число выходных переменных (размерность % выходного вектора). sizes.NumInputs = size(D,2); % Число входных переменных (размерность % входного вектора). sizes.DirFeedthrough = 1; % Прямой проход. Есть проход входного % сигнала на выход (матрица D не пустая). sizes.NumSampleTimes = 1; % Размерность вектора шагов модельного % времени. sys = simsizes(sizes); x0 = zeros(sizes.NumDiscStates,1); % Задание вектора начальных значений % переменных состояния. % Начальные условия нулевые str = []; % Параметр заразервирован для будущего % использования. ts = [0.2 0]; % Матрица из двух колонок, задающая шаг % модельного времени и смещение. % Окончание mdlInitializeSizes % %=========================================================================% % mdlUpdate % % Функция для расчета значений вектора состояния дискретной части системы % %=========================================================================% % function sys = mdlUpdate(t,x,u,A,B,C,D) sys = A*x+B*u; % Окончание mdlUpdate %========================================================% % mdlOutputs % % Функция для расчета значений вектора выходных сигналов % %========================================================% % function sys = mdlOutputs(t,x,u,A,C,D) sys = C*x+D*u; % Окончание mdlOutputs Пример модели с S-функцией dsfunc приведен на рис.16.6.
[Скачать пример] 16.7.4. Модель гибридной системы Модель гибридной системы (комбинации непрерывной и дискретной системы) дана в файле mixedm.m . Рассматриваемая S-функция моделирует систему, состоящую из последовательно включенных интегратора (1/s) и блока задержки (1/z). Особенность S-функции для гибридной системы в том, что вызов callback-методов для расчета дискретной части системы выполняется в те же моменты времени, что и для непрерывной ее части, поэтому пользователь, при написании S-функции, должен предусмотреть проверку правильности вызова callback-методов рассчитывающих дискретную часть системы. Ниже приведен текст этой S-функции. S-функция dsfunc: function [sys,x0,str,ts] = mixedm(t,x,u,flag) % MIXEDM Пример S-функции. S-функция моделирует систему, состоящую из % последовательно включенных интегратора (1/s) и блока задержки (1/z). % % Шаблон для создания S-функции - файл sfuntmpl.m . % % Copyright 1990-2001 The MathWorks, Inc. % $Revision: 1.27 $ % Авторский перевод комментариев: Черных И.В. % Шаг модельного времени и смещение для дискретной части системы: dperiod = 1; doffset = 0; switch flag % В зависимости от значения переменной flag происходит % вызов того или иного метода: %===============% % Инициализация % %===============% case 0 [sys,x0,str,ts]=mdlInitializeSizes(dperiod,doffset); %====================% % Расчет производных % %====================% case 1 sys=mdlDerivatives(t,x,u); %============================================================% % Расчет значений вектора состояний дискретной части системы % %============================================================% case 2, sys=mdlUpdate(t,x,u,dperiod,doffset); %===========================================% % Расчет значений вектора выходных сигналов % %===========================================% case 3 sys=mdlOutputs(t,x,u,doffset,dperiod); %====================% % Завершение расчета % %====================% case 9 sys = []; %======================================% % Неизвестное значение переменной flag % %======================================% otherwise error(['unhandled flag = ',num2str(flag)]); end % Окончание mixedm %===============================================================% % mdlInitializeSizes % % Функция инициализации % % Расчет начальных условий, значений вектора модельного времени,% % размерности матриц % %===============================================================% function [sys,x0,str,ts]=mdlInitializeSizes(dperiod,doffset) sizes = simsizes; sizes.NumContStates = 1; % Число непрерывных переменных состояния. sizes.NumDiscStates = 1; % Число дискретных переменных состояния. sizes.NumOutputs = 1; % Число выходных переменных (размерность выходного % вектора). sizes.NumInputs = 1; % Число входных переменных (размерность входного % вектора). sizes.DirFeedthrough = 0; % Прямой проход. Прохода входного сигнала на выход % нет. sizes.NumSampleTimes = 2; % Размерность вектора шагов модельного времени. % Шаги модельного времени задаются для непрерывной % и для дискретной частей системы. sys = simsizes(sizes); x0 = zeros(2,1); % Задание вектора начальных значений переменных % состояния. % Начальные условия нулевые str = []; % Параметр заразервирован для будущего % использования. ts = [0 0]; % Шаг модельного времени для непрерывной части % системы. dperiod doffset]; % Шаг модельного времени для дискретной части % системы. % Окончание mdlInitializeSizes % %========================================================================% % mdlDerivatives % % Функция для расчета значений производных вектора состояния непрерывной % % части системы % %========================================================================% function sys=mdlDerivatives(t,x,u) sys = u; % Окончание mdlDerivatives %=========================================================================% % mdlUpdate % % Функция для расчета значений вектора состояния дискретной части системы % %=========================================================================% % function sys=mdlUpdate(t,x,u,dperiod,doffset) % Расчет значения переменной состояния дискретной части системы % выполняется в соостветствии с дискретным шагом расчета % (погрешность по времени выбрана равной 1e-15). if abs(round((t - doffset)/dperiod) - (t - doffset)/dperiod) < 1e-15 sys = x(1); else sys = []; end % Окончание mdlUpdate % %========================================================% % mdlOutputs % % Функция для расчета значений вектора выходных сигналов % %========================================================% % function sys=mdlOutputs(t,x,u,doffset,dperiod) % Расчет значения выходного сигнала системы % выполняется в соостветствии с дискретным шагом расчета % (погрешность по времени выбрана равной 1e-15). % Если условие, заданное оператором if истинно, то выходной сигнал блока % изменяется. В противном случае выходной сигнал остается равным значению % на предыдущем шаге. % if abs(round((t - doffset)/dperiod) - (t - doffset)/dperiod) < 1e-15 sys = x(2); else sys = []; end % Окончание mdlOutputs Пример модели с S-функцией mixedm приведен на рис.16.7.
[Скачать пример] 16.7.6. Непрерывная модель электродвигателя постоянного тока независимого возбуждения В данном параграфе на примере двигателя постоянного тока независимого возбуждения (ДПТ НВ) рассмотрим создание S-функции для модели реального объекта. 16.7.6.1. Математическое описание ДПТ НВ Двигатель постоянного тока независимого возбуждения (рис. 16.9), описывается следующей системой дифференциальных и алгебраических уравнений в абсолютных единицах:
где u - напряжение на якорной обмотке двигателя, e - электродвижущая сила (ЭДС) якоря, i - ток якоря, Ф - поток, создаваемый обмоткой возбуждения, M - электромагнитный момент двигателя, MС - момент сопротивления движению, - скорость вращения вала двигателя, R - активное сопротивление якорной цепи, L - индуктивность якорной цепи, J - суммарный момент инерции якоря и нагрузки, С - коэффициент связи между скоростью и ЭДС, СМ - коэффициент связи между током якоря и электромагнитным моментом.
С точки зрения будущей модели, входными воздействиями являются напряжения якоря u и момент сопротивления движению MС , выходными переменными - электромагнитный момент двигателя M и скорость вращения вала двигателя , а переменными состояния - переменные стоящие под знаком производной: ток якоря i и скорость вращения вала двигателя . Остальные переменные, входящие в состав уравнений (1) - (4) являются параметрами, численные значения которых, необходимо будет задавать при проведении расчетов. Преобразуем дифференциальные уравнения (1) и (2) к явной форме Коши и выполним подстановку. Система уравнений примет вид:
Последнее уравнение есть отражение того факта, что переменная состояния является также и выходной переменной. Введем "машинные" переменные. Входные переменные: , . . Выходные переменные: , . , Переменные состояния: , . Тогда уравнения (5) - (8) примут вид:
Перепишем систему уравнений в матричной форме:
где
Отметим, что в получившейся системе уравнений входные переменные не участвуют в формировании выходных переменных (матрица обхода D - отсутствует) и, следовательно, параметр sizes.DirFeedthrough, определяемый при инициализации S-функции должен быть задан равным нулю. |