汽车ECU UDS诊断的自动化测试
2022-11-02徐永新刘建飞
徐永新,刘建飞,华 典,朱 娟
(潍柴动力股份有限公司,山东 潍坊 261061)
科技的进步与发展使得人们的生活与工作更加电子化、自动化与智能化,汽车电子技术也在不断地创新与发展。随着控制器功能的不断扩张,各个厂家对自身产品的控制和信息读取提出了更多的要求,为了规范各个制造商的产品的质量和规范性,国际规定了统一的协议来满足制造商的需求。
基于控制器局域网 (Controller Area Network, CAN)总线的统一诊断服务(Unified Diagnostic Services, UDS)协议诊断被广泛应用到国内外的控制器开发中,来满足自身的开发需求和客户的下线与使用需求。电子控制单元(Electronic Control Unit, ECU)的UDS协议及功能的正确性必须得到充分的保证,便于产品的推广及应用。
目前测试方法更多的偏向使用报文收发工具进行手动测试或使用专用诊断工具测试;专用工具无法提前开发,常常会出现因工具未及时交付导致控制器本身没有全面测试而出现质量问题,导致ECU软件开发成本的增加。UDS诊断系统自动化测试可以高效完成基于报文交互的全面测试,从而降低缺陷率,减少软件开发成本。
1 UDS诊断系统
ECU的UDS诊断测试主要分为诊断协议测试和诊断功能测试。
UDS协议是基于开放系统互联(Open Systems Interconnection, OSI)参考模型设计,采用分层结构,主要包括物理层、数据链路层、网络层、会话层和应用层。ISO14229协议定义了通用诊断服务,这些诊断服务允许诊断仪控制车辆内部ECU内的诊断功能,但是ISO14229协议仅定义了应用层的服务,而ISO15765协议是基于CAN总线实现了UDS协议,二者与OSI的映射关系如表1所示。
表1 UDS协议与OSI的映射关系
本文主要阐述的UDS诊断协议为应用层的ISO14229协议。
UDS协议诊断功能单元主要有诊断和通信管理功能单元、数据传输功能单元、传输储存的数据功能单元、输入输出控制功能单元、远程激活例程功能单元、上传下载功能单元,本文主要阐述表2中UDS相关服务。
表2 UDS服务列表
UDS诊断系统中有三种会话模式,分别是正常会话模式、扩展模式及编程模式。其中正常会话模式,是ECU根据输入接口信号的变化进行逻辑计算从而控制车辆行驶;扩展模式主要用于外部维修及执行器测试;而编程模式则是进行ECU内部数据刷写。当存在外部请求时,会根据0x10服务进行会话模式的切换。
然而为保证ECU数据的安全性及软件的正常运行,扩展模式及编程模式下的外部请求操作需要经过0x27服务的密钥安全校验,顺利通过安全校验则解锁ECU,进行维修测试或数据刷写等操作,否则外部请求无效,ECU会回复响应以提示安全校验失败。具体流程如图1所示。
图1 安全访问流程图
诊断协议主要测试国际标准化组织(International Organization for Standardization, ISO)标准协议中规定的内容,借助CANoe等诊断工具即可完成;而诊断功能主要测试ECU的输入输出功能是否满足软件开发需求,比如外部设备请求ECU输出启动继电器吸合的控制信号,则需要观察启动继电器负载是否有输出。本文着重介绍UDS诊断功能的自动化测试。
2 测试系统搭建
测试UDS诊断功能需要搭建一个闭环系统,从硬件输入信号的变化到ECU的响应输出最终到执行器的实际动作检测,才是一条完整的测试流程并能保证测试的有效性及功能的正确性。通常的闭环测试系统如图2所示,主要包括被测ECU、硬件在环测试设备(Hareware In the Loop, HIL)台架(含有虚拟或真实负载)、诊断工具(Vector Hardware)、标定工具(Integrated Calibration and Acquisition Systems, INCA)、上位机。
图2 测试闭环系统
依据上述的测试平台,需要工程师对ECU中的每一条数据流、每一个执行器的诊断进行测试,数量之多,耗时耗力,且UDS的诊断测试操作相似,非常适合自动化测试及测试用例的移植。本文依据自动化测试软件ECU-TEST进行测试用例的开发。
ECU-TEST工具可以与HIL设备、INCA、Vector-Hardware进行链接,并通过应用程序编程接口(Application Programming Interface, API)函数对HIL设备上位机软件、INCA、Vector-Hardware进行读写操作,而且ECU-TEST软件支持二次开发,可以通过开发Python脚本实现特殊的测试需求,保证测试用例的顺利进行。
3 自动测试用例实现
根据图2所示的测试环境,通过ECU-TEST自动化测试软件将Vector、INCA及HIL上位机软件连接起来,形式闭环测试系统,并在ECU-TEST中编制测试用例及相应的脚本实现UDS诊断系统的自动化测试。
3.1 数据流自动化测试
数据流测试是根据ISO14229协议中的0x22服务获取ECU中相关变量的数值,该服务不需要经过ECU的安全访问。
数据识别符(Data Identifier, DID)数据流信息汇总如表3所示,在测试过程中根据DID码获取ECU的响应,并将返回值根据其基础数据类型、因子及偏移进行换算与INCA(XCP:1协议)监测值进行对比,判断DID码返回值是否正确。
表3 DID数据流信息
DID数据流的自动化测试采用ECU-TEST的Parameter Generator功能实现,可以在20 min内完成300条DID数据流的自动化测试,其测试流程如图3所示。该测试方法简单、高效且便于移植。
图3 DID数据流测试流程
3.2 执行器测试与服务功能自动化测试
UDS的执行器测试与服务诊断测试,使用ISO14229协议的0x2F服务及0x31服务,需要经过ECU的安全访问才可以进行后续操作,如图1所示。
为确保ECU软件及整车的行驶安全性,不同的控制器、相同的控制器不同的功能都会有各自的安全校验算法。因此,诊断功能的自动化测试难点及关键点就是如何与ECU完成安全校验。
ECU安全校验算法文件是ECU的门户,在ECU的生命周期中密级是最高的,所以无法获取该文件中的具体算法,因而可以使用脚本调用该算法文件间接实现全面的自动化测试。通过ECU-TEST调用Vector的API函数模拟图1的安全访问过程,在获取到Seed时调用Python脚本计算出Key,然后再通过Vector的API函数发送给ECU,从而实现与ECU的安全校验。安全访问的自动化测试用例流程如图4所示,图5为某ECU安全访问自动化测试顺利通过安全访问的测试报告。
图4 安全访问测试流程
图5 安全访问报告
将安全访问的自动化测试用例封装成模块库,可以被ECU各执行器的测试任意调用。诊断功能的自动化测试流程如图6所示,其中“安全访问”是对安全访问自动测试用例模块库的调用。
图6 执行器自动化测试
某发动机ECU执行器测试的自动化测试用例如图7所示,测试报告如图8所示。
图7 某发动机ECU执行器诊断自动测试用例
图8 测试报告
4 结束语
通过对某发动机ECU执行器诊断功能的测试,充分证明该自动测试方法可以顺利通过ECU的安全访问并完成对ECU数据流读取、执行器测试和服务诊断功能的验证,大大缩减了ECU软件开发过程中的重复性测试的工作量,保证了软件测试的高效性和一致性,有效保障了软件的开发进度及UDS诊断系统质量。