CAN通讯-使用Python收发CAN数据

  • 配置环境
  • 1.环境配置
    • 1.1安装CAN通讯需要的包
    • 1.2 安装kvaser_drivers以及Kvaser CanKing
  • 2.使用Python收发数据
    • 2.1接发数据代码如下:
      • 2.1.1接收数据代码
      • 2.1.2发送数据代码
    • 2.2验证发送数据
      • 2.2.1使用Kvaser Can King接收数据
      • 2.2.2使用Python发送数据
    • 2.3验证接收数据
      • 2.3.1使用Kvaser Can King发送数据
      • 2.3.2使用Python发接收数据
    • 2.3代码间发送与接收数据:
  • 3.参考文献
  • 4.结束语

配置环境

使用环境:python3.6
平台:Windows10
IDE:PyCharm

1.环境配置

1.1安装CAN通讯需要的包

pip install canlib

1.2 安装kvaser_drivers以及Kvaser CanKing

这些软件可以在官网下载https://www.kvaser.com/download/

官网是英文的,看起来可能有点吃力,这里也给出云盘连接:
链接:https://pan.baidu.com/s/1LDKyIlOV0Ky4d2qxryLZGQ
提取码:vwiv

下载下来之后的文件是这样的,三个文件依次双击安装就行了


安装完后,在开始栏可以查看到已经安装好了

2.使用Python收发数据

2.1接发数据代码如下:

2.1.1接收数据代码

# author:Hurricane
# date:  2021/4/12
# File : CAN_receive.py
# E-mail:hurri_cane@qq.com
import sysfrom canlib import canlibdef print_frame(frame):"""Prints a message to screen"""if (frame.flags & canlib.canMSG_ERROR_FRAME != 0):print("***ERROR FRAME RECEIVED***")else:print("{id:0>8X}  {dlc}  {data}  {timestamp}".format(id=frame.id,dlc=frame.dlc,data=' '.join('%02x' % i for i in frame.data),timestamp=frame.timestamp))if __name__ == '__main__':# Initializationchannel_number = 0# Specific CANlib channel number may be specified as first argumentif len(sys.argv) == 2:channel_number = int(sys.argv[1])chdata = canlib.ChannelData(channel_number)print("%d. %s (%s / %s)" % (channel_number, chdata.channel_name,chdata.card_upc_no,chdata.card_serial_no))# Open CAN channel, virtual channels are considered ok to usech = canlib.openChannel(channel_number, canlib.canOPEN_ACCEPT_VIRTUAL)print("Setting bitrate to 500 kb/s")ch.setBusParams(canlib.canBITRATE_500K)ch.busOn()# Start listening for messagesfinished = Falseprint("   ID    DLC DATA                     Timestamp")while not finished:try:frame = ch.read(timeout=50)print_frame(frame)except(canlib.canNoMsg) as ex:passexcept (canlib.canError) as ex:print(ex)finished = True# Channel teardownch.busOff()ch.close()

2.1.2发送数据代码

# author:Hurricane
# date:  2021/4/12
# File : CAN_send.py
# E-mail:hurri_cane@qq.comimport sysfrom canlib import canlib, Framechannel_number = 1
# Specific CANlib channel number may be specified as first argument
if len(sys.argv) == 2:channel_number = int(sys.argv[1])print("Opening channel %d" % (channel_number))# Use ChannelData to get some information about the selected channel
chd = canlib.ChannelData(channel_number)
print("%d. %s (%s / %s) " % (channel_number,chd.channel_name,chd.card_upc_no,chd.card_serial_no))# If the channel have a custom name, print it
if chd.custom_name != '':print("Customized Channel Name: %s " % (chd.custom_name))# Open CAN channel, virtual channels are considered ok to use
ch = canlib.openChannel(channel_number, canlib.canOPEN_ACCEPT_VIRTUAL)print("Setting bitrate to 500 kb/s")
ch.setBusParams(canlib.canBITRATE_500K)print("Going on bus")
ch.busOn()print("Sending a message")
frame = Frame(id_=123,data=[1, 2, 3, 4, 5, 6, 7, 8],dlc=8,flags=0)
ch.write(frame)
print("Going off bus")
ch.busOff()print("Closing channel")
ch.close()

注:发送数据代码是发送这样的一帧数据:
id是123,长度为8的CAN帧
PS:这里面的信息可以自行修改,符合CAN帧的规则就行

frame = Frame(id_=123,data=[1, 2, 3, 4, 5, 6, 7, 8],dlc=8,flags=0)

2.2验证发送数据

验证是否发送成功,只需要看到有没有接收到数据就行了,本文通过Kvaser提供的软件来测试是否接收到数据。

当然也可以通过上文提到的接收数据的代码,这个在后文会提到。

2.2.1使用Kvaser Can King接收数据

打开CAnKing软件(此软件在1.2节已经提供安装包)

  • 设置CAN通道为0
  • 设置波特率为500K
  • 点击按钮Go On Bus

现在CAN的0通道便打开了,在右侧Output框可以显示发送以及接收到的数据

2.2.2使用Python发送数据

运行2.1.2的Python文件

可以看到运行一次代码,Kvaser Can King便会接收一帧数据

2.3验证接收数据

2.3.1使用Kvaser Can King发送数据

与2.2.1同样打开CAnKing软件

  • 设置CAN通道为0
  • 设置波特率为500K
  • 点击按钮Go On Bus

现在CAN的0通道便打开了,在右侧Output框可以显示发送以及接收到的数据
按照下图打开Universal按钮

点击后便会打开Message对话框,按照图示输入信息


电机Send便会发送CAN帧

2.3.2使用Python发接收数据

运行2.1.1的Python文件

可以看到每次点击Send,Python代码便会接收一帧数据

2.3代码间发送与接收数据:

为了便于同时显示发送端的代码运行结果以及接收端的代码运行结果和CAN King接收到的结果,我们将接收端代码在cmd中运行;使用效果如下:

3.参考文献

Python Canlib Documentation
file:///D:/Program%20Files%20(x86)/kvaserCAN/canlib/python/pycanlib/docs/index.html

4.结束语

如果本文对你有帮助的话还请点赞、收藏一键带走哦,你的支持是我最大的动力!(づ。◕ᴗᴗ◕。)づ

CAN通讯-使用Python收发CAN数据保姆级教程(包含完整代码)相关推荐

  1. Unity教程2:保姆级教程.几行代码实现输入控制2D人物的移动

    目录 人物的创建以及刚体的设置 图层渲染层级设置 角色碰撞箱设置 使用代码控制人物移动 创建脚本文件 初始函数解释 控制移动代码 初始化变量 获得键盘输入 调用函数 手册链接在这:Unity User ...

  2. Python破解WIFI升级版保姆级教程,多线程破解+界面(附赠密码本)

    目录 前言 1.安装python的包 多线程破解教程 基本流程 密码本如下 完整代码如下 破解效果如下 界面版本WiFi破解 注意 代码 破解效果图如下 总结 前言 有很多小伙伴想要破解WiFi密码, ...

  3. 用ENVI5.3处理哨兵2数据保姆级教程

    ENVI5.5之前的ENVI版本是不能直接打开哨兵数据的,但是办法总比困难多,看了一些文章记录的方法,自己试了一下,是可以成功使用5.5之前的版本处理哨兵数据的.本篇详细记录一下如何用ENVI5.3处 ...

  4. Python爬虫之入门保姆级教程,学不会我去你家刷厕所

    注重版权,转载请注明原作者和原文链接 作者:Bald programmer 今天这个教程采用最简单的爬虫方法,适合小白新手入门,代码不复杂 文章目录 今天这个教程采用最简单的爬虫方法,适合小白新手入门 ...

  5. SpringBoot 集成 thumbnailator (图片缩放,区域裁剪,水印,旋转,保持比例)保姆级教程(含代码)

    Thumbnailator 是 Google 开源的图片处理库,支持:图片缩放,区域裁剪,水印,旋转,保持比例.详细介绍可以百度或官网,话不多说,直接上代码,具体要结合自己的业务需要进行使用(有些复杂 ...

  6. vue+element项目 手机号、邮箱校验 保姆级教程

    vue+element项目 手机号.邮箱校验 保姆级教程 (包含注意点) 先看案例:在vue+element项目中给表单中的手机号和邮箱做校验 标题先说注意点 prop黄色框框起来的一定要有 废话不多 ...

  7. 【图解SHA1杂凑算法】SHA1杂凑算法的Python实现保姆级教程 | 物联网安全 | 信息安全

    系列索引:[图解安全加密算法]加密算法系列索引 Python保姆级实现教程 | 物联网安全 | 信息安全 起初写实验时找到的代码大多基于c/c++,python可参考的资料很少,所以借着这次实验的机会 ...

  8. 爬虫保姆级教程3:利用python-Flask框架搭建本地数据可视化网站

    成果展示: (1)网站首页: (2)电影表单页 (3) 电影评分页 (4) 词频统计页 (5)团队页面 接下来让我们看看上述网站是如何完成的: 首先简单介绍一下Flask框架: Flask主要功能有两 ...

  9. 金融数据获取:当爬虫遇上要鼠标滚轮滚动才会刷新数据的网页(保姆级教程)

    目录 1. 谁这么会给我整活儿 2. Selenium模拟网页浏览器爬取 2.1 安装和准备工作 2.2.1 高度判断 2.2.2 顶部距离判断 3: 爬取内容 4: 完整代码,结果展示 1. 谁这么 ...

最新文章

  1. 2017年计算机四级试题,2017年全国计算机四级考试模拟试题与答案
  2. 安装pyspider后运行pyspider all后遇到的问题
  3. 数据库之字段数据类型
  4. Netty 框架学习(二):DelimiterBasedFrameDecoder和FixedLengthFrameDecoder
  5. Java接口有时有结果 有时没有_《Java程序员面试笔试宝典》之为什么Java中有些接口没有任何方法...
  6. (转)Java 调用 C++ (Java 调用 dll)
  7. 刚来公司时我却做了一件最傻的事
  8. hive元数据为什么使用Mysql?不使用默认的Derby
  9. 上海应用技术大学计算机网络试题及答案,上海应用技术学院.计算机网络期末试卷.doc...
  10. 多线程的关键是,不同线程对象要独立
  11. Tomcat Session管理分析
  12. YOLOv2论文笔记
  13. 海尔消费金融暂停“首付贷”
  14. oracle 查询调用某一存储过程的job,oracle job 调用存储过程的使用
  15. Python详细介绍及使用(基础篇)
  16. Workflow,要不要了解一下
  17. linux qq 提示错误,linux QQ使用实践兼wine QQ2013版本太低无法使用解决办法
  18. 操作系统--第一章 操作系统引论--习题答案
  19. 可能是最好用的 IDEA 设置
  20. 欧科进销存2013V2(超市收银软件支持国外IVA/REQ)绿色免费体积小

热门文章

  1. kinlde笔记导出+想法|有手就行|20行代码python小程序
  2. dsp应用领域及常用网站
  3. Air724开发板GPIO试验
  4. 实战:软文营销的作用及技巧
  5. 基于C语言实现的网络嗅探器设计课程设计
  6. 2019国内知名桌面云厂家排名
  7. 智能手机排排坐,十大操作系统下的旗舰手机
  8. openstack 云_OpenStack中的人道主义应用程序,云的Rosetta Stone等
  9. E: Unable to locate package openjdk-8-jre
  10. p 分位法实现图像二值化 matlab