1. 诊断栈与UDS集成工程导入
在AUTOSAR工程中,诊断并不是一个孤立的模块,而是一条从应用层一直贯穿到总线物理层的完整链路。MICROSAR作为Vector提供的AUTOSAR基础软件实现,把这条链路拆分为若干可配置、可裁剪的模块,并通过标准化的接口把它们串接起来。理解这条链路的组成、UDS在其中的位置,以及集成工程从输入到交付的整体流程,是后续所有配置、代码生成与测试工作的前提。
一、MICROSAR诊断栈的组成
MICROSAR诊断栈自上而下大致可分为四层。最上层是应用层的诊断服务处理,通常由Dcm(Diagnostic Communication Manager)承担,它负责解析来自总线的诊断请求、管理诊断会话与安全状态、调度具体的诊断服务处理函数。Dcm之下是Dem(Diagnostic Event Manager),它管理故障事件、故障码(DTC)及其状态位、冻结帧与扩展数据,是故障存储与读取的核心。再往下是通信与传输层,包括CanTp(CAN Transport Protocol)或DoIP(Diagnostics over IP),负责把长报文分段、重组并处理流控。最底层是CanIf、CanDrv等总线驱动与接口模块,直接操作CAN控制器。
此外,还有几个贯穿各层的支撑模块:PduR负责PDU路由,把诊断报文在CanTp与Dcm之间正确分发;ComM与BswM参与通信与诊断状态的管理;NvM负责把Dem的故障数据持久化到非易失存储;Det与Dlt则用于开发阶段的错误检测与日志记录。这些模块共同构成一个可运行、可诊断的软件栈。
二、UDS在AUTOSAR中的位置
UDS(Unified Diagnostic Services,ISO 14229)定义的是诊断服务的语义与报文格式,它并不规定这些服务由哪个软件模块实现。在AUTOSAR架构中,UDS被映射到Dcm模块:Dcm接收UDS请求,根据服务标识符(SID)分派到对应的服务处理函数,再调用应用层的回调或Dem接口完成实际动作。也就是说,UDS是“协议规范”,Dcm是“协议实现载体”,两者是规范与实现的关系。
从报文流向看,一条UDS请求从诊断仪发出,经CAN总线进入CanDrv,由CanIf接收并交给CanTp;CanTp完成多帧重组后通过PduR路由到Dcm;Dcm解析SID并执行服务,例如0x22读数据、0x2E写数据、0x19读故障码、0x31例程控制。响应则沿相反方向回传。理解这条路径,才能在集成时快速定位问题出在哪一层。
三、集成工程的整体流程与交付物
一个典型的MICROSAR诊断集成工程,输入通常包括:整车或ECU的诊断需求规范(诊断调查表)、CAN通信矩阵(DBC或ARXML)、诊断数据库文件(CDD或ODX)、以及基础软件配置工具链(如DaVinci Configurator)。工程流程大致如下。
第一步是导入诊断描述文件。把CDD或ODX导入配置工具,工具会解析出诊断服务、DID、DTC、会话与安全等级等对象,并生成对应的Dcm、Dem配置骨架。第二步是配置通信参数。根据通信矩阵设置诊断请求与响应报文的CAN ID、寻址方式(物理寻址或功能寻址)、CanTp的块大小(BS)与最小间隔时间(STmin)。例如,典型配置中BS=8、STmin=10ms,意味着发送方每发8帧后等待流控帧,帧间最小间隔10ms。第三步是配置Dcm与Dem。包括支持的服务列表、会话切换条件、安全访问的种子与密钥算法、DTC的故障判定与去抖策略、冻结帧数据项等。第四步是生成代码并集成。配置工具输出Dcm_Cfg.c、Dem_Cfg.c等文件,与手写应用回调一起编译链接。第五步是测试与验证,使用CANoe或诊断仪执行UDS服务,观察响应码与故障状态。
交付物方面,除了可运行的ECU软件,还应包括:诊断配置工程文件、生成的配置代码、诊断服务测试报告、DTC与DID对照表、以及集成说明文档。这些交付物是后续维护与问题追溯的依据。
需要强调的是,诊断栈的配置不是孤立的参数填写,而是与通信、存储、操作系统资源相互约束的。例如,Dem的故障存储需要NvM提供块,Dcm的会话保持需要ComM维持通信,CanTp的缓冲区大小受RAM限制。集成工程师必须同时关注这些约束,才能交付一个稳定可用的诊断系统。