Модели экспорта функций

Модели экспорта функций являются моделями Simulink®, которые генерируют код для независимых функций, которые могут быть интегрированы с внешней средой и планировщиком. Функции заданы с помощью Подсистемы вызова функций, Модели вызова функции, Функции Simulink и Блоков s-function..

Следующая модель экспорта функций содержит две функции, определяемых с блоками Подсистемы вызова функций. Для постепенной процедуры, чтобы создать эту модель, смотрите, Создают Модель Экспорта функций

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

      /*
       * 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;
	}

Рабочие процессы для моделей экспорта функций

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

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

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

Позволенные блоки

На корневом уровне модель экспорта функций ограничивается следующими блоками:

  • Inport

  • Выходной порт

  • Goto

  • От

  • Подсистема вызова функций

  • Модель вызова функции

  • Разделение вызова функции

  • Функция Simulink

  • Инициализируйте функцию

  • Сбросьте функцию

  • Оконечная функция

  • Память хранилища данных

  • Соедините шиной создателя

  • Селектор шины

  • Мультиплексор

  • Демультиплексор

  • Слияние

  • Спецификация сигнала

  • S-функция

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

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

Образцовые параметры конфигурации:

  • Решатель набор Type к Fixed-step.

  • Набор Solver к auto или discrete.

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

  • Для блоков Model вызова функции Periodic sample time constraint для модели, на которую ссылаются, установлен в Ensure sample time independent.

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

  • Флажок Output function call устанавливается.

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

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

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

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

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

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

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

Регистрация данных и блоки средства просмотра сигнала не позволены на корневом уровне или в Подсистеме и блоках Model.

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

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

Инициируйте блок Sample time typeИнициируйте блок Sample timeБлок Inport Sample timeУровень вызова функции во время симуляции

Triggered

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

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

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

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

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

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

Periodic

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

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

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

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

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

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

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

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

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

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

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

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

  5. Отобразите отсортированный порядок выполнения для симуляции. Выберите Display> Blocks> Sorted Execution Order. Это отображение не оказывает влияния на сгенерированный код.

В следующей модели экспорта функций, Подсистема вызова функций 2 с Sample time для набора блока 2 Inport к 0.01 выполнения (на 10 мс) перед Подсистемой вызова функций 1 с Sample time для набора блока 1 Inport к 0.1 (100 мс).

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

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

  1. Приоритет – более низкий приоритет выполняется сначала

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

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

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

Примечание

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

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

вызов функции корневого уровня InportABCDE
Приоритет1030404030
'SampleTime' –10.20.10.1–1
Номер порта54321
  • Блок 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 в блоках Подсистемы вызова функций, чтобы гарантировать целостность данных. Чтобы фиксировать входные данные, установите флажок Latch input for feedback signals of function-call subsystem outputs.

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

Примечание

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

Примечание

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

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

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

Примечание

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

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

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

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

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

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

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

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

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

Характеристика сравненияМодели экспорта функцийМодели с асинхронными входными параметрами вызова функции
ОпределениеЭти модели имеют вызов функции корневого уровня блоки Inport, которые не соединяются с блоком Asynchronous Task Specification. Эти Inport блокируют триггерные подсистемы вызова функций или модели вызова функции (блок Model с блоком Trigger).Эти модели имеют вызов функции корневого уровня блоки Inport, соединенные с Асинхронными блоками Спецификации Задачи. Эти Inport блокируют триггерные подсистемы вызова функций или модели вызова функции.
Блоки корневого уровняТолько блоки, выполняющиеся в контексте вызова функции, позволены на корневом уровне.Блоки, выполняющиеся в контексте невызова функции, также позволены.
Передача данныхИспользуйте индикаторы передачи данных, чтобы интерпретировать результаты симуляции. Передача данных в моделях экспорта функций не защищена по умолчанию в сгенерированном коде. Для получения дополнительной информации смотрите, Фиксировал Входные данные для Подсистем вызова функций.Используйте блоки Перехода Уровня, чтобы защитить данные, переданные между подсистемами вызова функций, запускающимися на различных уровнях. Для получения дополнительной информации смотрите Переход Уровня.
Поддержка симуляцииЭти модели поддерживают автономную симуляцию и симуляцию тестовой модели во всех режимах симуляции.Эти модели поддерживают симуляцию тестовой модели во всех режимах симуляции и автономную симуляцию в Нормальном, Акселераторе и Быстрых Режимах Accelerator.
Поддержка генерации кодаТоп-модель и автономная генерация кода поддерживаются.Топ-модель и автономная генерация кода поддерживаются.

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

Блоки

Похожие темы