完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
1. DBC
DBC是Data Base CAN的缩写。DBC文件是用来描述CAN网络通信信号的一种格式文件。ECU之间的通信、信息的交互以及相互之间的关系,都是通过DBC文件来管理的,也就是ECU之间的通信都要以DBC文件中的内容为标准。DBC文件中定义了总线系统中各个ECU所需要发送和接收的报文,以及每个报文所有Bit的具体定义,同时还定义了个报文/信号的通信属性,例如:通信周期、通信方式、取值范围等。我们可以通过DBC文件来监测与分析CAN网络上的报文数据,也可以通过DBC文件来模拟某个CAN节点(ECU节点)。 2. CANdb++ Editor Vector公司的CANoe软件提供了CANdb++Editor工具,用来新建或编辑一个DBC文件。CANdb++Editor的编辑界面如下: CANdb++Editor中新建或编辑DBC文件,大家可以参考书籍《CANoe开发从入门到精通》或者在互联网上查找相关内容,再有就是查看CANdb++Editor的帮助文档(Help-> CANdb++ Help)。 本文中主要介绍用文本形式来编辑DBC文件。 3. 文本编辑DBC DBC文件是可以用文本工具打开的,例如Notepad++。掌握了DBC文件的标准格式后,我们就可以通过文本的形式来编辑DBC文件了。dbc文件中主要包含了如下的信息: 版本与新符号 波特率定义 网络节点的定义 报文的定义 信号的定义 注解部分 属性定义部分 数值表部分 其中波特率定义、网络节点的定义是必须要有的,缺少这两项的dbc文件是不能用CANdb++ Editor软件打开的。 4. DBC 标准格式说明 4.1 版本与新符号 VERSION “版本号” VERSION是关键字。 例:VERSION“V1.0.0” 代表DBC文件的版本号是V1.0.0,“版本号”内容可以为空。 NS_ :新符号 NS_ 是关键字,。 例:如下图 新符号就是定义在DBC中要使用的关键字,上述新符号的信息在我们用CANdb++Editor创建dbc文件时就已经自动生成了,默认即可。 4.2 波特率定义 BS_:[baudrate:BTR1,BTR2]; BS_是关键字,用于定义CAN网络的波特率。 [ ]内容表示为可选部分,可以省略。但关键字”BS_:”必须存在,省略则会出错。 4.3 网络节点的定义 BU_:Nodename1 Nodename2 Nodename3 …… BU_ 是关键字,用于定义网络节点。 Nodename1、Nodename2表示定义的网络节点名字,由用户自己定义;但需保证节点命名的唯一性。 例:BU_: IVI GW 代表定义网络节点IVI、GW。 4.4 报文的定义 BO_ MessageId(10进制数表示) MessageName: MessageSize Transmitter BO_ 是关键字,用于定义报文。 MessageId为定义的报文ID,是以10进制数表示的; MessageName表示该报文的名字,命名规则和C语言变量相同; MessageSize表示该报文数据域字节数,为无符号整型数据; Transmitter表示发送该报文的网络节点;如果该报文没有指定发送节点,则该值需设置为” Vector__XXX”。 例:BO_ 555 ATC_11: 8 GW 555代表报文ID是0x22B。 ATC_11代表报文名是ATC_11。 8代表报文数据长度是8字节。 GW代表发送节点是GW。 4.5 信号的定义 SG_ SignalName : StartBit|SignalSize@ByteOrder ValueType (Factor,Offset) [Min|Max] Unit Receiver SG_ 是关键字,用于定义信号。 SignalName、 StartBit、 SignalSize分别表示该信号的名字、起始位、信号长度; ByteOrder表示信号的字节顺序:0代表Motorola格式,1代表Inter格式; ValueType 表示该信号的数值类型:+表示无符号数,-表示有符号数; Factor表示因子,Offset表示偏移量;这两个值于该信号的原始值与物理值之间的转换。转换公式:物理值=原始值*因子+偏移量; Min|Max表示该信号的最小值和最大值,即指定了该信号值的范围;这两个值为double类型; Unit表示该信号的单位,为字符串类型; Receiver表示该信号的接收节点;若该信号没有指定的接收节点,则必须设置为” Vector__XXX”。 例:SG_ IVI_Time_Day : 40|7@1+ (1,0) [1|128] “day” IC IVI_Time_Day代表信号名IVI_Time_Day。 40代表起始位40。 7代表信号长度7。 @1代表编码格式Intel格式(@0是Motorola格式)。 +代表信号数据是无符号数据(1代表信号数据是有符号数据)。 (1,0)代表factor值是1,offset值是0。 [1|128]代表最小值是1,最大值是128。 “day"代表信号的单位是"day”。 IC代表接收节点是IC。 4.6 注解部分 CM_ Object MessageId/NodeName “Comment” CM_ 是关键字,表示注释信息。 Object表示进行注解的对象类型,可以是节点“BU_”、报文“BO_”、消息”SG_”。 MessageId/NodeName 表示进行注解的对象,若前面的对象类型是信号或者报文,则这里的值应为报文的ID(10进制数表示),若前面的对象类型为节点,则这里的值应为节点的名字。 Comment表示进行注解的文本信息; 例:CM_ SG_ 900 IVI_Time_Day “Indicates the day sent by IVI.”; 900代表信号所在的报文ID是900(0x384)。 IVI_Time_代表信号名字是IVI_Time_Day。 “Indicates the day sent by IVI.“代表注释内容是"Indicates the day sent by IVI.”。 4.7 属性定义部分 BA_DEF_ Object AttributeName ValueType Min Max; BA_DEF_DEF_ AttributeName DefaultValue; BA_DEF_为关键字,表示属性定义。 Object表示属性定义的对象类型,可以是节点“BU_”、报文“BO_”、信号”SG_”、网络节点” ”(用空格表示)等。 AttributeName表示进行定义的属性名字。 ValueType表示属性值的类型,可以是整型、字符串、浮点型、枚举类型等。 Min/Max表示属性值的上下最值,即指定了取值范围(字符串类型没有此项)。 BA_DEF_DEF_为关键字,表示定义属性的初始值; DefaultValue表示该属性的初始值。 例:BA_DEF_ SG_ “Sv_AutoRestoreInactiveValue” ENUM “No”,“Yes”; BA_DEF_DEF_ “Sv_AutoRestoreInactiveValue” “No”; “Sv_AutoRestoreInactiveValue"代表一个信号类型的属性"Sv_AutoRestoreInactiveValue”,属性的类型是枚举类型,属性的取值范围是"No”,“Yes”。 属性"Sv_AutoRestoreInactiveValue"的初期值是"No"。 属性"Sv_AutoRestoreInactiveValue"定义好之后,在CANdb++Editor的信号属性中会显示自定义的属性"Sv_AutoRestoreInactiveValue"。如下: BA_ AttributeName Object AttributeValue; BA_ 是关键字,表示属性的设置。 例1:BA_ “GenMsgCycleTime” BO_ 555 100; 代表ID为555(0x22B)的报文的循环周期时100ms,属性GenMsgCycleTime代表报文的循环周期。 例2:BA_ “SystemSignalLongSymbol” SG_ 741 FDM_AutoChangeStatus_RearSunShad “FDM_AutoChangeStatus_RearSunShade”; 代表ID为741(0x2E5)的报文中的信号“FDM_AutoChangeStatus_RearSunShad“的相关属性设定。用"FDM_AutoChangeStatus_RearSunShade"来代替FDM_AutoChangeStatus_RearSunShad。 注1:属性“GenMsgCycleTime”和"SystemSignalLongSymbol"是CANdb++Editor自带得标准属性,类似的标准属性的含义参考CANdb++Editor得帮助文档。 注2:用到的属性都需要通过BA_DEF_和BA_DEF_DEF_定义过。 4.8 数值表部分 VAL_ MessageId SignalName N “DefineN” …… 0 “Define0”; VAL_为关键字,表示数值表定义; MessageId表示该信号所属的报文ID(10进制数表示); SignalName表示信号名; N “DefineN” …… 0 “Define0”表示定义的数值表内容,即该信号的有效值分别用什么符号表示 。 例:VAL_ 272 WorkingSt_AEB 0 “Off” 1 “Standby” 2 “Active” ; 代表ID为272 (0x110)的报文中的” WorkingSt_AEB”的信号,进行其数值表的定义;用” Off”代替0;用” Standby”代替1,用"Active"代替2。 数值表可以在IG 模拟发送信号时使用,或者在Graphics界面中查看信号值时使用。如下: |
|
|
|
只有小组成员才能发言,加入小组>>
3272 浏览 9 评论
2948 浏览 16 评论
3449 浏览 1 评论
8969 浏览 16 评论
4042 浏览 18 评论
1087浏览 3评论
563浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
558浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2295浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1851浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-14 13:22 , Processed in 1.117284 second(s), Total 79, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号