Context Navigation


モジュール間のPDU-IDの関係


はじめに

  • COMスタックでは,各モジュールにPDU-IDを設定するパラメータが存在する
  • 各PDU-IDがどのように使用されるか,モジュール間でどのように同じPDUを識別しているか,をCANプロトコルを題材に説明する

用語説明

COMスタック

  • AUTOSARアーキテクチャにおける,通信スタック(Communication Services,Communication Hardware Abstraction,Communication Drivers)の総称

PDU

グローバルPDU


各モジュール(Com,PduR,CanIf)におけるPDU-ID


PduRの振る舞いについて

  • PduRのルーティングテーブルでは,ルーティングパスをPduRSrcPduPduRDestPduのセット(1:N)で指定する
  • PduRSrcPduPduRDestPduにそれぞれグローバルPDUへの参照があるため,どのPDUを示しているか区別できる
  • 送信(Com→PduR→CanIf)
    • Com→PduRの場合,Comは対象のグローバルPDUに紐付いたPduRSrcPduのPDU-ID(PduRSourcePduHandleId)に対してPduR_ComTransmitを呼び出す
    • 続いて,PduR→CanIfでは,対象のグローバルPDUに紐付いたCanIfTxPduIdに対して,CanIf_Transmitを呼び出す
      • このとき,PduRDestPduに設定したPDU-IDは送信完了通知おいて,CanIfからPduR_CanIfTxConfirmationが呼び出される際のPDU-IDとなる
      • 従って,PduRDestPduのPDU-ID(PduRDestPduHandleId)の多重度は0..1となっており,受信PDUでは使用しない
      • AUTOSAR_SWS_PDURouter.pdf(PDUR322_Conf)参照
  • 受信(CanIf→PduR→Com)
    • CanIfからの受信の場合,受信したPDUのグローバルPDUに紐付いたPduRSrcPduのPDU-IDに対してPduR_CanIfRxIndicationを呼び出す
    • 続いて,PduR→Comでは,対象のグローバルPDUに紐付いたComIPduHandleIdに対して,Com_RxIndicationを呼び出す

ゼロコストオペレーション

  • ゼロコストオペレーションを設定するパラメータはPduRにしか存在しない
    • AUTOSAR_SWS_PDURouter.pdf(PDUR317_Conf)参照
    • configuration generatorconfiguration editorの意味と思われるが,いずれにしても,ゼロコストオペレーションとするかどうかはコンフィギュレーション設定時に影響することを言っている
  • PduRにて,ゼロコストオペレーション設定時に以下のようなAPI名を変換するマクロを用意する必要がある
    #define PduR_ComTransmit CanIf_Transmit
    #define PduR_CanIfRxIndication PduR_ComRxIndication
    
  • つまり,ComやCanIfは,PduRのPduRZeroCostOperationに関係なく,対象のグローバルPDUに紐付いたPduRSourcePduHandleIdを使用すればよい
    • この場合,PduRのジェネレータで,PduRSourcePduHandleIdと対象のグローバルPDUに紐付いたCanIfTxPduIdが一致しているか等のチェック処理が必要
    • ゼロコストオペレーションでもあっても,PduRのジェネレータは必要となる

COMスタックのコンフィギュレーション例

記法はABREX参照

EcuC:
 EcuC:
 EcucPduCollection:
 PduIdTypeEnum: UINT8
 PduLengthTypeEnum: UINT16
 Pdu_0:
 DefinitionRef: Pdu
 PduLength: 8
 Pdu_1:
 DefinitionRef: Pdu
 PduLength: 8
Com:
 Com:
 ComGeneral:
 ComVersionInfoApi: true
 ComSupportedIPduGroups: 2
 ComConfigurationUseDet: true
 ComConfig:
 ComConfigurationId: 1
 ComIPdu_0:
 DefinitionRef: ComIPdu
 ComIPduType: NORMAL
 ComIPduSignalProcessing: IMMEDIATE
 ComIPduDirection: RECEIVE
 ComIPduHandleId: 10
 ComPduIdRef: /EcuC/EcuC/EcucPduCollection/Pdu_0
 ComIPduGroupRef: /EcuC/Com/ComConfig/ComIPduGroup_0
 ComIPduSignalRef: /EcuC/Com/ComConfig/ComSignal_0
 ComIPdu_1:
 DefinitionRef: ComIPdu
 ComIPduType: NORMAL
 ComIPduSignalProcessing: IMMEDIATE
 ComIPduDirection: SEND
 ComIPduHandleId: 11
 ComPduIdRef: /EcuC/EcuC/EcucPduCollection/Pdu_1
 ComIPduGroupRef: /EcuC/Com/ComConfig/ComIPduGroup_1
 ComIPduSignalRef: /EcuC/Com/ComConfig/ComSignal_1
PduR:
 PduR:
 PduRGeneral:
 PduRZeroCostOperation: false
 PduRRoutingTables:
 PduRRoutingTable:
 PduRRoutingPath_0:
 PduRSrcPdu:
 PduRSourcePduHandleId: 20
 PduRSrcPduRef: /EcuC/EcuC/EcucPduCollection/Pdu_0
 PduRDestPdu:
 PduRDestPduRef: /EcuC/EcuC/EcucPduCollection/Pdu_0
 PduRRoutingPath_1:
 PduRSrcPdu:
 PduRSourcePduHandleId: 21
 PduRSrcPduRef: /EcuC/EcuC/EcucPduCollection/Pdu_1
 PduRDestPdu:
 PduRDestPduHandleId: 22
 PduRDestPduRef: /EcuC/EcuC/EcucPduCollection/Pdu_1
CanIf:
 CanIf:
 CanIfInitCfg:
 CanIfRxPduCfg:
 CanIfRxPduId: 30 # maybe unused ?
 CanIfRxPduCanId: 0x71
 CanIfRxPduRef: /EcuC/EcuC/EcucPduCollection/Pdu_0
 CanIfTxPduCfg:
 CanIfTxPduId: 31
 CanIfTxPduCanId: 0x72
 CanIfTxPduRef: /EcuC/EcuC/EcucPduCollection/Pdu_1

上記の場合,各モジュールの処理は以下となる

  • ComIPdu_1の送信
    • Com
      • ComIPdu_1(Pdu_1)の送信処理:PduR_ComTransmit(21)
    • PduR
      • PduRRoutingPath_1のルーティング処理:CanIf_Transmit(31)
    • CanIf
      • Canへの送信処理:Can_Write(0x72)
      • 送信完了通知:PduR_CanIfTxConfirmation(22)
    • PduR
      • 送信完了通知:Com_TxConfirmation(11)
  • ComIPdu_0の受信
    • CanIf
      • Canからの受信処理:CanId:0x71を受信→PduR_CanIfRxIndication(20)
    • PduR
      • PduRRoutingPath_0のルーティング処理:Com_RxIndication(10)
Last modified 3 years ago Last modified on Dec 8, 2022, 10:15:49 AM
Note: See TracWiki for help on using the wiki.

AltStyle によって変換されたページ (->オリジナル) /