После создания представления модели Simulink® компонента программного обеспечения AUTOSAR вы совершенствовали настройку AUTOSAR. Можно совершенствовать настройку AUTOSAR графически, с помощью Словаря AUTOSAR и редактора Отображений Кода, или программно, с помощью свойства AUTOSAR и сопоставить функции.
Эта тема обеспечивает примеры использования свойства AUTOSAR и функций карты, чтобы программно совершенствовать настройку AUTOSAR. Примеры принимают, что вы создали модель Simulink с начальной настройкой AUTOSAR, как описано в Создании Компонента. (Чтобы графически совершенствовать настройку AUTOSAR, см. Настройку Компонента AUTOSAR.)
Вот представительное упорядоченное расположение программируемых задач настройки.
Для списка свойства AUTOSAR и функций карты, см. список Функций на странице AUTOSAR Programmatic Interfaces.
Примеры используют формат вызова функции, в котором указатель на свойства AUTOSAR или информацию об отображении передается как первый параметр вызова:
arProps = autosar.api.getAUTOSARProperties(hModel); swc = get(arProps,'XmlOptions','ComponentQualifiedName');
Те же вызовы могут быть закодированы в формате вызова метода. Форматы являются взаимозаменяемыми. Например:
arProps = autosar.api.getAUTOSARProperties(hModel); swc = arProps.get('XmlOptions','ComponentQualifiedName');
При конфигурировании модели для генерации кода AUTOSAR используйте следующие функции, чтобы обновить и подтвердить настройки модели AUTOSAR:
autosar.api.syncModel
— Обновите Simulink к отображению AUTOSAR заданной модели с модификациями к функциям точки входа Simulink, передачами данных и функциональными вызывающими сторонами.
autosar.api.validateModel
— Подтвердите свойства AUTOSAR и Simulink к отображению AUTOSAR заданной модели.
Функции эквивалентны использованию кнопок Update и Validate в редакторе Отображений Кода.
Этот пример:
Открывает модель.
Находит компоненты программного обеспечения AUTOSAR.
Циклы через компоненты и значения свойств списков.
Изменяет имя и добрые свойства для компонента.
% Open model hModel = 'autosar_swc_expfcns'; open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Find AUTOSAR software components aswcPaths = find(arProps,[],'AtomicComponent','PathType','FullyQualified'); % Loop through components and list Name and Kind property values for ii=1:length(aswcPaths) aswcPath = aswcPaths{ii}; swcName = get(arProps,aswcPath,'Name'); swcKind = get(arProps,aswcPath,'Kind'); % Application, SensorActuator, etc. fprintf('Component %s: Name %s, Kind %s\n',aswcPath,swcName,swcKind); end
Component /pkg/swc/ASWC: Name ASWC, Kind Application
% Modify component Name and Kind aswcName = 'mySwc'; aswcKind = 'SensorActuator'; set(arProps,aswcPaths{1},'Name',aswcName); aswcPaths = find(arProps,[],'AtomicComponent','PathType','FullyQualified'); set(arProps,aswcPaths{1},'Kind',aswcKind); swcName = get(arProps,aswcPaths{1},'Name'); swcKind = get(arProps,aswcPaths{1},'Kind'); fprintf('Component %s: Name %s, Kind %s\n',aswcPaths{1},swcName,swcKind);
Component /pkg/swc/mySwc: Name mySwc, Kind SensorActuator
Существует три типа портов AUTOSAR:
Require
\in
Provide
Объединенный Provide-Require
(InOut)
Порты AUTOSAR могут сослаться на следующие виды коммуникационных интерфейсов AUTOSAR:
Получатель отправителя
Клиент-сервер
Переключатель режима
Свойства и отображение, которое можно установить для порта AUTOSAR, варьируются согласно типу интерфейса, на который это ссылается. Эти примеры показывают, как использовать свойство AUTOSAR и функции карты, чтобы сконфигурировать порты AUTOSAR для каждого типа интерфейса.
Сконфигурируйте и Порты Получателя Отправителя Карты. Этот пример:
Открывает модель.
Находит отправителя AUTOSAR или порты получателя.
Циклы через порты и списки сопоставили интерфейсы получателя отправителя.
Изменяет связанный интерфейс для порта.
Сопоставляет импорт Simulink в порт получателя AUTOSAR.
См. также Конфигурируют Интерфейсы AUTOSAR Sender-Receiver.
% Open model hModel = 'autosar_swc_expfcns'; open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Find AUTOSAR ports - specify DataReceiverPort, DataSenderPort, or DataSenderReceiverPort arPortType = 'DataReceiverPort'; aswcPath = find(arProps,[],'AtomicComponent','PathType','FullyQualified'); rPorts=find(arProps,aswcPath{1},arPortType,'PathType','FullyQualified')
rPorts = {'/pkg/swc/ASWC/RPort'}
% Loop through ports and list their associated interfaces for ii=1:length(rPorts) rPort = rPorts{ii}; portIf = get(arProps,rPort,'Interface'); fprintf('Port %s has S-R interface %s\n',rPort,portIf); end
Port /pkg/swc/ASWC/RPort has S-R interface Interface1
% Set Interface property for AUTOSAR port rPort = '/pkg/swc/ASWC/RPort'; set(arProps,rPort,'Interface','Interface2') portIf = get(arProps,rPort,'Interface'); fprintf('Port %s has S-R interface %s\n',rPort,portIf);
Port /pkg/swc/ASWC/RPort has S-R interface Interface2
% Use AUTOSAR map functions slMap=autosar.api.getSimulinkMapping(hModel); % Get AUTOSAR mapping info for Simulink inport [arPortName,arDataElementName,arDataAccessMode]=getInport(slMap,'RPort_DE2')
arPortName = 'RPort' arDataElementName = 0×0 empty char array arDataAccessMode = 'ImplicitReceive'
% Map Simulink inport to AUTOSAR port, data element, and data access mode mapInport(slMap,'RPort_DE2','RPort','DE2','ExplicitReceive') [arPortName,arDataElementName,arDataAccessMode]=getInport(slMap,'RPort_DE2')
arPortName = RPort arDataElementName = DE2 arDataAccessMode = ExplicitReceive
Сконфигурируйте Порты Клиент-сервер. Этот пример:
Открывает модель.
Находит клиентские порты AUTOSAR или порты сервера.
Циклы через порты и списки сопоставили интерфейсы клиент-сервер.
Изменяет связанный интерфейс для порта.
См. также Конфигурируют Интерфейсы Клиент-сервер AUTOSAR.
% Open model hModel = 'mControllerWithInterface_server'; addpath (fullfile(matlabroot,'/help/toolbox/autosar/examples')); open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Find AUTOSAR ports - specify ServerPort or ClientPort arPortType = 'ServerPort'; aswcPath = find(arProps,[],'AtomicComponent','PathType','FullyQualified'); sPorts=find(arProps,aswcPath{1},arPortType,'PathType','FullyQualified'); % Loop through ports and list their associated interfaces for ii=1:length(sPorts) sPort = sPorts{ii}; portIf = get(arProps,sPort,'Interface'); fprintf('Port %s has C-S interface %s\n',sPort,portIf); end
Port /pkg/swc/SWC_Controller/sPort has C-S interface CsIf1
% Set Interface property for AUTOSAR port set(arProps,sPorts{1},'Interface','CsIf2') portIf = get(arProps,sPorts{1},'Interface'); fprintf('Port %s has C-S interface %s\n',sPorts{1},portIf);
Port /pkg/swc/SWC_Controller/sPort has C-S interface CsIf2
Сконфигурируйте и Порты Получателя Режима Карты. Этот пример:
Открывает модель.
Находит порты получателя режима AUTOSAR.
Циклы через порты и списки сопоставили интерфейсы переключателя режима.
Изменяет связанный интерфейс для порта.
Сопоставляет импорт Simulink в порт получателя режима AUTOSAR.
См. также Конфигурируют Интерфейсы AUTOSAR Mode-Switch.
% Add path to model and mode definition files and open model addpath (fullfile(matlabroot,'/help/toolbox/autosar/examples')); hModel = 'mAutosarMsConfigAfter'; open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Find AUTOSAR mode receiver ports arPortType = 'ModeReceiverPort'; aswcPath = find(arProps,[],'AtomicComponent','PathType','FullyQualified'); mrPorts=find(arProps,aswcPath{1},arPortType,'PathType','FullyQualified'); % Loop through ports and list their associated interfaces for ii=1:length(mrPorts) mrPort = mrPorts{ii}; portIf = get(arProps,mrPort,'Interface'); fprintf('Port %s has M-S interface %s\n',mrPort,portIf); end
Port /pkg/swc/ASWC/myMRPort has M-S interface myMsIf
% Set Interface property for AUTOSAR port set(arProps,mrPorts{1},'Interface','MsIf2') portIf = get(arProps,mrPort,'Interface'); fprintf('Port %s has M-S interface %s\n',mrPorts{1},portIf);
Port /pkg/swc/ASWC/myMRPort has M-S interface MsIf2
% Use AUTOSAR map functions slMap=autosar.api.getSimulinkMapping(hModel); % Get AUTOSAR mapping info for Simulink inport [arPortName,arDataElementName,arDataAccessMode]=getInport(slMap,'MRPort')
arPortName = 'myMRPort' arDataElementName = 0×0 empty char array arDataAccessMode = 'ModeReceive'
% Map Simulink inport to AUTOSAR port, mode group, and data access mode mapInport(slMap,'MRPort','myMRPort','mdgModes','ModeReceive') [arPortName,arDataElementName,arDataAccessMode]=getInport(slMap,'MRPort')
arPortName = 'myMRPort' arDataElementName = 'mdgModes' arDataAccessMode = 'ModeReceive'
Поведение компонента программного обеспечения AUTOSAR реализовано одним или несколькими runnables. Выполнимой AUTOSAR является schedulable сущность, которая прямо или косвенно планируется базовой операционной системой AUTOSAR. Каждый выполнимый инициирован RTEEvents, события, сгенерированные средой выполнения (RTE) AUTOSAR. Для каждого выполнимого, вы конфигурируете событие, на которое это отвечает. Вот примеры событий AUTOSAR, на которые отвечают runnables.
TimingEvent
— Инициировал периодическое выполнимое.
DataReceivedEvent
или DataReceiveErrorEvent
— Инициировал выполнимое с портом получателя, который участвует в коммуникации получателя отправителя.
OperationInvokedEvent
— Инициировал выполнимое с портом сервера, который участвует в коммуникации клиент-сервер.
ModeSwitchEvent
— Инициировал выполнимое с портом получателя режима, который участвует в коммуникации переключателя режима.
InitEvent
(Схема 4.1 AUTOSAR или выше) — Триггеры выполнимое, которое выполняет инициализацию компонента.
ExternalTriggerOccurredEvent
— Инициировал выполнимое с триггерным портом получателя, который участвует во внешней триггерной коммуникации события.
Сконфигурируйте AUTOSAR TimingEvent для выполнимого периодического
Соберите информацию для пользовательского скрипта планировщика AUTOSAR
Сконфигурируйте AUTOSAR TimingEvent для Выполнимого Периодического. Этот пример:
Открывает модель.
Находит AUTOSAR runnables.
Циклы через runnables и свойства списков.
Изменяет имя и символ для периодического выполнимого AUTOSAR.
Циклы через AUTOSAR синхронизация событий и списков сопоставили runnables.
Переименовывает AUTOSAR синхронизация события.
Сопоставляет функцию точки входа Simulink с периодическим выполнимым AUTOSAR.
% Open model hModel = 'autosar_swc_expfcns'; open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Find AUTOSAR runnables swc = get(arProps,'XmlOptions','ComponentQualifiedName'); ib = get(arProps,swc,'Behavior'); runnables = find(arProps,ib,'Runnable','PathType','FullyQualified'); runnables{2}
ans = '/pkg/swc/ASWC/IB/Runnable1'
% Loop through runnables and list property values for ii=1:length(runnables) runnable = runnables{ii}; rnName = get(arProps,runnable,'Name'); rnSymbol = get(arProps,runnable,'symbol'); rnCBIC = get(arProps,runnable,'canBeInvokedConcurrently'); fprintf('Runnable %s: symbol %s, canBeInvokedConcurrently %u\n',... rnName,rnSymbol,rnCBIC); end
Runnable Runnable_Init: symbol Runnable_Init, canBeInvokedConcurrently 0 Runnable Runnable1: symbol Runnable1, canBeInvokedConcurrently 0 Runnable Runnable2: symbol Runnable2, canBeInvokedConcurrently 0 Runnable Runnable3: symbol Runnable3, canBeInvokedConcurrently 0
% Modify Runnable1 name and symbol set(arProps,runnables{2},'Name','myRunnable','symbol','myAlgorithm'); runnables = find(arProps,ib,'Runnable','PathType','FullyQualified'); rnName = get(arProps,runnables{2},'Name'); rnSymbol = get(arProps,runnables{2},'symbol'); rnCBIC = get(arProps,runnables{2},'canBeInvokedConcurrently'); fprintf('Runnable %s: symbol %s, canBeInvokedConcurrently %u\n',... rnName,rnSymbol,rnCBIC);
Runnable myRunnable: symbol myAlgorithm, canBeInvokedConcurrently 0
% Loop through AUTOSAR timing events and list runnable associations events = find(arProps,ib,'TimingEvent','PathType','FullyQualified'); for ii=1:length(events) event = events{ii}; eventStartOn = get(arProps,event,'StartOnEvent'); fprintf('AUTOSAR event %s triggers %s\n',event,eventStartOn); end
AUTOSAR event /pkg/swc/ASWC/IB/Event_t_1tic_A triggers ASWC/IB/myRunnable AUTOSAR event /pkg/swc/ASWC/IB/Event_t_1tic_B triggers ASWC/IB/Runnable2 AUTOSAR event /pkg/swc/ASWC/IB/Event_t_10tic triggers ASWC/IB/Runnable3
% Modify AUTOSAR event name set(arProps,events{1},'Name','myEvent'); events = find(arProps,ib,'TimingEvent','PathType','FullyQualified'); eventStartOn = get(arProps,events{1},'StartOnEvent'); fprintf('AUTOSAR event %s triggers %s\n',events{1},eventStartOn);
AUTOSAR event /pkg/swc/ASWC/IB/myEvent triggers ASWC/IB/myRunnable
% Use AUTOSAR map functions slMap=autosar.api.getSimulinkMapping(hModel); % Map Simulink exported function Runnable1 to renamed AUTOSAR runnable mapFunction(slMap,'Runnable1','myRunnable'); arRunnableName = getFunction(slMap,'Runnable1')
arRunnableName = 'myRunnable'
Сконфигурируйте и Карта Runnables. Этот пример:
Открывает модель.
Добавляют инициализация AUTOSAR и периодический runnables к модели.
Добавляет событие синхронизации к периодическому выполнимому.
Карты инициализация Simulink и ступенчатые функции к AUTOSAR runnables.
См. также Конфигурируют События для Выполнимой Активации.
% Open model hModel = 'autosar_swc_counter'; open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Add AUTOSAR initialization and periodic runnables initRunnable = 'myInitRunnable'; periodicRunnable = 'myPeriodicRunnable'; swc = get(arProps,'XmlOptions','ComponentQualifiedName') ib = get(arProps,swc,'Behavior') add(arProps,ib,'Runnables',initRunnable); add(arProps,ib,'Runnables',periodicRunnable); % Add AUTOSAR timing event eventName = 'myPeriodicEvent'; add(arProps,ib,'Events',eventName,'Category','TimingEvent','Period',1,... 'StartOnEvent',[ib '/' periodicRunnable]); % Use AUTOSAR map functions slMap=autosar.api.getSimulinkMapping(hModel); % Map AUTOSAR runnables to Simulink initialize and step functions mapFunction(slMap,'InitializeFunction',initRunnable); mapFunction(slMap,'StepFunction',periodicRunnable); % To pass validation, remove redundant initialize and step runnables in AUTOSAR configuration runnables = get(arProps,ib,'Runnables'); delete(arProps,[ib,'/Runnable_Init']); delete(arProps,[ib,'/Runnable_Step']); runnables = get(arProps,ib,'Runnables')
swc = '/Company/Powertrain/Components/autosar_swc_counter' ib = 'autosar_swc_counter/ASWC_IB' runnables = {'autosar_swc_counter/ASWC_IB/myInitRunnable'} {'autosar_swc_counter/ASWC_IB/myPeriodicRunnable'}
Сконфигурируйте События для Выполнимой Активации. Этот пример показывает синтаксис функций свойства для добавления TimingEvent
AUTOSAR,
DataReceivedEvent
, и DataReceiveErrorEvent
к выполнимому в модели. Для DataReceivedEvent
или DataReceiveErrorEvent
, вы задаете триггер. Триггерное имя включает имя порта получателя AUTOSAR и элемента данных, который получает событие, например, 'RPort.DE1'
.
Для OperationInvokedEvent
синтаксис, смотрите, Конфигурируют Интерфейсы Клиент-сервер AUTOSAR.
Для ModeSwitchEvent
синтаксис, смотрите, Конфигурируют Интерфейсы AUTOSAR Mode-Switch.
% Open model hModel = 'autosar_swc_expfcns'; open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Specify AUTOSAR runnable to which to add event swc = get(arProps,'XmlOptions','ComponentQualifiedName') ib = get(arProps,swc,'Behavior') runnables = get(arProps,ib,'Runnables') runnable = 'Runnable1'; % Add AUTOSAR timing event timingEventName = 'myTimingEvent'; add(arProps,ib,'Events',timingEventName,'Category','TimingEvent',... 'Period',1,'StartOnEvent',[ib '/' runnable]); % Add AUTOSAR data received event drEventName = 'myDREvent'; add(arProps,ib,'Events',drEventName,'Category','DataReceivedEvent',... 'Trigger','RPort.DE1','StartOnEvent',[ib '/' runnable]); % Add AUTOSAR data receive error event dreEventName = 'myDREEvent'; add(arProps,ib,'Events',dreEventName,'Category','DataReceiveErrorEvent',... 'Trigger','RPort.DE1','StartOnEvent',[ib '/' runnable]); % To pass validation, remove redundant timing event in AUTOSAR configuration events = get(arProps,ib,'Events'); delete(arProps,[ib,'/Event_t_1tic_A']) events = get(arProps,ib,'Events')
swc = '/pkg/swc/ASWC' ib = 'ASWC/IB' runnables = {'ASWC/IB/Runnable_Init'} {'ASWC/IB/Runnable1'} {'ASWC/IB/Runnable2'} {'ASWC/IB/Runnable3'} events = {'ASWC/IB/Event_t_1tic_B'} {'ASWC/IB/Event_t_10tic'} {'ASWC/IB/myTimingEvent'} {'ASWC/IB/myDREvent'} {'ASWC/IB/myDREEvent'}
Соберите информацию для Пользовательского Скрипта Планировщика AUTOSAR. Этот пример:
Циклы через события и runnables в открытой модели.
Для каждого события или выполнимый, информация извлечений, чтобы использовать с пользовательским планировщиком.
hModel
задает имя открытой модели AUTOSAR.
% Example of how to extract timing information for runnables % to prepare for hooking up a custom scheduler % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); swc = get(arProps,'XmlOptions','ComponentQualifiedName'); % Get AUTOSAR internal behavior ib = get(arProps,swc,'Behavior'); % Get AUTOSAR events and runnables events = get(arProps,ib,'Events'); runnables = get(arProps,ib,'Runnables'); % Loop through events for ii=1:length(events) event = events{ii}; category = get(arProps,event,'Category'); switch category case 'TimingEvent' runnablePath = get(arProps,event,'StartOnEvent'); period = get(arProps,event,'Period'); eventName = get(arProps,event,'Name'); runnableName = get(arProps,runnablePath,'Name'); fprintf('Event %s triggers runnable %s with period %g\n',eventName,runnableName,period); otherwise % Not interested in other events end end % Loop through runnables for ii=1:length(runnables) runnable = runnables{ii}; runnableName = get(arProps,runnable,'Name'); runnableSymbol = get(arProps,runnable,'symbol'); fprintf('Runnable %s has symbol %s\n',runnableName,runnableSymbol); end
Выполнение примера кода на модели autosar_swc_expfcns
в качестве примера генерирует следующий выход:
Event Event_t_1tic_A triggers runnable Runnable1 with period 1 Event Event_t_1tic_B triggers runnable Runnable2 with period 1 Event Event_t_10tic triggers runnable Runnable3 with period 10 Runnable Runnable_Init has symbol Runnable_Init Runnable Runnable1 has symbol Runnable1 Runnable Runnable2 has symbol Runnable2 Runnable Runnable3 has symbol Runnable3
Выполнение примера кода на модели
в качестве примераmatlabroot
генерирует следующий выход:/help/toolbox/autosar/examples/mMultitasking_4rates.slx
Event Event_Runnable_Step triggers runnable Runnable_Step with period 1 Event Event_Runnable_Step1 triggers runnable Runnable_Step1 with period 2 Event Event_Runnable_Step2 triggers runnable Runnable_Step2 with period 4 Event Event_Runnable_Step3 triggers runnable Runnable_Step3 with period 8 Runnable Runnable_Init has symbol Runnable_Init Runnable Runnable_Step has symbol Runnable_Step Runnable Runnable_Step1 has symbol Runnable_Step1 Runnable Runnable_Step2 has symbol Runnable_Step2 Runnable Runnable_Step3 has symbol Runnable_Step3
В компоненте программного обеспечения AUTOSAR с несколькими runnables межвыполнимые переменные (IRVs) используются, чтобы передать данные между runnables. В Simulink, вы модель IRVs с помощью линий передачи данных то подключение подсистемы. В приложении с несколькими уровнями линии передачи данных могут включать блоки Rate Transition, чтобы обработать переходы между отличающимися уровнями.
Эти примеры показывают, как использовать свойство AUTOSAR и функции карты, чтобы сконфигурировать AUTOSAR IRVs без или с переходами уровня.
Сконфигурируйте межвыполнимую переменную для линии передачи данных
Сконфигурируйте межвыполнимую переменную для передачи данных с переходом уровня
Сконфигурируйте Межвыполнимую Переменную для Линии Передачи данных. Этот пример:
Открывает модель.
Добавляет межвыполнимая переменная (IRV) AUTOSAR к модели.
Сопоставляет передачу данных Simulink с IRV.
% Open model hModel = 'autosar_swc_expfcns'; open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Get AUTOSAR internal behavior and add IRV myIrv with SwCalibrationAccess ReadWrite irvName = 'myIrv'; swCalibValue = 'ReadWrite'; swc = get(arProps,'XmlOptions','ComponentQualifiedName') ib = get(arProps,swc,'Behavior') irvs = get(arProps,ib,'IRV') add(arProps,ib,'IRV',irvName,'SwCalibrationAccess',swCalibValue); irvs = get(arProps,ib,'IRV'); % Use AUTOSAR map functions slMap=autosar.api.getSimulinkMapping(hModel); % Map Simulink signal irv1 to AUTOSAR IRV myIrv with access mode Explicit irvAccess = 'Explicit'; [arIrvName,arDataAccessMode] = getDataTransfer(slMap,'irv1'); mapDataTransfer(slMap,'irv1',irvName,irvAccess); [arIrvName,arDataAccessMode] = getDataTransfer(slMap,'irv1') % To pass validation, remove redundant IRV in AUTOSAR configuration irvs = get(arProps,ib,'IRV'); delete(arProps,[ib,'/IRV1']) irvs = get(arProps,ib,'IRV')
swc = '/pkg/swc/ASWC' ib = 'ASWC/IB' irvs = {'ASWC/IB/IRV1'} {'ASWC/IB/IRV2'} {'ASWC/IB/IRV3'} {'ASWC/IB/IRV4'} arIrvName = 'myIrv' arDataAccessMode = 'Explicit' irvs = {'ASWC/IB/IRV2'} {'ASWC/IB/IRV3'} {'ASWC/IB/IRV4'} {'ASWC/IB/myIrv'}
Сконфигурируйте Межвыполнимую Переменную для Передачи данных с Переходом Уровня. Этот пример:
Открывает модель с несколькими уровнями.
Добавляет межвыполнимая переменная (IRV) AUTOSAR к модели.
Сопоставляет блок Simulink Rate Transition с IRV.
% Open model hModel = 'mMultitasking_4rates'; addpath (fullfile(matlabroot,'/help/toolbox/autosar/examples')); open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Get AUTOSAR internal behavior and add IRV myIrv with SwCalibrationAccess ReadWrite irvName = 'myIrv'; swCalibValue = 'ReadWrite'; swc = get(arProps,'XmlOptions','ComponentQualifiedName') ib = get(arProps,swc,'Behavior') irvs = get(arProps,ib,'IRV') add(arProps,ib,'IRV',irvName,'SwCalibrationAccess',swCalibValue); irvs = get(arProps,ib,'IRV'); % Use AUTOSAR map functions slMap=autosar.api.getSimulinkMapping(hModel); % Map Simulink RT block RateTransition2 to AUTOSAR IRV myIrv with access mode Explicit irvAccess = 'Explicit'; [arIrvName,arDataAccessMode] = getDataTransfer(slMap,'mMultitasking_4rates/RateTransition2'); mapDataTransfer(slMap,'mMultitasking_4rates/RateTransition2',irvName,irvAccess); [arIrvName,arDataAccessMode] = getDataTransfer(slMap,'mMultitasking_4rates/RateTransition2') % To pass validation, remove redundant IRV in AUTOSAR configuration irvs = get(arProps,ib,'IRV'); delete(arProps,[ib,'/IRV3']) irvs = get(arProps,ib,'IRV')
swc = '/mMultitasking_4rates_pkg/mMultitasking_4rates_swc/mMultitasking_4rates' ib = 'mMultitasking_4rates/Behavior' irvs = {'mMultitasking_4rates/Behavior/IRV1'} {'mMultitasking_4rates/Behavior/IRV2'} {'mMultitasking_4rates/Behavior/IRV3'} arIrvName = 'myIrv' arDataAccessMode = 'Explicit' irvs = {'mMultitasking_4rates/Behavior/IRV1'} {'mMultitasking_4rates/Behavior/IRV2'} {'mMultitasking_4rates/Behavior/myIrv'}
Компоненты программного обеспечения AUTOSAR могут использовать порты и интерфейсы, чтобы реализовать следующие формы общения:
Получатель отправителя (S-R)
Клиент-сервер (C-S)
Переключатель режима (M-S) — введенный в Релизе 4.0 AUTOSAR
Энергонезависимые данные (NV) — введенный в Релизе 4.0 AUTOSAR
Эти примеры показывают, как использовать свойство AUTOSAR и функции карты, чтобы сконфигурировать порты AUTOSAR, интерфейсы и связанные элементы для S-R, C-S и коммуникации M-S. Методы, показанные для конфигурирования портов S-R и интерфейсов также широко, применяются к коммуникации NV.
Сконфигурируйте и сопоставьте интерфейс получателя отправителя
Сконфигурируйте свойства элемента данных получателя отправителя
Сконфигурируйте и Интерфейс Получателя Отправителя Карты. Этот пример:
Открывает модель.
Добавляет интерфейс получателя отправителя AUTOSAR к модели.
Добавляют элементы данных.
Создает порты получателя и отправитель.
Карты импорт Simulink и выходные порты к получателю AUTOSAR и портам отправителя.
См. также Конфигурируют AUTOSAR Runnables и События.
% Open model hModel = 'autosar_swc_expfcns'; open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Add AUTOSAR S-R interface ifName = 'mySrIf'; ifPkg = get(arProps,'XmlOptions','InterfacePackage') addPackageableElement(arProps,'SenderReceiverInterface',ifPkg,ifName,'IsService',false); ifPaths=find(arProps,[],'SenderReceiverInterface','PathType','FullyQualified') % Add AUTOSAR S-R data elements with ReadWrite calibration access de1 = 'myDE1'; de2 = 'myDE2'; swCalibValue= 'ReadWrite'; add(arProps, [ifPkg '/' ifName],'DataElements',de1,'SwCalibrationAccess',swCalibValue); add(arProps, [ifPkg '/' ifName],'DataElements',de2,'SwCalibrationAccess',swCalibValue); % Add AUTOSAR receiver and sender ports with S-R interface name rPortName = 'myRPort'; pPortName = 'myPPort'; aswcPath = find(arProps,[],'AtomicComponent','PathType','FullyQualified'); add(arProps,aswcPath{1},'ReceiverPorts',rPortName,'Interface',ifName); add(arProps,aswcPath{1},'SenderPorts',pPortName,'Interface',ifName); % Use AUTOSAR map functions slMap=autosar.api.getSimulinkMapping(hModel); % Map Simulink inport RPort_DE2 to AUTOSAR receiver port myRPort and data element myDE2 rDataAccessMode = 'ImplicitReceive'; [arPortName,arDataElementName,arDataAccessMode]=getInport(slMap,'RPort_DE2') mapInport(slMap,'RPort_DE2',rPortName,de2,rDataAccessMode); [arPortName,arDataElementName,arDataAccessMode]=getInport(slMap,'RPort_DE2') % Map Simulink outport PPort_DE1 to AUTOSAR sender port myPPort and data element myDE1 sDataAccessMode = 'ImplicitSend'; [arPortName,arDataElementName,arDataAccessMode]=getOutport(slMap,'PPort_DE1') mapOutport(slMap,'PPort_DE1',pPortName,de1,sDataAccessMode); [arPortName,arDataElementName,arDataAccessMode]=getOutport(slMap,'PPort_DE1')
ifPkg = '/pkg/if' ifPaths = {'/pkg/if/Interface1'} {'/pkg/if/Interface2'} {'/pkg/if/mySrIf'} arPortName = 'RPort' arDataElementName = 'DE2' arDataAccessMode = 'ImplicitReceive' arPortName = 'myRPort' arDataElementName = 'myDE2' arDataAccessMode = 'ImplicitReceive' arPortName = 'PPort' arDataElementName = 'DE1' arDataAccessMode = 'ImplicitSend' arPortName = 'myPPort' arDataElementName = 'myDE1' arDataAccessMode = 'ImplicitSend'
Сконфигурируйте Свойства Элемента данных Получателя Отправителя. Этот пример циклы через получатель отправителя AUTOSAR (S-R) интерфейсы и элементы данных, чтобы сконфигурировать калибровочные свойства для элементов данных S-R.
% Open model hModel = 'autosar_swc_expfcns'; open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Configure SwCalibrationAccess for AUTOSAR data elements in S-R interfaces srIfs = find(arProps,[],'SenderReceiverInterface','PathType','FullyQualified') % Loop through S-R interfaces and get data elements for i=1:length(srIfs) srIf = srIfs{i}; dataElements = get(arProps,srIf,'DataElements','PathType','FullyQualified') % Loop through data elements for each S-R interface and set SwCalibrationAccess swCalibValue = 'ReadWrite'; for ii=1:length(dataElements) dataElement = dataElements{ii}; set(arProps,dataElement,'SwCalibrationAccess',swCalibValue) get(arProps,dataElement,'SwCalibrationAccess'); end end
srIfs = {'/pkg/if/Interface1'} {'/pkg/if/Interface2'} dataElements = {'/pkg/if/Interface1/DE1'} {'/pkg/if/Interface1/DE2'} dataElements = {'/pkg/if/Interface2/DE1'} {'/pkg/if/Interface2/DE2'} {'/pkg/if/Interface2/DE3'} {'/pkg/if/Interface2/DE4'}
Сконфигурируйте Свойства Сервера. Этот пример:
Открывает модель.
Добавляет интерфейс клиент-сервер AUTOSAR к модели.
Добавляет операция.
Создает порт сервера.
Создает выполнимый сервер.
Сопоставляет функцию Simulink с выполнимым сервером AUTOSAR.
% Open model hModel = 'mControllerWithInterface_server'; addpath (fullfile(matlabroot,'/help/toolbox/autosar/examples')); open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Add AUTOSAR C-S interface ifName = 'myCsIf'; ifPkg = get(arProps,'XmlOptions','InterfacePackage') addPackageableElement(arProps,'ClientServerInterface',ifPkg,ifName,'IsService',false); ifPaths=find(arProps,[],'ClientServerInterface','PathType','FullyQualified'); % Add AUTOSAR operation to C-S interface csOp = 'readData'; add(arProps, [ifPkg '/' ifName],'Operations',csOp); % Add AUTOSAR arguments to C-S operation with Direction and SwCalibrationAccess properties args = {'Op','In'; 'Data','Out'; 'ERR','Out'; 'NegCode','Out'} swCalibValue = 'ReadOnly'; for i=1:length(args) add(arProps,[ifPkg '/' ifName '/' csOp],'Arguments',args{i,1},'Direction',args{i,2},... 'SwCalibrationAccess',swCalibValue); end get(arProps,[ifPkg '/' ifName '/' csOp],'Arguments') % Add AUTOSAR server port with C-S interface name sPortName = 'mySPort'; aswcPath = find(arProps,[],'AtomicComponent','PathType','FullyQualified'); add(arProps,aswcPath{1},'ServerPorts',sPortName,'Interface',ifName); % Add AUTOSAR server runnable with symbol name that matches Simulink function name serverRunnable = 'Runnable_myReadData'; serverRunnableSymbol = 'readData'; swc = get(arProps,'XmlOptions','ComponentQualifiedName') ib = get(arProps,swc,'Behavior') runnables = get(arProps,ib,'Runnables'); % To avoid symbol conflict, remove existing runnable with symbol name readData delete(arProps,'SWC_Controller/ControllerWithInterface_ar/Runnable_readData') add(arProps,ib,'Runnables',serverRunnable,'symbol',serverRunnableSymbol); runnables = get(arProps,ib,'Runnables'); % Add AUTOSAR operation invoked event oiEventName = 'Event_myReadData'; add(arProps,ib,'Events',oiEventName,'Category','OperationInvokedEvent',... 'Trigger','mySPort.readData','StartOnEvent',[ib '/' serverRunnable]); % Use AUTOSAR map functions slMap=autosar.api.getSimulinkMapping(hModel); % Map Simulink function readData to AUTOSAR runnable Runnable_myReadData mapFunction(slMap,'readData',serverRunnable); arRunnableName=getFunction(slMap,'readData')
ifPkg = '/ControllerWithInterface_ar_pkg/ControllerWithInterface_ar_if' args = {'Op' } {'In' } {'Data' } {'Out'} {'ERR' } {'Out'} {'NegCode'} {'Out'} ans = {'myCsIf/readData/Op'} {'myCsIf/readData/Data'} {'myCsIf/readData/ERR'} {'myCsIf/readData/NegCode'} swc = '/pkg/swc/SWC_Controller' ib = 'SWC_Controller/ControllerWithInterface_ar' arRunnableName = 'Runnable_myReadData'
Сконфигурируйте Клиентские Свойства. Этот пример:
Открывает модель.
Добавляет интерфейс клиент-сервер AUTOSAR к модели.
Добавляет операция.
Создает клиентский порт.
Сопоставляет вызывающую сторону функции Simulink с клиентским портом AUTOSAR и операцией.
% Open model hModel = 'mControllerWithInterface_client'; addpath (fullfile(matlabroot,'/help/toolbox/autosar/examples')); open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Add AUTOSAR C-S interface ifName = 'myCsIf'; ifPkg = get(arProps,'XmlOptions','InterfacePackage'); addPackageableElement(arProps,'ClientServerInterface',ifPkg,ifName,'IsService',false); ifPaths=find(arProps,[],'ClientServerInterface','PathType','FullyQualified') % Add AUTOSAR operation to C-S interface csOp = 'readData'; add(arProps, [ifPkg '/' ifName],'Operations',csOp); % Add AUTOSAR arguments to C-S operation with Direction and SwCalibrationAccess properties args = {'Op','In'; 'Data','Out'; 'ERR','Out'; 'NegCode','Out'} swCalibValue = 'ReadOnly'; for i=1:length(args) add(arProps,[ifPkg '/' ifName '/' csOp],'Arguments',args{i,1},'Direction',args{i,2},... 'SwCalibrationAccess',swCalibValue); end get(arProps,[ifPkg '/' ifName '/' csOp],'Arguments') % Add AUTOSAR client port with C-S interface name cPortName = 'myCPort'; aswcPath = find(arProps,[],'AtomicComponent','PathType','FullyQualified'); add(arProps,aswcPath{1},'ClientPorts',cPortName,'Interface',ifName); % Use AUTOSAR map functions slMap=autosar.api.getSimulinkMapping(hModel); % Map Simulink function caller readData to AUTOSAR client port and operation [arPort,arOp] = getFunctionCaller(slMap,'readData'); mapFunctionCaller(slMap,'readData',cPortName,csOp); [arPort,arOp] = getFunctionCaller(slMap,'readData')
ifPaths = {'/pkg/if/csInterface'} {'/pkg/if/myCsIf'} args = {'Op' } {'In' } {'Data' } {'Out'} {'ERR' } {'Out'} {'NegCode'} {'Out'} ans = {'myCsIf/readData/Op'} {'myCsIf/readData/Data'} {'myCsIf/readData/ERR'} {'myCsIf/readData/NegCode'} arPort = 'myCPort' arOp = 'readData'
Этот пример:
Открывает модель.
Объявляет группу объявления режима AUTOSAR.
Добавляет интерфейс переключателя режима к модели.
Добавляет порт получателя режима.
Добавляет ModeSwitchEvent к выполнимому.
Сопоставляет импорт Simulink в порт получателя режима AUTOSAR и группу режима.
% Add path to model and mode definition files and open model addpath (fullfile(matlabroot,'/help/toolbox/autosar/examples')); hModel = 'mAutosarMsConfig'; open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % File mdgModes.m declares AUTOSAR mode declaration group mdgModes for use with the M-S interface. % See matlabroot/help/toolbox/autosar/examples/mdgModes.m, which must be on the MATLAB path. % The enumerated mode values are: % STARTUP(0) % RUN(1) % SHUTDOWN(2) % Separate code, below, defines mode declaration group information for XML export. % Apply data type mdgModes to Simulink inport MRPort set_param([hModel,'/MRPort'],'OutDataTypeStr','Enum: mdgModes') get_param([hModel,'/MRPort'],'OutDataTypeStr'); % Apply data type mdgModes and value STARTUP to Runnable1_subsystem/Enumerated Constant set_param([hModel,'/Runnable1_subsystem/Enumerated Constant'],'OutDataTypeStr','Enum: mdgModes') set_param([hModel,'/Runnable1_subsystem/Enumerated Constant'],'Value','mdgModes.STARTUP') % Add AUTOSAR M-S interface and set its ModeGroup to mdgModes ifName = 'myMsIf'; modeGroup = 'mdgModes'; ifPkg = get(arProps,'XmlOptions','InterfacePackage'); addPackageableElement(arProps,'ModeSwitchInterface',ifPkg,ifName,'IsService',true); add(arProps,[ifPkg '/' ifName],'ModeGroup',modeGroup) ifPaths=find(arProps,[],'ModeSwitchInterface','PathType','FullyQualified') % Add AUTOSAR mode-receiver port with M-S interface name mrPortName = 'myMRPort'; aswcPath = find(arProps,[],'AtomicComponent','PathType','FullyQualified'); add(arProps,aswcPath{1},'ModeReceiverPorts',mrPortName,'Interface',ifName); % Define AUTOSAR ModeSwitchEvent for runnable msRunnable = 'Runnable1'; msEventName = 'myMSEvent'; swc = get(arProps,'XmlOptions','ComponentQualifiedName'); ib = get(arProps,swc,'Behavior'); runnables = get(arProps,ib,'Runnables') add(arProps,ib,'Events',msEventName,'Category','ModeSwitchEvent',... 'Activation', 'OnTransition', ... 'StartOnEvent', [ib '/' msRunnable]); % Separate code, below, sets ModeSwitchEvent port and trigger values. % To pass validation, remove redundant timing event in AUTOSAR configuration events = get(arProps,ib,'Events'); delete(arProps,[ib,'/Event_t_1tic_A']) events = get(arProps,ib,'Events') % Export mode declaration group information to AUTOSAR data type package in XML mdgPkg = get(arProps,'XmlOptions','DataTypePackage'); mdgPath = [mdgPkg '/' modeGroup] initMode = [mdgPath '/STARTUP'] addPackageableElement(arProps,'ModeDeclarationGroup',mdgPkg,modeGroup,'OnTransitionValue',100) % Add modes to ModeDeclarationGroup and set InitialMode add(arProps,mdgPath,'Mode','STARTUP','Value',0) add(arProps,mdgPath,'Mode','RUN','Value',1) add(arProps,mdgPath,'Mode','SHUTDOWN','Value',2) set(arProps,mdgPath,'InitialMode',initMode) % Set ModeGroup for M-S interface set(arProps,[ifPkg '/' ifName '/' modeGroup],'ModeGroup',mdgPath) % Set port and trigger for AUTOSAR ModeSwitchEvent expTrigger = {[mrPortName '.STARTUP'], [mrPortName '.SHUTDOWN']} set(arProps,[ib '/' msEventName],'Trigger',expTrigger) % Use AUTOSAR map functions slMap=autosar.api.getSimulinkMapping(hModel); % Map Simulink inport MRPort to AUTOSAR mode receiver port myMRPort and mode group mdgModes msDataAccessMode = 'ModeReceive'; [arPortName,arDataElementName,arDataAccessMode]=getInport(slMap,'MRPort'); mapInport(slMap,'MRPort',mrPortName,modeGroup,msDataAccessMode); [arPortName,arDataElementName,arDataAccessMode]=getInport(slMap,'MRPort') % To pass validation, set inport Runnable1 sample time to -1 (inherited) set_param([hModel,'/Runnable1'],'SampleTime','-1')
ifPaths = {'/pkg/if/myMsIf'} runnables = {'ASWC/Behavior/Runnable_Init'} {'ASWC/Behavior/Runnable1'} {'ASWC/Behavior/Runnable2'} {'ASWC/Behavior/Runnable3'} events = {'ASWC/Behavior/Event_t_1tic_B'} {'ASWC/Behavior/Event_t_10tic'} {'ASWC/Behavior/myMSEvent'} mdgPath = '/pkg/dt/mdgModes' initMode = '/pkg/dt/mdgModes/STARTUP' expTrigger = {'myMRPort.STARTUP'} {'myMRPort.SHUTDOWN'} arPortName = 'myMRPort' arDataElementName = 'mdgModes' arDataAccessMode = 'ModeReceive'
Этот пример конфигурирует параметр экспорта AUTOSAR XML Exported XML file packaging (ArxmlFilePackaging
).
Чтобы сконфигурировать пути к пакету AUTOSAR, смотрите, Конфигурируют Пути к Пакету AUTOSAR.
% Open model hModel = 'autosar_swc_counter'; open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Set exported AUTOSAR XML file packaging to Single file get(arProps,'XmlOptions','ArxmlFilePackaging') set(arProps,'XmlOptions','ArxmlFilePackaging','SingleFile'); get(arProps,'XmlOptions','ArxmlFilePackaging')
ans = 'Modular' ans = 'SingleFile'
Этот пример конфигурирует путь к пакету AUTOSAR для экспорта XML. Для других имен свойства пути к пакету AUTOSAR смотрите, Конфигурируют Пакеты AUTOSAR и Пути.
Чтобы сконфигурировать другие опции экспорта XML, смотрите, Конфигурируют Опции Экспорта XML.
% Open model hModel = 'autosar_swc_counter'; open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Specify AUTOSAR application data type package path for XML export get(arProps,'XmlOptions','ApplicationDataTypePackage') set(arProps,'XmlOptions','ApplicationDataTypePackage','/Company/Powertrain/DataTypes/ADTs'); get(arProps,'XmlOptions','ApplicationDataTypePackage')
ans = '/Company/Powertrain/DataTypes/ApplDataTypes' ans = '/Company/Powertrain/DataTypes/ADTs'