手把手DBC文件编写教程

嵌入式ARM 2023-03-15 12:00

CAN在嵌入式领域是非常重要的一种总线通讯方式,基于CAN有着各种各样的协议。在实际调试的时候,如果没有开发好上位机,那么工程师只能看着总线上的大量报文傻眼。有时候是不是希望这些报文都能被解释成文字类信息,变更超级直观?所以,这类脑洞应用就被做出来了,那就是DBC文件。


DBC全称是Database CAN,大家可以理解为DBC文件就是工程师提前把CAN的协议内容设定好,然后加载到CAN上位机,上位机就会根据DBC文件将裸报文解析成对应的文字描述。DBC文件内容构成是按照一定的编码规则的,理论上你拿着TXT就能写,但这duck不必。


现在比较知名的编写DBC的工具就是Vector公司出品的CANdb++,下载地址详见另一篇文章《让嵌入式工程师欲罢不能的10个小网站(软件篇)》,本篇将会手把手详细介绍如何使用CANdb++编写一个DBC文件。

1、范例帧ID

如图是我们这次练手用的帧ID,主要的目的是让大家知道如何在一个帧ID,通过某个字节的内容,可进一步的拆分子项。这个报文的目的就是根据Byte0的内容不同,后面的字节将代表不同含义。当BYTE0为0是,则后面的字节信息都是代表电压的类型和相关信息;为1时则为电流类信息。

2、创建DBC工程

打开CANdb++,点击菜单栏的File->Create Database。这个时候会出现一张database类型表,我们这里选择CANTemplate.dbc即可,然后你就完成了一个DBC文件的初步创建。

在侧边栏里有ECUs/Network nodes/Messages/signals,其中前两项暂不关注,主要集中在Message和Signal中,初步的解释一下Message就是报文,在这里面编辑报文内容的;Signal就可以理解为要用到各个变量,例如看目标帧ID中的电压值、控制指令啥的都算是signal,会在此处添加并编辑。

3、创建报文信息

在Message中右击鼠标,点击new即可添加一条新报文。如下图所示,我们创建了一条标准帧CAN报文,帧ID为0x123,报文长度为8,并且命名为DEMO(注意:命名只能使用英文,汉字会报错)

如果对报文内容有更多的说明,可以在Comment中添加更多描述,这里支持中文,所以可以尽情编写。

4、创建信号变量

如上面所得,信号就是这条报文中涉及到的信息变量。此处将示范创建信息类型信号,首先直接在signal中点击new,创建一个信号。

如图所示界面,首先给这个信号命名MSG_TYPE,然后这个信号使用的bit数为8。

byte oder中有intel型(小端模式)与Motorola型(大端模式),根据实际需求自行选择,本范例选择Intel型。

Unit中填写单位,这里是文本,根据实际情况填写就好,没有单位的话空着就行。

Value Type是有符号还是无符号自行选取。

Factor和Offset的作用就是把裸数据处理成显示数据,公式的话是显示数据=Factor*裸数据+offset,没有应用需求的话空着就好。Value Table的关联后面会讲到,其作用就是解释数值,类似于型号类型中0数值代表这是电压类,1代表这是电流类,而这个数值解释则需要人为设定后完成再在信号这里完成关联即可。这样一来,这条信号中的数值则会解析为对应目标文本。如果这个信号仅仅是数值类,不需要解析,那无需关联value table。

5、创建Value Table

点击View->Value Tables,即可打开数值表界面,右键单击new即可添加一条描述,给完成给命名后主要选择后面的数值描述,在数值描述中点击添加,则会按照0/1/2/3……的顺序添加,然后点击各个数值后面的描述,标注各个值的含义即可。

如图所示,0代表电压类信息,1代表电流类信息,2代表控制类信息。完成编辑后信号就可以选择创建的Value Table了。

6、完善报文信息

依葫芦画瓢完成全部变量的定义后,就需要把这个变量塞进报文里面了。可以双击已建立的报文,然后再signal中选择添加,将所有创建的信号一股脑都完成添加。这个时候发现添加进去的信号前面有警告标识,报文只有8个字节数据数据域,在还没分组的时候它认为塞进来的信号已经超出了承载范围了,所以下一步是分类报文

我们都知道,所有的报文是根据byte0的不同内容进行分类的,所以我们需要在message界面中双击添加的MSG_TYPE信号,则会出现配置界面,在Multiplexortype中将其选为Multiplexor Signal,这样就确定了这个字节将作为后续分组的依据(注意:每个Message只能有一个Multiplexor Signal类型信号)。

子分组的信号则将信号类型选择为Multiplexed Signal,不同的是会多一个Multiplex Value,意思就是要分到哪一组中,例如电压类则为0,电流类则为1,控制类则为2。

完成分组后可能还存在告警,是因为当时信号是一股脑塞进来,可能存在字节位定义重叠问题。所以,我们还需要进一步规整数据域内容。

双击创建的DEMO,在打开的界面的中选择layout,则可以看到当前数据域报文的BYTE位配置情况,因为上面已经完成了分组,所以依次将各个分组内的数据顺序排列好即可。这样我们的一条报文就创建完毕了。

7、效果查看

本例选用ZCANPRO来解析DBC文件,选用报文发送,选择DBC发送,然后再选择我们设定好的DBC文件即可完成解析。这样以后的报文收发就可以如下图所示的操作了,远比手动组帧和看裸报文解析便捷直观。

8、源码展示

下面是DBC的格式描述,大家可以保存到txt文件中,再将后缀修改为dbc,然后导入到上位机中查看效果。感兴趣的朋友们,还是亲自试一遍这个过程吧!

VERSION ""


NS_ :
NS_DESC_
CM_
BA_DEF_
BA_
VAL_
CAT_DEF_
CAT_
FILTER
BA_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_:
VAL_TABLE_ MSG_TYPE 2 "控制类" 1 "电流类" 0 "电压类" ;
VAL_TABLE_ CTRL_CMD_TYPE 1 "开启" 0 "关闭" ;
VAL_TABLE_ CTRL_DEF 2 "预充继电器" 1 "负极继电器" 0 "正极继电器" ;
VAL_TABLE_ Cur_Val_Def 1 "输出电流" 0 "输入电流" ;
VAL_TABLE_ Vol_Val_Def 2 "逆变器电压" 1 "电网电压" 0 "电池电压" ;


BO_ 291 DEMO: 4 Vector__XXX
SG_ DEMO_VOL_CALSS m0 : 8|8@1+ (1,0) [0|0] "" Vector__XXX
SG_ DEMO_CUR_CLASS m1 : 8|8@1- (1,0) [0|0] "" Vector__XXX
SG_ DEMO_CTRL_CLASS m2 : 8|8@1+ (1,0) [0|0] "" Vector__XXX
SG_ MSG_TYPE M : 0|8@1+ (1,0) [0|0] "" Vector__XXX
SG_ VOL_VAL m0 : 16|16@1+ (1,0) [0|0] "V" Vector__XXX
SG_ CUR_VAL m1 : 16|16@1- (1,0) [0|0] "A" Vector__XXX
SG_ CTRL_CMD m2 : 16|8@1+ (1,0) [0|0] "" Vector__XXX



CM_ BO_ 291 "范例DEMO";
CM_ SG_ 291 DEMO_VOL_CALSS "电压类信息类型";
CM_ SG_ 291 DEMO_CUR_CLASS "电流类信息类型";
CM_ SG_ 291 DEMO_CTRL_CLASS "控制类信息类型";
CM_ SG_ 291 MSG_TYPE "信息类型";
BA_DEF_ "MultiplexExtEnabled" ENUM "No","Yes";
BA_DEF_ "BusType" STRING ;
BA_DEF_DEF_ "MultiplexExtEnabled" "No";
BA_DEF_DEF_ "BusType" "CAN";
VAL_ 291 DEMO_VOL_CALSS 2 "逆变器电压" 1 "电网电压" 0 "电池电压" ;
VAL_ 291 DEMO_CUR_CLASS 1 "输出电流" 0 "输入电流" ;
VAL_ 291 DEMO_CTRL_CLASS 2 "预充继电器" 1 "负极继电器" 0 "正极继电器" ;
VAL_ 291 MSG_TYPE 2 "控制类" 1 "电流类" 0 "电压类" ;
VAL_ 291 CTRL_CMD 1 "开启" 0 "关闭" ;

END

来源:嵌入式BugMaker

版权归原作者所有,如有侵权,请联系删除。

推荐阅读
世界上最完美的两个软件,太厉害了!
让嵌入式工程师欲罢不能的7个小网站(资源篇)
ChatGPT实现51、STM32、树莓派等各种点灯程序

→点关注,不迷路←

嵌入式ARM 关注这个时代最火的嵌入式ARM,你想知道的都在这里。
评论 (0)
  •   电磁数据管理系统深度解析   北京华盛恒辉电磁数据管理系统作为专业的数据处理平台,旨在提升电磁数据的处理效率、安全性与可靠性。以下从功能架构、核心特性、应用场景及技术实现展开分析:   应用案例   目前,已有多个电磁数据管理系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润电磁数据管理系统。这些成功案例为电磁数据管理系统的推广和应用提供了有力支持。   一、核心功能模块   数据采集与接入:实时接收天线、频谱仪等设备数据,兼容多协议接口,确保数据采集的全面性与实时性
    华盛恒辉l58ll334744 2025-05-13 10:59 273浏览
  • 在当下竞争激烈的 AI 赛道,企业高层的变动往往牵一发而动全身,零一万物近来就深陷这样的动荡漩涡。近日,零一万物联合创始人、技术副总裁戴宗宏离职创业的消息不胫而走。这位在大模型基础设施领域造诣颇深的专家,此前在华为云、阿里达摩院积累了深厚经验,在零一万物时更是带领团队短期内完成了千卡 GPU 集群等关键设施搭建,其离去无疑是重大损失。而这并非个例,自 2024 年下半年以来,李先刚、黄文灏、潘欣、曹大鹏等一众联创和早期核心成员纷纷出走。
    用户1742991715177 2025-05-13 21:24 111浏览
  • 在 AI 浪潮席卷下,厨电行业正经历着深刻变革。AWE 2025期间,万得厨对外首次发布了wan AiOS 1.0组织体超智能系统——通过AI技术能够帮助全球家庭实现从健康检测、膳食推荐,到食材即时配送,再到一步烹饪、营养总结的个性化健康膳食管理。这一创新之举并非偶然的个案,而是整个厨电行业大步迈向智能化、数字化转型浪潮的一个关键注脚,折射出全行业对 AI 赋能的热切渴求。前有标兵后有追兵,万得厨面临着高昂的研发成本与技术迭代压力,稍有懈怠便可能被后来者赶
    用户1742991715177 2025-05-11 22:44 180浏览
  • 在全球供应链紧张和国产替代需求推动下,国产存储芯片产业快速发展,形成设计到封测一体化的完整生态。北京君正、兆易创新、紫光国芯、东芯股份、普冉股份和佰维存储等六大上市公司在NOR/NAND Flash、DRAM、嵌入式存储等领域布局各具特色,推动国产替代提速。贞光科技代理的品牌紫光国芯,专注DRAM技术,覆盖嵌入式存储与模组解决方案,为多领域客户提供高可靠性产品。随着AI、5G等新兴应用兴起,国产存储厂商有望迎来新一轮增长。存储芯片分类与应用易失性与非易失性存储芯片易失性存储芯片(Volatile
    贞光科技 2025-05-12 16:05 208浏览
  •   电磁数据展示系统平台解析   北京华盛恒辉电磁数据展示系统平台是实现电磁数据高效展示、分析与管理的综合性软件体系,以下从核心功能、技术特性、应用场景及发展趋势展开解读:   应用案例   目前,已有多个电磁数据展示系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润电磁数据展示系统。这些成功案例为电磁数据展示系统的推广和应用提供了有力支持。   一、核心功能模块   数据采集与预处理   智能分析处理   集成频谱分析、时频变换等信号处理算法,自动提取时域频域特征;
    华盛恒辉l58ll334744 2025-05-13 10:20 365浏览
  •   舰艇电磁兼容分析与整改系统平台解析   北京华盛恒辉舰艇电磁兼容分析与整改系统平台是保障海军装备作战效能的关键技术,旨在确保舰艇电子设备在复杂电磁环境中协同运行。本文从架构、技术、流程、价值及趋势五个维度展开解析。   应用案例   目前,已有多个舰艇电磁兼容分析与整改系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润舰艇电磁兼容分析与整改系统。这些成功案例为舰艇电磁兼容分析与整改系统的推广和应用提供了有力支持。   一、系统架构:模块化智能体系   电磁环境建模:基
    华盛恒辉l58ll334744 2025-05-14 11:22 52浏览
  • 【拆解】+CamFi卡菲单反无线传输器拆解 对于单反爱好者,想要通过远程控制自拍怎么办呢。一个远程连接,远程控制相机拍摄的工具再合适不过了。今天给大伙介绍的是CamFi卡菲单反无线传输器。 CamFi 是专为数码单反相机打造的无线传输控制器,自带的 WiFi 功能(无需手机流量),不但可通过手机、平板、电脑等设备远程连接操作单反相机进行拍摄,而且还可实时传输相机拍摄的照片到 iPad 和电视等大屏设备进行查看和分享。 CamFi 支持大部分佳能和尼康单反相机,内置可充电锂离子电池,无需相机供电。
    zhusx123 2025-05-11 14:14 416浏览
  • ‌磁光克尔效应(Magneto-Optic Kerr Effect, MOKE)‌ 是指当线偏振光入射到磁性材料表面并反射后,其偏振状态(偏振面旋转角度和椭偏率)因材料的磁化强度或方向发生改变的现象。具体表现为:1、‌偏振面旋转‌:反射光的偏振方向相对于入射光发生偏转(克尔旋转角 θK)。2、‌椭偏率变化‌:反射光由线偏振变为椭圆偏振(克尔椭偏率 εK)。这一效应直接关联材料的磁化状态,是表征磁性材料(如铁磁体、反铁磁体)磁学性质的重要非接触式光学探测手段,广泛用于
    锦正茂科技 2025-05-12 11:02 300浏览
  • 感谢面包板论坛组织的本次测评活动,本次测评的对象是STM32WL Nucleo-64板 (NUCLEO-WL55JC) ,该测试板专为LoRa™应用原型构建,基于STM32WL系列sub-GHz无线微控制器。其性能、功耗及特性组合经过精心挑选,支持通过Arduino® Uno V3连接,并利用ST morpho接头扩展STM32WL Nucleo功能,便于访问多种专用屏蔽。STM32WL Nucleo-64板集成STLINK-V3E调试器与编程器,无需额外探测器。该板配备全面的STM
    无言的朝圣 2025-05-13 09:47 158浏览
  • 文/Leon编辑/cc孙聪颖‍2025年1月至今,AI领域最出圈的除了DeepSeek,就是号称首个“通用AI Agent”(智能体)的Manus了,其邀请码一度被炒到8万元。很快,通用Agent就成为互联网大厂、AI独角兽们的新方向,迅速地“卷”了起来。国外市场,Open AI、Claude、微软等迅速推出Agent产品或构建平台,国内企业也在4月迅速跟进。4月,字节跳动、阿里巴巴、百度纷纷入局通用Agent市场,主打复杂的多任务、工作流功能,并对个人用户免费。腾讯则迅速更新腾讯元器的API接
    华尔街科技眼 2025-05-12 22:29 148浏览
  •   定制软件开发公司推荐清单   在企业数字化转型加速的2025年,定制软件开发需求愈发多元复杂。不同行业、技术偏好与服务模式的企业,对开发公司的要求大相径庭。以下从技术赛道、服务模式及行业场景出发,为您提供适配的定制软件开发公司推荐及选择建议。   华盛恒辉科技有限公司:是一家专注于高端软件定制开发服务和高端建设的服务机构,致力于为企业提供全面、系统的开发制作方案。在部队政企开发、建设到运营推广领域拥有丰富经验,在教育,工业,医疗,APP,管理,商城,人工智能,部队软件、工业软件、数字化转
    华盛恒辉l58ll334744 2025-05-12 15:55 334浏览
  • 在印度与巴基斯坦的军事对峙情境下,歼10C的出色表现如同一颗投入平静湖面的巨石,激起层层涟漪,深刻印证了“质量大于数量”这一铁律。军事领域,技术优势就是决定胜负的关键钥匙。歼10C凭借先进的航电系统、强大的武器挂载能力以及卓越的机动性能,在战场上大放异彩。它能够精准捕捉目标,迅速发动攻击,以一敌多却毫不逊色。与之形成鲜明对比的是,单纯依靠数量堆砌的军事力量,在面对先进技术装备时,往往显得力不从心。这一现象绝非局限于军事范畴,在当今社会的各个领域,“质量大于数量”都已成为不可逆转的趋势。在科技行业
    curton 2025-05-11 19:09 262浏览
  •   军事领域仿真推演系统的战略价值与发展前瞻   北京华盛恒辉仿真推演系统通过技术创新与应用拓展,已成为作战效能提升的核心支撑。以下从战略应用与未来趋势展开解析:   应用案例   目前,已有多个仿真推演系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润仿真推演系统。这些成功案例为仿真推演系统的推广和应用提供了有力支持。   一、核心战略应用   1. 作战理论创新引擎   依托低成本仿真平台,军事人员可高效验证新型作战概念。   2. 装备全周期优化   覆盖武器
    华盛恒辉l58ll334744 2025-05-14 16:41 27浏览
  •   基于 2025 年行业权威性与时效性,以下梳理国内知名软件定制开发企业,涵盖综合型、垂直领域及特色技术服务商:   华盛恒辉科技有限公司:是一家专注于高端软件定制开发服务和高端建设的服务机构,致力于为企业提供全面、系统的开发制作方案。在部队政企开发、建设到运营推广领域拥有丰富经验,在教育,工业,医疗,APP,管理,商城,人工智能,部队软件、工业软件、数字化转型、新能源软件、光伏软件、汽车软件,ERP,系统二次开发,CRM等领域有很多成功案例。   五木恒润科技有限公司:是一家专业的部队信
    华盛恒辉l58ll334744 2025-05-12 16:13 258浏览
我要评论
0
11
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦