Чтобы изменить реализацию AUTOSAR, программные компоненты AUTOSAR могут задавать логику исполнения условия внутри runnable. В Simulink®, чтобы смоделировать логику условий варианта внутри runnable:
Чтобы представлять варианты реализации подсистемы или модели и задать логику условий варианта, используйте блок Variant Subsystem.
Чтобы смоделировать системные константы AUTOSAR, используйте AUTOSAR.Parameter
объекты данных с классом памяти SystemConstant
. Системные константы представляют значения условий, которые определяют активную подсистему или реализацию модели.
Например, вот модель компонента AUTOSAR, которая содержит блок Variant Subsystem, который моделирует две реализации подсистемы. Можно открыть модель из
.matlabroot
/ help/toolbox/autosar/examples/mAutosarVariantSubsystem.slx
Варианты выбора являются подсистемами VAR1 и VAR2. Блоки не соединяются, потому что связность определяется во время симуляции, основываясь на активном варианте.
Чтобы смоделировать постоянную системы AUTOSAR, модель задает AUTOSAR.Parameter
объект данных rainSensor
:
rainSensor = AUTOSAR.Parameter; rainSensor.CoderInfo.StorageClass = 'Custom'; rainSensor.CoderInfo.CustomStorageClass = 'SystemConstant'; rainSensor.DataType = 'uint8'; rainSensor.Value = 2;
Variant Subsystem диалогового окна блока определяет логику условий варианта, которая основана на системном постоянном значении. Можно задать выражение или Simulink.Variant
объект, содержащий выражение.
Когда вы генерируете код для модели:
В коде ARXML варианты показаны следующим образом VARIATION-POINT-PROXY
записи с краткими именами c0
и c1
. rainSensor
появляется как системная константа, представляющая связанное значение условия. Для примера:
<VARIATION-POINT-PROXYS> <VARIATION-POINT-PROXY UUID="..."> <SHORT-NAME>c0</SHORT-NAME> <CATEGORY>CONDITION</CATEGORY> <CONDITION-ACCESS BINDING-TIME="PRE-COMPILE-TIME"> <SYSC-REF DEST="SW-SYSTEMCONST">/vss_pkg/vss_dt/SystemConstants/rainSensor</SYSC-REF> == 1</CONDITION-ACCESS> </VARIATION-POINT-PROXY> <VARIATION-POINT-PROXY UUID="..."> <SHORT-NAME>c1</SHORT-NAME> <CATEGORY>CONDITION</CATEGORY> <CONDITION-ACCESS BINDING-TIME="PRE-COMPILE-TIME"> <SYSC-REF DEST="SW-SYSTEMCONST">/vss_pkg/vss_dt/SystemConstants/rainSensor</SYSC-REF> == 2</CONDITION-ACCESS> </VARIATION-POINT-PROXY> </VARIATION-POINT-PROXYS>
В RTE-совместимом коде код С имена c0
и c1
кодируются в именах символов препроцессора, используемых в логике условий варианта. Для примера:
#if Rte_SysCon_c0 ... #elif Rte_SysCon_c1 ... #endif
AUTOSAR.Parameter
| Variant Subsystem