本篇信息密度较高。建议在安静的环境下,用十分钟时间,跟着逻辑走一遍。
刹车片完好。液压管路完好。轮胎完好。跑道干燥。
一切硬件都处于正常工作范围之内。但飞机就是停不下来。
在我们的传统认知里, " 刹不住 " 这三个字通常意味着某个零件坏了 ——
刹车片磨穿了,液压漏了,轮胎爆了。这是人对 " 制动失效 " 最本能的理解
一定是什么东西坏了。
但是在空客 A350 上,让我们停不下来的,不是任何一个 " 坏了 " 的零件。是两组数据对不上。
来类比一下,你的 iPhone 里有一个微型惯性测量单元,行业术语叫 IMU 。它负责告诉手机 "你现在是横着还是竖着 " 。
屏幕旋转、地图导航、步数记录,全部依赖这颗芯片提供的姿态数据。假如这颗芯片精神错乱了,给屏幕旋转模块传了一个自相矛盾的信号, 比如同时说你在横屏和竖屏, iOS系统 会怎么处理?
它会直接锁死屏幕旋转。宁可不转,也不乱转。
手机里的IMU:当数据互相矛盾时,系统会选择“什么都不做”。
现在,把这个逻辑放大一万倍。把手机换成一架最大起飞重量 280 吨的宽体客机。把 "屏幕旋 转 " 换成 " 刹车 " 。
欢迎来到空客电传飞控最深处的逻辑陷阱。
一、飞机的"小脑"
A350 的驾驶舱里没有一根连接到刹车片的钢缆。飞行员踩下脚蹬时,脚底接触的是一块传感器薄片。它把你的踩踏力度转化为一个电信号,发送给刹车控制系统。系统收到信号后,自行计算应该施加多大的液压压力、分配到哪几个轮子、保留多少防滑裕度,然后才指挥液压作动器去夹紧碳刹车盘。
从你的脚到实际制动力之间,隔着一整套计算机。
这套计算机要正常工作,前提是它知道飞机现在的速度、姿态、加速度。这些最基础的物理参数,由一个叫 ADIRU 的东西提供 —— 全称" 大气数据与惯性参考系统 " ( Air Data Inertial Reference Unit )。
ADIRU:飞机的“小脑”,负责提供姿态、速度、加速度等基础数据。
ADIRU 不是 GPS 。 GPS 依赖卫星信号,信号丢了就等于被蒙上了眼。 ADIRU 靠的是内部的激光陀螺仪和加速度计,自主计算飞机在三维空间中的一切,像 俯仰角、滚转角、航向、垂直速度、水平加速度。它相当于人的小脑。
A350 装了三套,完全独立。编号 IR1 、 IR2 、 IR3 。
装三套不只是为了备份,更重要的目的是为了投票, 少数服从多数。
三个独立的传感器组,各自计算,各自进行输出。
飞控计算机拿到三组数据后进行交叉比对:
如果两组说飞机在平飞,第三组如果说飞机在倒飞,那第三组会被判定为故障并隔离。这叫"三余度表决",航空电子学里最经典的容错架构。
ADIRU 的数据不仅同时喂给飞控和导航。它还沿着数据总线向下灌入一个我们可能想不到的子系统—— 刹车。
A350 的刹车控制单元需要知道飞机的地速和加速度,才能判断轮子有没有打滑、要不要松开刹车。
刹车踩下去之后,轮子的转速和飞机的实际地速之间如果出现偏差,说明轮子在打滑,系统必须瞬间释放那个轮子的制动压力,等它恢复抓地力再重新进行施压。整个过程在毫秒级别完成。
而 " 飞机的实际地速 " 这个关键参数,来自 ADIRU 。
一个姿态传感器的数据质量,直接决定了这 200 多吨的飞机能不能停下来。
三余度表决:三套系统互相“投票”,多数决定真相。
二、偏执的校验
空客的工程师对数据质量有一种近乎病态的洁癖。
在 A350 的刹车控制单元内部,所有的计算都被分成两条独立的通道。一条叫 COM——Command ,指令通道,负责计算和下达制动指令。
另一条叫 MON——Monitor ,监控通道,用完全不同的代码、独立重新计算一遍同样的结果。
COM / MON 双通道:同一结果,两套系统分别计算,再互相校验。
两条通道持续交叉比对。每一个计算周期, COM 说 " 我算出来应该施加 1000 PSI" , MON 说 " 我独立验算的结果也是 1000 PSI" ,数据一致,指令放行。如果 COM 说 1200 , MON 说 800,这样的情况 超过了预设的安全阈值, 系统就会立刻亮红灯。
这个红灯的后果不是 " 降级运行 " ,不是 " 给飞行员弹个警告让他们自己看着办 " 。
是直接切断( cut off )。
系统宣布这条通道 " 失效 " ,将控制权切换到冗余通道。如果冗余通道也出了同样的问题,那就继续cut off,直到切到没有可用的通道为止。
搞分布式系统的工程师看到这里应该会觉得眼熟。这就是拜占庭容错的工业级实现 —— 当系统无法确定哪个节点在说真话时,宁可停止服务,也不执行一个可能是错的指令。
区别在于:你的微服务集群停服,用户刷不出外卖页面,骂两句也就过去了。飞机的刹车停服, 200 多吨的飞机会用事实教你什么叫牛顿第一定律。
ADIRU 的内部也有同样的 COM/MON 校验。刹车控制单元接收 ADIRU 数据时,会同时检查 ADIRU 自己的 COM 和 MON 是否一致。
这意味着一件事,如果 ADIRU 在某个特定时刻的数据重构过程中, COM 和 MON 之间出现了哪怕非常短暂的不一致,这个 " 不一致 " 会沿着数据总线像病毒一样传播 —— 从 ADIRU 扩散到刹车控制单元,触发 BCU 的保护性切断。
三、减重的代价
看到这,如果你理解了 COM/MON 的偏执逻辑之后,还需要理解 A350 在硬件层面做的一个重大取舍。
A320 和 A330 装了三套液压系统,分别是 Green 、 Blue 、 Yellow 。
刹车用 Green 驱动正常制动, Yellow 驱动备用制动。即使 Green 完全挂了, Yellow 还在; Yellow 也挂了, Blue 还能给飞控面提供最低限度的操纵力。三层,层层兜底。
A350:从传统集中液压,逐渐转向更分散的电液驱动逻辑。
到A350这 砍掉了一套。
只剩 Green 和 Yellow 。第三套液压的功能交给了分散部署的局部液压驱动装置( EHA ) —— 小型化的、装在各个舵面旁边的独立液压泵,哪个舵面需要就给哪个舵面供压,不再铺设贯穿全机的第三条液压管路。
为什么砍?当然是为了梦想——减重。
一条贯穿 A350 那 65 米长机身的液压管路,加上液压油、泵站、阀门、管路支架,重量以吨计。砍掉它,换成几十个小型局部液压驱动装置分散布置,总重量能省下几百公斤。
省出来的重量变成了航程,变成了载客量,变成了运营经济性。每公斤省下来的都是money。
空客还把液压工作压力从传统的 3000 PSI 拉到了 5000 PSI—— 压力更高,管路就可以做到更细更轻,作动器也更紧凑。
A380也是 用的同一套思路。两套液压, 5000 PSI 。
代价是冗余裕度天生比三套液压少一层。三套的飞机坏一套还剩两套交叉覆盖,两套的飞机坏了一套就只剩最后的底牌。
而 5000 PSI 的细管路一旦发生泄漏,液压油的流失速度比 3000 PSI 的粗管路要快得多。
这是航空工程里永恒的交易:在安全裕度和商业竞争力之间走钢丝。
A350 不是简单地 " 少了一套液压 ", 它是把一部分风险从油管里挪进了数据链。管路轻了,系统聪明了,但故障的传导路径也从物理世界蔓延到了代码世界。以前你怕的是一根管子漏油,现在你还得怕一组数据让整套逻辑自我怀疑。
四、物理死局
把前面三块拼图拼在一起,基于公开的系统架构和已知的空客设计哲学,我们来推演一个纯理论的场景, 不是复述某一起事故,而是拆解这套逻辑走到尽头时的样子。
一架 A350 在正常飞行中, 3 号惯性参考单元 IR3 出现了数据异常。驾驶舱弹出 NAV IR 3 FAULT 。机组按标准程序关闭 IR3 。操作本身没有任何争议, QRH (快速检查单)上白纸黑字写着的处置步骤。
三余度变成双余度。 IR1 和 IR2 继续工作。飞机正常降落。到目前为止,一切都在 SOP 的范围内。
问题出在落地之后。
现代客机的刹车,不只是“踩下去”这么简单。
IR3 被关闭后,系统需要在只剩两套 ADIRU 的条件下进行数据重构。重构过程中,刹车控制单元发现剩余 ADIRU 发送的 COM 数据与 MON 数据出现了不一致。
可能只是微秒级的时序偏差。可能是两套 ADIRU 在重构瞬间输出了轻微不同步的加速度值。但对于那段偏执到骨子里的 COM/MON 校验代码来说,不一致就是不一致。没有 " 差不多行了 " 这个选项。
BCU 触发 Fail-Safe 。 BRAKES CTL 1+2 FAULT—— 两套刹车控制单元同时告警。正常制动,没了。
如果故事到这里就结束,飞机还有一条退路:蓄压器。
Green 和 Yellow 液压系统各有一个高压蓄压器,预充了液压能量,专门在液压泵失效时提供备用制动力。理论上,蓄压器里的存量足够飞机在地面刹停几次。
但 COM/MON 校验的崩溃不是发生在液压层面,而是发生在数据层面。底层的 ADIRU 数据链出了系统性问题。蓄压器的再充气逻辑同样依赖这条数据链是否正常。
BRAKES G/Y ACCU REINFLATE FAULT—— 绿 / 黄蓄压器再充气故障。
正常刹车没了。备用刹车的压力也上不来。自动刹车早就在第一轮告警中宣布失效。
碳刹车盘完好无损。 Safran 提供的碳纤维盘片没有任何磨损。液压管路里的油压充沛。 5000 PSI 的 Green 和 Yellow 系统本身运转正常。但介于你的脚和那些完好刹车盘之间的计算机,因为两组数据对不上,摊手不干了。
一个纯粹的 " 软件洁癖 " 导致的物理瘫痪。
五、前世:印度洋上空的50.625度
ADIRU 数据污染引发的系统级灾难,空客家族已经经历过一次。
2008 年 10 月 7 日。澳洲航空 QF72 ,空客 A330-303 ,新加坡飞珀斯。巡航高度约 11300 米。机长 Kevin Sullivan ,前美国海军战斗机飞行员。
12 时 40 分 26 秒, 1 号 ADIRU 开始发疯。
这台由诺斯罗普 · 格鲁曼制造的 LTN-101 惯性参考单元,其 CPU 发生了一种非常罕见的硬件级错误:它把一个代表 " 当前高度 11280 米( 37012 英尺) " 的二进制数据,重新标记成了 " 当前迎角 " 字段。
11280 米对应的二进制值,被飞控计算机解读为:迎角 50.625 度。
QF72事件:错误数据触发保护逻辑,飞机主动俯冲。
50.625 度意味着什么?正常巡航的迎角大约 2 到 3 度。超过 15 度就进入失速警戒区。
50 度 在飞控的代码世界里,这意味着飞机已经完全失速,正在以一种不可能的姿态失速。
飞控计算机没有理由怀疑这个数据。 ADIRU 是小脑,是一切物理感知的源头。小脑说你在失速,飞控计算机就认为你在失速。
高迎角保护程序启动。飞控向升降舵发出指令:推低机头,改出失速。
12 时 42 分 27 秒。第一次俯冲。
飞机机头下俯 8.4 度。机舱经历了 -0.8g 的负过载 —— 接近零重力。没系安全带的乘客被甩向了天花板,餐车腾空,行李舱盖弹开。两秒内掉了接近 200 米。
Sullivan 抓住侧杆试图拉起机头。但飞控电脑认为自己正在执行一个正确的保护动作, 你在失速,我正在救你,你为什么要拉杆?系统短暂地把 Sullivan 锁在了控制回路之外。
12 时 45 分 08 秒。第二次俯冲。机头下俯 3.5 度,掉落约 120 米。
两次俯冲, 119 人受伤,其中 14 人重伤。
澳大利亚运输安全局 ATSB 事后花了三年调查。最终报告里有一行让所有航电工程师脊背发凉的结论:
飞控计算机的软件,没有被设计来处理"以精确1.2秒间隔反复出现"的异常数据脉冲。
1.2 秒是飞控计算机在检测到一次异常 AOA 数据后的记忆缓冲期。
正常情况下,一次孤立的异常值会被缓冲期覆盖,系统用上一次的有效数据顶过去。但 LTN-101 的故障模式太会找自己的位置了, 它刚好以 1.2 秒的间隔连续输出错误数据。每一次伪造的 50.625 度迎角,精准踩在缓冲期刷新的边界上。系统来不及用旧数据覆盖,新一波错误数据就已经涌进来了。
这个时序上的巧合,在工程师编写代码的那一天,试问有谁能想到呢。
空客在事后给 A330 和 A340 机队发布了软件更新,增强了异常 AOA 数据的过滤能力。 LTN-101 硬件层面的根本原因,至今没有被完全复现。 ATSB 在报告中给了它一个定性:黑天鹅。
六、同一个恐惧的两张面孔
A330 和 A350 不是同一款飞机,出的也不是同一种毛病。但是它们的底层逻辑一模一样:
当飞机越来越依赖数据,而数据本身也会撒谎时,系统会怎么办?
空客的电传飞控哲学从 1984 年 A320 首飞起就定了调:系统比人聪明,系统替人兜底。
这套哲学经过 A330 、 A340 、 A380 ,一路传到 A350 ,底层架构从未重写。 COM/MON 双通道校验、 ADIRU 三余度表决、 Fail-Safe 保护性关闭 —— 这些基因在空客的每一款电传飞机里都能找到。
QF72 的飞控电脑做了一件事:基于被污染的数据,执行了正确的保护程序。数据说你在失速,保护程序就替你改出失速。保护本身没错,错的只是前提。
A350 的刹车 BCU 走向了同一类结局,只是方向相反:基于 " 不可信 " 的数据判定,执行了正确的保护性关闭。
COM 和 MON 对不上, BCU 就切断制动。切断其实本身没错,错的同样是前提 ——ADIRU 在数据重构过程中出现了短暂的不同步,而这个短暂的不同步被 COM/MON 逻辑当成了不可容忍的系统性故障。
只不过 QF72 的系统选择了 " 主动出手 ", 基于假数据猛推机头;而 A350 的刹车选择了 " 撒手不管 ", 既然数据不可信,那我就什么都不做。
一个是误杀,一个是见死不救。底层逻辑是同一个:
当保护机制建立在一个会撒谎的数据源之上时,保护本身就变成了武器。
七、踏板之下
在空客的驾驶舱里踩刹车,脚底的触感是均匀的、恒定的、人工模拟出来的轻微阻力感。
我们踩下去,传感器薄片把信号发出去,然后等系统回应。你不知道液压在不在工作,不知道蓄压器还剩多少压力,不知道防滑系统有没有介入。
踏板给你的反馈和系统的真实状态之间,隔着一个中间传话人。
你说 " 我要减速 " ,中间传话人把你的意思转译成 " 在当前速度、载荷、跑道摩擦系数下,施加多大的制动压力,同时保持多少防滑裕度 " 。
这层转译通常情况下还是精确的。但当中间传话人本身陷入了 COM/MON 数据矛盾的逻辑死循环,它就会沉默。
你的脚还在踩,踏板的阻力感还在(因为那是人工模拟的,和真实液压状态无关),但刹车盘那头,什么都没有发生。
波音 737 的驾驶舱又是另一个世界。
脚蹬的动作通过机械传动和刹车计量机构,直接传进液压制动系统。中间当然也有防滑、自动刹车和液压控制逻辑,但飞行员脚底得到的反馈,不是纯粹模拟出来的 "脚 感 " 。
踏板的阻力是真实的液压反推力,踩到底的时候,你的小腿肌肉能感知到系统正在以多大的力度夹紧刹车盘。
波音甚至在低制动力区间加了一个 " 刹车阀力感增强器 "—— 在你刚开始轻踩的时候主动增加踏板阻力,提前告诉你 " 刹车已经在工作了 " 。
这是为了弥补人类在低压区间感知迟钝的生理缺陷,用一个纯机械的小伎俩给飞行员喂了一颗定心丸。
787 走了另一条路:全电刹车。
电动马达驱动滚珠丝杠,直接夹紧碳刹车盘,连液压管路都不往轮舱里铺。但波音在踏板上依然保留了偏重的人工力感反馈,让从 737 和 777 转机型过来的飞行员不至于踩得太轻, 波音的飞行员被训练成 " 紧急时踩到底 " ,这种肌肉记忆不能因为换了一款电传飞机就丢掉。
反看A350 和 A380 的电传踏板,轻触即可。空客飞行员被训练成 " 精确施压 " ,让系统去计算最优的制动分配。
两种设计哲学没有对错, 空客的精确消除了人的粗暴操作的风险,波音的力感保留了人类对系统状态最原始的感知通道。
但是当系统悄无声息地 " 罢工 " 时,空客飞行员的脚底感觉不到任何变化。踏板的阻力还是那个阻力,因为那个阻力从来就和真实的制动力无关。
波音飞行员踩到底如果没反应,脚底传回来的那股不对劲,至少会多给他一个原始的判断反馈,这是出大事了。
机械反馈 vs 电传模拟:两种完全不同的飞行哲学。
八、结尾
COM/MON 校验在飞行员毫不知情的情况下,悄悄过滤掉了成千上万次微小的数据偏差。 Fail-Safe 在故障发生的瞬间切断了可能导致灾难的错误指令。
这套体系在 99.9999% 的时间里,是一座精密到让人窒息的安全堡垒。
但它有一个写在基因里的盲区:
它假设自己接收到的数据,经过足够层数的校验之后,就是真的。它相信只要COM和MON一致,指令就可以执行。它相信只要COM和MON不一致,切断就是正确的。
这个信仰在 QF72 的 11300 米高空被撕开了一道口子, COM 和 MON 都一致地选择相信了一个伪造的 50.625 度迎角,然后保持一致地命令飞机俯冲。
而在地面上,同一套 COM/MON 逻辑可能因为 ADIRU 数据重构过程中的短暂失步,一致地判定 " 数据不可信 " ,然后一致地切断所有制动。
一个在天上,让飞机俯冲。一个在地上,让飞机不肯刹车。看起来八竿子打不着,但都指向同一件事,这套系统不是突然变笨了,是它太相信自己那套判断流程了。
空客四十年来一直在给电传系统做加法。更多的传感器、更复杂的表决、更严格的 Fail-Safe 阈值、更多层的 COM/MON 交叉校验。每加一层都让系统在面对已知故障时更加坚不可摧。
但是所有这些冗余,都建立在同一种架构哲学之上。同样的 COM/MON 逻辑、同样的 Fail-Safe 切断策略、同样的 ADIRU 数据依赖链路。
当一个足够刁钻的故障模式 ——
一个工程师在写代码那天没有想到过的1.2秒间隔,一次数据重构期间的微秒级失步,穿透了这套设计哲学本身,所有的冗余会在同一个瞬间、以同一种方式、集体失效。
行业术语管这个叫共模故障。
共模故障:当所有冗余建立在同一逻辑之上。
通常它指的是同一个批次的硬件、同一份代码里的同一个 bug 。
但空客面对的这种共模故障更高维一些,不是某一行代码的错,是整套安全哲学在特定边界条件下的逻辑自洽性崩塌。
我们没法用 " 再加一层冗余 " 来修复它。因为我们加的那层冗余,用的还是同一套东西。
就像一个偏执固执的审计员雇了一个助手来监督自己, 助手和他用的是同一本教材当标准。
关于「飞机的账本」:拆飞机、拆系统、偶尔说说人。
往期系列:
麦道三部曲 ——
空客 A380 四部曲 ——
下一篇大概率聊点轻松一些的。最近航空圈还有通航圈有些有意思的事。
这类文章写起来费时间,读起来也比较费脑子。如果你身边有搞系统工程或者飞行的朋友,丢给他看看, 要么他会觉得你很专业,要么他会来找你吵架。不管哪种,都挺有意思。
点赞、推荐、转发,就是对这类内容最好的支持。
热门跟贴