CN116301881A - 一种基于dbc的协议层代码生成方法及生成工具 - Google Patents
一种基于dbc的协议层代码生成方法及生成工具 Download PDFInfo
- Publication number
- CN116301881A CN116301881A CN202310050107.6A CN202310050107A CN116301881A CN 116301881 A CN116301881 A CN 116301881A CN 202310050107 A CN202310050107 A CN 202310050107A CN 116301881 A CN116301881 A CN 116301881A
- Authority
- CN
- China
- Prior art keywords
- dbc
- signal
- file
- frame
- information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 61
- 239000000872 buffer Substances 0.000 claims description 45
- 230000006870 function Effects 0.000 claims description 41
- 101150063504 CAN2 gene Proteins 0.000 claims description 10
- 238000004590 computer program Methods 0.000 claims description 10
- 238000012216 screening Methods 0.000 claims description 10
- 238000003491 array Methods 0.000 claims description 3
- 238000012163 sequencing technique Methods 0.000 claims description 2
- 239000000945 filler Substances 0.000 claims 1
- 238000011161 development Methods 0.000 abstract description 18
- 230000008569 process Effects 0.000 abstract description 9
- 238000004891 communication Methods 0.000 description 11
- 238000013461 design Methods 0.000 description 7
- 239000000463 material Substances 0.000 description 6
- 238000012986 modification Methods 0.000 description 6
- 230000004048 modification Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000006467 substitution reaction Methods 0.000 description 3
- 230000006978 adaptation Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000002360 preparation method Methods 0.000 description 2
- 238000007792 addition Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000001627 detrimental effect Effects 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 239000004753 textile Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/35—Creation or generation of source code model driven
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/457—Communication
Abstract
本发明涉及一种基于DBC的协议层代码生成方法及生成工具,所述方法包括:获取DBC文件并遍历DBC文件以获取DBC文件信息;基于所述DBC文件及DBC文件信息,依据预先输入的目标节点选择项和大小端选择项,生成协议层代码文件;其中所述DBC文件信息包括:DBC文件里定义的帧的帧个数、帧的帧信息、帧的所有信号信息、基于信号名的信号描述的信息。方法以DBC文件作为输入文件,支持多路CAN总线的代码实现,适用于标准CAN的标准帧,可高效率生成协议层代码,开发过程减少甚至避免了手动编写代码,减少了代码错误率,降低了人力和时间成本,缩短了开发周期。
Description
技术领域
本发明主要关于计算机软件开发技术领域,特别是关于一种基于DBC的协议层代码生成方法及生成工具。
背景技术
CAN是Control Area Network的缩写,即控制局域网,是一种用于实时应用的串行通讯协议总线,它可以使用双绞线来传输信号,是世界上应用最广泛的现场总线之一,CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,CAN协议用于汽车中各种不同元件之间的通信,以此取代昂贵而笨重的配电线束。由于CAN总线协议本身的特点,其应用范围目前已不再局限于汽车行业,而是向自动控制、航空航天、航海、过程工业、纺织机械、农用机械、机器人、数控机床、医疗器械及传感器等领域发展。CAN已经形成国际标准,并已被公认为几种最有前途的现场总线之一。
CAN协议通信是汽车各个电控单元之间最基本也是最重要的通讯方式,而各个通信节点及其信号的基本物理信息都包含在多个CAN数据库文件即DBC中,DBC即DatabaseCan的缩写,其代表的是CAN的数据库文件;在这个文件中把CAN通讯的信息定义的非常完整清楚,而CAN网络的通讯就是依据这个文件的描述进行的,所以DBC文件的作用非常强大,正是因为有了它才可以使得整个CAN网路的节点控制器无差错的协同同步开发。CAN信号的适配是基础软件开发中的一个重要工作。然而,对于不同的项目或者对于相同的项目的不同开发人员,CAN通信协议可能存在较大差异,CAN通信代码设计也各有不同,因此随着设计的长时间持续和深入,代码版本会越来越多并且缺少统一的规范和标准,不利于项目开发、项目管控及后续设计的延展。
前述背景技术知识的记载旨在帮助本领域普通技术人员理解与本发明较为接近的现有技术,同时便于对本申请发明构思及技术方案的理解,应当明确的是,在没有明确的证据表明上述内容在本专利申请的申请日前已公开的情况下,上述背景技术不应当用于评价本申请技术方案的新创性。
发明内容
为解决上述背景技术中提及的至少一种技术问题,本发明的目的旨在提供一种基于DBC的协议层代码生成方法及生成工具,方法以DBC文件作为输入文件,支持多路CAN总线的代码实现,适用于标准CAN的标准帧,可高效率生成协议层代码,开发过程减少甚至避免了手动编写代码,减少了代码错误率,降低了人力和时间成本,缩短了开发周期。
一个方面,提供一种基于DBC的协议层代码生成方法,包括:
获取DBC文件并遍历DBC文件以获取DBC文件信息;
基于所述DBC文件及DBC文件信息,依据预先输入的目标节点选择项和大小端选择项,生成协议层代码文件。
部分具体实施方案中,所述DBC文件信息包括:DBC文件里定义的帧的帧个数、帧的帧信息、帧的所有信号信息、基于信号名的信号描述的信息。
部分具体实施方案中,所述协议层代码文件包括后缀名为c的代码文件和后缀名为h的代码文件。
部分具体实施方案中,所述后缀名为c的代码文件包括asi_can.c文件、can_app.c文件的至少一种。
部分具体实施方案中,所述后缀名为h的代码文件包括asi_can.h文件、can_app.h文件的至少一种。
部分具体实施方案中,所述基于DBC的协议层代码生成方法具体包括:
(1)获取DBC文件;
(2)遍历所述DBC文件,获取所述DBC文件里定义的帧的帧个数,并根据帧个数定义msg数组,用以保存信息;
(3)获取所述帧的帧信息,并将所述帧信息存入msg数组中;
(4)获取所述帧的所有信号信息,并将所述所有信号信息存入信号相对的msg数组中;
(5)将步骤(4)中获取的所述帧的信号个数存入msg数组中;
(6)遍历所述DBC文件,依据信号名获取信号描述的信息,并存入信号相对的msg数组中;
(7)依据信号的起始位置对msg数组进行排序;
(8)遍历msg数组,筛选出发送节点为目标节点的帧;
(9)将步骤(8)筛选出的帧以及该帧的所有信号信息存入对应的used信号数组;
(10)遍历msg数组,筛选出发送节点不是目标节点但该帧任一信号接收节点有包含目标节点的帧;
(11)将步骤(10)筛选出的帧以及帧内接收节点包含目标节点的信号信息存入相应的used信号数组;
(12)对used信号数组中的跨字节的信号进行分割,对信号间存在间隔的用reserved进行填充,生成连续信号数组;
(13)根据当前帧的msg数组,生成接收、发送的函数,将其分别存入canApp.h缓存和canApp.c缓存中;
(14)根据used信号数组,对接收、发送函数填充代码;信号通过位域结构体从buffer中解析出来,跨字节的信号还要通过used信号数组的信息进行移位等操作;
(15)将步骤(14)生成的代码存入canApp.c缓存中;
(16)如果最后一个信号的结束位置小于帧的长度,对used信号数组用reserved进行填充,并更新连续信号数组;
(17)根据输入的大小端信息,对连续信号数组进行转换;
(18)依次对单个字节内的信号进行排序,在步骤(12)中已经对跨字节信号进行分割和信号间隔的填充,所以单字节内信号是连续的;
(19)对used信号数组按ID名生成位域的结构体和联合体,并将结构体存放到位域结构体缓存数组中,将联合体存放到联合体缓存数组中;
(20)对步骤(2)里创建的所有msg数组执行完(8)到(19)的步骤;
(21)将结构体缓存、联合体缓存以及canApp.h缓存写入到canApp.h,将canApp.c缓存写入canApp.c中;
(22)根据步骤(2)里创建的msg数组,生成CAN收发buffer以及收发接口函数,并存入到asi_can.c的缓存和asi_can.h的缓存;
(23)根据步骤(2)里创建的msg数组,在收发接口函数中添加步骤(13)中定义的函数调用,参数为(22)中定义的CAN收发buffer,并写入asi_can.c的缓存中;
(24)将asi_can.c缓存写入asi_can.c文件中,将asi_can.h缓存写入asi_can.h文件中。
部分具体实施方案中,所述步骤(3)的所述帧信息包括:帧ID、帧名、帧长度(DLC)和该帧的发送节点。
部分具体实施方案中,所述步骤(4)的所述所有信号信息包括:信号名、起始位置、信号长度、符号位、分辨率、偏移量、下限值、上限值、单位、接收节点。
部分具体实施方案中,所述步骤(13)的所述函数的函数名为:收发信息(pCANTx/pCANRx)+帧名+总线编号(CAN1/CAN2/CAN3)+帧ID(去除0x)。
部分具体实施方案中,所述步骤(14)的所述对接收、发送函数填充代码的信号接口名为:信号名+总线编号(CAN1/CAN2/CAN3)+帧ID(去除0x)。
部分具体实施方案中,所述步骤(22)的所述CAN收发buffer名为:数据类型+总线编号(CAN1/CAN2/CAN3)+收发信息(msg_rxbuf/msg_txbuf)+帧ID(去除0x)。
部分具体实施方案中,所述步骤(22)的所述收发接口函数名为:通信接口()+总线编号(CAN1/CAN2/CAN3)+收发信息(Rx_message/Tx_message)+帧ID(去除0x)。
CAN信号的适配是基础软件开发中的一个重要工作。而CAN信号的集成基本上是基于客户提供的DBC或者信号列表,为了提高效率,开发了一种基于DBC的协议层代码生成方法及工具,代码开发过程减少甚至避免了手动编写代码,减少程序员工作量,降低了人力和时间成本,仅需预先点选目标节点选择项和大小端选择项,即可基于DBC自动生成代码,节省代码开发时间,同时减少代码的错误率,提高设计效率,缩短开发周期,本申请代码生成方法适用于标准CAN的标准帧。
另一个方面,提供一种基于DBC的协议层代码生成工具,包括:
获取模块,其被配置为获取DBC文件;
输入模块,其被配置为输入目标节点选择类别和大小端选择类别;
生成模块,其被配置为生成代码文件。
另一个方面,提供一种基于DBC的协议层代码生成装置,包括:
存储器、
处理器及
存储在所述存储器上并可在所述处理器上运行的计算机程序,
所述计算机程序被所述处理器执行时实现前述所述的基于DBC的协议层代码生成方法。
另一个方面,提供一种计算机可读取存储介质,其存储有计算机程序,所述计算机程序执行时实现前述所述的基于DBC的协议层代码生成方法。
本申请的有益效果为:
1、本发明基于DBC文件和预先输入的目标节点选择项和大小端选择项生成协议层代码文件,首先对DBC文件遍历后获取DBC文件信息,由DBC文件定义的帧个数定义msg数组并将帧信息、帧的所有信号信息、帧的信号个数以及信号描述的信息存入msg数组,依据信号的起始位置排序msg数组,筛选出发送节点为目标节点的帧并将所述帧与该帧的所有信号信息存入used信号数组;然后筛选出发送节点不是目标节点但该帧任一信号接收节点有包含目标节点的帧及帧内接收节点包含目标节点的信号信息存入相应的used信号数组,分割填充获得连续信号数组;根据used信号数组,对接收、发送函数填充代码并存入canApp.c缓存,根据输入的大小端信息,对连续信号数组进行转换,对单个字节内的信号进行排序,按ID名生成位域的结构体和联合体并存入相应缓存中,结构体缓存、联合体缓存以及canApp.h缓存写入到canApp.h,将canApp.c缓存写入canApp.c文件,根据msg数组,生成CAN收发buffer以及收发接口函数,并存入到asi_can.c的缓存和asi_can.h的缓存,在收发接口函数中添加函数调用并写入asi_can.c的缓存,最后将asi_can.c缓存写入asi_can.c文件,将asi_can.h缓存写入asi_can.h文件。本发明提供基于DBC的协议层代码生成方法及工具,代码开发过程减少甚至避免了手动编写代码,减少程序员工作量,降低了人力和时间成本。
2、本发明中,仅需预先点选目标节点选择项和大小端选择项,即可基于DBC自动生成代码,节省代码开发时间,同时减少代码的错误率,提高设计效率,缩短开发周期,本申请代码生成方法适用于标准CAN的标准帧。
附图说明
为让本发明的上述和/或其他目的、特征、优点与实例能更明显易懂,下面将对本发明的具体实施方式中所需要使用的附图进行简单的介绍,显然地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的情况下还可以根据这些附图获得其他的附图。
图1是本发明代码生成方法流程图;
图2是本发明代码生成方法及工具的文件输入目录;
图3是本发明代码生成方法及工具的文件输出目录;
图4是本发明基于DBC的协议层代码生成工具的显示界面示意图;
图5是本发明代码生成工具生成的代码以位域的形式解包示意图;
图6是在更新函数中以位域的形式更新信号示意图;
图7是在asi_can.c中为信号更新函数提供调用的示意图。
具体实施方式
本领域技术人员可以借鉴本文内容,适当替换和/或改动工艺参数实现,然而特别需要指出的是,所有类似的替换和/或改动对本领域技术人员来说是显而易见的,它们都被视为包括在本发明。本发明所述产品和制备方法已经通过较佳实例进行了描述,相关人员明显能在不脱离本发明内容、精神和范围内对本文所述的产品和制备方法进行改动或适当变更与组合,来实现和应用本发明技术。
除非另有定义,本文所使用的技术和科学术语,具有本发明所属领域的普通技术人员通常所理解的相同的含义。本发明使用本文中所描述的方法和材料;但本领域中已知的其他合适的方法和材料也可以被使用。本文中所描述的材料、方法和实例仅是说明性的,并不是用来作为限制。所有出版物、专利申请案、专利案、临时申请案、数据库条目及本文中提及的其它参考文献等,其整体被并入本文中作为参考。若有冲突,以本说明书包括定义为准。
除非具体说明,本文所描述的材料、方法和实例仅是示例性的,而非限制性的。尽管与本文所述的那些方法和材料类似或等同的方法和材料可用于本发明的实施或测试,但本文仍描述了合适的方法和材料。
为了便于理解本发明的实施例,首先对本发明实施例中可能涉及的缩略语和关键术语进行解释说明或定义。
DBC:Database Can,CAN的数据库文件;
CAN:Control Area Network,控制局域网;
DLC:帧的长度。
以下详细描述本发明。
实施例1:
一种基于DBC的协议层代码生成方法,参照图1,包括下述步骤。
如图2所示,根据输入的DBC文件路径,打开DBC文件。
遍历DBC文件,获取DBC里定义的帧个数。并根据帧个数定义msg数组,用以保存信息。
获取所有的帧信息,包括帧ID、帧名、帧长度(DLC)和该帧的发送节点。并将这些信息存储到[002]时创建的msg数组中。
获取该帧的所有信号信息,包括信号名、起始位置、信号长度、符号位、分辨率、偏移量、下限值、上限值、单位、接收节点。并将这些信息存入信号相对的msg数组中。
将[004]里统计的信号个数存入[002]里创建的msg数组中。
遍历DBC文件,依据信号名获取信号描述的信息,并存入到信号相对于的msg数组中。
依据信号的起始位置对msg数组进行排序。
遍历[002]里创建的msg数组。筛选出发送节点为目标节点的帧。
将[008]筛选出的帧以及该帧的所有信号信息存入对应used信号数组。
遍历[002]里创建的msg数组。筛选出发送节点不是目标节点,但该帧任一信号接收节点有包含目标节点的帧。
将[010]筛选出的帧以及帧内接收节点包含目标节点的信号信息存入相应used信号数组。
将存入used信号数组的信号进行分析,对跨字节的信号进行分割;对信号间存在间隔的用reserved进行填充;生成连续信号数组。
根据对当前帧的msg数组,生成接收、发送的函数,将其分别存入canApp.h缓存和canApp.c缓存中。函数名为:收发信息(pCANTx/pCANRx)+帧名+总线编号(CAN1/CAN2/CAN3)+帧ID(去除0x)。
根据used信号数组,对接收、发送函数填充代码。信号接口名为:信号名+总线编号(CAN1/CAN2/CAN3)+帧ID(去除0x);信号通过位域结构体从buffer中解析出来,跨字节的信号还要通过used信号数组的信息进行移位等操作。
将[014]生成的代码存入canApp.c缓存中。
如果最后一个信号的结束位置小于帧的长度(DLC),对used信号数组用reserved进行填充,并更新连续信号数组。
根据输入的大小端信息(Motorola、Intel),对连续信号数组进行转换。
依次对单个字节内的信号进行排序。在[012]中已经对跨字节信号进行分割和信号间隔的填充,所以单字节内信号是连续的。
对used系列数组按ID名生成位域的结构体和联合体,并存放到位域结构体缓存数组中;将联合体存放到联合体缓存数组中。
对所有[002]里创建的msg数组执行完[008]到[019]的步骤。
将结构体缓存、联合体缓存以及canApp.h缓存写入到canApp.h文件,将canApp.c缓存写入到canApp.c文件。
根据[002]里创建的msg数组,生成CAN收发buffer以及收发的接口函数。CAN收发buffer名:数据类型+总线编号(CAN1/CAN2/CAN3)+收发信息(msg_rxbuf/msg_txbuf)+帧ID(去除0x);收发接口函数名:通信接口()+总线编号(CAN1/CAN2/CAN3)+收发信息(Rx_message/Tx_message)+帧ID(去除0x)。并存入到asi_can.c的缓存和asi_can.h的缓存。
根据[002]里创建的msg数组,在收发接口函数中添加[013]中定义的函数调用,参数为[022]中定义的CAN收发buffer。并写入到asi_can.c的缓存中。
将asi_can.c缓存写入到asi_can.c文件中,将asi_can.h缓存写入到asi_can.h文件中,获得输出文件asi_can.c文件、asi_can.h文件、canApp.h文件和canApp.c文件,如图3所示。
基于DBC文件和预先输入的目标节点选择项和大小端选择项生成协议层代码文件,首先对DBC文件遍历后获取DBC文件信息,根据DBC文件定义的帧个数定义msg数组并将帧信息、帧的所有信号信息、帧的信号个数以及信号描述的信息存入msg数组;依据信号的起始位置排序msg数组,筛选出发送节点为目标节点的帧并将所述帧与该帧的所有信号信息存入used信号数组;然后筛选出发送节点不是目标节点但该帧任一信号接收节点有包含目标节点的帧及帧内接收节点包含目标节点的信号信息存入相应的used信号数组,分割填充获得连续信号数组;根据used信号数组,对接收、发送函数填充代码并存入canApp.c缓存,根据输入的大小端信息,对连续信号数组进行转换,对单个字节内的信号进行排序,按ID名生成位域的结构体和联合体并存入相应缓存中,结构体缓存、联合体缓存以及canApp.h缓存写入到canApp.h,将canApp.c缓存写入canApp.c文件,根据msg数组,生成CAN收发buffer以及收发接口函数,并存入到asi_can.c的缓存和asi_can.h的缓存,在收发接口函数中添加函数调用并写入asi_can.c的缓存,最后将asi_can.c缓存写入asi_can.c文件,将asi_can.h缓存写入asi_can.h文件。本发明提供基于DBC的协议层代码生成方法及工具,代码开发过程减少甚至避免了手动编写代码,减少程序员工作量,降低了人力和时间成本;方法仅需预先点选目标节点选择项和大小端选择项,即可基于DBC自动生成代码,节省代码开发时间,同时减少代码的错误率,提高设计效率,缩短开发周期,本申请代码生成方法适用于标准CAN的标准帧。
实施例2:
在前述实施例的基础上,提供一种基于DBC的协议层代码生成工具,包括:
获取模块,其被配置为获取DBC文件;
输入模块,其被配置为输入目标节点选择类别和大小端选择类别;
生成模块,其被配置为生成代码文件,所述生成模块运行前述实施例1中的代码生成方法。
所述基于DBC的协议层代码生成工具的显示界面如图4所示,生成工具的具体操作步骤包括:
步骤一、CAN通道1的输入选择,该输入可以是DBC文件也可以是CAN信号列表,如图2所示;
步骤二、CAN通道2的输入选择,该输入可以是DBC文件也可以是CAN信号列表,如图2所示;
步骤三、CAN通道2的输入选择,该输入可以是DBC文件也可以是CAN信号列表,如图2所示;
步骤四、目标节点选择,点击updateList之后在下拉菜单里选择目标节点;
步骤五、目标MCU的SOC的大小端选择,有Motorola和Intel两种可选;
步骤六、执行操作并退出,生成如图3所示的代码文件,图5示出了本工具生成的代码以位域的形式解包CAN Frame,图6示出了在更新函数中以位域的形式更新信号;图7示出了在asi_can.c中为信号更新函数提供调用;
步骤七、取消操作并退出。
实施例3:
在前述实施例的基础上,提供一种基于DBC的协议层代码生成装置,包括:
存储器、
处理器及
存储在所述存储器上并可在所述处理器上运行的计算机程序,
所述计算机程序被所述处理器执行时实现前述所述的基于DBC的协议层代码生成方法,且能达到相同的技术效果,为避免重复,这里不再赘述。
实施例4:
还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述代码生成方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
开发了一个基于DBC或者信号列表的CAN协议层代码的生成方法及工具,适用于标准CAN的标准帧,代码开发过程减少甚至避免了手动编写代码,减少程序员工作量,降低了人力和时间成本,节省代码开发时间,同时减少代码的错误率,提高设计效率,缩短开发周期。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PR AM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
上述实施例中的常规技术为本领域技术人员所知晓的现有技术,故在此不再详细赘述。
本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。
尽管对本发明已作出了详细的说明并引证了一些具体实施例,但是对本领域熟练技术人员来说,只要不离开本发明的精神和范围可作各种变化或修正是显然的。
虽然上述具体实施方式已经显示、描述并指出应用于各种实施方案的新颖特征,但应理解,在不脱离本公开内容的精神的前提下,可对所说明的装置或方法的形式和细节进行各种省略、替换和改变。另外,上述各种特征和方法可彼此独立地使用,或可以各种方式组合。所有可能的组合和子组合均旨在落在本公开内容的范围内。上述许多实施方案包括类似的组分,并且因此,这些类似的组分在不同的实施方案中可互换。虽然已经在某些实施方案和实施例的上下文中公开了本发明,但本领域技术人员应理解,本发明可超出具体公开的实施方案延伸至其它的替代实施方案和/或应用以及其明显的修改和等同物。因此,本发明不旨在受本文优选实施方案的具体公开内容限制。
本发明未尽事宜均为公知技术。
Claims (10)
1.一种基于DBC的协议层代码生成方法,其特征在于包括:
获取DBC文件并遍历DBC文件以获取DBC文件信息;
基于所述DBC文件及DBC文件信息,依据预先输入的目标节点选择项和大小端选择项,生成协议层代码文件。
2.根据权利要求1所述的基于DBC的协议层代码生成方法,其特征在于:
所述DBC文件信息包括:DBC文件里定义的帧的帧个数、帧的帧信息、帧的所有信号信息、基于信号名的信号描述的信息。
3.根据权利要求1或2所述的基于DBC的协议层代码生成方法,其特征在于:
所述协议层代码文件包括后缀名为c的代码文件和后缀名为h的代码文件。
4.根据权利要求1或2所述的基于DBC的协议层代码生成方法,其特征在于具体包括:
(1)获取DBC文件;
(2)遍历所述DBC文件,获取所述DBC文件里定义的帧的帧个数,并根据帧个数定义msg数组,用以保存信息;
(3)获取所述帧的帧信息,并将所述帧信息存入msg数组中;
(4)获取所述帧的所有信号信息,并将所述所有信号信息存入信号相对的msg数组中;
(5)将步骤(4)中获取的所述帧的信号个数存入msg数组中;
(6)遍历所述DBC文件,依据信号名获取信号描述的信息,并存入信号相对的msg数组中;
(7)依据信号的起始位置对msg数组进行排序;
(8)遍历msg数组,筛选出发送节点为目标节点的帧;
(9)将步骤(8)筛选出的帧以及该帧的所有信号信息存入对应的used信号数组;
(10)遍历msg数组,筛选出发送节点不是目标节点但该帧任一信号接收节点有包含目标节点的帧;
(11)将步骤(10)筛选出的帧以及帧内接收节点包含目标节点的信号信息存入相应的used信号数组;
(12)对used信号数组中的跨字节的信号进行分割,对信号间存在间隔的用reserved进行填充,生成连续信号数组;
(13)根据当前帧的msg数组,生成接收、发送的函数,将其分别存入canApp.h缓存和canApp.c缓存中;
(14)根据used信号数组,对接收、发送函数填充代码;信号通过位域结构体从buffer中解析出来,跨字节的信号还要通过used信号数组的信息进行移位等操作;
(15)将步骤(14)生成的代码存入canApp.c缓存中;
(16)如果最后一个信号的结束位置小于帧的长度,对used信号数组用reserved进行填充,并更新连续信号数组;
(17)根据输入的大小端信息,对连续信号数组进行转换;
(18)依次对单个字节内的信号进行排序,在步骤(12)中已经对跨字节信号进行分割和信号间隔的填充,所以单字节内信号是连续的;
(19)对used信号数组按ID名生成位域的结构体和联合体,并将结构体存放到位域结构体缓存数组中,将联合体存放到联合体缓存数组中;
(20)对步骤(2)里创建的所有msg数组执行完(8)到(19)的步骤;
(21)将结构体缓存、联合体缓存以及canApp.h缓存写入到can_app.h文件中,将canApp.c缓存写入can_app.c文件中;
(22)根据步骤(2)里创建的msg数组,生成CAN收发buffer以及收发接口函数,并存入到asi_can.c的缓存和asi_can.h的缓存;
(23)根据步骤(2)里创建的msg数组,在收发接口函数中添加步骤(13)中定义的函数调用,参数为(22)中定义的CAN收发buffer,并写入asi_can.c的缓存中;
(24)将asi_can.c缓存写入asi_can.c文件中,将asi_can.h缓存写入asi_can.h文件中。
5.根据权利要求4所述的基于DBC的协议层代码生成方法,其特征在于:
步骤(3)的所述帧信息包括:帧ID、帧名、帧长度(DLC)和该帧的发送节点;和/或
步骤(4)的所述所有信号信息包括:信号名、起始位置、信号长度、符号位、分辨率、偏移量、下限值、上限值、单位、接收节点。
6.根据权利要求4所述的基于DBC的协议层代码生成方法,其特征在于:
步骤(13)的所述函数的函数名为:收发信息(pCANTx/pCANRx)+帧名+总线编号(CAN1/CAN2/CAN3)+帧ID(去除0x)。
7.根据权利要求4所述的基于DBC的协议层代码生成方法,其特征在于:
步骤(14)的所述对接收、发送函数填充代码的信号接口名为:信号名+总线编号(CAN1/CAN2/CAN3)+帧ID(去除0x)。
8.一种基于DBC的协议层代码生成工具,其特征在于包括:
获取模块,其被配置为获取DBC文件;
输入模块,其被配置为输入目标节点选择类别和大小端选择类别;
生成模块,其被配置为生成代码文件。
9.一种基于DBC的协议层代码生成装置,其特征在于包括:
存储器、
处理器及
存储在所述存储器上并可在所述处理器上运行的计算机程序,
所述计算机程序被所述处理器执行时实现如权利要求1-7任一项所述的基于DBC的协议层代码生成方法。
10.一种计算机可读取存储介质,其存储有计算机程序,其特征在于:
所述计算机程序执行时实现如权利要求1-7任一项所述的基于DBC的协议层代码生成方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310050107.6A CN116301881B (zh) | 2023-02-01 | 一种基于dbc的协议层代码生成方法及生成工具 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310050107.6A CN116301881B (zh) | 2023-02-01 | 一种基于dbc的协议层代码生成方法及生成工具 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410240734.0A Division CN118034704A (zh) | 2023-02-01 | 一种基于dbc的协议层代码生成装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116301881A true CN116301881A (zh) | 2023-06-23 |
CN116301881B CN116301881B (zh) | 2024-05-10 |
Family
ID=
Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101725155B1 (ko) * | 2015-12-03 | 2017-04-10 | 현대오트론 주식회사 | 네트워크 데이터베이스로부터 분석한 정보를 소프트웨어 구조 설계로 변환하는 방법 |
CN106950864A (zh) * | 2017-04-11 | 2017-07-14 | 重庆长安汽车股份有限公司 | 一种整车控制器的can通信程序生成方法及装置 |
US20170344005A1 (en) * | 2016-05-26 | 2017-11-30 | Baidu Online Network Technology (Beijing) Co., Ltd | Driverless vehicle control method, apparatus and system |
CN108536435A (zh) * | 2018-02-27 | 2018-09-14 | 宁波央腾汽车电子有限公司 | 一种自动生成can通信代码的方法 |
CN109753277A (zh) * | 2017-11-06 | 2019-05-14 | 联合汽车电子有限公司 | Can总线代码的自动生成装置及方法 |
US20190347093A1 (en) * | 2018-05-08 | 2019-11-14 | The Travelers Indemnity Company | Code development management system |
US20210029148A1 (en) * | 2019-07-25 | 2021-01-28 | Battellle Memorial Institute | Can bus protection systems and methods |
EP3787260A1 (en) * | 2019-08-16 | 2021-03-03 | Argus Cyber Security Ltd | System and method for generating a dbc file |
US20210178996A1 (en) * | 2019-12-13 | 2021-06-17 | Ut-Battelle, Llc | Controller area network decoder (can-d) |
CN113259216A (zh) * | 2021-06-29 | 2021-08-13 | 微企(天津)信息技术有限公司 | 一种can总线信号解析方法及系统 |
CN114357946A (zh) * | 2022-01-19 | 2022-04-15 | 厦门金龙联合汽车工业有限公司 | 一种基于dbc和excel文件生成嵌入式代码的方法 |
CN114706566A (zh) * | 2022-04-13 | 2022-07-05 | 合肥阳光电动力科技有限公司 | 一种can通信协议开发方法及装置 |
CN115048108A (zh) * | 2022-06-27 | 2022-09-13 | 陕西法士特齿轮有限责任公司 | 一种代码自动生成的方法、系统、设备及存储介质 |
CN115086449A (zh) * | 2022-05-11 | 2022-09-20 | 北京旋极信息技术股份有限公司 | 一种数据解析方法、装置及计算机可读存储介质 |
Patent Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101725155B1 (ko) * | 2015-12-03 | 2017-04-10 | 현대오트론 주식회사 | 네트워크 데이터베이스로부터 분석한 정보를 소프트웨어 구조 설계로 변환하는 방법 |
US20170344005A1 (en) * | 2016-05-26 | 2017-11-30 | Baidu Online Network Technology (Beijing) Co., Ltd | Driverless vehicle control method, apparatus and system |
CN106950864A (zh) * | 2017-04-11 | 2017-07-14 | 重庆长安汽车股份有限公司 | 一种整车控制器的can通信程序生成方法及装置 |
CN109753277A (zh) * | 2017-11-06 | 2019-05-14 | 联合汽车电子有限公司 | Can总线代码的自动生成装置及方法 |
CN108536435A (zh) * | 2018-02-27 | 2018-09-14 | 宁波央腾汽车电子有限公司 | 一种自动生成can通信代码的方法 |
US20190347093A1 (en) * | 2018-05-08 | 2019-11-14 | The Travelers Indemnity Company | Code development management system |
US20210029148A1 (en) * | 2019-07-25 | 2021-01-28 | Battellle Memorial Institute | Can bus protection systems and methods |
EP3787260A1 (en) * | 2019-08-16 | 2021-03-03 | Argus Cyber Security Ltd | System and method for generating a dbc file |
US20210178996A1 (en) * | 2019-12-13 | 2021-06-17 | Ut-Battelle, Llc | Controller area network decoder (can-d) |
CN113259216A (zh) * | 2021-06-29 | 2021-08-13 | 微企(天津)信息技术有限公司 | 一种can总线信号解析方法及系统 |
CN114357946A (zh) * | 2022-01-19 | 2022-04-15 | 厦门金龙联合汽车工业有限公司 | 一种基于dbc和excel文件生成嵌入式代码的方法 |
CN114706566A (zh) * | 2022-04-13 | 2022-07-05 | 合肥阳光电动力科技有限公司 | 一种can通信协议开发方法及装置 |
CN115086449A (zh) * | 2022-05-11 | 2022-09-20 | 北京旋极信息技术股份有限公司 | 一种数据解析方法、装置及计算机可读存储介质 |
CN115048108A (zh) * | 2022-06-27 | 2022-09-13 | 陕西法士特齿轮有限责任公司 | 一种代码自动生成的方法、系统、设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
严世华;何永强;郎宾;: "基于DSP的CAN总线应用层协议开发与实现", 科学技术与工程, no. 22, 15 November 2007 (2007-11-15) * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5744795B2 (ja) | CANとModbusとの相互通信を支援するゲートウェイ装置の通信方法及びこれを利用したゲートウェイ装置 | |
CN108243168B (zh) | 报文解析、组包方法和装置及报文处理系统 | |
Sagstetter et al. | Generalized asynchronous time-triggered scheduling for FlexRay | |
CN112311664A (zh) | 一种工业互联网数据交互方法、系统及工业网关 | |
CN107623728A (zh) | 基于产品接口控制文件的fc‑ae‑asm数据通用解析方法 | |
CN116301881B (zh) | 一种基于dbc的协议层代码生成方法及生成工具 | |
CN116301881A (zh) | 一种基于dbc的协议层代码生成方法及生成工具 | |
CN118034704A (zh) | 一种基于dbc的协议层代码生成装置 | |
CN114513410A (zh) | 一种设备快速接入物联网平台的方法和系统 | |
CN101719069B (zh) | Java系统的Web服务化方法与装置 | |
US20110282889A1 (en) | Method and Device for Distributed Configuration of Telematics Services in Motor Vehicle Systems | |
CN106802901A (zh) | 数据库查询的方法及装置 | |
CN107623555B (zh) | 一种通用型通信仿真平台的实现方法及装置 | |
CN116560697A (zh) | Dbc数据库同步方法、装置、电子设备及可读存储介质 | |
CN111740806A (zh) | 一种自适应变帧长的遥测数据组帧方法及系统 | |
CN108763127B (zh) | 源数据与目标数据相互转换的Modbus适配器的实现方法 | |
CN116521602A (zh) | 一种总线数据的传输方法和装置及存储介质 | |
CN111147510A (zh) | 一种基于soa反射工厂架构的数据采集系统及方法 | |
CN102595438A (zh) | 用于测试无线通信系统物理层的方法及设备 | |
CN110072255A (zh) | 用于以有效带宽利用率传输信号的方法和系统 | |
CN116599890B (zh) | 一种车载网络通信数据路由表生成控制方法及相关设备 | |
CN115134361B (zh) | 一种自动驾驶软件平台的跨平台通信方法及装置 | |
CN115047819B (zh) | 一种plc系统、plc数据传输方法及装置 | |
Song et al. | Automatic FIBEX Generation for Migration from CAN Message Description Format to Flexray Fibex Format | |
CN114827290A (zh) | 报文转发方法、装置、车载网络系统及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant |