Поддержите уровень 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Входной вектор
флагЦелочисленное значение, которое указывает на задачу, которая будет выполняться S-функцией

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

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

Уровень 1 ФлагУровень 2 Метод обратного вызоваОписание
0настройкаЗадает основные характеристики Блока 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, матрица двух-столбца, содержащая частоты дискретизации и смещения блока (см. Настройку времени выборки в Использовании 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., на каждом временном шаге) и другие в дискретных интервалах.

Задайте характеристики блока 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-параметров-функции диалогового окна 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 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 Output(block)
block.OutputPort(1).Data = block.Dwork(1).Data;
Была ли эта тема полезной?