基于CANoe平台的HIL仿真技术研究
2021-01-30姬小国赵国鹏徐春秋
姬小国 赵国鹏 徐春秋
(吉利汽车研究院智能电子软件中心测试工程部 浙江省宁波市 315336)
随着科学技术的飞速发展,人们对生活水平的要求越来越高,汽车行业也在酝酿着一场巨大的变革。汽车将再也不仅仅是一个代步工具,而会向着更智能、更舒适、更安全的方向发展。直接反映在如今的汽车上的表现是:整车功能越来越多,车辆中集成的控制器越来越多,整车的网络拓扑越来越复杂。这样的大环境下,要通过传统的实车路试和LabCar 测试来保证各个ECU 乃至整车的性能就显得捉襟见肘。为了确保最终产品质量,需要通过硬件在环(HIL)仿真技术及自动化测试手段来更快速、更全面、更精确的对ECU的功能进行测试。CANoe 是汽车电子功能测试工程师最长使用的工具,搭配同样由vector 公司开发的VT 系统,组成了基于CANoe平台的硬件在环(HIL)系统。这一套系统软硬件无缝衔接,采用该HIL 系统,不仅可以对ECU 的总线通信状态和I/O 口信号进行实时监测,还可以通过仿真手段模拟被测对象的周边状态,从而使测试更早介入产品开发进程,缩短开发周期,减少费用支出。
1 HIL测试系统环境
硬件在环仿真又叫做半实物仿真,是采用“真实控制器+虚拟控制对象对象”或者“仿真控制器+实际控制对象”的方式进行试验的技术。在本文中。我们以车身HIL 平台为例,车身HIL 系统分为硬件系统和软件系统,硬件系统中,程控电源、VT 板卡、上位机通过CANoe Case、以太网以及其他外围电路与实际被测ECU——车身控制器BCM 连接起来实现闭环系统,程控电源给板卡背板箱以及BCM 供电,我们从而通过对电源的编程实现对BCM的输入电压控制。选用不同功能类型的VT 板卡用于对BCM 硬线输入的仿真以及硬线输出的采集。
如图1所示,软件系统中,基于CANoe 平台的HIL 软件环境组成主要由底层驱动程序、CANoe 和vTESTstudio 组成。vTESTstudio 的作用是用于编写自动化测试脚本,将脚本导入CANoe 工程中即可以进行自动化测试。要实现自动化测试,仅凭vTESTstudio 是远远不够的,需要一个完整的软件环境来支持。CANoe 是用于搭建HIL 软件环境的,我们可以通过CANoe 在真实的总线上加入仿真的ECU 节点,来模拟BCM 所处的网络环境。
2 硬件层面
对于HIL 系统硬件层面的仿真,一般是通过VT 板卡的来实现的。VT 硬件板卡分了许多的型号,各自的功能也略有不同。主要的功能分为两类:开关仿真以及信号采集,对应被测对象BCM 的输入和输出。
2.1 输入端仿真
对于BCM 输入端的仿真,可以根据具体的输入信号类型选取对应的板卡通道进行仿真,在这里选取BCM 输入引脚中常见的几种开关类型为例。
图1:基于CANoe 平台的HIL 测试系统
图2
2.1.1 数字量信号仿真
简单的从物理结构上来说,就是开关闭合接地或者断开悬空这两种状态,BCM 通过内部的上拉电阻将该引脚的断开闭合状态转化成高低电平信号从而进行识别。HIL 测试属于黑盒测试,因此被测对象的内部结构如何我们不是很关心,我们需要做的就是将这种类型的引脚外接到特定的板卡通道上,通过CANoe 对板卡通道上的一些开关进行操作,即可仿真出断开闭合这两种开关状态。BCM的大部分输入引脚都是这种数字量信号的输入,大部分的VT 板卡都支持这种信号类型的仿真,如VT2848,VT1004,VT2004 等。
图3
图4:BCM 控制器Panel 控制及显示面板
图5:CANoe Simulation 界面
2.1.2 电阻量信号仿真
另一种比较常见的硬线输入信号是电阻量信号,这一类的开关是一个变阻器接到开关输入引脚与BCM 的信号地之间,BCM 通过判断电阻与输入引脚端的电压值来判断开关的阻值。对于这类型的硬线输入信号,我们可以通过VT2004 板卡来对其进行仿真,VT2004 板卡可以模拟从1-9999 欧姆的阻值。
2.1.3 PWM 波仿真
还有一部分硬线输入信号的类型为PWM 波输入方式,例如车辆的硬线碰撞信号。BCM 通过判断PWM 波的频率、占空比等来执行不同的动作。VT2004,VT2516 板卡可以进行这类输入信号的仿真,如图2所示。
2.2 输出量采集
板卡又叫数据采集卡,采集I/O 口的电平状态是其基础功能之一,我们采集的一般都是BCM 输出引脚的电平状态。使用特定VT 板卡可以采集输出引脚的高低电平,电压值,PWM 波的频率,周期,占空比等。这些参数可以作为最终的输出结果来验证,也可以作为HIL 系统测试系统的中间变量,作为输入给到其他ECU。
2.2.1 采集引脚高低电平状态
对于直接输出高低电平(HSD)的引脚,可以使用特定板卡直接采集到输出引脚的电压信号,以VT1004 板卡为例:如图‘VT1004板卡通道’所示,从ECU a端输入的电压信号经过AD转换器的转换,输入给Voltage Measurement 模块,同时将ECU b 或者busbar2b 接地作为Voltage Measurement 模块的参考地,可以得到被测信号的电压、以及由电压转换来的电平状态。我们可以设置一个弱电和强电的划分电压,如果这个电压值被设置为5V,那么当被测引脚输出大于5V 的电压时,代表该引脚电平状态的变量会置“1”,小于5V 则置“0”,极大的方便了我们的测试工作。
而一些输出引脚是不会直接输出高低电平的,也就是我们常说的低边驱动(LSD)。例如雨刮的输出引脚,它输出的两种状态是接地或者断路两种状态。对于这种情况,测量板卡是无法区分出这两种状态的,因此,这时候就需要给该引脚加一个上拉的电压,这个上拉电压可以是外部的,也可以使用VT 板卡提供的内部电源来上拉,根据具体环境进行选择。加了上拉之后,接地和断路状态就转化为可测的电压信号,从而被测量板卡采集出来。
2.2.2 采集PWM 波输出信号
如图3所示,对于以PWM 波输出的信号,可以直接使用VT2516、VT2848 板卡进行采集,从而得到PWM 波的频率、周期、占空比等参数,采集到的这些参数会赋值给固定的VT 系统变量,便于我们进行编程操作。有时候我们不想知道一个PWM 信号的占空比、频率这些信息,想知道的仅仅是这个引脚有无输出,我们可以使用其提供的RMS-Voltage(均方根等效电压)变量来获取该引脚的输出状态,用以进行编程操作。
做完上述工作之后,我们需要制作用户界面方便我们对控制器进行输入控制以及观察BCM 控制器的输出。在CANoe 工程中,针对BCM 硬件引脚的开关、负载等建立系统变量,将其与对应的板卡通道相互映射,这样,我们就可以通过对自定义系统变量的操作实现对板卡通道的操作或者观察,板卡通道已经通过前面描述的方法与控制器的实际引脚连接起来,因此,我们对系统变量的操作或者观察实际上就是对BCM 仿真输入的操作以及所采集输出信号的观察。将系统变量attach 到panel 面板的开关、按钮、LED 等图形类型上,就可以通过Panel 面板手动控制仿真开关并且观测控制器输出引脚的状态变化。如图4所示。
3 软件层面
3.1 CAN网络
CAN 总线在上世纪80年代由Bosch 公司提出,是一种有效支持分布式控制和实时控制的串行通信网络,现在主要为车辆网络通信系统的载体。目前在大部分车辆上,一般根据各ECU 控制对象的不同分出了几条不同的CAN,比如底盘CAN、车身CAN 等。每条CAN 上挂着同一域的控制器,不同CAN 上的控制器通过网关进行相互通信,为车辆的安全性、舒适性、经济性提供了保障。
3.2 CANoe及CAPL语言
CANoe 是德国VECTOR 公司开发的一款总线仿真及实时通信监测的工具,不管是总线设计工程师还是测试工程师,对于它肯定非常熟悉。使用CANoe 对被测ECU 的总线环境进行仿真时,一般需要用到CAPL(CAN Area Program Language)语言。它是一种面向事件的编程语言,同时也是一种类C 语言,对C 语言有基础的人学起来很容易上手。而且CANoe 中打包了许多的专用于汽车、CAN 网络的接口函数,比如可以在CANoe 的帮助文件中查阅到。
3.3 网络节点仿真
整车厂中,在传统ECU 软件验证过程中,往往受限于整车中其他与之交互的ECU 及对手件状态,一轮测试往往需要等到LabCar 台架集成并调试成功之后才能进行进行软件测试,因而导致软件的开发周期被迫延长。有了HIL 环境之后,我们可以在不需要任何其他控制器的情况下就可以进行ECU 软件的验证,这里就需要用到CANoe 的网络节点仿真功能。
对于舒适CAN 上的BCM 来说,与之在同一条CAN 上的节点有空调、门模块、电动后尾门等,其他域的控制器报文通过网关转发到舒适CAN 上,这样就实现了一个整车网络信息互通的状态。网络节点仿真,顾名思义就是对与BCM 直接交互的ECU 节点的仿真。我们的HIL 设备提供了一个真实的CAN 总线环境,CAN 总线上的真实节点只有BCM,因此,空调,门模块、电动后尾门、网关这些网络节点都需要仿真。如图5所示,我们在CANoe 的Simulation Setup 窗口中可以添加仿真的ECU 节点,将各节点外发到CAN 总线上的报文通过节点同步的或者CAPL 仿真的方式与各节点关联起来。当工程开始运行的时候,这些仿真节点就会像真实的ECU 节点一样开始外发报文到总线上,BCM 就会处于一个仿真的汽车CAN 总线网络环境中。对于仿真节点发送出来的报文信号,我们可以通过Panel 面板或者仿真节点里CAPL 代码对信号值进行更改,以此模拟出我们想要的信息输入给BCM。还有一些节点之间会发生对话,比如EMS 与PEPS 的认证,当被测对象为PEPS 时,我们需要对EMS 进行仿真。当监测到电源模式为ON 时,我们需要在规范定义时间内模拟EMS 发送挑战码,真实的PEPS 在收到我们模拟发送的挑战码时会回一个挑战码,当两者认证通过之后发动机才会正常工作,若是认证失败,发动机上锁并开启报警。其中涉及到复杂的算法,也需要我们自行进行仿真。
对于一些简单的ECU 间的交互,我们仿真起来会轻松很多,比如电动后尾门和BCM 的交互,后背门的解锁开关状态采集和解锁电机驱动是由BCM 控制的,但是解锁前需要得到电动后尾门的同意。按下后背门释放开关,BCM 会先发送一个开关状态给电动后尾门,后尾门同意之后会回复一个信号,BCM 得到肯定回复之后就会驱动解锁电机工作。对于这一简单交互的仿真就比较容易,我们可以在电动后尾门的仿真节点中使用CAPL 语言对BCM 外发的开关状态信号做响应,如果收到的后备箱开关状态信号显示为按下,并且综合一些其他规范定义的条件,那么就在多少秒内回复一个信号表示同意或者拒绝。我们只仿真虚拟件的逻辑,BCM 只会根据自己的内部逻辑进行工作,因此我们只需要尽可能真实的仿真BCM 的周围状态即可。
还有一些仿真需要软件加硬件的仿真方式。对于机械雨刮的Park 位信号是一个很典型的例子。Park 位信号是反应机械雨刮的实际位置的硬线信号,每当机械雨刮驱动电机转动过程中到达停止位时,该硬线信号就会改变状态,雨刮几百毫秒后离开停止位,硬线信号又恢复原来的值。这个park 位信号是一个由负载(雨刮电机)的机械运动生成的信号,BCM 对雨刮的控制只是引脚的高低电平,因此park 位信号可以说是与BCM 没有什么直接的联系,但是BCM 又确实的需要采集该信号的值来判断雨刮处于运动状态还是静止状态。因此,我们可以通过对BCM 的雨刮驱动控制引脚和雨刮速度控制引脚做响应,当雨刮驱动引脚输出时将park 位信号置为“非park 位”,同时设置一个定时器,时间为雨刮一个周期中不在park 位的时间。对该计时器做响应,当计时器到期之后将park 位信号置为“park 位”,同时设定一个新的计时器,计时器时间为park 位归位的时间。此计时器到点之后再将雨刮信号置为“非park 位”,设定计时器……如此一来,我们就成功仿真除了雨刮在刮刷过程中park 位信号随之变化的情况。我们可以通过改变计时器的计时就可以不同雨刮速度挡下雨刮park 位的变化情况。
4 总结
汽车行业HIL 仿真技术主要应用于车载ECU 的单件测试、系统测试以及整车层级的测试,采用仿真技术主要是为了满足测试需求。文章从软件层面和硬件层面分开来阐述HIL 仿真技术,在实际的测试过程中,这两种方式都是经常要被用到的。以故障注入测试为例,某个引脚的短路检测、断路检测、过载检测,需要用到硬件仿真技术,用特定板卡通道给该引脚仿真对应的故障状态;某帧报文丢失导致ECU 报故障码的测试,可以使用软件仿真的方式,通过CAPL 提供的特定接口函数禁用掉仿真节点发送的一帧或几帧报文。熟悉这些常用的仿真手段,有助于我们在HIL 测试的过程中更加如鱼得水。
综上所述,CANoe 和VT 系统具有强大的总线仿真和硬线仿真能力,文章主要介绍了笔者对于HIL 仿真技术的一些个人经验,当然,还远远不足。HIL 仿真技术当然不止与为了在脱离真实开关负载、交互控制器的时候可以进行测试,还有一点更重要的,是通过HIL 仿真技术可以实现尽可能全面、尽可能精确、尽可能深度的测试,以全方位的保证被测样件的功能正常,进而保障整车的性能,为客户提供更舒适、便捷的体验。