自动驾驶仿真基础:使用Veristand自定义CAN报文的Checksum和Counter

本文介绍了车载行业中CAN报文Checksum的两种自定义实现方法,包括通过Veristand的AFP功能添加算法文件以及创建CustomDevice。详细阐述了算法流程,并提供了软件下载和配置步骤,适合于需要对CAN数据进行安全保护的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

1、现在很多的车厂对于车辆的安全机制非常重视,车厂通过对发送的CAN数据进行加密而形成一种保护机制,而Checksum和Counter是其中的一种保护介质,当CAN报文数据的Checksum和Counter正确,才能正常发送与接收。

一、关于Checksum的组成形式

1、车载行业上CAN报文应该有两种携带Checksum的方式,一种是一条报文一个Checksum;另外一种是一个信号组对应一个Checksum,即一条报文多个Checksum,像上汽、吉利、华人运通等都有这种Checksum机制,或者不戴~~;

二、自定义的Checksum方法一

注:我已经成功使用过两种方法发送Checksum,但软件都是通过Veristand去发送;

方法一:通过Veristand自带的AFP(Automatic Frame Processing)功能添加自定义算法文件,这个方法我是参考师子一号文章实现的(仅限于一条报文一个Checksum):
参考文献:点击跳转文章

这种方法有局限性,原因:支持的算法文件容量太小,感觉是分配给AFP功能的算力太小了,我大概写了120行算法,无法部署到实时机,但是如果是一个报文一个Checksum还是可以拿来用的,毕竟代码量不会大。

1、实现的主要流程图如下:

在这里插入图片描述

2、方法一的主要算法参考

注意:(最后一句代码是最关键)
a_pDataFrame->Payload[31] = CRCLowByte,这是将算好的Chcksum填入对应的Playload
②*a_pDataFrame->Payload[31]表示获取当前报文的第31个字节数据;

                char buf[11];
				unsigned int byte;
				unsigned char k;
				unsigned short ACC,TOPBIT;
				unsigned short remainder = 0x00;
				unsigned short CRCLowByte;
				int len=10;
				
				//根据dbc自己解析
				//通过a_pDataFrame->Payload[0] 获取当前报文第一个字节数据,获取第二个字节数据类似。
				buf[0] = 0x74;
				buf[1] = 0x00;
				buf[2] = a_pContextData[2]-1;
				buf[3] = (a_pDataFrame->Payload[35] >> 5)& 0x07;
				buf[4] = (a_pDataFrame->Payload[35] >> 2)& 0x03;
				buf[5] = a_pDataFrame->Payload[32] & 0x0F;
				buf[6] = (a_pDataFrame->Payload[33] >> 4) & 0x0F;;
				buf[7] = a_pDataFrame->Payload[35] & 0x01;
				buf[8] = a_pDataFrame->Payload[33] & 0x0F;
				buf[9] = (a_pDataFrame->Payload[34] >> 4) & 0x0F;
				buf[10] = a_pDataFrame->Payload[34] & 0x0F;
				
				//CRC算法
				TOPBIT = 0x80;
				for (byte = 0; byte <= len; ++byte)
				{
					ACC = buf[byte];
					remainder ^= ACC;
					for (k = 8; k > 0; --k)
					{
						if (remainder & TOPBIT)
						{
							remainder = (remainder << 1) ^0x1D;
						}
						else
						{
							remainder = (remainder << 1);
						}
					}
				}
				remainder=remainder^0x00;
				CRCLowByte=remainder & 0x00FF;
				
			    //将算好的Checksum放在对应的playload,我这里的Checksum在第31个字节;
				a_pDataFrame->Payload[31] = CRCLowByte;

三、自定义的Checksum方法二

方法二:我目前在用的就是方法二,相当于重新创建一个Custom Device,这个CD支持报文的完全处理,是一个完整的CAN处理模块,不过这个方法需要下载的东西比较多,请耐心下载,不要被劝退了,这个方法很有用,自定义程度很高,更改里面的逻辑需要Labview基础
点击下载Checksum校验的Custom Device demo

1、软件及插件下载;

1、通过制作Veristand的Custom device重定义CAN模块,请逐条下载;
1) NI Package Manager----NI官网下载
2)Labview 2020 ----NI官网 or NI Package Manager下载
3)Veristand 2020 R5 ----NI官网 or NI Package Manager下载
4)NI XNET 19 or later ----NI官网 or NI Package Manager下载
安装完成Labview会有这个VI Package Manager下载工具
5)NI Simple Messaging Library 3.1.0.9 —VI Package Manager下载
6)NI Asynchronous Messaging Communication Library 3.3.1.22—VI Package Manager下载
7)NI Veristand Custom Device Development Tools,如下图逐个下载安装;
https://github.com/ni/niveristand-custom-device-development-tools/releases
在这里插入图片描述
以上7个是插件和软件,下载安装完成才能代开下面的Custom device工程;

2、Custom device的使用;

1、打开Custom device 工程;
在这里插入图片描述
2、打开工程之后的界面,打开CAN报文处理VI(如果有错误就是插件没下载够)
在这里插入图片描述
3、CAN报文处理VI介绍;
以下3个VI分别处理Counter、Checksum、playload(报文字节);
在这里插入图片描述
3.1 双击Checksum处理VI(Update Protection Signals.vi),再双击进入Checksum算法;
在这里插入图片描述
3.2 进入Checksum算法VI(Calculate Protection Value.vi),添加算法的名称,到时候在Veristand会有体现;
在这里插入图片描述
3.3 添加算法分支与模块(前提是先添加上一步骤的算法名称);
在这里插入图片描述
综上是Checksum算法的添加方法,算法自己写呗,因为每个项目的算法基本都不一样;

4、添加完算法之后,就是编译Custom Device工程了;
在这里插入图片描述

4、Veristand调用Custom Device;

4.1 新建一个工程,右键项目,进入系统配置;

在这里插入图片描述

4.2 新建一个CD
在这里插入图片描述
4.2.1选择数据库
在这里插入图片描述
4.3 导入帧到Outgoing中的Cyclic(周期发送帧);
在这里插入图片描述

4.4 配置报文的Counter;
4.4.1 右键某个信号 Make Counter Signal
在这里插入图片描述
4.4.2 填写Counter的最大值(发送报文时会自动计算0~最大值)
在这里插入图片描述

4.5 配置报文Checksum–这里以信号组情况实列;
4.5.1 添加Checksum
在这里插入图片描述
4.5.2 配置Checksum页面的参数;
在这里插入图片描述
4.5.3 选择需要参与计算的信号(哪些信号值要参与Checksum的运算,选择后在Labview算法处可以调用相关的参数);
在这里插入图片描述
4.5.4 导入之后,当发送这帧报文时,会传入上面添加的Select Channels中选择的数据库数据,在下图中Labview模块调用,所以做算法的时候要合理运用;
在这里插入图片描述

5、Veristand发送信号值;

在这里插入图片描述

6、部署到实时机;

部署到实时机之后就可以发送报文啦
在这里插入图片描述
综上,完成Veristand发送自定义Checksum的方法,整体的思路都在这里;

评论 34
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自动驾驶simulation

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值