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

在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选择UnsignedLength(信号字节长度)、Factor(数据精度)、MinimumMaximum根据表格来填。
注意: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…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...