用Python控制硬件51-可编程CAN总线调试器CAN总线是成熟可靠的现场总线,应用极为广泛,如汽车、自动化控制、智能模块等。 为更好地开发和测试CAN总线产品,工程师需要配备顺手的调试分析工具,
发布时间:2022-11-25 14:52:47 所属栏目:Asp教程 来源:
导读: CAN总线是成熟可靠的现场总线,应用极为广泛,如汽车、自动化控制、智能模块等。
为更好地开发和测试CAN总线产品,工程师需要配备顺手的调试分析工具,市面上这类产品很多,从低端到高端都有,但普遍缺乏
为更好地开发和测试CAN总线产品,工程师需要配备顺手的调试分析工具,市面上这类产品很多,从低端到高端都有,但普遍缺乏
|
CAN总线是成熟可靠的现场总线,应用极为广泛,如汽车、自动化控制、智能模块等。 为更好地开发和测试CAN总线产品,工程师需要配备顺手的调试分析工具,市面上这类产品很多,从低端到高端都有,但普遍缺乏一项功能:自定义脚本编程控制。 下面介绍的这款调试器Shell Lab C1可以解决这个痛点,不仅可以用Python脚本实时抓取数据包并解析,还能借助Shell Lab测试台软件的优势,将解析出的信号量绘制成实时图表,并且在同一脚本控制多个设备/仪器,搭建一个联动的测控系统。 这是一款基于MCUSH平台开发的工具,插上USB会枚举出虚拟串口(全速,不受设置的波特率限制),串口控制台中增加了一条can指令,所有的操作都是通过这条指令解析,然后用Python库对命令做了抽象封装。 先看看手动调试时底层的can命令参数列表: =>can --help usage: can [-c ] [-i ] [-v ] [-e] [-r] 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)。 以上只是简单功能的示例asp调试器,更复杂的控制指令还包括: 都是通过can指令完成,细节不展开介绍了,有兴趣的话可以自行尝试。 下面引入更实用的MCUSH/Python库,已将上面所有细节都封装完成方便调用。 将上面的的发送接收过程用Python脚本再实现一遍: from binascii import hexlify from mcush import ShellLab s=ShellLab.ShellLabCAN('/dev/ttyACM0') s.canBaudrate(500000) s.canWrite(0xA0, [0x01, 0x02, 0x03]) # 发送三字节数据 for cid, ext, rtr, dat in s.canRead(): dat = hexlify(dat) # 转成HEX字符串 print( 'id=0x%X, ext=%d, rtr=%d, dat=%s'% (cid, ext, rtr, dat) ) 其中canWrite写函数传入目标标识符,数据列表(整数,最多8字节),若需要扩展帧标志则加上参数ext=True,远程帧标志则加参数rtr=True。 canRead读函数返回的报文列表中,每一项都是包含标识符、扩展帧标志、远程帧标志和内容的四元组,内容类型为最长8字节的字符串,通过hexlify函数转换后打印出来。 至此已经可以用Python控制CAN总线,写命令行方式的测试用例了,但是工具的优化还没结束,下面引入Shell Lab测试台软件,看看自带的示例代码: 点击“加载示例”->“can”->“packets logger”,这是一个报文记录的脚本。 代码首先设置硬件标识符滤波器,只监听总线上感兴趣的内容(默认监听所有),并按CSV格式记录成文件(可用EXCEL打开),非常实用。也是一个模板,加以改造:对收到数据解析,取出需要的信息(也许是物理量、状态量、过程控制反馈等),进一步地将这些物理量在绘图面板中描绘出来,实现数据的可视化。 例如,下图是某车辆(长城H6车型)OBD接口记录下的原始数据(暂时没找到报文协议没法解读): 下一个示例“can”->“ send random packets”: 这个脚本会挑选随机标识符,发送随机数据(包括内容和长度),标准/扩展/远程帧类型也随机,是个颇具“破坏性”的程序,改造一下,可用于产品开发时的压力测试。 注: Shell Lab测试台软件免费使用,下载地址:linkongsoft.com/shell-lab/ mcush库安装方式:sudo pip install mcush (编辑:百客网 - 域百科网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐

