一种自动生成CAN发送和接收代码的方法与流程

文档序号:11322992阅读:660来源:国知局
一种自动生成CAN发送和接收代码的方法与流程

本发明涉及can通讯领域,特别是涉及一种自动生成can发送和接收代码的方法。



背景技术:

由于自然资源的日益枯竭,电动汽车近些年来发展迅猛,can通讯是目前在电动汽车领域最为常见的通讯方式。在电动汽车开发过程中,有大量的信号会通过can网络来实现ecu与ecu、ecu与传感器之间的通讯。现阶段,应用层的can通讯代码都是手写的。手写can通讯代码效率低下,同时手写的can通讯代码也非常容易出错。



技术实现要素:

本发明的目的是克服现有技术中的不足之处,提供一种自动生成can发送和接收代码的方法。

本发明的目的是通过以下技术方案来实现的:

一种自动生成can发送代码的方法,包括以下步骤:

s11、预先建立发送表格文件;

s12、根据所述发送表格文件编辑发送脚本文件;

s13、运行所述发送脚本文件自动生成can发送代码。

在其中一个实施例中,所述发送表格文件至少包括以下数据格式:

mot_int0:标志数据的格式

appvalue:待发送的信号值

canscaling:待发送的信号值在can中的分辨率

canoffset:待发送的信号值在can中的偏移量

appscanling:待发送的信号值在应用层中的分辨率

appoffset:待发送的信号值在应用层中的偏移量

starbit:待发送的信号值在can中的起始

length:待发送的信号值在can中的长度

messageno:信号appvalue所在的消息号

id:待发送的信号所在id值

cycle:待发送的信号发送周期

next:链表标志位,为1表示当前消息号后还有相同发送周期信息,为null表示当前消息号后无相同发送周期信息

priority:信息发送的优先级

app_temp:应用层使用的变量。

在其中一个实施例中,所述步骤s12具体为:

预先定义装载函数,所述装载函数用于分别获取所述发送表格文件中每一待发送信号的信号值并进行装载。

在其中一个实施例中,所述装载函数=setmsgcan(int8umot_int0,int32uappvalue,int16ucanscaling,int16scanoffset,int16uappscaling,int16sappoffset,int8ustartbit,int8ulength,int8ucanbuf[8])。

在其中一个实施例中,所述步骤s13具体为:

s13-1、读取所述发送表格文件;

s13-2、建立c文件空白档;

s13-3、包含相关头文件、定义函数体;

s13-4、循环调用所述装载函数对所述发送表格文件的字段数据进行装载;

s13-5、将自动生成的can发送代码保存在预先建立的所述c文件空白档中。

在其中一个实施例中,所述步骤s13还包括:

创建管理函数managecan函数和获取所述发送表格文件cycle字段内容的步骤。

一种自动生成can接收代码的方法,包括以下步骤:

s21、预先建立接收表格文件;

s22、根据所述接收表格文件编辑接收脚本文件;

s23、运行所述接收脚本文件自动生成can接收代码。

在其中一个实施例中,所述接收表格文件包括以下数据格式:

mot_int0:标志数据的格式

appvalue:要发送的信号值

canscaling:待发送的信号值在can中的分辨率

canoffset:待发送的信号值在can中的偏移量

appscanling:待发送的信号值在应用层的分辨率

appoffset:待发送的信号值在应用层总的偏移量

starbit:待发送的信号值在can中的起始

length:待发送的信号值在can的长度

messageno:信号appvalue所在的消息号

id:待发送的信号所在id值

app_temp:应用层使用的变量

在其中一个实施例中,所述步骤s22具体为:

预先定义提取函数,所述提取函数用于分别获取所述接收表格文件中每一待提取信号的信号值并进行提取。

在其中一个实施例中,所述提取函数=getmsgcan(int8umot_int0,int8ucanscaling,int16scanoffset,int8uappscaling,int16sappoffset,int8ustartbit,int8ulength,int8ucanbuf[8])。

在其中一个实施例中,所述步骤s23具体为:

s23-1、读取所述接收表格文件;

s23-2、建立c文件空白档;

s23-3、包含相关头文件、定义函数体;

s23-4、循环调用所述提取函数对所述接收表格文件的字段数据进行提取;

s23-5、将自动生成的can接收代码保存在预先建立的所述c文件空白档。

本次技术方案相比于现有技术有以下有益效果:

1.自动生成can发送和接收代码,节约时间的同时效率高、不易出错。

附图说明

图1为本实施例中的自动生成can发送代码的方法流程图;

图2为本实施例中的自动生成can接收代码的方法流程图。

具体实施方式

为了便于理解本发明,下面将参照相关附图对本发明进行更全面的描述。附图中给出了本发明的较佳实施方式。但是,本发明可以以许多不同的形式来实现,并不限于本文所描述的实施方式。相反地,提供这些实施方式的目的是使对本发明的公开内容理解的更加透彻全面。

需要说明的是,当元件被称为“固定于”另一个元件,它可以直接在另一个元件上或者也可以存在居中的元件。当一个元件被认为是“连接”另一个元件,它可以是直接连接到另一个元件或者可能同时存在居中元件。本文所使用的术语“垂直的”、“水平的”、“左”、“右”以及类似的表述只是为了说明的目的,并不表示是唯一的实施方式。

除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施方式的目的,不是旨在于限制本发明。本文所使用的术语“及/或”包括一个或多个相关的所列项目的任意的和所有的组合。

如图1所示为自动生成can发送代码的方法流程图,包括以下步骤:

s11、预先建立发送表格文件;

s12、根据所述发送表格文件编辑发送脚本文件;

s13、运行所述发送脚本文件自动生成can发送代码。

具体地,所述发送表格文件至少包括以下数据格式:

mot_int0:标志数据的格式

appvalue:待发送的信号值

canscaling:待发送的信号值在can中的分辨率

canoffset:待发送的信号值在can中的偏移量

appscanling:待发送的信号值在应用层中的分辨率

appoffset:待发送的信号值在应用层中的偏移量

starbit:待发送的信号值在can中的起始

length:待发送的信号值在can中的长度

messageno:信号appvalue所在的消息号

id:待发送的信号所在id值

cycle:待发送的信号发送周期

next:链表标志位,为1表示当前消息号后还有相同发送周期信息,为null表示当前消息号后无相同发送周期信息

priority:信息发送的优先级

app_temp:应用层使用的变量。

具体地,所述步骤s12具体为:

预先定义装载函数,所述装载函数用于分别获取所述发送表格文件中每一待发送信号的信号值并进行装载。

具体地,所述装载函数=setmsgcan(int8umot_int0,int32uappvalue,int16ucanscaling,int16scanoffset,int16uappscaling,int16sappoffset,int8ustartbit,int8ulength,int8ucanbuf[8])。

具体地,所述步骤s13具体为:

s13-1、读取所述发送表格文件;

s13-2、建立c文件空白档;

s13-3、包含相关头文件、定义函数体;

s13-4、循环调用所述装载函数对所述发送表格文件的字段数据进行装载;

s13-5、将自动生成的can发送代码保存在预先建立的所述c文件空白档中。

具体地,所述步骤s13还包括:

创建管理函数managecan函数和获取所述发送表格文件cycle字段内容的步骤。

发送过程:

发送表格文件的数据格式内容已经预先在发送表格文件事先定义好,发送数据前只需要在发送表格文件中填写入待发送的数据即可。

需要说明的是,发送表格文件为excel文件。

装载函数,装载函数由于是基于c语言设计出来的,只要可以实现对发送表格文件数据内容的装载,实现声明变量并对变量进行相应赋值即可,对此装载函数可以根据设计者的设计理念多样化设计,本次申请的技术方案对装载函数的组成结构不做限定。作为优选实施例,装载函数的形参包括发送表格文件数据的所有数据格式。

需要特别强调的是,在本实施例中,装载函数的形参具有canbuf[8],但在发送表格文件中并没有这一数据内容。形参canbuf[8]是内部自定义的全局变量,是发送表格文件的数据通过装载函数处理后得到的数组,即装载值。

还需要说明的是,发送脚本文件,是利用matlab制作的发送脚本文件,用于自动生成can发送代码。作为优选实施例,在自动生成can发送代码时,matlab利用自身的xlsread()函数获取发送表格文件的所有数据内容,利用fid=fopen()函数生成c格式文件,反复调用装载函数,扫遍发送表格文件中id相同的所在行数据,将id相同的所在行数据进行装载。利用发送脚本文件自动生成can发送代码,不需要人工进行编写发送代码,效率高不易出错。

如图2所示为自动生成can接收代码的方法流程图,包括以下步骤:

s21、预先建立接收表格文件;

s22、根据所述接收表格文件编辑接收脚本文件;

s23、运行所述接收脚本文件自动生成can接收代码。

具体地,所述接收表格文件包括以下数据格式:

mot_int0:标志数据的格式

appvalue:要发送的信号值

canscaling:待发送的信号值在can中的分辨率

canoffset:待发送的信号值在can中的偏移量

appscanling:待发送的信号值在应用层的分辨率

appoffset:待发送的信号值在应用层总的偏移量

starbit:待发送的信号值在can中的起始

length:待发送的信号值在can的长度

messageno:信号appvalue所在的消息号

id:待发送的信号所在id值

app_temp:应用层使用的变量

具体地,所述步骤s22具体为:

预先定义提取函数,所述提取函数用于分别获取所述接收表格文件中每一待提取信号的信号值并进行提取。

具体地,所述提取函数=getmsgcan(int8umot_int0,int8ucanscaling,int16scanoffset,int8uappscaling,int16sappoffset,int8ustartbit,int8ulength,int8ucanbuf[8])。

具体地,所述步骤s23具体为:

s23-1、读取所述接收表格文件;

s23-2、建立c文件空白档;

s23-3、包含相关头文件、定义函数体;

s23-4、循环调用所述提取函数对所述接收表格文件的字段数据进行提取;

s23-5、将自动生成的can接收代码保存在预先建立的所述c文件空白档。

接收过程:

接收表格文件的数据格式内容已经预先在接收表格文件事先定义好,接收数据后只需要在接收表格文件中填写入接收到的数据即可。

需要说明的是,接收表格文件为excel文件。

提取函数,提取函数的形参包括接收表格文件数据的所有数据格式,提取函数由于是基于c语言设计出来的,只要可以实现对接收表格文件数据内容的提取,实现声明变量并对变量进行相应赋值即可,对此提取函数可以根据设计者的设计理念多样化设计,本次申请的技术方案对提取函数的组成结构不做限定。作为优选实施例,提取函数的形参包括接收表格文件数据的所有数据格式。

需要特别强调的是,在本实施例中,提取函数的形参具有canbuf[8],但在接收表格文件中并没有这一数据内容。形参canbuf[8]从外部通信口接收后赋值给形参canbuf[8]。

还需要说明的是,接收脚本文件,是利用matlab制作的接收脚本文件,用于自动生成can接收代码。作为优选实施例,在自动生成can接收代码时,matlab利用自身的xlsread()函数获取接收表格文件的所有数据内容,利用fid=fopen()函数生成c格式文件,反复调用提取函数,扫遍接收表格文件中id相同的所在行数据,将id相同的所在行数据进行提取解析。利用接收脚本文件自动生成can接收代码,不需要人工进行编写接收代码,效率高不易出错。

以上所述实施方式仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1