Концепции S-функций

Прямое сквозное соединение

Прямое сквозное соединение означает, что выход (или переменный шаг расчета для блоков переменного шага расчета) управляется непосредственно значением сигнала входа порта. Обычно входной порт S-функции имеет прямое сквозное соединение, если

  • Выходная функция (mdlOutputs) является функцией входа u. То есть существует прямое сквозное соединение, если вход u доступ к нему осуществляется по mdlOutputs. Выходы могут также включать графические выходы, как в случае возможностей графика XY.

  • Функция «время следующего попадания» (mdlGetTimeOfNextVarHit) переменного шага расчета S-функция обращается к входу u.

Примером системы, которая требует своих входов (то есть имеет прямое сквозное соединение), является операция

y=k×u,

где u - вход, k - усиление, а y - выход.

Примером системы, которая не требует своих входов (то есть не имеет прямого сквозного соединения), является простой алгоритм интегрирования

y=x,

x˙=u,

где x - состояние ,x˙ является производной состояния относительно времени, u является входом, и y является выходом. Simulink® интегрирует переменную x˙.

Очень важно правильно задать флаг прямой передачи, потому что он влияет на порядок выполнения блоков в вашей модели и используется для обнаружения алгебраических циклов (см. Концепции Алгебраического цикла в Using Simulink). Если результаты симуляции для модели, содержащей вашу S-функцию, не сходятся, или симуляция прекращает работать, у вас может быть неправильно установлен флаг прямой передачи. Попробуйте включить флаг прямой передачи и установите диагностику Algebraic loop решателя на warning (см. опцию Алгебраического цикла на странице «Параметры конфигурации модели: диагностика» в графическом интерфейсе пользователя Simulink). Впоследствии выполнение симуляции отображает любые алгебраические циклы в модели и показывает, поместил ли двигатель вашу S-функцию в алгебраический цикл.

Динамический размер массивов

Можно записать S-функцию, чтобы поддержать произвольные входные размерности. В этом случае механизм Simulink определяет фактические входные размерности, когда симуляция начинается путем оценки размерностей входных векторов, приводящих в действие S-функцию. Ваша S-функция может также использовать входные размерности, чтобы определить количество непрерывных состояний, количество дискретных состояний и количество выходов.

Примечание

Динамический вход может иметь разный размер для каждого образца S-функции в конкретной модели или во время различных симуляций, однако вход каждого образца S-функции является статическим в течение определенного симуляции.

S-функция MEX на C и Level-2 MATLAB® S-функция может иметь несколько входных и выходных портов, и каждый порт может иметь различные размерности. Количество размерностей и размер каждой размерности могут быть определены динамически.

Например, на следующем рисунке показаны два образцов одного и того же блока S-Function в модели.

Верхний блок S-Function управляется блоком с трехэлементным выходным вектором. Нижний блок S-Function управляется блоком с выходом скаляра. Указывая, что блок S-Function имеет динамические входы, та же S-функция может включать обе ситуации. Механизм Simulink автоматически вызывает блок с соответствующим размером входного вектора. Точно так же, если другие характеристики блока, такие как количество выходов или количество дискретных или непрерывных состояний, заданы как динамически определенные, механизм определяет эти векторы как ту же длину, что и входной вектор.

Смотрите Входные и Выходные Порты для получения дополнительной информации о конфигурировании входных и выходных портов S-функции.

Установка шагов расчета и смещения

Оба Level-2 MATLAB и C MEX S-функции обеспечивают следующие опции шага расчета, которые позволяют получить высокую степень гибкости при определении, когда S-функция выполняется:

  • Непрерывный шаг расчета - Для S-функций, которые имеют непрерывные состояния и/или неавторизованные пересечения нуля (см. Фазы моделирования в динамических системах для объяснения пересечений нуля). Для этого типа S-функции выход изменяется в незначительных временных шагах.

  • Непрерывный, но фиксированный во незначительном временном шаге шаг расчета - Для S-функций, которые должны выполняться на каждом главном шаге симуляции, но не изменяют значение во время незначительных временных шагов.

  • Дискретный шаг расчета - Если поведение вашей S-функции является функцией дискретных временных интервалов, можно задать шаг расчета для управления, когда механизм Simulink вызывает S-функцию. Можно также задать смещение, которое задерживает каждый шаг расчета столкновение. Значение смещения не может превысить соответствующий шаг расчета.

    Попадание шаг расчета происходит в значениях времени, определяемых формулой

    TimeHit = (n * period) + offset
    

    где целое число n - текущий шаг симуляции. Первое значение n всегда равен нулю.

    Если вы задаете дискретный шаг расчета, двигатель вызывает S-функцию mdlOutputs и mdlUpdate стандартные программы в каждом попадании шаг расчета (как определено в предыдущем уравнении).

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

  • Наследуемый шаг расчета - Иногда S-функция не имеет присущих шагов расчета характеристик (то есть она либо непрерывна, либо дискретна, в зависимости от шага расчета некоторого другого блока в системе). В этом случае можно указать, что шаг расчета наследуется. Простым примером этого является блок Gain, который наследует свой шаг расчета от блока, управляющего им.

    S-функция может наследовать свой шаг расчета от

    • Ведущий блок

    • Блок назначения

    • Самый быстрый шаг расчета в системе

    Чтобы задать шаг расчета S-функции, используйте -1 в Level-2 MATLAB S-функциях и INHERITED_SAMPLE_TIME в C MEX S-функции в качестве шага расчета. Для получения дополнительной информации о распространении шагов расчета смотрите «Как распространение влияет на унаследованные шаги расчета» в Руководстве пользователя Simulink.

S-функции могут быть как одинарными, так и многократными; многократная S-функция имеет несколько шагов расчета.

Шаги расчета заданы парами в таком формате: [sample_time, offset_time].

Допустимые функции MEX S Шагов расчета

Допустимые пары шага расчета для S-функции MEX на C:

[CONTINUOUS_SAMPLE_TIME, 0.0]
[CONTINUOUS_SAMPLE_TIME, FIXED_IN_MINOR_STEP_OFFSET]
[discrete_sample_time_period, offset]
[VARIABLE_SAMPLE_TIME, 0.0]

где

CONTINUOUS_SAMPLE_TIME = 0.0
FIXED_IN_MINOR_STEP_OFFSET = 1.0
VARIABLE_SAMPLE_TIME = -2.0

и имена переменных курсивом указывают, что требуется действительное значение.

Кроме того, можно задать, что шаг расчета наследуется от ведущего блока. В этом случае S-функция C MEX имеет только одну пару шага расчета, или

[INHERITED_SAMPLE_TIME, 0.0]

или

[INHERITED_SAMPLE_TIME, FIXED_IN_MINOR_STEP_OFFSET]

где

INHERITED_SAMPLE_TIME = -1.0

Допустимый Level-2 MATLAB S-Function Шагов расчета

Допустимые пары шага расчета для Level-2 S-функции MATLAB

[0 offset]                            % Continuous sample time
[discrete_sample_time_period, offset] % Discrete sample time
[-1, 0]                               % Inherited sample time
[-2, 0]                               % Variable sample time

где имена переменных курсивом указывают, что требуется действительное значение. При использовании непрерывного шага расчета offset от 1 указывает, что выход фиксирован в незначительных временных шагах интегрирования. Система координат offset от 0 указывает изменения выхода на каждом незначительном временном шаге интегрирования.

Инструкции по выбору шага расчета

Используйте следующие инструкции для справки с указанием шагов расчета:

  • Непрерывная S-функция, которая изменяется во время незначительных шагов интегрирования, должна регистрировать [CONTINUOUS_SAMPLE_TIME, 0.0] шаг расчета.

  • Непрерывная S-функция, которая не меняется во время незначительных шагов интегрирования, должна зарегистрировать [CONTINUOUS_SAMPLE_TIME, FIXED_IN_MINOR_STEP_OFFSET] Шаг расчета.

  • Дискретная S-функция, которая изменяется с заданной скоростью, должна регистрировать дискретную пару шага расчета, [discrete_sample_time_period, offset], где

    discrete_sample_period > 0.0 
    

    и

    0.0 ≤ offset < discrete_sample_period
    
  • Дискретная S-функция, которая изменяется с переменной скоростью, должна регистрировать дискретный шаг расчета переменного шага.

    [VARIABLE_SAMPLE_TIME, 0.0]
    

    В S-функции MEX на C mdlGetTimeOfNextVarHit Стандартная программа вызывается, чтобы получить время следующей выборки хита для дискретной задачи с переменным шагом. В Level-2 S-функции MATLAB NextTimeHit свойство установлено в Outputs метод для установки следующего выброса выборки.

Если ваша S-функция не имеет внутреннего шага расчета, вы должны указать, что ваш шаг расчета унаследован. Существует два случая:

  • S-функция, которая изменяется по мере изменения входных параметров, даже во время незначительных шагов интегрирования, должна зарегистрировать [INHERITED_SAMPLE_TIME, 0.0] Шаг расчета.

  • S-функция, которая изменяется по мере изменения входов, но не изменяется во время незначительных шагов интегрирования (то есть остается фиксированной во время незначительных временных шагов), должна зарегистрировать [INHERITED_SAMPLE_TIME, FIXED_IN_MINOR_STEP_OFFSET] Шаг расчета.

    Блок Scope является хорошим примером этого типа блока. Этот блок запускается со скоростью своего ведущего блока, непрерывным или дискретным, но никогда не запускается мелкими шагами. Если это так, возможностям дисплей покажет промежуточные расчеты решателя, а не конечный результат в каждой временной точке.

Смотрите Specify S-Function Sample Time для получения информации о реализации различных типов шагов расчета в S-функциях.

См. также

| | |

Похожие темы