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

基于车机CAN网络信号测试的自动化实现方法与流程

2021-10-19 23:02:00 来源:中国专利 TAG:信号 自动化 测试 方法 网络

基于车机can网络信号测试的自动化实现方法
技术领域
1.本发明属于整车网络测试技术领域,具体涉及一种基于车机can网络信号测试的自动化实现方法。


背景技术:

2.随着汽车电子技术的发展和对汽车性能要求的提高,汽车上的电控单元(ecu)的数量越来越多,各个电控单元之间的交互信息通过can、lin、most总线组成的网络来实现。因而对整车网络的测试显得尤为必要。然而在车机前期开发阶段,无实体控制器,只能通过can模拟工具对can信号进行仿真测试。传统模式通过手动发送仿真信号,进行can网络测试,容易出现以下问题:(1)收信号可能会漏掉(部分反馈信号瞬间发送3帧);(2)部分信号发送间隔有时间要求,若时间间隔短,手动无法实现;(3)人工发送仿真信号时序复杂,且容易出错;(4)can网络压力测试工作重复率高,人力成本大。
3.因此,有必要开发一种新的基于车机can网络信号测试的自动化实现方法。


技术实现要素:

4.本发明的目的是提供一种基于车机can网络信号测试的自动化实现方法,能提升测试效率和降低测试复杂度。
5.本发明所述的一种基于车机can网络信号测试的自动化实现方法,包括以下步骤:第一步.解析can信号:自动解析车机dbc文件,得到can矩阵信息,can矩阵信息包括信号初始值rowvalue、起始位置startsignal和信号长度signallen;第二步.组装can信号:采用第一步解析出来的can矩阵信息,通过预设组装算法计算出can信号发送的值;第三步.发送can信号:通过can设备发送组装好的can信号;第四步.读取can信号:通过can设备读取对应的can信号,进行业务断言。
6.可选地,所述通过预设组装算法计算出can信号发送的值,具体为:根据起始位和长度信息确定lsb;根据lsb确定信息跨越的byte位;根据跨越的byte位组合为数据,该数据即为can信号发送的值。
7.可选地,所述lsb的计算公式如下:lsb = b2
ꢀ‑ꢀ
(b2
ꢀꢀ
%
ꢀꢀ
8) 7
ꢀꢀ‑ꢀꢀ
(b2
ꢀꢀ
%
ꢀꢀ
8) ;b2 = b1 signallen
ꢀ–ꢀ
1;b 1= startsignal
‑ꢀ
(startsignal% 8) 7
ꢀ‑ꢀ
(startsignal% 8);其中:signallen表示信号长度,startsignal表示信号的起始位置。
8.可选地,根据lsb确定信息跨越的byte位,具体为:
计算结束字节endbyte=取整(lsb/8);计算结束字节剩余的bit位remainbits=lsb& 7;计算值在64bit位中的第二偏移量offset=remainbits 8 * (8
ꢀ–ꢀ
endbyte
ꢀ‑ꢀ
1)。
9.可选地,根据跨越的byte位组合为数据,具体为:将rowvalue的值通过位移0ffset位,再采用大端模式转换为8个byte;其中,rowvalue的值为信号的枚举值减去第一偏移量,然后除以因子,再通过四舍五入取整所得。
10.可选地,将所述预设组装算法组装为多个api接口,至少包括收api接口和发api接口;所述收api接口被配置为接收信息的时间间隔小于等于0.01 ms;所述发api接口被配置为以固定时间间隔发送;所述收api接口和发api接口被配置为顺序调用;所述收api接口和发api接口被配置为循环收发本发明具有以下优点:(1)将预设组装算法组装为api接口,提供了汽车can网络自动化解决方案;(2)收api接口被配置为时间间隔0.01 ms以内,达成can网络中信号无遗漏接收,规避人为漏信号场景;(3)发api接口被配置为固定时间间隔发送(通过上层代码来实现),达成人工无法实现的固定时间间隔发信号;(4)收api接口和发api接口均被配置为顺序调用(通过上层代码来实现),能够达到需要多个can信号收发的复杂业务场景,规避人工模拟困难问题;(5)收api接口和发api接口均被配置为循环发送(通过上层代码来实现),能够实现业务压力测试,降低人工值守成本;综上所述,本发明通过自动化方式实现了公有can信号收发,以及车机私有can网络建立和收发。根据车机业务流程建立can网络测试自动化,提升了测试效率,降低了测试复杂度。
附图说明
11.图1是本发明的流程图;图2是表示can信号字节排序和位排序方式的示意图;图3是具体算法举例获取出来的信号起始位置和结束位置的示意图。
具体实施方式
12.下面结合附图对本发明作进一步说明。
13.如图1所示,本实施例中,一种基于车机can网络信号测试的自动化实现方法,包括以下步骤:第一步.解析can信号:自动解析车机dbc(车机数据库文件)文件,得到信号的枚举值、起始位置startsignal、信号长度signallen、第一偏移量和因子;
第二步.组装can信号:采用第一步解析出来的can矩阵信息,通过预设组装算法计算出can信号发送的值;第三步.发送can信号:通过can设备发送组装好的can信号;第四步.读取can信号:通过can设备读取对应的can信号,进行业务断言。
14.本实施例中,标准can信号,每帧can报文由8个字节共64位组成。每个报文包含多个can控制信号。
15.如图2所示,本实施例中,每个字节采用大端模式,高位在前,低位在后,采用z字形组合成为一个矩阵。
16.本实施例中,所述通过预设组装算法计算出can信号发送的值,具体为:根据起始位和长度信息确定lsb(即最低有效位);根据lsb确定信息跨越的byte位;根据跨越的byte位组合为数据,该数据即为can信号发送的值。
17.本实施例中,所述lsb的计算公式如下:lsb = b2
ꢀ‑ꢀ
(b2
ꢀꢀ
%
ꢀꢀ
8) 7
ꢀꢀ‑ꢀꢀ
(b2
ꢀꢀ
%
ꢀꢀ
8) ;b2 = b1 signallen
ꢀ–ꢀ
1;b 1= startsignal
‑ꢀ
(startsignal% 8) 7
ꢀ‑ꢀ
(startsignal% 8);其中:% 表示求余运算,signallen表示信号长度,startsignal表示信号的起始位置。
18.本实施例中,根据lsb确定信息跨越的byte位,具体为:计算结束字节endbyte=取整(lsb/8);计算结束字节剩余的bit位remainbits=lsb& 7,&表示求与运算;计算值在64bit位中的第二偏移量offset=remainbits 8 * (8
ꢀ–ꢀ
endbyte
ꢀ‑ꢀ
1)。
19.本实施例中,根据跨越的byte位组合为数据,具体为,将rowvalue的值通过位移0ffset位,再采用大端模式转换为8个byte。
20.已知startsignal=28、signallen=13和rowvalue=0xb2,组装发送数据byte。其中,rowvalue的值为信号的枚举值减去第一偏移量,然后除以因子,再通过四舍五入取整所得。
21.如图3所示,在车机can网络dbc数据库中signal采用motorola格式,bit numbering采用lsb。
22.(1)b 1= startsignal
‑ꢀ
(startsignal% 8) 7
ꢀ‑ꢀ
(startsignal% 8) =28

4 7

4=27(2)b2 = b1 signallen
ꢀ–ꢀ
1=27 13

1 =39(3)lsb = b2
ꢀ‑ꢀ
(b2
ꢀꢀ
%
ꢀꢀ
8) 7
ꢀꢀ‑ꢀꢀ
(b2
ꢀꢀ
%
ꢀꢀ
8) =39

7 7

7 =32即lsb在32bit位,参见图3。
23.(4)endbyte=取整(lsb/8)=4结束字节endbyte为第四个字节,即byte3,参见图3。
24.(5)remainbits=lsb& 7lsb为32,32二进制为0010 0000,7的二进制为0000 0111;与计算的结果为0000 0000,即计算出结束字节剩余的bit位remainbits为0。
25.(6)offset=remainbits 8 * (8
ꢀ–ꢀ
endbyte
ꢀ‑ꢀ
1)=0 8*(8
‑4‑
1)=32即计算值在64bit位中的第二偏移量offset为32位。
26.(7)将rowvalue的值通过位移0ffset位,再采用大端模式转换为8个byte;采用的指令如下:senddata=(rowvalue<<offset) .to_bytes(8, byteorder="big");得到的数据的值为b'\x00\x00\x00\x00\xb2\x00\x00\x00',与如图3所示结果一致。
27.本实施例中,将所述预设组装算法组装为多个api接口,至少包括收api接口和发api接口;所述收api接口被配置为接收信息的时间间隔小于等于0.01 ms;所述发api接口被配置为以固定时间间隔发送;所述收api接口和发api接口被配置为顺序调用;所述收api接口和发api接口被配置为循环收发。
28.本实施例中,上层调用api接口can信号收发通过apicanbus包进行封装,包里面包括cancommon模块和canmatriinfo 模块,分别提供can信号收发和can信息;用户导入该包,通过调用具体的收发方法,实现can仿真自动化测试。具体步骤如下:1、导入包从apicanbus导入车机can矩阵和can信号收发api,采用的指令如下:from apicanbus.canmatriinfo import *2、调用收发接口2.1.发api接口2.1.1.只发送一帧,采用的指令如下:sendcandata(flag=true,bcm_powerstatusfeedback=2)设置flag=true,api通过kvaser发送一帧bcm_powerstatusfeedback信号2.1.2采用线程持续发送(修改发送信号),采用的指令如下:sendcandata(flag=true,bcm_powerstatusfeedback=2)设置flag= true,api通过can设备每隔10ms发送一次bcm_powerstatusfeedback信号。
29.2.2.收api接口2.2.1.可以设置是否收到特定信号,采用的指令如下:
readcandata(flg=false, **sig_names)flg:false表示不接收该信号; true,表示期望收到该信号;sig_names:key表示can信号名称,value表示can信号值;以上为实现该发明主要的二个接口,其他接口可依赖当前两个接口进行扩展开发。
再多了解一些

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

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

相关文献

  • 日榜
  • 周榜
  • 月榜