水军大提督 发表于 2025-2-26 13:18:09

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

https://i-blog.csdnimg.cn/direct/028063fbc581418c96be1b7eb023cd4c.png
办理思绪:删除原有包重新安装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可执行文件检察当前接口数目。最后运行调用脚本,可正常使用。
https://i-blog.csdnimg.cn/direct/0097739b77df4d549b2b29063ab39cf8.pnghttps://i-blog.csdnimg.cn/direct/6537c83c29134d619afd49b53244f044.pnghttps://i-blog.csdnimg.cn/direct/8c3da98f8f414d2d80b2aa6efd3818f9.pnghttps://i-blog.csdnimg.cn/direct/5608b7db530e4a36b3a28be34f331da2.png
https://i-blog.csdnimg.cn/direct/209d78d8a8b74a01986bda8f63a5e66b.png
附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=, # 数据
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()


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: kvaser pythoncan 调用报错(x86 ubuntu工控机)