Прямое сквозное соединение означает, что выходом (или переменный шаг расчета для переменных блоков шага расчета) управляет непосредственно значение сигнала входного порта. Как правило, порт S-входного-параметра-функции имеет прямое сквозное соединение если
Выходная функция (mdlOutputs
) функция входа u
. Таким образом, существует прямое сквозное соединение если вход u
получен доступ mdlOutputs
. Выходные параметры могут также включать выводы графических данных, как в случае осциллографа Графика XY.
“Время следующего хита” функция (mdlGetTimeOfNextVarHit
) из переменного шага расчета S-функция получает доступ к входу u.
Пример системы, которая требует ее входных параметров (то есть, имеет прямое сквозное соединение), операция
где u является входом, k является усилением, и y является выход.
Пример системы, которая не требует ее входных параметров (то есть, не имеет прямого сквозного соединения), алгоритм простой интеграции
где x является состоянием, производная состояния относительно времени, u является входом, и y является выход. Simulink® интегрирует переменную
Очень важно установить прямой проходной флаг правильно, потому что это влияет на порядок выполнения блоков в вашей модели и используется, чтобы обнаружить алгебраические циклы (см. Алгебраические Концепции Цикла в Использовании Simulink). Если результаты симуляции для модели, содержащей вашу S-функцию, не сходятся, или сбои симуляции, у вас может быть прямой проходной набор флага неправильно. Попытайтесь включить прямой проходной флаг и установить диагностику решателя Algebraic loop на warning
(см. Алгебраическую опцию цикла на Параметрах конфигурации Модели: страница с описанием Диагностики в Графическом интерфейсе пользователя Simulink). Впоследствии выполнение симуляции отображает любые алгебраические циклы в модели и показывает, поместил ли механизм вашу S-функцию в алгебраическом цикле.
Можно записать S-функцию, чтобы поддержать произвольные входные размерности. В этом случае механизм Simulink определяет фактические входные размерности, когда симуляция запускается путем оценки размерностей входных векторов, управляющих S-функцией. Ваша S-функция может также использовать входные размерности, чтобы определить количество непрерывных состояний, количество дискретных состояний и количество выходных параметров.
Динамически размерный вход может иметь различный размер для каждого экземпляра S-функции в конкретной модели или во время различных симуляций, однако входной размер каждого экземпляра S-функции является статическим в течение конкретной симуляции.
S-функция MEX C и S-функция Level 2 MATLAB® могут иметь несколько портов ввода и вывода, и каждый порт может иметь различные размерности. Количество размерностей и размер каждой размерности могут быть определены динамически.
Например, следующий рисунок показывает два экземпляра того же Блока s-function в модели.
Верхний Блок s-function управляется блоком с трехэлементным выходным вектором. Более низкий Блок s-function управляется блоком со скалярным выходом. Путем указывания, что Блок s-function динамически измерил входные параметры, та же S-функция может разместить обе ситуации. Механизм Simulink автоматически вызывает блок с соответственно размерным входным вектором. Точно так же, если другие характеристики блока, такие как количество выходных параметров или количество дискретных или непрерывных состояний, заданы так же динамически измеренные, механизм задает эти векторы, чтобы быть той же длиной как входной вектор.
Смотрите Порты Ввода и вывода для получения дополнительной информации о конфигурировании S-входного-параметра-функции и выходных портов.
И Уровень 2, MATLAB и S-функции MEX C предоставляют следующие возможности шага расчета, которые допускают высокую степень гибкости в определении, когда S-функция выполняется:
Время непрерывной выборки — Для S-функций, которые имеют непрерывные состояния и/или не произвели нулевые пересечения (видит Фазы Симуляции в Динамических системах для объяснения нулевых пересечений). Для этого типа S-функции выход изменяется в незначительных временных шагах.
Непрерывный, но зафиксированный в незначительном шаге расчета временного шага — Для S-функций, которые должны выполниться на каждом главном шаге симуляции, но не изменять значение во время незначительных временных шагов.
Дискретный шаг расчета — Если поведение вашей S-функции является функцией интервалов дискретного времени, можно задать шаг расчета, чтобы управлять, когда механизм Simulink вызывает S-функцию. Можно также задать смещение, которое задерживает каждый хит шага расчета. Значение смещения не может превысить соответствующий шаг расчета.
Хит шага расчета происходит во временных стоимостях, определенных формулой
TimeHit = (n * period) + offset
где целочисленный n
текущий шаг симуляции. Первое значение n
всегда нуль.
Если вы задаете дискретный шаг расчета, механизм вызывает S-функцию mdlOutputs
и mdlUpdate
стандартные программы при каждом хите шага расчета (как задано в предыдущем уравнении).
Переменный шаг расчета — дискретный шаг расчета, где интервалы между демонстрационными хитами могут варьироваться. В начале каждого шага симуляции S-функции с переменными шагами расчета запрошены в течение времени следующего хита.
Наследованный шаг расчета — Иногда S-функция не имеет никаких свойственных характеристик шага расчета (то есть, это или непрерывно или дискретно, в зависимости от шага расчета некоторого другого блока в системе). В этом случае можно указать, что шаг расчета наследован. Простым примером этого является блок Gain, который наследовал его шаг расчета от блока, управляющего им.
S-функция может наследовать свой шаг расчета от
Ведущий блок
Целевой блок
Самый быстрый шаг расчета в системе
Задавать шаг расчета S-функции наследовано, используйте-1 на Уровне 2 S-функции MATLAB и INHERITED_SAMPLE_TIME
в S-функциях MEX C как шаг расчета. Для получения дополнительной информации о распространении шагов расчета смотрите, Как Распространение Влияет на Наследованные Шаги расчета в Руководстве пользователя Simulink.
S-функции могут быть или одной или многоскоростными; многоскоростная S-функция имеет несколько шагов расчета.
Шаги расчета заданы в парах в этом формате: 'SampleTime'
'OffsetTime'
].
Допустимые пары шага расчета для 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-функция MEX C имеет только одну пару шага расчета, также
[INHERITED_SAMPLE_TIME, 0.0]
или
[INHERITED_SAMPLE_TIME, FIXED_IN_MINOR_STEP_OFFSET]
где
INHERITED_SAMPLE_TIME = -1.0
Допустимые пары шага расчета для Уровня 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'SampleTime' .
Непрерывная S-функция, которая не изменяется во время незначительных этапов интеграции, должна указать [CONTINUOUS_SAMPLE_TIME, FIXED_IN_MINOR_STEP_OFFSET]
'SampleTime' .
Дискретная 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
стандартная программа называется, чтобы получить время следующего демонстрационного хита для переменного шага дискретная задача. На Уровне 2 S-функция MATLAB, NextTimeHit
свойство установлено в Outputs
метод, чтобы установить следующий демонстрационный хит.
Если ваша S-функция не имеет никакого внутреннего шага расчета, необходимо указать, что шаг расчета наследован. Существует два случая:
S-функция, которая изменяется как ее вход изменения, даже во время незначительных этапов интеграции, должна указать [INHERITED_SAMPLE_TIME, 0.0]
'SampleTime' .
S-функция, которая изменяется как ее вход, изменяется, но не изменяется во время незначительных этапов интеграции (то есть, остается фиксированным во время незначительных временных шагов), должен указать [INHERITED_SAMPLE_TIME, FIXED_IN_MINOR_STEP_OFFSET]
'SampleTime' .
Блок Scope является хорошим примером этого типа блока. Этот блок запускается по курсу его ведущего блока, или непрерывного или дискретного, но никогда не запускается на незначительных шагах. Если бы это сделало, отображение осциллографа показало бы промежуточные расчеты решателя, а не конечного результата в каждом моменте времени.
Смотрите Задают Шаги расчета S-функции для получения информации о реализации различных типов шагов расчета в S-функциях.
Level-2 MATLAB S-Function | MATLAB Function | S-Function | S-Function Builder