Главная страница

И.В.Черных. Simulink. И. В. Черных. "Simulink Инструмент моделирования динамических систем"


Скачать 3.7 Mb.
НазваниеИ. В. Черных. "Simulink Инструмент моделирования динамических систем"
Дата21.09.2022
Размер3.7 Mb.
Формат файлаdoc
Имя файлаИ.В.Черных. Simulink.doc
ТипДокументы
#689048
страница20 из 26
1   ...   16   17   18   19   20   21   22   23   ...   26

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.6 Модель с S-функцией dsfunc

[Скачать пример]

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 Модель с S-функцией mixedm

[Скачать пример]

16.7.6. Непрерывная модель электродвигателя постоянного тока независимого возбуждения

В данном параграфе на примере двигателя постоянного тока независимого возбуждения (ДПТ НВ) рассмотрим создание S-функции для модели реального объекта.

16.7.6.1. Математическое описание ДПТ НВ

Двигатель постоянного тока независимого возбуждения (рис. 16.9), описывается следующей системой дифференциальных и алгебраических уравнений в абсолютных единицах:



(1)



(2)



(3)



(4)

где

u - напряжение на якорной обмотке двигателя,

e - электродвижущая сила (ЭДС) якоря,

i - ток якоря,

Ф - поток, создаваемый обмоткой возбуждения,

M - электромагнитный момент двигателя,

MС - момент сопротивления движению,

- скорость вращения вала двигателя,

R - активное сопротивление якорной цепи,

L - индуктивность якорной цепи,

J - суммарный момент инерции якоря и нагрузки,

С - коэффициент связи между скоростью и ЭДС,

СМ - коэффициент связи между током якоря и электромагнитным моментом.



Рис. 16.9 Двигатель постоянного тока с независимым возбуждением.

С точки зрения будущей модели, входными воздействиями являются напряжения якоря u и момент сопротивления движению MС , выходными переменными - электромагнитный момент двигателя M и скорость вращения вала двигателя , а переменными состояния - переменные стоящие под знаком производной: ток якоря i и скорость вращения вала двигателя . Остальные переменные, входящие в состав уравнений (1) - (4) являются параметрами, численные значения которых, необходимо будет задавать при проведении расчетов.

Преобразуем дифференциальные уравнения (1) и (2) к явной форме Коши и выполним подстановку. Система уравнений примет вид:



(5)



(6)



(7)



(8)

Последнее уравнение есть отражение того факта, что переменная состояния является также и выходной переменной.

Введем "машинные" переменные. Входные переменные:

, . .

Выходные переменные:

, . ,

Переменные состояния:

, .

Тогда уравнения (5) - (8) примут вид:



(9)



(10)



(11)



(12)

Перепишем систему уравнений в матричной форме:



(13)



(14)

где

,

,

.

Отметим, что в получившейся системе уравнений входные переменные не участвуют в формировании выходных переменных (матрица обхода D - отсутствует) и, следовательно, параметр sizes.DirFeedthrough, определяемый при инициализации S-функции должен быть задан равным нулю.
1   ...   16   17   18   19   20   21   22   23   ...   26


написать администратору сайта