文章目录
前言
最近因项目需要,用到TSMaster进行E2E校验算法实现。第一次使用TSMaster,把整个的过程做一个记录,仅供参考。当然有任何问题欢迎批评指正!
首先,TSMaster已经提供了很多定义好的CRC算法来调用,并且对于基本的E2E校验也做了适配,还是很赞的。但是如果加入异或运算的DID数据是实时变化的,如何在TSMaster中实现E2E算法呢?
一、自定义E2E算法教程
1.定义checksum算法
选择程序->C小程序->自定义函数,右键添加自定义函数,定义E2E_test函数,参数为报文数据Data[]和报文ID。然后在右侧程序栏编写自定义的checksum算法实现,把实时变化的DID数据逻辑写在这里。定义好后,供后面进行调用。
(注:这个自定义函数的参数是多样的,例如可以传报文ID;但是系统提供的CRC库中自定义函数参数是固定的data和datalen)
2.定义【CAN预发送事件】
在CAN预发送事件右键,根据需要仿真发送的报文类型选择对应的CAN或CANFD报文。感觉就类似于CAPL中的On Prestart预启动事件。
在DBC数据库中添加需要仿真E2E校验的报文。
3.E2E报文信号仿真
最关键的一步!!!步骤2选择好报文后,TSMaster会自动导入报文中的信号等数据。还需要做的是:
- 检查报文名称。特别是报文名根据层级定义有多个下划线_的情况,一定要检查报名名称导入的是否正确!
- 将需要仿真的checksum&Rollingcounter信号注释掉。
- 添加Rollingcounter算法。
- 添加Checksum算法。这里就需要调用【自定义函数】E2E_test。传入的实参也有固定的书写形式,如下图。(传数据data取的是byte0的地址,所以是:&信号名.FCAN.FData[0])
- 如果是CANFD报文,最后一行代码需要手动加上FD。
- 编译通过后,即完成了E2E算法定义。
4.运行工程
算法编译没问题后,就能进行测试验证啦。
- 运行工程;
- 运行C代码编辑器的脚本(容易遗忘)
- 在报文发送-添加CAN/CANFD发送,选择需要进行E2E校验的报文。
至此,在仿真报文发送时,会执行报文预发送事件来调用自定义E2E算法实现报文仿真。如下图,在报文信息窗口可以看到对应的checksum&Rollingcounter信号变化。可以拿实车数据进行对比来验证所编写算法是否正确。
二、TSMaster配置E2E教程
第一部分的介绍其实适用于任何需要做E2E校验的报文,但是如果需要加入异或运算的DID是固定值,TSMaster提供了较为简单的配置方式。下面简单把这种方式也做一下介绍,对比选择使用。
1.激活仿真报文
CAN总线仿真,找到需要做E2E校验的报文进行勾选激活。
2.E2E配置
- 配置Rollingcounter。选择RC信号右键设置为Rollingcounter信号;编辑RC范围。
- 配置checksum。同样的方式,选择checksum信号右键设置为checksum验证信号;选择对应的CRC算法(也可以自定义算法后进行选择);编辑CRC算法参数。
编辑CRC算法参数:这里就可以根据E2E校验要求,把DID数据配置到头部or尾部附加字节中即可。
至此,该报文在仿真发送时会自动进行RC和checksum的赋值变化。
三.小结
两种E2E校验实现方式各有好处。总体来说,自定义函数E2E算法适用于DID实时变化、仿真E2E报文数量多、自动化测试等场景。配置式E2E实现适用于DID数据固定不变、手动测试复现问题单条报文的仿真验证(数量多的话配置起来太耗时)等场景。