Применение S-функций в Simulink, страница 6

% ВРЕМЯ СЭМПЛИРОВАНИЯ, И УСТАНАВЛИВАЕТ РАЗМЕРЫ СТРУКТУРЫ.

%==============================================================

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, чтобы открыть диалоговое окно.

Если есть дополнительные параметры,  введите их здесь через запятые. В данном примере их нет.

 

Введите имя S-функции.

 

Теперь Вы можете  выполнить  моделирование.


Примеры S-функций, созданных в виде M-файла.

Простой пример, обсужденный выше (timestwo) не имеет никаких состояний. Большинство блоков S-функции требует обработки состояний, или непрерывных или дискретных. Далее обсуждается четыре типа систем, которые Вы можете моделировать в S-функциях, используя Simulink:

Continuous-Непрерывная

Discrete-Дискретная

Hybrid-Гибридная

Variable-step- С переменным шагом сэмплирования.

Все примеры основаны на шаблоне S-функции M-файла, находящемся в sfuntmpl.m.

Пример - S-функция с непрерывными состояниями.

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)]); % Обработка ошибки