DEENESPTFRRUARHIKOZHNL

PDU Router (PduR)

ModulPduR (PDU Router)
BSW-Modul-ID51
Standard-Header#include "PduR.h"
SWS-SpezifikationAUTOSAR_SWS_PDURouter.pdf
ClusterCommunication Services

Руководство по модулюСОЗДАНО ИИ

Передаёт I-PDU по статической таблице маршрутизации без изменений между верхними и нижними коммуникационными модулями.
СОЗДАНО ИИ не проверено Модель: claude-opus-5-5 · Усилие: high · Температура: не регулируется · Промпт: 3a20c4ee9a26 Происхождение Открытые вопросы (1)
Причинный якорь: R20-11 Действует с R20-11 Заново синтезировано для этой версии спецификации.
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал

Передаёт I-PDU по статической таблице маршрутизации без изменений между верхними и нижними коммуникационными модулями.

PDU Router передаёт I-PDU между верхними модулями, такими как Com и DCM, коммуникационными интерфейсами и транспортными протоколами. При этом он лишь преобразует ID I-PDU вдоль сконфигурированных путей маршрутизации и не изменяет содержимое [SWS_PduR_00160]. В число его задач входят отправка, приём, TriggerTransmit, сегментированные передачи TP и шлюзы с опциональным буфером FIFO. Маршрутизация выполняется исключительно в состоянии PDUR_ONLINE после успешного вызова PduR_Init [SWS_PduR_00328]. Во время выполнения группы путей маршрутизации можно переключать с помощью PduR_EnableRouting и PduR_DisableRouting.

PDU Router передаёт I-PDU между верхними модулями, такими как Com и DCM, коммуникационными интерфейсами, такими как CanIf, FrIf и LinIf, а также транспортными протоколами. При этом он не изменяет I-PDU [SWS_PduR_00160] и маршрутизирует их только вдоль сконфигурированных путей маршрутизации [SWS_PduR_00162]. Его ключевой задачей является преобразование ID I-PDU как на тракте отправки, так и на трактах подтверждения и индикации [SWS_PduR_00766]. Интерфейсы являются обобщёнными; заполнители <Up>, <Lo> и <LoTp> определяются конфигурацией PduRBswModules [SWS_PduR_00504].

kontext cluster_oben Obere Module (<Up>) cluster_if Communication Interfaces (<Lo>) cluster_tp Transportprotokolle (<LoTp>) Com Com PduR PduR Routing-Tabellen, I-PDU-ID-Umsetzung, Gateway-Puffer Com->PduR PduR_ComTransmit Dcm Dcm Dcm->PduR PduR_<User:Up>Transmit BswM BswM BswM->PduR PduR_EnableRouting, PduR_DisableRouting PduR->Com Com_RxIndication, Com_TxConfirmation, Com_TriggerTransmit PduR->Dcm Dcm_StartOfReception, Dcm_CopyRxData, Dcm_CopyTxData, Dcm_TpRxIndication, Dcm_TpTxConfirmation Det Det PduR->Det Ошибки разработки и времени выполнения CanIf CanIf PduR->CanIf <Lo>_Transmit FrIf FrIf PduR->FrIf LinIf LinIf PduR->LinIf CanTp CanTp PduR->CanTp <LoTp>_Transmit FrTp FrTp PduR->FrTp LinTp LinTp (in LinIf) PduR->LinTp CanIf->PduR PduR_<User:Lo>RxIndication, TxConfirmation, TriggerTransmit CanTp->PduR PduR_<User:LoTp>StartOfReception, CopyRxData, CopyTxData, RxIndication, TxConfirmation

Контекстная диаграмма: PduR располагается между верхними модулями и модулями IF или TP; BswM переключает группы путей, ошибки передаются в DET. Источники: [SWS_PduR_00504], SWS PDU Router с. 16

PduR поддерживает только состояния PDUR_UNINIT и PDUR_ONLINE [SWS_PduR_00324]. Маршрутизация выполняется исключительно в PDUR_ONLINE [SWS_PduR_00328]. В это состояние он переходит с помощью PduR_Init(ConfigPtr) [SWS_PduR_00334]. До этого все функции, кроме PduR_Init и PduR_GetVersionInfo, сообщают об ошибке PDUR_E_UNINIT, если активна детекция ошибок [SWS_PduR_00119].

zustaende Powerup Powerup UNINIT PDUR_UNINIT нет маршрутизации; API кроме PduR_Init и PduR_GetVersionInfo сообщают о PDUR_E_UNINIT (при PduRDevErrorDetect) Powerup->UNINIT immediate ONLINE PDUR_ONLINE маршрутизация в соответствии с таблицами маршрутизации UNINIT->ONLINE PduR_Init(ConfigPtr) без ошибок: освободить буферы, установить значения по умолчанию, активировать группы путей маршрутизации согласно конфигурации ONLINE->ONLINE erneuter PduR_Init: PDUR_E_UNINIT an DET

Диаграмма состояний: включение питания приводит к состоянию PDUR_UNINIT; только безошибочный вызов PduR_Init переводит в состояние PDUR_ONLINE. Источники: [SWS_PduR_00325], [SWS_PduR_00326], SWS PDU Router Рис. 7.2 с. 53

В процессе работы PduR выполняет следующие процессы:

  • Запросы на отправку он передаёт каждому целевому интерфейсу [SWS_PduR_00625].
  • Запросы TriggerTransmit он направляет верхнему уровню [SWS_PduR_00430].
  • При многоадресной передаче TP он запрашивает одни и те же данные для каждого получателя с помощью TP_CONFPENDING или TP_DATARETRY [SWS_PduR_00631] [SWS_PduR_00632] и сообщает сводное подтверждение [SWS_PduR_00765].
  • В качестве шлюза он при необходимости буферизует данные в FIFO [SWS_PduR_00785]. Сегментированные TP-I-PDU он может пересылать на лету при превышении порога ровно одному получателю [SWS_PduR_00317] [SWS_PduR_00708].

Во время выполнения PduR_EnableRouting и PduR_DisableRouting переключают целые группы путей маршрутизации [SWS_PduR_00615] [SWS_PduR_00617], как правило, под управлением BswM. Вызовы на отключённом пути завершаются с E_NOT_OK [SWS_PduR_00717]. Ошибки разработки, такие как PDUR_E_PDU_ID_INVALID, PduR передаёт в DET [SWS_PduR_00100]. Потери в FIFO он сообщает как PDUR_E_PDU_INSTANCES_LOST [SWS_PduR_00670]. Собственная обработка ошибок на путях интерфейсов отсутствует; возвращаемые значения передаются источнику SWS PDU Router с. 46.

Роль и границы системы: передача I-PDU между верхними модулями, интерфейсами и транспортными протоколами

PDU Router (PduR) является центральным узлом маршрутизации классического коммуникационного стека. Он принимает I-PDU от модуля-источника и передаёт их без изменений и согласованно одному или нескольким целевым модулям [SWS_PduR_00160]. Маршрутизация осуществляется исключительно вдоль сконфигурированных путей маршрутизации [SWS_PduR_00162]. Путь однозначно определяется двумя параметрами: ID исходного I-PDU из конфигурации PduR и ID целевых I-PDU из конфигураций вызываемых целевых модулей [SWS_PduR_00161]. Поэтому ключевой задачей PduR является преобразование ID I-PDU. Оно действует как для тракта отправки, так и для трактов подтверждения и индикации [SWS_PduR_00766]. Каждый модуль выбирает свои дескрипторы (Handle ID) самостоятельно; конфигурация связывает их через «глобальный» PDU ECU Configuration Рис. 3.13 с. 192.

Выше PduR находятся такие модули, как Com и DCM. Ниже расположены коммуникационные интерфейсы, такие как CanIf, FrIf и LinIf, а также транспортные протоколы, такие как CanTp, FrTp и LinTp SWS PDU Router с. 24. Интерфейсы определены как обобщённые. Заполнители <Up>, <Lo> и <LoTp> заменяются через конфигурацию модуля, на которую ссылается PduRBswModules, а для CDD — через их apiServicePrefix [SWS_PduR_00504] SWS PDU Router Рис. 10.2 с. 95. Если нижний модуль поддерживает как TP, так и IF, добавляются инфиксы Tp и If [SWS_PduR_00800].

kontext cluster_oben Obere Module (<Up>) cluster_if Communication Interfaces (<Lo>) cluster_tp Transportprotokolle (<LoTp>) Com Com PduR PduR Routing-Tabellen, I-PDU-ID-Umsetzung, Gateway-Puffer Com->PduR PduR_ComTransmit Dcm Dcm Dcm->PduR PduR_<User:Up>Transmit BswM BswM BswM->PduR PduR_EnableRouting, PduR_DisableRouting PduR->Com Com_RxIndication, Com_TxConfirmation, Com_TriggerTransmit PduR->Dcm Dcm_StartOfReception, Dcm_CopyRxData, Dcm_CopyTxData, Dcm_TpRxIndication, Dcm_TpTxConfirmation Det Det PduR->Det Ошибки разработки и времени выполнения CanIf CanIf PduR->CanIf <Lo>_Transmit FrIf FrIf PduR->FrIf LinIf LinIf PduR->LinIf CanTp CanTp PduR->CanTp <LoTp>_Transmit FrTp FrTp PduR->FrTp LinTp LinTp (in LinIf) PduR->LinTp CanIf->PduR PduR_<User:Lo>RxIndication, TxConfirmation, TriggerTransmit CanTp->PduR PduR_<User:LoTp>StartOfReception, CopyRxData, CopyTxData, RxIndication, TxConfirmation

Контекстная диаграмма: PduR находится между верхними модулями и нижними модулями IF или TP; BswM переключает группы путей маршрутизации, ошибки передаются в DET. Источники: [SWS_PduR_00504], [SWS_PduR_00615], [SWS_PduR_00119], SWS PDU Router с. 16

Если установлен PduRZeroCostOperation и все пути маршрутизации относятся к этапу Pre-Compile, соседние модули могут вызывать друг друга напрямую [SWS_PduR_00287]. Если хотя бы один путь не является Pre-Compile, генератор должен выдать ошибку [SWS_PduR_00619] SWS PDU Router с. 56. Неиспользуемые функции генератор должен оптимизировать и удалять, то есть TP, IF, шлюз и FIFO [SWS_PduR_00764].

Жизненный цикл: от PDUR_UNINIT через PduR_Init к PDUR_ONLINE

PduR имеет ровно один конечный автомат [SWS_PduR_00644]. Он имеет состояния PDUR_UNINIT и PDUR_ONLINE из PduR_StateType [SWS_PduR_00324] [SWS_PduR_00742]. После включения питания модуль находится в PDUR_UNINIT [SWS_PduR_00325]. После успешного PduR_Init он переходит в PDUR_ONLINE [SWS_PduR_00326]. Маршрутизация происходит только в PDUR_ONLINE [SWS_PduR_00328]; в PDUR_UNINIT ничего не маршрутизируется [SWS_PduR_00330] SWS PDU Router Рис. 7.2 с. 53. На более старой иллюстрации дополнительно показано состояние PDUR_REDUCED после неудачной инициализации SWS PDU Router (alt) с. 30. Для R20-11 это состояние не применяется, поскольку здесь существует только два состояния.

zustaende Powerup Powerup UNINIT PDUR_UNINIT нет маршрутизации; API кроме PduR_Init и PduR_GetVersionInfo сообщают о PDUR_E_UNINIT (при PduRDevErrorDetect) Powerup->UNINIT immediate ONLINE PDUR_ONLINE маршрутизация в соответствии с таблицами маршрутизации UNINIT->ONLINE PduR_Init(ConfigPtr) без ошибок: освободить буферы, установить значения по умолчанию, активировать группы путей маршрутизации согласно конфигурации ONLINE->ONLINE erneuter PduR_Init: PDUR_E_UNINIT an DET

Диаграмма состояний: после включения питания PduR находится в PDUR_UNINIT и не маршрутизирует; только после безошибочного выполнения PduR_Init он выполняет маршрутизацию в PDUR_ONLINE. Источники: [SWS_PduR_00325], [SWS_PduR_00326], [SWS_PduR_00119], [SWS_PduR_00100], SWS PDU Router Рис. 7.2 с. 53

PduR_Init(ConfigPtr) является синхронной и нереентерабельной [SWS_PduR_00334]. Функция выполняет три действия:

  • Она освобождает все буферы [SWS_PduR_00645].
  • Она устанавливает сконфигурированные значения по умолчанию для буферов отправки [SWS_PduR_00308].
  • Она активирует группы путей маршрутизации в соответствии с параметром Enable-at-start [SWS_PduR_00709]. В более поздних редакциях этот параметр называется PduRIsEnabledAtInit SWS PDU Router с. 131.

До инициализации все функции, кроме PduR_Init и PduR_GetVersionInfo, возвращают ошибку PDUR_E_UNINIT, если активирован PduRDevErrorDetect [SWS_PduR_00119]. PduR_GetVersionInfo [SWS_PduR_00338] активируется через PduRVersionInfoApi System Template с. 656.

Данные Post-Build находятся в PduR_PBConfigType и реализованы в PduR_PBcfg.c [SWS_PduR_00241] [SWS_PduR_00743]. Они однозначно идентифицируются через PduRConfigurationId [SWS_PduR_00281]. Этот идентификатор возвращает PduR_GetConfigurationId [SWS_PduR_00341] [SWS_PduR_00280] как PduR_PBConfigIdType на основе uint16; блок управления может содержать несколько выбираемых конфигураций [SWS_PduR_00771]. Таблицы маршрутизации могут обновляться на этапе Post-Build [SWS_PduR_00295], однако только в неинициализированном состоянии [SWS_PduR_00296]. Потребность в памяти может возрасти с новой конфигурацией, поэтому её необходимо планировать на этапе проектирования SWS PDU Router с. 160.

Пути коммуникационных интерфейсов: Transmit, TriggerTransmit и подтверждения

Если верхний модуль вызывает PduR_<User:Up>Transmit [SWS_PduR_00406], PduR вызывает <Lo>_Transmit для каждого получателя [SWS_PduR_00625]. При этом он не буферизует данные [SWS_PduR_00629]. Для возвращаемого значения действует следующее:

  • При одноадресной передаче возвращаемое значение передаётся без изменений [SWS_PduR_00432] [SWS_PduR_00626].
  • При передаче Multicast одной успешной цели достаточно для E_OK [SWS_PduR_00218].

Цели многоадресной рассылки являются либо всеми интерфейсами, либо всеми транспортными протоколами, но никогда не смешиваются [SWS_PduR_00633].

CanIf копирует данные непосредственно при вызове Transmit SWS PDU Router Рис. 9.5 с. 100. FrIf и LinIf, напротив, запрашивают их позже через PduR_<User:Lo>TriggerTransmit [SWS_PduR_00369]. PduR пересылает этот вызов в <Up>_TriggerTransmit [SWS_PduR_00430] и возвращает полученное от него значение [SWS_PduR_00661] SWS PDU Router Рис. 9.6 с. 101. PduR_<User:Lo>TxConfirmation [SWS_PduR_00365] передаётся вместе с результатом в <Up>_TxConfirmation [SWS_PduR_00627]. При многоадресной передаче это происходит только после последнего подтверждения [SWS_PduR_00589].

Отправка I-PDU через Communication InterfacesComPduRCanIfFrIfPduR_ComTransmit(TxPduId, PduInfoPtr)Quell-I-PDU-ID in Ziel-I-PDU-ID umsetzenaltЦель с прямым предоставлением данных (CanIf)CanIf_Transmit(PduId, PduInfoPtr)copy data()Std_ReturnTypeЦель с TriggerTransmit (FrIf, LinIf)FrIf_Transmit(PduId, PduInfoPtr)set flag()Std_ReturnTypeВозвращаемое значение (Singlecast без изменений)Use Case: Позже: момент отправки в цикле FlexRayPduR_<User:Lo>TriggerTransmit(TxPduId, PduInfoPtr)Com_TriggerTransmit(TxPduId, PduInfoPtr)copy buffer()E_OK, SduLengthВозвращаемое значение без измененийUse Case: После передачиPduR_<User:Lo>TxConfirmation(TxPduId, result)Com_TxConfirmation(TxPduId, result)Подтверждение через CanIf выполняется аналогично;при Multicast только после последнего подтверждения

Диаграмма последовательности: отправка из Com с прямым предоставлением данных (CanIf) или с отложенным запросом данных через TriggerTransmit (FrIf), в каждом случае с последующим подтверждением. Источники: [SWS_PduR_00625], [SWS_PduR_00430], [SWS_PduR_00627], SWS PDU Router Рис. 9.5 с. 100, SWS PDU Router Рис. 9.6 с. 101

При приёме PduR_<User:Lo>RxIndication [SWS_PduR_00362] приводит к вызову <Up>_RxIndication для каждой верхней цели [SWS_PduR_00621]; поддерживается схема 1:n [SWS_PduR_00164] SWS PDU Router Рис. 9.1 с. 97. Длину PduR не проверяет ни при локальном приёме [SWS_PduR_00744], ни при локальной отправке [SWS_PduR_00745].

Пути транспортных протоколов: сегментированные I-PDU между DCM и модулями TP

При TP-отправке PduR вызывает <LoTp>_Transmit для каждой цели [SWS_PduR_00634]. Модуль TP забирает данные фрагментами через PduR_<User:LoTp>CopyTxData [SWS_PduR_00518]. PduR перенаправляет каждый запрос в <Up>_CopyTxData [SWS_PduR_00299] и передаёт дальше возвращаемое значение [SWS_PduR_00676] SWS PDU Router Рис. 9.9 с. 104.

При многоадресной передаче верхний уровень должен предоставлять одни и те же данные несколько раз. Запрос первого получателя направляется с TP_CONFPENDING верхнему уровню [SWS_PduR_00631], все последующие — с TP_DATARETRY [SWS_PduR_00632]. Верхний уровень получает после последнего подтверждения одно-единственное <Up>_TpTxConfirmation. Оно сообщает E_OK, если хотя бы один получатель сообщил E_OK [SWS_PduR_00765] SWS PDU Router Рис. 9.10 с. 83.

Многоадресная передача TP (TP-Multicast) из DcmDcmPduRCanTpFrTpPduR_<User:Up>Transmit(TxPduId, PduInfoPtr)CanTp_Transmit(PduId, PduInfoPtr)Std_ReturnTypeFrTp_Transmit(PduId, PduInfoPtr)Std_ReturnTypeStd_ReturnTypeloopдля каждой позиции передачиPduR_<User:LoTp>CopyTxData(id, info, retry, availableDataPtr)Dcm_CopyTxData(…)TpDataState = TP_CONFPENDINGBufReq_ReturnTypeBufReq_ReturnTypePduR_<User:LoTp>CopyTxData(id, info, retry, availableDataPtr)Dcm_CopyTxData(…)TpDataState = TP_DATARETRYBufReq_ReturnTypeBufReq_ReturnTypePduR_<User:LoTp>TxConfirmation(id, result)PduR_<User:LoTp>TxConfirmation(id, result)после последнего подтверждения:E_OK, если хотя бы одна цель сообщила E_OKDcm_TpTxConfirmation(id, result)

Диаграмма последовательности: при многоадресной передаче TP из DCM PduR запрашивает одни и те же данные для каждого получателя с TP_CONFPENDING или TP_DATARETRY и объединяет подтверждения. Источники: [SWS_PduR_00634], [SWS_PduR_00631], [SWS_PduR_00632], [SWS_PduR_00765], SWS PDU Router Рис. 9.10 с. 83

Приём TP начинается с PduR_<User:LoTp>StartOfReception [SWS_PduR_00507]. PduR перенаправляет его в <Up>_StartOfReception [SWS_PduR_00549] и возвращает его результат без изменений [SWS_PduR_00623]. После этого следуют две пересылки:

Вызов с SduLength 0 запрашивает доступный буфер или доступные данные [SWS_PduR_00740] SWS PDU Router Рис. 9.4 с. 99. Отмены PduR передаёт каждому получателю. PduR_<User:Up>CancelTransmit приводит к <Lo>_CancelTransmit или <LoTp>_CancelTransmit [SWS_PduR_00769] [SWS_PduR_00723] [SWS_PduR_00724]. PduR_<User:Up>CancelReceive приводит к <LoTp>_CancelReceive [SWS_PduR_00727].

TP-Empfang von CanTp an DcmCanTpPduRDcmPduR_<User:LoTp>StartOfReception(id, info, TpSduLength, bufferSizePtr)Dcm_StartOfReception(…)BUFREQ_OK, bufferSizePtrВозвращаемое значение без измененийloopдля каждого последующего сегментаPduR_<User:LoTp>CopyRxData(id, info, bufferSizePtr)Dcm_CopyRxData(…)copy data()BufReq_ReturnTypeBufReq_ReturnTypePduR_<User:LoTp>RxIndication(id, result)Dcm_TpRxIndication(id, result)

Диаграмма последовательности: при TP-приёме от CanTp к DCM PduR прозрачно транслирует StartOfReception, цикл CopyRxData и RxIndication один к одному. Источники: [SWS_PduR_00549], [SWS_PduR_00428], [SWS_PduR_00429], SWS PDU Router Рис. 9.4 с. 99

Работа в режиме шлюза: немедленная пересылка, буфер FIFO и передача TP на лету

Между коммуникационными интерфейсами PduR маршрутизирует 1:n [SWS_PduR_00436] и с немедленной пересылкой, то есть без собственного формирования скорости передачи [SWS_PduR_00437]. Шлюзование выполняется только IF↔IF или TP↔TP [SWS_PduR_00638]. Для передаваемой длины действует следующее:

  • Без буферизации PduR передаёт минимум из принятой длины и сконфигурированной целевой длины [SWS_PduR_00783].
  • С буферизацией он копирует максимум PduRPduMaxLength и отбрасывает остаток [SWS_PduR_00746].

I-PDU может одновременно передаваться локально в Com и пересылаться во вторую сеть CAN SWS PDU Router Рис. 9.14 с. 114.

То, как цель получает данные, определяет PduRDestPduDataProvision:

Для каждого целевого I-PDU можно настроить FIFO [SWS_PduR_00307]. Поведение FIFO действует при значении PduRQueueDepth больше 1 [SWS_PduR_00785]. Диаграмма деятельности обобщает правила ввода и вывода [SWS_PduR_00665] [SWS_PduR_00666].

gateway_fifo rx PduR_<SrcLo>RxIndication на буферизованном пути шлюза prov PduRDestPduDataProvision? rx->prov dleer FIFO пуст и нет ожидающего TxConfirmation? prov->dleer PDUR_DIRECT tleer FIFO leer? prov->tleer PDUR_TRIGGERTRANSMIT ddirekt <DstLo>_Transmit direkt aufrufen; FIFO bleibt leer dleer->ddirekt да voll FIFO voll? dleer->voll нет tkopie I-PDU in FIFO kopieren, <DstLo>_Transmit aufrufen tleer->tkopie да tleer->voll нет flush Очистить FIFO, PDUR_E_PDU_INSTANCES_LOST в DET; новую I-PDU обработать как при пустом FIFO voll->flush да einreihen Поставить I-PDU в очередь как самый новый элемент voll->einreihen нет tt PduR_<DstLo>TriggerTransmit ttleer FIFO leer? tt->ttleer ttnok Вернуть E_NOT_OK ttleer->ttnok да ttok скопировать и удалить самый старый элемент; FIFO не пуст: <DstLo>_Transmit с самой старой I-PDU ttleer->ttok нет conf PduR_<DstLo>TxConfirmation (direkte Datenbereitstellung) confnext FIFO не пуст: <DstLo>_Transmit с самой старой I-PDU, затем удалить conf->confnext

Диаграмма деятельности: в зависимости от способа предоставления данных и уровня заполнения FIFO шлюзуемый I-PDU отправляется немедленно, ставится в очередь или перезапускается после переполнения; TriggerTransmit и TxConfirmation очищают FIFO. Источники: [SWS_PduR_00665], [SWS_PduR_00793], [SWS_PduR_00786], [SWS_PduR_00787], [SWS_PduR_00255], [SWS_PduR_00669], [SWS_PduR_00666], [SWS_PduR_00667], [SWS_PduR_00662]

Для шлюзов TP существует два метода. При прямом шлюзовании (Direct Gatewaying) <DstLoTp>_Transmit запускается в RxIndication с помощью E_OK [SWS_PduR_00551]. При шлюзовании на лету (On-the-fly Gatewaying) повторная отправка начинается уже тогда, когда достигнут PduRTpThreshold [SWS_PduR_00317]. В этом случае разрешена только одна цель [SWS_PduR_00708], а уже отправленные данные повторно не передаются [SWS_PduR_00707] SWS PDU Router с. 58. Буфер PduR выбирает по размеру:

  • Если сообщение помещается в PduRPduMaxLength, он использует выделенный буфер [SWS_PduR_00797].
  • В противном случае он динамически запрашивает буфер из PduRTxBuffer [SWS_PduR_00798].

С помощью TxConfirmation он освобождает буфер [SWS_PduR_00637]. Если I-PDU должен быть дополнительно принят локально, PduR вызывает <UpTp>_StartOfReception, <UpTp>_CopyRxData и <UpTp>_RxIndication именно в таком порядке [SWS_PduR_00789]. Для этого он должен буферизовать данные, поскольку DCM ничего не знает о шлюзе SWS PDU Router с. 112.

Шлюз «на лету» (on-the-fly) для TP-I-PDU из CAN1 в CAN2CanTp (CAN1, Quelle)PduRCanTp (CAN2, Ziel)PduR_<User:LoTp>StartOfReception(id, info, TpSduLength, bufferSizePtr)Выбрать буфер: выделенный при TpSduLength ≤ PduRPduMaxLength,иначе динамически из PduRTxBufferBUFREQ_OK (без буфера: BUFREQ_E_OVFL)loopbis PduRTpThreshold erreichtPduR_<User:LoTp>CopyRxData(id, info, bufferSizePtr)copy data()BUFREQ_OKCanTp_Transmit(PduId, PduInfoPtr)Std_ReturnTypeloopоставшиеся сегменты, с чередованиемPduR_<User:LoTp>CopyRxData(…)BUFREQ_OKPduR_<User:LoTp>CopyTxData(id, info, retry, availableDataPtr)BUFREQ_OKPduR_<User:LoTp>RxIndication(id, result)PduR_<User:LoTp>TxConfirmation(id, result)Освободить буфер для этой целиДопускается только один целевой модуль TP;без повторной передачи уже отправленных данных

Диаграмма последовательности: при шлюзовании на лету между двумя сетями CAN повторная отправка начинается уже при достижении порога; приём и отправка выполняются с чередованием. Источники: [SWS_PduR_00317], [SWS_PduR_00708], [SWS_PduR_00797], [SWS_PduR_00799], [SWS_PduR_00637], SWS PDU Router Рис. 9.15 с. 110

Группы путей маршрутизации: переключение маршрутизации во время выполнения

Группы путей маршрутизации объединяют пути по сетям или типам PDU. Их переключение обычно выполняется BswM SWS PDU Router с. 69. Для этого служат PduR_EnableRouting(id) [SWS_PduR_00615] и PduR_DisableRouting(id, initialize) [SWS_PduR_00617]; идентификатор имеет тип uint16 [SWS_PduR_00654]. Активация вступает в силу немедленно [SWS_PduR_00715]. При деактивации действуют следующие правила:

  • initialize определяет, сбрасываются ли одиночные буферы в значение по умолчанию [SWS_PduR_00617].
  • FIFO остановленных путей очищаются, и PduR сообщает PDUR_E_PDU_INSTANCES_LOST [SWS_PduR_00663].
  • Функции API, вызываемые с ID I-PDU отключённого пути, возвращают E_NOT_OK без каких-либо дальнейших действий [SWS_PduR_00717] [SWS_PduR_00710] [SWS_PduR_00726].

Более поздние редакции явно перечисляют затронутые функции SWS PDU Router с. 69.

routinggruppen aufruf PduR_EnableRouting(id) или PduR_DisableRouting(id, initialize) exist Routing-Pfadgruppe id existiert? aufruf->exist det PduRDevErrorDetect aktiv? exist->det нет art Aufruf? exist->art да meld PDUR_E_ROUTING_PATH_GROUP_ID_INVALID melden det->meld да keine Возврат без действия det->keine нет meld->keine ein Немедленно активировать группу: последующий Transmit обслуживается напрямую art->ein EnableRouting aus Gruppe deaktivieren art->aus DisableRouting fifo Пути с FIFO (PduRQueueDepth > 1): очистить FIFO, PDUR_E_PDU_INSTANCES_LOST aus->fifo init initialize = TRUE: одиночный буфер в значение по умолчанию initialize = FALSE: сохранить текущее значение fifo->init gesperrt API с ID I-PDU деактивированного пути: E_NOT_OK без дальнейших действий init->gesperrt

Диаграмма деятельности: при неизвестном ID группы вызов возвращает управление без действий (при необходимости с сообщением в DET); в противном случае группа немедленно активируется или деактивируется с очисткой FIFO и обработкой буферов. Источники: [SWS_PduR_00647], [SWS_PduR_00648], [SWS_PduR_00716], [SWS_PduR_00649], [SWS_PduR_00715], [SWS_PduR_00663], [SWS_PduR_00717]

Руководство по управлению режимами (Mode Management Guide) рекомендует группы путей для I-PDU без группы Com-I-PDU, например для LdCom. Переключение выполняется по правилам BswM, например в зависимости от состояния частичной сети (Partial Network) Mode Management Guide с. 50. Действие BswM BswMPduRouterControl вызывает для этого PduR_EnableRouting или PduR_DisableRouting SWS BSW Mode Manager с. 145. При маршрутизации n:1 на локальный модуль во время выполнения может быть активен максимум один путь System Template с. 736 [SWS_PduR_00615].

Поведение при ошибке

Ошибки разработки определяет [SWS_PduR_00100]. Они регистрируются только в том случае, если активен PduRDevErrorDetect [SWS_PduR_00119] [SWS_PduR_00221]. О производственных ошибках PduR не сообщает SWS PDU Router с. 60.

Код ошибкиЗначениеТриггер
PDUR_E_INIT_FAILED0x00недействительный указатель конфигурации
PDUR_E_UNINIT0x01API до инициализации или PduR_Init вне PDUR_UNINIT
PDUR_E_PDU_ID_INVALID0x02недействительный идентификатор PDU
PDUR_E_ROUTING_PATH_GROUP_ID_INVALID0x08неизвестная группа при Enable/Disable [SWS_PduR_00648] [SWS_PduR_00649]
PDUR_E_PARAM_POINTER0x09нулевой указатель в качестве аргумента

Ошибка времени выполнения PDUR_E_PDU_INSTANCES_LOST возникает в трёх случаях:

В качестве обязательного интерфейса для этого PduR использует Det_ReportRuntimeError [SWS_PduR_91001].

На путях IF PduR не обрабатывает ошибки самостоятельно. Он передаёт возвращаемые значения источнику [SWS_PduR_00626] SWS PDU Router с. 46 и не выполняет повтор передачи [SWS_PduR_00256]. На путях TP ошибки также передаются через возвращаемое значение верхнему уровню [SWS_PduR_00700] SWS PDU Router с. 49. При наличии нескольких целей E_OK применяется только в том случае, если все цели возвращают E_OK [SWS_PduR_00701]. Это правило, по-видимому, относится к многоадресной рассылке TP, тогда как для многоадресной рассылки IF действует [SWS_PduR_00218]. Вопрос Q-4bd42fd8dc77ccf2 (открытый) Ошибочные индикации TP-RxIndication PduR лишь пересылает дальше [SWS_PduR_00207].

Для шлюзов TP действуют собственные правила:

  • Если RxIndication сообщает не E_OK, PduR останавливает обработку [SWS_PduR_00689].
  • Если при шлюзовании на лету не хватает места в буфере, он возвращает BUFREQ_E_NOT_OK и прерывает операцию [SWS_PduR_00687].
  • Если буфер вообще недоступен, он возвращает BUFREQ_E_OVFL [SWS_PduR_00799].
  • При сбое одной цели остальные продолжают работу [SWS_PduR_00803]. Если сбой происходит у всех целей, он останавливает принимающую сторону [SWS_PduR_00804].
  • В случае сбоя локального приёма он завершает сессию с верхним уровнем [SWS_PduR_00790] или сообщает E_NOT_OK через RxIndication [SWS_PduR_00791] [SWS_PduR_00792].

Дальнейшие подробные доказательства

Следующие разделы содержат утверждения этого руководства. Последовательности в главе 9 спецификации наглядно иллюстрируют их, например SWS PDU Router Рис. 9.5 с. 100.

Сгенерированное ИИ руководство на основе требований SWS PDU Router (R20-11) и соотнесённых разделов документов; нормативными являются исключительно требования, приведённые по ссылкам. Утверждения, обозначенные как интерпретация, просьба сверять со спецификацией.

PDU Router (PduR)

The PDU Router routes I-PDUs between communication interfaces, transport protocols, and upper layers without payload inspection.

Funktionen — Übersicht

Typen — Übersicht

Funktionen & Typen — Detailansicht

функция PduR_Init [SWS_PduR_00334] 📄 PDF

void PduR_Init (const PduR_PBConfigType* ConfigPtr);

Initializes the PDU Router

СОЗДАНО ИИ не проверено Модель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 8eca52c90f1c Происхождение
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал

Использование

Синхронная и нереентерабельная функция PduR_Init инициализирует маршрутизатор PDU [SWS_PduR_00334]. В качестве параметра она принимает с ConfigPtr указатель на конфигурацию Post-Build модуля (PduR_PBConfigType) и не возвращает значения [SWS_PduR_00334]. В рамках инициализации PduR_Init предварительно заполняет все буферы передачи PDU сконфигурированными стандартными значениями [SWS_PduR_00308].

Взаимодействие и требования к последовательности

После включения модуль сначала находится в состоянии PDUR_UNINIT [SWS_PduR_00325]. PduR_Init должна вызываться перед всеми другими функциями модуля, так как другие интерфейсы — за исключением PduR_GetVersionInfo — в неинициализированном состоянии сообщают об ошибке PDUR_E_UNINIT через DET, если активирован PduRDevErrorDetect [SWS_PduR_00119].

Обработка ошибок и параллелизм

Если PduR_Init вызывается в состоянии, отличном от PDUR_UNINIT, это расценивается как PDUR_E_UNINIT [SWS_PduR_00100]. При недействительном указателе конфигурации или передаче нулевого указателя срабатывают коды ошибок PDUR_E_INIT_FAILED или PDUR_E_PARAM_POINTER соответственно [SWS_PduR_00100]. Из-за отсутствия реентерабельности параллельный вызов процедуры инициализации не допускается [SWS_PduR_00334].

Этот текст был сгенерирован ИИ на основе спецификации AUTOSAR R20-11.

Руководство разработчика реализации в подготовке (сложность I1)

функция PduR_EnableRouting [SWS_PduR_00615] 📄 PDF

void PduR_EnableRouting (PduR_RoutingPathGroupIdType id);

Enables a routing path group.

СОЗДАНО ИИ не проверено Модель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: e3aad02fdb37 Происхождение Открытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал

Синхронная функция PduR_EnableRouting (идентификатор службы 0xf3) служит для направленной активации определённой группы путей маршрутизации в PDU-маршрутизаторе ([SWS_PduR_00615]). В качестве единственного параметра она принимает идентификатор группы id типа PduR_RoutingPathGroupIdType, который адресует соответствующую группу путей маршрутизации в конфигурации PDU-маршрутизатора ([SWS_PduR_00615]). Вызов не имеет возвращаемого значения и доступен через заголовочный файл PduR.h ([SWS_PduR_00615]).

Для безошибочного применения решающее значение имеют состояния системы и пределы параметров: до вызова модуль PduR должен быть полностью инициализирован, так как выполнение в неинициализированном состоянии вызывает ошибку PDUR_E_UNINIT ([SWS_PduR_00100]). Если функции PduR_EnableRouting передаётся недопустимый идентификатор таблицы маршрутизации или группы путей, это приводит к ошибке PDUR_E_ROUTING_PATH_GROUP_ID_INVALID со значением ошибки 0x08 ([SWS_PduR_00100]).

Что касается параллелизма, интерфейс объявлен как реэнтрантный ([SWS_PduR_00615]), так что параллельные вызовы для управления группами путей в принципе допустимы. В общей системе функция служит для динамической разблокировки связей передачи данных; вероятно, служба обычно инициируется вышестоящими инстанциями, такими как менеджер режимов, для активации путей маршрутизации во время выполнения в зависимости от состояний системы или сети. Вопрос Q-365f4b81f59f3511 (открытый)

Автоматически сгенерированное указание по использованию на основе спецификации AUTOSAR Classic (релиз R20-11).

функция PduR_DisableRouting [SWS_PduR_00617] 📄 PDF

void PduR_DisableRouting (PduR_RoutingPathGroupIdType id, boolean initialize);

Disables a routing path group.

СОЗДАНО ИИ не проверено Модель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 79b319e1f13b Происхождение
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал

Синхронная функция PduR_DisableRouting служит для деактивации сконфигурированной группы путей маршрутизации ([SWS_PduR_00617]). Она выполнена как реэнтрантная и не имеет возвращаемого значения ([SWS_PduR_00617]).

Параметры и поведение

  • id (PduR_RoutingPathGroupIdType): идентификация деактивируемой группы путей маршрутизации, как она определена в конфигурации PDU-маршрутизатора ([SWS_PduR_00617]).
  • initialize (boolean): управляет поведением буферов при деактивации. При передаче true одинарные буферы инициализируются своим значением по умолчанию; при false одинарные буферы сохраняют своё текущее значение ([SWS_PduR_00617]).

Обработка ошибок и граничные условия

В случае ошибки, согласно таблице ошибок, определены специфические коды ошибок ([SWS_PduR_00100]):

  • Если функция вызывается без инициализации модуля, предусмотрен код ошибки PDUR_E_UNINIT (0x01) ([SWS_PduR_00100]).
  • Если в PduR_DisableRouting передаётся недопустимая таблица маршрутизации или ID группы, специфицирована ошибка PDUR_E_ROUTING_PATH_GROUP_ID_INVALID (0x08) ([SWS_PduR_00100]).

Функция доступна через заголовочный файл PduR.h ([SWS_PduR_00617]).

Это указание по использованию было сгенерировано автоматически на основе требований спецификации.

тип PduR_PBConfigType [SWS_PduR_00743] 📄 PDF

Data structure containing post-build-time configuration data of the PDU Router.

тип PduR_PBConfigIdType [SWS_PduR_00771] 📄 PDF

Identification of the post-build configuration currently used for routing I-PDUs. An ECU may contain several configurations (post-build selectable), each have unique Id.

тип PduR_StateType [SWS_PduR_00742] 📄 PDF

States of the PDU Router

СОЗДАНО ИИ не проверено Модель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 9763b14fa079 Происхождение
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал

Перечислимый тип PduR_StateType специфицирует согласно [SWS_PduR_00742] состояния маршрутизатора PDU. Тип данных предоставляется через заголовочный файл PduR.h и служит в маршрутизаторе PDU формальной типизированной основой для представления соответствующего состояния инициализации внутри модуля, а также для вызывающих компонентов.

Согласно требованию [SWS_PduR_00324] модуль маршрутизатора PDU имеет ровно два рабочих состояния, которые определяются значениями перечисления PduR_StateType. Диапазон значений, определенный согласно [SWS_PduR_00742], включает в себя следующие значения:

  • PDUR_UNINIT: обозначает состояние, в котором маршрутизатор PDU не инициализирован ([SWS_PduR_00742]).
  • PDUR_ONLINE: сигнализирует о том, что маршрутизатор PDU успешно инициализирован и готов к работе ([SWS_PduR_00742]).

В рамках взаимодействия требований спецификации PduR_StateType функционирует как обязательное определение внутренней и внешней модели состояний маршрутизатора PDU ([SWS_PduR_00324]). Поскольку диапазон значений согласно [SWS_PduR_00742] ограничен исключительно PDUR_UNINIT и PDUR_ONLINE, спецификация здесь строго разграничивает неинициализированное исходное состояние и состояние после успешной инициализации. Дополнительные промежуточные ступени, режимы частичной работы или специфические состояния ошибок в диапазоне значений PduR_StateType не предусмотрены.

Автоматически сгенерированное указание по использованию на основе спецификации AUTOSAR.

Руководство разработчика реализации в подготовке (сложность I1)

Request a governed re-review of this record. The record is not changed immediately.

Record
AUTOSAR/AP/record/CP_MOD_PduR
Status
unspecified
Version
AUTOSAR/AP/record/CP_MOD_PduR@rel:R20-11#b8f7125f
Content hash
b8f7125f
Source
https://www.autosar.org/fileadmin/standards/R20-11/CP/AUTOSAR_SWS_PDURouter.pdf#nameddest=SWS_PduR_00334

Карта тем

Подробный вид

Выберите элемент в оглавлении.

Инициализация и состояние

PduR_GetVersionInfo функция

Returns the version information of this module.

void PduR_GetVersionInfo (Std_VersionInfoType* versionInfo);
PduR_Init функция

Initializes the PDU Router

void PduR_Init (const PduR_PBConfigType* ConfigPtr);

Сервисы

PduR_DisableRouting функция

Disables a routing path group.

void PduR_DisableRouting (PduR_RoutingPathGroupIdType id, boolean initialize);
PduR_EnableRouting функция

Enables a routing path group.

void PduR_EnableRouting (PduR_RoutingPathGroupIdType id);

Returns the unique identifier of the post-build time configuration of the PDU Router

PduR_PBConfigIdType PduR_GetConfigurationId (void);

Типы

Identification of the post-build configuration currently used for routing I-PDUs. An ECU may contain several configurations (post-build selectable), each have unique Id.

Data structure containing post-build-time configuration data of the PDU Router.

Identification of a Routing Table

States of the PDU Router