python生成dat文件_用Python控制硬件51-可编程CAN总线调试器

4df9453d232292db87b452014c103965.png

CAN总线是成熟可靠的现场总线,应用极为广泛,如汽车、自动化控制、智能模块等。

为更好地开发和测试CAN总线产品,工程师需要配备顺手的调试分析工具,市面上这类产品很多,从低端到高端都有,但普遍缺乏一项功能:自定义脚本编程控制。

下面介绍的这款调试器Shell Lab C1可以解决这个痛点,不仅可以用Python脚本实时抓取数据包并解析,还能借助Shell Lab测试台软件的优势,将解析出的信号量绘制成实时图表,并且在同一脚本控制多个设备/仪器,搭建一个联动的测控系统。

a5b31c1613837bf19c8e1a39ad994116.png

这是一款基于MCUSH平台开发的工具,插上USB会枚举出虚拟串口(全速,不受设置的波特率限制),串口控制台中增加了一条can指令,所有的操作都是通过这条指令解析,然后用Python库对命令做了抽象封装。

先看看手动调试时底层的can命令参数列表:

=>can --help
usage: can [-c <command>] [-i <index>] [-v <value>] [-e] [-r] <data>
options:
 -c/--cmd        info|(de)init|reset|baudrate|reset_input|read|write|filter
 -i/--idx        index param
 -v/--val        value param
 -e/--ext        extended
 -r/--rtr        remote
 data            data args
=>

上电后默认以1M波特率运行,可调范围包含了从5k~1M的常用值,下面的指令调整波特率至500k:

=>can -c baudrate -v 500000
=>

试着向总线上发送一条报文,11位标识符0xA0,数据共3字节(0x01、0x02和0x03),指令如下:

=>can -c write -i 0xA0 0x01 0x02 0x03
=>

取出总线上收到的报文,将接收缓冲逐行打印出来:

=>can -c read
0B0 D 01020304
...
=>

第一条表示标识符0x0B0的数据帧,内容共4字节(0x01、0x02、0x03和0x04)。

以上只是简单功能的示例,更复杂的控制指令还包括:

  • 扩展帧和远程帧的控制
  • 硬件标识符滤波器的设置

都是通过can指令完成,细节不展开介绍了,有兴趣的话可以自行尝试。

下面引入更实用的MCUSH/Python库,已将上面所有细节都封装完成方便调用。

将上面的的发送接收过程用Python脚本再实现一遍:

from 

其中canWrite写函数传入目标标识符,数据列表(整数,最多8字节),若需要扩展帧标志则加上参数ext=True,远程帧标志则加参数rtr=True。

canRead读函数返回的报文列表中,每一项都是包含标识符、扩展帧标志、远程帧标志和内容的四元组,内容类型为最长8字节的字符串,通过hexlify函数转换后打印出来。

至此已经可以用Python控制CAN总线,写命令行方式的测试用例了,但是工具的优化还没结束,下面引入Shell Lab测试台软件,看看自带的示例代码:

点击“加载示例”->“can”->“packets logger”,这是一个报文记录的脚本。

a5d5d779001f0200cd65777026256bb9.png

代码首先设置硬件标识符滤波器,只监听总线上感兴趣的内容(默认监听所有),并按CSV格式记录成文件(可用EXCEL打开),非常实用。也是一个模板,加以改造:对收到数据解析,取出需要的信息(也许是物理量、状态量、过程控制反馈等),进一步地将这些物理量在绘图面板中描绘出来,实现数据的可视化。

例如,下图是某车辆(长城H6车型)OBD接口记录下的原始数据(暂时没找到报文协议没法解读):

677903b5f93fae20d19d33132d377796.png

下一个示例“can”->“ send random packets”:

a5d6caad758de8f0a5fc1365da0d6c41.png

这个脚本会挑选随机标识符,发送随机数据(包括内容和长度),标准/扩展/远程帧类型也随机,是个颇具“破坏性”的程序,改造一下,可用于产品开发时的压力测试。


注:

Shell Lab测试台软件免费使用,下载地址:http://www.linkongsoft.com/shell-lab/

mcush库安装方式:sudo pip install mcush

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值