前言:
DBC设计中一般设计Signal时其实存在三种类型,如下图所示:
**1)步骤1,鼠标单击展开Message,选中底下的Signal
**2)步骤2,弹出dialog中选择 map signal
**3)得到以下菜单,在Defintion中
可以看到,选项Multiplexortype存在三个选项:
**1)Signal ,这是最常见的一种类型,一般默认也是选择Signal
**2)Multiplexor Signal
**3)Multiplexed Signal
2和3都是复合复用类型,故先要理解以下三个问题
1:) 什么是复合复用类型?
2:) 复合复用类型又是干什么的?
3:) 两种复合复用的关系?
1:) 什么是复合复用类型?
复合复用类型:这种概念有点像C中的共用体的标准,就是可以定义不同的变量(对应的dbc中的是signal),存放于同一内存变量中。
只不过c使用公用体是为了减少RAM内存的使用,而signal的复用则是为了减少总线负债率。
2:) 分清楚Multiplexor Signal和Multiplexed Signal的区别和联系
通过信号复用,可以根据复用值在消息中的相同数据字节上传输不同的信号。包含多路复用值的信号称为Multiplexor Signal(模式信号)。根据多路复用值发送的信号称为Multiplexed(与模式有关)Signals
将人话Multiplexed就是一种标记,可以理解为一组信号组的标号,我们设置一个信号就叫做:Signal_Multiplexor
我自己给这段信号设置了一个ValueTable:添加后效果如下图 :
然后依次设置以下四个信号:
G1_Signal_1_Multiplexed
G1_Signal_2_Multiplexed
G2_Signal_1_Multiplexed
G2_Signal_1_Multiplexed
加上Signal_Multiplexor一共5个signal,为了方便理解,字节排序方式统一设定为Inter格式,起始位统一设定为inter stand格式。
格式解释,G1/G2是表示分组,后面是信号名,信号名相同的信号表示是同一组复用信号,最后的字符是表示信号是复用信号。
第二步:新建一个Message名称New_Message_1,并把所有的信号添加进去。
第三步:点击EditMapingSignal,设置起始位,和信号长度
G1_Signal_1_Multiplexed与G1_Signal_2_Multiplexed是一组,起始位,信号长度必须不存在冲突。
G2_Signal_1_Multiplexed与G2_Signal_2_Multiplexed是一组,起始位,信号长度必须不存在冲突。
最后我们在Meaasge的layout界面看看结果:
注意标注地点,存在三种 选择下拉列表:
1)NO Mul****:指无复合复用类型。CANdb++也是默认选择此类型,此界面下,只能看到Signal_Multiplexor信号
2)Group1:内包含的信号:如下图
3)Group2,如下图:
总结和几点改进意见:
**1)一般情况下:需要Multiplexor标注组别的信号先发送,本例子中,采取的是bit7,先发送,显然是不合理的,建议将Multiplexor_Signal信号放置在Byte0的bit6和bit7位更合适。
2**)复用信号的ValueTable是不能复用的,必须为每个Signal添加一个合适的ValueTable
**3)大家可以尝试选择一组信号,然后任意拖动,也可以改变任意一个signal的长度