1986年1月28日,“挑战者号”航天飞机在升空后不久爆炸,6名职业宇航员和1名中学教师不幸罹难。这个国家遭受了沉重的打击,NASA(美国国家航空航天局)颜面扫地、威望受损,而在这之前的很多年里,NASA均能成功完成空间发射任务——至少没有出现致命的失误。事后政府成立了一个调查委员会,除了查清事故原因外,还要求调查委员会给出具体措施杜绝此类灾难再次发生。该委员会由国务卿威廉·P.罗杰斯率领,成员有政治家、宇航员、军方代表和一位科学家。理查德·费曼就是调查委员会里唯一的科学家,他参与调查也许已经预示:挑战者号失败的原因不会成为一个永远的谜,一定会被找到。费曼比绝大多数人更有勇气,他还不辞辛劳,乘坐飞机穿梭于全国各地,找到地面工作人员。这些工程师坦言,在这次太空计划中,宣传起了主导作用,审慎和安全则退居其次。费曼的报告差点被调查委员会压下来,因为委员会认为这会让NASA很难堪。但是费曼据理力争,最终让自己的调查报告被收录在内——它只能屈尊被放在附录里。在调查委员会举办的现场直播的记者招待会上,费曼做了他那个著名的现场实验,实验材料仅仅是航天飞机上的一个密封圈(或O形环)和一杯冰水。这个实验形象地说明了是关键部位的垫圈出了问题,原因正如工程师们警告的那样——天气太冷不宜发射,而各级管理者为了能按时发射以借此在上级面前邀功,对这个警告置若罔闻。以下就是那个具有历史意义的调查报告。
导语
对于太空飞船机毁人亡的这种事故的风险评估,人们的看法分歧很大,他们给出的风险范围在1%到0.001%之间。一线工程师给出的风险评估值较高,而管理人员给出的评估值则很低。风险评估结果相去甚远,其原因何在?它又会带来什么后果?0.001%的出事概率意味着:在300年时间里,每天都发射一架航天飞机,只有一架航天飞机会发射失败。这么说来,我们就更有理由追问:到底是什么原因让管理人员这么信任飞船的性能,甚至到了迷信的地步?
我们还发现,《发射准备状态评估》中准许发射的标准逐渐被放宽。之前在同样风险条件下的发射没有失败,人们往往试图用这种侥幸成功的案例证明下次再进行类似的发射是安全的。因此,显而易见的缺陷一次又一次被容忍,有时他们会漫不经心地去修补缺陷,有时干脆推迟发射——因为隐患还没有被排除。
我手头的资料有这么几个来源。首先是以书面形式呈现的“准许发射的标准”的若干个版本,从中可以看到标准一路变化的痕迹:原先严格的标准不断被放弃、被偏离。还有,《发射准备状态评估》中记载的每次发射记录里包括论证此次发射风险可接受的论据。另外还有安全官员路易斯·J.乌利安基于固体燃料火箭成功发射的历程给出的第一手证词以及相关报告。身为发射中止安全委员会主席,他还对一个问题做了深入研究:对将来行星探测计划发射任务中钚动力装置(RTG[1])可能导致的放射污染的评估。我也掌握了NASA对这个问题的研究资料。为了了解航天飞机主发动机的发展情况,我拜访了马歇尔太空飞行中心的管理人员和工程师,还和洛克达因公司的工程师私下碰了头。我还拜访了为NASA当过发动机顾问的独立力学工程师(来自加州理工学院)。为了收集航空电子设备(计算机、传感器和效应器)性能可靠性的资料,我专程去了一趟约翰逊航天中心。最后,还有1986年2月由喷气推进实验室的摩尔等人递交给NASA总部空间飞行办公室的报告——《对可重复使用载人火箭发动机的潜在应用的评估认证》。该报告谈论了美国联邦航空管理局和军方用于认证燃气轮机和火箭发动机的方法。我也私下访问了这份报告的作者们。
固体燃料火箭
安全官员研究了之前所有的火箭发射,然后评估了固体燃料火箭的可靠性。数据显示,总共发射将近2900次,其中121次失败(每发射25次失败1次)。但是数据里面包括所谓的早期错误,也就是每新出一种火箭,在最初几次试射中发现设计错误并予以修改。对于技术成熟的火箭来说,更合理的数字应该是每发射50次失败1次。如果能仔细挑选零部件和反复检验,失败率应该可以控制在1%以下,但是以今天的技术,0.1%可能无法达到(航天飞机上有两只火箭助推器,而固体火箭助推器的失效概率则决定了航天飞机的失败概率,所以航天飞机的失败概率应该翻倍)。
NASA官员辩解说,他们掌握的数据要低得多。他们指出,这些是不载人火箭的数据,但是,航天飞机是载人的飞行器,所以它“发射成功的可能性必然非常接近100%”。我觉得,这种说法想表达的意思不太清楚。是接近100%,还是“应该”接近100%?他们继续解释:“从以往的经验来看,这个极高的发射成功率已经使载人航天项目和不载人航天项目有了根本的区别;换句话说,一个使用数字概率来评判,另一个则是工程判断。”(这段话出自《行星任务中RTG安全性分析的航天飞机数据》3-1和3-2页,出处:NASA约翰逊航天中心,日期:1985年2月15日。)确实,如果失败概率低到0.001%,那就需要无数次实验来证明它(从那一连串非常成功的发射中你可能得不到发射失败的数字,只可能得出一个概率——迄今为止发射的总次数还不到10万)。但是,如果实际的失败概率没有这么低,通过合理的推测,发射飞船时就会出现这些情况:故障、事故未遂,甚至是事故。事实上,NASA以往的经验已经表明,就是这些偶尔的故障、未遂事故和事故在警告人们:发射失败的可能性并非那么小。不要通过历史经验决定飞行器的可靠性——而安全官员恰恰与这个呼吁背道而驰,同样与这个呼吁相悖而行的还有NASA,事事必提过往经历,就像之前说到的那个报告,一开头就是“从以往的经验来看,这种极高的发射成功率……”最后要说的是,如果我们用工程判断来代替标准的数字概率,那么为什么管理官员的估算和工程师的判断会有这么大的差异?看来,不管是出于什么目的——无论对内还是对外,NASA官员确实夸大了其航天产品的可靠性,甚至到了幻想的地步。
发射许可和《发射准备状态评估》的历史这里就不再重复叙述了(请参见调查委员会报告的其他部分)。在以往的发射中,一种现象毋庸掩饰,那就是允许使用已经发生腐蚀和漏气的飞船密封圈。很明显,“挑战者号”航天飞机就是一个例证。在它之前的类似发射被人们多次提到:都允许使用此类密封圈,都能成功发射,于是就被当成了安全的证据。但是腐蚀和漏气并不是设计的结果,它们在警示一定有什么地方出问题了。设备运行不符合预期情况,那就说明有危险:飞船以这种意外并且我们不能完全理解的方式运行,可能导致更大的偏差。之前这个危险没有导致大灾难,这并不能保证下一次不会发生大灾难,除非我们完全掌握了它的情况。这就像是玩“俄罗斯轮盘赌”一样,第一枪子弹空发根本不能让人完全松一口气,说不定开下一枪子弹就出膛了!造成密封圈腐蚀和漏气的原因以及会导致的后果,人们都不是很清楚。并不是每一次发射和所有的连接处都会发生腐蚀和漏气现象,这里头随机的成分很高。有时候,即使所有的条件都符合要求,为什么还是会发生大惨剧?
尽管每一次的情况都不相同,但是官员们的表现很是胸有成竹——他们彼此给出明显很符合逻辑的论证,经常用之前“成功”的发射作为依据。比如,在判断代号为51-L的飞行任务是否安全时——尽管在这之前51-C飞行出现过O形环(密封圈)腐蚀现象,他们指出,O形环腐蚀的深度只占到半径的1/3。因为先前一次切割O形环的实验证明:只有当切割的深度达到一个半径时,O形环才会失效。我们对造成腐蚀的因素知之甚少,而这一次发射,在不同的条件下腐蚀很有可能更厉害一些,他们非但没有认真考虑这个因素,反而声称“安全因子是3”。“安全因子”原本是工程术语,在这里使用这个术语显得很怪异。如果我们建造一座桥,要求它经受住一定的载重量,同时桥梁不会发生永久变形、开裂或折断,那么所用材料的实际承受力通常应该达到预计载重量的3倍。这个“安全因子”考虑到了以下因素:不确定的超载,不可知的额外负荷或者材料本身可能有意料不到的缺陷,等等。假设一下,现在预定载重加到这座新建成的桥上,而一根桥梁出现了一条裂缝,这就是桥梁设计上的失败。即便这座桥没有塌,因为裂缝的长度只有桥梁长度的1/3,但是这根本和安全因子没什么关系。固体火箭助推器里的O形环的设计初衷不是为了有朝一日它会腐蚀掉。O形环的腐蚀说明火箭某个地方出了问题,它不是判断飞行器是否安全的一个指标。
不完全掌握导致O形环腐蚀的原因,人们根本不可能断定这一点——下回导致的腐蚀不会比前一回严重3倍。然而,官员们自欺欺人,自以为是,他们完全不顾一个事实,即发射飞船的条件每次都不同。他们设计了一个数学模型来计算腐蚀的程度,然而这个模型不是基于物理学的理解,而是以是否符合实证曲线为判断依据。说得更具体一些,他们设想一股热气流冲到O形环上,并在停滞点上测出热量值(到此为止,物理上还是合理的,符合热力学规律)。但是,在测定多少橡胶被腐蚀掉时,这个热量是唯一起作用的因素——而计算热量的公式出自用相似材料做实验得出的数据。这个经验公式用对数表示就是一条直线,因此他们把腐蚀程度定为热量值的0.58次方——0.58是由最接近的一个符合点确定的。无论如何,用其他数字代入公式,他们证实那个模型能推测出腐蚀的程度(腐蚀深度是O形环半径的1/3)。没有什么比相信这种答案更离谱的了!这个模型里不确定性比比皆是。气流的强度可能无法预测,它取决于油灰里形成的孔。漏气现象表明即使O形环没有被腐蚀或只是部分腐蚀,它也会失效。大家都知道,经验公式是靠不住的,因为那条拟合曲线并没有穿过那些把它画出来的数据点。很多点都不在曲线上,实际数值与曲线上相应的点的数值有两倍的差距——要么位于曲线上面,要么位于曲线之下。单从这一点看,对O形环腐蚀严重程度的估算翻一番也是合理的。公式里其他常数也有类似的不确定性,此外,还有别的一些不确定性。使用这个数学模型时,一定要密切关注诸多的不确定因素。
液体燃料发动机
在51-L飞行任务中,航天飞机的三个主发动机表现都很完美,一直到最后时刻,当燃料供应不足时发动机关闭。接着一个问题出现了:如果发动机失灵,我们也像调查固体火箭助推器那样去仔细调查它,我们是否会发现类似的弊病——NASA不够重视液体燃料发动机的缺陷,产品可靠性不断降低。换句话说,导致事故发生的管理漏洞只限于固体火箭助推器部门,还是普遍存在于NASA?为了得到这个答案,我还调查了航天飞机的主发动机部门和电子设备部门,但是我还没有调查轨道飞行器和外部燃料箱这两个部门。
与固体火箭助推器相比,发动机的结构要复杂得多,涉及的大量工程问题要求也更精细。总的来说,发动机的工程质量很高,其运行中发现的不足与缺陷显然也很受重视。
通常这种发动机(用于军用或民用飞机)的设计方式可以被称为“组件系统”或者“自底向上”体系。首先,必须彻底了解要使用的材料(比如用于制造涡轮叶片)的性能和局限性,而且要在实验台上测试来确定这些特性。掌握这些情况之后,稍大一些的部件(比如轴承)的设计和测试要单独进行。一旦发现有缺陷和设计错误,就要通过进一步的测试进行调试修正和验证。由于每一次只测试一种零部件,所以这些测试或修正的成本不会特别高。最后,我们开始逐步设计整个发动机,并使之符合必要的规范。到这时候,发动机成功的时机到了,或者说任何故障都可以很容易被锁定和分析,因为故障的模式、材料的局限性等都已经摸清楚了。调试发动机并解决最后遇到的难题也显得没有那么困难,因为在这之前,大多数严重的问题都已经被发现并被及时处理,花费的成本也不高。
但是,对于航天飞机主发动机的设计,采用的却是另一种方法,我们可以说,它是“自顶向下”的方法。发动机的设计和组装一步到位,几乎没有对材料和部件进行细致的初步研究。所以,当轴承、涡轮叶片、冷却管等出现问题的时候,很难找出原因和解决问题,代价也要昂贵得多。比如,高压氧涡轮泵的涡轮叶片出现了裂痕,那么,问题原因出在哪里?是材料本身的缺陷,还是有氧环境对材料性质有影响?是启动或关闭时的热应力,还是稳定运行时的振动和应力?抑或其主要原因在于某些速度下产生的共振效应?还有很多其他可能性。从出现裂纹到它导致机器失灵,这期间需要多长时间?这个过程和机器功率在多大程度上相关?利用组装好的发动机作为试验品来解决这些问题,这个代价太高了。我们不会为了找出故障所在和弄清楚为何发生故障而牺牲整个发动机。但是,想要做到对发动机工作时的性能可靠性心里有数,就要精确掌握这些信息。没有细致的了解,就不可能有信心。
自顶向下的方法还有一个更大的缺点,那就是:如果某个缺陷被发现,除非重新设计整个发动机,否则一个简单的修补操作——比如改变涡轮罩的形状——可能都很难实现。
航天飞机主发动机是一个非常不同凡响的机器,与之前的所有发动机相比,它的推重比是最大的。它与那些发动机的相同点很少,或者可以说是截然不同的。因此,不出所料,各式各样的缺陷和困难层出不穷。不巧的是,它的设计方式是“自顶向下”的,所以那些缺陷很难被发现和弥补。设计一架能重复使用55次的航天飞机的目标至今也没有实现(总共工作27000秒,每次发射或试验用时500秒)。现在,这种主发动机需要非常频繁地维护和更换重要部件——如涡轮泵、轴承、薄片金属罩,等等。每飞行3次或4次,高压燃料涡轮泵就不得不更换(这个问题现在可能已经解决了),每飞行5次或6次,高压氧涡轮泵就要更换——充其量是预期耐用程度的10%。但是,我们主要关心的是决定主发动机可靠性的因素。
在过去总共250000秒的运行过程中,发动机大概出现过16次严重故障。工程人员密切关注这些故障,并试图尽快修复它们。他们采用的方法是在特殊设备上做实验——这些设备是专门针对这些问题而设计的;或是根据一些线索(比如裂纹)仔细检查发动机;或是做大量的研究和分析。这样一来,虽然有自顶向下设计带来的诸多困难,但是工程人员已经通过努力工作解决了很多问题。
下面是部分问题清单。那些带星号(*)的是可能已经解决的问题:
高压燃料涡轮泵(HPFTP)涡轮叶片裂缝(也许已经解决)。
高压氧气涡轮泵(HPOTP)涡轮叶片裂缝。
强力火花点火器(ASI)线断裂。*
净化止回阀故障。*
强力火花点火器内室腐蚀。
高压燃料涡轮泵涡轮的金属薄板开裂。
高压燃料涡轮泵冷却剂衬垫故障。*
主燃烧室输出弯管故障。*
主燃烧室输入弯管焊点偏移。*
高压氧气涡轮泵亚同步旋转。*
飞行加速安全中止系统(在冗余系统里出现部分故障)。*
轴承碎裂(已部分解决)。
4000赫兹的振动造成一些发动机不能运作,等等。
在这些已经解决的问题中,大多数是新型火箭设计早期的难题,因为有13个问题出现在头一个125000秒,只有3个问题出现在第二个125000秒。自然,你绝不能确信所有的隐患都被找出来了,何况,在某些问题上,人们可能连故障原因还找不准,就采取了某些补救措施。所以,我们做这个推测并非全无道理:在接下来的250000秒,可能至少会出现一次事故,每次发射中,每个发动机可能出现事故的概率是1/500。每一次发射有3个发动机在工作,但是可能会出现一些意外,而且这可能会影响其中一个发动机。如果只有两个发动机在工作,发射任务就会失败。因此,我们可以这样说,由于未知意外因素的存在,对于航天飞机主发动机故障可能导致发射失败的概率,我们的估计不能低于1/500——甚至是他们自己也不能过于乐观。此外,我们还必须考虑那些已知的但是还没有解决的问题(上文列出的问题中没有带星号的)可能导致的后果。这个问题我们稍后再讨论。(火箭发动机制造商洛克达因公司的工程师,他们在综合考虑后给出的失败概率估计值是1/10000;马歇尔太空飞行中心的工程师给出的数值是1/300;与此同时,作为这些工程师负责汇报的对象,NASA却声称失败概率只有1/100000;而被NASA聘为顾问的一位独立工程师,则认为合理的估计值应该是1/100或1/50。)
发动机的合格标准的变化历程让人很困惑,而且很难解释得通。最初的标准好像是这样的:两个样机顺利工作的时间都必须达到(火箭成功发射)要求时间的两倍,那就是发动机的工作时间的标准(2×标准)。这个起码是联邦航空局的惯例标准,NASA看似也采纳了这个标准——最初的标准是能顺利发射10次(因此要求每个样机能成功发射20次)。显然,最理想用作参照物的发动机应该是那些总工作(飞行+试验)时长最长的发动机——所谓的“领航船”。但是,假如第三个样机或其他样机在很短的时间内失灵了,那该怎么办呢?当然,即便前两个发动机正常工作的时间超长,我们也不能就此认为这次火箭发射是安全的。也许,最短正常工作时间更能代表真实的风险,所以,如果将安全因子设为2,火箭使用的时间只能限制为最短时间的一半。
安全标准逐渐降低的例子有很多,我们就拿高压燃料涡轮泵的涡轮叶片做例子。首先,试验整个发动机的思路不适用。每个发动机的很多重要部件(比如涡轮泵)都在频繁地更换,所以安全规则的对象必须从整个发动机转移到零部件。如果两个样机能够安全工作一段时间,我们就把这段时间的1/2定为高压燃料涡轮泵标准安全时间(当然,事实上,人们已经不再坚持把10次安全发射的时间定为标准安全时间)。但是,怎样才算“安全”工作?在实际操作中,为了真正确保安全,联邦航空局施行的标准比2×标准还严苛——他们把涡轮叶片出现一条裂缝也视作失效。有些时候,在一段时间内——从涡轮叶片刚出现一条裂缝,然后裂痕不断扩大,到最后让涡轮叶片断裂,发动机还能够一直正常运转。(联邦航空局一直在考虑出台安全新规则——把这种特殊的“安全”状况也考虑在内,但是,要做到这一点,必须要在已知的经验范围内对已知的模型做非常仔细的分析,而且模型的材料也必须经过彻底的测试。而对于航天飞机主发动机来说,这些都不适用。)
高压燃料涡轮泵涡轮叶片的裂缝通常出现在第二级。有一台在1900秒后出现了3条裂缝,而另一台在4200秒后也没有出现一条裂缝——尽管在通常情况下,运行时间越长,出现裂缝的概率越大。为了进一步了解这个状况,我们需要认识到:应力很大程度上取决于功率级。在火箭发动机工作的大部分时间里,“挑战者”号航天飞机的功率级应该维持在额定功率级的104%——就像之前的发射任务那样。根据一些数据分析,功率级在额定功率的104%时,出现裂缝的时间大概会比109%功率级或全功率级(FPL)延后一半。将来的飞行也会保持在这个功率级上,因为这个功率级有更大的有效载荷,还有很多试验都是在这个功率级做的。所以,我们把104%功率级上裂缝出现前的那段时间除以2,就得到一个时间单位——等效全功率级(EFPL)。(显然,这也带来了一些不确定性,但是目前还没有对此开展研究。)之前提到的裂缝最早出现在1375秒EFPL。
现在,安全标准变成了“第二级(涡轮)叶片都要限制在1375秒EFPL之内”。可能有人提出反对意见,称安全因子为2在这里没有体现。实际上,涡轮机运转3800秒EFPL没有出现裂缝,这时间的一半就是1900秒EFPL,所以,实际上我们的标准还更保守。我们的自我欺骗表现在三个方面。首先,我们只有一个样机(符合这个要求),而且它不是“领航船”,而其他两个样机在3800秒和之后的一段时间内有17片涡轮叶片开裂(发动机内总共有59片涡轮叶片)。其次,我们已经抛弃了2×标准,并以等量时间标准来代替它。最后,在1375秒EFPL时确实开始出现裂缝。我们可以说:在1375秒EFPL之前,我们没有发现过裂缝,但是,我们最后一次检查结果显示,出现裂缝的临界点在1100秒EFPL。我们确实不清楚裂缝在这两个时间点内出现的具体时候,我们只能做这样的猜测——比如,裂缝有可能是在1150秒EFPL形成的。(将近2/3的叶片在实验超过1375秒EFPL后会出现裂缝。最近的一些实验已经明确显示,裂缝早在1150秒就出现了。)把标准定得高一些很重要,因为“挑战者号”的发动机的设定安全飞行时间非常接近极限安全时间。
最后,人们宣称,安全标准并没有被抛弃,整个系统是安全的,只不过不再遵照联邦航空局“(涡轮叶片)不能有裂缝”的惯例,涡轮叶片只有在彻底断裂时发射才算失败。按照这种规定,就没有哪一台发动机算得上运转失灵。他们的想法是这样的:既然从裂缝开始出现到叶片断裂需要一段足够长的时间,那么通过检查所有叶片有无裂缝,就能保证绝对安全。如果发现了裂痕,那就更换涡轮叶片;如果没有发现裂缝,我们就有足够的时间完成一次成功发射。这种做法让涡轮叶片裂缝问题不再是关乎飞行安全的重大问题,而仅仅是一个如何让叶片持久工作的问题。
也许情况真的是这样。但是我们怎么就能断定:叶片上那些裂缝总是慢慢地开裂,而且不会在发射过程中导致叶片整体断裂?3个发动机已经运行了很长时间,其中有几个叶片出现裂缝(大概发生在3000秒EFPL),可是叶片整体断裂的情况没有出现。
但是,这种叶片裂缝的问题可能已经找到补救办法。通过改变叶片形状、对叶片表面进行喷丸处理[2],或是进行绝缘化处理来杜绝热振动等方法,叶片就不会开裂。
高压氧气涡轮泵合格检验标准的历史变迁,情况跟高压燃料涡轮泵也十分相似,在这里我就不细说了。
总之,很显然,在对待航天飞机主发动机的一些问题上,飞行准备状态评估和安全认证标准都倒退了,这和我们看到的固体火箭助推器安全标准的倒退如出一辙。
航空电子设备
航空电子设备(avionics)是指轨道飞行器的计算机系统,也包括它的输入传感器和输出执行器。首先,我们只研究计算机本身,而不去考虑温度传感器、压力传感器等输入传感器传来的信息是否可靠,或者负责火箭点火、机械控制以及给宇航员呈现内容的执行器是否忠实地遵循计算机的输出指令。
整个计算机系统非常精密,程序代码超过25万行。它负责操控很多事情,包括飞行器爬升、进入飞行轨道的整个自动控制过程,当你按下某个按钮决定好登陆地点后,它操控飞行器飞回地球,直到顺利进入大气层(速度低于1马赫)。我们有可能实现着陆过程全自动化(除非起落架明显脱离了计算机控制,出于表面上的原因,必须由飞行员手动操纵),但是,相比之下,由飞行员控制飞行器着陆会比全自动化着陆更安全。飞行器在整个轨道飞行期间,其计算机系统被用来控制有效载荷,向宇航员显示信息,以及与地面(控制中心)交换信息。显然,出于飞行安全需要,必须确保整个计算机硬件和软件系统的精确性。
简单地说,硬件系统的可靠性通过四个完全独立且结构相同的计算机系统来确保。在这套系统里,可能每个传感器都有若干个备用传感器——通常是四个——这些装置会同时给这四个计算机系统提供信息。如果传感器输入的信息不一致,这时会根据实际情况确定有效输入,或是采用平均值,或是按照“多数表决”原则来确定。这四台计算机的算法是完全一样的,同样,它们的输入(每台机器都可以获取包括备用传感器在内的所有传感器的信息)也是一样的。因此,就任何一步运算而言,每台计算机的计算结果都应该是完全一样的。这些运算结果要经常拿来对比,但是因为计算机的运行速度可能有轻微的差异,所以在每一次比较之前,要启动一个停顿和等待系统。如果有一台计算机的计算结果与其他计算机不一致,或者它计算得太慢了,那么其他三台计算结果一致的计算机就会被系统承认,而那台表现不佳的计算机就会被系统彻底淘汰掉。(而这三台计算机中)如果有一台计算机也失灵了——评判依据是其他两台计算机结果一致,那么它也要被系统淘汰,它负责的后续飞行任务也被取消。向预定着陆地点降落的任务启动,负责操控的是剩下的那两台计算机。由此可见,这其实是个冗余系统:仅有一台计算机失灵对它完成任务没有任何影响。最后,这个系统还有个额外的安全保障,那就是:还存在第五台独立的计算机——它的内存只装有发射爬升和降落程序,如果那四台主计算机有两台以上发生故障时,这台独立计算机还是能够控制降落过程的。
由于主计算机的内存空间有限,不能储存整个飞行过程中所有爬升、降落以及执行飞行任务的程序,所以这些程序要靠宇航员利用磁带安装,前后总共要安装四次。
为一个如此精密的系统更换软件系统需要耗费大量精力,更不用说换掉整个系统,所以,这个系统投入使用这15年来,硬件一直没有动过。现在的硬件系统已经过时了,就拿内存来说,还是老式的铁氧体磁芯。找到能供应这种老式计算机的生产商,还要求性能可靠、质量过硬,现在已经变得越来越难了。现代计算机的性能可靠得多,运转也快得多,电路简化了,还可以做更多的事情,而且不需要多次安装程序——因为它们的内存要比老式计算机大得多。
对软件的检测非常仔细,采取的是自底向上的方法。首先要逐行检测新的程序代码,然后检测有特定功能的代码段或模块。检测的范围逐渐扩大,直到新的变化全部融入整个系统并得到检测。这个完整的输出被当作最终的产品、最新发布的版本。但是,此外还有一个完全独立的独立检查团,他们对待软件研发团队的态度很严苛,他们测试和检查程序软件的细致程度,不亚于收到送货上门商品的消费者。在模拟器等部件启用新程序时,还要通过一个额外的验证测试。如果他们在验证测试中发现错误,会将其认定为非常严重的事故,而且,为了避免将来出现同样的错误,他们会非常仔细地研究导致错误发生的原因。迄今为止,在所有程序编程和程序更改(分别对应新的任务和任务调整)过程中,总共发现过六次这样的意外错误。他们遵循的原则是:所有这些检测不属于程序安全性的一部分,而是对安全性的测试,仅仅是为了避免灾难性后果。飞行安全与否,其判断依据就是这些测试中程序运行的状况,这里发现的任何错误都会引起有关部门的重视。
现在总结一下,计算机软件检测体系及其检测的仔细程度确实达到了最高水准。这里并没有出现这种情况:一边降低标准,一边自欺欺人——对于固体火箭助推器或航天飞机主发动机的安全体系来说,这种情况很明显。确实,管理层最近已经提议要减少这样复杂、耗资又如此巨大的测试——他们认为,在航天飞机发展业已成熟的现阶段,做这些测试是没有必要的。我们必须抵制这些建议,因为持这种看法的人,他们没有认识到微妙的相互影响,整个项目的某一部分即便一个很细微的变化导致的错误也会影响到项目的其他组成部分。飞船的使用者一直在不断地提各种修改要求:要么提出新的任务,要么提出新的要求和修改意见。而按照他们的要求进行修改,代价很昂贵,因为需要做全面的测试。要省钱,合理的办法是尽可能减少变动,而不是降低每一次改动后(必须要做的)测试的水准。
有人可能要说,完全可以采用更先进的硬件和编程技术大幅度改进这套精密的系统。任何外部竞争者都在这件事情上有后发优势,对于NASA而言,这是否是个好主意,它也该认真考虑一下了。
最后,让我们的视线回到电子系统的传感器和执行器上来。我们发现,在关乎整个工程安全的故障和可靠性问题上,人们的重视程度反而不如他们对待计算机系统的态度。举例来说,我们发现了一个问题——一些温度传感器不时发生故障。而18个月之后,我们发现,同类的传感器还在使用,仍然时不时发生故障,直到有一次,两个温度传感器同时发生故障,发射任务不得不取消。可是在下一次飞行任务中,这种不可靠的传感器还在用。反应控制系统的情况也是这样,它的火箭助推器在飞行中起到重新定位和控制的作用,可是性能也不太可靠。长期以来,虽然发射故障常有发生,但是因为有相当数量的冗余系统,还没有一次故障严重到影响整个飞行任务。传感器负责检查火箭助推器的性能,如果一个火箭助推器未能成功点火,计算机就会选择另一个火箭助推器来点火。但是,从设计的角度讲,火箭助推器就不应该失效,这个问题应该得到解决。
结论
如果要执行一个合理的发射计划,工程技术的进展速度往往不可能满足最初的准许(飞行)标准的要求——那个准许标准定得非常严格,目的就是确保打造一个安全系数非常高的飞行器。在这种情况下,有关方面往往借助很微妙的、表面上又富有逻辑的论证,让标准得以改变,从而使飞行计划可以按时通过。这样一来,人们就要在一个相对不安全的条件下去执行飞行计划,其失败概率的量级在1%左右(人们要得到更精确的数据,那就很难了)。
另一方面,官方管理层声称,他们相信飞行计划失败的概率是这个数据的1/1000。他们这么做的一个原因可能是:让政府看到NASA计划周全,还能按时把事情干得很漂亮,以确保政府给予资金支持。另一个原因可能是他们真的相信失败率极低——这说明他们和一线工程师的沟通严重缺乏,甚至到了匪夷所思的程度。
无论是出于何种原因,都已经带来了非常不良的后果,其中最为严重的莫过于他们鼓励普通民众搭乘这样一艘危险的飞行器,就好像让他们乘坐普通飞机航班一样。和试飞员一样,宇航员应该清楚自己所冒的风险,我们钦佩他们的勇气。谁能否认麦考利夫(McAuliffe,“挑战者”号航天飞机上的那位女中学教师)的勇气呢?她能觉察到更真实的风险,而不是NASA官员让民众相信的那种级别的风险。
我们给NASA的官员提一些忠告吧,确保他们能够脚踏实地,直面现实,努力去充分了解航天技术的弱点和缺陷,进而能积极设法解决这些问题。在比较航天飞机和其他进入太空的方法在成本和成效方面的不同时,他们一定要遵循实事求是的原则。同样地,在签订合同、估算成本和评估项目难度等环节,他们也一定要秉承实事求是的态度。他们提出的飞行计划的时间安排一定要合理和切合实际,实施过程中也不至于为了赶期限导致状况百出。如果他们一一照做了,却得不到政府的支持,那就随他去吧。NASA得到的是公众的支持,它应该对公众持坦诚和诚实的态度,而且它有义务告知公众所有的真相。这样的话,这个国家的公民们就会在怎样运用他们有限的资源这件事上做出最明智的决定。
对于一项成功的技术来说,尊重现实一定要凌驾于公共关系之上,因为你不能愚弄自然(规律)。
[1]放射性同位素热电式发电机(Radioisotope Thermoelectric Generator)。——译者
[2]喷丸处理也称喷丸强化,是一种表面处理工艺,用于提高零件的疲劳强度,大型壁板零件成型以及清除零件表面氧化层等。——译者