当前位置: 首页 > news >正文

kvaser pythoncan 调用报错(x86 ubuntu工控机)

报错内容为:Error opening channel 1: Specified device not found (-3)

确定已安装库  canlib可链接到libcanlib.so

定位到 驱动内部:ch = canlib.openChannel(channel, openFlags) 没有成功

首先插上kvaser运行 lsusb  打印如下
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 006: ID 17ef:608d Lenovo
Bus 001 Device 005: ID 17ef:6099 Lenovo
Bus 001 Device 008: ID 05c6:f00e Qualcomm, Inc.
Bus 001 Device 009: ID 0bfd:0106 Kvaser AB
Bus 001 Device 007: ID 04d8:0205 Microchip Technology, Inc.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

解决思路:删除原有包重新安装kvaser驱动(运行下述命令时拔掉kvaser )

1 通过“cd linuxcan”命令进入 linuxcan 目录,先后通过“make”,“sudo make install”,“sudo
make load”命令创建驱动程序并安装,加载所有驱动。
Ps:如果为不同的 linux 头文件安装了多个版本的 linuxcan,可以通过调用“sudo make purge”
将它们全部删除. 卸载指令“sudo make uninstall”
2通过“cd linuxcan/canlib”命令进入 canlib 目录,并先后通过“make”,“sudo make install”
命令安装 canlib 驱动。

3 安装完成后拔掉kvaser ,运行canlib/example中的listChannel可执行文件查看当前接口数量。最后运行调用脚本,可正常使用。

附pythoncan调用测试脚本:

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

import can

import time

def send_can_messages():

"""

发送 CAN 消息的函数

"""

try:

# 创建一个 CAN 总线对象,使用 Kvaser 接口,指定通道和比特率

bus = can.interface.Bus(bustype='kvaser', channel=0, bitrate=500000)

print("成功连接到 Kvaser 设备")

# 定义要发送的 CAN 消息

msg = can.Message(

arbitration_id=0x123, # 仲裁 ID

data=[0, 1, 2, 3, 4, 5, 6, 7], # 数据

is_extended_id=False # 是否为扩展帧

)

try:

# 发送 CAN 消息

bus.send(msg)

# 使用 str.format() 方法进行字符串格式化

print("成功发送 CAN 消息: {}".format(msg))

except can.CanError:

print("发送 CAN 消息时出错")

# 关闭总线连接

bus.shutdown()

print("已关闭 Kvaser 设备连接")

except can.CanError as e:

print("连接 Kvaser 设备时出错: {}".format(e))

def receive_can_messages():

"""

接收 CAN 消息的函数

"""

try:

# 创建一个 CAN 总线对象,使用 Kvaser 接口,指定通道和比特率

bus = can.interface.Bus(bustype='kvaser', channel=0, bitrate=500000)

print("成功连接到 Kvaser 设备,开始接收 CAN 消息...")

try:

# 持续接收 CAN 消息,直到手动停止

while True:

# 接收消息,设置超时时间为 1 秒

message = bus.recv(timeout=1)

if message is not None:

# 使用 str.format() 方法进行字符串格式化

print("接收到 CAN 消息: {}".format(message))

except KeyboardInterrupt:

print("用户手动停止接收消息")

# 关闭总线连接

bus.shutdown()

print("已关闭 Kvaser 设备连接")

except can.CanError as e:

print("连接 Kvaser 设备时出错: {}".format(e))

if __name__ == "__main__":

import threading

# 创建发送和接收线程

send_thread = threading.Thread(target=send_can_messages)

receive_thread = threading.Thread(target=receive_can_messages)

# 启动线程

send_thread.start()

receive_thread.start()

# 等待线程结束

send_thread.join()

receive_thread.join()

相关文章:

  • 笔记20250225
  • Shell 脚本--检测网络连通性
  • 星环科技推出DeepSeek全场景解决方案:即开即用、企业级部署、端侧智能三位一体
  • 【Windows】全角/半角切换(Full/half width switch),英文字符间距变大/变小
  • Mac 版 本地部署deepseek ➕ RAGflow 知识库搭建流程分享(附问题解决方法)
  • 【大模型】Ubuntu下 fastgpt 的部署和使用
  • 【DeepSeek】【GPT-Academic】:DeepSeek集成到GPT-Academic(官方+第三方)
  • DeepSeek-OpenSourceWeek-第二天-DeepEP
  • 【Qt】Qt for Open Source Development 安装配置教程(Windows 11)
  • 【Java】I/O 流篇 —— 字符 I/O 流
  • 理解 AI IDE 中的代码库索引:深入探讨 Cursor 的实现
  • C++ | 高级教程 | 信号处理
  • 48.日常算法
  • Python入门 — 类
  • 在ubuntu如何安装samba软件?
  • lowagie(itext)老版本手绘PDF,包含页码、水印、图片、复选框、复杂行列合并等。
  • day7作业
  • GB 44497-2024《智能网联汽车 自动驾驶数据记录系统》标准解读
  • 最新前端框架选型对比与建议(React/Vue/Svelte/Angular)
  • C++ | 高级教程 | 文件和流
  • 短期网站建设培训/优帮云排名自动扣费
  • 苏州专业网站建设设计公司/发布软文的平台
  • 建设网站需要的编程/应用商店搜索优化
  • 太原汽车网站建设/优化设计卷子答案
  • 和网站建设相关的行业/微信crm系统软件
  • 上海小微企业名录查询/seo优化师