Задайте шаги расчета S-функции

О шагах расчета

Можно задать поведение шага расчета 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-функции могут потребовать спецификации основанных на порте или нескольких шагов расчета блока.

Основанные на блоке шаги расчета

Уровень S-функции 2 MATLAB® задает основанные на блоке шаги расчета в их методе setup. Используйте строку

block.SampleTimes = [sampleTime offsetTime];

задавать шаг расчета. Используйте значение [-1 0], чтобы указать на наследованный шаг расчета. См. Настройку времени выборки в Использовании Simulink® для полного списка допустимых шагов расчета.

Определение основанных на порте шагов расчета

Использовать основанные на порте шаги расчета на Уровне 2 S-функция MATLAB:

  • Задайте демонстрационное и времена смещения для каждого порта S-функции в методе setup. Например:

    block.InputPort(1).SampleTime = [-1 0];
    block.OutputPort(1).SampleTime = [-1 0];

    Метод setup не должен задавать шаг расчета для блока при использовании основанных на порте шагов расчета.

  • Обеспечьте SetInputPortSampleTime и методы SetOutputPortSampleTime, даже если ваша S-функция не наследовала свои основанные на порте шаги расчета.

Определение наследованного шага расчета для порта

На Уровне 2 S-функция MATLAB используйте значение [-1 0] для свойства SampleTime каждого порта указать, что порт наследовал свой шаг расчета.

Определение постоянного шага расчета (Inf) для порта

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

На Уровне 2 S-функция MATLAB используйте этот код, чтобы задать шаг расчета Inf для порта:

block.OutputPort(1).SampleTime = [inf 0];
block.SetAllowConstantSampleTime(true);

Конфигурирование основанных на порте шагов расчета для использования в инициированных подсистемах

Уровень 2 S-функции MATLAB с основанными на порте шагами расчета не могут быть помещены в инициированную подсистему. Необходимо изменить S-функцию, чтобы использовать основанные на блоке шаги расчета, если необходимо включать ее в инициированную подсистему.

Гибридные основанные на блоке и основанные на порте шаги расчета

Уровень 2 S-функции MATLAB поддерживают основанные на порте шаги расчета, но не поддерживают гибридные основанные на блоке шаги расчета. Смотрите Основанные на порте Шаги расчета для получения дополнительной информации

Многоскоростные блоки s-function

На Уровне 2 S-функция MATLAB используйте метод IsSampleHit, чтобы определить, является ли текущее время симуляции один, в котором задача, справленная этим блоком, активна.

Если вы пишете код TLC, чтобы сгенерировать встроенный код от S-функции, и если код TLC содержит функцию Outputs, необходимо изменить код TLC, если все эти условия верны:

  • Выходной порт имеет постоянное значение. Это использует или наследовало шаг расчета Inf.

  • S-функцией является многоскоростная S-функция.

В этом случае код TLC должен сгенерировать код для выходного порта с постоянным знаком при помощи функционального OutputsForTID вместо функционального Outputs. Для получения дополнительной информации смотрите Задающий Постоянный Шаг расчета (Inf) для Порта.

Синхронизация многоскоростных блоков s-function

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

Предположим, например, что ваша модель имеет входной порт, действующий на одном уровне (с индексом шага расчета 0) и выходной порт, действующий на более медленном уровне (с индексом шага расчета 1). Далее, предположите, что вы хотите, чтобы выходной порт вывел значение в настоящее время на входе. Обратите внимание на то, что задачи более высокого уровня, всегда запускаемые перед задачами более медленного уровня. Таким образом входная задача всегда запускается перед выходной задачей, гарантируя, что допустимые данные всегда присутствуют в выходном порту.

На Уровне 2 S-функция MATLAB используйте метод IsSpecialSampleHit, чтобы определить, является ли текущее время симуляции один, в котором несколько задач, реализованных этим блоком, активны.

Смотрите также

| | |

Похожие темы