Python脚本实现通过Vector VN1630A CAN盒子与ECU通信

1 安装 python-can 包

安装命令如下:

pip install python-can

安装完成后可用下面命令查看是否安装成功及版本。

pip show python-can
Name: python-can
Version: 4.4.2
Summary: Controller Area Network interface module for Python
Home-page: https://github.com/hardbyte/python-can
Author: python-can contributors
Author-email:
License: LGPL v3
Location: D:\python3\Lib\site-packages
Requires: packaging, pywin32, typing-extensions, wrapt
Required-by:

2 创建 Vector Hardware Application

Vector VN1630A 硬件如下图:
在这里插入图片描述




打开控制面板,找到Vector Hardware选项,点击进入配置界面。
在这里插入图片描述
当硬件设备VN 1630A未插入电脑时,
在这里插入图片描述
插入硬件设备插入时,
在这里插入图片描述

创建一个新的 Application.
在这里插入图片描述
在这里插入图片描述
输入Application Name,然后点击OK即可。例如 创建了一个名为 FctTool 的Application,包含两个CAN通道。

3 分配硬件设备通道给 Application

将 VN1630A 的 channel 1分配给 FctTool 的 CAN 1(下图因为已经分配过了,所以只显示 CAN 2),将 VN1630A 的 channel 2分配给 FctTool 的 CAN 2。
在这里插入图片描述
最终如下:
在这里插入图片描述

4 编程实现

完整代码如下:

import can
from can.interfaces.vector import VectorBusdef prase_can_msg(msg):message_str = str(msg)parts = message_str.split()# print("parts:", parts)try:err_frame = parts.index('E')# print("Error frame found at index:", err_frame)return None, None, Noneexcept Exception as e:# print("Error frame not found:", e)pass# 提取Timestamptimestamp = float(parts[1])# 提取IDmsg_id = int(parts[3].strip(), 16)# 提取DLC(数据长度)dlc_index = parts.index('DL:') + 1dlc = int(parts[dlc_index].strip())# 提取数据字段data_index = parts.index('DL:') + 2data1 = parts[data_index:data_index+dlc]data = [int(x, 16) for x in data1]# 提取Channelchannel_index = parts.index('Channel:') + 1channel = int(parts[channel_index].strip())hex_data = ' '.join('0x%02x' % i for i in data)print("Timestamp          channel   msg_id   dlc                   data")print(f"{timestamp:10.6f} {channel:5d} {msg_id:9X} {dlc:6d}     {hex_data}")return msg_id, dlc, datadef detect_device_exist():# 检测Vector 1603A设备是否存在device_exist = Falsetry:configs = can.detect_available_configs(interfaces=['vector'])for config in configs:if config['vector_channel_config'].name == 'VN1630A Channel 1':device_exist = Truebreakexcept Exception as e:print("Detect available configs Error:", e)app_exits = Falsetry:app_cfg = VectorBus.get_application_config(app_name='FctTool', app_channel=0)if app_cfg is not None:app_exits = Trueprint("app_cfg:", app_cfg)except can.interfaces.vector.exceptions.VectorInitializationError as e:print("Get application config Error:", e)if device_exist and app_exits:return True# 如果没有找到Vector 1603A设备,则返回Falsereturn Falsedef vector_init():if not detect_device_exist():print("Vector 1603A device not found.")return None# 创建CAN总线对象,指定Vector 1603A接口try:# app_name 要和控制面板 Vector Hardware里面配置的名字一致,这里的 channel 要配置为0, 对应实际的 CAN 1 通道bus = can.Bus(interface='vector', channel=0, bitrate=500000, app_name="FctTool")print("bus type:", type(bus))except Exception as e:print("Create CAN bus object Error:", e)try:return busexcept UnboundLocalError as e:print("Return CAN bus object Error:", e)print("Error: CAN bus channel is used by other application.")return Noneelse:print("Other error.")def vector_send_msg(bus, msg_id, message, dlc):# 发送CAN消息msg = can.Message(arbitration_id=msg_id, dlc=dlc, data=message, is_extended_id=False)bus.send(msg)def vector_recv_msg(bus):# 接收CAN消息msg = bus.recv(timeout=0.1)if msg is not None:# 解析CAN消息msg_id, dlc, data = prase_can_msg(msg)if msg_id is None:# print("Error frame received.")return False, None, None, Nonereturn True, msg_id, dlc, dataelse:return False, None, None, Nonedef vector_close(bus):# 关闭CAN总线bus.shutdown()if __name__ == '__main__':bus = vector_init()if bus is None:print("CAN bus initialized failed.")exit(1)print("CAN bus initialized successfully.")msg_id = 0x7F1dlc = 8message = [0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]vector_send_msg(bus, msg_id, message, dlc)have_msg, msg_id, dlc, data = vector_recv_msg(bus)if have_msg:print("Received message:")print(f"ID: 0x{msg_id:04X}")print(f"DL: {dlc}")print("Data: {data}".format(data=' '.join('0x%02x' % i for i in data)))vector_close(bus)

创建bus总线对象时需要注意下面这个点,
在这里插入图片描述

5 效果演示

Vector VN1630A插入电脑,另一端连接ECU,然后运行python脚本。

app_cfg: (<XL_HardwareType.XL_HWTYPE_VN1630: 57>, 0, 0)
bus type: <class 'can.interfaces.vector.canlib.VectorBus'>
CAN bus initialized successfully.
Timestamp          channel   msg_id   dlc                   data
1735904698.304546     0       7F2      8     0x1f 0x01 0x02 0x00 0x00 0x00 0x00 0x00
Received message:
ID: 0x07F2
DL: 8
Data: 0x1f 0x01 0x02 0x00 0x00 0x00 0x00 0x00

参考资料:https://python-can.readthedocs.io/en/stable/interfaces/vector.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/891672.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React虚拟DOM:理解和应用

写在前面 在现代前端开发中&#xff0c;React 是一个非常流行的 JavaScript 库&#xff0c;用于构建用户界面。它引入了一个名为“虚拟 DOM”&#xff08;Virtual DOM&#xff09;的概念&#xff0c;这个概念对于 React 的高效性能和易用性至关重要。本文将深入探讨 React Vir…

VSCode 插件全解析:解锁编码新维度

文章目录 前言一、插件的重要性二、插件分类三、创建自己的插件结语 前言 Visual Studio Code&#xff08;简称 VSCode&#xff09;是一款由微软开发的免费开源文本编辑器&#xff0c;支持多种编程语言和各种扩展插件。它以其轻量级、跨平台和强大的可定制性而闻名&#xff0c…

Oracle 创建本地用户,授予权限,创建表并插入数据

目录 一. 用户的种类二. 切换session为PDB三. 创建用户并授予权限四. 创建表空间五. 为用户分配默认表空间并指定表空间配额六. 通过创建的用户进行登录七. 创建脚本&#xff0c;简化登录八. 查看用户信息九. 创建表&#xff0c;并插入数据9.1 查看当前用户的schema9.2 插入数据…

普及组集训数据结构--并查集

P1551 亲戚 - 洛谷 | 计算机科学教育新生态 并查集就是把所有相关联的量串成一串珠子&#xff0c;抽象来说就是&#xff1a; 把此类相关联的量当作节点&#xff0c;两个节点之间连接一条无向边&#xff0c;所形成的图 例题算法流程&#xff1a; 在此定义“族长”就是一个树的…

pytorch张量高级索引介绍

PyTorch 中&#xff0c;张量索引操作可以使用高级索引&#xff08;advanced indexing&#xff09;&#xff0c;其中索引可以是另一个张量。使用这种索引方式时&#xff0c;返回值的维度由索引张量的形状和原始张量的形状共同决定。以下是具体的规则和解释&#xff1a; 1. 基本…

ESP32-S3遇见OpenAI:OpenAI官方发布ESP32嵌入式实时RTC SDK

目录 OpenAI RTC SDK简介应用场景详解智能家居控制系统个人健康助手教育玩具 技术亮点解析低功耗设计快速响应高精度RTC安全性保障开发者指南 最近&#xff0c;OpenAI官方发布了一款针对ESP32-S3的嵌入式实时RTC&#xff08;实时时钟&#xff09;SDK&#xff0c;这标志着ESP32-…

JS基础 -- 数组 (对象 / 数组 / 类数组 / 对象数组)的遍历

一、数组&#xff1a; 数组是复杂数据类型&#xff0c;用于存储一组有序的数据。 1、创建数组&#xff1a; ① 使用 new 关键字&#xff1a; let arr new Array() // 创建一个长度为0的空数组 let arrLength new Array(5) // 创建一个长度为5的空数组② 字面量形式&#…

【期末复习】一、操作系统概论

题型 选择题 论述题 综合分析题(计算,证明) 算法分析题(根据程序代码分析) 1.方面 操作系统在计算机系统中主要涉及硬件、软件和数据这三个重要方面。 2.操作系统发展历史 手工操作阶段(1940s) 联机批处理系统阶段(1950s) 脱机批处理系统阶段(1950s) 多道…

基于STM32F103的USART的原理及应用(一)(实现手机BLE和MCU进行通信)

一&#xff0c;查阅数据手册&#xff0c;找到对应的IO口和外设总线并配置好外设源文件 想了解USART的具体原理的小伙伴请进传送门&#xff1a;&#xff08;总结&#xff09;STM32中USART原理及应用&#xff08;PC、BLE、ESP8266通信实现&#xff09;-CSDN博客 二&#xff0c;打…

如何在Java开发中选择适合的高性能工具库?

如何在Java开发中选择适合的高性能工具库&#xff1f; 在 Java 开发中选择适合的高性能工具库需要综合考虑多个因素&#xff0c;以下是详细的步骤和要点&#xff1a; 一、明确项目需求 功能需求 首先要确定项目需要的功能。例如&#xff0c;如果主要是进行 JSON 数据处理&a…

2025 小模型技术:驱动低代码与物联网融合发展新引擎

在科技的前沿赛道上&#xff0c;我们满怀期待地迈向 2025 年。这一年&#xff0c;小模型技术宛如一颗璀璨的新星&#xff0c;将在低代码与物联网的浩瀚星空中闪耀出独特光芒&#xff0c;成为引领二者融合发展的强劲引擎&#xff0c;为各行业的数字化变革带来澎湃动力与无限可能…

业务模型与UI设计

业务数据模型的设计、UI设计这应该是程序设计中不可缺少的部分。做程序设计的前提应该先把这两块设计好&#xff0c;那么&#xff0c;来一个实际案例&#xff0c;看看这2块的内容。 汽车保养记录业务模型与UI设计&#xff1a; 一、【车辆清单】 记录车辆相关的数据&#xff0…

微服务保护—Sentinel快速入门+微服务整合 示例: 黑马商城

1.微服务保护 微服务保护是确保微服务架构可靠、稳定和安全的策略与技术。 在可靠性上&#xff0c;限流是控制进入微服务的请求数量&#xff0c;防止流量过大导致服务崩溃。比如电商促销时对商品详情服务进行流量限制。熔断是当被调用的微服务故障过多或响应过慢时&#xff0c;…

unity学习4:git和SVN的使用差别

目录 1 svn 1.1 操作逻辑 1.2 对应工具 1.3 SVN避免冲突的好习惯 2 git 2.1 git的基础操作逻辑 2.1.1 commit时&#xff0c;提交文件之外的其他文件需要pull 2.1.2 commit时&#xff0c;发现要提交的本地文件和服务器的文件冲突了 2.1.3 pull 时 2.2 对应工具 2.3 …

Docker新手:在tencent云上实现Python服务打包到容器

1 使用docker的原因 一致性和可移植性&#xff1a;Docker 容器可以在任何支持 Docker 的环境中运行&#xff0c;无论是开发者的笔记本电脑、测试服务器还是生产环境。这确保了应用在不同环境中的行为一致&#xff0c;减少了“在我的机器上可以运行”的问题。 隔离性&#xff…

阻抗(Impedance)、容抗(Capacitive Reactance)、感抗(Inductive Reactance)

阻抗&#xff08;Impedance&#xff09;、容抗&#xff08;Capacitive Reactance&#xff09;、感抗&#xff08;Inductive Reactance&#xff09; 都是交流电路中描述电流和电压之间关系的参数&#xff0c;但它们的含义、单位和作用不同。下面是它们的定义和区别&#xff1a; …

Ruby 数据类型

Ruby 数据类型 Ruby&#xff0c;作为一种动态、开放源代码的编程语言&#xff0c;以其简洁明了的语法和强大的功能而闻名。在Ruby中&#xff0c;数据类型是编程的核心组成部分&#xff0c;它们决定了变量可以存储的信息种类以及可以对这些信息执行的操作。Ruby是一种类型安全的…

入门网络安全工程师要学习哪些内容【2025年寒假最新学习计划】

&#x1f91f; 基于入门网络安全/黑客打造的&#xff1a;&#x1f449;黑客&网络安全入门&进阶学习资源包 大家都知道网络安全行业很火&#xff0c;这个行业因为国家政策趋势正在大力发展&#xff0c;大有可为!但很多人对网络安全工程师还是不了解&#xff0c;不知道网…

【2024年-5月-14日-开源社区openEuler实践记录】深度剖析 Cantian-Connector-Mysql:开源连接方案新势力

引言 在数据驱动的时代&#xff0c;数据库连接组件是众多应用程序与数据存储之间的关键桥梁。Cantian-Connector-Mysql 作为一款开源项目&#xff0c;正逐渐受到开发者群体的关注&#xff0c;下面我们将从技术亮点、应用场景、部署实操以及代码示例等维度对它展开全面解读。 …

智联视频超融合平台:电力行业的智能守护者

文章目录 一、远程实时监控与设备状态监测二、提高应急响应能力三、实现无人值守与减员增效四、保障电力设施安全与防范外部破坏五、提升电网运行管理效率与决策科学性六、助力电力企业数字化转型与智能化发展七、智联视频超融合平台 在当今数字化浪潮下&#xff0c;视频联网平…