В основанном на порте получателе отправителя 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) устанавливает состояние флага обновления, указывая, был ли элемент данных записан. Получатель вызывает Rte_IsUpdated_
API, который читает обновление, отмечает, и возвращает значение, указывающее, был ли элемент данных обновлен начиная с последнего чтения.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 содержит 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
замена
, или DontInvalidate
. Если значение входных данных недопустимо (флагом управления аннулированием является true
), получившееся действие определяется значением Signal invalidation policy:
Keep
- Замените значение входных данных на последнее допустимое значение сигналов.
Replace
- Замените значение входных данных на параметр 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
. В редакторе Отображений Кода, вкладке Inports, вот является отображение для импорта In1
.
Добавьте блок 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 содержит 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, создающие 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>