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

本文介绍DBC中Signals信号的多路复用。先阐述多路复用概念,包括Multiplexor Signal和Multiplexed Signal。接着以Test_ID_212消息为例,说明创建信号多路复用的步骤,如创建Value tables、添加到信号、配置其他信号及调整信号位置,最后进行一致性检查完成操作。

目录

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 结尾

04-24
<think>好的,我现在需要处理用户的问题,用户提到“dbc in IT context”,也就是在IT上下文中DBC的含义。首先,我需要确定DBC可能的全称和相关技术领域。 首先,DBC在IT领域常见的缩写可能有几种情况。比如,Database Connection(数据库连接)、Design by Contract(契约式设计)、或者可能是特定技术如R2DBC(Reactive Relational Database Connectivity)。根据用户提供的引用内容,里面提到了R2DBC相关的配置和事务管理,所以很可能用户指的是R2DBC。此外,用户之前的对话涉及Spring Data R2DBC和多数据源配置,因此需要结合这些上下文来解答。 接下来,我需要验证这些可能的解释是否符合用户的问题。用户提供的引用[1]和[3]明确提到了R2DBC,特别是引用[3]讨论的是多数据源下R2DBC事务失效的问题,这说明用户可能在处理与R2DBC相关的技术问题。因此,DBC在这里很可能指的是R2DBC,即反应式关系型数据库连接。 然后,我需要整理关于R2DBC的基本信息,包括它的定义、作用、核心组件以及与Spring框架的集成。同时,要确保回答结构清晰,分点说明,并引用提供的参考资料中的相关内容。例如,引用[1]提到了使用Spring Data R2DBC和r2dbc-mssql来连接数据库,引用[3]中的配置类展示了如何配置事务管理器和操作符,这些都可以作为回答的支撑。 另外,用户可能还希望了解R2DBC的应用场景、与传统JDBC的区别以及如何进行多数据源配置和事务管理。因此,在相关问题部分需要涵盖这些方面,帮助用户进一步探索。 最后,确保回答符合用户要求的格式,使用中文,正确应用LaTeX格式,并自然添加引用标识。同时,检查是否有其他可能的DBC解释,如Design by Contract,虽然可能性较低,但可以简要提及以全面覆盖可能性。</think>### DBC在IT领域的常见含义解析 #### 1. **R2DBC(Reactive Relational Database Connectivity)** - **定义**: 基于响应式编程的关系型数据库连接标准,支持非阻塞I/O操作[^1] - **核心作用**: 解决传统JDBC阻塞式访问的局限性,提升数据库访问吞吐量 - **典型应用**: - 响应式系统开发(如Spring WebFlux) - 高并发场景下的数据库操作 - 微服务架构中的异步通信 - **技术组成**: $$ \text{R2DBC} = \text{响应式流} + \text{SQL协议} + \text{驱动实现} $$ 通过`ConnectionFactory`建立连接,使用`DatabaseClient`执行操作[^3] #### 2. **Design by Contract(契约式设计)** - **定义**: 通过前置条件、后置条件和类不变式规范软件组件交互 - **应用场景**: - Eiffel语言原生支持 - Java可通过注解库实现(如`@Preconditions`) - 接口设计验证 #### 3. **Database Connection(数据库连接)** - **通用概念**: - 连接池配置参数(如`maxPoolSize`) - 事务管理(ACID特性实现- 连接泄漏检测 ### 当前上下文解析 根据引用内容中的`R2dbcConfig`配置类和`R2dbcTransactionManager`[^3],可以确认当前讨论的是**R2DBC技术**。该技术通过响应式编程模型实现非阻塞数据库访问,与Spring WebFlux配合使用时需要特别注意事务边界管理: ```java @Bean public R2dbcTransactionManager transactionManager(ConnectionFactory factory) { return new R2dbcTransactionManager(factory); } ```
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

汽车电子助手

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

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

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

打赏作者

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

抵扣说明:

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

余额充值