Прямое сквозное соединение означает, что выводом (или переменный шаг расчета для переменных блоков шага расчета) управляет непосредственно значение сигнала входного порта. Как правило, порт 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-функция имеет несколько шагов расчета.
Шаги расчета заданы в парах в этом формате: [sample_time
, offset_time
].
Допустимые пары шага расчета для 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
] шаг расчета.
Непрерывная 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
называется, чтобы получить время следующего демонстрационного хита для переменного шага дискретная задача. На Уровне 2 S-функция MATLAB свойство NextTimeHit
собирается в методе Outputs
установить следующий демонстрационный хит.
Если ваша S-функция не имеет никакого внутреннего шага расчета, необходимо указать, что шаг расчета наследован. Существует два случая:
S-функция, которая изменяется как ее вход изменения, даже во время незначительных этапов интеграции, должна указать шаг расчета [INHERITED_SAMPLE_TIME, 0.0]
.
S-функция, которая изменяется как ее вход, изменяется, но не изменяется во время незначительных этапов интеграции (то есть, остается фиксированным во время незначительных временных шагов), должен указать шаг расчета [INHERITED_SAMPLE_TIME, FIXED_IN_MINOR_STEP_OFFSET]
.
Блок Scope является хорошим примером этого типа блока. Этот блок запускается по курсу его ведущего блока, или непрерывного или дискретного, но никогда не запускается на незначительных шагах. Если бы это сделало, отображение осциллографа показало бы промежуточные вычисления решателя, а не конечного результата в каждом моменте времени.
Смотрите Задают Шаги расчета S-функции для получения информации о реализации различных типов шагов расчета в S-функциях.
Уровень 2 S-функция MATLAB | Функция MATLAB | S-функция | Разработчик S-функции