Информация, предоставленная в этом разделе, предназначается только для использования в поддержании существующих S-функций Level 1 MATLAB®. Используйте более способный API Уровня 2, чтобы разработать новые S-функции MATLAB (см. Уровень 2 Записи S-функции MATLAB). Уровень 1 S-функции MATLAB поддерживают намного меньшее подмножество API S-функции затем Уровень 2 S-функции MATLAB, и их функции ограничиваются по сравнению со встроенными блоками.
Уровнем 1 S-функция MATLAB является функция MATLAB следующей формы
[sys,x0,str,ts]=f(t,x,u,flag,p1,p2,...)
где f является именем S-функции. Во время моделирования модели механизм Simulink® неоднократно вызывает f, с помощью аргумента flag, чтобы указать на задачу (или задачи), чтобы быть выполненным для конкретного вызова. S-функция выполняет задачу и возвращает результаты в выходном векторе.
Шаблонная реализация Уровня 1 S-функция MATLAB, sfuntmpl.m, находится в папке . Шаблон состоит из функции верхнего уровня и набора скелетных локальных функций, вызванных методы обратного вызова S-функции, каждый из которых соответствует особому значению matlabroot/toolbox/simulink/blocksflag. Функция верхнего уровня вызывает локальную функцию, обозначенную flag. Локальные функции выполняют фактические задачи, требуемые S-функции во время моделирования.
Механизм Simulink передает следующие аргументы Уровню 1 S-функция MATLAB:
t | 'CurrentTime' |
x | Вектор состояния |
u | Входной вектор |
флаг | Целочисленное значение, которое указывает на задачу, которая будет выполняться S-функцией |
Следующая таблица описывает значения, что flag может принять и перечисляет соответствующий Уровень 2 метод S-функции MATLAB для каждого значения.
Отметьте аргумент
| Уровень 1 Флаг | Уровень 2 Метод обратного вызова | Описание |
|---|---|---|
| 0 | настройка | Задает основные характеристики Блока s-function, включая частоты дискретизации, начальные условия непрерывных и дискретных состояний и массив sizes (см., Задают Характеристики Блока s-function для описания массива sizes). |
| 1 | mdlDerivatives | Вычисляет производные непрерывных переменных состояния. |
| 2 | mdlUpdate | Дискретные состояния обновлений, частоты дискретизации и главные требования временного шага. |
| 3 | mdlOutputs | Вычисляет выходные параметры S-функции. |
| 4 | Метод mdlOutputs обновляет свойство NextTimeHit объекта периода выполнения | Вычисляет время следующего хита в абсолютное время. Эта стандартная программа используется только, когда вы задаете переменную частоту дискретизации дискретного времени в методе setup. |
| 9 | mdlTerminate | Выполняет любые необходимые задачи конца моделирования. |
Уровень 1 S-функция MATLAB возвращает выходной вектор, содержащий следующие элементы:
sys, типичный возвращаемый аргумент. Возвращенные значения зависят от значения flag. Например, для flag = 3, sys содержит S-функцию выходные параметры.
x0, значения начального состояния (пустой вектор, при отсутствии состояний в системе). x0 проигнорирован, кроме тех случаев, когда flag = 0.
str, первоначально предназначенный для будущего использования. Уровень 1 S-функции MATLAB должны установить это на пустую матрицу, [].
ts, матрица двух-столбца, содержащая частоты дискретизации и смещения блока (см. Настройку времени выборки в Использовании Simulink для получения информации о том, как задать частоты дискретизации и смещения).
Например, если вы хотите, чтобы ваша S-функция запустилась на каждом временном шаге (время непрерывной выборки), установите ts на [0 0]. Если вы хотите, чтобы ваша S-функция запустилась на том же уровне как блок, с которым это соединяется (наследованная частота дискретизации), установите ts на [-1 0]. Если вы хотите, чтобы он запустил каждый 0.25 секунды (дискретная частота дискретизации) запускающийся в 0.1 спустя секунды после, времени начала моделирования, устанавливают ts на [0.25 0.1].
Можно создать S-функции, которые делают несколько задач, каждого на уровне различной частоты дискретизации (i. e., S-функция мультиуровня). В этом случае ts должен задать все частоты дискретизации, используемые вашей S-функцией в порядке возрастания частотой дискретизации. Например, предположите, что ваша S-функция выполняет одну задачу каждые 0,25 вторых запуска со времени начала моделирования и другой задачи каждый 1 второй запуск спустя 0.1 секунды после времени начала моделирования. В этом случае ваша S-функция должна установить ts, равный [.25 0; 1.0 .1]. Это заставит механизм Simulink, выполняют S-функцию в следующие разы: [0 0.1 0.25 0.5 0.75 1 1.1 ...]. Ваша S-функция должна решить в каждой частоте дискретизации который задача выполнить в той частоте дискретизации.
Можно также создать S-функцию, которая выполняет некоторые задачи постоянно (i. e., на каждом временном шаге) и другие в дискретных интервалах.
Для механизма Simulink, чтобы распознать Уровень 1 S-функция MATLAB, необходимо предоставить ему определенную информацию о S-функции. Эта информация включает количество входных параметров, выходных параметров, состояний и других блочных характеристик.
Чтобы предоставить эту информацию, вызовите функцию simsizes в начале S-функции.
sizes = simsizes;
Эта функция возвращает неинициализированную структуру sizes. Необходимо загрузить структуру sizes с информацией о S-функции. Таблица ниже приводит поля структуры sizes и описывает информацию, содержавшуюся в каждом поле.
Поля в Структуре размеров
| Имя поля | Описание |
|---|---|
sizes.NumContStates | Количество непрерывных состояний |
sizes.NumDiscStates | Количество дискретных состояний |
sizes.NumOutputs | Количество выходных параметров |
sizes.NumInputs | Количество входных параметров |
sizes.DirFeedthrough | Отметьте для прямого сквозного соединения |
sizes.NumSampleTimes | Количество частот дискретизации |
После того, как вы инициализируете структуру sizes, вызовите simsizes снова:
sys = simsizes(sizes);
Это передает информацию в структуре sizes к sys, вектор, который содержит информацию для использования механизмом Simulink.
При вызове Level 1 MATLAB S-function механизм Simulink всегда передает стандартные блочные параметры, t, x, u и flag, к S-функции как аргументы функции. Механизм может передать дополнительные специфичные для блока параметры, заданные пользователем к S-функции. Пользователь задает параметры в поле S-параметров-функции диалогового окна S-Function Block Parameters (см. Передающие Параметры к S-функциям). Если блочное диалоговое окно задает дополнительные параметры, механизм передает параметры S-функции как дополнительные аргументы функции. Дополнительные аргументы следуют за стандартными аргументами в списке S-аргументов-функции в порядке, в котором соответствующие параметры появляются в блочном диалоговом окне. Можно использовать эту специфичную для блока возможность S-параметра-функции позволить той же S-функции реализовывать различные опции обработки. Смотрите пример limintm.m в папке для примера S-функции, которая использует специфичные для блока параметры.matlabroot/toolbox/simulink/simdemos/simfeatures
Можно преобразовать Уровень 1 S-функции MATLAB в Уровень 2 S-функции MATLAB путем отображения кода, сопоставленного с каждым флагом S-функции Уровня 1 к соответствующему методу обратного вызова S-функции Уровня 2. См. таблицу Flag Arguments для отображения флагов Уровня 1 к методам обратного вызова Уровня 2. Кроме того:
Храните информацию дискретного состояния для Уровня 2 S-функции MATLAB в векторах DWork, инициализированных в методе PostPropagationSetup.
уровень доступа 2 Диалоговые параметры S-функции MATLAB с помощью свойства объекта периода выполнения DialogPrm, вместо того, чтобы передать их в S-функцию как аргументы функции.
Для S-функций с переменными частотами дискретизации обновите свойство объекта периода выполнения NextTimeHit в методе Outputs, чтобы установить следующий хит частоты дискретизации для Уровня 2 S-функция MATLAB.
Например, следующая таблица показывает, как преобразовать Уровень 1 S-функция MATLAB sfundsc2.m к Уровню 2 S-функция MATLAB. Пример использует Уровень 2 S-шаблон-функции MATLAB msfuntmpl_basic.m как отправная точка при преобразовании Уровня 1 S-функция MATLAB. Номера строки в таблице соответствуют строкам кода в sfundsc2.m m.
| Номер строки | Код в sfundsc2. m | Код в файле MATLAB Уровня 2 (sfundsc2_level2. m |
|---|---|---|
| 1 | function [sys,x0,str,ts]= ... sfundsc2(t,x,u,flag) | function sfundsc2(block) setup(block); function изменяется, чтобы принять один входной параметр block, который является Уровнем 2 объект периода выполнения Блока s-function MATLAB. Основная часть Уровня 2, S-функция MATLAB содержит одну строку, которая вызывает локальную функцию setup. |
| 13 - 19 | switch flag, case 0, [sys,x0,str,ts] = ... mdlInitializeSizes; | function setup(block) flag нуля соответствует вызову метода setup. Уровень 2 S-функция MATLAB не использует оператор switch, чтобы вызвать методы обратного вызова. Вместо этого локальный setup функционируют методы обратного вызова регистров, которые непосредственно называются во время моделирования. |
| 24 - 31 | case 2, sys = mdlUpdate(t,x,u); case 3, sys = mdlOutputs(t,x,u); | Функция setup регистрирует две локальных функции, сопоставленные со значениями flag 2 и 3.block.RegBlockMethod('Outputs' ,@Output);
block.RegBlockMethod('Update' ,@Update); |
| 53 - 66 | sizes = simsizes; sizes.NumContStates = 0; sizes.NumDiscStates = 1; sizes.NumOutputs = 1; sizes.NumInputs = 1; sizes.DirFeedthrough = 0; sizes.NumSampleTimes = 1; sys = simsizes(sizes); x0 = 0; str = []; ts = [.1 0]; | Функция setup также инициализирует атрибуты Уровня 2 S-функция MATLAB:block.NumInputPorts = 1; block.NumOutputPorts = 1; block.InputPort(1).Dimensions = 1; block.InputPort(1).DirectFeedthrough = false; block.OutputPort(1).Dimensions = 1; block.NumDialogPrms = 0; block.SampleTimes = [0.1 0]; setup указывает метод обратного вызова PostPropagationSetup, чтобы инициализировать вектор DWork и метод обратного вызова InitializeConditions, чтобы установить значение начального состояния.block.RegBlockMethod('PostPropagationSetup',...
@DoPostPropSetup);
block.RegBlockMethod('InitializeConditions', ...
@InitConditions); |
| 56 | sizes.NumDiscStates = 1; | Метод PostPropagationSetup инициализирует вектор DWork, который хранит единственное дискретное состояние.function DoPostPropSetup(block) %% Setup Dwork block.NumDworks = 1; block.Dwork(1).Name = 'x0'; block.Dwork(1).Dimensions = 1; block.Dwork(1).DatatypeID = 0; block.Dwork(1).Complexity = 'Real'; block.Dwork(1).UsedAsDiscState = true; |
| 64 | x0 = 0; | Метод InitializeConditions инициализирует значение дискретного состояния.function InitConditions(block) %% Initialize Dwork block.Dwork(1).Data = 0 |
| 77 - 78 | function sys = ... mdlUpdate(t,x,u) sys = u; | Метод Update вычисляет следующее значение дискретного состояния.function Update(block) block.Dwork(1).Data = block.InputPort(1).Data; |
| 88 - 89 | function sys = ... mdlOutputs(t,x,u) sys = x; | Метод Outputs вычисляет вывод S-функции.function Output(block) block.OutputPort(1).Data = block.Dwork(1).Data; |