🙆♂️我是纯良思安,爱技术、爱分享,更爱生活🙆♂️
💖喜欢的朋友可以关注一下,下次更新不迷路💖
文章目录
前言
python-can
是一个Python库,用于提供Controller Area Network (CAN)接口的支持,允许Python脚本与CAN网络进行交互。它是一个开源库,旨在使得与CAN设备和网络通信变得简单易行。CAN是一种广泛使用的、低成本、高可靠性的网络协议,常见于汽车电子、工业自动化以及其他需要电子设备之间进行可靠通信的领域。
1、简介
1.1 主要功能
-
发送和接收CAN消息:最基本的功能是能够在CAN网络上发送和接收数据包。
python-can
提供了简单的API来执行这些操作,无论是简单的消息传递还是更复杂的基于事件的消息处理。 -
多种硬件支持:
python-can
支持多种CAN接口硬件,包括但不限于SocketCAN(Linux上的原生CAN驱动)、PCAN、Vector CAN设备等。这意味着你可以使用相同的库代码与不同的硬件通信。 -
记录和回放CAN消息:
python-can
可以记录CAN总线上的通信,并将其保存到日志文件中(例如BLF、ASC、CSV格式)。这对于调试、分析通信问题或者测试非常有用。同样,它也支持从这些文件中回放消息到CAN网络。 -
高级消息过滤:
python-can
允许对传入的消息进行过滤,这样应用程序只需要处理感兴趣的消息。这对于减少不必要的处理和提高效率非常有帮助。 -
网络抽象和模拟:除了真实的硬件通信外,
python-can
还提供了网络抽象层,允许创建虚拟的CAN网络,以便于开发和测试,而不需要实际的硬件设备。 -
跨平台:尽管某些特定的硬件接口或功能可能依赖于操作系统,但
python-can
本身旨在跨平台运行,支持Linux、Windows、macOS等。 -
丰富的文档和社区支持:作为一个活跃的开源项目,
python-can
拥有详细的文档和一个活跃的社区,这对于解决问题和学习如何有效使用库非常有帮助。
1.2 官方库文档描述
官方python-can库文档链接如下:
python-can 4.3.1 documentation
根据文档描述:
python can库为python提供控制器局域网支持,为不同的硬件设备提供通用抽象,以及一套用于在can总线上发送和接收消息的实用程序。
python可以在任何python运行的地方运行;从具有商用CAN的高功率计算机到USB设备,再到运行linux的低功率设备,如BeagleBone或RaspberryPi。
- 被动记录 CAN 总线上发生的情况。 例如,使用 OBD-II 端口监控商用车辆。
- 测试通过 CAN 交互的硬件。 在现代汽车、摩托车、船只甚至轮椅中发现的模块已经使用这个库从 Python 中测试了组件。
- 在回路中对新的硬件模块或软件算法进行原型设计。 轻松与现有总线交互。
- 创建虚拟模块以原型 CAN 总线通信。
下面是一个简单的示例,用于使用python-can发送单帧报文到总线:
#!/usr/bin/env python
"""
This example shows how sending a single message works.
"""
import can
def send_one():
"""Sends a single message."""
# this uses the default configuration (for example from the config file)
# see https://python-can.readthedocs.io/en/stable/configuration.html
with can.Bus() as bus:
# Using specific buses works similar:
# bus = can.Bus(interface='socketcan', channel='vcan0', bitrate=250000)
# bus = can.Bus(interface='pcan', channel='PCAN_USBBUS1', bitrate=250000)
# bus = can.Bus(interface='ixxat', channel=0, bitrate=250000)
# bus = can.Bus(interface='vector', app_name='CANalyzer', channel=0, bitrate=250000)
# ...
msg = can.Message(
arbitration_id=0xC0FFEE, data=[0, 25, 0, 1, 3, 1, 4, 1], is_extended_id=True
)
try:
bus.send(msg)
print(f"Message sent on {bus.channel_info}")
except can.CanError:
print("Message NOT sent")
if __name__ == "__main__":
send_one()
2、安装
可以直接使用pip install进行安装:
$ pip install python-can
如果你希望与某些硬件连接,可能还必须安装平台依赖项。许多接口可以与python同时安装它们的依赖项,例如接口serial包括pyserial依赖项,该依赖项可以与serial extra一起安装:
$ pip install python-can[serial]
2.1、GNU/Linux 依赖项
合理地说,目前的Linux内核(2.6.25或更新版本)具有socketcan的实现。如果使用python 3.3或更高版本调用此版本的python can,将直接使用socketcan,否则该接口将通过ctypes使用。
2.2、Windows 依赖项
Kvaser
- 使用Kvaser CANLib SDK作为后端进行安装 python-can
- 安装Kvaser最新的Windows CANLib驱动程序:Kvaser’s latest Windows CANLib drivers.
- 测试Kvaser自己的工具是否正常工作,以确保驱动程序安装正确,硬件是否正常工作。
PCAN
下载并安装最新驱动程序:
- Windows (also supported on Cygwin)
- Linux (also works without, see also Linux installation)
- macOS
请注意,PCANBasic API时间戳从系统启动开始计算秒数。要将这些时间转换为epoch时间,将使用正常运行时间库。如果不可用,则以系统启动后的秒数返回时间。要安装正常运行时间库,请运行.pip install python-can[pcan]
如果安装了 Python for Windows Extensions库,则此库可以利用该库。它将用于获得新消息的通知,而不是使用CPU密集型轮询。
IXXAT
- 要使用IXXAT VCI V3或V4 SDK作为后端进行安装:python可以
- 安装IXXAT’s latest Windows VCI V3 SDK or VCI V4 SDK (Win10) drivers 驱动程序。
- 测试IXXAT自己的工具(即MiniMon)是否正常工作,以确保驱动程序安装正确,硬件是否正常工作。
NI-CAN
- 下载并安装National Instruments
- 需要注意的是,目前该驱动程序仅支持Windows上的32位Python
neoVI
Vector
要使用XL驱动程序库作为后端安装python-can
- 安装Vector硬件接口的最新驱动
- 安装XL驱动程序库XL Driver Library ,或复制
vxlapi.dll和
vxlapi64.dll
到您的工作目录中 - 使用Vector Hardware Configuration给你的应用程序分配通道
CANtact
CANtact支持Linux、Windows和macOS。要使用CANtact驱动程序作为后端安装python可-can:
python3 -m pip install "python-can[cantact]"
如果已经安装,则可以单独安装CANtact后端
pip install cantact
更多CANtact相关文档,可以查看 cantact.io
CanViewer
python-can支持运行python -m can.viewer显示一个简单的CAN viewer 终端应用程序。在Windows上,这取决于Windows curses库,该库可以通过以下方式安装:
python -m pip install "python-can[viewer]"
在开发模式下安装Python-can
此软件包的“开发”安装允许你在本地进行更改或从Git存储库中拉取更新并使用它们,而无需重新安装。下载或克隆源存储库,然后:GitHub - hardbyte/python-can: The can package provides controller area network support for Python developershttps://github.com/hardbyte/python-can
python setup.py develop
🎈如果文章对您有帮助,您可以“点赞、收藏、关注”,这也是我创作动力的源泉🎈
💘感谢支持💘