При коммуникации с получателем (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 = '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
, для интерфейсов отправитель-получатель. 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 поддерживает создание DataReceiveErrorEvent
s в компонентах приемника 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>