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

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

相关文章:

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

1 安装 python-can 包 安装命令如下&#xff1a; pip install python-can安装完成后可用下面命令查看是否安装成功及版本。 pip show python-canName: python-can Version: 4.4.2 Summary: Controller Area Network interface module for Python Home-page: https://github.…...

Spring实现Logback日志模板设置动态参数

版权说明&#xff1a; 本文由博主keep丶原创&#xff0c;转载请保留此块内容在文首。 原文地址&#xff1a; https://blog.csdn.net/qq_38688267/article/details/144842327 文章目录 背景设计日志格式实现配置动态取值logback-spring.xml 相关博客 背景 多个单体服务间存在少量…...

内部类 --- (寄生的哲学)

内部类总共有 4 种&#xff08;静态内部类、非静态内部类、局部内部类、匿名内部类&#xff09; 作用&#xff1a; 一&#xff1a;内部类提供了更好的封装&#xff0c;可以把内部类隐藏在外部类之内&#xff0c;不允许同一个包中的其他类访问该类。 二&#xff1a;内部类可以…...

Python深度学习GRU、LSTM 、BiLSTM-CNN神经网络空气质量指数AQI时间序列预测及机器学习分析|数据分享...

全文链接&#xff1a;https://tecdat.cn/?p38742 分析师&#xff1a;Zhixiong Weng 人们每时每刻都离不开氧&#xff0c;并通过吸入空气而获得氧。一个成年人每天需要吸入空气达6500升以获得足够的氧气&#xff0c;因此&#xff0c;被污染了的空气对人体健康有直接的影响&…...

JSP基础

一、Tomcat 1.Tomcat简介&#xff1a; Tomcat是一个免费的开源JSP容器&#xff0c;是Apache的Jakarta项目中的一个核心项目因免费、稳定而成为目前比较流行的Web应用服务器网址&#xff1a;https://tomcat.apache.org/ 2.Tomcat的配置——环境变量 &#xff08;1&#xff09…...

基于Springboot +Vue 在线考试管理系统

基于Springboot Vue 在线考试管理系统 前言 随着信息技术的飞速发展&#xff0c;教育领域正经历着深刻的变革。传统的考试模式因其诸多限制和不便&#xff0c;已难以满足现代教育的需求。基于SpringBoot和Vue框架开发的在线考试系统应运而生&#xff0c;它充分利用了现代互联…...

Node.js 函数

Node.js 函数 1. 概述 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,它允许开发者使用 JavaScript 编写服务器端和网络应用程序。在 Node.js 中,函数是一等公民,意味着它们可以作为变量传递,可以作为参数传递给其他函数,也可以从其他函数返回。本文将详细…...

JVM学习指南(9)-JVM运行时数据区

JVM学习指南(9)-JVM运行时数据区 引言 Java虚拟机(JVM)是Java程序运行的核心,它为Java程序提供了一个与平台无关的执行环境。JVM的重要性不仅在于它实现了Java的跨平台特性,还在于它对程序执行过程中内存的管理。JVM运行时数据区是程序执行过程中存储数据的关键区域,理解…...

2025/1/4期末复习 密码学 按老师指点大纲复习

我们都要坚信&#xff0c;道路越是曲折&#xff0c;前途越是光明。 --------------------------------------------------------------------------------------------------------------------------------- 现代密码学 第五版 杨波 第一章 引言 1.1三大主动攻击 1.中断…...

关于嵌入式系统的知识课堂(二)

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于嵌入式系统的知识课堂&#xff08;…...

基于ETAS工具的AutoConnect实现方案

文章目录 前言基于ISOLAR工具实现AutoConnect基于脚本实现AutoConnect总结前言 Autosar软件架构设计中,Connect通常来自于Composition之间(Assembly connectors),Component之间(Assembly connectors),Component与Composition之间(Delegation connectors),还有一种Pa…...

BGP基础配置实验

一、实验拓补 二、实验要求及分析 实验要求&#xff1a; 1&#xff0c;R1为AS 100区域&#xff1b;R2、R3、R4为AS 200区域且属于OSPF协议&#xff1b;R5为AS 300区域&#xff1b; 2&#xff0c;每个设备上都有环回&#xff0c;且通过环回可以使设备互通&#xff1b; 实验分…...

基于单片机的人体健康指标采集系统设计

1.系统的功能及方案设计 根据系统设计要求&#xff0c;人体健康指标采集系统的系统结构框图如图2.1所示。系统以单片机作为主控核心&#xff0c;协调控制各个模块进行工作。在传感器检测模块中包括MAX30102心率血氧检测模块、体温检测模块、液晶显示模块。系统以无创的形式实现…...

Go语言性能优化-字符串格式化优化

在 Go 语言中,格式化字符串(例如使用 fmt.Sprintf、fmt.Printf 等函数)确实可能对性能产生影响,尤其是当频繁执行格式化操作时。格式化字符串涉及对格式符的解析和数据类型的转换,这会增加额外的开销。为了减少格式化字符串带来的性能影响,可以采取以下一些优化策略: 1…...

UE5失真材质

渐变材质函数&#xff1a;RadialGradientExponential&#xff08;指数径向渐变&#xff09; 函数使用 UV 通道 0 来产生径向渐变&#xff0c;同时允许用户调整半径和中心点偏移。 用于控制渐变所在的位置及其涵盖 0-1 空间的程度。 基于 0-1 的渐变中心位置偏移。 源自中心的径…...

SAP 01-初识AMDP(ABAP-Managed Database Procedure)

1. 什么是AMDP(ABAP-Managed Database Procedure) 1.&#xff09;AMDP - ABAP管理数据库程序&#xff0c;是一种程序&#xff0c;我们可以使用SQLSCRIPT在AMDP内部编写代码&#xff0c;SQLSCRIPT是一种与SQL脚本相同的数据库语言&#xff0c;这种语言易于理解和编码。 将AM…...

关于视频审核,内容风控在“控”什么?

随着互联网用户每周上网时长的增加&#xff0c;内容偏好逐渐向视频形式转移&#xff0c;视频内容成为了企业竞争的新战场。然而&#xff0c;视频内容审核和风险控制成为了企业面临的重大挑战。那么在视频审核中&#xff0c;内容风控到底在“控”什么呢&#xff1f; 视频内容风…...

5G NTN(七) 高层(1)

说明&#xff1a;本专题主要基于3GPP协议38.821 目录 1. Idle态移动性增强 1.1 TA问题 1.1.1 TA的大小 1.1.2 针对NTN LEO的移动TA&#xff0c;场景C2和D2 1.1.3 针对NTN LEO的固定TA&#xff0c;场景C2和D2 1.1.3.1 方法1&#xff1a;当UE位置信息无法获取的时候 1.1.…...

专家混合(MoE)大语言模型:免费的嵌入模型新宠

专家混合&#xff08;MoE&#xff09;大语言模型&#xff1a;免费的嵌入模型新宠 今天&#xff0c;我们深入探讨一种备受瞩目的架构——专家混合&#xff08;Mixture-of-Experts&#xff0c;MoE&#xff09;大语言模型&#xff0c;它在嵌入模型领域展现出了独特的魅力。 一、M…...

《柴油遗产-无耻时代》V98375官方版

靠近你所在赛道上的另一名玩家进行攻击或防守&#xff0c;跳到另一条赛道上进行恢复&#xff0c;或闪到对手背后打他个措手不及。与队友合作&#xff0c;充分利用每个角色的独特玩法来控制战斗走向&#xff01; 《柴油遗产-无耻时代》官方版 https://pan.xunlei.com/s/VODW7xDX…...

AWPortrait-Z人像美化效果量化:PSNR/SSIM与主观评分相关性分析

AWPortrait-Z人像美化效果量化&#xff1a;PSNR/SSIM与主观评分相关性分析 1. 引言 当我们使用像AWPortrait-Z这样的人像美化工具时&#xff0c;一个核心问题总是萦绕心头&#xff1a;生成的人像到底有多好&#xff1f; 作为开发者&#xff0c;我们可能会说“效果很棒”、“…...

Vue 3 组合式 API 到底香在哪?

Vue 3 组合式 API 到底香在哪&#xff1f; 近年来&#xff0c;Vue 3 的组合式 API&#xff08;Composition API&#xff09;成为前端开发者的热门话题。相较于 Vue 2 的选项式 API&#xff0c;组合式 API 提供了更灵活、更高效的代码组织方式。那么&#xff0c;它究竟“香”在…...

终极指南:如何用G-Helper替代华硕Armoury Crate提升笔记本性能

终极指南&#xff1a;如何用G-Helper替代华硕Armoury Crate提升笔记本性能 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, S…...

手机号码定位终极指南:3分钟学会快速免费查询地理位置

手机号码定位终极指南&#xff1a;3分钟学会快速免费查询地理位置 【免费下载链接】location-to-phone-number This a project to search a location of a specified phone number, and locate the map to the phone number location. 项目地址: https://gitcode.com/gh_mirr…...

YOLO11入门实战:从cd命令到python train,完整流程解析

YOLO11入门实战&#xff1a;从cd命令到python train&#xff0c;完整流程解析 1. 前言&#xff1a;为什么选择YOLO11&#xff1f; 如果你对计算机视觉感兴趣&#xff0c;或者想快速上手一个强大的目标检测模型&#xff0c;YOLO11绝对是一个值得尝试的选择。它继承了YOLO系列速…...

Spring Integration 2.2.1 和 2.1.5 是 Spring Integration 框架的历史版本

Spring Integration 2.2.1 和 2.1.5 是 Spring Integration 框架的历史版本&#xff0c;分别于 2013 年初发布&#xff08;2.2.1 发布于 2013 年 2 月&#xff0c;2.1.5 发布于 2012 年 12 月&#xff09;&#xff0c;属于较早期的维护性补丁版本。它们主要包含&#xff1a; Bu…...

GME-Qwen2-VL-2B与数据结构优化:提升大规模图像特征检索效率

GME-Qwen2-VL-2B与数据结构优化&#xff1a;提升大规模图像特征检索效率 你有没有遇到过这种情况&#xff1f;手机里存了几千张照片&#xff0c;想找一张几年前拍的风景照&#xff0c;只记得大概的样子&#xff0c;却怎么也想不起名字&#xff0c;只能一张张手动翻找&#xff…...

GLM-4.7-Flash从部署到应用:完整实战案例,助你效率翻倍

GLM-4.7-Flash从部署到应用&#xff1a;完整实战案例&#xff0c;助你效率翻倍 1. 为什么选择GLM-4.7-Flash 在当今AI大模型百花齐放的时代&#xff0c;GLM-4.7-Flash凭借其独特的优势脱颖而出。作为智谱AI推出的最新一代大语言模型&#xff0c;它采用了创新的MoE&#xff08…...

算法学习第七天

1. 环形链表 II 总结链表与数组的适用场景差异&#xff0c;提交第一周学习小结 题意&#xff1a; 给定一个链表&#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 为了表示给定链表中的环&#xff0c;使用整数 pos…...

layui table数据表格分页 layui表格如何开启服务端分页

服务端分页必须删除data字段仅保留url&#xff0c;否则强制本地分页&#xff1b;需配置request参数名匹配后端&#xff08;如pageNum/pageSize&#xff09;&#xff1b;响应必须含count字段且code为0&#xff1b;建议设置limit和limits提升体验。服务端分页必须关掉 data&#…...