В основанном на порте получателе отправителя AUTOSAR (S-R) коммуникация, чтение компонентов программного обеспечения AUTOSAR и записывают данные к другим компонентам или сервисам. Чтобы реализовать коммуникацию S-R, компоненты программного обеспечения AUTOSAR задают, обеспечивают и требуют портов, которые отправляют и получают данные.
В Simulink® можно создать AUTOSAR S-R интерфейсы и порты, и сопоставить импорт Simulink и выходные порты к портам AUTOSAR. Вы модель AUTOSAR обеспечивает и требует портов с выходными портами корневого уровня Simulink и импортом, как описано в Интерфейсе Получателя Отправителя.
Для коммуникации получателя отправителя с очередями смотрите, Конфигурируют AUTOSAR Коммуникация Получателя Отправителя С очередями.
Сконфигурируйте порт получателя AUTOSAR для сервиса IsUpdated
Сконфигурируйте аннулирование данных AUTOSAR получателя отправителя
Сконфигурируйте интерфейсный порт AUTOSAR S-R для сквозной защиты
Сконфигурируйте порт получателя AUTOSAR для DataReceiveErrorEvent
Сконфигурируйте порт AUTOSAR получателя отправителя ComSpecs
Создать интерфейс 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 и измените при необходимости. Для получения дополнительной информации смотрите, Конфигурируют Порт AUTOSAR Sender-Receiver ComSpecs.
Редактор Отображений Открытого кода. Выберите и используйте Inports, и Outports переходит, чтобы сопоставить импорт Simulink и выходные порты к портам AUTOSAR S-R. Для каждого импорта или выходного порта, выберите порт AUTOSAR, элемент данных и режим доступа к данным.
Релиз 4.1 AUTOSAR ввел AUTOSAR, обеспечивают - требуют порта (PRPort
). Моделирование PRPort
AUTOSAR включает использование импорта Simulink и пары выходного порта с соответствием с типом данных, размерностью и типом сигнала. Можно сопоставить PRPort
с интерфейсом (S-R) получателя отправителя или энергонезависимым интерфейсом данных (NV).
Сконфигурировать PRPort
AUTOSAR для коммуникации S-R в Simulink:
Откройте модель, которая сконфигурирована для AUTOSAR, и в котором выполнимое имеет импорт и выходной порт, подходящий для соединения в PRPort
AUTOSAR. В этом примере импорте RPort_DE1
и выходном порту PPort_DE1
и тип данных использования 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. Если об ошибках сообщают, обращаются к ним и затем повторяют валидацию. Распространенная ошибка, отмеченная валидацией, является свойствами, которым не соответствуют, между импортом и выходным портом, которые сопоставлены с PRPort
AUTOSAR.
Также можно программно добавить и сопоставить порт PRPort
с помощью свойства AUTOSAR и сопоставить функции. Следующий пример добавляет PRPort
AUTOSAR (порт получателя отправителя) и затем сопоставляет его с импортом Simulink и парой выходного порта.
hModel = 'my_autosar_expfcns'; open_system(hModel) arProps = autosar.api.getAUTOSARProperties(hModel); swcPath = find(arProps,[],'AtomicComponent')
swcPath = 'ASWC
add(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
, для интерфейсов получателя отправителя. Атрибут IsUpdated
позволяет явному получателю AUTOSAR обнаруживать, получил ли элемент данных порта получателя данные, поскольку последнее чтение произошло. Когда данные неактивны, получатель может сохранить вычислительные ресурсы.
Для отправителя Среда выполнения AUTOSAR (RTE) устанавливает состояние флага обновления, указывая, был ли элемент данных записан. Получатель вызывает API
, который читает, обновление отмечают, и возвращает значение, указывающее, был ли элемент данных обновлен начиная с последнего чтения.Rte_IsUpdated_Port_Element
В Simulink вы можете:
Импортируйте порт получателя AUTOSAR, для которого сконфигурирован сервис IsUpdated
.
Сконфигурируйте порт получателя AUTOSAR для сервиса IsUpdated
.
Сгенерируйте C и код arxml
для порта получателя AUTOSAR, для которого сконфигурирован сервис IsUpdated
.
К сервису модели IsUpdated
в Simulink вы соединяете импорт, который сконфигурирован для доступа к данным ExplicitReceive
с новым импортом, сконфигурированным для доступа к данным IsUpdated
. Сконфигурировать порт получателя AUTOSAR для сервиса IsUpdated
:
Откройте модель, для которой сконфигурирован интерфейс получателя отправителя AUTOSAR.
Идентифицируйте импорт, который соответствует порту получателя AUTOSAR, для которого требуется сервис IsUpdated
. Создайте второй импорт, установите его тип данных на boolean
и соедините его с тем же блоком. Например:
Редактор Отображений Открытого кода. Выберите вкладку Inports. В представлении импорта сконфигурируйте свойства отображения для обоих импорта.
Если импорт данных уже не сконфигурирован, установите DataAccessMode на ExplicitReceive
. Выберите Port и значения Element, которые сопоставляют импорт в порт получателя AUTOSAR и элемент данных, для которого требуется сервис IsUpdated
.
Для импорта качества сервиса, набор DataAccessMode к IsUpdated
. Выберите Port и значения Element, которые точно совпадают с импортом данных.
Чтобы подтвердить настройку компонента AUTOSAR, нажмите кнопку Validate.
Создайте модель и осмотрите сгенерированный код. Сгенерированный код C содержит вызов API Rte_IsUpdated
.
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 policy на Keep
, Replace
или DontInvalidate
. Если значение входных данных недопустимо (флагом управления аннулированием является true
), получившееся действие определяется значением Signal invalidation policy:
Keep
- Замените значение входных данных на последнее допустимое значение сигналов.
Замена-
Замените значение входных данных на параметр Initial value.
DontInvalidate
- Не заменяйте значение входных данных.
Сконфигурировать политику аннулирования для AUTOSAR S-R элемент данных в Simulink:
Откройте модель, для которой сконфигурирован интерфейс получателя отправителя AUTOSAR. Например, предположите что:
Выходной порт Simulink под названием Out
сопоставлен с портом PPort
отправителя AUTOSAR и элементом данных OutElem
. В Словаре AUTOSAR порт PPort
отправителя AUTOSAR выбирает интерфейс S-R Out
, который содержит элемент данных OutElem
.
Импорт Simulink под названием In1
сопоставлен с портом RPort1
получателя AUTOSAR и элементом данных InElem1
. В Словаре AUTOSAR порт RPort1
получателя AUTOSAR выбирает интерфейс S-R In1
, который содержит элемент данных InElem1
.
Добавьте блок Signal Invalidation в модель.
Блок должен быть соединен непосредственно с корневым блоком выходного порта. Соедините блок, чтобы базироваться выходной порт Out
.
Соедините первый вход блока, значение данных, к информационному каналу от корневого импорта In1
.
Для второго входа блока, флага управления аннулированием, добавляет корневой импорт под названием In2
к модели. Установите его тип данных на скалярный boolean
. Сопоставьте новый импорт во второй порт отправителя AUTOSAR. Если второй порт отправителя AUTOSAR не существует, используйте Словарь AUTOSAR, чтобы создать порт AUTOSAR, интерфейс S-R и элемент данных.
В этом примере импорт Simulink In2
сопоставлен с портом RPort2
получателя AUTOSAR и элементом данных InElem2
. В Словаре AUTOSAR порт RPort2
получателя AUTOSAR выбирает интерфейс S-R In2
, который содержит элемент данных InElem2
.
Соединитесь второй вход блока, чтобы базироваться импортируют In2
.
Просмотрите параметры блоков Аннулирования Сигнала, например, в Property Inspector или диалоговом окне параметров блоков. Исследуйте атрибуты Initial value и Signal invalidation policy. Для получения дополнительной информации смотрите страницу с описанием блока Signal Invalidation.
Редактор Отображений Открытого кода и выбор вкладка Outports. Для корневого выходного порта Out
проверьте, что режим доступа к данным AUTOSAR установлен в ExplicitSend
или EndToEndWrite
.
Подтвердить настройку компонента AUTOSAR, редактор Отображений открытого кода и нажать кнопку Validate.
Создайте модель и осмотрите сгенерированный код. Когда сигнал допустим, сгенерированный код C вызывает
. Когда сигнал недопустим, код С вызывает Rte_Write_Port_Element
.Rte_Invalidate_Port_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>
AUTOSAR сквозная защита (E2E) для отправителя и портов получателя основан на библиотеке E2E. E2E является библиотекой C, которой вы пользуетесь, чтобы передать данные надежно между компонентами AUTOSAR. Сквозная защита добавляет дополнительную информацию в исходящий пакет данных. Компонент, получающий пакет, может затем проверить независимо, что полученный пакет данных совпадает с отправленным пакетом. Потенциально, компонент получения может обнаружить ошибки и принять меры.
Для более легкого интегрирования сгенерированного кода AUTOSAR с решениями AUTOSAR E2E Embedded Coder® поддерживает защиту AUTOSAR E2E. В Simulink вы можете:
Импортируйте порт отправителя AUTOSAR и порты получателя, для которых сконфигурирована защита E2E.
Сконфигурируйте отправителя AUTOSAR или порт получателя для защиты E2E.
Сгенерируйте C и код arxml
для отправителя AUTOSAR и порты получателя, для которых сконфигурирована защита E2E.
Необходимо сконфигурировать защиту E2E для отправителя AUTOSAR и портов получателя, которые используют явную запись и читают режимы доступа к данным. Когда вы изменяете режим доступа к данным порта AUTOSAR от явной записи, чтобы от начала до конца записать, или из явного чтения, чтобы от начала до конца читать:
Поведение симуляции незатронуто.
Генерация кода подобна явной записи, и читайте с этими различиями:
Вызовы API обертки инициализации E2E появляются в коде инициализации C.
Вызовы API обертки защиты E2E появляются в коде шага C.
Когда объединено с ошибочным импортом состояния, сквозное чтение возвращает uint32
, а не uint8
.
Для получателя и отправителя COM-SPECs, средство экспорта arxml
генерирует свойство USES END TO END PROTECTION со значением true
.
Сконфигурировать отправителя AUTOSAR или порт получателя для защиты E2E:
Откройте модель, для которой сконфигурирован интерфейс получателя отправителя AUTOSAR.
Редактор Отображений Открытого кода. Перейдите к импорту Simulink или выходному порту, который моделирует получатель AUTOSAR или порт отправителя, для которого вы хотите сконфигурировать защиту E2E. Выберите порт.
Установите режим доступа к данным AUTOSAR на EndToEndRead
(импорт) или EndToEndWrite
(выходной порт).
Чтобы подтвердить настройку компонента AUTOSAR, нажмите кнопку Validate.
Создайте модель и осмотрите сгенерированный код. Сгенерированный код C содержит вызовы API E2E
.
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, создающие DataReceiveErrorEvent
s в компонентах получателя AUTOSAR. В Simulink вы можете:
Импортируйте определение DataReceiveErrorEvent
AUTOSAR.
Задайте DataReceiveErrorEvent
.
Сгенерируйте код arxml
для портов получателя AUTOSAR, для которых сконфигурирован DataReceiveErrorEvent
.
Необходимо сконфигурировать DataReceiveErrorEvent
для порта получателя AUTOSAR, который использует ImplicitReceive
, ExplicitReceive
или режим доступа к данным EndToEndRead
.
Сконфигурировать порт получателя AUTOSAR для DataReceiveErrorEvent
:
Откройте модель, для которой сконфигурирована сторона получателя интерфейса получателя отправителя AUTOSAR.
Редактор Отображений Открытого кода. Выберите вкладку Inports. Выберите импорт данных, который сопоставлен с портом получателя AUTOSAR, для которого вы хотите сконфигурировать DataReceiveErrorEvent
. Установите его режим доступа к данным AUTOSAR на ImplicitReceive
, ExplicitReceive
или EndToEndRead
. Вот два примера, без и с двойным портом ErrorStatus.
Откройте Словарь AUTOSAR. Расширьте узел AtomicComponents. Расширьте компонент получателя и выберите Runnables.
В представлении runnables создайте выполнимое, чтобы обработать DataReceiveErrorEvent
s.
Нажмите кнопку Add, чтобы добавить выполнимую запись.
Выберите новую выполнимую запись, чтобы сконфигурировать ее имя и другие свойства.
Перейдите к панели Events и сконфигурируйте DataReceiveErrorEvent
для выполнимого. Нажмите Add Event, выберите, вводят DataReceiveErrorEvent
и вводят имя события.
Под Event Properties выберите триггер для события. Выбранное триггерное значение указывает на порт получателя AUTOSAR и элемент данных, для которого выполнимое обрабатывает DataReceiveErrorEvent
s.
Также можно программно создать 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 описывают дополнительные коммуникационные требования для данных порта.
К отправителю модели AUTOSAR и получателю ComSpecs в Simulink, вы можете:
Импортируйте отправителя и получатель ComSpecs из файлов arxml
Создайте отправителя и получатель ComSpecs в Simulink
Для отправителя нес очередями и портов получателя, измените атрибут ComSpec InitValue
Для портов получателя нес очередями измените атрибуты ComSpec AliveTimeout
и HandleNeverReceived
Экспортируйте ComSpecs в файлы arxml
Например, если вы создаете порт получателя AUTOSAR в Simulink, вы используете редактор Отображений Кода, чтобы сопоставить импорт Simulink в порт получателя AUTOSAR и элемент данных S-R. Можно затем выбрать порт и задать его атрибуты ComSpec.
Если вы импортируете или создаете порт получателя AUTOSAR, можно использовать Словарь AUTOSAR, чтобы просмотреть и отредактировать атрибуты ComSpec сопоставленных элементов данных S-R в порте AUTOSAR.
Программно изменить атрибуты ComSpec AUTOSAR не поставило в очередь отправителя или порт получателя, используйте функцию свойства AUTOSAR set
. Например:
hModel = 'autosar_swc'; 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')
Когда вы генерируете код для модели 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>