Модели Export-function - это модели Simulink ®, которые генерируют код для независимых функций, которые могут быть интегрированы с внешней средой и планировщиком. Функции определяются с помощью блоков Function-Call Subsystem, function-call Model, Simulink Function и S-Function.
Следующая модель export-function содержит две функции, определенные блоками Function-Call Subsystem. Пошаговую процедуру создания этой модели см. в разделе Создание модели Export-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;
}Четыре общих процесса создания моделей export-function различаются тем, как моделируется и тестируется модель перед созданием кода для функций.

Когда последовательность вызовов функций достаточно проста, чтобы ее можно было задать в качестве входных данных модели, моделирование с использованием входной матрицы является предпочтительным методом для тестирования модели с экспортными функциями. См. раздел Тестирование моделирования модели экспорта-функции с использованием входной матрицы.
Если последовательность вызова функции слишком сложна для задания с помощью входной матрицы, создайте тестовую модель (электрический жгут) для имитации поведения целевой среды. Эта тестовая модель используется для ввода вызовов функций в модель export-function. См. разделы Тестирование моделирования модели экспорта-функции с использованием генераторов вызовов функций, Тестирование моделирования модели экспорта-функции с использованием редактора расписания и Тестирование моделирования модели экспорта-функции с использованием диаграммы потока состояния.
На верхнем уровне модель export-function ограничивается виртуальными блоками, блоками с константой (inf) время выборки и следующие блоки:
Inport
Вспомогательный порт
Автор шины
Селектор шины
В элементе шины
Элемент Out Bus
Подсистема вызова функций
Модель с портами ввода вызова функции
Функция симулятора
Инициализация функции
Функция сброса
Завершить функцию
Память хранилища данных
Слияние
S-Функция с портом ввода вызова функции
Разделение функций и вызовов
Показ
Объем
См. раздел Невиртуальные и виртуальные блоки.
Для успешного создания кода функции в модели export-function должны быть выполнены следующие требования.
Параметры конфигурации модели:
Тип решателя: Fixed-step.
Решатель имеет значение auto или discrete.
Целевой файл системы генерации кода имеет значение ert.tlc. Выбор ert.tlc требуется лицензия Embedded Coder ®.
Для блоков модели с функциональным вызовом, периодическое ограничение времени выборки для ссылочной модели Ensure sample time independent.
Блок ввода функции корневого уровня:
Флажок Вызов функции вывода установлен.
Не удается получить сигнал от блока спецификации асинхронных задач.
Блоки ввода и вывода данных корневого уровня не могут подключаться к сигналам данных виртуальной шины.
Блоки подсистемы функции-вызова корневого уровня и блоки модели вызова функции:
Все внутренние блоки внутри блока должны поддерживать генерацию кода.
Если для параметра Trigger block Sample time type установлено значение:
triggered, внутренние блоки должны иметь значение Sample time -1.
periodic, блок Inport функции root-level должен иметь заданное дискретное время Sample, а все внутренние блоки должны иметь значение Sample time -1 или указанное дискретное время.
В модели export-function можно указать примерное время для блоков Inport функции корневого уровня и блока Trigger внутри блока Function-Call Subsystem корневого уровня или блока модели function-call. В следующей таблице показано, как указать эти примеры времени.
| Триггерный блок Тип времени выборки | Время выборки триггерного блока | Время выборки блока ввода | Скорость вызова функции во время моделирования |
| Не указан, параметр неактивен. | -1 (наследуется) | Для моделирования инициатор вызова функции, подключенный к блоку Inport, задает скорость моделирования. |
Заданное дискретное время | Инициатор вызова функции в тестовой модели, подключенный к блоку Inport, должен иметь время выборки, равное указанному дискретному времени для блока Inport. Для моделирования компонент выполняется с заданной дискретной скоростью. Если источник вызова функции использует другой образец, Simulink выводит сообщение об ошибке. | ||
Если на модель export-function ссылается блок Model, применяются периодические проверки времени выполнения вызова функции. | -1 (наследуется) или указанное дискретное время для блока Inport. | -1 (наследуется) | Эта конфигурация не разрешена. Simulink выводит сообщение об ошибке. |
Заданное дискретное время. | Для моделирования компонент выполняется в заданное время дискретной выборки. Если источник вызова функции использует другое время выборки, Simulink выводит сообщение об ошибке. |
Путем задания времени выборки и приоритета для блоков ввода вызова функции можно управлять порядком выполнения подсистем вызова функции и моделей вызова функции во время моделирования. Кроме того, для тестирования планирования можно использовать редактор расписания или диаграмму Stateflow ®. См. разделы Тестирование моделирования модели экспорта-функции с помощью редактора расписания и Тестирование моделирования модели экспорта-функции с помощью диаграммы потока состояний.
Укажите время образца для выполнения моделирования. Щелкните правой кнопкой мыши функциональный блок Inport, затем выберите Параметры блока.
Выберите вкладку Signal Attributes (Атрибуты сигнала). В поле Время выборки введите дискретное время.
Укажите приоритет блока для моделирования. Щелкните правой кнопкой мыши блок ввода вызова функции и выберите «Свойства».
В поле Приоритет (Priority) введите значение приоритета.
Отобразить порядок выполнения блока для моделирования. На вкладке Debug выберите Information Overlays,
затем в
раскрывающемся окне выберите Execution Order. Этот экран не влияет на созданный код.
В следующей модели export-function для подсистемы Function-Call 2 с параметром Sample time for Inport block 2 установлено значение 0.01 (10 мс) выполняется перед подсистемой Function-Call 1 с параметром Sample time for Inport block 1, установленным на 0.1 (100 мс).

Simulink сравнивает свойства блока Inport вызова функции, чтобы определить их относительный порядок выполнения, используя следующие правила:
Приоритет - в первую очередь выполняется более высокий приоритет (меньшее число)
Время выборки - сначала выполняется меньшее время выборки
Номер порта - сначала выполняется меньший номер порта
Если два блока имеют разные значения для параметра Priority, сначала выполняется блок с более высоким приоритетом. Если параметр Priority равен, сначала выполняется блок с более высокой скоростью (меньшим временем выборки). Если приоритет и время выборки одинаковы для обоих блоков, сначала выполняется блок с более низким номером порта.
Примечание
Если моделируемый режим модели верхнего уровня - Accelerator или Rapid Accelerator, Simulink не выполняет проверки во время выполнения для порядка выполнения блоков Inport функции корневого уровня внутри ссылочных моделей export-function.
Предположим, что модель функции экспорта имеет пять блоков Inport, от A до E для вызова функции корневого уровня со свойствами блока, как показано в таблице. Чтобы определить их относительный порядок выполнения, Simulink сравнивает их параметры Priority, время выборки (если различается и не наследуется) и номер порта.
| Блок ввода вызова функции корневого уровня | A | B | C | D | E |
|---|---|---|---|---|---|
| Приоритет | 10 | 30 | 40 | 40 | 30 |
| Время выборки | –1 | 0.2 | 0.1 | 0.1 | –1 |
| Номер порта | 5 | 4 | 3 | 2 | 1 |
Блок 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.
Относительный порядок выполнения для этих блоков ввода вызова функции равен A, E, B, D и C.
Для обеспечения целостности данных можно зафиксировать входные данные для блоков Inport в блоках подсистемы Function-Call. Чтобы зафиксировать входные данные, в параметрах блока Inport выберите Latch input для сигналов обратной связи выходов подсистемы функционального вызова.
В следующей модели входные данные для блока Inport в подсистеме функционального вызова ReadDSAndCal1 фиксируется (индицируется <Li>) и не может изменяться во время выполнения подсистемы. Блоки чтения хранилища данных и записи хранилища данных вызываются в каждой подсистеме вызова функций. Первый и второй функциональные вызовы записывают данные, а последний функциональный вызов считывает данные в блок памяти хранилища данных.

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

Примечание
Модель export-function не может содержать ссылочную модель с асинхронными входами вызова функции, но может содержать подсистемы вызова функции и модели вызова функции. Модель с асинхронными входами вызова функции может содержать модель экспорта функции, подсистему вызова функции или модель вызова функции.
В модели export-function можно использовать блоки Function-Call Subsystem или function-call Model. Если используется блок модели с функциональным вызовом, можно также создать несколько экземпляров модели.
Определите алгоритм с помощью модели, содержащей блок триггера. Установить тип триггера в function-call.

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

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

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

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