目录
2.1 给Multiplexor Signal类型的信号创建合适的Value tables
2.2 将创建Value tables的添加到Multiplexor Signal类型的信号
2.3 配置Message中的其它Multiplexed Signal类型的信号
在“【DBC专题】-1-如何使用CANdb++ Editor创建并制作一个DBC”一文中,我们已经掌握了DBC的创建,下面我们来介绍DBC中存在的另一种应用“Signals信号的多路复用”。
推荐阅读(单击下方文字即可跳转至对应博文):
1、【DBC专题】-1-如何使用CANdb++ Editor创建并制作一个DBC
2、【DBC专题】-3-利用CANdb++ Editor在DBC文件添加帧CAN_ID和信号CAN_Signal
3、【DBC专题】-4-DBC文件中的Signal信号字节顺序Motorola和Intel介绍
5、【DBC专题】-6-Signal信号字节顺序Motorola_LSB/MSB/Sequential/Backward,Intel_Standard/Sequential等6类格式详解
0 关键字/术语描述
Multiplexing:
通过信号复用,可以根据复用值在消息中的相同数据字节上传输不同的信号。包含多路复用值的信号称为Multiplexor Signal(模式信号)。根据多路复用值发送的信号称为Multiplexed(与模式有关)Signals(在此示例中为Signal_S1,...,Signal_S6)。
在MDC标准多路复用器概念中,要一起发送的多路复用信号必须每个都合并到一个Multiplex Group中(例如,示例中的Signal_S1和Signal_S2)。
举例:
如果多路复用值等于0,则发送信号Signal_S1和Signal_S2;如果等于1,则信号Signal_S3和Signal_S4; 如果等于2,则发送信号Signal_S5和Signal_S6(见图0-1)。
![](https://i-blog.csdnimg.cn/blog_migrate/59e77a53611ebc4dbfc42d4444d7a536.png)
1有关“多路复用”概念
DBC数据库中的标准“多路复用器”概念。在一条消息中,一个信号正好可以承载multiplexor value,这就是multiplexor signal。在“Message–Signal”对话框中设置。这涉及在“Multiplexor Type”框中选择“Multiplexor Signal type”(见1-1)。
![](https://i-blog.csdnimg.cn/blog_migrate/b2297f752e7b283ab7d976b1c1c15f29.png)
Multiplexor type:
- Signal
信号没有多路复用
- Multiplexor Signal (short: Multiplexor)多路复用信号(简称:多路复用)
此消息的其他信号复用到其值的信号
- Multiplexed Signal多路信号
仅当复用信号的值与多路复用值一致时,才发送的一种信号。
然后,消息中具有“Multiplexor Signal type”的所有信号都取决于multiplexor signal的值。 在“Multiplex Value”输入框中设置特定值。
注意:
a)每条消息的multiplexor signals的数量只有一个;
b)信号可以是multiplexor signal或multiplexed signal,但不能同时是两者。
2 创建Message中“信号多路复用”
假设Message中的Test_ID_212存在以下信号(见图2-1):
信号Package_Num(Length:8bit);
信号Voltage_1_Value(Length:16bit)
信号Voltage_2_Value(Length:16bit)
信号Voltage_3_Value(Length:16bit)
信号Voltage_4_Value(Length:16bit)
信号Voltage_5_Value(Length:16bit)
信号Voltage_6_Value(Length:16bit)
![](https://i-blog.csdnimg.cn/blog_migrate/a807737c62edea2b349808850c1f00fc.png)
Message的Test_ID_212新建参照 “【DBC专题】-1-如何使用CANdb++ Editor创建并制作一个DBC”一文。当Package_Num = 0,后面的信号表示Voltage_1_Value,Voltage_2_Value,Voltage_3_Value;当Package_Num = 1,后面的信号表示Voltage_4_Value,Voltage_5_Value,Voltage_6_Value。
通过上面的信息我们可以看出:信号Package_Num是Multiplexor Signal类型;信号Voltage_1_Value、Voltage_2_Value、Voltage_3_Value、Voltage_4_Value、Voltage_5_Value和Voltage_6_Value是Multiplexed Signal类型。
2.1 给Multiplexor Signal类型的信号创建合适的Value tables
“【DBC专题】-1-如何使用CANdb++ Editor创建并制作一个DBC”一文中第7章的讲述了如何创建Value tables,这里不再重复的叙述。
在“Value Table‘New_Value_Table_5’”对话框下的Definition子选项卡(见图2-2)中,定义创建的Value Tables的符号名称和备注。在Value Descriptions子选项卡(见图2-3)中,枚举出信号所有可能出现的值,并添加描述(下图中表示,当信号值等于0x0时,用No.1代替显示;当信号值等于0x1时,用No.2代替显示;)。单击“确定”按钮,完成值描述编辑(见图2-4)。
![](https://i-blog.csdnimg.cn/blog_migrate/27fbd49639be64fe65f6a346e42c34ad.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5d85430e46c04e38951596ad132a312d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/dc96a8037870aa2afbec6a21529cf1e4.png)
2.2 将创建Value tables的添加到Multiplexor Signal类型的信号
以Message消息Test_ID_212中Package_Num为例。选中Package_Num并鼠标右键,在其上下文中选择“Edit mapped Signal…”(见图2-5) 。或者双击Test_ID_212下的Package_Num信号,也有同样的效果。
![](https://i-blog.csdnimg.cn/blog_migrate/ebaed7409d1835a6aede618555d1fe81.png)
在弹出“Message Signal ‘Test_ID_212::Package_Num’”对话框中,选择“Signal”子选项卡,在“Value Table:”处选择刚刚新建的Value tables “Package_Num_Value”(见图2-6)。
![](https://i-blog.csdnimg.cn/blog_migrate/3fe7a8bd3ee06adce3de8f69b3441ec3.png)
在弹出“Message Signal ‘Test_ID_212::Package_Num’”对话框中,选择“Definition”子选项卡,在“Multiplexortype”处选择“Multiplexor Signal”(见图2-7)。
![](https://i-blog.csdnimg.cn/blog_migrate/4d74b3cf1f83345164cd0dc2252f9f2d.png)
2.3 配置Message中的其它Multiplexed Signal类型的信号
以Message消息Test_ID_212中Voltage_1_Value为例。选中Voltage_1_Value并鼠标右键,在其上下文中选择“Edit mapped Signal…”(见图2-8) 。或者双击Test_ID_212下的Voltage_1_Value信号,也有同样的效果。
![](https://i-blog.csdnimg.cn/blog_migrate/ee2113f404df64afba5e33390f336e23.png)
在弹出“Message Signal ‘Test_ID_212::Voltage_1_Value’”对话框中,选择“Definition”子选项卡,在“Multiplexortype”处选择“Multiplexed Signal”;在“Multiplex Value”处填“0x0”(见图2-9)。按照此方法依次配置信号Voltage_2_Value、Voltage_3_Value、Voltage_4_Value、Voltage_5_Value、Voltage_6_Value。
注意:配置其它信号时唯一的差异是:
信号Voltage_2_Value的“Multiplex Value”处填“0x0”;
信号Voltage_3_Value的“Multiplex Value”处填“0x0”;
信号Voltage_4_Value的“Multiplex Value”处填“0x1”;
信号Voltage_5_Value的“Multiplex Value”处填“0x1”;
信号Voltage_6_Value的“Multiplex Value”处填“0x1”;
![](https://i-blog.csdnimg.cn/blog_migrate/39f1c704dab5e46cd925c2925783924e.png)
2.4 在Message中调整Signal信号的位置
“【DBC专题】-1-如何使用CANdb++ Editor创建并制作一个DBC”一文中第5.2章的讲述了如何调整Signal信号的位置,这里不再重复的叙述。
Signal信号位置调整完整后,在Message—>Layout中显示效果见下图2-10、图2-11、图2-12。
![](https://i-blog.csdnimg.cn/blog_migrate/497e4310ca65f2a3b8d9126e8cfdcf01.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a9b978fa0ffc2ed20892a41ad3a525e4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1404173c3512dab826ffe82b4473be15.png)
3 Consistency check一致性检查
“【DBC专题】-1-如何使用CANdb++ Editor创建并制作一个DBC”一文中第10章讲述了如何进行一致性检查,这里不再重复的叙述(见图3-1)。
![](https://i-blog.csdnimg.cn/blog_migrate/95b977106704eb48c456d4579a50b793.png)
自此信号的多路复用就完成了。