Можно задать поведение S-функций шаг расчета mdlInitializeSampleTimes
. Ваша S-функция может наследовать свои скорости от блоков, которые управляют ею или определяют свои собственные скорости.
Можно задать скорости S-функций (т.е. шаги расчета) как
Основанные на блоках шаги расчета
Основанные на порте шаги расчета
Гибридные блоковые и портовые шаги расчета
С основанными на блоках шагами расчета, S-функция задает набор рабочих скоростей для блока в целом во время фазы инициализации симуляции. С шагами расчета на основе портов S-функция задает шаг расчета для каждого входного и выходного порта индивидуально во время инициализации. Во время фазы симуляции с основанными на блоках шагами расчета S-функция обрабатывает все входы и выходы каждый раз, когда происходит попадание выборки для блока. В отличие от этого, с шагами расчета на основе портов блок обрабатывает конкретный порт только, когда для этого порта происходит попадание выборки.
Для примера рассмотрим две скорости дискретизации, 0,5 и 0,25 секунды, соответственно:
В блочном методе выбор 0,5 и 0,25 предписывает блоку выполнять входы и выходы с шагом 0,25 секунды.
В методе, основанном на порте, установка входного порта 0,5 и выходного порта 0,25 заставляет блок обрабатывать входы на 2 Гц и выходы на 4 Гц.
Вы должны использовать основанные на портах шаги расчета, если ваше приложение требует неравных частот дискретизации для входа и выхода или если вы не хотите, чтобы накладные расходы были связаны с запущенными входными и выходными портами с самой высокой частотой дискретизации вашего блока.
В некоторых приложениях блоку S-Function может потребоваться работать внутри с одной или несколькими скоростями дискретизации во время ввода или вывода сигналов с другими скоростями. Гибридный метод определения частот дискретизации на основе блоков и портов позволяет создавать такие блоки.
В типичных приложениях вы задаете только один основанный на блоках шаг расчета. Расширенные S-функции могут потребовать спецификации шагов расчета на основе портов или нескольких блоков.
Level-2 MATLAB® S-функции задают основанные на блоках шаги расчета в своих setup
способ. Используйте линию
block.SampleTimes = [sampleTime offsetTime];
для определения шага расчета. Используйте значение [-1 0]
для указания наследуемого шага расчета. Смотрите Укажите Шаг расчета в Использовании Simulink® полный список допустимых шагов расчета.
Чтобы использовать основанные на портах шаги расчета в Level-2 MATLAB S-функции:
Задайте выборку и время смещения для каждого порта S-функции в setup
способ. Для примера:
block.InputPort(1).SampleTime = [-1 0]; block.OutputPort(1).SampleTime = [-1 0];
The setup
метод не должен задавать время расчета для блока при использовании основанного на порте шагов расчета.
Обеспечивайте SetInputPortSampleTime
и SetOutputPortSampleTime
методы, даже если ваша S-функция не наследует основанные на порте шаги расчета.
В Level-2 S-функции MATLAB используйте значение [-1 0]
для SampleTime
свойство каждого порта, чтобы указать, что порт наследует свой шаг расчета.
Inf
) для портаЕсли ваша S-функция использует основанные на портах шаги расчета, она может задать время расчета Inf
на любом из его портов. Основанный на порте шаг расчета Inf
означает, что сигнал, входящий или выходящий из порта, остается постоянным.
В Level-2 S-функции MATLAB используйте этот код, чтобы задать шаг расчета Inf
для порта:
block.OutputPort(1).SampleTime = [inf 0]; block.SetAllowConstantSampleTime(true);
Level-2 MATLAB S-функции с основанными на портах шагами расчета не могут быть помещены в триггируемую подсистему. Вы должны изменить свою S-функцию, чтобы использовать основанные на блоках шаги расчета, если вам нужно включить его в триггируемую подсистему.
Level-2 S-функции MATLAB поддерживают основанные на портах шаги расчета, но не поддерживают гибридные шаги расчета на основе блоков. Смотрите шаги расчета на основе портов для получения дополнительной информации
В Level-2 S-функции MATLAB используйте IsSampleHit
метод, чтобы определить, является ли текущее время симуляции таким, в котором активна задача, обрабатываемая этим блоком.
Если вы записываете TLC код, чтобы сгенерировать inlined код из S-функции, и если TLC код содержит Outputs
функция, вы должны изменить код TLC, если все эти условия верны:
Порт выхода имеет постоянное значение. Он использует или наследует шаг расчета Inf
.
S-функция является многоскоростной S-функцией.
В этом случае код TLC должен сгенерировать код для порта выхода с постоянными значениями при помощи функции OutputsForTID
вместо функции Outputs
. Для получения дополнительной информации смотрите Задание Постоянного Шага Расчета (Inf) для Порта.
Если задачи, выполняемые с различными скоростями, должны совместно использовать данные, необходимо убедиться, что данные, сгенерированные одной задачей, действительны при доступе к другой задаче, выполняемой с другой скоростью.
Предположим, для примера, что ваша модель имеет вход порт, работающий с одной скоростью (с индексом шага расчета 0) и выход порт, работающий с более низкой скоростью (с шагом расчета индексом 1). Кроме того, предположим, что вы хотите, чтобы выходной порт выводил значение на текущий момент на вход. Обратите внимание, что более высокоскоростные задачи всегда выполняются перед более медленными задачами. Таким образом, вход задача всегда запускается перед задачей выхода, гарантируя, что действительные данные всегда присутствуют в выходе порту.
В Level-2 S-функции MATLAB используйте IsSpecialSampleHit
метод, чтобы определить, является ли текущее время симуляции таким, при котором несколько задач, реализованных этим блоком, активны.
Level-2 MATLAB S-Function | MATLAB Function | S-Function | S-Function Builder