Этот пример иллюстрирует как code compile
и startup
различное время активации может использоваться вместе в двух вложенных различных подсистемах.
Откройте модель slexNestedVSSWithCCAndST.slx.
. Модель содержит Различный блок Engine Controller
подсистемы с двумя вариантами
Diesel Engine
и Petrol Engine
с условиями ENGINE_TYPE == 1
и ENGINE_TYPE == 2
соответственно. Variant activation time
параметр Engine Controller
блок установлен в code compile
.The два варианта Diesel Engine
и Petrol Engine
имейте startup
как Variant activation time
параметр. Каждый тип механизма имеет два варианта Effficient Mode
и Normal Mode
. Petrol Engine
имеет условия PMODE == 1
и PMODE == 2
, и Diesel Engine
имеет condtions DMODE == 1
и DMODE == 2
. Один из типов механизма может быть выбран при создании сгенерированного кода, и один из режимов контроллера может быть выбран перед запуском подписания кода.
Оба, которых имеют различные подсистемы, Распространяют условия за пределами различной подсистемы и Позволяют нулевые активные различные выключенные средства управления. Когда эти флаги будут включены, эта модель будет ошибка во время компиляции как условия с code compile
и startup
различное время активации будет смешано для блоков выходного порта и импорта. Для получения дополнительной информации смотрите Факторы и Ограничения в течение Времени Активации Варианта запуска
open_system('slexNestedVSSWithCCAndST.slx');
Нажмите на Generate Code Using Embedded Coder, чтобы сгенерировать код с целью ERT. В сгенерированном коде вы видите различные условия, связанные с Engine Controller
появитесь с препроцессором #if
условия и condtions, связанный с режимом, появляются как регулярный if
.
Соединение code compile
и startup
различные времена активации позволяют вам точно настроить различный выбор. В сгенерированном исполняемом файле у вас может быть любой Petrol Engine
контроллер или Diesel Engine
контроллер. При запуске можно решить, хотите ли вы Efficient Mode
или Normal Mode
из любого Petrol Engine
или Diesel Engine
контроллеры. Для этого запишите пользовательский код, который может помочь выбрать различные варианты в startup
время активации в System Initialize
блок. Чтобы выбрать различные варианты, перейдите к Настройкам Модели> Генерация кода> Пользовательский код. Задайте Header file
и Source file
как #include "ChangeDieselController.h"
и ChangeDieselController.c
соответственно.
ChangeDieselController.c
ответственно за выбор варианта запуска в инициализировать функции.
#include "rtwtypes.h" extern int32_T DMODE; void ChangeDieselEngineController() { // select the diesel controller at startup. // This is just an example, so the value is hard coded. // In practical scenario, this can read value from sensor and // decide which controller you want at startup. DMODE = 1; }
С помощью этого кода можно выбрать вариант запуска в модели, инициализируют функцию и генерируют код.
void slexNestedVSSWithCCAndST_initialize(void)
{
ChangeDieselEngineController();
utAssert((DMODE == 1) + (DMODE == 2) == 1);
utAssert((PMODE == 1) + (PMODE == 2) <= 1);
slexNestedVSSWithCCAndST_DW.systemEnable = 1;
}