如何将Dem内部DataElement映射至Dcm的ReadDataByIdentifier服务对应DID?
问题解答
核心配置逻辑梳理
你遇到的本质是AUTOSAR架构中Dem(诊断事件管理)与Dcm(诊断通信管理)的职责边界问题:
- Dem负责诊断数据的存储、内部管理,所以你能通过配置
DemDataClass关联内部数据(比如DEM_AGINGCTR)并绑定到DemDidClass,这是Dem自身的内部数据映射机制。 - Dcm则负责诊断服务的外部通信交互,它本身不直接管理Dem的内部数据,而是通过标准化的AUTOSAR接口与Dem交互,所以无法像Dem那样直接配置内部数据到DID的映射。
正确的配置映射步骤
要把Dem的这个内部数据映射到Dcm的ReadDataByIdentifier服务对应的DID,需要在Dcm侧做以下配置:
- 在Dcm中定义目标DID:创建
DcmDid配置项,指定对应的DID编号(比如符合ISO 15031或自定义编号)。 - 关联Dem数据读取接口:在
DcmDid的配置中,将DcmDidAccessMethod设为DCM_DID_ACCESS_DEM,并通过DcmDidDemRef关联到你之前配置好的DemDidClass。 - 配置权限与访问规则:根据需求设置
DcmDidSecurityAccess(如果需要安全访问)、DcmDidReadWritePermission等参数,确保服务调用合法。
为什么Dcm不能像Dem那样直接配置?
这是AUTOSAR的架构设计决定的:
- Dem专注于诊断数据的生命周期管理(存储、老化、故障触发等),内部数据映射是其核心功能的一部分,所以配置更直接。
- Dcm作为通信网关,需要兼容多种诊断服务规范(ISO 14229等),同时要对接多个模块(Dem、EcuM、NvM等),它的配置逻辑更偏向服务路由与接口适配,而非直接管理数据内容,因此不能直接复用Dem的内部数据配置方式。
注:你提到的手动实现方式(比如自定义读取函数)是可行的,但通过上述AUTOSAR标准配置方式,能更好地保证模块间的兼容性和可维护性。
内容的提问来源于stack exchange,提问作者Torsten Knodt
相关产品推荐
相关产品推荐

