% ВРЕМЯ СЭМПЛИРОВАНИЯ, И УСТАНАВЛИВАЕТ РАЗМЕРЫ СТРУКТУРЫ.
%==============================================================
function [sys,x0,str,ts] = mdlInitializeSizes
% Вызвать функцию simsizes, чтобы создать структуру размеров.
sizes = simsizes;
% Загрузить структуру размеров информацией инициализации.
sizes.NumContStates= 0;
sizes.NumDiscStates= 0;
sizes.NumOutputs= 1;
sizes.NumInputs= 1;
sizes.DirFeedthrough=1;
sizes.NumSampleTimes=1;
%% Вызвать функцию simsizes, чтоб загрузить вектор sys информацией размеров.
sys = simsizes(sizes);
x0 = []; % Нет непрерывных состоЯний
str = []; % str- параметр, зарезервированный длЯ будущего использованиЯ.
%М S-функциЯ должна установить равным пустой матрице, [].
%
ts = [-1 0]; % времЯ сэмплированиЯ
% Конец mdlInitializeSizes.
%==============================================================
% ФУНКЦИЯ MDLOUTPUTS ИСПОЛНЯЕТ ВЫЧИСЛЕНИЯ.
%==============================================================
function sys = mdlOutputs(t,x,u)
%
sys = 2*u;
% Конец mdlOutputs.
Чтобы проверять эту S-функцию в Simulink, подключите генератор синусоидальной волны к входу блока S-Function. Подключите выход блока S-Function к блоку Scope (построение графика). Выполните двойной щелчок на блоке S-Function, чтобы открыть диалоговое окно.
|
|
Теперь Вы можете выполнить моделирование.
Простой пример, обсужденный выше (timestwo) не имеет никаких состояний. Большинство блоков S-функции требует обработки состояний, или непрерывных или дискретных. Далее обсуждается четыре типа систем, которые Вы можете моделировать в S-функциях, используя Simulink:
Continuous-Непрерывная
Discrete-Дискретная
Hybrid-Гибридная
Variable-step- С переменным шагом сэмплирования.
Все примеры основаны на шаблоне S-функции M-файла, находящемся в sfuntmpl.m.
Simulink включает функцию, названную csfunc.m, который является примером непрерывной системы в пространстве состояний, смоделированной в S-функции. Вот - код для S-функции M-файла.
function [sys,x0,str,ts] = csfunc(t,x,u,flag)
% CSFUNC S-функциЯ примера, чтобы определЯть систему
% с непрерывными уравнениЯми состоЯниЯ:
% x' = Ax + Bu
% y = Cx + Du
%
% Генерировать непрерывную линейную систему:
A=[-0.09 -0.01
1 -0.01];
B=[ 1 -7
0 -2];
C=[ 0 2
1 -5];
D=[-3 0
1 0];
%
% Проверить флажок.
%
switch flag,
case 0
[sys,x0,str,ts]=mdlInitializeSizes(A,B,C,D); % ИнициализациЯ
case 1
sys = mdlDerivatives(t,x,u,A,B,C,D); % Вычислить производные
case 3
sys = mdlOutputs(t,x,u,A,B,C,D); % Вычислить выходы
case { 2, 4, 9 } % Неиспользованные флажки
sys = [];
otherwise
error(['Unhandled flag = ',num2str(flag)]); % Обработка ошибки
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.