В этом примере показано, как симулировать и сгенерировать код для модели экспорта функций.
Откройте модель slexVariantExportedFcn.slx
. Модель содержит Различный Исходный блок с условием V == 1
, где V
Simulink.Parameter
объект, который задан в PostLoadFcn
в Файле> Свойства Модели> Коллбэки.
Условие на функциональном позывном задает условие для SubA. Это условие распространено с блоками, соединенными с входными портами SubA и с блоками, соединенными с выходными портами SubA.
Установите Variant activation time
к update diagram
. Прежде чем вы симулируете модель, в базовом рабочем пространстве устанавливает значение V
к 1.
V.Value = 1;
SubA будет неактивен потому что V == 1
. Вы заметите, что Out1 также неактивен. Однако в In2 остается активным, потому что SubB активен, и In2 также соединяется с SubB. Если вы отключите линию между In2 и SubB, то In2 будет неактивен.
code compile
и startup
Сгенерируйте код с Variant activation time
установите на code compile
.
rtwbuild('slexVariantExportedFcn')
Просмотрите отчет генерации кода. Отчет включает в себя ссылки на файлы модели, такие как slexVariantExportedFcn.c
и сопоставленные служебные и заголовочные файлы.
Фигура содержит фрагмент сгенерированного кода, slexVariantExportedFcn.c
. Вы заметите тот In1
охраняется, внутренне и внешне, условными выражениями препроцессора (#if
). In3
является пустым, потому что это не получает условия.
Когда вы изменяете Variant activation time
от code compile
к startup
, необходимо изменить спецификацию класса памяти V
к 'ExportedGlobal'
.
V.CoderInfo.StorageClass = 'ExportedGlobal'; rtwbuild('slexVariantExportedFcn')
Просмотрите отчет генерации кода. Фигура содержит фрагмент сгенерированного кода, slexVariantExportedFcn.c
. Вы заметите, что сгенерированный код содержит регулярный if
операторы.