wiki:tips/pdu_id
モジュール間の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

  • 各モジュールで定義するPDUには必ず,EcuCのPDUへの参照があり,どのPDUを示しているかを区別することができる
  • 各モジュールで定義するPDU-IDはスタック内のの上下のモジュールからAPIコール時に引数に指定されるIDを示している
  • つまり,ComがはPduRに対してPduR_ComTransmitを呼び出すときの引数(PDU-ID)は,PduR側でコンフィギュレーションした値であるPduRSourcePduHandleIdとなる
  • 従って,ComはPduRのarxmlを,PduRはCom/CanIfのarxmlを,CanIfはPduRのarxmlを読み込んで,送信先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 11 months ago Last modified on 31/01/19 22:28:16