一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

CAN信号起始位置计算方法、DBC文件生成方法与流程

2021-10-24 06:34:00 来源:中国专利 TAG:文件 起始 计算方法 生成 信号

can信号起始位置计算方法、dbc文件生成方法
技术领域
1.本发明涉及汽车检测控制技术领域,特别涉及一种dbc文件中can信号起始位置计算方法及dbc文件生成方法。


背景技术:

2.目前can通信依然是汽车行业主流通讯方式,大部分主机厂使用excel管理及发布维护can信号,如图1所示。而这些can消息少则几十个,多则几百个。现阶段大部分供应商基于autosar工具链导入dbc文件后生成can通信代码,其存在的缺陷在于:一是,在拿到客户can通信矩阵后使用candb工具手动编辑这些can信号会非常耗时、效率低下;二是,若在自动生成dbc文件时,以motorola格式低位(lsb)在前,高位(msb)在后的方式,使用lsb作为dbc信号的起始位置进行编辑,会造成信号映射错误;三是,人为因素将增加信号编辑错误的概率;四是,项目在开发周期内,存在can信号的增加及减少,若客户信号变更还需手动编辑dbc文件,存在编辑错误的风险,造成管理及维护不方便。


技术实现要素:

3.本发明的目的在于克服现有技术存在的缺陷,自动准确的生成标准的dbc文件。
4.为实现以上目的,一方面,本发明采用一种can信号起始位置计算方法,包括:
5.获取can信号列表的信号起始位lsb的值和信号的长度;
6.根据信号起始位lsb的值,查找该值所在的行m和列n,m和n分别为二维数组matrix[m][n]的行数和列数,0≤m≤7,0≤n≤7;
[0007]
令j=n 1,j表示从起始位lsb所在的行向右数的次数;
[0008]
判断i是否小于或等于信号的长度;
[0009]
若否,返回matrix[m][n],得到can信号起始位置;
[0010]
若是,令j=j

1,并判断j是否等于零;
[0011]
若否,令j=j

1;
[0012]
若是,令m=m

1和j=8,并重新判断i是否小于或等于信号的长度。
[0013]
进一步地,所述二维数组matrix[m][n]为预先按照motorola格式的dbc文件定义得到。
[0014]
进一步地,所述二维数组matrix[m][n]=
[0015]
[7,6,5,4,3,2,1,0],
[0016]
[15,14,13,12,11,10,9,8],
[0017]
[23,22,21,20,19,18,17,16],
[0018]
[31,30,29,28,27,26,25,24],
[0019]
[39,38,37,36,35,34,33,32],
[0020]
[47,46,45,44,43,42,41,40],
[0021]
[55,54,53,52,51,50,49,48],
[0022]
[63,62,61,60,59,58,57,56]。
[0023]
第二方面,采用一种dbc文件生成方法,利用如上所述的can信号起始位置计算方法计算出can信号起始位置,包括:
[0024]
从can信号列表中提取帧报文信息和基本属性信息;
[0025]
基于can信号起始位置、帧报文信息和基本属性信息,按照dbc标准文件结构编写dbc文件。
[0026]
进一步地,所述帧报文信息包括报文的id、起始位、信号长度、精度和偏置、最大和最小值以及发送和接收的网络节点内容;
[0027]
所述基本属性信息包括信号名称、文件基本参数及信号内容描述。
[0028]
进一步地,所述基于can信号起始位置和帧报文信息,按照dbc标准文件结构编写dbc文件,包括:
[0029]
基于python使用写入文件函,编写dbc文件的版本信息及符号定义段和波特率定义段;
[0030]
将读取网络节点内容写入dbc文件的网络节点定义段;
[0031]
将can信号起始位置和帧报文信息写入dbc文件的报文帧定义段和can消息定义段;
[0032]
将所述基本属性信息分别写入dbc文件的信号注解说明段、文件基本参数及属性定义段以及数值表定义段。
[0033]
进一步地,所述将所述基本属性信息分别写入dbc文件的信号注解说明段、文件基本参数及属性定义段以及数值表定义段,包括:
[0034]
将所述信号名称写入dbc文件的所述信号注解说明段;
[0035]
将所述文件基本参数写入dbc文件的所述文件基本参数及属性定义段;
[0036]
将所述信号描述写入dbc文件的所述数值表定义段。
[0037]
进一步地,在所述将can信号起始位置和帧报文信息写入dbc文件的报文帧定义段和can消息定义段之前,还包括:
[0038]
使用正则表达式将16进制的所述can信号起始位置和帧报文信息转换为10进制数据。
[0039]
进一步地,在所述将所述信号内容描述写入dbc文件的所述数值表定义段之前,还包括:
[0040]
使用正则表达式将16进制的所述信号内容描述转换为10进制数据。
[0041]
第三方面,采用一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行可实现如上所述的can信号起始位置计算方法。
[0042]
与现有技术相比,本发明存在以下技术效果:本发明通过定义二维数组结构,利用二维数组逆推算计算can信号起始位置在dbc文件中的实际值,实现了运行程序以后自动生成标准的dbc文件。
附图说明
[0043]
下面结合附图,对本发明的具体实施方式进行详细描述:
[0044]
图1是一种can信号起始位置计算方法流程图;
[0045]
图2是motorola格式的dbc文件示例;
[0046]
图3是dbc文件生成方法流程图;
[0047]
图4是can信号列表;
[0048]
图5是dbc文件结构图。
具体实施方式
[0049]
为了更进一步说明本发明的特征,请参阅以下有关本发明的详细说明与附图。所附图仅供参考与说明之用,并非用来对本发明的保护范围加以限制。
[0050]
如图1所示,本实施例公开了一种can信号起始位置计算方法,包括如下步骤s101至s109:
[0051]
s101、获取can信号列表的信号起始位lsb的值和信号的长度;
[0052]
s102、根据信号起始位lsb的值,查找该值所在的行m和列n,m和n分别为二维数组matrix[m][n]的行数和列数,0≤m≤7,0≤n≤7;
[0053]
s103、令j=n 1,j表示从起始位lsb所在的行向右数的次数;
[0054]
s104、判断i是否小于或等于信号的长度,若否执行步骤s105,若是执行步骤s106;
[0055]
s105、返回matrix[m][n],得到can信号起始位置;
[0056]
s106、令j=j

1;
[0057]
s107、判断j是否等于零,若否执行步骤s108,若是执行步骤s109;
[0058]
s108、令j=j

1;
[0059]
s109、令m=m

1和j=8,并重新执行步骤s104。
[0060]
本实施例利用定义的二维数组,通过逆运算使用can信号列表的信号起始位lsb的值start_postion和信号的长度signal_length,计算信号msb位的数值,作为dbc文件的信号起始位。
[0061]
作为进一步优选的技术方案,如图2所示,本实施例中的二维数组matrix[m][n]为8行8列的二维数组,是预先按照motorola格式的dbc文件定义得到,具体为:matrix[m][n]=
[0062]
[7,6,5,4,3,2,1,0],
[0063]
[15,14,13,12,11,10,9,8],
[0064]
[23,22,21,20,19,18,17,16],
[0065]
[31,30,29,28,27,26,25,24],
[0066]
[39,38,37,36,35,34,33,32],
[0067]
[47,46,45,44,43,42,41,40],
[0068]
[55,54,53,52,51,50,49,48],
[0069]
[63,62,61,60,59,58,57,56]。
[0070]
如图3所示,本实施例公开了一种dbc文件生成方法,利用如上实施例所述的can信号起始位置计算方法计算出can信号起始位置,包括如下步骤s201至s202:
[0071]
s201、从can信号列表中提取帧报文信息和基本属性信息;
[0072]
s202、基于can信号起始位置、帧报文信息和基本属性信息,按照dbc标准文件结构编写dbc文件。
[0073]
本实施例通过python语言编写程序从如图4所示的can信号列表
[0074]
中提取帧报文信息比如一帧报文的id、信号名称、长度、起始位置等信
[0075]
息,并根据逆推算法计算can信号起始位置在dbc文件中的实际值,按照如图5所示的dbc标准文件结构进行编写,实现了运行程序以后自动生成标准的dbc文件。
[0076]
作为进一步优选的技术方案,所述帧报文信息包括报文的id、起始位、信号长度、精度和偏置、最大和最小值以及发送和接收的网络节点内容;所述基本属性信息包括信号名称、文件基本参数、报文id、信号的收发类型和周期以及信号内容描述。
[0077]
作为进一步优选的技术方案,所述步骤s201:从can信号列表中提取帧报文信息和基本属性信息,具体包括:
[0078]
打开can信号列表,通过for循环逐行遍历信号列表,在判断网络节点需要接收或者发送信号时,读取can信号列表当前行的内容,并提取报文的id、起始位lsb、信号长度、精度和偏置、最大和最小值以及发送和接收的内容;
[0079]
从can信号列表中遍历信号名称;
[0080]
从can信号列表中遍历信号描述的内容。
[0081]
作为进一步优选的方案,利用上述的can信号起始位置计算方法计算出can信号起始位置,具体为:基于二维数组,利用起始位lsb和信号长度进行逆推算,计算信号msb的值作为信号的起始位。
[0082]
作为进一步优选的技术方案,所述步骤s202:基于can信号起始位置和帧报文信息,按照dbc标准文件结构编写dbc文件,包括:
[0083]
基于python使用写入文件函,编写dbc文件的版本信息及符号定义段和波特率定义段;
[0084]
将网络节点内容写入dbc文件的网络节点定义段;
[0085]
将can信号起始位置和帧报文信息写入dbc文件的报文帧定义段和can消息定义段;
[0086]
将所述基本属性信息分别写入dbc文件的信号注解说明段、文件基本参数及属性定义段以及数值表定义段。
[0087]
作为进一步优选的技术方案,所述将所述基本属性信息分别写入dbc文件的信号注解说明段、文件基本参数及属性定义段以及数值表定义段,包括:
[0088]
将所述信号名称写入dbc文件的所述信号注解说明段;
[0089]
将所述信号的基本参数、报文id、信号的收发类型及周期写入dbc文件的所述基本参数及属性定义段;
[0090]
需要说明的是,基本参数来自于dbc文件初始模板,报文id、信号的收发类型及周期通过图4所示的can信号列表获取。
[0091]
将所述信号描述写入dbc文件的所述数值表定义段。
[0092]
作为进一步优选的技术方案,在所述将can信号起始位置和帧报文信息写入dbc文件的报文帧定义段和can消息定义段之前,还包括:
[0093]
使用正则表达式将16进制的所述can信号起始位置和帧报文信息转换为10进制数据。
[0094]
作为进一步优选的技术方案,在所述将所述信号内容描述写入dbc文件的所述数
值表定义段之前,还包括:
[0095]
使用正则表达式将16进制的所述信号内容描述转换为10进制数据。
[0096]
本实施例还公开了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行可实现如上所述的can信号起始位置计算方法。
[0097]
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。
[0098]
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜