Модели экспорт функций 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; }
Четыре распространенных процесса для создания моделей экспортов функций отличаются тем, как вы моделируете и тестируете свою модель перед генерацией кода для функций.
Когда секвенирование вызова функции достаточно просто, чтобы быть заданным как вход модели, симуляция с использованием входной матрицы является предпочтительным методом для проверки модели экспорта функций. См. Симуляцию модели экспорта функций тестирования с использованием входной матрицы.
Когда секвенирование вызова функции слишком сложно задать с помощью матрицы входа, создайте экспериментальную модель (обвязку), чтобы имитировать поведение целевого окружения. Используйте эту экспериментальную модель, чтобы предоставить входы вызова функции в модель экспорта функций. См. Моделирование модели экспорта функций теста с использованием генераторов вызова функции, моделирование модели экспорта функций теста с помощью редактора расписания и симуляцию модели экспорта функций теста с использованием диаграммы 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 type | Trigger блок Sample time | Inport блок Sample time | Скорость вызова функции во время симуляции |
| Не задан, параметр неактивен. | -1 (унаследовано) | Для симуляции инициатор вызова функции, соединенный с блоком Inport, устанавливает скорость моделирования. |
Заданное дискретное время | Инициатор вызова функции в экспериментальной модели, соединенный с блоком Inport должен иметь шаг расчета, равное заданному дискретному времени для блока Inport. Для симуляции компонент выполняется с заданной дискретной скоростью. Если источник вызова функции использует другую выборку, Simulink отображает сообщение об ошибке. | ||
Периодические проверки во время выполнения вызова функции применяются, если на модель экспорта функций ссылается блок Model. | -1 (унаследовано) или заданное дискретное время для блока Inport. | -1 (унаследовано) | Это строение не разрешено. Simulink отображает сообщение об ошибке. |
Заданное дискретное время. | Для симуляции компонент выполняется в заданный дискретный шаг расчета. Если источник вызова функции использует другой шаг расчета, Simulink отображает сообщение об ошибке. |
Путем определения шага расчета и приоритета для блоков Inport вызова функции можно управлять порядком выполнения Function-Call Subsystems и вызова функции Models during simulation. Кроме того, можно использовать Редактор спецификаций или Stateflow® график для тестирования планирования. См. Симуляцию модели экспорта функций теста с использованием редактора расписаний и симуляция модели экспорта функций теста с использованием диаграммы Stateflow.
Задайте шаг расчета для выполнения симуляции. Щелкните правой кнопкой мыши вызов функции Inport блок, затем выберите Block parameters.
Выберите вкладку Signal Attributes. В Sample time поле введите дискретное время.
Задайте приоритет блока для симуляции. Щелкните правой кнопкой мыши вызов функции Inport блок, затем выберите Properties.
В Priority поле введите значение приоритета.
Отобразите порядок выполнения блока для симуляции. На вкладке 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 блока, чтобы определить их относительный порядок выполнения с помощью следующих правил:
Приоритет - первый выполняется более высокий приоритет (меньшее число)
Шаг расчета - сначала выполняется шагом расчета меньшего размера
Номер порта - сначала выполняется меньший номер порта
Когда два блока имеют различные значения для параметра Priority, сначала выполняется блок с более высоким приоритетом. Если параметр Priority равен, сначала выполняется блок с более высокой частотой (меньшим шагом расчета). Если Priority и шаг расчета совпадают для обоих блоков, сначала выполняется блок с более низким номером порта.
Примечание
Когда режимом симуляции модели верхней части является Accelerator или Rapid Accelerator, Simulink не выполняет проверки во время выполнения для порядка выполнения блоков вызова функции корневого уровня Inport внутри ссылочных моделей экспорта функций.
Предположим, что модель экспорта функций имеет пять блоков Inport вызова функции корневого уровня A-E со свойствами блоков, как показано в таблице. Чтобы определить их относительный порядок выполнения, Simulink сравнивает их параметры Priority, шаги расчета (если они различаются и не наследуются) и номер порта.
Вызов функции корневого уровня Inport блок | 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.
Относительный порядок выполнения для этих блоков 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 блок, можно также создать несколько образцы модели.
Задайте свой алгоритм с моделью, которая содержит блок Trigger. Установите Trigger type значение function-call
.
Ссылка на модель из блока Model . Результатом является модель вызова функции.
Подключите вызов функции Inport блоку и установите флажок Output function call. Добавьте блоки Inport и Outport сигнала. Обновите модель (Ctrl-D). Результатом является модель экспорта функций с моделью вызова функции.
Скопируйте модель-ссылку и блоки портов, чтобы создать второй образец модели. Эти два образцов вызываются различными блоками вызова функции корневого уровня Inport в различных задачах.
Возможность экспорта функций моделей доступна для моделей с портами асинхронного вызова функции входа. Вы используете эти модели, в основном, в окружение 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. |
Поддержка генерации кода | Поддерживается генерация кода верхней модели и автономной модели. | Поддерживается генерация кода верхней модели и автономной модели. |