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,一经查实,立即删除!

相关文章

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

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

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

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

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;打…

业务模型与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; …

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

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

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

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

带虚继承的类对象模型

文章目录 1、代码2、 单个虚继承3、vbptr是什么4、虚继承的多继承 1、代码 #include<iostream> using namespace std;class Base { public:int ma; };class Derive1 :virtual public Base { public:int mb; };class Derive2 :public Base { public:int mc; };class Deri…

信号的产生、处理

一、信号的概念 信号是linux系统提供的一种&#xff0c;向指定进程发送特定事件的方式。收到信号的进程&#xff0c;要对信号做识别和处理。信号的产生是异步的&#xff0c;进程在工作过程中随时可能收到信号。 信号的种类分为以下这么多种&#xff08;用指令kill -l查看&…

如何在 Windows 10/11 上录制带有音频的屏幕 [3 种简单方法]

无论您是在上在线课程还是参加在线会议&#xff0c;您都可能需要在 Windows 10/11 上录制带有音频的屏幕。互联网上提供了多种可选方法。在这里&#xff0c;本博客收集了 3 种最简单的方法来指导您如何在 Windows 10/11 上使用音频进行屏幕录制。请继续阅读以探索&#xff01; …

卸载干净 IDEA(图文讲解)

目录 1、卸载 IDEA 程序 2、注册表清理 3、残留清理 1、卸载 IDEA 程序 点击屏幕左下角 Windows 图标 -> 设置-控制面板->intellij idea 勾选第一栏 Delete IntelliJ IDEA 2022.2 caches and local history&#xff0c;表示同时删除 IDEA 本地缓存以及历史。 Delete I…

STM32-笔记34-4G遥控灯

4G接线 一、项目需求 服务器通过4G模块远程遥控开关灯。 二、项目实现 复制项目文件夹38-wifi控制风扇项目 重命名为39-4G遥控点灯 打开项目文件 加载文件 main.c #include "sys.h" #include "delay.h" #include "led.h" #include "ua…

Frontend - 分页(针对 python / Django )

目录 一、同个文件内&#xff08;方式一&#xff09; 1. 前端 html 2. 定义分页界面 3. 获取分页数据 4.后端根据前端分页需求&#xff0c;整理分页数据 5.显示情况 6. JsonResponse 相关知识 二、不同文件内依旧有效&#xff08;方式二&#xff0c;更优化&#xff09;…

【快速实践】深度学习 -- 数据曲线平滑化

希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【深度学习从 0 到 1】谢谢你的支持&#xff01; 在观察数据结果时&#xff0c;我们通常希望获得整体趋…