После создания Simulink® представление модели программного компонента AUTOSAR уточняет строение AUTOSAR. Вы можете уточнить строение AUTOSAR графически, с помощью Dictionary AUTOSAR и редактора Code Mappings, или программно, с помощью свойства AUTOSAR и функций map.
В этом разделе приведены примеры использования свойства AUTOSAR и функций карты для программной доработки строения AUTOSAR. Примеры предполагают, что вы создали модель Simulink с начальным строением AUTOSAR, как описано в разделе Создание компонента. (Для уточнения конфигурации AUTOSAR строение раздел «Строение компонента AUTOSAR».)
Вот демонстрационное упорядоченное расположение программных задач строения.
Список свойств AUTOSAR и функций карты см. в списке Functions на странице 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'; addpath(fullfile(matlabroot,'/examples/autosarblockset/main')); 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
(В)
Provide
из
Комбинированные Provide-Require
(InOut)
Порты AUTOSAR могут ссылаться на следующие виды коммуникационных интерфейсов AUTOSAR:
Отправитель-получатель
Клиент-сервер
Переключатель режимов
Свойства и отображение, которые можно задать для порта AUTOSAR, варьируются в зависимости от типа интерфейса, на который он ссылается. В этих примерах показано, как использовать свойство AUTOSAR и функции карты для настройки портов AUTOSAR для каждого типа интерфейса.
Сконфигурируйте и сопоставьте порты отправителя-получателя. Этот пример:
Открывает модель.
Находит порты отправителя или приемника AUTOSAR.
Циклы через порты и список связанных интерфейсов отправитель-получатель.
Изменение связанного интерфейса для порта.
Сопоставляет входной порт Simulink с портом приемника AUTOSAR.
См. также Конфигурирование интерфейсов отправителя-получателя AUTOSAR.
% Open model hModel = 'autosar_swc_expfcns'; addpath(fullfile(matlabroot,'/examples/autosarblockset/main')); 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.
Циклы через порты и список связанных интерфейсов mode-switch.
Изменение связанного интерфейса для порта.
Сопоставляет входной порт Simulink с приемным портом режима AUTOSAR.
См. также Конфигурирование интерфейсов переключения режимов AUTOSAR.
% 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 реализуется одним или несколькими выполняемыми. Выполнение AUTOSAR является запланированной сущностью, который прямо или косвенно запланирован базовой операционной системой AUTOSAR. Каждый запуск запускается RTEEvents, событиями, сгенерированными окружением выполнения (RTE) AUTOSAR. Для каждого выполняемого можно настроить событие, на которое оно отвечает. Вот примеры событий AUTOSAR, на которые реагируют runnables.
TimingEvent
- Запускает периодическое выполнение.
DataReceivedEvent
или DataReceiveErrorEvent
- Инициирует выполнение с портом приемника, который участвует в обмене данными между отправителем и получателем.
OperationInvokedEvent
- Инициирует выполнение с серверным портом, который участвует в обмене данными между клиентом и сервером.
ModeSwitchEvent
- Инициирует выполнение с портом приемника режима, который участвует в коммуникации mode-switch.
InitEvent
(Схема AUTOSAR 4.1 или выше) - инициирует выполнение, которое выполняет инициализацию компонента.
ExternalTriggerOccurredEvent
- Инициирует выполнение с портом приемника триггера, который участвует в передаче события внешнего триггера.
Сконфигурируйте AUTOSAR TimingEvent для периодического выполнения
Сконфигурируйте события для активации с возможностью выполнения
Сбор информации для пользовательского планировщика AUTOSAR Скрипта
Настройте AUTOSAR TimingEvent для периодического выполнения. Этот пример:
Открывает модель.
Находит выполняемые функции AUTOSAR.
Циклы через runnables и списки свойств.
Изменяет имя и символ для периодического выполнения AUTOSAR.
Циклы через события синхронизации AUTOSAR и списков связанных runnables.
Переименовывает событие синхронизации AUTOSAR.
Преобразует функцию точки входа Simulink в периодическое выполнение AUTOSAR.
% Open model hModel = 'autosar_swc_expfcns'; addpath(fullfile(matlabroot,'/examples/autosarblockset/main')); 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'
Сконфигурируйте и сопоставьте выполняемые файлы. Этот пример:
Открывает модель.
Добавляет в модель инициализацию AUTOSAR и периодические возможности выполнения.
Добавляет событие синхронизации к периодическому выполняемому.
Сопоставляет инициализацию Simulink и шаговые функции с выполняемыми AUTOSAR.
См. также раздел «Настройка событий для активации при запуске».
% Open model hModel = 'autosar_swc_counter'; addpath(fullfile(matlabroot,'/examples/autosarblockset/main')); 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'}
Настройте события для активации при запуске. В этом примере показан синтаксис функции свойства для добавления AUTOSAR TimingEvent
, DataReceivedEvent
, и DataReceiveErrorEvent
к выполняемому в модели. Для DataReceivedEvent
или DataReceiveErrorEvent
, вы задаете триггер. Имя триггера включает имя порта приемника AUTOSAR и элемента данных, который получает событие, например 'RPort.DE1'
.
Для OperationInvokedEvent
синтаксис см. в разделе Настройка интерфейсов клиент-сервер AUTOSAR.
Для ModeSwitchEvent
синтаксис см. в разделе Настройка интерфейсов режим-коммутатор AUTOSAR.
% Open model hModel = 'autosar_swc_expfcns'; addpath(fullfile(matlabroot,'/examples/autosarblockset/main')); 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 = 1×4 cell array {'ASWC/IB/Runnable_Init'} {'ASWC/IB/Runnable1'} {'ASWC/IB/Runnable2'} {'ASWC/IB/Runnable3'} events = 1×5 cell array {'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 с несколькими выполняемыми переменными для обмена данными между выполняемыми используются межпрограммные переменные (IRV). В Simulink вы моделируете IRV с помощью линий передачи данных, которые соединяют подсистемы. В приложении с несколькими скоростями линии передачи данных могут включать в себя блоки Rate Transition для обработки переходов между различными скоростями.
В этих примерах показано, как использовать свойство AUTOSAR и функции карты для настройки Авто-РСА без или с переходами скорости.
Сконфигурируйте переменную Inter-Runnable для линии передачи данных
Сконфигурируйте переменную Inter-Runnable для передачи данных с переходом по скорости
Сконфигурируйте переменную Inter-Runnable для линии передачи данных. Этот пример:
Открывает модель.
Добавляет межпрограммную переменную (IRV) AUTOSAR к модели.
Отображает передачу данных Simulink в IRV.
% Open model hModel = 'autosar_swc_expfcns'; addpath(fullfile(matlabroot,'/examples/autosarblockset/main')); 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'}
Сконфигурируйте переменную Inter-Runnable для передачи данных с переходом по скорости. Этот пример:
Открывает модель с несколькими скоростями.
Добавляет межпрограммную переменную (IRV) AUTOSAR к модели.
Сопоставляет блок Rate Transition Simulink с 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)
Энергонезависимые (NV) данные
В этих примерах показано, как использовать свойство AUTOSAR и функции карты для конфигурации портов, интерфейсов и связанных элементов AUTOSAR для связи S-R, C-S и M-S. Методы, показанные для настройки портов и интерфейсов S-R, также широко применяются к NV-связи.
Сконфигурируйте и сопоставьте интерфейс отправителя-получателя
Сконфигурируйте свойства элемента данных получателя-отправителя
Сконфигурируйте и сопоставьте интерфейс отправителя-получателя. Этот пример:
Открывает модель.
Добавляет интерфейс отправителя-получателя AUTOSAR к модели.
Добавляет элементы данных.
Создает порты отправителя и приемника.
Сопоставляет входные и выходные порты Simulink с портами приемника и отправителя AUTOSAR.
См. также раздел «Настройка выполняемых функций AUTOSAR и событий».
% Open model hModel = 'autosar_swc_expfcns'; addpath(fullfile(matlabroot,'/examples/autosarblockset/main')); 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'
Сконфигурируйте свойства элемента данных получателя-отправителя. Этот пример закольцовывается через интерфейсы отправителя-получателя (S-R) AUTOSAR и элементы данных, чтобы сконфигурировать свойства калибровки для элементов данных S-R.
% Open model hModel = 'autosar_swc_expfcns'; addpath(fullfile(matlabroot,'/examples/autosarblockset/main')); 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.
Добавляет интерфейс mode-switch к модели.
Добавляет порт приемника режима.
Добавляет 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'; addpath(fullfile(matlabroot,'/examples/autosarblockset/main')); 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'; addpath(fullfile(matlabroot,'/examples/autosarblockset/main')); 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'