Поддержите уровень 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-функции.
4Метод mdlOutputs обновляет свойство 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 всегда передает стандартные параметры блоков, t, x, u и 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, который является Уровнем 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];
Поскольку эта 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;