Модели экспорта функций являются моделями 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-функция
Для модели экспорта функций, чтобы успешно сгенерировать функциональный код, должны быть удовлетворены следующие требования.
Образцовые параметры конфигурации:
Набор Типа решателя к Fixed-step
.
Набор решателя к auto
или discrete
.
Системный набор конечного файла Генерации кода к ert.tlc
. Выбор ert.tlc
требует Встроенной лицензии Coder®.
Для Блоков модели вызова функции Периодическое ограничение частоты дискретизации для модели, на которую ссылаются, установлено в Ensure sample time independent
.
Вызов функции корневого уровня блоки Inport:
Флажок вызова выходной функции устанавливается.
Не может получить сигнал от блока Asynchronous Task Specification.
Данные корневого уровня Inport и блоки Outport не могут соединиться с виртуальными сигналами данных шины.
Блоки Подсистемы вызова функций корневого уровня и Блоки модели вызова функции:
Все внутренние блоки в блоке должны поддержать генерацию кода.
Если тип Частоты дискретизации блока Trigger установлен в:
triggered
, внутренним блокам нужно было установить Частоту дискретизации на -1
.
periodic
, блоку Inport вызова функции корневого уровня нужно было установить его Частоту дискретизации на заданное дискретное время, и всем внутренним блокам нужно было установить Частоту дискретизации на -1
или заданное дискретное время.
Регистрация данных и блоки средства просмотра сигнала не позволены на корневом уровне или в Подсистеме и Блоках модели.
В модели экспорта функций можно задать частоту дискретизации для вызова функции корневого уровня блоки Inport и блок Trigger в блоке Function-Call Subsystem корневого уровня или Блоке модели вызова функции. Следующая таблица показывает, как задать эти частоты дискретизации.
Инициируйте блочный тип Частоты дискретизации | Инициируйте блочную Частоту дискретизации | Частота дискретизации блока Inport | Уровень вызова функции во время моделирования |
| Не заданный, параметр неактивен. | - 1 (наследованный) | Для моделирования инициатор вызова функции, соединенный с блоком Inport, устанавливает уровень моделирования. |
Заданное дискретное время | У инициатора вызова функции, в экспериментальной модели, соединенной с блоком Inport, должна быть частота дискретизации, равная заданному дискретному времени для блока Inport. Для моделирования компонент выполняется на заданном дискретном уровне. Если источник вызова функции использует различную выборку, Simulink отображает сообщение об ошибке. | ||
Периодические проверки на этапе выполнения вызова функции применяются, если на модель экспорта функций ссылаются от Блока модели. | - 1 (наследованный) или заданное дискретное время для блока Inport. | - 1 (наследованный) | Эта настройка не позволена. Simulink отображает сообщение об ошибке. |
Заданное дискретное время. | Для моделирования компонент выполняется в заданной дискретной частоте дискретизации. Если источник вызова функции использует различную частоту дискретизации, Simulink отображает сообщение об ошибке. |
Определение частоты дискретизации и приоритета для вызова функции блоки Inport дает вам контроль над порядком выполнения Моделей вызова функции и Подсистем вызова функций.
Задайте частоту дискретизации для выполнения моделирования.. Щелкните правой кнопкой по блоку Inport вызова функции, и затем выберите параметры Block.
Выберите вкладку Signal Attributes. В поле Частоты дискретизации введите дискретное время.
Задайте блочный приоритет для моделирования. Щелкните правой кнопкой по блоку Inport вызова функции, и затем выберите Properties.
В поле Priority введите приоритетное значение.
Отобразите отсортированный порядок выполнения для моделирования. Выберите Display> Blocks> Sorted Execution Order. Это отображение не оказывает влияния на сгенерированный код.
В следующей модели экспорта функций, Подсистема вызова функций 2 с Частотой дискретизации для блока Inport 2 набора к 0.01
выполнения (на 10 мс) перед Подсистемой вызова функций 1 с Частотой дискретизации для блока Inport 1 набор к 0.1
(100 мс).
Simulink сравнивает свойства блока Inport вызова функции определить их относительный порядок выполнения, использующий следующие правила:
Приоритет – более низкий приоритет выполняется сначала
Частота дискретизации – меньшая частота дискретизации выполняется сначала
Номер порта – меньший номер порта выполняется сначала
Когда два блока имеют различные значения для Приоритетного параметра, блок с более низким приоритетом выполняется сначала. Если Приоритетный параметр равен, блок с более быстрым уровнем (меньшая частота дискретизации) выполняется сначала. Если Приоритет и частота дискретизации являются тем же самым для обоих из блоков, блок с номером нижнего порта выполняется сначала.
Когда режимом моделирования топ-модели является Акселератор или Быстрый Акселератор, Simulink не выполняет проверки моделирования во время выполнения для порядка выполнения вызова функции корневого уровня блоки Inport в моделях экспорта функций, на которые ссылаются.
Предположим, что модель экспорта функций имеет пять вызовов функции корневого уровня блоки Inport, к E, с блочными свойствами как показано в таблице. Чтобы определить их относительный порядок выполнения, Simulink сравнивает их Приоритетные параметры, частоты дискретизации (если отличный и ненаследованный), и номер порта.
вызов функции корневого уровня Inport | A | B | C | D | E |
---|---|---|---|---|---|
Приоритет | 10 | 30 | 40 | 40 | 30 |
'SampleTime' | – 1 | 0.2 | 0.1 | 0.1 | – 1 |
Номер порта | 5 | 4 | 3 | 2 | 1 |
Блокируйтесь 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 в блоках Подсистемы вызова функций, чтобы гарантировать целостность данных. Чтобы фиксировать входные данные, выберите входной параметр Фиксатора для сигналов обратной связи подсистемы вызова функций выходной флажок.
В следующей модели входных данных для блока Inport в подсистеме вызова функций ReadDSAndCal1
фиксируют (обозначенный <Li>
) и не может измениться во время выполнения подсистемы. Приветствия Записи Чтения и Хранилища данных Хранилища данных называются в каждой подсистеме вызова функций. Первые nad вторые вызовы функции записывают данные, и последний вызов функции считывает данные в Блок памяти Хранилища данных.
Блок Inport данных корневого уровня, соединенный с внутренним блоком Inport, также фиксируют, если все блоки, соединенные с блоком корневого уровня, фиксируют. Для получения дополнительной информации смотрите входной параметр Фиксатора для сигналов обратной связи подсистемы вызова функций выходные параметры.
Сигналы передачи данных незащищены в сгенерированном коде по умолчанию. Используйте пользовательские классы памяти, чтобы предотвратить повреждение данных в этих сигналах из-за вытеснения текущей задачи в целевом окружении.
Вложенные модели экспорта функций обеспечивают дополнительный уровень организации. Следующая модель имеет две модели экспорта функций, на которые ссылаются, на которые ссылаются от Блока модели.
Модель экспорта функций не может содержать модель, на которую ссылаются, с асинхронными входными параметрами вызова функции, но может содержать модели вызова функции и подсистемы вызова функций. Модель с асинхронными входными параметрами вызова функции может содержать модель экспорта функций, подсистему вызова функций или модель вызова функции.
Можно использовать блоки Подсистемы вызова функций или Блоки модели вызова функции в модели экспорта функций. При использовании Блок модели вызова функции, можно также создать несколько экземпляров модели.
Задайте свой алгоритм с моделью, которая содержит блок Trigger. Установите Триггерный тип на function-call
.
Сошлитесь на модель от Блока модели. Результатом является модель вызова функции.
Соедините блок Inport вызова функции и установите флажок вызова Выходной функции. Добавьте блоки Inport и Outport сигнала. Обновите модель (Ctrl-D). Результатом является модель экспорта функций с моделью вызова функции.
Скопируйте блоки модели, на которые ссылаются, и блокировки порта, чтобы создать второй экземпляр модели. Отсортированный порядок показывает выполнения первой инстанции перед вторым экземпляром.
Возможность моделей экспорта функций доступна для моделей с асинхронными входными параметрами вызова функции. Вы используете эти модели, в основном, в окружении Simulink, где планировщик Simulink вызывает функции.
Характеристика сравнения | Модели экспорта функций | Модели с асинхронными вводами вызова функции |
---|---|---|
Определение | Эти модели имеют вызов функции корневого уровня блоки Inport, которые не соединяются с блоком Asynchronous Task Specification. Эти Inport блокируют триггерные подсистемы вызова функций или модели вызова функции (Блок модели с блоком Trigger). | Эти модели имеют вызов функции корневого уровня блоки Inport, соединенные с Асинхронными блоками Спецификации Задачи. Эти Inport блокируют триггерные подсистемы вызова функций или модели вызова функции. |
Блоки корневого уровня | Только блоки, выполняющиеся в контексте вызова функции, позволены на корневом уровне. | Блоки, выполняющиеся в контексте невызова функции, также позволены. |
Передача данных | Используйте индикаторы передачи данных, чтобы интерпретировать результаты симуляции. Передача данных в моделях экспорта функций не защищена по умолчанию в сгенерированном коде. Для получения дополнительной информации смотрите, Фиксировал Входные данные для Подсистем вызова функций. | Используйте блоки Перехода Уровня, чтобы защитить данные, переданные между подсистемами вызова функций, запускающимися на различных уровнях. Для получения дополнительной информации смотрите Переход Уровня. |
Поддержка моделирования | Эти модели поддерживают автономное моделирование и моделирование экспериментальной модели во всех режимах моделирования. | Эти модели поддерживают моделирование экспериментальной модели во всех режимах моделирования и автономное моделирование в Нормальном, Акселераторе и Быстрых Режимах Accelerator. |
Поддержка генерации кода | Топ-модель и автономная генерация кода поддержаны. | Топ-модель и автономная генерация кода поддержаны. |