2、安全性设计基础:安全性定义与标准(DO-178C/DO-254)、安全性等级划分(A~E级)、安全性设计原则

2.1 安全性到底是个啥?——我的理解

干了这么多年EEC设计,我经常被问到:「安全性不就是不出故障吗?」

其实没那么简单。安全性不是「不出事」,而是「出事之后,后果可控」。你想想看,飞机在天上飞,EEC(发动机电子控制器)要是抽风了,发动机跟着乱来,那可不是闹着玩的。

我个人习惯把安全性定义为:系统在规定的运行环境下,不会对人员、设备或环境造成不可接受的风险。 说白了,就是允许出小毛病,但绝不能出要命的大毛病。

核心观点: 安全性 ≠ 可靠性。可靠性是「别坏」,安全性是「坏了也别出事」。我在项目中见过不少团队把这两个概念搞混,结果设计出来的系统虽然很「皮实」,但一旦某个部件失效,整个系统就崩了。

2.2 安全性标准:DO-178C 和 DO-254

说到航空电子系统的安全性,绕不开两个标准:DO-178C(机载系统与设备合格审定中的软件考虑)和 DO-254(机载电子硬件设计保证指南)。

嗯,这里要注意,这两个标准不是法律,但适航当局(比如FAA、EASA)认它们。你不按这个来,拿不到适航证,飞机就别想上天。

2.2.1 DO-178C:软件安全性的「圣经」

DO-178C 主要管软件。它不告诉你「怎么写代码」,而是告诉你「怎么证明你的代码是安全的」。我刚开始接触这个标准时,觉得它太啰嗦了——光文档就要写一大堆。但后来吃过亏才明白,这些文档不是摆设,是保命符。

DO-178C 的核心思想是:过程保证。你只要严格按照规定的流程来开发、测试、验证,最终产品的安全性就有保障。它把软件等级分成了 A~E 五级,这个我们后面细说。

2.2.2 DO-254:硬件安全性的「守门员」

DO-254 管硬件。EEC 里的 FPGA、ASIC、甚至一些复杂的分立元件,都得按这个来。我记得有一次做项目,一个同事觉得 DO-254 太麻烦,想绕过去,结果被适航审查员抓了个正着,项目延期了三个月。

DO-254 和 DO-178C 很像,也是按等级划分,也是强调过程保证。但硬件有硬件的特殊性——比如硬件一旦流片出来,改不了,所以前期的验证必须做到位。

我的建议: 别把 DO-178C 和 DO-254 当成负担。把它们当成「安全设计清单」。每做完一步,对照标准检查一下,能省掉后面很多返工的麻烦。

2.3 安全性等级划分:A~E级

安全性等级,说白了就是「这个功能失效了,后果有多严重」。DO-178C 和 DO-254 都用了同样的分级体系:

等级 失效影响 描述 我遇到过的例子
A级 灾难性的 导致飞机坠毁、人员死亡 EEC 完全失控,发动机推力不受控
B级 危险的 严重降低飞机性能或机组工作负荷过重 EEC 误报火警,导致机组误操作
C级 重大的 显著降低飞机安全裕度或增加机组工作量 EEC 某个传感器失效,进入降级模式
D级 轻微的 稍微增加机组工作量,但不影响安全 EEC 自检信息显示错误,但不影响控制
E级 无影响的 不影响飞机操作或安全 EEC 记录飞行数据的日志功能失效

你可能会问:「A级和B级到底怎么区分?」 我个人的经验是:看有没有「逃生机会」。A级是「没救了」,B级是「还有一线生机,但非常危险」。

注意: 在 EEC 设计中,绝大多数关键功能(如燃油计量、推力控制)都是 A 级或 B 级。这意味着你必须用冗余设计来保证「单点失效不导致灾难性后果」。我曾经见过一个设计,把 A 级功能和一个 D 级功能放在同一个芯片里,结果审查没过——因为 D 级功能的失效可能「污染」A 级功能。

2.4 安全性设计原则:我踩过的坑和总结的经验

安全性设计不是靠「拍脑袋」想出来的,而是有一套成熟的原则。下面这几个,是我在 EEC 项目中反复验证过的:

2.4.1 冗余设计:别把所有鸡蛋放在一个篮子里

这是最基础的原则。EEC 里常见的冗余方式有:

  • 双通道冗余: 两个完全独立的控制通道,一个失效,另一个无缝接管。我做过的一个项目里,两个通道甚至用了不同的 FPGA 型号,就是为了防止「共因失效」。
  • 三余度表决: 三个通道,两两比较,少数服从多数。这个在飞控系统里更常见,EEC 里用得少一些,因为成本太高。
  • 解析冗余: 不用硬件备份,而是用数学模型来估算失效参数。比如某个传感器坏了,用其他传感器的数据推算出来。这个很考验算法功底。

避坑指南: 我曾经犯过一个错误——两个冗余通道用了同一个电源模块。结果电源模块一坏,两个通道同时失效。嗯,从那以后我学乖了:冗余必须从电源、时钟、总线到执行机构,全链路冗余。

2.4.2 故障隔离:别让一个坏零件拖垮整个系统

冗余是「有备份」,故障隔离是「坏的不影响好的」。具体做法包括:

  • 物理隔离: 两个通道的电路板分开,甚至放在不同的机箱里。
  • 电气隔离: 用光耦、隔离变压器等手段,防止一个通道的电气故障传导到另一个通道。
  • 软件隔离: 不同安全等级的功能,运行在不同的内存分区里,用 MMU(内存管理单元)做保护。

2.4.3 故障安全:失效时也要「体面」

如果系统真的撑不住了,怎么办?答案是:进入一个已知的安全状态。对于 EEC 来说,这个安全状态通常是:

  • 保持当前推力不变(不能突然收油或加油)
  • 切换到备份模式(比如液压机械备份)
  • 发出告警,让机组接管

我见过一个反面案例:某个 EEC 在检测到自身故障后,直接复位了。结果发动机在复位期间失去了控制,推力骤降。这就是典型的「故障不安全」设计。

2.4.4 可测试性:你得能证明它是安全的

安全性设计不是「做完了就完了」,你还得能证明它。这就是为什么 DO-178C 和 DO-254 要求那么多测试和文档。我个人习惯在设计阶段就考虑测试点:

  • 每个冗余通道都要有独立的测试接口
  • 故障注入测试要能覆盖所有关键失效模式
  • 自检程序(BIT)要能覆盖 95% 以上的故障

总结一下: 安全性设计说白了就是三句话——「坏了有备份」、「坏了不扩散」、「坏了也安全」。再加上一条:「你得能证明它」。这四条原则,我在每个 EEC 项目里都会贴在工位上。

2.5 一个小例子:EEC 燃油计量活门控制的安全性设计

光讲理论太枯燥,我拿一个实际例子来说说。EEC 控制燃油计量活门(FMV),这是个 A 级功能。我们是怎么设计的?

  1. 冗余: 两个独立的控制通道,每个通道有自己的 CPU、ADC、驱动电路。两个通道同时输出控制信号,但只有「主通道」的信号实际驱动活门。
  2. 故障隔离: 两个通道之间用光耦隔离,电源也分开。一个通道短路了,另一个通道不受影响。
  3. 故障安全: 如果两个通道都失效了,活门会由弹簧复位到一个预设的安全位置(通常是保持当前开度)。
  4. 可测试性: 每次上电时,EEC 会执行自检,模拟一个故障信号,看看冗余通道能不能正确接管。

你看,这四条原则都用上了。而且每个步骤都有文档记录,方便适航审查。

最后说一句: 安全性设计没有「银弹」。DO-178C 和 DO-254 只是工具,真正的安全是靠工程师的严谨和经验堆出来的。我做了十几年 EEC,每次看到自己的设计跟着飞机飞上天,心里还是有点紧张的——但正是这种紧张,让我不敢偷懒。