CANDB++中的CAN_DBC快速编辑方法,使用文本编辑器(如notepad++和VScode)

前言:

        在做工程机械CAN协议相关的软件开发与调试时,经常接触到DBC的使用,可以在CAN分析仪中加载DBC文件从而快速查看某条CAN报文或信号的含义,以及使用图形化的调试。

        而编辑DBC文件,正常是用CANDB++来一条条添加,比较费时费力。其实可以直接使用文本编辑器打开dbc文件,通过复制粘贴以及修改的方法快速添加报文和信号。

        很多文本编辑器都能打开dbc文件,但是比如记事本等是没有关键字高亮显示的功能的,因此最好是用notepad++和VScode,由于我本身就安装了VScode。所以我就用VScode来实现。

        VScode需要安装一个插件,在插件搜索栏中输入“DBC”,第一个就是DBC language Syntax,安装即可。实际使用发现能自动高亮,并且某些错误还能自动波浪线提醒。还比较好用。

        搜索了一下,目前网上的资料较少,还是自己测试整理后分享给大家吧。

一、创建一个基础的DBC文件。

        1)这里还是得用CANDB++,我直接用的1939模板。

        2)dbc文件中随意输入1个message和2个信号,并将信号挂在到message中

二、用文本编辑器修改

2.1 vscode打开保存的DBC文件:

        

VERSION ""NS_ : NS_DESC_CM_BA_DEF_BA_VAL_CAT_DEF_CAT_FILTERBA_DEF_DEF_EV_DATA_ENVVAR_DATA_SGTYPE_SGTYPE_VAL_BA_DEF_SGTYPE_BA_SGTYPE_SIG_TYPE_REF_VAL_TABLE_SIG_GROUP_SIG_VALTYPE_SIGTYPE_VALTYPE_BO_TX_BU_BA_DEF_REL_BA_REL_BA_DEF_DEF_REL_BU_SG_REL_BU_EV_REL_BU_BO_REL_SG_MUL_VAL_BS_:BU_:BO_ 2364539904 Engin_state: 8 Vector__XXXSG_ Engin_MA : 20|12@1+ (1,-2000) [-2000|63535] "mA" Vector__XXXSG_ Engin_RPM : 8|8@1+ (1,0) [0|0] "rpm" Vector__XXXBA_DEF_ BO_  "TpJ1939VarDlc" ENUM  "No","Yes";
BA_DEF_ SG_  "SigType" ENUM  "Default","Range","RangeSigned","ASCII","Discrete","Control","ReferencePGN","DTC","StringDelimiter","StringLength","StringLengthControl";
BA_DEF_ SG_  "GenSigEVName" STRING ;
BA_DEF_ SG_  "GenSigILSupport" ENUM  "No","Yes";
BA_DEF_ SG_  "GenSigSendType" ENUM  "Cyclic","OnWrite","OnWriteWithRepetition","OnChange","OnChangeWithRepetition","IfActive","IfActiveWithRepetition","NoSigSendType";
BA_DEF_ BO_  "GenMsgFastOnStart" INT 0 100000;
BA_DEF_ SG_  "GenSigInactiveValue" INT 0 0;
BA_DEF_ BO_  "GenMsgCycleTimeFast" INT 0 3600000;
BA_DEF_ BO_  "GenMsgNrOfRepetition" INT 0 1000000;
BA_DEF_ SG_  "GenSigStartValue" INT 0 2147483647;
BA_DEF_ BO_  "GenMsgDelayTime" INT 0 1000;
BA_DEF_ BO_  "GenMsgILSupport" ENUM  "No","Yes";
BA_DEF_ BO_  "GenMsgStartDelayTime" INT 0 100000;
BA_DEF_ BU_  "NodeLayerModules" STRING ;
BA_DEF_ BU_  "ECU" STRING ;
BA_DEF_ BU_  "NmJ1939SystemInstance" INT 0 15;
BA_DEF_ BU_  "NmJ1939System" INT 0 127;
BA_DEF_ BU_  "NmJ1939ManufacturerCode" INT 0 2047;
BA_DEF_ BU_  "NmJ1939IndustryGroup" INT 0 7;
BA_DEF_ BU_  "NmJ1939IdentityNumber" INT 0 2097151;
BA_DEF_ BU_  "NmJ1939FunctionInstance" INT 0 7;
BA_DEF_ BU_  "NmJ1939Function" INT 0 255;
BA_DEF_ BU_  "NmJ1939ECUInstance" INT 0 3;
BA_DEF_ BU_  "NmJ1939AAC" INT 0 1;
BA_DEF_ BU_  "NmStationAddress" INT 0 255;
BA_DEF_ BO_  "GenMsgSendType" ENUM  "cyclic","NotUsed","IfActive","NotUsed","NotUsed","NotUsed","NotUsed","NotUsed","noMsgSendType";
BA_DEF_ BO_  "GenMsgRequestable" INT 0 1;
BA_DEF_ BO_  "GenMsgCycleTime" INT 0 3600000;
BA_DEF_ SG_  "SPN" INT 0 524287;
BA_DEF_  "DBName" STRING ;
BA_DEF_  "BusType" STRING ;
BA_DEF_  "ProtocolType" STRING ;
BA_DEF_ BO_  "VFrameFormat" ENUM  "StandardCAN","ExtendedCAN","reserved","J1939PG";
BA_DEF_DEF_  "TpJ1939VarDlc" "No";
BA_DEF_DEF_  "SigType" "Default";
BA_DEF_DEF_  "GenSigEVName" "Env@Nodename_@Signame";
BA_DEF_DEF_  "GenSigILSupport" "Yes";
BA_DEF_DEF_  "GenSigSendType" "NoSigSendType";
BA_DEF_DEF_  "GenMsgFastOnStart" 0;
BA_DEF_DEF_  "GenSigInactiveValue" 0;
BA_DEF_DEF_  "GenMsgCycleTimeFast" 0;
BA_DEF_DEF_  "GenMsgNrOfRepetition" 0;
BA_DEF_DEF_  "GenSigStartValue" 0;
BA_DEF_DEF_  "GenMsgDelayTime" 0;
BA_DEF_DEF_  "GenMsgILSupport" "Yes";
BA_DEF_DEF_  "GenMsgStartDelayTime" 0;
BA_DEF_DEF_  "NodeLayerModules" "";
BA_DEF_DEF_  "ECU" "";
BA_DEF_DEF_  "NmJ1939SystemInstance" 0;
BA_DEF_DEF_  "NmJ1939System" 0;
BA_DEF_DEF_  "NmJ1939ManufacturerCode" 0;
BA_DEF_DEF_  "NmJ1939IndustryGroup" 0;
BA_DEF_DEF_  "NmJ1939IdentityNumber" 0;
BA_DEF_DEF_  "NmJ1939FunctionInstance" 0;
BA_DEF_DEF_  "NmJ1939Function" 0;
BA_DEF_DEF_  "NmJ1939ECUInstance" 0;
BA_DEF_DEF_  "NmJ1939AAC" 0;
BA_DEF_DEF_  "NmStationAddress" 254;
BA_DEF_DEF_  "GenMsgSendType" "noMsgSendType";
BA_DEF_DEF_  "GenMsgRequestable" 1;
BA_DEF_DEF_  "GenMsgCycleTime" 0;
BA_DEF_DEF_  "SPN" 0;
BA_DEF_DEF_  "DBName" "";
BA_DEF_DEF_  "BusType" "CAN";
BA_DEF_DEF_  "ProtocolType" "J1939";
BA_DEF_DEF_  "VFrameFormat" "J1939PG";
BA_ "DBName" "J1939";
BA_ "VFrameFormat" BO_ 2364539904 3;

2.2 其中可以找到跟ID相关的两行文本:

                BO_ 2364539904 Engin_state: 8 Vector__XXX

                 SG_ Engin_MA : 20|12@1+ (1,-2000) [-2000|63535] "mA" Vector__XXX

                 SG_ Engin_RPM : 8|8@1+ (1,0) [0|0] "rpm" Vector__XXX

                BA_ "VFrameFormat" BO_ 2364539904 3;//这行在最后

2.3 message报文格式说明

        注意:最后一行(BA_....)中的报文ID与BO_ 这一行的报文ID必须对应,即一个报文对应这两行。

message id的说明:

BO_ <MessageID> <MessageName>: <DLC> <SenderNode>
  • 参数说明
    • <MessageID>:消息 ID(10 进制或 16 进制,16 进制需加0x前缀)。
    • <MessageName>:消息名称(自定义,如 “Engine_Status”)。
    • <DLC>:数据长度(Data Length Code,0~8 字节,即 0~8)。
    • <SenderNode>:发送节点(需在NODE_中定义过,如 “ECU_Engine”)。

2.4 信号说明

               

SG_ <SignalName> : <StartBit>|<BitLength>@<ByteOrder><ValueType> (<Factor>,<Offset>) [<Min>|<Max>] "<Unit>" <ReceiverNode>

  • 参数说明
    1. <SignalName>:信号名称(如 “Engine_Speed”)。
    2. <StartBit>:起始位(消息数据域中的起始位置,0~63,从最低位 0 开始计数)。
    3. <BitLength>:位长度(信号占用的位数,1~64)。
    4. <ByteOrder>:字节序(0= 小端模式 Little-Endian,1= 大端模式 Big-Endian)。
    5. <ValueType>:数据类型(+= 无符号 unsigned,-= 有符号 signed)。
    6. <Factor>,<Offset>:缩放因子和偏移量(物理值 = 原始值 ×Factor + Offset)。
    7. <Min>|<Max>:物理值范围(可选,如0|8000表示 0~8000)。
    8. <Unit>:物理单位(可选,如 “rpm”“km/h”)。
    9. <ReceiverNode>:接收节点(多个节点用逗号分隔,如 “ECU_Display,Sensor_Brake”)。

2.5 按照这个格式添加新的报文ID和对应的信号

                例如:

                

.....BO_ 2364539904 Engin_state: 8 Vector__XXXSG_ Engin_MA : 20|12@1+ (1,-2000) [-2000|63535] "mA" Vector__XXXSG_ Engin_RPM : 8|8@1+ (1,0) [0|0] "rpm" Vector__XXX
BO_ 2364539903 QQ_state: 8 Vector__XXXSG_ QQ_MA : 20|12@1+ (1,-2000) [-2000|63535] "mA" Vector__XXXSG_ QQ_RPM : 8|8@1+ (1,0) [0|0] "rpm" Vector__XXX......BA_ "VFrameFormat" BO_ 2364539904 3;
BA_ "VFrameFormat" BO_ 2364539903 3;

                保存后用CANDB++打开效果:

                        

注意:

最后一行(BA_)最后的3表示报文格式,即行内VFrameFormat对应的枚举:搜索可以查到枚举定义:

BA_DEF_ BO_  "VFrameFormat" ENUM  "StandardCAN","ExtendedCAN","reserved","J1939PG";

因此,3就表示J1939PG,如果想添加其他格式的报文则需要修改这个,即标准帧为0,这个可以在candb++中添加对应类型的报文来验证:

三、添加注释

3.1 使用//

这种方法只能在编辑器中可以看到,确实可行,但需要注意这种方式做好的DBC文件,如果使用CANDB++再保存一下以后,注释内容会消失掉,因此不推荐

3.2 使用CM_

这种方法不如//直接,只能在所有的报文定义后面写,即BA_DEF_前面紧挨着。

而且只能内容必须与ID、signal、节点等一起。

而且填写的内容会出现在CANDB++的comment中

示例:

BO_ 2364539903 QQ_state: 8 Vector__XXXSG_ QQ_MA : 20|12@1+ (1,-2000) [-2000|63535] "mA" Vector__XXXSG_ QQ_RPM : 8|8@1+ (1,0) [0|0] "rpm" Vector__XXX//其他的报文定义CM_ BO_ 2565931047 "hhhh";//只能写在这里
BA_DEF_ BO_  "TpJ1939VarDlc" ENUM  "No","Yes";

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

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

相关文章

Tmux Xftp及Xshell的服务器使用方法

Tmux&#xff1a; Tmux是什么&#xff1a; 会话与进程&#xff1a; 命令行的典型使用方式是&#xff0c;打开一个终端窗口&#xff0c;在里面输入命令。用户与计算机的这种临时的交互&#xff0c;称为一次“会话”&#xff08;session&#xff09;。 会话的一个重要特点是&…

微服务远程调用完全透传实现:响应式与非响应式解决方案

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

Kotlin集合概述

Kotlin 的集合类同样由两个接口派生&#xff1a; Collection 和 Map&#xff0c; Collection 和 Map 是 Java 集合框架的根接口&#xff0c;这两个接口又包含了 一些子接口或实现类Kotlin 集合与 Java 集合不同&#xff0c; Java 集合都是可变集合一一开发者可以向集合中添加、…

Mysql核心框架知识

Mysql核心框架 本文旨在梳理和理解 MySQL 的一些核心知识点&#xff0c;并结合常见面试题进行思考和总结。这些内容主要来源于我的个人学习与理解。 1. 事务 概念 事务指的是满足 ACID 特性的一组操作&#xff0c;可以通过 Commit 提交一个事务&#xff0c;也可以使用 Rollback…

C# NX二次开发:字符串控件StringBlock讲解

大家好&#xff0c;今天介绍ug二次开发过程中的一个叫字符串的控件&#xff0c;这个控件在块UI编辑器中可以使用。 下面是这个控件中的一些属性和方法&#xff1a; 1、 protected internal StringBlock(); // // 摘要: // Returns or sets the WideValue.…

【datawhale组队学习】n8n TASK01

教程地址&#xff1a;https://github.com/datawhalechina/handy-n8n/ 文章目录n8n节点的类别local-pc-deployn8n n8n 意思是 nodemation&#xff0c;是 node 与 automation 的组合词&#xff0c;读作 n-eight-n。 n8n 是一个开源的、基于节点的自动化工具&#xff0c;官方站点…

海洋牧场项目融资新曙光:绿色金融赋能蓝色经济发展

在海洋经济蓬勃发展的时代浪潮中&#xff0c;海洋牧场作为新兴的海洋产业模式&#xff0c;承载着保障国家粮食安全、促进海洋生态保护与可持续利用的重要使命。然而&#xff0c;海洋牧场项目的建设是一项庞大而复杂的系统工程&#xff0c;从前期的基础设施搭建、种苗培育&#…

51c大模型~合集170

自己的原文哦~ https://blog.51cto.com/whaosoft/14132244 #4DNeX 一张图&#xff0c;开启四维时空&#xff1a;4DNeX让动态世界 「活」起来 仅凭一张照片&#xff0c;能否让行人继续行走、汽车继续飞驰、云朵继续流动&#xff0c;并让你从任意视角自由观赏&#…

深入剖析以太坊虚拟机(EVM):区块链世界的计算引擎

引言&#xff1a;EVM——区块链世界的"计算引擎" 以太坊虚拟机&#xff08;Ethereum Virtual Machine&#xff0c;EVM&#xff09;是以太坊网络的核心创新&#xff0c;它不仅仅是一个执行环境&#xff0c;更是整个区块链生态系统的"计算引擎"。作为智能合…

深入分析 Linux PCI Express 子系统

深入分析 Linux PCI Express 子系统 一、PCI Express 工作原理 PCIe 是一种高速串行点对点互连协议&#xff0c;采用分层架构&#xff1a; #mermaid-svg-rsh0SW87JPR0aUxA {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid…

MySQL 运算符详解:逻辑、位运算与正则表达式应用

MySQL 运算符详解&#xff1a;逻辑、位运算与正则表达式应用 在 MySQL 中&#xff0c;运算符是构建复杂查询条件的基础。除了基础的算术和比较运算符&#xff0c;逻辑运算符、位运算符以及正则表达式的灵活运用&#xff0c;能让数据筛选更加精准高效。本文将系统讲解这些运算符…

<数据集>遥感飞机识别数据集<目标检测>

数据集下载链接https://download.csdn.net/download/qq_53332949/91702190数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;3842张 标注数量(xml文件个数)&#xff1a;3842 标注数量(txt文件个数)&#xff1a;3842 标注类别数&#xff1a;20 标注类别名称&#xf…

Windows从零到一安装KingbaseES数据库及使用ksql工具连接全指南

目录Windows从零到一安装KingbaseES数据库及使用ksql工具连接全指南前言第一部分&#xff1a;安装前准备1.1 系统要求检查1.2 下载安装包1.3 验证安装包完整性第二部分&#xff1a;安装KingbaseES2.1 启动安装程序2.2 接受许可协议2.3 选择授权文件2.4 设置安装目录2.5 选择安装…

Git+Jenkins 基本使用

一、什么是 JenkinsJenkins 是一个功能强大的应用程序&#xff0c;允许持续集成和持续交付项目&#xff08;持续部署&#xff09;&#xff0c;无论用的是什么平台。这是一个免费的源代码&#xff0c;可以处理任何类型的构建或持续集成。集成 Jenkins 可以用于一些测试和部署技术…

Linux第十三讲:线程同步和互斥

Linux第十三讲&#xff1a;线程同步和互斥1.线程互斥1.1进程线程间的互斥背景概念1.2什么是锁1.2.1认识锁&#xff0c;理解锁2.线程同步2.1条件变量2.2生产和消费模型2.3基于阻塞队列(blockqueue)的生产消费模型2.3.1单生产&#xff0c;单消费的阻塞队列模拟实现2.3.2多生产&am…

SAP 简单的AMDP demo 练习使用

SAP AMDP&#xff08;ABAP Managed Database Procedure&#xff09;是SAP的一项先进技术&#xff0c;用于在SAP HANA数据库上执行高性能的数据库操作。它允许ABAP开发人员编写数据库过程&#xff0c;这些过程可以在数据库级别上执行&#xff0c;从而实现更快的数据处理和更高的…

Maven JAR Plugin 插件使用说明

Maven JAR Plugin 插件使用说明1 Maven JAR Plugin 插件地址2 Maven JAR Plugin 特点3 maven-assembly-plugin 的用法3.1 无依赖项 maven-jar-plugin 配置3.2 有依赖项 maven-jar-plugin 配置3.3 配合maven-dependency-plugin 将依赖复制到指定位置1 Maven JAR Plugin 插件地址…

QT+Yolov8 推理部署,ONNX模型 ,实例分割+目标检测

QTYolov8 实例分割、目标检测推理。QT源码。 程序准备/版本:QT creator QT6.8 编译器:MSVC2022 opencv:4.7 onnxruntime:1.16.0 cpu版本 QTyolo推理部署程序部分源码: #include "aitoolinterface.h" #include "ui_aitoolinterface.h" #include <QDebu…

【java实现一个接口多个实现类通用策略模式】

java实现同个接口多个实现类通用策略模式 项目业务中&#xff0c;有多个平台&#xff0c;多个平台直接有相同的业务&#xff0c;只有一个接口入口&#xff0c;但是 不同的平台入口&#xff0c;虽然接口相同&#xff0c;参数相同&#xff0c;但是各自的具体实现不同&#xff0c;…

leetcode-139. 单词拆分-C

暴力回溯回溯过程就是一个决策树模型&#xff0c;从所有选择中找到合适的继续&#xff0c;否则回到上一级继续。该方法思路简单&#xff0c;时间复杂度过高&#xff0c;大概1/4的用例超时。 bool backtrack(char *s, int cur, char** wordDict, int wordDictSize) {// 基线条件…