NS_
版本与新符号
BS_ 波特率
波特率 BS_:[baudrate:BTR1,BTR2]
BU_ 网络节点定义
BU_表示网络节点 BU_:Nodename1 Nodename2 Nodename3 ……
BO_ 报文帧定义
BO:CANId MessageName: MessageSize Transmitter
- MessageSize 表示该报文数据域字节数
- Transmitter 发送该报文的网络节点, 如果该报文没有指定发送节点, 则该值需设置为” Vector__XXX”
SG_ Signal 信号定义
SG_ SignalName : StartBit|SignalSize@ByteOrder ValueType (Factor,Offset) [Min|Max] Unit Receiver
- StartBit、 SignalSize 信号起始位、信号长度
- ByteOrder 表示信号的字节顺序: 0代表Motorola格式, 1代表Intel格式
- Intel\小端 编码: 信号在一个字节内, msb 在字节高位, lsb 在字节低位; 跨字节时, msb 在高字节高位,lsb 在低字节低位, 顺序的
- Motorola\大端 编码: 信号在一个字节内, msb 在字节高位, lsb 在字节低位; 跨字节时, msb 在低字节高位,lsb 在高字节低位,逆序的
- ValueType 表示该信号的数值类型: +表示无符号数, -表示有符号数
- Factor 表示因子, Offset 表示偏移量; 这两个值于该信号的原始值与物理值之间的转换。转换: 物理值=原始值*因子+偏移量;
- Min|Max 表示该信号的最小值和最大值, 即指定了该信号值的范围; 这两个值为double类型
- Unit 表示该信号的单位, 为字符串类型
- Receiver 表示该信号的接收节点; 若该信号没有指定的接收节点, 则必须设置为“Vector__XXX”*
编码补充-Bit Numbering
对于一个十进制数8,其二进制1000,
- lsb0 编号:最低有效位 lsb 地址为 0 开始的编码,即 msb first,对于二进制数 1000,编号为 bit3 bit2 bit1 bit0
- msb0 编号:最高有效位 msb 地址为 0 开始的编码,即 lsb first,对于二进制数 1000,编号为 bit0 bit1 bit2 bit3
lsb0
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
msb0
bit0 bit1 bit2 bit3 bit4 bit5 bit6 bit7
Can DBC 和 Autosar ARXML,它们都采用的是 lsb0 的 bit numbering。
编码补充-Endianness
大小端编码都不影响一个字节内的数据位置,改变的是跨字节时数据的前后排列关系。
字节内始终采用 lsb0,即,信号高有效位在字节内的高位, 信号低有效位在字节内的低位。
对于数据 0x1234,二进制为 0001 0010 0011 0100,高字节为 0x12,低字节为 0x34。msb 为 0001 的首个 0, lsb 为 0100 的最后一个 0。
Intel\小端: 从 lsb 开始延地址增加方向顺序排列,直到排到 msb

Motorola\大端:在 msb0 视图下,从 msb 开始延地址增加方向顺序排列,直到排到 lsb

lsb0 + motorola 计算公式
bit 从 lsb0 转换到 msb0(或 msb0 转换到 lsb0):b = b - (b % 8) + 7 - (b % 8)
- b - (b % 8) 相当于只取 b 的 3 位之前的数字,得到 b 的字节地址
- 7 - (b % 8) 相当于 b 的后 3 位和 7 做异或运算,因为 7 是3位二进制数中最大的数,设属于 [0, 7] 的任何数为 x,7 - x = y,因为 7 是全 1,所以 y 和 x 一定没有重合的 1,所以 x ^ y = 7,因为 x + y = 7,因此这步可以成为异或操作。在 8 位的情况下,每个位的编码 0 - 7,lsb0 和 msb0 标号的同一个位置,相加永远为 7。整步可以优化为 b ^ 0x7u。
- 相加得到结果
msb0时,从 lsb 转换到 msb:
b = b + 1 - length
msb0时,从 msb 转换到 lsb:
b = b + length - 1
从 lsb0 的 msb 转换到 lsb0 的 lsb:
b = b - (b % 8) + 7 - (b % 8)
b = b + length - 1
b = b - (b % 8) + 7 - (b % 8)
lsb0 + intel 计算公式
lsb -> msb:b = b + Length - 1
msb -> lsb:b = b - (Length - 1)
CM_ 注解、注释
CM_ Object CANId/NodeName SignalName “Comment”
- Object 表示注解的对象,可以是节点 BU_ 报文 BO_ 消息 SG_
- CANId/NodeName 表示进行注解的对象, 若前面的对象类型是信号或者报文, 则这里的值应为报文的ID(10进制数表示); 若前面的对象类型为节点, 则这里的值应为节点的名字;
- SignalName 报文ID 后跟信号名字,表示对信号的注释
- “Comment” 注释内容
BA_ 属性定义
BA_DEF_ 对报文、信号、节点的属性定义
- BA_DEF_ Object AttributeName ValueType Min Max;
- BA_DEF_DEF_ AttributeName DefaultValue; 声明属性的默认值
BA 感觉像是属性声明
- BA AttributeName Object [CANId] [NodeName|SignalName|env_var_name] AttributeValue
VAL_ 信号数值表的定义
VAL_ CANId SignalName N “DefineN” …… 0 “Define0”
该信号的有效值分别用什么符号表示, “DefineN” 代表数值 N
DBC 可以覆盖的 COM 基础功能
