做NI软硬件产品在中国的应用者、推动者、贡献者 |
背景
NI的HIL台架已搭建,项目前期未实现E2E校验功能,所以模拟节点的Checksum默认为0。
项目中期开始新增E2E校验,此时要求与DUT交互的节点发出Checksum 和 RollingCounter。
方案调查
通过查阅资料,实现模拟节点的Checksum计算并发出有以下几个方案。
1、Matlab模型实现
2、NI Veristand 自带的AFP(Automatic Frame Processing),添加自定义算法实现
3、安装 NI-VCOM(车辆通信套件)
4、Customer Device 重定义CAN模块
基于当前项目情况,各方案面临的问题如下
方案1:前期在模型中加了CRC的算法,但是一部署就各种莫名其妙的错误
方案2:自定义算法并不难,困难在于.c文件结构和依赖的.h文件如何而来,以及如何编译成veristand可用的.enb文件,资料很少
方案3:安装套件会更新一系列NI插件,可能和当前软件版本不兼容,影响现有的测试环境
方案4:需要下载一系列版本匹配的插件,可以基于网上的demo,但是需要有Labview基础 综上考虑,方案2对当前测试环境影响最小,先着手调查。
实施
1、参考资料
师子一号:HIL测试中的CheckSum和RollingCounter
HIL18讲,零基础教程,HIL测试中的CheckSum和RollingCounter
2、实现原理
利用XNET驱动对于CAN口预留的功能,自定义一个AFP算法,通过烧写firmware的方式实现Checksum的计算。
Veristan自带了两种CRC,自定义的算法需要从.c编译为.enb文件,然后配置到Veristand AFP模块中。
3、c代码编写
如上文所述,算法很好写,困难的是.c文件的结构和依赖项。
这里感谢师子一号提供的.c范例,主要用到的就是a_pDataFrame和a_pContextData.
• a_pDataFrame里面存的是报文信息,是一个sDataFrame类型,其中Payload[8]是预发送的8个字节数据。
• a_pContextData里面存的是Veristand界面的配置信息。
例如,CRC存储在第几个字节,从第几个字节到第几个字节去参与计算。
4、编译成.enb
按照师子一号的说明,需要用到Altera Quartus II自带的NIOS II编译器。
这个自行安装就可以了,不需要注册,不过Altera Quartus II比较大,安装后我们只用到NIOS II Command Shell.
这里也需要用到师子一号范例工程里的Makefile和依赖项,编译按照网页说明操作就可以,只要文件全,语法没问题,最终生成.enb文件。
5、添加Veristand 中的AFP配置项
把编译后的.enb文件添加到NI VeriStand 2011_CRC8.enb同目录下。返回上一层,复制一个已有的.ini文件,改名为.enb同名。
notepad打开这个.ini,修改BinaryFile中.enb名称为自己的名称,后面的.vi就保持不变即可。这几个vi界面是用来设置配置项的,例如多项式,初始值,异或值等。
6、为CAN通道配置AFP,输入多项式,初始值,异或值
7、为报文配置AFP,如图右击,配置CRC计算的字节index和存储的index。
当然,以上Step6 and 7也可以不配置,直接在.c算法里面写好。
8、部署到台架
局限
该方法适合一条报文一个checksum,另外有博主提到如果代码量大,可能无法部署成功,或许是因为分配给AFP的算力太小。
总线10讲,东半球最好用的excel2dbc工具,永远免费送
【课程】汽车和LabVIEW完美结合,干货十足,助您掌握核心技术,提升职场竞争力
专题技术交流群,用户讨论组,大合集(加各种工具交流群,请后台联系)