`python-can`(常简称为 `pycan`)是一个用于与 CAN(Controller Area Network)总线进行交互的 Python 库
2026/7/24 21:36:22 网站建设 项目流程

python-can(常简称为pycan)是一个用于与 CAN(Controller Area Network)总线进行交互的 Python 库,它提供跨平台、标准化的 API,支持多种硬件接口(如 SocketCAN、PCAN、USBtin、Kvaser、Vector、Ixxat 等),广泛应用于汽车电子、工业控制和嵌入式系统开发中。

核心特性:

  • ✅ 统一的Bus抽象层,屏蔽底层硬件差异
  • ✅ 支持经典 CAN 和 CAN FD(需硬件与驱动支持)
  • ✅ 提供Message类封装帧结构(ID、DLC、data、is_extended_id、is_fd、is_remote_frame 等)
  • ✅ 内置过滤器(CanFilter)、错误处理、超时机制
  • ✅ 支持实时收发、日志记录(ASC、BLF、CSV 格式)、回放功能
  • ✅ 兼容 asyncio(AsyncBus)和多线程场景

基础使用示例(SocketCAN on Linux):

importcan# 初始化 CAN 总线(以 Linux SocketCAN 为例)bus=can.Bus(interface='socketcan',channel='vcan0',bitrate=500000)# 发送一条标准帧msg=can.Message(arbitration_id=0x123,data=[0x01,0x02,0x03],is_extended_id=False)bus.send(msg)print("Message sent!")# 接收一条消息(阻塞)received_msg=bus.recv(timeout=1.0)ifreceived_msg:print(f"Received: ID=0x{received_msg.arbitration_id:X}, Data={received_msg.data.hex()}")bus.shutdown()

安装方式:

pipinstallpython-can# 若需特定接口支持(如 PCAN),额外安装驱动或依赖:# pip install python-can[pcan] # Windows PCAN-USB# pip install python-can[kvaser] # Kvaser 接口

⚠️ 注意事项:

  • Linux 下需提前配置虚拟/物理 CAN 接口(如sudo modprobe vcan && sudo ip link add dev vcan0 type vcan
  • Windows 用户需安装对应硬件厂商驱动(如 PEAK-System、Kvaser、Vector)
  • python-can本身不实现物理层,仅作为上层协议栈桥梁
    在 Windows 上使用python-can驱动PEAK-System PCAN-USB设备,需完成以下硬件驱动安装、Python 环境配置和代码适配三步。整个过程依赖 PEAK 官方提供的底层 DLL(PCANBasic.dll),python-can通过其 Python 封装(pcan接口)与之通信。

✅ 一、前置条件与准备工作

项目要求
硬件PCAN-USB(或 PCAN-USB FD、PCAN-USB Pro 等兼容型号)
操作系统Windows 10/11(64位推荐;32位需匹配 DLL 架构)
管理员权限安装驱动和运行程序时建议以管理员身份操作

✅ 二、安装 PEAK 官方驱动(关键步骤)

  1. 下载驱动包
    访问 PEAK-System 官网下载页面 → 找到“PCAN-Basic”(非 PCAN-Developer!)→ 下载最新版PCANBasic_Setup.exe(如PCANBasic_4.7.0.exe)。

  2. 安装驱动

    • 管理员身份运行安装程序
    • 勾选“Install PCAN-Basic API”“Install USB driver”(自动安装 WinUSB 或 NDIS 驱动)
    • 安装完成后,设备管理器中应显示:
      PEAK-System PCAN-USB(状态为“正常工作”)

      💡 若出现黄色感叹号,请右键 → “更新驱动程序” → “浏览我的计算机” → 选择C:\Windows\System32\drivers\pcanusb.sys或重新运行安装程序修复。

  3. 验证 DLL 存在
    确保以下文件存在(路径可能因版本略有差异):

    • C:\Windows\System32\PCANBasic.dll(64位系统)
    • C:\Windows\SysWOW64\PCANBasic.dll(32位 Python 需此路径)

    ⚠️python-can会自动查找该 DLL;若报错OSError: cannot load library,请确认 DLL 架构(x64/x86)与 Python 解释器一致。


✅ 三、Python 环境配置

# 推荐使用虚拟环境python-mvenv can_env can_env\Scripts\activate# 安装 python-can 及 PCAN 支持(自动安装 pcan 包)pipinstallpython-can[pcan]# 验证安装python-c"import can; print(can.__version__)"

✅ 注意:[pcan]是可选依赖,它会额外安装pcan(PEAK 官方 Python 封装),但python-can本身也内置了对PCANBasic.dll的直接调用逻辑,二者兼容。


✅ 四、Python 代码示例(即插即用)

importcan# 初始化 PCAN-USB(通道对应设备管理器中的 CAN 接口号,如 PCAN_USBBUS1)bus=can.Bus(interface='pcan',channel='PCAN_USBBUS1',# 常见值:PCAN_USBBUS1 ~ PCAN_USBBUS16bitrate=500000,state=can.BusState.ACTIVE# 或 can.BusState.PASSIVE(只监听))try:# 发送测试帧msg=can.Message(arbitration_id=0x123,data=[0xDE,0xAD,0xBE,0xEF],is_extended_id=False)bus.send(msg)print("Message sent on PCAN-USB.")# 接收一帧(超时1秒)recv_msg=bus.recv(timeout=1.0)ifrecv_msg:print(f"Received: ID=0x{recv_msg.arbitration_id:X}, Data={recv_msg.data.hex()}")else:print("No message received (timeout).")finally:bus.shutdown()

📌常见 channel 名称参考(设备管理器 → PEAK-System 设备属性 → 详细信息 → “设备实例路径”)

  • PCAN_USBBUS1(默认第一个 USB 设备)
  • PCAN_USBBUS2(第二个)、PCAN_PCIBUS1(PCI 卡)等
  • 可通过can.interfaces.pcan.get_available_interfaces()列出所有可用通道(需python-can>=4.3.0

✅ 五、排错提示

现象解决方案
OSError: cannot load library PCANBasic.dll检查 DLL 是否存在 + Python 位数(32/64)是否匹配 DLL 架构;尝试将 DLL 复制到脚本同目录
ValueError: Channel 'PCAN_USBBUS1' not found设备未识别 → 重装驱动;或 channel 名错误 → 查设备管理器或用get_available_interfaces()
发送成功但接收不到回环帧PCAN-USB 默认不支持自发自收(loopback),需外接终端电阻并连接真实节点,或启用硬件 loopback(部分型号支持)
PCAN_ERROR_BUSLIGHT / BUSHEAVY总线电平异常 → 检查终端电阻(120Ω)、线缆、波特率匹配、节点供电

补充建议

  • 使用 PCAN-View 工具验证硬件通信正常后再切入 Python 开发
  • 如需高实时性,避免bus.recv()阻塞,改用can.Notifier+can.Listener异步处理

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询