Обеспечьте уровень 1 S-функции MATLAB

Об обслуживании уровня 1 S-функции MATLAB

Примечание

Информация, предоставленная в этом разделе, предназначается только для использования в поддержании существующих 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, находится в папке matlabroot/toolbox/simulink/blocks. Шаблон состоит из функции верхнего уровня и набора скелетных локальных функций, вызванных методы коллбэка S-функции, каждый из которых соответствует особому значению flag. Функция верхнего уровня вызывает локальную функцию, обозначенную flag. Локальные функции выполняют фактические задачи, требуемые S-функции в процессе моделирования.

Уровень 1 S-аргументы-функции MATLAB

Механизм Simulink передает следующие аргументы Уровню 1 S-функция MATLAB:

t'CurrentTime'
xВектор состояния
uВходной вектор
flagЦелочисленное значение, которое указывает на задачу, которая будет выполняться S-функцией

Следующая таблица описывает значения что flag может принять и перечисляет соответствующий Уровень 2 метод S-функции MATLAB для каждого значения.

Отметьте аргумент

Уровень 1 ФлагУровень 2 Метод коллбэкаОписание
0setupЗадает основные характеристики Блока s-function, включая шаги расчета, начальные условия непрерывных и дискретных состояний и sizes массив (см., Задает Характеристики Блока s-function для описания sizes массив.
1mdlDerivativesВычисляет производные непрерывных переменных состояния.
2mdlUpdateДискретные состояния обновлений, шаги расчета и главные требования временного шага.
3mdlOutputsВычисляет выходные параметры S-функции.
4mdlOutputs метод обновляет объект периода выполнения NextTimeHit свойствоВычисляет время следующего хита в абсолютное время. Эта стандартная программа используется только, когда вы задаете переменный шаг расчета дискретного времени в setup метод.
9mdlTerminateВыполняет любые необходимые задачи конца симуляции.

Уровень 1 S-функция MATLAB Выходные параметры

Уровень 1 S-функция MATLAB возвращает выходной вектор, содержащий следующие элементы:

  • sys, типовой возвращаемый аргумент. Возвращенные значения зависят от flag значение. Например, для flag = 3, sys содержит S-функцию выходные параметры.

  • x0, значения начального состояния (пустой вектор, при отсутствии состояний в системе). x0 проигнорирован, кроме тех случаев, когда flag = 0.

  • str, первоначально предназначенный для будущего использования. Уровень 1 S-функции MATLAB должны установить это на пустую матрицу, [].

  • ts, матрица 2D столбца, содержащая шаги расчета и смещения блока (см. Настройку времени выборки в Использовании Simulink для получения информации о том, как задать шаги расчета и смещения).

    Например, если вы хотите, чтобы ваша S-функция запустилась на каждом временном шаге (время непрерывной выборки), установите ts к [0 0]. Если вы хотите, чтобы ваша S-функция запустилась на том же уровне как блок, с которым это соединяется (наследованный шаг расчета), установите ts к [-1 0]. Если вы хотите, чтобы он запустил каждый 0.25 секунды (дискретный шаг расчета) запускающийся в 0.1 спустя секунды после времени начала симуляции, набор ts к [0.25 0.1].

    Можно создать S-функции, которые делают несколько задач, каждого на уровне различной частоты дискретизации (т.е. многоскоростная 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-функцию, которая выполняет некоторые задачи постоянно (т.е. на каждом временном шаге) и другие в дискретных интервалах.

Задайте характеристики блока s-function

Для механизма 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.

Обработка S-параметров-функции

При вызове Level 1 MATLAB S-function механизм Simulink всегда передает стандартные параметры блоков, tXU, и flag, к S-функции как аргументы функции. Механизм может передать дополнительные специфичные для блока параметры, заданные пользователем к S-функции. Пользователь задает параметры в поле S-function parameters диалогового окна S-Function Block Parameters (см. Передающие Параметры к S-функциям). Если диалоговое окно блока задает дополнительные параметры, механизм передает параметры S-функции как дополнительные аргументы функции. Дополнительные аргументы следуют за стандартными аргументами в списке S-аргументов-функции в порядке, в котором соответствующие параметры появляются в диалоговом окне блока. Можно использовать эту специфичную для блока возможность S-параметра-функции позволить той же S-функции реализовывать различные опции обработки. Смотрите limintm.m пример в папке matlabroot/toolbox/simulink/simdemos/simfeatures для примера S-функции, которая использует специфичные для блока параметры.

Преобразуйте уровень 1 S-функции MATLAB в уровень 2

Можно преобразовать Уровень 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.

Номер строкиКод в 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, который является объектом периода выполнения блока Level-2 MATLAB S-function. Основная часть Уровня 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];
Поскольку эта S-функция имеет дискретные состояния, 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 Outputs(block)
block.OutputPort(1).Data = block.Dwork(1).Data;