相信大家看到最近埃航一架波音 737 MAX 8 客机在飞往肯尼亚首都内罗毕途中坠毁。飞机上载有 149 名乘客和 8 名机组人员,其中8名中国人。
而在半年前,狮航一架波音 737 Max 8 喷气式客机撞向印度尼西亚的爪哇海,造成 189 名乘客和机组人员死亡。调查人员称该飞机的飞行控制软件出现“故障”。

在经历了两次空难之后,波音公司承诺,最迟在下个月,针对全球所有波音 737 Max 型飞机进行软件更新。
而在此之前波音777客机的软件系统中,99%的代码由Ada语言编制而成;Ada 语言最初设计是为了构建长周期的、高度可靠的软件系统。Ada 包含了很复杂的功能以支持实时(real-time),并发程序设计(concurrent programming)。1974 年时,美国国防部(DoD)意识到开发和维护嵌入式系统(固化在硬件中的系统,如导弹弹导系统)耗费了过多的时间,精力和资金。因此在 1977 年,DoD 起草了一份建议,并由Cii-Honeywell Bull 公司开发一门新的语言Ada。1983,Ada 成为了一个 ANSI 标准 ANSI/MIL-STD-1815A。此年成为一个 ISO 标准。波音公司的商用飞机[787, 777, 767,757, 747-400, 737-200,等等]、K767坦克、战斗机[F-14,F-16,F-22,等]、铁路系统[法国高速铁路、香港郊外铁路、伦敦地铁、巴黎地铁和郊外铁路、等]、通信卫星、GPS系统等等都用Ada语言进行开发。
据美国有线电视新闻网(CNN)2018年11月14日报道,狮航方面表示,波音737 MAX 8机型新装的防失速系统在特定情况下会自动触发响应,让飞机低头俯冲下降等,这可能是导致飞机坠海的原因之一。在狮航事故记录和波音发布的分析里,失事前几分钟,由于高攻角传感器(AOA)错误数据传给了飞控系统,导致飞机在正常情况下开始不断下压机头。飞行员在 11 分钟内连续手动拉升 20 余次终告失败,坠海罹难。
安装在失事飞机上的飞行器失速保护系统收到了错误的飞行状态参数信号(飞机攻角参数等)或者其自身潜在系统故障开始发作,致使该飞行器失速保护系统错误认为飞机处于失速状态,触发失速保护系统开始工作,接管飞机进行如下操作:使升降舵下偏,导致飞机尾部抬起和机头朝下,控制飞机以机头骤降的方式化解并不存在的“失速”。失事飞机下降过程中出现过一次拉升后又重复下降直至坠毁的现象,该现象表明飞行员可能在与飞行器失速保护系统争夺飞机控制权,但是飞行员没能获得成功,导致飞机在高速撞击海面时解体,酿成了机毁人亡的惨剧。
这个自动控制下压机头的系统,名叫 MCAS,意为自动纠正失速系统,这是波音 737 MAX 的一种操纵辅助系统。它有几个特点:

发现失速后,程序只相信主传感器,不与备份传感器核实。(同样的情况空客的飞机则会交给飞行员处理。)
一旦相信,不通知飞行员,直接操纵机翼。
飞行员手动操作后,仍旧会每五秒自动执行,让飞行员不得不与飞机较劲。
程序开关非常隐蔽。
狮航事故后,波音表示正在进行软件修复,以降低风险。
从技术角度来说,这是个很容易修正的低级错误。全球几百架运行着的波音 737 MAX 8/9 等着打这个补丁。然而,这个修复被拖延了好几个月,直到埃航事故发生。
延误的原因,其中之一是联邦官员和波音公司安全专家对于需要进行多大改动,有意见分歧。波音公司认为更新这个 BUG 很简单,减少下压幅度就行。而联邦官员认为 189 条人命是大事情,必须大改,确保单个传感器错误信号不会触发 MCAS 系统。加上波音公司和美国政府的低效,这个性命攸关的 BUG,硬生生被拖到四个月后。
但显然因为这次全球停飞事件,波音才很快决定“Make Key Change in 737“,并宣布将在 4 月份交付。
据了解,波音737 Max使用的编程语言是 PHP。那问题来了,PHP,为啥背了这个锅。我同屋的兄弟不服,他说PHP才是最好的语言。他一直坚信:Life is short,只用PHP。鱼哥觉得软件本身的Bug,肯定不是使用了某个语言引起,可能还需要官方进一步调查核实。
继续阅读
阅读原文