发明内容
本发明的主要目的为提供一种高效率、低错误率的自动生成CAN通讯协议代码的方法和装置。
为了实现上述发明目的,本发明提出一种自动生成CAN通讯协议代码的方法,包括:
获取预设模板表格上填写的整车CAN通讯协议内容;
根据预设的函数生成对应的CAN通讯协议代码。
进一步地,所述模板表格上填写的协议内容,包括:
报文ID、报文周期、报文格式、报文长度、报文名称、发送方,以及数据长度。
进一步地,所述数据长度为指定个数的字节数据,通过指定个数的字节数据表明包括信号名称、起始位、结束位、长度、分辨率、偏移量和单位的信息;其中,如果是发送报文,还表明引用的变量名称。
进一步地,所述根据预设的函数生成对应的CAN通讯协议代码的步骤,包括:
获取输入的可用发送信息,通过信号转数据函数将可用发送信号转换为指定个数的字节数据,然后通过发送函数进行CAN报文发送;和/或,
通过接收函数进行CAN报文接收,然后通过数据转信号函数将字节数据转换成可用的接收信号,然后将接收信号输出。
进一步地,所述模板表格为Excel模板。
本发明还提供一种自动生成CAN通讯协议代码的装置,包括:
获取单元,用于获取预设模板表格上填写的整车CAN通讯协议内容;
生成单元,用于根据预设的函数生成对应的CAN通讯协议代码。
进一步地,所述模板表格上填写的协议内容,包括:
报文ID、报文周期、报文格式、报文长度、报文名称、发送方,以及数据长度。
进一步地,所述数据长度为指定个数的字节数据,通过指定个数的字节数据表明包括信号名称、起始位、结束位、长度、分辨率、偏移量和单位的信息;其中,如果是发送报文,还表明引用的变量名称。
进一步地,所述生成单元包括:
发文模块,用于获取输入的可用发送信息,通过信号转数据函数将可用发送信号转换为指定个数的字节数据,然后通过发送函数进行CAN报文发送;和/或,
收文模块,用于通过接收函数进行CAN报文接收,然后通过数据转信号函数将字节数据转换成可用的接收信号,然后将接收信号输出。
进一步地,所述模板表格为Excel模板。
本发明的自动生成CAN通讯协议代码的方法和装置,通过获取模板表格上的填写的协议内容,然后自动生成对应的CAN通讯协议代码,大大地提高了代码开发的效率,同时降低了代码错误率;还可以有效的规范与管控代码,降低代码维护难度。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
参照图1,本发明实施例提出一种自动生成CAN通讯协议代码的方法,包括步骤:
S1、获取预设模板表格上填写的整车CAN通讯协议内容;
S2、根据预设的函数生成对应的CAN通讯协议代码。
如上述步骤S1所述,上述模板表格即为固定格式的表格,需要将整车厂提供的CAN通讯协议重新整理并根据要求添加到模板表格中。
本实施例中,上述模板表格上填写的协议内容包括:报文ID、报文周期、报文格式、报文长度、报文名称、发送方,以及数据长度等,如下表:
序号 |
报文ID |
报文周期 |
报文格式 |
数据长度 |
报文名称 |
发送方 |
备注 |
1 |
0x101 |
10ms |
标准桢 |
8 |
VCU_1 |
VCU |
VCU发给BMS的信息1 |
2 |
0x102 |
20ms |
标准桢 |
8 |
VCU_2 |
VCU |
VCU发给BMS的信息2 |
3 |
0x201 |
100ms |
标准桢 |
8 |
BMS_1 |
BMS |
BMS发给VCU的信息1 |
4 |
0x202 |
100ms |
标准桢 |
8 |
BMS_2 |
BMS |
BMS发给VCU的信息2 |
5 |
0x203 |
500ms |
标准桢 |
8 |
BMS_3 |
BMS |
BMS发给VCU的信息3 |
上述表格中即填写了整车厂通讯协议内容如VCU(整车控制器,Vehicle ControlUnit)发送给BMS(电池管理系统,Battery Management System)的信息,以及BMS发送VCU给的信息等,其中数据长度是指字节数,该字节长度统一,方便解析,一般为8字节(64位)。
本实施例中,上述数据长度为8个字节数据,即通过8个字节数据表明包括信号名称、起始位、结束位、长度、分辨率、偏移量和单位的信息,如下表:
序号 |
报文ID |
报文周期 |
报文名称 |
信号名称 |
起始位 |
结束位 |
长度 |
分辨率 |
偏移量 |
单位 |
1 |
0x101 |
10ms |
VCU_1 |
Lv_PowerOn_Cmd |
0 |
7 |
8 |
1 |
0 |
/ |
2 |
0x101 |
10ms |
VCU_1 |
Hv_PowerOn_Cmd |
8 |
15 |
8 |
1 |
0 |
/ |
3 |
0x101 |
10ms |
VCU_1 |
Vehicle_Speed |
16 |
31 |
16 |
0.01 |
0 |
km/h |
4 |
0x101 |
10ms |
VCU_1 |
保留 |
32 |
63 |
32 |
/ |
/ |
/ |
5 |
0x201 |
100ms |
BMS_1 |
Battery_Soc |
0 |
7 |
8 |
1 |
0 |
% |
6 |
0x201 |
100ms |
BMS_1 |
Battery_Voltage |
8 |
23 |
16 |
0.1 |
0 |
V |
7 |
0x201 |
100ms |
BMS_1 |
Battery_Currenr |
24 |
39 |
16 |
0.1 |
-500 |
A |
8 |
0x201 |
100ms |
BMS_1 |
Battery_Status |
40 |
47 |
8 |
1 |
0 |
/ |
9 |
0x201 |
100ms |
BMS_1 |
保留 |
48 |
63 |
16 |
/ |
/ |
/ |
10 |
0x202 |
100ms |
BMS_2 |
Ucell_Max |
0 |
15 |
16 |
1 |
0 |
mV |
11 |
0x202 |
100ms |
BMS_2 |
Ucell_Min |
16 |
31 |
16 |
1 |
0 |
mV |
12 |
0x202 |
100ms |
BMS_2 |
Temperature_Max |
32 |
39 |
8 |
1 |
-50 |
℃ |
13 |
0x202 |
100ms |
BMS_2 |
Temperature_Min |
40 |
47 |
8 |
1 |
-50 |
℃ |
14 |
0x202 |
100ms |
BMS_2 |
保留 |
48 |
63 |
16 |
/ |
/ |
/ |
如果是发送报文,还需要写明从其它软件模块引用的变量名称。
如上述步骤S2所述,即形成一个代码自动生成工具,该代码自动生工具内集成有需要的多个函数作为基础函数模板,然后自动识别模板表格上填写的协议内容,修改基础函数模板中的相关参数,如函数名称、变量名称、函数实参等,最终生成xxx_E_Can.c和xxx_E_Can.h文件(xxx为泛指,在实际中有真实的字母等代替),整合到对应的项目软件中。
本实施例中,上述根据预设的函数生成对应的CAN通讯协议代码的步骤S2包括:
S21、获取输入的可用发送信息,通过信号转数据函数将可用发送信号转换为8个字节数据,然后通过发送函数进行CAN报文发送;和/或,
S22、通过接收函数进行CAN报文接收,然后通过数据转信号函数将字节数据转换成可用的接收信号,然后将接收信号输出。
上述步骤S21和S22其实是发送报文和接收报文的两个过程,发送报文是将可用发送信息转换成字节数据的过程,而接收报文的过程是将字节数据转成成可用接收信息的过程。在两个过程中,使用的各函数均为上述预设的函数,即为上述基础函数模板中的函数。
在一具体实施例中,xxx_E_Can.c的程序如下,其中Send_Message_E_Can()为发送报文函数,Recv_Message_E_Can()为接收报文函数:
xxx_E_Can.h的程序如下:
本实施例中,上述模板表格为为Excel模板,简单通用。
在一具体实施例中,CAN通讯协议代码自动生成的过程为:
1、将整车CAN通讯协议,按照已有的Excel模板,填写对应的协议内容;协议内容包括:报文ID、报文周期、报文格式、报文长度、报文名称、发送方、以及8个字节数据。其中,8个字节数据要详细写明信号名称、起始位、结束位、长度、分辨率、偏移量、单位,如果是发送报文,还需要写明从其他软件模块引用的变量名称;
2、使用代码自动生成工具,导入上述填写完成的Excel协议文件,生成xxx_E_Can.c和xxx_E_Can.h文件;
3、将生成的.c和.h文件,整合到对应的项目软件中。
本发明实施例的自动生成CAN通讯协议代码的方法,通过获取模板表格上的填写的协议内容,然后自动生成对应的CAN通讯协议代码,大大地提高了代码开发的效率,同时降低了代码错误率;还可以有效的规范与管控代码,降低代码维护难度。
参照图2,本发明实施例还提供一种自动生成CAN通讯协议代码的装置,包括:
获取单元10,用于获取预设模板表格上填写的整车CAN通讯协议内容;
生成单元20,用于根据预设的函数生成对应的CAN通讯协议代码。
如上述获取单元10,上述模板表格即为固定格式的表格,需要将整车厂提供的CAN通讯协议重新整理并根据要求添加到模板表格中。
本实施例中,上述模板表格上填写的协议内容包括:报文ID、报文周期、报文格式、报文长度、报文名称、发送方,以及数据长度等,如下表:
序号 |
报文ID |
报文周期 |
报文格式 |
数据长度 |
报文名称 |
发送方 |
备注 |
1 |
0x101 |
10ms |
标准桢 |
8 |
VCU_1 |
VCU |
VCU发给BMS的信息1 |
2 |
0x102 |
20ms |
标准桢 |
8 |
VCU_2 |
VCU |
VCU发给BMS的信息2 |
3 |
0x201 |
100ms |
标准桢 |
8 |
BMS1 |
BMS |
BMS发给VCU的信息1 |
4 |
0x202 |
100ms |
标准桢 |
8 |
BMS_2 |
BMS |
BMS发给VCU的信息2 |
5 |
0x203 |
500ms |
标准桢 |
8 |
BMS_3 |
BMS |
BMS发给VCU的信息3 |
上述表格中即填写了整车厂通讯协议内容如VCU(整车控制器,Vehicle ControlUnit)发送给BMS(电池管理系统,Battery Management System)的信息,以及BMS发送VCU给的信息等,其中数据长度是指字节数,该字节长度统一,方便解析,一般为8字节(64位)。
本实施例中,上述数据长度为8个字节数据,即通过8个字节数据表明包括信号名称、起始位、结束位、长度、分辨率、偏移量和单位的信息,如下表:
序号 |
报文ID |
报文周期 |
报文名称 |
信号名称 |
起始位 |
结束位 |
长度 |
分辨率 |
偏移量 |
单位 |
1 |
0x101 |
10ms |
VCU_1 |
Lv_PowerOn_Cmd |
0 |
7 |
8 |
1 |
0 |
/ |
2 |
0x101 |
10ms |
VCU_1 |
Hv_PowerOn_Cmd |
8 |
15 |
8 |
1 |
0 |
/ |
3 |
0x101 |
10ms |
VCU_1 |
Vehicle_Speed |
16 |
31 |
16 |
0.01 |
0 |
km/h |
4 |
0x101 |
10ms |
VCU_1 |
保留 |
32 |
63 |
32 |
/ |
/ |
/ |
5 |
0x201 |
100ms |
BMS_1 |
Battery_Soc |
0 |
7 |
8 |
1 |
0 |
% |
6 |
0x201 |
100ms |
BMS_1 |
Battery_Voltage |
8 |
23 |
16 |
0.1 |
0 |
v |
7 |
0x201 |
100ms |
BNS_1 |
Battery_Current |
24 |
39 |
16 |
0.1 |
-500 |
A |
8 |
0x201 |
100ms |
BMS_1 |
Battery_Status |
40 |
47 |
8 |
1 |
0 |
/ |
9 |
0x201 |
100ms |
BMS_1 |
保留 |
48 |
63 |
16 |
/ |
/ |
/ |
10 |
0x202 |
100ms |
BMS-2 |
Ucell_Max |
0 |
15 |
16 |
1 |
0 |
mv |
11 |
0x202 |
100ms |
BMS_2 |
Ucell_Min |
16 |
31 |
16 |
1 |
0 |
mV |
12 |
0x202 |
100ms |
BMS_2 |
Temperature_Max |
32 |
39 |
8 |
1 |
-50 |
℃ |
13 |
0x202 |
100ms |
BM5_2 |
Temperature_Min |
40 |
47 |
8 |
1 |
-50 |
℃ |
14 |
0x202 |
100ms |
BMS_2 |
保留 |
48 |
63 |
16 |
/ |
/ |
/ |
如果是发送报文,还需要写明从其它软件模块引用的变量名称。
如上述生成单元20,即形成一个代码自动生成工具,该代码自动生工具内集成有需要的多个函数作为基础函数模板,然后自动识别模板表格上填写的协议内容,修改基础函数模板中的相关参数,如函数名称、变量名称、函数实参等,最终生成xxx_E_Can.c和xxx_E_Can.h文件,整合到对应的项目软件中。
参照图3,本实施例中,上述生成单元20包括:
发文模块21,用于获取输入的可用发送信息,通过信号转数据函数将可用发送信号转换为8个字节数据,然后通过发送函数进行CAN报文发送;或者,
收文模块22,用于通过接收函数进行CAN报文接收,然后通过数据转信号函数将字节数据转换成可用的接收信号,然后将接收信号输出。
上述发文模块21和收文模块22所执行的任务即为发送报文和接收报文的两个过程,发送报文是将可用发送信息转换成字节数据的过程,而接收报文的过程是将字节数据转成成可用接收信息的过程。在两个过程中,使用的各函数均为上述预设的函数,即为上述基础函数模板中的函数。
在一具体实施例中,xxx_E_Can.c的程序如下,其中Send_Message_E_Can()为发送报文函数,Recv_Message_E_Can()为接收报文函数:
xxx_E_Can.h的程序如下:
本实施例中,上述模板表格为为Excel模板,简单通用。
在一具体实施例中,CAN通讯协议代码自动生成的过程为:
1、将整车CAN通讯协议,按照已有的Excel模板,填写对应的协议内容;协议内容包括:报文ID、报文周期、报文格式、报文长度、报文名称、发送方、以及8个字节数据。其中,8个字节数据要详细写明信号名称、起始位、结束位、长度、分辨率、偏移量、单位,如果是发送报文,还需要写明从其他软件模块引用的变量名称;
2、使用代码自动生成工具,导入上述填写完成的Excel协议文件,生成xxx_E_Can.c和xxx_E_Can.h文件;
3、将生成的.c和.h文件,整合到对应的项目软件中。
本发明实施例的自动生成CAN通讯协议代码的装置,通过获取模板表格上的填写的协议内容,然后自动生成对应的CAN通讯协议代码,大大地提高了代码开发的效率,同时降低了代码错误率;还可以有效的规范与管控代码,降低代码维护难度。
以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。