python-can库基于PCAN-USB使用方法
一、概述
1.介绍
python-can库为Python提供了控制器局域网的支持,为不同的硬件设备提供了通用的抽象,并提供了一套实用程序,用于在CAN总线上发送和接收消息。
支持硬件接口:
|
Name |
Documentation |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2.环境搭建
Python安装:https://www.python.org/ftp/python/3.7.9/python-3.7.9-amd64.exe
PCAN-USB驱动:https://www.peak-system.com/fileadmin/media/files/pcan-basic.zip
库:pip install python-can
3.参考文档
https://python-can.readthedocs.io/en/master/#
二、常用方法
1.接收报文
from can.interfaces.pcan.pcan import PcanBus def bus_recv():
"""轮询接收消息"""
try:
while True:
msg = bus.recv(timeout=100)
print(msg)
except KeyboardInterrupt:
pass if __name__ == '__main__':
bus = PcanBus(channel='PCAN_USBBUS1', bitrate=500000)
bus_recv()
2.发送报文
from can.interfaces.pcan.pcan import PcanBus def bus_send():
"""can消息发送"""
while True:
time.sleep(0.02)
try:
bus.send(msg)
print("消息发送 {}".format(bus.channel_info))
except can.CanError:
print("消息未发送") if __name__ == '__main__':
msg = can.Message(arbitration_id=0x181DFF00, data=[0xEE, 0xFE, 0xFE, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE],
is_extended_id=True) # 报文
bus = PcanBus(channel='PCAN_USBBUS1', bitrate=500000)
bus_send()
3.定期发送报文
def bus_send_periodic():
"""周期发送报文"""
print("开始每200毫秒发送一条消息。持续时间10s")
task = bus.send_periodic(msg, 1.5) # 定期发送
if not isinstance(task, can.ModifiableCyclicTaskABC): # 断言task类型
print("此接口似乎不支持")
task.stop()
return
time.sleep(5) # 持续时间
print("发送完成")
print("更改运行任务的数据以99开头")
msg.data[0] = 0x99
task.modify_data(msg) # 修改data首字节
time.sleep(10) task.stop()
print("停止循环发送")
print("将停止任务的数据更改为单个 ff 字节")
msg.data = bytearray([0xff]) # 重新定向data
msg.dlc = 1 # 定义data长度
task.modify_data(msg) # 修改data
time.sleep(10)
print("重新开始")
task.start() # 重新启动已停止的周期性任务
time.sleep(10)
task.stop()
print("完毕") if __name__ == '__main__':
msg = can.Message(arbitration_id=0x181DFF00, data=[0xEE, 0xFE, 0xFE, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE],
is_extended_id=True) # 报文
bus = PcanBus(channel='PCAN_USBBUS1', bitrate=500000)
bus_send_periodic()
4.循环收发消息
from can.interfaces.pcan.pcan import PcanBus def send_cyclic(stop_event):
"""循环发送消息"""
print("开始每1秒发送1条消息")
start_time = time.time()
while not stop_event.is_set():
msg.timestamp = time.time() - start_time
bus.send(msg)
print(f"tx: {msg}")
time.sleep(1)
print("停止发送消息") def receive(stop_event):
"""循环接收消息"""
print("开始接收消息")
while not stop_event.is_set():
rx_msg = bus.recv(1)
if rx_msg is not None:
print(f"rx: {rx_msg}")
print("停止接收消息") def send_and_recv_msg():
"""发送一个消息并接收一个消息,需要双通道CAN"""
stop_event = threading.Event()
t_send_cyclic = threading.Thread(target=send_cyclic, args=(stop_event,))
t_receive = threading.Thread(target=receive, args=(stop_event,))
t_receive.start()
t_send_cyclic.start()
try:
while True:
time.sleep(0) # yield
except KeyboardInterrupt:
pass # 正常退出
stop_event.set()
time.sleep(0.5) if __name__ == '__main__':
msg = can.Message(arbitration_id=0x181DFF00, data=[0xEE, 0xFE, 0xFE, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE],
is_extended_id=True) # 报文
bus = PcanBus(channel='PCAN_USBBUS1', bitrate=500000)
send_and_recv_msg()
python-can库基于PCAN-USB使用方法的更多相关文章
- python安装库报错的处理方法
在安装python map库时遇到了还多问题,找了好的方法都没有安装成功,最后改安装basemap库参考了了:https://www.jb51.net/article/147780.htm一文操作,最 ...
- python第三方库的四种安装方法
1,直接pip install安装 2,在python-->default setting-->project interprer-->add 3,在这个链接里找到需要的包,下载 h ...
- python常用库
本文由 伯乐在线 - 艾凌风 翻译,Namco 校稿.未经许可,禁止转载!英文出处:vinta.欢迎加入翻译组. Awesome Python ,这又是一个 Awesome XXX 系列的资源整理,由 ...
- Python机器学习库scikit-learn实践
原文:http://blog.csdn.net/zouxy09/article/details/48903179 一.概述 机器学习算法在近几年大数据点燃的热火熏陶下已经变得被人所“熟知”,就算不懂得 ...
- Python常用库大全
环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. v ...
- python的库小全
环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. v ...
- python 三方库
---------------- 这又是一个 Awesome XXX 系列的资源整理,由 vinta 发起和维护.内容包括:Web框架.网络爬虫.网络内容提取.模板引擎.数据库.数据可视化.图片处理. ...
- Python常用库大全,看看有没有你需要的
作者:史豹链接:https://www.zhihu.com/question/20501628/answer/223340838来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- Python第三方库资源
[转载]Python第三方库资源 转自:https://weibo.com/ttarticle/p/show?id=2309404129469920071093 参考:https://github ...
- 【转载】Python第三方库资源
转自:https://weibo.com/ttarticle/p/show?id=2309404129469920071093 参考:https://github.com/jobbole/awesom ...
随机推荐
- 比 WSL2 更香的是 Docker for windows!
今天给大家推荐一个软件 -- "Docker for windows": 如果你对WSL2,还不熟悉,可以关注公众号或小程序看看我之前推送过的两篇文章. Docker for wi ...
- gin使用BasicAuth中间件
package mainimport ( "github.com/gin-gonic/gin" "net/http")// 模拟一些私人数据var secret ...
- es6 快速入门 系列 —— 类 (class)
其他章节请看: es6 快速入门 系列 类 类(class)是 javascript 新特性的一个重要组成部分,这一特性提供了一种更简洁的语法和更好的功能,可以让你通过一个安全.一致的方式来自定义对象 ...
- docker 传入变量
1.Dockerfile中定义变量 ENV maxmemory="" 2.脚本接收变量 if [ "$maxmemory" ];then sed -i &quo ...
- 基于 esbuild 的 universal bundler 设计
--字节跳动前端 Byte FE :杨健 背景 由于 Lynx(公司自研跨端框架)编译工具和传统 Web 编译工具链有较大的差别(如不支持动态 style 和动态 script 基本告别了 bundl ...
- Hexo博客(Snail主题)搭建回顾概览
Hexo博客(Snail主题)搭建回顾概览 笔者搭建博客地址:https://saltyfishyjk.github.io 目录 Hexo博客(Snail主题)搭建回顾概览 Part 0 前言 写作背 ...
- 反汇编分析C++代码
编译环境:Windows 10 + VS2015 1.问题引入 在Win32环境下,CPU小端模式,参数用栈来传递,写出输出结果. 代码如下: int main() { long long a = 1 ...
- ApacheJemeter的简单使用
前言:最近由于工作需要进行接口测试,故简单复习一下ApacheJemeter的使用 安装包下载地址: 链接:https://pan.baidu.com/s/11ywNWRUkFNNBCWw4HiO6B ...
- git clone 命令
感谢原文作者:寻芝彬 原文链接:https://www.jianshu.com/p/c992c799f2dd 描述 拷贝一个 Git 仓库到本地 实例 拷贝一个 Git 仓库到本地,本地目录名称与Gi ...
- JAVA多线程学习四 - CAS(乐观锁)
本文讲解CAS机制,主要是因为最近准备面试题,发现这个问题在面试中出现的频率非常的高,因此把自己学习过程中的一些理解记录下来,希望能对大家也有帮助. 什么是悲观锁.乐观锁?在java语言里,总有一些名 ...