Обзор моделей экспорта функций

Модели экспорт функций Simulink® модели, которые генерируют код для независимых функций, которые могут быть интегрированы с внешним окружением и планировщиком. Функции определяются с помощью Function-Call Subsystem, function-call Model, Simulink Function и блоков S-Function.

Следующая модель экспорта функций содержит две функции, заданные с Function-Call Subsystem блоками. Для пошаговой процедуры создания этой модели смотрите Создание экспорта функций.

Код, сгенерированный из этой модели, имеет две независимые функции, одна для функции задержки, а другая для квадратной функции.

      /*
       * File: export_function_model.c    
       * Code generated for Simulink model 'export_function_model'.
       */
		
	void function_call_100ms(void)         /* Sample time: [0.1s, 0.0s] */
	{
	  export_function_model_Y.output_100ms =
	    export_function_model_DW.UnitDelay_DSTATE;
	
	  export_function_model_DW.UnitDelay_DSTATE =
	    export_function_model_Y.output_100ms + 1.0;	
	}

      void function_call_10ms(void)          /* Sample time: [0.01s, 0.0s] */
	{
	    export_function_model_Y.output_10ms = export_function_model_U.input_10ms *
	    export_function_model_U.input_10ms;
	}

Рабочие процессы для моделей Export-Function

Четыре распространенных процесса для создания моделей экспортов функций отличаются тем, как вы моделируете и тестируете свою модель перед генерацией кода для функций.

Когда секвенирование вызова функции достаточно просто, чтобы быть заданным как вход модели, симуляция с использованием входной матрицы является предпочтительным методом для проверки модели экспорта функций. См. Симуляцию модели экспорта функций тестирования с использованием входной матрицы.

Когда секвенирование вызова функции слишком сложно задать с помощью матрицы входа, создайте экспериментальную модель (обвязку), чтобы имитировать поведение целевого окружения. Используйте эту экспериментальную модель, чтобы предоставить входы вызова функции в модель экспорта функций. См. Моделирование модели экспорта функций теста с использованием генераторов вызова функции, моделирование модели экспорта функций теста с помощью редактора расписания и симуляцию модели экспорта функций теста с использованием диаграммы Stateflow.

Разрешенные блоки

На верхнем уровне модель export-function ограничена виртуальными блоками, блоками с константой (inf) шаг расчета и следующие блоки:

  • Inport

  • Outport

  • Bus Creator

  • Bus Selector

  • In Bus Element

  • Out Bus Element

  • Function-Call Subsystem

  • Model с входными портами вызова функции

  • Simulink Function

  • Initialize Function

  • Reset Function

  • Terminate Function

  • Data Store Memory

  • Merge

  • S-Function входным портом вызова функции

  • Function-Call Split

  • Display

  • Scope

См. «Невиртуальные» и «Виртуальные блоки».

Требования к экспортам функций

Чтобы модель экспорта функций успешно сгенерировала код функции, должны быть выполнены следующие требования.

Параметры конфигурации модели:

  • Для Type решателя задано значение Fixed-step.

  • Solver установлено на auto или discrete.

  • Генерация кода System target file установлена на ert.tlc. Выбор ert.tlc требуется Embedded Coder® лицензия.

  • Для function-call блоков Model Periodic sample time constraint для ссылочных моделей установлено значение Ensure sample time independent.

Вызов функции корневого уровня Inport блоками:

  • Output function call флажок.

  • Не удается получить сигнал от блока Asynchronous Task Specification.

Блоки данных корневого Inport и Outport не могут соединяться с сигналами данных виртуальной шины.

Блоки Подсистемы вызова функций корневого уровня и function-call Блоки модели:

  • Все внутренние блоки в блоке должны поддерживать генерацию кода.

  • If the Trigger Sample time type блока установлено на:

    • triggeredвнутренние блоки должны Sample time установлены на -1.

    • periodic, у вызова функции уровня корня Inport блок должен быть Sample time, у набора к указанному дискретному времени и всем внутренним блокам должен быть Sample time набор к -1 или заданное дискретное время.

Шаг расчета для подсистем вызова функций

В модели export-function можно задать шаг расчета для блоков Inport вызова функции корневого уровня и блока Trigger внутри блока Function-Call Subsystem уровня корня или вызова функции Model. В следующей таблице показано, как задать эти шаги расчета.

Trigger блок Sample time typeTrigger блок Sample timeInport блок Sample timeСкорость вызова функции во время симуляции

Triggered

Не задан, параметр неактивен.

-1 (унаследовано)

Для симуляции инициатор вызова функции, соединенный с блоком Inport, устанавливает скорость моделирования.

Заданное дискретное время

Инициатор вызова функции в экспериментальной модели, соединенный с блоком Inport должен иметь шаг расчета, равное заданному дискретному времени для блока Inport.

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

Periodic

Периодические проверки во время выполнения вызова функции применяются, если на модель экспорта функций ссылается блок Model.

-1 (унаследовано) или заданное дискретное время для блока Inport.

-1 (унаследовано)

Это строение не разрешено. Simulink отображает сообщение об ошибке.

Заданное дискретное время.

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

Порядок выполнения для блоков Inport вызова функции корневого уровня

Путем определения шага расчета и приоритета для блоков Inport вызова функции можно управлять порядком выполнения Function-Call Subsystems и вызова функции Models during simulation. Кроме того, можно использовать Редактор спецификаций или Stateflow® график для тестирования планирования. См. Симуляцию модели экспорта функций теста с использованием редактора расписаний и симуляция модели экспорта функций теста с использованием диаграммы Stateflow.

  1. Задайте шаг расчета для выполнения симуляции. Щелкните правой кнопкой мыши вызов функции Inport блок, затем выберите Block parameters.

  2. Выберите вкладку Signal Attributes. В Sample time поле введите дискретное время.

  3. Задайте приоритет блока для симуляции. Щелкните правой кнопкой мыши вызов функции Inport блок, затем выберите Properties.

  4. В Priority поле введите значение приоритета.

  5. Отобразите порядок выполнения блока для симуляции. На вкладке Debug выберите Information Overlays , затем в раскрывающемся диалоговом окне выберите Execution Order. Это отображение не влияет на сгенерированный код.

В следующей модели export-function Function-Call Subsystem 2 с Sample time для Inport блока 2 установлено на 0.01 (10 мс) запускается перед Function-Call Subsystem 1 с Sample time для Inport блока 1, установленного на 0.1 (100 мс).

Определите относительные Порядки выполнения

Simulink сравнивает свойства вызова функции Inport блока, чтобы определить их относительный порядок выполнения с помощью следующих правил:

  1. Приоритет - первый выполняется более высокий приоритет (меньшее число)

  2. Шаг расчета - сначала выполняется шагом расчета меньшего размера

  3. Номер порта - сначала выполняется меньший номер порта

Когда два блока имеют различные значения для параметра Priority, сначала выполняется блок с более высоким приоритетом. Если параметр Priority равен, сначала выполняется блок с более высокой частотой (меньшим шагом расчета). Если Priority и шаг расчета совпадают для обоих блоков, сначала выполняется блок с более низким номером порта.

Примечание

Когда режимом симуляции модели верхней части является Accelerator или Rapid Accelerator, Simulink не выполняет проверки во время выполнения для порядка выполнения блоков вызова функции корневого уровня Inport внутри ссылочных моделей экспорта функций.

Предположим, что модель экспорта функций имеет пять блоков Inport вызова функции корневого уровня A-E со свойствами блоков, как показано в таблице. Чтобы определить их относительный порядок выполнения, Simulink сравнивает их параметры Priority, шаги расчета (если они различаются и не наследуются) и номер порта.

Вызов функции корневого уровня Inport блокABCDE
Приоритет1030404030
Шаг расчета–10.20.10.1–1
Номер порта54321
  • Блок A имеет наивысший приоритет из всех пяти блоков. A выполняет сначала.

  • B и E выполняются после A, но до C и D. Поскольку B и E имеют одинаковый приоритет, Simulink сравнивает их шаги расчета, чтобы определить порядок выполнения. E имеет шаг расчета -1 (унаследовано), что меньше 0.2, шаг расчета B. E выполняется перед B.

  • C и D имеют одинаковый приоритет и одинаковые различные, неунаследованные шаги расчета. Номер порта для D (2) меньше, чем C (3), D выполняется перед C.

Относительный порядок выполнения для этих блоков Inport вызова функции является A, E, B, D и C.

Фиксированные входные данные для подсистем вызова функций

Можно защелкнуть входные данные для блоков Inport в Function-Call Subsystem блоках, чтобы гарантировать целостность данных. Чтобы зафиксировать входные данные, в параметрах блоков Inport, выберите Latch input for feedback signals of function-call subsystem outputs.

В следующей модели входные данные для блока Inport в подсистеме вызова функций ReadDSAndCal1 фиксируется (обозначается <Li>) и не может измениться во время выполнения подсистемы. Блоки Data Store Read и Data Store Write вызываются в каждой подсистеме вызова функций. Первый и второй вызовы функции записывают данные и последний вызов функции считывает данные в блок Data Store Memory.

Примечание

Блок Inport данных корневого уровня, соединенный с внутренним блоком Inport, также фиксируется, если все блоки, соединенные с блоком корневого уровня, заблокированы. Для получения дополнительной информации смотрите Вход защелки для сигналов обратной связи выходов подсистемы вызова функций.

Примечание

Сигналы передачи данных по умолчанию не защищены в сгенерированном коде. Используйте пользовательские классы памяти для предотвращения повреждения данных в этих сигналах из-за прерывания текущей задачи в целевом окружении.

Вложенные модели экспорта функций

Вложенные модели export-function обеспечивают дополнительный слой организации. Следующая модель имеет две модели экспорта функций, на которые ссылаются из блока Model.

Примечание

Модель export-function не может содержать ссылочную модель с асинхронными входами function-call, но может содержать подсистемы вызова функций и модели function-call. Модель с входными входами асинхронного вызова функции может содержать модель экспорта функций, подсистему вызова функций или модель вызова функции.

Экспорт функций с многоинстанционной моделью вызова функции

Можно использовать блоки Function-Call Subsystem или блоки function-call Model в рамках модели export-function. Если вы используете вызов функции Model блок, можно также создать несколько образцы модели.

  1. Задайте свой алгоритм с моделью, которая содержит блок Trigger. Установите Trigger type значение function-call.

  2. Ссылка на модель из блока Model . Результатом является модель вызова функции.

  3. Подключите вызов функции Inport блоку и установите флажок Output function call. Добавьте блоки Inport и Outport сигнала. Обновите модель (Ctrl-D). Результатом является модель экспорта функций с моделью вызова функции.

  4. Скопируйте модель-ссылку и блоки портов, чтобы создать второй образец модели. Эти два образцов вызываются различными блоками вызова функции корневого уровня Inport в различных задачах.

Модели и модели Export-Function с входами Asynchronous Function-Call

Возможность экспорта функций моделей доступна для моделей с портами асинхронного вызова функции входа. Вы используете эти модели, в основном, в окружение Simulink, где планировщик Simulink вызывает функции.

Характеристика сравненияЭкспорты функцийМодели с входами Asynchronous Function-Call
ОпределениеЭти модели имеют блоки function-call корневого уровня Inport, которые не соединяются с блоком Asynchronous Task Specification. Эти Inport блоки запускают подсистемы вызова функций или модели вызова функции (Model блок с Trigger блоком).Эти модели имеют блоки function-call корневого уровня, Inport соединенные с блоками Asynchronous Task Specification. Эти Inport блоки запускают подсистемы вызова функций или модели вызова функции.
Блоки корневого уровняНа корневом уровне допускаются только блоки, выполняемые в контексте вызова функции.Также допускаются блоки, выполняемые в контексте вызова, не связанного с функцией.
Передача данныхИспользуйте индикаторы передачи данных для интерпретации результатов симуляции. Передача данных в моделях экспортов функций не защищена по умолчанию в сгенерированном коде. Для получения дополнительной информации смотрите Заблокированные входные данные для подсистем вызова функций.Используйте Rate Transition блоки для защиты данных, переданных между подсистемами вызова функций, выполняющимися с различными скоростями. Для получения дополнительной информации см. Раздел «Переход скорости».
Поддержка симуляцииЭти модели поддерживают автономную симуляцию и симуляцию экспериментальной модели во всех режимах симуляции.Эти модели поддерживают симуляцию экспериментальной модели во всех режимах симуляции и автономную симуляцию в режимах Normal, Accelerator и Rapid Accelerator.
Поддержка генерации кодаПоддерживается генерация кода верхней модели и автономной модели.Поддерживается генерация кода верхней модели и автономной модели.

См. также

Блоки

Похожие темы