加入收藏 | 设为首页 | 会员中心 | 我要投稿 百客网 - 域百科网 (https://www.yubaike.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > Asp教程 > 正文

用Python控制硬件51-可编程CAN总线调试器CAN总线是成熟可靠的现场总线,应用极为广泛,如汽车、自动化控制、智能模块等。 为更好地开发和测试CAN总线产品,工程师需要配备顺手的调试分析工具,

发布时间:2022-11-25 14:52:47 所属栏目:Asp教程 来源:
导读:  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
 

(编辑:百客网 - 域百科网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章