Используйте блок C Function в для каждой подсистемы

В этом примере показано, как использовать Функциональный блок 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');

Смотрите также

| | | |