При коммуникации с получателем (S-R) на основе портов AUTOSAR программные компоненты AUTOSAR считывают и записывают данные в другие компоненты или службы. Для реализации связи S-R программные компоненты AUTOSAR определяют:
Интерфейс отправителя-получателя AUTOSAR с элементами данных.
AUTOSAR обеспечивает и требует порты, которые отправляют и получают данные.
В Simulink®, можно:
Создайте интерфейсы и порты AUTOSAR S-R с помощью словаря AUTOSAR.
Модель AUTOSAR обеспечивает и требует порты с помощью выходов и входных портов корневого уровня Simulink.
Сопоставьте выходные порты и входные порты с AUTOSAR, обеспечивающими и требующими порты, с помощью редактора Отображения.
Для обмена данными между отправителем и получателем в очереди смотрите Конфигурирование связи между отправителем и получателем в очереди AUTOSAR.
Сконфигурируйте недействительность данных отправителя-получателя AUTOSAR
Сконфигурируйте порт интерфейса S-R AUTOSAR для сквозной защиты
Сконфигурируйте порт приемника AUTOSAR для DataReceiveErrorEvent
Сконфигурируйте ComSpecs порта отправителя-получателя AUTOSAR
Чтобы создать интерфейс S-R и порты в Simulink:
Откройте словарь AUTOSAR и выберите S-R Interfaces. Нажмите кнопку Add
, чтобы создать новый интерфейс данных AUTOSAR S-R. Укажите его имя и количество связанных элементов данных S-R.
Выберите и разверните новый интерфейс S-R. Выберите DataElements и измените атрибуты элемента данных AUTOSAR.

В словаре AUTOSAR разверните узел AtomicComponents и выберите компонент AUTOSAR. Разверните компонент.
Выберите и используйте представления ReceiverPorts, SenderPorts и SenderReceiverPorts для добавления портов AUTOSAR S-R, которые необходимо связать с новым интерфейсом S-R. Для каждого нового порта S-R выберите созданный интерфейс S-R.
Опционально исследуйте атрибуты связи для каждого порта S-R и изменяйте при необходимости. Дополнительные сведения см. в разделе Настройка ComSpecs порта отправителя-получателя AUTOSAR.

Откройте редактор Отображения. Выберите и используйте вкладки Inports и Outports, чтобы сопоставить входные и выходные порты Simulink с портами AUTOSAR S-R. Для каждого входного или выходного порта выберите порт AUTOSAR, элемент данных и режим доступа к данным.

AUTOSAR Release 4.1 представил порт AUTOSAR, требующий предоставления (PRPort). Моделирование AUTOSAR- PRPort включает использование пары inport и outport Simulink с совпадающими типом данных, размерностью и типом сигнала. Можно связать PRPort с интерфейсом отправитель-получатель (S-R) или с энергонезависимым (NV) интерфейсом данных.
Настройка AUTOSAR- PRPort для связи S-R в Simulink:
Откройте модель, которая сконфигурирована для AUTOSAR и в которой runnable имеет входной порт и выходной порт, подходящие для соединения в AUTOSAR PRPort. В этом примере RPort_DE1 порт и PPort_DE1 outport оба используют тип данных int8, размерность порта 1 и тип сигнала real.
Откройте словарь AUTOSAR и перейдите к представлению SenderReceiverPorts. (Чтобы сконфигурировать PRPort для связи NV используйте вместо этого представление NvSenderReceiverPorts .)
Чтобы добавить порт отправителя-получателя, нажмите кнопку Add.
В диалоговом окне Add Ports задайте Name следующим PRPort и выберите Interface из списка доступных интерфейсов S-R. Нажмите Add.

Откройте редактор Отображения и выберите вкладку Inports. Чтобы сопоставить входной порт Simulink с созданным портом отправителя-получателя AUTOSAR, выберите входной порт, установите Port значение PRPortи установите Element в элемент данных, который будут использовать входной порт и выходной порт.

Выберите вкладку Outports. Чтобы сопоставить выходной порт Simulink с созданным портом отправителя-получателя AUTOSAR, выберите выходной порт, установите Port значение PRPortи установите Element на тот же элемент данных, что и на предыдущем шаге.

Нажмите кнопку Validate
для проверки обновлённого строения компонента AUTOSAR. Если сообщается об ошибках, устраните их и повторите валидацию. Распространенной ошибкой, отмеченной валидацией, являются несоответствующие свойства между входным и выходным портами, которые сопоставлены с AUTOSAR PRPort.
Также можно программно добавить и сопоставить PRPort порт с использованием свойства AUTOSAR и функций map. В следующем примере добавляется AUTOSAR PRPort (порт отправителя-получателя), а затем преобразует его в пару входных и выходных портов Simulink.
hModel = 'my_autosar_expfcns'; open_system(hModel) arProps = autosar.api.getAUTOSARProperties(hModel); swcPath = find(arProps,[],'AtomicComponent')
swcPath =
'ASWCadd(arProps,'ASWC','SenderReceiverPorts','PRPort','Interface','Interface1') prportPath = find(arProps,[],'DataSenderReceiverPort')
prportPath =
'ASWC/PRPort'slMap = autosar.api.getSimulinkMapping(hModel); mapInport(slMap,'RPort_DE1','PRPort','DE1','ImplicitReceive') mapOutport(slMap,'PPort_DE1','PRPort','DE1','ImplicitSend') [arPortName,arDataElementName,arDataAccessMode] = getOutport(slMap,'PPort_DE1')
arPortName = PRPort arDataElementName = DE1 arDataAccessMode = ImplicitSend
AUTOSAR задает такие атрибуты качества обслуживания, как ErrorStatus и IsUpdated, для интерфейсов отправитель-получатель. The IsUpdated атрибут позволяет явному приемнику AUTOSAR обнаруживать, получил ли элемент данных порта получателя данные с момента последнего чтения. Когда данные находятся в простое, приемник может сэкономить вычислительные ресурсы.
Для отправителя Окружение выполнения AUTOSAR (RTE) устанавливает статус флага обновления, указывая, был ли записан элемент данных. Приемник вызывает API, который считывает флаг обновления и возвращает значение, указывающее, обновлялся ли элемент данных с момента последнего чтения.Rte_IsUpdated_<reservedrangesplaceholder0 >_ Element
В Simulink можно:
Импорт порта приемника AUTOSAR, для которого IsUpdated служба сконфигурирована.
Сконфигурируйте порт приемника AUTOSAR для IsUpdated сервис.
Сгенерируйте код C и ARXML для порта приемника AUTOSAR, для которого IsUpdated служба сконфигурирована.
Для моделирования IsUpdated сервис в Simulink, вы связываете входной порт, который сконфигурирован для ExplicitReceive доступ к данным с новым входным портом, настроенным для IsUpdated доступ к данным. Настройка порта приемника AUTOSAR для IsUpdated сервис:
Откройте модель, для которой сконфигурирован интерфейс отправитель-получатель AUTOSAR.
Идентифицируйте входной порт, соответствующий порту приемника AUTOSAR, для которого IsUpdated Требуется обслуживание. Создайте второй входной порт, установите его тип данных boolean, и соедините его с тем же блоком. Для примера:

Откройте редактор Отображения. Выберите вкладку Inports. В представлении inports настройте свойства отображения для обоих входных портов.
Если порт данных еще не сконфигурирован, установите значение DataAccessMode ExplicitReceive. Выберите Port и Element значения, которые сопоставляют входной порт с портом приемника AUTOSAR и элементом данных, для которого IsUpdated Требуется обслуживание.
Для входного порта качества обслуживания установите DataAccessMode равным IsUpdated. Выберите Port и Element значения, которые точно совпадают с входными данными.

Для проверки строения компонента AUTOSAR нажмите кнопку Validate.![]()
Создайте модель и смотрите сгенерированный код. Сгенерированный код C содержит Rte_IsUpdated Вызов API.
if (Rte_IsUpdated_Input_DE1()) {
…
Rte_Read_Input_DE1(&tmp);
…
}Экспортированный код ARXML содержит параметр ENABLE-UPDATE true для порта приемника AUTOSAR.
<R-PORT-PROTOTYPE UUID="...">
<SHORT-NAME>Input</SHORT-NAME>
<REQUIRED-COM-SPECS>
<NONQUEUED-RECEIVER-COM-SPEC>
<DATA-ELEMENT-REF DEST="VARIABLE-DATA-PROTOTYPE">/pkg/if/Input/DE1
</DATA-ELEMENT-REF>
…
<ENABLE-UPDATE>true</ENABLE-UPDATE>
…
</NONQUEUED-RECEIVER-COM-SPEC>
</REQUIRED-COM-SPECS>
…
</R-PORT-PROTOTYPE>Стандарт AUTOSAR задает механизм недействительности для элементов данных AUTOSAR, используемых в коммуникации отправитель-получатель (S-R). Отправитель, компонент может уведомить дочерний приемник, компонент данные в порту отправителя недопустимы. Каждый элемент данных S-R может иметь политику недействительности. В Simulink можно:
Импорт элементов данных отправителя-получателя AUTOSAR, для которых настроена политика недействительности.
Используйте блок Signal Invalidation, чтобы смоделировать недействительность данных отправителя-получателя для симуляции и генерации кода. Используя параметры блоков, можно задать политику недействительности сигнала и начальное значение для элемента данных S-R.
Сгенерируйте код С и описания ARXML для элементов данных отправителя-получателя AUTOSAR, для которых настроена политика недействительности.
Для каждого элемента данных S-R можно задать Signal Invalidation параметров блоков Signal invalidation policy Keep, Replace, или DontInvalidate. Если значение входных данных недопустимо (флаг управления недействительным true), полученное действие определяется значением Signal invalidation policy:
Keep - Замените значение входных данных на последнее допустимое значение сигналов.
Replace - Замените значение входных данных на параметр Initial value.
DontInvalidate - Не заменяйте значение входных данных.

Чтобы настроить политику недействительности для элемента данных AUTOSAR S-R в Simulink:
Откройте модель, для которой сконфигурирован интерфейс отправитель-получатель AUTOSAR. Например, предположим, что:
Выходной порт Simulink с именем Out сопоставлен с портом отправителя AUTOSAR PPort и OutElem элемента данных. В словаре AUTOSAR порт отправителя AUTOSAR PPort выбирает интерфейс S-R Out, который содержит элемент данных OutElem.
Входной порт Simulink с именем In1 сопоставлен с портом приемника AUTOSAR RPort1 и InElem1 элемента данных. В словаре AUTOSAR порт приемника AUTOSAR RPort1 выбирает интерфейс S-R In1, который содержит элемент данных InElem1. В редакторе Code Mappings, Inports вкладке, вот отображение для inport In1.


Добавьте блок Signal Invalidation к модели.
Блок должен быть подключен непосредственно к корневому блоку вывода. Соедините блок с корневым выходом Out.
Соедините вход первого блока, значение данных, с путем данных от корневого входного порта In1.
Для второго блока, флага управления недействительностью, добавьте корневой входной порт с именем In2 в модель. Установите его тип данных скаляром boolean. Сопоставьте новый входной порт со вторым портом отправителя AUTOSAR. Если второй порт отправителя AUTOSAR не существует, используйте словарь AUTOSAR для создания порта AUTOSAR, интерфейса S-R и элемента данных.
В этом примере Simulink inport In2 сопоставлен с портом приемника AUTOSAR RPort2 и InElem2 элемента данных. В словаре AUTOSAR порт приемника AUTOSAR RPort2 выбирает интерфейс S-R In2, который содержит элемент данных InElem2.
Соедините вход второго блока с корневым входным портом In2.


Просмотрите параметры блоков Signal Invalidation, для примера, в Property Inspector или в диалоговом окне параметров блоков. Исследуйте атрибуты Signal invalidation policy и Initial value. Для получения дополнительной информации см. Signal Invalidation страницы с описанием блоков.

Откройте редактор Отображения и выберите вкладку Outports. Для корневого порта Out, проверьте, что в режиме доступа к данным AUTOSAR установлено значение ExplicitSend или EndToEndWrite.

Чтобы проверить строение компонента AUTOSAR, откройте редактор Отображения и нажмите кнопку Validate.![]()
Создайте модель и смотрите сгенерированный код. Когда сигнал действителен, сгенерированный код C вызывает . Когда сигнал является недопустимым, код С вызывает Rte_Write_<reservedrangesplaceholder0 >_ Element.Rte_Invalidate_<reservedrangesplaceholder0 >_ Element
/* SignalInvalidation: '<Root>/Signal Invalidation' incorporates:
* Inport: '<Root>/In2'
*/
if (!Rte_IRead_Runnable_Step_RPort2_InElem2()) {
/* Outport: '<Root>/Out' */
(void) Rte_Write_PPort_OutElem(mSignalInvalidation_B.Gain);
} else {
Rte_Invalidate_PPort_OutElem();
}Экспортированный код ARXML содержит параметр недействительности для элемента данных.
<INVALIDATION-POLICY>
<DATA-ELEMENT-REF DEST="VARIABLE-DATA-PROTOTYPE">/pkg/if/Out/OutElem</DATA-ELEMENT-REF>
<HANDLE-INVALID>KEEP</HANDLE-INVALID>
</INVALIDATION-POLICY>
Сквозная (E2E) защита AUTOSAR для портов отправителя и приемника основана на E2E библиотеке. E2E библиотека на C используется для безопасной передачи данных между компонентами AUTOSAR. Сквозная защита добавляет дополнительную информацию к исходящему пакету данных. Компонент, принимающий пакет, может затем независимо проверить, что принятый пакет данных соответствует отправленному пакету. Потенциально принимающий компонент может обнаруживать ошибки и предпринимать действия.
Для более лёгкого интегрирования сгенерированного кода AUTOSAR с авто-РСА E2E решениями, Embedded Coder® поддерживает защиту E2E AUTOSAR. В Simulink можно:
Импорт портов отправителя и приемника AUTOSAR, для которых сконфигурирована защита E2E.
Сконфигурируйте порт отправителя или приемника AUTOSAR для E2E защиты.
Сгенерируйте код C и ARXML для портов отправителя и приемника AUTOSAR, для которых настроена E2E защита.
Необходимо сконфигурировать E2E защиту для портов отправителя и приемника AUTOSAR, которые используют явные режимы записи и чтения данных. При изменении режима доступа к данным порта AUTOSAR с явной записи на сквозную запись или с явной чтения на сквозную чтение:
Поведение симуляции не влияет.
Генерация кода похожа на явную запись и чтение, с этими различиями:
E2E API оболочки инициализации вызовов появиться в коде инициализации на C.
E2E API оболочки защиты вызовов появиться в коде шага С.
В сочетании со статусом ошибки inport сквозное чтение возвращается uint32 а не uint8.
Для приемник и отправителя, экспортер ARXML генерирует свойство USES-END-TO-END-PROTECTION со значением true.
Чтобы сконфигурировать порт отправителя или приемника AUTOSAR для E2E защиты:
Откройте модель, для которой сконфигурирован интерфейс отправитель-получатель AUTOSAR.
Откройте редактор Отображения. Перейдите к входному или выходному порту Simulink, который моделирует порт приемника или отправителя AUTOSAR, для которого необходимо сконфигурировать E2E защиту. Выберите порт.
Установите режим доступа к данным AUTOSAR равным EndToEndRead (inport) или EndToEndWrite (выход).


Для проверки строения компонента AUTOSAR нажмите кнопку Validate.![]()
Создайте модель и смотрите сгенерированный код. Сгенерированный код C содержит E2E Вызовы API.
void Runnable_Step(void)
{
…
/* Inport: '<Root>/Input' */
E2EPW_Read_RPort_InputDE(…);
…
/* Outport: '<Root>/Output'... */
(void) E2EPW_Write_PPort_OutputDE(…);
…
}
…
void Runnable_Init(void)
{
…
/* End-to-End (E2E) initialization */
E2EPW_ReadInit_RPort_InputDE();
E2EPW_WriteInit_PPort_OutputDE();
…
}
Экспортированный код ARXML содержит настройки E2E для портов приемника и отправителя AUTOSAR.
<NONQUEUED-RECEIVER-COM-SPEC>
…
<USES-END-TO-END-PROTECTION>true</USES-END-TO-END-PROTECTION>
…
<NONQUEUED-SENDER-COM-SPEC>
…
<USES-END-TO-END-PROTECTION>true</USES-END-TO-END-PROTECTION>
…В связи отправитель-получатель AUTOSAR между программными компонентами Окружениями выполнения (RTE) поднимает DataReceiveErrorEvent когда слой связи сообщает об ошибке в приеме данных компонентом приемника. Для примера. событие может указать, что компонент отправителя не смог ответить в AliveTimeout ограничение или то, что компонент отправителя отправил недопустимые данные.
Embedded Coder поддерживает создание DataReceiveErrorEvents в компонентах приемника AUTOSAR. В Simulink можно:
Импорт AUTOSAR- DataReceiveErrorEvent определение.
Задайте DataReceiveErrorEvent.
Сгенерируйте код ARXML для портов приемника AUTOSAR, для которых DataReceiveErrorEvent сконфигурирован.
Необходимо сконфигурировать DataReceiveErrorEvent для порта приемника AUTOSAR, который использует ImplicitReceive, ExplicitReceive, или EndToEndRead режим доступа к данным.
Настройка порта приемника AUTOSAR для DataReceiveErrorEvent:
Откройте модель, для которой сконфигурирована сторона приемника интерфейса отправителя-получателя AUTOSAR.
Откройте редактор Отображения. Выберите вкладку Inports. Выберите порт данных, сопоставленный с портом приемника AUTOSAR, для которого необходимо сконфигурировать DataReceiveErrorEvent. Установите режим доступа к данным AUTOSAR на ImplicitReceive, ExplicitReceive, или EndToEndRead. Вот два примера, без связанного порта ErrorStatus и с ним.


Откройте словарь AUTOSAR. Разверните узел AtomicComponents. Разверните компонент приемника и выберите Runnables.
В представлении runnables создайте runnable для обработки DataReceiveErrorEventс.
Нажмите кнопку Add
, чтобы добавить текущую запись.
Выберите новую запись для выполнения, чтобы сконфигурировать ее имя и другие свойства.
Перейдите на панель Events и сконфигурируйте DataReceiveErrorEvent для runnable. Нажмите Add Event, выберите type DataReceiveErrorEvent, и введите имя события.
В разделе Event Properties выберите триггер для события. Выбранное значение триггера указывает порт приемника AUTOSAR и элемент данных, для которого выполняется выполнение DataReceiveErrorEventс.

Также можно программно создать DataReceiveErrorEvent.
arProps = autosar.api.getAUTOSARProperties(mdlname);
add(arProps,ibQName,'Events','DRE_Evt',...
'Category','DataReceiveErrorEvent','Trigger','rPort.DE1',...
'StartOnEvent',runnableQName);Создайте модель и смотрите сгенерированный код. Экспортированный код ARXML определяет выполняемую обработку ошибок и ее триггерное событие.
<EVENTS>
<DATA-RECEIVE-ERROR-EVENT UUID="...">
<SHORT-NAME>DRE_Evt</SHORT-NAME>
<START-ON-EVENT-REF DEST="RUNNABLE-ENTITY">
/Root/mDemoModel_swc/ReceivingASWC/IB/Run_ErrorHandling</START-ON-EVENT-REF>
<DATA-IREF>
<CONTEXT-R-PORT-REF DEST="R-PORT-PROTOTYPE">
/Root/mDemoModel_swc/ReceivingASWC/rPort</CONTEXT-R-PORT-REF>
<TARGET-DATA-ELEMENT-REF DEST="VARIABLE-DATA-PROTOTYPE">
/Root/Interfaces/In/DE</TARGET-DATA-ELEMENT-REF>
</DATA-IREF>
</DATA-RECEIVE-ERROR-EVENT>
</EVENTS>
...
<RUNNABLES>
...
<RUNNABLE-ENTITY UUID="...">
<SHORT-NAME>Run_ErrorHandling</SHORT-NAME>
<MINIMUM-START-INTERVAL>0</MINIMUM-START-INTERVAL>
<CAN-BE-INVOKED-CONCURRENTLY>false</CAN-BE-INVOKED-CONCURRENTLY>
...
<SYMBOL>Run_ErrorHandling</SYMBOL>
</RUNNABLE-ENTITY>
</RUNNABLES>В программных компонентах AUTOSAR порт отправителя или приемника опционально может задать спецификацию связи (ComSpec). ComSpecs описывают дополнительные требования к связи для данных портов.
Чтобы смоделировать ComSpecs отправителя и приемника AUTOSAR в Simulink, можно:
Импорт ComSpecs отправителя и приемника из файлов ARXML.
Создайте ComSpecs отправителя и приемника в Simulink.
Для портов отправителя, не находящихся в очереди, измените атрибут ComSpec InitValue.
Для портов приемника, не находящихся в очереди, измените атрибуты ComSpec AliveTimeout, HandleNeverReceived, и InitValue.
Для портов приемника в очереди измените атрибут ComSpec QueueLength.
Экспорт ComSpecs в файлы ARXML
Например, если вы создаете порт приемника AUTOSAR в Simulink, вы используете редактор Отображения, чтобы сопоставить входной порт Simulink с портом приемника AUTOSAR и элементом данных S-R. Затем можно выбрать порт и задать его атрибуты ComSpec.

Вот свойства порта приемника в очереди.

При импорте или создании порта приемника AUTOSAR можно использовать словарь AUTOSAR для просмотра и редактирования атрибутов ComSpec сопоставленных элементов данных S-R в порте AUTOSAR.

Чтобы программно изменить атрибуты ComSpec порта AUTOSAR, используйте функцию свойства AUTOSAR set. Для примера:
hModel = 'autosar_swc';
addpath(fullfile(matlabroot,'/examples/autosarblockset/main'));
open_system(hModel);
arProps = autosar.api.getAUTOSARProperties(hModel);
% Find ComSpec path
portPath = find(arProps,[],'DataReceiverPort','PathType','FullyQualified');
ifPath = find(arProps,[],'SenderReceiverInterface','Name','Input_If','PathType','FullyQualified');
dataElementPath = find(arProps,ifPath{1},'FlowData','Name','In1','PathType','FullyQualified');
infoPath = find(arProps,portPath{1},'PortInfo',...
'PathType','FullyQualified','DataElements',dataElementPath{1});
comSpecPath = find(arProps,infoPath{1},'PortComSpec','PathType','FullyQualified');
% Set ComSpec attributes
set(arProps,comSpecPath{1},'AliveTimeout',30,'HandleNeverReceived',true,'InitValue',1);
get(arProps,comSpecPath{1},'AliveTimeout')
get(arProps,comSpecPath{1},'HandleNeverReceived')
get(arProps,comSpecPath{1},'InitValue')Чтобы задать QueueLength атрибут для порта приемника в очереди:
set(arProps,comSpecPath,'QueueLength',10);
Когда вы генерируете код для модели AUTOSAR, которая задает атрибуты ComSpec, экспортированные описания портов ARXML включают значения атрибутов ComSpec.
<PORTS>
<R-PORT-PROTOTYPE UUID="...">
<SHORT-NAME>ReceivePort</SHORT-NAME>
<REQUIRED-COM-SPECS>
<NONQUEUED-RECEIVER-COM-SPEC>
<DATA-ELEMENT-REF DEST="VARIABLE-DATA-PROTOTYPE">
/Company/Powertrain/Interfaces/Input_If/In1
</DATA-ELEMENT-REF>
...
<ALIVE-TIMEOUT>30</ALIVE-TIMEOUT>
<HANDLE-NEVER-RECEIVED>true</HANDLE-NEVER-RECEIVED>
...
<INIT-VALUE>
<CONSTANT-REFERENCE>
<SHORT-LABEL>DefaultInitValue_Double_1</SHORT-LABEL>
<CONSTANT-REF DEST="CONSTANT-SPECIFICATION">
/Company/Powertrain/Constants/DefaultInitValue_Double_1
</CONSTANT-REF>
</CONSTANT-REFERENCE>
</INIT-VALUE>
</NONQUEUED-RECEIVER-COM-SPEC>
</REQUIRED-COM-SPECS>
</R-PORT-PROTOTYPE>
</PORTS>
...
<CONSTANT-SPECIFICATION UUID="...">
<SHORT-NAME>DefaultInitValue_Double_1</SHORT-NAME>
<VALUE-SPEC>
<NUMERICAL-VALUE-SPECIFICATION>
<SHORT-LABEL>DefaultInitValue_Double_1</SHORT-LABEL>
<VALUE>1</VALUE>
</NUMERICAL-VALUE-SPECIFICATION>
</VALUE-SPEC>
</CONSTANT-SPECIFICATION>