В этом примере показано, как использовать блок C Function в подсистеме For Each. Пример передает сигнал вектора в подсистему For Each, которая повторяет выполнение блока C Function на каждом элементе входного сигнала и конкатенирует результаты. Блок C Function вызывает функцию пользовательского кода customSaturateFcn()
, который реализует алгоритм насыщения и выводит обрезанную версию входного сигнала. Блок C Caller с теми же настройками также может использоваться вместо блока C Function в подсистеме For Each.
Этот пример иллюстрирует следующие концепции:
Вызов функции C из блока Simulink ® внутри подсистемы For Each.
Конфигурирование детерминированных функций в пользовательском коде.
Эта модель вызывает пользовательский код из подсистемы For Each. Когда модель запускается, возможности отображают выход.
open_system('slexCFunctionForEach');
Откройте диалоговое окно Параметры конфигурации.
На панели Simulation Target, в группе Import Custom Code, установите значение функций Determinsitic равным All
. Эта настройка сообщает модели, что все пользовательские функции кода имеют детерминированное поведение, то есть одинаковые входные значения функции всегда дают одинаковые выходы. Если функция пользовательского кода задана как детерминированная, ее можно безопасно вызвать из блока C Function или C Caller внутри подсистемы For Each. Если не все пользовательские функции кода являются детерминированными, определенные функции могут быть установлены, чтобы быть детерминированными с опцией By function. Если подсистема For Each содержит блок C Function или C Caller, который вызывает пользовательскую функцию кода, которая не задана как детерминированная, Simulink производит ошибку.
configset.highlightParameter(bdroot,'DefaultCustomCodeDeterministicFunctions'); set_param(bdroot,'DefaultCustomCodeDeterministicFunctions','All');
Симулируйте модель и просмотрите результаты.
sim(bdroot);
open_system('slexCFunctionForEach/Scope');
C Caller | C Function | Детерминированные функции | For Each Subsystem | Задайте функцией