在can协议的基础下编写DBC文件,然后使用该DBC文件下发can协议到底盘完整流程
目录
- 前言
- 一、VectorCANdb++下载及安装
- 二、DBC文件的编写
- 1.新建dbc文件
- 2.建立dbc
- 2.1根据CAN协议设置以下的signals
- 2.2设置报文
- 2.3建立报文与信号的关系
- 2.4建立节点
- 三、编写程序使用UDP通信下发can协议
- 1.查看can口、电脑ip以及端口号
- 2.编写测试程序
前言
最近完成了一个项目,给了一个底盘,还有底盘的CAN协议,来写通底盘。CAN协议之前接触过,DBC文件是第一次接触,走了不少弯路,在此记录一下整个工作的完整流程。
一、VectorCANdb++下载及安装
参考链接:
CANdb++从安装到使用
WIN10下CANdb++编辑器的下载和安装
注意要在windows系统下安装
VectorCANdb++下载链接:https://www.vector.com/cn/zh/download/candb-31-sp3/
下载完了一直点击nex即可完成安装
二、DBC文件的编写
参考链接:
CAN db++(创建DBC文件)学习笔记
关于DBC文件的创建(DBC文件系列其一)
参考链接里面详细介绍了下面编写DBC文件过程中,每个参数的含义
首先给出一份CAN协议

1.新建dbc文件
点击File->Create Database
选择CANTemplate.dbc后点击OK
创建文件名
新建完成后出现

2.建立dbc
2.1根据CAN协议设置以下的signals
点击signals->new

Value Type选择Unsigned,Length(信号字节长度)、Factor(数据精度)、Minimum与Maximum根据表格来填。
注意:1.协议中给出的是十六进制数,而这边的最大值最小值范围是十进制数。2.协议中第2、3个字节没有定义数据,那么就默认为0,我们在这边也把这个signal定义一下








2.2设置报文


2.3建立报文与信号的关系
鼠标左键按住设置好的signals,拖动到EPS2上面,注意顺序要与文件中顺序一致
全都拖好了,双击EPS2,然后点击Layout,如下图所示,可以检查一下报文设置是否正确(图片上的字节顺序,从右至左,从上到下,依次增大)

2.4建立节点
1.建立发送和接受节点
右键点击Network nodes -> New



2.将需要发送的报文拖到目标节点下的Tx Messages下面
我上面的例子只编写了一条message,其他的message同理。下面图片中我一共编写了四条message,就不一一展示了。

3.设置需要接受的报文
双击打开Receive,选择Mapped Rx Sig.,然后选择Add:all from one message

选择需要接收的报文,点击ok

4.检查节点间的收发关系



5.can网络自动检查


没有错误,至此,DBC文件编写成功
我们可以右键编好的文件,使用文本打开,查看DBC文件的解析。
DBC文件的解析的参考链接:
DBC文件学习
汽车行业DBC文件解析 | Python 解析dbc文件
三、编写程序使用UDP通信下发can协议
参考链接:ubuntu下使用python进行简单的UDP通信
1.查看can口、电脑ip以及端口号
查看can盒底部默认ip为192.168.4.101,下面修改本机ip在同一网段下

接着安装wireshark
sudo apt install wireshark
然后打开wireshark
sudo wireshark

显示网络已经通了,而且得到了
CAN盒ip:192.168.4.101,端口号:6666
本机ip:192.168.4.100,端口号:8882
2.编写测试程序
编写了一段程序用来测试UDP通讯,注意修改ip与端口号
下面的程序使用了cantools库,首先安装一下这个库pip3 install cantools,使用python3运行该程序(python3 xxx.py)
# -*- coding:UTF-8 -*-
import socket
import cantools
from binascii import hexlifydef main():# 1. 创建socket套接字udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # AF_INET表示使用ipv4,默认不变,SOCK_DGRAM表示使用UDP通信协议# 2. 绑定端口portlocal_addr = ("192.168.4.100", 8882) # 本地ip,指定端口号7878udp_socket.bind(local_addr) # 绑定端口# 3. 加载dbc文件db = cantools.database.load_file('/home/smart_car/DBC_File/text.dbc')# example_message = db.get_message_by_name('VCU')# 4. 接受UDP数据包并解析CAN信号值# recv_data = udp_socket.recvfrom(1024) # 定义单次最大接收字节数# recv_msg = recv_data[0] # 接收的元组形式的数据有两个元素,第一个为发送信息# send_addr = recv_data[1] # 元组第二个元素为发信息方的ip以及port# print(recv_msg)# can_data = db.decode_message(example_message.frame_id, recv_msg) # 解析CAN信号值# print(can_data)# 5. 输入CAN信号的名称和值,并发送CAN数据包# (控制方向盘转到100°,转速100)的指令:08 00 00 04 69 20 00 00 04 64 00 64 24data_1 = { 'Work_mode': 32,'Stay0': 0, 'Stay1': 0, 'Steer_Angle_H': 4, 'Steer_Angle_L': 100, 'Angle_alignment': 0, 'Angular_velocity': 100, 'Check': 36}while True :# (控制方向盘转到100°,转速100)的指令:08 00 00 04 69 20 00 00 04 64 00 64 24message_move = db.encode_message("EPS2", data_1)message_2 = bytes([0x08, 0x00, 0x00,0x04, 0x69])message_3 = message_2 + message_move# print(hexlify(message).decode('ascii'))# print(message)udp_socket.sendto(message_3, ("192.168.4.101", 6666))if __name__ == "__main__":main()
解释说明
1.程序作用
上面的程序一部分是接受底盘CAN协议并且利用DBC文件解码;另一部分是编写一条指令,然后利用DBC文件编码,然后用UDP发送给底盘
2.两行代码解释
message_2 = bytes([0x08, 0x00, 0x00,0x04, 0x69])
message_3 = message_2 + message_move
加这个的原因是,一个标准的CAN协议包含帧信息、帧ID和帧信息,而利用db.encode_message()函数进行DBC编码的时候,只编码了最后八个字节的帧数据,所以将第一到五个字节的信息手动添加进去(前五个字节的信息是固定的)。

相关文章:
在can协议的基础下编写DBC文件,然后使用该DBC文件下发can协议到底盘完整流程
目录 前言一、VectorCANdb下载及安装二、DBC文件的编写1.新建dbc文件2.建立dbc2.1根据CAN协议设置以下的signals2.2设置报文2.3建立报文与信号的关系2.4建立节点 三、编写程序使用UDP通信下发can协议1.查看can口、电脑ip以及端口号2.编写测试程序 前言 最近完成了一个项目&…...
工业传感器有哪些?
工业传感器是指能在工业制造过程能将感受的力、热、光、磁、声、湿、电、环境等被测量转换成电信号输出的器件与装置,在各种化工、机械、汽车等工业场景上都有应用。 工业传感器有哪些? 工业传感器由于不同的特性也被分为多种不同的类别,主要…...
Docker应用部署之Nginx
部署nginx 要求:在docker容器中部署nginx,并通过外部机器访问nginx 步骤: 1.搜索nginx镜像 docker search nginx 2.拉取nginx镜像 docker pull nginx 3.创建容器 #在root目录下创建nginx目录用于存放nginx项目 mkdir ~/nginx cd ~/ng…...
TerminalWorks TSPrint/TSScan/TSWebCam Crack
/ 远程桌面打印软件,TerminalWorks TSPrint Server/Client 从远程服务器打印到本地打印机的 简单方法 TSPrint 为您提供了一个简单的远程桌面打印软件,以及使 Windows 终端服务操作更容易的附加工具。有选择地启用或禁用功能,以便您可以完全…...
如何使用Springboot实现文件上传和下载,并为其添加实时进度条的功能
文件上传和下载是Web开发中非常基础的功能,但在实际开发中,我们经常需要实时显示文件上传或下载的进度。这篇文章将介绍如何使用Springboot实现文件上传和下载,并为其添加实时进度条的功能。 文件上传 添加Maven依赖项 首先,我…...
安装并新建windows下wxwroks7.0 bootrom工程
双击steup.exe 直接next 直接next 选择typical,然后next I accept 安装完成finish 现在双击Workbench 4,新建vxworks7.0工程,会出现下面的情况,因为没有licence 安装licence,将zwrsLicense-vx7-perm.lic粘贴到安装目…...
element-ui表格el-table的使用
先给大家展示一下效果 Table 属性 属性名说明类型可选值默认值data显示的数据array——heightTable 的高度, 默认为自动高度。 如果 height 为 number 类型,单位 px;如果 height 为 string 类型,则这个高度会设置为 Table 的 sty…...
Backtrader官方中文文档:第八章Indicators指标
本文档参考backtrader官方文档,是官方文档的完整中文翻译,可作为backtrader中文教程、backtrader中文参考手册、backtrader中文开发手册、backtrader入门资料使用。 Indicators指标章节目录 指标(Indicator)指标的使用__init__ 对比 next指标在`__init__`阶段的执行过程指标在…...
CAP原则
CAP原则又称CAP定理,指的是在一个分布式系统中,存在Consistency(一致性)、Availability(可用性)、Partition tolerance(分区容错性),三者不可同时保证,最多只…...
【PowerQuery】M语言的使用产品和使用场景
当然PowerQuery的M语言应用场景不只是引用在PowerBI和Excel中,它具有广泛的应用场景。目前我们可以在以下产品的使用场景中应用到M语言。 Excel PowerQuery应用Excel通过M语言可以实现整体数据的清洗和重构。 PowerBI 的PowerQuery应用 PowerBI也是通过M语言来实现数据…...
【Linux】遇事不决,可先点灯,LED驱动的进化之路---1
【Linux】遇事不决,可先点灯,LED驱动的进化之路---1 前言: 一、最简单的LED驱动程序 1.1 字符设备驱动程序框架 1.2 程序实战 1.2.1 驱动程序(led_drive_simple.c) 1.2.2 应用程序(led_test_simple.c…...
hive任务reduce步骤卡在99%原因及解决
我们在写sql的时候经常发现读取数据不多,但是代码运行时间异常长的情况,这通常是发生了数据倾斜现象。数据倾斜现象本质上是因为数据中的key分布不均匀,大量的数据集中到了一台或者几台机器上计算,这些数据的计算速度远远低于平均…...
C++11 -- lambda表达式
文章目录 lamaba表达式的引入lambda表达式语法lamabda达式各部分说明捕获列表说明 lamaba表达式底层原理探索 lamaba表达式的引入 在C11之前,如果我们想对自定义类型Goods排序,可以根据姓名,价格,学号按照从大到小或者从小到大的方式排序,可是,这样我们要写额外写6个相关的仿函…...
【开源项目】银行查询服务的设计和实现
银行查询服务的设计和实现 项目地址github:https://github.com/xl-echo/bankInquiryService项目地址gitee:https://gitee.com/xl-echo/bank-inquiry-service 银行查询服务的设计初衷是:为提供更加便利的查询服务,我们在分布式系…...
Linux服务器禁止密码登录,设置秘钥登录
生成SSH密钥 (客户机端) 执行ssh-keygen -t rsa命令创建RSA密钥对,执行结果如下(键入3次回车): [rootnode01 .ssh]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): [回车] En…...
第十八章 开发Productions - ObjectScript Productions - 通过引用或作为输出传递值
文章目录 第十八章 开发Productions - ObjectScript Productions - 通过引用或作为输出传递值典型的回调方法典型的辅助方法 第十八章 开发Productions - ObjectScript Productions - 通过引用或作为输出传递值典型的回调方法典型的辅助方法 第十八章 开发Productions - Object…...
【云原生|Kubernetes】07-Pod健康检查和服务可用性检查
【云原生|Kubernetes】07-Pod健康检查和服务可用性检查 文章目录 【云原生|Kubernetes】07-Pod健康检查和服务可用性检查前言Pod探针Liveness(Pod存活探针)Readiness(Pod服务就绪探针)Startup(启动探针) 定义Liveness存活探针EXec探针HTTP探针TCP探针gRPC探针使用命名端口 定义…...
jeecgboot使用的问题记录
最近使用jeecgboot些项目,总结使用过程中的问题。 form表单 1.下拉框 — 使用字典方式 {label: 工单状态,field: orderStatus,component: JDictSelectTag,componentProps: {dictCode: emergency_order_status,}, } 2.下拉框—使用接口获取数据方式 配置项 { l…...
【C++】数组 - 一维数组,二维数组
文章目录 1. 一维数组1.1 一维数组定义方式1.2 数组名1.3 冒泡排序 2. 二维数组2.1 二维数组定义方式2.2 数组名 所谓数组,就是一个集合,里边存放了相同类型的数据元素。 特点1:数组中的每个数据元素都是相同的数据类型 特点2:数…...
前端:使用rollup的简单记录
目录 rollup安装 简单使用 1、命令行打包 2、配置文件打包 问题 1、报错提示:(node:23744) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.(Use node --trace-warnings ... to sho…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...
热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁
赛门铁克威胁猎手团队最新报告披露,数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据,严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能,但SEMR…...
Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解
文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一:HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二:Floyd 快慢指针法(…...
【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)
旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据!该数据集源自2025年4月发表于《地理学报》的论文成果…...
何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡
何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践,很多人以为AI已经强大到不需要程序员了,其实不是,AI更加需要程序员,普通人…...
