基于VSPY的整车CAN总线节点仿真测试
2018-10-22杨艳冯烙烙罗鹏飞蒋涛喻尚
杨艳,冯烙烙,罗鹏飞,蒋涛,喻尚
(陕西重型汽车有限公司,陕西 西安 710200)
前言
随着商用车整车CAN网络电子控制单元增多,CAN已成为整车不可或缺的一部分,支持 CAN总线协议已成为整车电子控制器的基础功能。而通过 CAN总线收发工具,实现对各个 CAN总线控制器节点的仿真测试,已成为测试人员的必备技能。Vehicle Spy(VSPY)是一款能进行节点仿真的CAN总线收发工具,本文即以VSPY为基础,实现CAN总线节点的仿真,完成仿真环境的搭建,并将其应用到实际测试中。本文以控制器A为例,实现CAN总线节点的仿真,并在车载终端的测试中进行应用,完成对应功能的仿真测试。
1 控制器A仿真搭建
1.1 仿真概述
控制器A的仿真,是依赖于VSPY中各个功能部件进行搭建的,包括报文编辑、图形面板、Function Block、C Code Interface几部分。其中报文编辑将创建控制器A的所有收发报文;图形面板用于控制报文收发及修改报文值,在信号集中测试中非常实用;Function Block用于实现简单逻辑处理;C Code Interface完成逻辑较复杂的功能仿真。
1.2 仿真搭建具体过程
1.2.1 CAN报文编辑
在 VSPY 中建立并进入仿真平台“Test”,通过 Spy Networks-->Messages Editor进入Messages Editor,在HS CAN(可根据需要自由选择网段)上创建控制器A的所有收发报文。例如创建发送报文TCO1,单击Transmit按钮,点击on Network下拉框旁边的“+”号,出现报文编辑界面。在Description描述框中填入报文名字TCO1,CAN Type中选择“Xtd 29 bit”(可根据需要选择标准帧或扩展帧),在仲裁地址框填入报文 ID:CFE6C10(默认情况下就是 16进制),在DLC报文长度栏填入8,默认周期处填写为50ms。在信号编辑区域点击加号,添加车速信号,信号名为“Tachograph vehicle speed”,点击信号编辑区域右上方fx Edit按钮,输入报文长度16bits,选择intel格式,在Scalling标签页选择线性mx+b 输入分辨率为1/256 km/h per bit,偏移量为0,单位km/h,确认OK后,这样一个报文的一个信号就创建完成了。重复上述步骤,创建其他发送报文。点击Receive,进入接收报文编辑界面,同前面步骤创建所有的接收报文。
创建完所有报文后,在Tx Pannel界面将需要周期发送的报文设置发送周期和开始发送条件即可。在仿真运行测试时,即可仿真所有周期报文的发送。
1.2.2 Graphical Panels
在仿真过程中,可通过 Graphical Panels实时更改信号值。通过在VSPY软件中建立图形面板,使得仿真测试变得简单易行。在整个仿真过程中,将需要通过图形面板控制的信号筛选出来(如车速、大气压力、转速、里程、扭矩、发动机冷却液温度等),并创建对应控件,方便仿真时控制信号值。下面以TCO1报文以及车速、左转向灯信号为例简单说明图形面板的创建。
1.2.2.1 对报文进行关联设置
通过 Measurement-->Graphical Panels打开图形面板界面,放置TX控件到主界面合适位置后,界面右侧区域出现了该控件属性对话框。在参数 TransmitMessage下拉框选择要关联的报文TCO1报文,参数TxType选择1-Periodic On/Off Button,即点击后报文周期发送,再次点击报文停止发送。注意要实现报文周期发送,需先在Tx Pannel报文发送面板中,将该报文定义成周期报文,同时配置有发送周期。
1.2.2.2 对车速信号进行关联设置
选择Meter控件放置在主界面对应位置,在Meter控件属性界面 Signal属性下拉框选择 Tx Messages ->HS CAN->TCO1->Tachograph vehicle speed信号,即车速信号,点击右上角OK确认即可;在属性菜单中修改最大值250、最小值0;车速指示控件即设置完成。
选择Text Entry控件放置在主界面合适位置,在其Signal属性下拉框选择车速信号,点击右上角OK确认即可,车速编辑控件制作完成。
1.2.2.3 对左转向灯进行关联设置
选择 LED控件放置在主界面合适位置,在其属性界面Signal属性下拉框选择左转向灯信号,点击右上角OK确认即可;如对LED On Color选择红色,LED Off Color选择绿色,则当信号为1状态时显示红色,信号为0时显示绿色。
On Off Button控件对0、1状态进行控制,在图形面板主界面放置该控件,在属性框中将该控件关联到左转向灯信号,在OnOffType属性框中选择1-Toggle Button,方便信号状态的保持。
Drop Down List对有多个状态的信号非常适用,该控件可通过下拉框设置关联信号的信号值。同样,放置完该控件后,关联到左转向信号,在该控件List属性中将左转向信号值表编辑进去,即0对应关闭、1对应开启,2对应错误,3对应无效。完成后就可实现该信号值的下拉选择。
1.2.2.4 运行图形面板
可直接在图形面板编辑界面将当前面板设置为 Lock状态、或在Measurement-->Floating Panels选择要运行的图形面板名称。在VSPY软件运行后,即可通过图形面板上对报文发送、信号值修改进行控制,也可通过对应控件查看对应信号当前值。
图1 图形面板效果图
1.2.3 Function Blocks
Function Blocks中有脚本模式方便模拟简单逻辑报文收发控制,在仿真过程中,通过Function Blocks模拟事件报文。此处以模拟发送载重事件报文说明仿真过程。我们按照每小时发送一次,每次发送三帧,每帧间隔 50ms对载重数据进行发送。
通过 Scripting and Automation-->Function Blocks进入Function Blocks界面,点击左上角的“+”号,选择Script模式,同时在界面下半部分出现脚本编辑窗口,在Script界面我们按照顺序编辑脚本命令,选择行2的Description列双击,出现命令下拉窗口,选择Transmit命令,在Valve列选择CVW报文;同样在行3选择Wait For命令,写入0.05s,即实现CVW 报文发送后等待 50ms;重复上面的操作,实现 CVW报文发送3次,在最后一行,等待时间设置为3600s,见图2。在脚本编辑界面的Start标签页,可选择脚本运行机制,此处采用VSPY运行后立即执行,到此事件报文的发送脚本就创建完成了。
图2 载重脚本编辑界面
需要注意脚本运行本身就是一个循环,在点击开始运行后,会重复执行该循环。若需要脚本自动运行结束,需要添加stop语句,脚本运行到stop后停止。
1.2.4 C代码接口
C代码是仿真中的重点,可通过C代码实现仿真节点的各种交互过程,比如网络管理、UDS诊断、交互认证等功能。下面以实现控制器A与终端之间UDS中27服务安全等级1的校验交互过程仿真为例说明C代码接口在仿真中的使用。控制器A与终端交互过程均是以CAN报文为载体,在CAN总线上进行的交互。详细过程见图3。
图3 控制器A与终端认证交互过程
通过Scripting and Automation-->C Code Interface进入C代码接口界面,新建工程名称为SecurityAccess,点击ok后会自动建好对应工程,并直接跳转到VS软件中。在VS中逻辑编写的工作主要在 SpyCCode.c中,自动生产的 vspy.c和vspy.h是对报文初始化、报文发送等函数以及VSPY工程中所有的报文、以及需要使用到变量、结构体等进行定义和声明。
在SpyCCode.c中,首先创建报文Dig_A和Dig_B结构变量(在 vspy.h中有定义),并对其进行初始化操作,然后添加报文事件,在C Code Interface界面SecurityAccess工程前面方框打勾,然后点击上方的Edit,弹出C Code Module setup 窗口,点击Message Events标签,选择Rx Messages,在下方左侧窗口出现HS CAN网络Dig_B报文,双击Dig_B报文,在右侧已选择报文窗口,就出现Dig_B报文,然后点击标签页Event Hander Code,复制接收Dig_B报文事件函数,然后点击ok按钮完成配置。随后将复制的Dig_B报文事件函数体,粘贴到SpyCCode.c。
新建应用信号Dig_AControl对控制器A发送交互请求进行控制,通过Scripting and Automation-->Application Signals进入应用报文编辑界面,点击右上角“+”添加应用信号,设置成数字信号类型。在图形面板添加该应用信号的控制后,在C Code Interface中设置应用信号事件,过程同报文事件设置过程,同时将应用信号事件函数复制到CSpyCCode.c。随后在该应用信号事件函数中添加对应功能代码,实现在图形面板设置Dig_AControl的值为1时,则设置Dig_A报文的内容为02 27 01,并将Dig_A报文发送出去。
在接收Dig_B报文事件中,检测到Dig_B的报文值前三个字节为04 67 01,则提取Dig_B携带的seed,提取出seed后按照算法获得key,填充到Dig_A中,即报文内容为04 27 02 key,最后将Dig_A发送出去;当检测到Dig_B的报文值前三个字节为02 67 02时,即终端判断收到的key与内部计算的key一致,则打印认证成功字样。其中seed和key都是16位变量。
1.2.5 仿真验证
将VSPY运行在仿真状态,通过发送面板将所有周期报文进行发送,通过messages界面检查需周期发送报文是否均能按照正确周期进行发送;各个周期报文正确发送后,运行图形面板,通过图形面板控制报文的收发、信号值的更改,通过messages界面观察报文是否能正常控制收发,及报文值更改;图形面板执行都正确后,运行Function Block脚本,查看是否按照预期进行执行;执行成功后,运行C代码部分,由于该部分为交互过程,需要终端本身与仿真的控制器A进行交互,来验证C代码的正确性。若上述各过程验证未通过,需找出失败原因后进行修改,重新验证,直至成功。
2 仿真测试
2.1 环境搭建
以终端为被测件,调用仿真节点控制器A,完成终端如信号采集、交互认证、网络管理、UDS诊断等功能。按照图4进行环境搭建。图4中neoVI RED为VSPY硬件,电脑运行VSPY软件。
图4 测试环境搭建图
2.2 测试执行
确认CAN线能正常通讯后,打开VSPY软件,进入到测试平台,对neoVI RED上电,软件运行正常后,给终端供电。通过操作图形面板,改变信号值,观察终端对接收报文的响应,判定终端是否功能正常;运行Function Block以及C Code Interface去实现请求或事件型、使能型、事件周期型等报文,以及交互认证过程、网络管理、UDS功能等功能仿真,测试功能是否正确。
经验证VSPY仿真的控制器A均能满足预期要求,完成对终端的测试,在后期测试过程中,均可通过该仿真平台模拟控制器A,完成所有与控制器A进行的交互节点的测试,方便后期测试执行。
3 结论
为解决车载ECU整车CAN总线测试问题,可通过VSPY软件的图形面板、Function Block、C Code Interface等模块实现对整车CAN总线控制器仿真来模拟整车CAN网络环境,完成如终端的测试以及测试平台的搭建等工作。通过该方法不仅可实现单个控制器的测试仿真,同时可结合VSPY中自带的节点仿真功能,模拟整车所有CAN网络节点,实现对整车CAN网络的仿真测试。这不仅利于在设计初发现整车CAN网络问题,还能轻松仿真整车CAN网络环境,复测CAN网络的实际问题,提高测试效率及复用率,节约资源。