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
英文地址,請注明出處:http://en.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) {// 基線條件…