往期小怿向各位小伙伴介绍了Classic AUTOSAR专题之I/O模块,相信看过的小伙伴对Classic AUTOSAR的I/O模块已经有基本的认知了,本期为大家介绍《AUTOSAR模块之诊断模块》,内容超丰富,将分两期推出哦。
目录
1.概述
2.DCM
3.DEM
4.FIM
5.结语
为了对车辆生命周期内的运行状态进行监测,车辆诊断技术应运而生。AUTOSAR的诊断模块可以对汽车控制系统进行远程或本地诊断。它提供了一系列的规范,包括Diagnostics Communication Manager(DCM),Diagnostic Event Manager(DEM)和Function Inhibition Manager(FIM),以实现完整的整车诊断功能。
AUTOSAR诊断协议可帮助工程师进行车辆的故障诊断,定位和排查问题,并进行错误代码的管理和修复。诊断可应用于车辆制造商的生产线,车辆售后服务及维修等诸多场景。下面就为大家一一介绍不同诊断模块的主要功能。
DCM(Diagnostics Communication Manager)是底层的诊断通讯管理器模块,用于管理整个诊断通讯过程和处理诊断数据流。DCM模块的功能由三个子模块实现,分别是DSL(Diagnostic Session layer)用于处理诊断请求和诊断响应数据,并且对诊断的时序进行监控;DSD(Diagnostic Service Dispatcher)用于处理诊断数据流,以及DSP(Diagnostic Service Processing)用于分发不同的诊断服务请求。
DSL与其他模块的交互
与PduR模块交互:
● PduR模块向DSL提供诊断请求数据输入
● DSL模块向PduR模块输出诊断响应数据
与DSD子模块交互:
● DSL子模块通知DSD子模块关于传入的请求并提供数据
● DSD子模块将触发诊断响应的输出
与SWC/DSP模块交互:
● DSL子模块提供了对安全性和会话状态的访问
与ComM模块交互:
● DSL子模块保证了ComM模块所需的通信行为
诊断请求处理
● 将从PduR模块发出的请求转发到DSD子模块。DSL子模块应调用Dcm_TpRxIndication并返回参数Result = E_OK后,才将接收到的数据转发到DSD子模块
● Tester在线保持(“保持有效逻辑”)。“Tester在线”命令可由Tester通过物理请求/响应发送,即ISO14229-1 [1]中定义的“keep alive logic”
诊断响应处理
DSD子模块应请求DSL子模块进行诊断响应数据的传输。
● 转发DSD子模块传入的诊断响应数据到PduR模块。DSD子模块应请求DSL子模块进行诊断响应数据的传输
● 保证对测试仪的响应时间。如果应用程序(或DSP子模块)能够执行请求的诊断任务,但需要额外的时间来完成任务和准备响应,那么DSL子模块应在达到响应时间时发送NRC0x78(Response Pending)
● 支持周期型传输方式。UDS服务通过ReadDataByPeriodicIdentifier(0x2A)周期性读取数据;Periodic Transmission通信方式只能在Full Communication Mode模式下进行
● 支持事件型传输方式。UDS服务通过 ResponseOnEvent(0x86)请求ECU开始/暂停传输诊断响应
● 支持分段响应
安全等级处理
管理安全等级。DSL子模块应保存当前活动安全级别的级别,为了访问Security Level,DSL子模块提供了两个接口:
① 获取当前安全等级:Dcm_GetSecurityLevel
② 设置当前安全等级:DslInternal_SetSecurityLevel
会话状态处理
● 管理会话状态。DSL子模块应保存当前活动会话的状态,为了获取当前会话状态,DSL模块提供了两个接口:
① 获取当前会话状态:Dcm_GetSesCtrlType
② 设置新的会话:DslInternal_SetSesCtrlType()
● 保持跟踪当前运行的非默认会话。当非默认会话处于活动状态,并且到达会话超时(S3Server)时,DSL子模块应重置到默认会话状态(“默认会话”,0x01)
● 允许修改定时参数。包括P2ServerMin, P2ServerMax,P2*ServerMin, P2*ServerMax, S3Server
诊断协议处理
● 处理不同的诊断方案
● 管理资源
通信模式处理
● 通信需求处理(Full- / Silent- / No Communication)
● 指示active / inactive diagnostic
● 启用/禁用各种诊断传输
与DSL模块交互:
数据传递方向 |
解释 |
双向 |
交换诊断信息(接收/传输) |
DSD→DSL |
获取最新的诊断会话和最新的安全级别 |
DSL→DSD |
诊断消息传输确认 |
与DSP模块的交互:
数据传递方向 |
解释 |
DSD→DSP |
委托诊断请求处理 诊断消息传输确认 |
DSP→DSD |
处理已完成消息通知 |
支持检查诊断服务标识符并调整诊断消息
如果识别出新的诊断消息,DSL子模块应触发DSD子模块。DSD子模块将通过分析接收到的诊断消息中包含的诊断服务标识符进行相应的处理。
suppressPosRspMsgIndicationBit
如果“suppressPosRspMsgIndicationBit”为真,DSD子模块不得发送正响应消息。只有在服务具有子功能时才可用。
验证功能
在执行接收到的诊断服务之前,DSD会执行一组验证。只有当所有验证都成功通过,DSD才会接受服务。验证项包括:
● 验证制造商许可
● 验证SID
● 验证当前认证状态下的服务访问控制
● 诊断会话的验证
● 验证服务安全访问级别
● 验证供应商许可
● 验证服务ID的模式规则
检查格式和子功能支持:
在执行所请求的命令之前,DSD子模块会检查是否支持特定的子函数。如果未配置子服务,则DSD应发送负响应NRC:0x12(子功能不支持)。DSD子模块将在执行所请求的命令之前会检查最小消息长度。
将诊断信息分配到DSP子模块
DSD子模块收集DSP子模块新接收的诊断服务标识符的可执行功能,并调用相应的DSP服务解释器。
组装Positive/Negative Response:
当DSP子模块完成了所请求的诊断服务的执行时,DSD子模块应组装诊断响应报文。
启动传输
DSD子模块应将诊断响应信息转发给DSL子模块。
当接收到来自DSD子模块的调用请求时,DSP总是执行以下基本的处理步骤:
● 分析接收到的诊断请求消息
● 检查格式以及是否支持携带的子功能
● 在DEM、SW-Cs或其他BSW模块上获取数据或执行所需的函数调用
检查格式和子功能支持
DSP子模块将在执行所请求的命令之前检查合适的消息长度和结构。当分析诊断请求格式或长度有误时,DSP子模块应触发具有NRC:0x13(消息长度错误或无效格式)的负响应。
组装诊断响应报文
DSP子模块应组装不包括响应服务标识符的响应消息,并确定响应消息的长度。
负响应代码处理
当没有特定的NRC时,如果API调用执行服务未返回OK,DSP子模块应返回NRC: 0x10的负响应(一般拒绝)。如果请求消息包含不支持的参数时,DSP子模块应触发具有NRC:0x31的负响应(请求超出范围)。
诊断模式管理
● DcmDiagnosticSessionControl (service 0x10)
● DcmEcuReset (partly service 0x11)
● DcmSecurityAccess (service 0x27)
● DcmModeRapidPowerShutDown (partly service 0x11)
● DcmCommunicationControl_. (service
0x28)
● DcmControlDTCSetting (service 0x85)
● DcmResponseOnEvent_(service 0x86)
支持UDS服务
下表定义了DCM支持的UDS服务:
支持OBD服务
下表定义了DCM支持的OBD服务:
Dcm的配置包含支持的DID列表,可以通过两种方式配置:
● Individual DID configuration:需要每个DataElement(数据元素)单独配置一个连接来访问数据(读取、写入和控制)
● DID range configuration:用来处理在SWC中统一位于一个PortConnection内并且具有相同行为的DID