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. 面试官问:为什么SpringBoot的 jar 可以直接运行?
  2. 基数排序算法图解分析
  3. IDEA中SpringBoot项目使用@Data要安装Lombok插件
  4. 如何选择一款优秀的儿童读写台灯?
  5. 第4章 Python 数字图像处理(DIP) - 频率域滤波12 - 选择性滤波 - 带阻
  6. 高端智能阿里手机 黑色 ZOPO C2 出售1499
  7. 30jquery-qrcode生成二维码
  8. 查询2019-06-20日 和 2019-06-23  每个商品每天的入库情况
  9. 图像傅里叶变换的幅度谱、相位谱以及双谱重构原图像
  10. 风控模型面试问题汇总
  11. java前端和后端的区别,看这一篇就够了!
  12. 数据分析学习总结笔记12:空间自相关——空间位置与相近位置的指标测度
  13. BAT、360、网易等大公司开源项目
  14. PPT科研绘图:用PPT绘图,保存为eps并导入Latex
  15. 汉语拼音音节的歧义指数
  16. android回传数据实验报告,传热综合实验实验报告.doc
  17. mysql发音_mysql应该怎么念?
  18. 使用FFMPEG解码和OpenAL播放音乐
  19. ROS键盘控制机器人
  20. “decompose“没有适用于“ts“目标对象的方法

热门文章

  1. 台州杨老师课堂 UI设计培训班
  2. SpringBoot之:SpringBoot中使用HATEOAS
  3. 做好网站图片页面seo优化的五大细节
  4. 网易极客战记-KITHGARD地牢--迷一般的 Kithmaze (需解锁)
  5. 山东八年级计算机教案,初中信息技术 青岛版 八年级信息技术全册教案
  6. 互联网日报 | 3月4日 星期四 | 五家社区团购企业被行政处罚;中兴通讯进军智能汽车领域;网易有道成立“成人教育事业部”...
  7. 第三方杀毒软件已无用
  8. 云时代架构之游戏服务器的架构演进
  9. 【PTA】2022年蓝桥杯及天梯赛赛前训练(C++练习)
  10. DBC 格式分析解读