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