不仅仅是战斗机,民用客机软件的重要性和作用也呈现出日益上升的趋势。韩国在20 世纪70 年代首次引进的波音747 所用软件由40 万行代码写成,1995 年引进的波音777 软件则达到了400 万行,最新型的波音787(Dreamliner)的内部软件由650 万行代码写成。民用客机对软件的使用越来越频繁,但奇怪的是,至今还没有软件造成的民用客机事故。大部分民用客机事故都是驾驶员失误或飞机系统不完备、设备不良等造成的,但这些原因引发的事故中,假如软件正常运转,有一些事故是完全可以避免的。
关岛惨案:大韩航空801 次航班
查找飞机失事的相关资料不难发现,历史上最严重的飞机失事案例中,韩国的大韩航空榜上有名。当然,这并不是说大韩航空的飞行事故频繁。但至少在目前为止发生过的所有空难中,大韩航空的两起事故使它一度站到了全世界的风口浪尖。第一次是在库页岛上空被苏联战斗机击落的大韩航空007 次航班;第二次则是在著名的疗养胜地——关岛,准备着陆的大韩航空801 次航班坠毁。这两次事故都排在史上最严重的空难前10 名或前20 名,比较有代表性。
这两次事故中,在关岛发生的这起大韩航空801 次航班的失事主要是由驾驶员的判断失误造成的。但是,假如软件能起到应有作用的话,就可以挽回225 条人命了。
坠毁前的记录
1997 年8 月6 日,韩国时间晚8 时22 分,一架波音747-300 飞机从金浦国际机场起飞。想到就要在关岛度假,237 名乘客无不怀着激动的心情登上了这架大韩航空801 次航班。起飞后约4 小时,当地时间凌晨1 时11 分(韩国时间12 时11 分),机长开始和副机长、飞航工程师进行着陆简报,也就是机长向副机长和飞航工程师说明着陆相关的必要信息。这次简报中,机长曾提及,关岛国际机场(正式名称为 Antonio B. Won Pat 国际机场,本书中称“关岛国际机场”)的下滑道(GlideSlopA)信标出现故障。
结束简报后,1 时13 分,副机长向塔台工作人员通报,飞机已经下降到2600 英尺,同时开始降低飞行高度。着陆貌似进行得还算顺利。飞机继续向关岛国际机场的跑道靠近,1 时39 分55 秒(坠毁前2 分31秒),近地警告系统感知故障并发出信号,驾驶舱立即陷入一片慌乱。
A下滑道:帮助飞机安全着陆的电子设备。该设备的定向电波会发射到机场跑道前方,飞机接收到这些电波后,就能以适当的下降角度进入跑道。它和定位器(Localizer)一样,都是仪表着陆必需的设备。
01:39:55 飞航机械师:“下滑道没问题吗?下滑道?”
01:39:56 机长:“是的,是的,没问题。”
01:39:57 飞航机械师:“唉,所以……”
01:39:58 不明:“你是让我看一下下滑道有没有问题吗?”
01:39:59 不明:“下滑道怎么出来了?”
01:40:00 副机长:“无法使用(Not Usable)。”
当时,塔台人员已明确告知机组人员仪表着陆系统中的下滑道信标出现故障,机组人员进行着陆简报时也确认了这一内容。如果当时机组人员向塔台方面重新确认信号内容,问题就能得到解决,但并没有人这样做。后经调查得知,地面上的无线电之类的设备发出的电波被误认为下滑道的电波。
这时,机长和副机长做出了令人无法理解的举动。下滑道出现故障的时候,飞机应该分级下降(如图16-3 所示),但他们当时却让飞机持续下降。1 时41 分11 秒(坠毁前1 分15 秒),大韩航空801 次航班从2000 英尺(约600 米)持续下降到1440 英尺。按照相关规定,距离机场跑道20 千米(11 海里A)到9.3 千米(5 海里)的范围内,高度均不可低于2000 英尺。但大韩航空801 次航班位于13 千米(7 海里)处时,高度已经低于2000 英尺。
A虽然并非国际标准,但“海里”是航空、海洋领域广泛使用的距离单位。NM是NauticalMile的缩写,中文译为“海里”。另外,表示轮船或飞机速度的“节”(knot)指的就是每小时行驶的海里数。
本可以阻止的事故
大韩航空801 次航班坠毁之前,曾经至少有两次机会可以阻止这次事故的发生。
第一次机会是确认外指点标(Outer marker)。外指点标设置在距离跑道一段距离的位置,它会向上空垂直发射电波。飞机驾驶员经过外指点标上空时会接收到该信号,以确认当前高度。但后来检查黑匣子的驾驶舱录音记录时发现,当时没有任何人确认外指点标的信号。假如确认了飞行高度,就能知道当时正处于低于规定高度2000 英尺的位置,也就可以避免悲剧发生了。
避免事故发生的最后一次机会是坠机之前。当时,机组人员正专心准备飞机降落。坠毁前12 秒, GPWS(Ground Proximity WarningSystem,近地警告系统)响起警报。
01:42:14 GPWS :“最低高度,最低高度。”(minimums, minimums)
这是GPWS 向驾驶员发出的最低高度警报,但机长、副机长、飞航机械师均未采取任何应对措施。3 秒后,GPWS 机械的播报声又响了起来。
01:42:17 GPWS :“快速下降。”(sink rate)
01:42:18 副机长:“可以快速下降!”(sink rate OK!)
“sink rate”是GPWS 发出的飞机正在快速下降的警报。对此,副机长给出了“可以快速下降”的回答。但下一秒,副机长听到飞航机械师说出“现在距离地面只剩下200 英尺(约60 米)”的时候,曾劝机长放弃着陆(missed approach)。
但机长并没有立即放弃着陆。如果发现机长的决定是明显错误的,副机长可以强行驾驶。遗憾的是,副机长并没有这么做。
01:42:21 飞航机械师:“看不到啊。”(飞机坠毁前6.22 秒)
01:42:21 副机长:“看不到。放弃着陆!”
01:42:22 飞航机械师:“复飞。”
飞机坠毁前6.22 秒,距离地面已不到60 米,但飞航机械师依然无法看到关岛机场的跑道。副机长也一样,他再次向机长建议放弃着陆。飞航机械师也建议机长复飞(Go Around,无法安全着陆或错误靠近跑道的情况下,着陆过程中重新上升高度,之后再着陆),但机长的判断却和副机长以及飞航机械师的判断都不一样,他并没有马上复飞。
直到飞机坠毁前3.7 秒,机长终于承认着陆失败。他立刻解除了自动飞行模式,试图使飞机上升。但是,想让重达几百吨的波音747 飞机重新上升并没有那么容易。高度在持续下降,GPWS 也几乎同时发出高度警报。
01:42:24.05 GPWS :“100 英尺。”
01:42:24.84 GPWS :“50 英尺。”
01:42:25.19 GPWS :“40 英尺。”
01:42:25.50 GPWS :“30 英尺。”
01:42:25.78 GPWS :“20 英尺。”
01:42:25.78( 撞击声)
01:42:32.52 录音终止
尽管驾驶员极力想让飞机回升,但最终没能战胜波音747 的惯性。结果,没能重新上升高度的大韩航空801 次航班撞上了关岛国际机场前面的尼米兹山。
假如软件发挥了应有的作用
假如当初机场的软件能发挥应有的作用,那么除了前面提到的两次可以避免事故发生的机会之外,说不定还能有一次机会——关岛机场的最低安全高度警报系统(Minimum Safe Altitude Warning,以下简称MSAW)。MSAW 在靠近机场的飞机低于正常高度时,向塔台人员发出视觉和听觉警报。问题是,当时关岛国际机场的MSAW 处于异常状态。
原因是MSAW 的软件存在问题。关岛机场的MSAW 系统曾经发出过多次虚假警报,飞机明明处于正常高度,系统却提示危险。1994 年秋,关岛机场的塔台工作人员向美国联邦航空管理局(FAA,FederalAviation Administration)表达了对MSAW 系统虚假警报等问题的不满。为此,FAA 修复了关岛机场的MSAW 软件,并于1995 年2 月重新投入使用。但是,修复后的软件存在致命漏洞。
说起来非常可笑,修复后的MSAW 只能在以关岛雷达为中心、半径100~101.8 千米(54~55 海里)的仅1.8 千米(1 海里)范围内发挥作用。这段区域距离关岛较远,是一段海域,飞机根本不可能在此区域低空飞行,所以MSAW 几近于一件废物。也正因如此,事故发生时,位于关岛雷达半径100 千米以内的大韩航空801 次航班虽然低于安全高度,但没有引发任何警报。
假如MSAW 当时能发挥应有的作用,大韩航空801 次航班撞到尼米兹山之前的64 秒,塔台人员就能知道飞机低于安全高度。但是,MSAW 没有发出任何警报,能阻止惨案发生的一次决定性的机会就这样错过了。
美国航空965 次航班
1995 年12 月20 日,美国东部标准时间晚9 时45 分左右,美国航空965 次航班在哥伦比亚卡利国际机场(正式名称为 Alfonso BonillaAragon 国际机场,本书中简称为“卡利国际机场”)附近的山上坠毁。这次事故造成159 人丧生,4 人重伤。
当天下午,美国航空965 次航班在美国迈阿密机场等待起飞。预定的起飞时间是16 时40 分,但由于美国东北部遭遇飓风袭击,部分航班延误,这些航班上的一些乘客需要转乘965 次航班。因为等待这些乘客和他们的行李,直到17 时14 分(比预定时间晚34 分钟)才完成起飞准备。但是,并非完成起飞准备就能起飞。当时是西方最长的假期——圣诞节连休,迈阿密机场挤满了起降的机群。为此,965 次航班在地面又等待了1 小时21 分,之后才从迈阿密机场起飞,朝着目的地——哥伦比亚卡利国际机场出发。起飞时间是18 时35 分,比预定出发时间晚了大约2 小时。
虽然出发得有点晚,但飞行过程还算顺利。965 次航班使用的是当时最新的机型——波音757,事先在电脑中输入航线,飞机即可沿航线自动飞行。起飞后约3 小时,21 时30 分左右,965 次航班到达哥伦比亚卡利国际机场附近上空。
卡利机场左右两边都是高山,正好位于较长的山谷地形中(如图16-7 所示,颜色越深表示海拔高度越高)。因此,制定航线时,使965次航班从机场北侧直接着陆,或者飞过机场后掉头,在机场南侧着陆。像其他机场一样,卡利机场也设有帮助飞机安全着陆的无线电导航系统(VOR)。波音757 上安装的计算机系统接收到VOR 发射的信号后,可以使飞机安全着陆。
当时,965 次航班要想在卡利机场降落,应依次通过机场北侧约66千米处的TULUA 无线电导航系统和约17 千米处的ROZO 无线电导航系统。飞过卡利国际机场后,在机场南侧的CALI 无线电导航系统附近掉头,最后在机场南部着陆。
开始出错
美国航空965 次航班到达距离卡利国际机场北侧约100 千米时,首次与卡利塔台进行了通信。
[21:34:40 ~ 21:34:57 通信内容]
机长:“卡利塔台,我是美国航空965 次航班。”
塔台:“美国航空965 次航班,欢迎你,请讲。”
机长:“美国航空965 次航班正从23 000 英尺下降到20 000 英尺。”
塔台:“距离卡利(机场)还有多远?”
机长:“63 英里(约116.6 千米)。”
好奇怪啊!按理说塔台应该通过雷达了解965 次航班的准确位置,但它反而需要询问965 次航班的当前位置。其实,卡利国际机场存在很大问题。1992 年,哥伦比亚反政府游击队炸毁了卡利国际机场的雷达系统。因此,塔台无法掌握进入机场的飞机的飞行位置,必须与飞机进行无线通信才能获知。这也是为什么塔台会询问美国航空965 次航班的位置。
[21:34:59 ~ 21:35:27 通信内容]
塔台:“知道了。美国航空965 次航班,要去卡利的话,需要下降并保持在15 000 英尺高度。高度仪3002……请在TULUA 报告。”
(“roger, is cleared to Cali VOR, uh, descend and maintain one, fivethousand feet. altimeter three zero zero two.... no delay expect for approach.report uh, Tulua VOR.”)
机长:“知道了。确认卡利方向,在TULUA 报告。高度15 000 英尺,高度仪3002,全部正确吗?”(“OK, understood. cleared direct to CaliVOR. uh, report Tulua and altitude one five, that’s fifteen thousand threezero.. zero.. two. is that all correct sir?”)
塔台:“对。”
这是飞机降落前和塔台人员的一段正常通信内容。不过特别的是,卡利国际机场的塔台人员完全不了解965 次航班的位置,所以为进行有效管制,他们要求飞机经过Tulua VOR 时向自己报告(“请在TULUA报告”)。但是在这里,机长犯下了第一个错误。由于和塔台人员的英语沟通出现问题,机长将“ cleared to Cali VOR”理解为“立即飞向CALIVOR”。为此,机长在飞行管理系统(Flight Management System,以下简称FMS)中将飞行路线变更为朝向CALI VOR(如图16-9 所示)。这次飞行路线的变更程度不是很大,所以不存在太大问题。但路线变更导致之前飞行路线上的VOR(TULUA、ROZO)的数据都被清零,驾驶员面前的导航屏幕上的TULUA 和ROZO 无线电导航也消失了。就在此时,飞机飞过了此前塔台人员嘱咐经过时一定要通报的TULUA VOR。
21 时36 分31 秒,卡利国际机场塔台询问965 次航班机长,是否要取消原定在01 号跑道着陆的计划,改为在19 号跑道降落。
塔台:“风力较小。是否要在19 号跑道着陆?”
飞机之前的飞行路线是在机场南侧的VOR 掉头,迂回一周后在机场着陆,但在机场北侧着陆可以节约一部分时间。当时已经比预计抵达时间晚点了2 小时,965 次航班的驾驶员应该想尽可能早一点降落,所以不可能拒绝这个提议。机长和副机长简单沟通后,向塔台表达了这层意思。塔台之后告诉飞机,经过ROZO VOR 后进入19 号跑道。同时又强调了一遍,经过TULUA VOR 时要报告。
虽然塔台反复称,经过TULUA VOR 时要报告,但机长已经将FMS 的TULUA VOR 清零,而且飞机已经飞过了。因此,驾驶舱内的人当时根本就不知道TULUA VOR 在什么位置。机长决定:与其艰难地寻找TULUA VOR,还不如向ROZO VOR 飞行。于是,他向塔台询问是否可以立即向ROZO VOR 飞行。
机长:“可以直接飞向ROZO 吗?”
塔台:“先去ROZO,再从19 号跑道进入。风力较小。”
机长:“从ROZO 到19 号跑道。明白。”
塔台:“经过TULUA 时请报告。”
由于没有雷达,塔台一直无法掌握965 次航班的具体位置,只能再一次要求飞机经过TULUA VOR 时进行报告。但是,965 次航班早已飞过TULUA VOR,而且机长脑中也早就没有意识到需要报告了。
机长和副机长当即改变飞机的飞行高度和路线,向着ROZO VOR飞去。更改降落路线后,距离卡利国际机场北侧39 千米处就应该完成从20 000 英尺(约6096 米)到5000 英尺(约1524 米)的下降。因此,驾驶员打开了减速板(speed break),开始急速下降。965 次航班坠毁之前,减速板一直处于打开状态。
965 次航班急速下降的过程中,驾驶员将着陆表中ROZO VOR 的识别码“R”原封不动地输入FMS,表示将飞往ROZO。驾驶员输入“R”后,FMS 的数据库就给出了12 个可供选择的地点,地点列表是按照现在距离飞机的最近距离顺序排列的。驾驶员认为距离现位置最近的应该是ROZO VOR,所以选择了列表中的第一项。但是,驾驶员实际选择的根本不是ROZO VOR,地点列表中根本就没有ROZO 这一项。当时排在最前面的并非ROZO,而是距离卡利东侧大约150 英里的哥伦比亚首都波哥大附近的ROMEO VOR。
原来,虽然驾驶员手中的着陆表上的ROZO 识别码是“R”,但FMS 数据库中存储的ROZO 信标台的识别码是“ROZO”,而非“R”。也就是说,驾驶员只有输入“ROZO”(而非图表上的“R”)才能向ROZO VOR 飞行。尤其是ROMEO VOR 和ROZO VOR 的频率一致,即使弄混了也很难发现。错误就这么发生了。
驾驶员在FMS 中选择ROMEO VOR 为目的地后,在自动操作系统的指挥下,飞机开始慢慢向左回旋,向ROMEO 飞去。按照美国航空的规定,通过FMS 改变航线时,驾驶员之间要相互确认,但965 次航班的机长和副机长却省略了这一步。由于要降落到5000 英尺高度,飞机一直在快速下降。当时飞机正向着错误的方向飞行,但改变航线的驾驶员们却一味相信飞机的自动操作系统,没有注意实际的飞行方向。很快,965 次航班就进入了卡利国际机场两侧险峻的山区。
飞机从15 000 英尺(4572 米)高度持续下降时,卡利国际机场的塔台再次询问了965 次航班的当前位置。如果有雷达就可以及时警告965 次航班,他们正沿着错误的路线飞行,也就可以阻止事故发生。而965 次航班接收到卡利机场的无线电信号后,才发现飞机正沿着错误的方向飞行。
“我们现在在哪?”
机长和副机长都慌了神,他们根本不清楚现在所处的位置和飞机飞行的朝向。不过,既然已经知道飞机正沿着错误的方向飞行,那就先取消向ROMEO 的自动飞行,修正FMS,使飞机向CALI VOR 前进。飞机又开始向右转。当时,美国航空965 次航班的高度是13 000 英尺,每分钟下降2700 英尺。
驾驶员仍然处于混乱状态。飞机很快就下降到10 000 英尺。驾驶员决定向ROZO VOR 飞行,于是再次更改航线。但当前位置和ROZOVOR 中间有一座高山。当时没有月光,一片漆黑,驾驶员没有发现前方有山。
驾驶员发现前方有山时,飞机已经下降到了9000 英尺。飞机撞山前12 秒,GPWS 机械的播报声在驾驶舱内响起。
21:41:15 GPWS :“撞地,撞地,哔——哔——”(Terrain, terrain,whoop, whoop…)
警报表示飞机有可能撞地,一座大山开始慢慢出现在驾驶员眼前。机长大吃一惊,马上解除了自动操作程序,然后将操纵杆拉到最大限度,使飞机上升。但由于太晚才发现前方有山,GPWS 的警报也不够及时,而且之前为了减速,减速板也处于打开状态,所以飞机一时无法获得足够的动力。最终,965 次航班没能越过山峰,坠毁在卡利国际机场东北部的山顶。
部分责任在于软件
965 次航班坠毁造成159 人遇难,另有4 人奇迹般地生还。这是波音757 的飞行史上造成人员伤亡规模最大的一次空难。
另外,这也是自1988 年泛美航空爆炸事故(恐怖爆炸袭击造成270 人遇难)以来,美国的主要航空公司遇难人数最多的一次事故。空难发生后,美国航空将965 次航班更名为921 次航班,同时将ROZOVOR 的名字改为PALMA, 将识别码“R” 更改为PALMA 的缩写“PL”。
除了人员伤亡,这次空难给整个航空业也带来了不小的震撼:装有最尖端飞行系统的波音757 竟然撞到了山上。虽然责任主要在于驾驶员没有确认航线,但软件错误在本次空难中也难辞其咎。
波音757 飞行系统的供货商是霍尼韦尔公司,负责该系统软件的是杰普森•桑德森公司。遇难者遗属向美国航空提起诉讼的同时,美国航空也向这两家公司提起诉讼,认为二者对965 次航班空难负有部分责任。
最终判决,美国航空负60% 的责任,霍尼韦尔公司和杰普森公司分别负10% 和30% 的责任。