目录
一、车辆VIN简介
VIN是英文Vehicle Identification Number(车辆识别代号)的缩写。VIN是为了识别某一辆车,由车辆制造厂为该车辆制定的一组字码。VIN由世界制造厂识别代号(WHI)、车辆说明部分(VDS)、车辆指示部分(VIS)三部分组成,共17位字码。
VIN的第一部分WHI,用以标识车辆的制造厂。当此代号被指定给某个车辆制造厂时,就能作为该厂的识别标志。VIN的第二部分VDS,用以说明车辆的一般特征信息。VIN的最后部分VIS,是车辆制造厂为区别不同车辆而指定的一组代码。这组代码连同VDS部分一起,足以保证每个车辆制造厂在30年之内生产的每个车辆的VIN具有唯一性。更详细的信息可参考GB 16735-2019 道路车辆 车辆识别代号(VIN)
GB7258-2017《机动车运行安全技术条件》4.1.5要求,对具有电子控制单元(ECU)的汽车,其至少有一个 ECU 应记载有车辆识别代号等特征信息,且记载的特征信息不应被篡改并能被市场上可获取的工具读取。电动汽车VIN一般存储在VCU中,VIN的写入根据制定的写入规则,通过上位机写入VCU中。本文介绍一种电动汽车VIN写入规则及Simulink建模方法。
二、电动汽车VIN写入规则及校验和规则
本文介绍一种电动汽车的VIN写入规则。
1、写入规则
由VIN上位机写入:
1)上位机通过0x561写入VCU车辆VIN码;
2)VCU通过0x573回复写入反馈;
3)写入成功后 VCU通过0x566(驱动CAN+整车CAN) 发送VIN报文。上位机也可以通过0x566读取。
2、校验和规则
1)CheckSum=id_high+id_high_mid+id_low_mid+id_low+byte0+byte1+byte2+byte3+byte4+byte5+byte6;
2)while(CheckSum>0xFF){CheckSum=((CheckSum&0xFF00)>>8)+(CheckSum&0xFF);}
3)CheckSum=~CheckSum;
三、VIN校验方法及Simulink建模
1、VIN校验方法
1)上位机发送VIN写入报文解包
VCU需设置无论哪一路CAN接收到0X561VIN写入报文后,根据接收报文解包后,得到VIN校验和、帧号、VIN号,并将报文ID发送出来供校验和计算使用,同时,发送CAN激活状态,供VCU反馈设置状态使用。其中上位机通过0X561发出的校验和是按照校验和的公式计算出的。
2)校验和对比验证
VCU接收到上位机发送的要刷写的VIN信息后,也需要按照校验和的公式计算出一个校验和的值,然后同VIN刷写上位机发出的校验和对比,如果一致,则校验通过,可以进行下一步的VIN写入流程,如果不一致则报错误,反馈设置失败。
2、上位机发送VIN写入报文解包Simulink建模
1)输入信号
CAN_Pcan_CanMessage_0x561:Pcan接收的0X561 CAN报文信息
CAN_Ecan_CanMessage_0x561:Ecan接收的0X561 CAN报文信息
2)输出信号
VINChkSum:VIN校验和
VINFrm_Nmb:VIN帧号
VIN_1:该帧发送的VIN第1位
VIN_2:该帧发送的VIN第2位
VIN_3:该帧发送的VIN第3位
VIN_4:该帧发送的VIN第4位
VIN_5:该帧发送的VIN第5位
VIN_6:该帧发送的VIN第6位
CAN0x561_ID:报文0x561的ID
CAN0x561_Active:报文0x561的激活状态,当接收到报文且无错误时为激活状态
3)控制逻辑
a、分别建立Pcan和Ecan的0x561报文解包模块
b、解包模块中勾选输出报文错误状态
c、根据接收到的报文错误状态,判断哪路CAN正常接收到VIN写入报文,选择使用那一路报文作为VIN写入报文信息
d、新建CAN解包模块,以上一步骤输出的有效的0x561报文信息作为输出量,进行报文解包
e、勾选输出报文ID选项及报文错误状态选项,供后续校验和计算和设置状态判断
4)Simulink模型
a、上位机发送VIN写入报文解包模块架构
b、Pcan和Ecan 0x561报文解包及有效性判断
c、解包模块中勾选Output error
d、根据接收到的解包信息,判断哪一路CAN上的0x561报文有效。当Pcan报文为有效状态时,则输出Y=1,此时,选择Pcan的0x561报文作为VIN写入报文输入值;当Ecan报文为有效状态时,则输出Y=0,此时,选择Ecan的0x561报文作为VIN写入报文输入值。
e、根据选择的有效0x561报文,进行报文解包,并输出该报文定义的数据,包括VIN校验和、VIN帧号、VIN每一位的数值、报文ID及报文激活状态。
f、解包模块中勾选Output identifier和Output error
3、校验和对比验证Simulink建模
1)输入信号
VINChkSum:VIN校验和
VINFrm_Nmb:VIN帧号
VIN_1:该帧发送的VIN第1位
VIN_2:该帧发送的VIN第2位
VIN_3:该帧发送的VIN第3位
VIN_4:该帧发送的VIN第4位
VIN_5:该帧发送的VIN第5位
VIN_6:该帧发送的VIN第6位
CAN0x561_ID:报文0x561的ID
2)输出信号
ChkRlt:校验结果,当0x561发送的校验和与VCU根据接收到的报文计算得到的校验和一致,输出1,否则输出0
3)控制逻辑
a、根据接收到的有效0x561报文解析出的报文信息计算校验和
step1 计算校验和数值1:CheckSum=id_high+id_high_mid+id_low_mid+id_low+byte0+byte1+byte2+byte3+byte4+byte5+byte6;将报文ID的高位,次高位,次低位,低位以及byte0-byte6(即VIN帧号及VIN1-VIN6的数值)进行位相加
step2 判断计算校验和数值2:while(CheckSum>0xFF) {CheckSum=((CheckSum&0xFF00)>>8)+(CheckSum&0xFF);}
step3 校验和数值2位取反得到校验和数值3:CheckSum=~CheckSum;
b、将计算结果与接收报文解析出的校验和做比较是否一致,如果一致则输出校验结果为1,如果不一致则输出校验结果为0
4)Simulink建模
a、根据控制逻辑搭建step1 计算校验和数值1 Simulink模型
b、其中Bitwise Operator模块为对输入执行指定的按位运算模块,通过与FF000000位取“与”,得到报文ID高位值,此处报文ID为0x00000561,因此高位为00,取“与”后为0x00000000
c、将位取“与”后的值,通过Shift Arithmetic模块进行移位运算,移动信号的位或二进制小数点,对报文ID的高位进行右移24位,得到高位的值00
d、以同样的方法对报文ID的次高位00、次低位05、低位61进行按位取与运算,并进行移位运算,得到次高位、次低位、低位的值00、05、61
e、以上计算的数值相加得到检验和1
f、上一步求和得到的数值最大为16位的二进制数,根据step2 判断计算校验和数值2判断条件及计算公式,当校验和1的数值大于0xFF即二进制11111111时,则取高8位与低8位求和得到校验和2
g、使用Extract Bits模块,输出从输入信号选择的连续位,分别选高8位与低8位输出并求和得到校验和2
h、求和后仍然存在满足校验和值大于0xFF的情况,再次进行选择高8位与低8位输出并求和得到校验和2运算,两次计算后可保证输出的校验和2的值不大于0xFF,输出该校验和2的值
i、上一步计算得到校验和2,根据step3 CheckSum=~CheckSum;将得到的校验和2值按位取"反",得到校验和3
j、上一步计算得到的校验和3的值与接收到的0x561报文中的校验和值进行对比,如果两者相等,则校验通过,输出校验结果1,如果不相等,则校验失败,输出校验结果0
4、VIN校验方法Simulink建模整体模型
四、总结
本文介绍了一种电动汽车VIN写入规则、校验和规则,并介绍了如何通过接收上位机发送的VIN写入报文得到校验和信息及要写入的VIN帧号、报文ID及VIN数值,如何通过接收到的VIN帧号、报文ID及VIN数值根据校验和公式计算得到VCU计算的校验和数值,最终进行对比得到校验和结果。然后,介绍了以上VIN校验方法的Simulink建模方法。后续会介绍VIN的写入方法及VIN设置参数状态反馈模块。希望能给相关技术人员带来一定参考和帮助。
欢迎关注同名微信公众号:汽车电控研习室