Вы можете реализовать S-функцию или как М. Файл или MEX файл.
М-файл S-функции состоит из функции MATLAB следующей формы
[sys,x0,str,ts]=f(t,x,u,flag,p1,p2,...)
где f - имя S-функции,
t - текущее время,
x - вектор состояния, передаваемый блоком S-function,
u - входы блока,
flag-флажок указывает задачу, которая должна быть выполнена,
и p1, p2... - параметры блока.
В течение моделирования по модели,
Simulink неоднократно вызывает f, используя флажок, чтобы указать задачу, которая будет выполнена для данного обращения.
Стадии моделирования |
Подпрограмма S-функции |
Flag |
Инициализация |
mdlInitializeSizes |
flag =0 |
Вычисление времени следующего сэмплирования (только для переменного шага интегрирования ) |
mdlGetTimeOfNextVarHit |
flag =4 |
Вычисление выходов |
mdlOutputs |
flag =3 |
Модифицирует дискретные состояния |
mdlUpdate |
flag =2 |
Вычисление производных |
mdlDerivatives |
flag =1 |
Конец задач моделирования |
mdlTerminate |
flag =9 |
Рекомендуется, чтобы Вы следовали за структурой и соглашениями об именах шаблона при создании S-функций в M-файле. Это облегчит понимание структуры S-функции, которые Вы создаете.
Для понимания как должна протекать работа S-функций, рассмотрим простой пример.
Этот блок (timestwo) берет входной скалярный сигнал, удваивает его, и выводит на график.
Код M-файла, который содержит S-функцию, сделан на шаблоне S-функции, названном sfuntmpl.m, который включен с Simulink. Используя этот шаблон, Вы можете создать M-файл S-функции, которая очень близка по структуре к C MEX S-функции. Это полезно, потому что это делает переход от M-файла к созданию C MEX-файла намного проще.
Ниже - код M-файла для timestwo.m S-функции.
function [sys,x0,str,ts] = timestwo(t,x,u,flag)
% КОД M-ФАЙЛА ДЛЯ TIMESTWO.M S-ФУНКЦИИ
% ПРОВЕРИТЬ ФЛАЖОК. ОПЕРАТОР SWITCH УПРАВЛЯЕТ ВЫЗОВАМИ
% ПОДПРОГРАММ S-ФУНКЦИИ В КАЖДОЙ СТАДИИ МОДЕЛИРОВАНИЯ.
switch flag,
case 0
[sys, x0, str, ts] = mdlInitializeSizes; % ИНИЦИАЛИЗАЦИЯ
case 3
sys = mdlOutputs(t,x,u); % ВЫЧИСЛИТЬ ВЫХОДЫ
case {1,2,4,9} %Неиспользуемые значениЯ flag!!!
otherwise
error(['Неподдерживаемое значение flag = ',num2str(flag)]); % ОБРАБОТКА ОШИБОК
end;
% Конец функции timestwo.
% Ниже - подпрограммы S-функции (внутренние функции), которые вызывает timestwo.m.
%==============================================================
% ФУНКЦИЯ MDLINITIALIZESIZES ИНИЦИАЛИЗИРУЕТ СОСТОЯНИЯ,
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.