exponenta event banner

Ведение Level-1 S-функций MATLAB

Сведения о ведении S-функций Level-1 MATLAB

Примечание

Информация, представленная в этом разделе, предназначена только для использования при обслуживании существующих Level-1 MATLAB ® S-функций. Используйте более способный API Уровня 2, чтобы развивать новые S-функции MATLAB (см., Пишут Уровню 2 MATLAB S-Functions). Level-1 S-функции MATLAB поддерживают гораздо меньшее подмножество API S-функций, затем Level-2 S-функции MATLAB, и их функции ограничены по сравнению со встроенными блоками .

Уровень 1 MATLAB S-function - функция MATLAB следующей формы

[sys,x0,str,ts]=f(t,x,u,flag,p1,p2,...)

где f - имя S-функции. Во время моделирования модели модуль Simulink ® многократно вызываетf, с использованием flag для указания задачи (или задач), выполняемой для конкретного вызова. S-функция выполняет задачу и возвращает результаты в выходном векторе.

Шаблонная реализация S-функции Level-1 MATLAB, sfuntmpl.m, находится в папке matlabroot/toolbox/simulink/blocks. Шаблон состоит из функции верхнего уровня и набора скелетных локальных функций, называемых S-функциональными методами обратного вызова, каждый из которых соответствует определенному значению flag. Функция верхнего уровня вызывает локальную функцию, указанную flag. Локальные функции выполняют фактические задачи, требуемые для S-функции во время моделирования.

Level-1 Аргументы S-функции MATLAB

Движок Simulink передает следующие аргументы Level-1 MATLAB S-функции:

tТекущее время
xВектор состояния
uВходной вектор
flagЦелое значение, указывающее задачу, выполняемую S-функцией

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

Аргумент флага

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

Level-1 Выходные данные S-функции MATLAB

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

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

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

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

  • tsматрица из двух столбцов, содержащая время выборки и смещения блока (сведения о том, как задать время выборки и смещения, см. в разделе Указание времени выборки в 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-функционального блока

Чтобы механизм Simulink распознал Level-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-функции

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

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

Вы можете преобразовать Уровень 1 MATLAB S-functions в Уровень 2 MATLAB S-functions, нанеся на карту кодекс, связанный с каждым флагом S-функции Уровня 1 к соответствующему методу отзыва S-функции Уровня 2. Сопоставление флагов Level-1 с Level-2 методами обратного вызова см. в таблице «Аргументы флага». Кроме того:

  • Хранить дискретную информацию о состоянии для Level-2 S-функций MATLAB в векторах DWork, инициализированных в PostPropagationSetup способ.

  • Доступ параметры диалога Уровня 2 MATLAB S-function, используя DialogPrm свойство объекта времени выполнения вместо передачи их в S-функцию в качестве аргументов функции.

  • Для S-функций с переменным временем выборки обновите NextTimeHit свойство объекта времени выполнения в Outputs метод, чтобы установить следующий типовой хит времени для Уровня 2 MATLAB S-function.

Например, в следующей таблице показано, как преобразовать Level-1 S-функцию MATLAB. sfundsc2.m к Level-2 S-функции MATLAB. Пример использует шаблон Уровня 2 MATLAB S-function msfuntmpl_basic.m в качестве начальной точки при преобразовании Level-1 S-функции MATLAB. Номера строк в таблице соответствуют строкам кода в sfundsc2.m.

 sfundsc2_level2.m

Номер строкиКод в файле sfundsc2.mКодекс в файле (sfundsc2_level2.m) Уровня 2 MATLAB
1
function [sys,x0,str,ts]= ...
  sfundsc2(t,x,u,flag)
function sfundsc2(block)
  setup(block);
Синтаксис для function изменение строки для принятия одного входного аргумента block, который является объектом времени выполнения блока S-Function Level-2 MATLAB. Основная часть Уровня 2 MATLAB S-function содержит одну линию, которая звонит местному жителю setup функция.
13 - 19
switch flag,

case 0,
[sys,x0,str,ts] = ...
   mdlInitializeSizes;
function setup(block)
flag нулевое значение соответствует вызову setup способ. S-функция Level-2 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 функция также инициализирует атрибуты Level-2 MATLAB S-функции:
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;