【DBC专题】-2-CAN Signal信号的Multiplexor多路复用在DBC中实现

目录

0 关键字/术语描述

1有关“多路复用”概念

2 创建Message中“信号多路复用”

2.1 给Multiplexor Signal类型的信号创建合适的Value tables

2.2 将创建Value tables的添加到Multiplexor Signal类型的信号

2.3 配置Message中的其它Multiplexed Signal类型的信号

2.4 在Message中调整Signal信号的位置

3 Consistency check一致性检查

4 结尾


 

在“【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介绍

4、【DBC专题】-5-DBC文件格式解析

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)。

图0-1

 

1有关“多路复用”概念

 

DBC数据库中的标准“多路复用器”概念。在一条消息中,一个信号正好可以承载multiplexor value,这就是multiplexor signal。在“Message–Signal”对话框中设置。这涉及在“Multiplexor Type”框中选择“Multiplexor Signal type”(见1-1)。

图1-1

 

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)

图2-1

 

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_NumMultiplexor Signal类型;信号Voltage_1_ValueVoltage_2_ValueVoltage_3_ValueVoltage_4_ValueVoltage_5_ValueVoltage_6_ValueMultiplexed 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)。

图2-2

 

图2-3

 

图2-4

 

2.2 将创建Value tables的添加到Multiplexor Signal类型的信号

 

以Message消息Test_ID_212中Package_Num为例。选中Package_Num并鼠标右键,在其上下文中选择“Edit mapped Signal…”(见图2-5) 。或者双击Test_ID_212下的Package_Num信号,也有同样的效果

图2-5

 

在弹出“Message Signal ‘Test_ID_212::Package_Num’”对话框中,选择“Signal”子选项卡,在“Value Table:”处选择刚刚新建的Value tables “Package_Num_Value”(见图2-6)。

图2-6

 

在弹出“Message Signal ‘Test_ID_212::Package_Num’”对话框中,选择“Definition”子选项卡,在“Multiplexortype”处选择“Multiplexor Signal”(见图2-7)。

图2-7

 

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信号,也有同样的效果

图2-8

 

在弹出“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”;

 

图2-9

 

2.4 在Message中调整Signal信号的位置

【DBC专题】-1-如何使用CANdb++ Editor创建并制作一个DBC”一文中第5.2章的讲述了如何调整Signal信号的位置,这里不再重复的叙述。

 

Signal信号位置调整完整后,在Message—>Layout中显示效果见下图2-10、图2-11、图2-12。

图2-10

 

 

图2-11

 

图2-12

 

3 Consistency check一致性检查

【DBC专题】-1-如何使用CANdb++ Editor创建并制作一个DBC”一文中第10章讲述了如何进行一致性检查,这里不再重复的叙述(见图3-1)。

 

图3-1

 

自此信号的多路复用就完成了。

4 结尾

### 使用Simulink CAN Pack模块解析DBC文件中的每个字节 在Simulink环境中,为了实现基于DBC文件的CAN信号打包功能,需正确配置`CAN Pack`模块以确保能够按照定义好的数据库格式处理数据。当设置`Data is input as`选项为`CANdb specified signals`时,意味着输入到该模块的数据流应当遵循由选定DBC文件所描述的具体信号结构[^1]。 对于每一个欲发送的消息而言,在对应的DBC文档内均存在详细的字段说明——这其中包括但不限于起始位、长度以及转换因子等属性。这些信息指导着如何将原始数值映射至实际物理层面上的一系列比特串之中。因此,在准备阶段,务必先加载合适的DBC文件进入工作空间,并指定给`CAN Pack`组件以便其识别待操作的信息单元[^2]。 具体来说,为了让`CAN Pack`能依据DBC文件解析并提取出各单个字节的内容: - **确认DBC文件已导入**:保证目标DBC已被成功引入MATLAB/Simulink环境,并可通过路径访问。 - **设定消息ID与名称匹配**:确保要使用的CAN帧在其关联的DBC中有明确定义;同时,在`Message ID`和`Name`参数处填入相应的标识符或名字字符串,使二者之间建立联系。 - **连接信号源端口**:针对每一路参与组合成最终二进制序列的子信号(即构成整个报文的不同部分),应分别链接来自上游逻辑产生的相应变量作为输入。此时,注意保持顺序一致性和范围兼容性,因为任何偏差都可能导致错误编码结果。 - **验证输出格式无误**:最后一步则是仔细核对经此过程形成的完整CAN帧是否满足预期标准,特别是关于填充位、校验码等方面的要求。 ```matlab % 假设已经有一个名为 'example.dbc' 的 DBC 文件位于当前目录下, % 并且想要创建一个新的 Simulink 模型来测试这个流程。 new_system('myCanModel'); open_system('myCanModel'); add_block('simulink/Signal Routing/Mux', 'myCanModel/CAN_Pack_Input_Mux'); set_param(gcb, 'Inputs','3'); % 设置多路复用器接收三个输入信号 add_block('VehicleNetworkToolbox/CAN/CAN Pack', 'myCanModel/CAN_Pack_Block'); set_param('myCanModel/CAN_Pack_Block', ... 'DatabaseFile', fullfile(pwd,'example.dbc'), ... % 加载本地 DBC 文件 'MessageId', '0x7FF', % 设定消息 ID (十六进制表示法) 'MessageName', 'ExampleMsg') % 如果适用的话也提供消息名 connect_lines({'InputPort_1';'InputPort_2';'InputPort_3'},... {'CAN_Pack_Input_Mux/In1';'CAN_Pack_Input_Mux/In2';'CAN_Pack_Input_Mux/In3'}); connect_line('CAN_Pack_Input_Mux/Out','CAN_Pack_Block/Data In'); ``` 上述脚本展示了怎样利用MATLAB命令行快速搭建一个简单的Simulink模型实例,其中包含了必要的元件用于展示目的。当然,在真实项目开发过程中还需要进一步调整和完善细节设计,比如增加更多的诊断机制或者优化性能表现等等[^3]。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汽车电子助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值