Можно использовать условно выполняемые подсистемы, которые используют входные порты управления, такие как Enabled, Triggered, Reset и подсистемы Function-Call как варианты в блоке Variant Subsystem. Для получения дополнительной информации об условно выполняемых системах см. Условно Выполняемый Обзор Подсистем.
Примечание
Когда параметр Variant activation time блока Variant Subsystem устанавливается на code compile
, тип блоков порта управления во всех вариантах должен быть тем же самым. Например, вы не можете использовать Enabled Subsystem и блоки Function-Call Subsystem как выбор в блоке Variant Subsystem, который имеет code compile
время активации.
Входные порты управления на блоках варианта и соответствующий входной порт на родительском блоке Variant Subsystem должны иметь то же имя.
Рассмотрите эту модель с блоком Variant Subsystem под названием Controller
и два блока Enabled Subsystem, Linear
и Nonlinear
, как варианты. Различные условия на Linear
и Nonlinear
блоками является VSSMODE==0
и VSSMODE==1
, соответственно. Если вы используете блок Enabled Subsystem для Linear
выбор, затем Nonlinear
выбором должен также быть Enabled Subsystem.
Когда вы генерируете код из этой модели, Linear
и Nonlinear
выбор охраняют соответствующие различные условия.
step() { #if VSSMODE==0 // code for Linear choice ....... #elif VSSMODE==1 // code for Nonlinear choice ....... #endif
Моделями экспорта функций является Simulink® модели, которые генерируют код для независимых функций, которые могут быть интегрированы с внешней средой и планировщиком. Можно использовать блок Variant Subsystem с блоками Function-Call Subsystem как варианты, чтобы создать модель экспорта функций. Для получения дополнительной информации о моделях экспорта функций см. Обзор Моделей Экспорта функций.
Рассмотрите модель, содержащую блок Variant Subsystem под названием VariantFcnCall
с двумя блоками Function-Call Subsystem, Linear
и Nonlinear
, как варианты. Различные условия установлены на Linear
и Nonlinear
выбором является VSS_MODE==0
и VSS_MODE==1
, соответственно. VariantFcnCall
блок имеет корневой блок импорта вызова функции уровня, fcn
, и то же имя дано портам управления на Linear
и Nonlinear
блоки выбора. Параметр Variant activation time VariantFcnCall
установлен в code compile
.
У вас может также быть подобный шаблон моделирования с многоточечной функцией записи использование блоков Model.
В этом примере, входные параметры fcln1
, fcln2
, и fcln3
направляются через блок Variant Subsystem, Model
, это использует блоки Model в качестве вариантов.
Когда вы генерируете код из этой модели, определения экспорта функций, fcn
, содержит C
условные выражения препроцессора #if
и #endif
. Код для Linear
и Nonlinear
выбор охраняют соответствующие различные условия. Для получения дополнительной информации о конфигурировании модели, чтобы сгенерировать код, смотрите, Готовят Содержащую Вариант Модель к Генерации кода.
void fcn(void) { /* RootInportFunctionCallGenerator: '<Root>/RootFcnCall_InsertedFor_fcn_at_outport_1' */ #if VSSMODE == 0 rtDWork.Linear.DiscreteFilter = rtU.In1 - 0.5 * rtDWork.Linear.DiscreteFilter_states; rtDWork.Linear.DiscreteFilter_states = rtDWork.Linear.DiscreteFilter; #endif /* VSSMODE == 0 */ #if VSSMODE == 1 rtDWork.Nonlinear.DiscreteFilter = look1_binlxpw(rtU.In1, rtCP_LookupTable_bp01Data, rtCP_LookupTable_tableData, 4U) - 0.5 * rtDWork.Nonlinear.DiscreteFilter_states; rtDWork.Nonlinear.DiscreteFilter_states = rtDWork.Nonlinear.DiscreteFilter; #endif /* VSSMODE == 1 */ #if VSSMODE == 0 rtY.Out1 = rtDWork.Linear.DiscreteFilter; #endif /* VSSMODE == 0 */ #if VSSMODE == 1 rtY.Out1 = rtDWork.Nonlinear.DiscreteFilter; #endif /* VSSMODE == 1 */ }
Охранять целое определение экспорта функций, fcn
, использование различного условия, используйте блок Variant Source как показано в этом примере.
В сгенерированном коде, определении экспорта функций, fcn()
, охраняется с A==1
.
#if A == 1 void fcn(void) { ….. } #endif
Эта функция может быть отнесена с помощью фрагмента кода, похожего на этого.
….. #if A==1 fcn() #endif ……
Когда вы распространяете различное условие к условной подсистеме, то же условие установлено ко всем портам.
Рассмотрите эту модель. Блок Variant Subsystem, VariantFcnCall
, имеет условные блоки подсистемы как выбор. Импорт fcn
на VariantFcnCall
соответствует входным портам управления на блоках варианта. Одно вход, блок Variant Source одно выхода с условием A==1
соединяется с fcn
порт. VariantFcnCall
блок получает различное условие сигнала, соединенного с fcn
порт. Условие, присвоенное блоку затем, распространяет с блоками, соединенными с его портами ввода и вывода. Когда вы симулируете эту модель после установки A=1
, различное условие A==1
распространяет к VariantFcnCall
блокируйтесь и к In1
и Out1
блоки соединяются с ним, как показано в Различной Легенде Условий.
Эти условия не поддерживаются при использовании условно выполняемых систем как варианты в блоке Variant Subsystem:
Action Port блокируется в вариантах.
Iterator Port блокируется в вариантах Variant Subsystem с набором Variant activation time к code compile
.
Конфигурирование модели как компонент AUTOSAR с выполнимым как различный выбор подсистемы.
Initialize Function, Reset Function, Terminate Function и блоки Simulink Function.
Примечание
Инициализируйте и порты события Terminate являются всегда безусловными, потому что они управляют и значением по умолчанию модели и специфичный для блока, инициализируют и отключают события модели, на которую ссылаются. Если вы задаете Инициализировать функциональный блок в модели, на которую ссылаются, это соответствует явному, инициализируют событие.