Прямой проход означает, что выходной сигнал (или переменное время выборки для переменных временных блоков выборки) управляется непосредственно значением сигнала входного порта. Как правило, входной порт S-функции имеет прямой канал, если
Функция вывода (mdlOutputs) - функция входа u. То есть существует прямой проход, если вход u имеет доступ к mdlOutputs. Выходные данные могут также включать графические выходные данные, как в случае области XY Graph.
Функция «Время следующего попадания» (mdlGetTimeOfNextVarHit) переменного времени выборки S-функция обращается к входу u.
Примером системы, которая требует своих входов (то есть имеет прямой проход), является операция
× u,
где u - входной сигнал, k - коэффициент усиления, а y - выходной сигнал.
Примером системы, которая не требует своих входов (то есть не имеет прямого прохождения), является простой алгоритм интеграции
x,
где x - состояние, - производная состояния относительно времени, u - вход, а y - выход. Simulink ® интегрирует переменные .
Очень важно правильно установить флаг прямого прохождения, поскольку он влияет на порядок выполнения блоков в модели и используется для обнаружения алгебраических циклов (см. Алгебраические концепции цикла в разделе Использование Simulink). Если результаты моделирования для модели, содержащей S-функцию, не сходятся или моделирование не выполняется, возможно, установлен неверный флаг прямого прохождения. Попробуйте включить флаг прямого прохождения и установить диагностику алгебраического решателя цикла в warning (см. параметр Алгебраический цикл на справочной странице Параметры конфигурации модели: Диагностика в графическом интерфейсе пользователя Simulink). Затем при моделировании отображаются все алгебраические циклы в модели и показано, поместил ли движок свою S-функцию в алгебраический цикл.
Можно записать S-функцию для поддержки произвольных входных измерений. В этом случае механизм Simulink определяет фактические входные размеры при запуске моделирования путем оценки размеров входных векторов, управляющих S-функцией. S-функция также может использовать входные размеры для определения числа непрерывных состояний, количества дискретных состояний и количества выходов.
Примечание
Динамически размерный ввод может иметь различный размер для каждого экземпляра S-функции в конкретной модели или во время различных моделирований, однако входной размер каждого экземпляра S-функции является статическим в течение конкретного моделирования.
У C MEX S-функция и S-функция Level 2 MATLAB® может быть несколько портов входа и выхода, и у каждого порта могут быть различные размеры. Количество размеров и размер каждого размера могут определяться динамически.
Например, на следующем рисунке показаны два экземпляра одного блока S-Function в модели.

Верхний S-функциональный блок управляется блоком с трехэлементным выходным вектором. Нижний S-функциональный блок управляется блоком со скалярным выходом. Указывая, что S-функциональный блок имеет динамически размерные входы, одна и та же S-функция может учитывать обе ситуации. Модуль Simulink автоматически вызывает блок с соответствующим входным вектором. Аналогично, если другие характеристики блока, такие как количество выходов или количество дискретных или непрерывных состояний, задаются динамически, механизм определяет эти векторы такой же длины, как входной вектор.
Дополнительные сведения о конфигурировании портов ввода и вывода S-функций см. в разделе Порты ввода и вывода.
И Уровень 2 MATLAB и C MEX S-функции предоставляют следующие типовые возможности времени, которые допускают высокую степень гибкости в определении, когда S-функция выполняет:
Время непрерывной выборки (Continuous sample time) - для S-функций, которые имеют непрерывные состояния и/или невыбранные пересечения нуля (описание пересечений нуля см. в разделе Фазы моделирования в динамических системах). Для этого типа S-функции выходные данные изменяются во второстепенных временных шагах.
Непрерывное, но фиксированное во второстепенном временном шаге время выборки - для S-функций, которые должны выполняться на каждом крупном шаге моделирования, но не изменять значение во второстепенных временных шагах.
Время дискретной выборки - если поведение S-функции является функцией дискретных временных интервалов, можно определить время выборки для управления, когда механизм Simulink вызывает S-функцию. Можно также определить смещение, которое задерживает каждое попадание в выборку. Значение смещения не может превышать соответствующее время выборки.
Попадание во время выборки происходит при значениях времени, определяемых формулой
TimeHit = (n * period) + offset
где целое число n является текущим этапом моделирования. Первое значение n всегда равно нулю.
При определении времени дискретной выборки механизм вызывает S-функцию. mdlOutputs и mdlUpdate процедуры при каждом попадании во время выборки (как определено в предыдущем уравнении).
Переменное время выборки (Variable sample time) - дискретное время выборки, в течение которого интервалы между попаданиями выборки могут изменяться. В начале каждого этапа моделирования S-функции с переменным временем выборки запрашиваются на время следующего попадания.
Наследуемое время выборки - иногда S-функция не имеет присущих ей временных характеристик выборки (то есть является либо непрерывной, либо дискретной, в зависимости от времени выборки какого-либо другого блока в системе). В этом случае можно указать, что время выборки наследуется. Простым примером этого является блок усиления, который наследует время выборки от блока, приводящего его в действие.
S-функция может наследовать время выборки от
Приводной блок
Блок назначения
Самое быстрое время выборки в системе
Чтобы указать унаследованное время выборки S-функции, используйте -1 в Level-2 MATLAB S-функций и INHERITED_SAMPLE_TIME в C MEX S-функции как время выборки. Дополнительные сведения о распространении времени выборки см. в разделе Как распространение влияет на унаследованное время выборки в руководстве пользователя Simulink.
S-функции могут быть односкоростными или многоскоростными; многоскоростная S-функция имеет несколько времен выборки.
Время выборки задается парами в следующем формате: [sample_time, offset_time].
Допустимые пары времени выборки для S-функции C MEX:
[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 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]
В C MEX S-функции mdlGetTimeOfNextVarHit вызывается подпрограмма для получения времени следующего попадания выборки для дискретной задачи с переменным шагом. В Level-2 MATLAB S-функции NextTimeHit свойство установлено в Outputs способ установки следующего совпадения образца.
Если S-функция не имеет собственного времени выборки, необходимо указать, что время выборки унаследовано. Существует два случая:
S-функция, которая изменяется по мере изменения ее входных данных, даже во время незначительных шагов интеграции, должна регистрировать [INHERITED_SAMPLE_TIME, 0.0] время выборки.
S-функция, которая изменяется по мере изменения входных данных, но не изменяется во время второстепенных шагов интеграции (то есть остается фиксированной во время второстепенных шагов времени), должна зарегистрировать [INHERITED_SAMPLE_TIME, FIXED_IN_MINOR_STEP_OFFSET] время выборки.
Блок Scope является хорошим примером этого типа блоков. Этот блок работает со скоростью его управляющего блока, либо непрерывного, либо дискретного, но никогда не выполняется небольшими шагами. В этом случае на экране области будут отображаться промежуточные вычисления решателя, а не конечный результат в каждый момент времени.
Сведения о реализации различных типов времени выборки в S-функциях см. в разделе Определение времени выборки S-функции.
Level-2 S-функция MATLAB | Функция MATLAB | S-функция | Построитель S-функций