C 嵌入式系统设计模式 30:双通道模式

本文介绍了双通道模式,一种通过提供冗余通道来增强嵌入式系统安全性和可靠性的设计模式。同构冗余和异构冗余是两种实现方式,分别针对随机故障和系统性故障。模式结构包括传感器驱动、执行器驱动和数据转换,以及检查点的监控机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本书的原著为:《Design Patterns for Embedded Systems in C ——An Embedded Software Engineering Toolkit 》,讲解的是嵌入式系统设计模式,是一本不可多得的好书。

本系列描述我对书中内容的理解。本文章描述嵌入式安全性和可靠性模式之七:双道模式。

双通道模式 (Dual Channel Pattern) 主要是通过提供多个通道来提高系统的可靠性,从而在架构层面上解决冗余问题。多通道有两种实现方式:

  1. 同构冗余通道:指系统中使用相同设计和功能实现的多个通道(相同的软、硬件)。
    该模式能够应对 随机故障,也称为系统 失效 (failures),失效是指系统之前运行正常,但某些东西发生了变化,比如汽车传动轴断裂,导致系统进入失效状态。
    同构冗余无法解决 系统性故障,也称为 错误 (errors),错误是指需求不正确、糟糕的设计或糟糕的实现导致,比如软件有 BUG。
  2. 异构冗余通道:系统中使用不同设计或实现方式的冗余通道 (不同的软、硬件)。它能够同时处理 失效错误

摘要

双通道模式 通过复制通道并在其中嵌入管理逻辑,以解决安全性和可靠性问题。这一模式会确定各个通道何时处于“激活”状态,以此提供架构层面的冗余设计。

问题

此模式提供了对 单点故障(根据所选的具体实现方式,比如同构冗余或异构冗余,可能是 失效 或同时包含 失效和错误 )的防护。依据所采用的模式类型,系统可通过比较各通道之间的信息,当在一个通道中检测到故障时,可以切换至安全状态;或者自动使用另一个通道。

单点故障(Single-point Faults):指系统中一点失效,就会让整个系统无法运作的部件,换句话说,单点故障即会整体故障。

模式结构

模式结构图如下所示:
在这里插入图片描述

除了 具体的转换检测器 与当前通道和备用通道之间存在 关联 关系外,其余部分几乎与 受保护的单通道模式 完全一致。需要注意的是,这样的设计使得 检测器 能够禁用当前通道并启用备用通道。

模式详情

传感器驱动

从一个或多个传感器获取物理数据,并将其放入通道进行处理。

执行器驱动

这个类利用计算出的输出值来驱动一个或多个执行器,例如电动机、灯光或加热装置等。

通道

此类是其它实例的容器,用于管理不同的 通道 ,在此背景下非常重要,因为它提供了一个“冗余单元”。它自身提供了两个服务方法—— enable()disable()

具体的数据转换

此类负责对输入的数据值(来自传感器或前一个 具体的数据转换类 )执行数学变换,并生成输出结果(发送给序列中的下一个 具体的数据转换类或者 执行器驱动)。在简单情况下,可能只需要单一的 具体的数据转换类,但在更为复杂的应用场景中,可能存在多个不同的具体数据转换类。每一个具体的数据转换类都会对数据进行特定的处理和转换,从而构成整个数据处理通道的核心部分,确保数据在传输过程中逐步转化成适合执行器驱动设备所需的形式,最终驱动物理动作或控制设备行为。

在数据转换链中,某些特定的 具体的数据转换类 构成了检查点,即会在这些点检查数据转换的有效性。对于这些情况,会与特定 具体的转换检查类 进行关联。

关联:UML 中的 关联 表示类与类之间的连接,关联关系使一个类知道另外一个类的属性和方法。这里 具体的数据转换类 知道 具体的转换检查类 的函数(即:check() 函数),转换类对象调用检查类提供的方法来检查数据的合法性。

具体的转换检查

这是一个特定的数据 转换检查类,其作用是在转换链中的某一特定节点上核查数据转换是否有效。

效果

这种模式通过复制通道来解决与安全或可靠性相关的故障问题。通常情况下,这也需要相应地复制一部分硬件资源,因此带来了较高的重复(生产)成本。当这些通道完全一致时,所有副本都会包含相同的错误,在同样的条件下会表现出相同的错误现象。

实现策略

两个通道的管理方式可以根据实际情况采取不同的实现方式。一种常见做法是让两个通道同时运行,并相互比对输出结果——如果两者输出差异超过一定阈值,系统将切换至故障安全状态。另一种选择是一开始仅运行一个通道,一旦检测到故障,立即启用另一个通道,这样即便在出现故障的情况下也能保证服务的持续进行。

实例

见原书。






读后有收获,资助博主养娃 - 千金难买知识,但可以买好多奶粉 (〃‘▽’〃)
千金难买知识,但可以买好多奶粉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值