当阿波罗11号于1969年7月20日降落在“宁静之海(Sea of Tranquility)”的时候,它代表的是不仅仅是人类精神的胜利,同时还是讲述了一个关于叫做阿波罗制导计算机(AGC)的控制论奇迹的故事。
据悉,该计算机能帮助阿波罗宇航员安全地导航到月球并返回至地面。这是一台当时非常先进的电脑,以致于创造它的工程师们说–如果他们知道自己会陷入什么境地,他们可能就不会尝试这么做了。
阿波罗制导计算机是太空竞赛中未受到歌颂的成功之一,这可能是因为它非常成功,几乎没有什么飞行中的问题,其中大部分则都是因人为失误造成。据了解,这台计算机搭载在指挥服务模块(CSM)和登月舱(LM)中,它总共执行了15次载人任务包括9次月球飞行、6次登月、3次Skylab太空任务和1975年的阿波罗-联盟号测试任务。
当时,它是最新、最先进的有线飞行和惯性制导系统、是第一台数字飞行计算机、是迄今为止最先进的微型计算机、是第一台使用硅芯片的计算机,同时也是第一台机组人员生命依赖于其功能的机载计算机。
据了解,阿波罗制导计算机乍一看就像是一个由两部分组成的黄铜手提箱,总长24×12.5×6.5英寸(61×32×17厘米)、重70磅(14公斤)。在内部则是并不像现代计算机那么吸人眼球。可以这么说,很难将它跟现代设备作比较,因为ACG算不上一台通用计算机,它只能算是为一个特定任务设计的硬连接,其能执行20世纪80年代早期的Commodore 64或ZX Spectrum。
计算机方面的工作
所有阿波罗任务都至少携带一台这样的电脑的原因是,月球任务涉及的制导不同于地球。在地球上,制导最简单的方法就是从地球上的一个固定点到另一个固定点,然而在月球上,这一切就像站在步枪上的转盘上,变得复杂万分。也就是说,太空制导对于宇航员来说太过复杂且不能依靠直觉。
一项新技术
当阿波罗计划开始时,计算机仍然是巨大的机器,它们占据了整个房间。全球只有少数几个想把信息输入或输出到一个如此复杂、以致于需要一批知识渊博的顶级数学家才能完成的设备的国家。然而,这是一个快速发展的领域,当AGC的工作开始的时候,这项技术已经为计算机革命爆发做好准备。
除了计算技术,基础电子技术也在飞速发展。所有这些新技术不仅在计算机设计上产生了协同效应还震动了整个电子行业。不过这给AGC带来了无尽的麻烦。你如何设计一台在技术不断变化的六年内都不会航行来的计算机?更糟糕的是,当行业预计一切将在18个月内发生变化时,你如何获得行业对一台必须在生产和使用中保持的计算机的支持?
麻省理工学院(MIT)仪器实验室
1961年8月,当NASA决定将阿波罗制导计算机合同授予MIT仪器实验室而不是该机构经常合作的供应商IBM时,该学院陷入了巨大漩涡。
很多人对此感到有些忐忑不安,但实验室主任Charles Stark Draper则表现出了极大的信心,他表示其团队能够按时交付电脑并达到规格要求,为此,他自愿参加了第一次飞行任务。到了1962年,双方达成协议,MIT将在通用汽车交流火种塞部门、Kollsman Instrument Corporation和雷神公司的支持下率先开展这项工作。
对于MIT来说,其面临最大的障碍是AGC的规格,因为没有人建造过这样的东西,也没有人知道该怎么做,它就相当于一张白纸。
除此之外,计算还机必须符合阿波罗的一般规格,即必须坚固耐用、足以承受太空飞行,而且还必须使用最少的晶体管。此外,它还需要一个简单的控制界面供宇航员使用。
如何运转
需要记住的一件事是,AGC的设计是前沿的、构建方式则是非常老式的–两者都提出了各自的挑战。与现代计算机不同的是,AGC都是手工制造,过程缓慢且费力。据悉制造这些电脑总共花了2000人一年的工作量。
AGC集成了许多前沿技术,比如成为第一个在逻辑电路上依赖芯片组件的计算机–特别是一个三输入NOR门。而其使用的芯片虽然都刚刚上市,但到了1963年,MIT仪器实验室购买了美国60%的芯片生产。
计算机
AGC的最终形态不是一台通用计算机,而是一台专门用来执行特定任务的计算机,而且还是有线的。它由两个金属托盘组成–一个用于存储,另一个用于逻辑电路,总共有30000个组件。由于该技术的局限性,尽管它非常复杂,但在设计上还是做到尽可能的简单化,部件也要尽可能地少,这样才能得到更低的重量和更大的可靠性。
由于AGC必须在距离最近的修理厂25万英里的地方运行,因此可靠性是重中之重。有一次,有人建议在飞船上安装一台复制的电脑,但这一建议被拒绝了,取而代之的是强有力的、积极的测试,然后测试人员对组件进行了密封以防止灰尘和水分进入。
绳子的记忆
一个主要的设计关注点是如何在AGC中存储程序和数据。计算机记忆已经从使用穿孔纸带输入数据或通过装满水银的管道发送声波来存储数据的时代走了很长一段路,但这项技术仍处于起步阶段,当时的存储技术对阿波罗来说仍都不够实用。
相反,MIT提出了一种新的方法,将软件真正地编织到内存库中。他们利用一种叫做“绳子记忆”的技术,当一根导线穿过圆环中心时,它表示二进制数1;当它在外面则是0。
为了给这些绳状记忆编程,MIT使用了他们所谓的LOL(小老太太)法。得到的成果是一个不可摧毁的内存,它不能被删除,改变或损坏。然而这也存在缺点,比如打造这样一块内存非常困难,另外在发现错误时很难纠正。不过这算是一个优势,因为这意味着最后一刻的“好主意”可以被忽略。
优先于分时
除了上面提到的这个内存这台计算机还有另外一个2000字的RAM存储库,在电脑运行程序时,它就像一个临时数据记事本。
在20世纪60年代,多人使用或运行多个程序的计算机的常见做法就是分时。对于大学的大型机来说这可能没问题,但对于阿波罗号来说,这可能是致命的,因为计算机最终可能会被生死攸关的琐事占据,或以今天的计算机用户非常熟悉的方式崩溃。
而就在那个时候,计算机先驱Halcombe Laning提出了一个解决方案–AGC被编程为优先级,而不是分时。换句话说,每个项目都是按照任务时间表上任何特定时间点的重要性进行编号的。如果一个优先级更高的程序需要计算机,其他程序就会停止,等待它完成,然后继续。与此同时,临时存储器以一种类似于现代计算机进入睡眠模式的方式将数据保存到中断状态。
DSKY
数据来自一个包括六分仪、望远镜、惯性测量单元(IMU)、宇航员使用的手动控制器、指挥模块交会雷达、月球模块登陆雷达、主引擎和反映控制系统在内的大量设备。不过最重要的输入还是显示和键盘(DSKY)单元,宇航员用它来跟计算机通信。这个用户界面非常庞大以致于很多今天看到它的人都以为是计算机本身,但实际上它只不过是一组警告和状态灯、按钮和数字显示。
DSKY由MIT的Alan Green设计,乍一看似乎很难使用。实际上宇航员们也这么认为,但经过练习,他们很快就对这个设备的实际性能感到惊讶并成为它的忠实粉丝。
令人着迷的是DSKY独特的工作方式。宇航员们使用了一种特殊的“名词”和“动词”数字语言,而不是键入单词命令或点击图标。操作时,宇航员首先要按下防止意外按下按钮的解锁键,然后再输入名词数字代码和动词代码。
结果将是一个类似于display-gimbal angle或load-star number的命令。如果命令要求宇航员输入数据,计算机就会发出一个准备好的信号并等待数据。其中一个舱壁上甚至印着一张小抄,上面列出了计算机命令。
软件
很显然,一台计算机的性能取决于它的软件,在首次登月之前,总共有350名工程师参与了AGC软件开发工作,这相当于1400人一年的工作量。由于程序员没有任何规范,并且对软件概念没有一个坚实的理解,所以这项工作开始时并不顺利。
与现在不同的是,这些代码是手工编写的然后转移到大量穿孔卡片上进行测试。尽管使用了这种原始的方法,但该软件仍算是一个巨大的飞跃,它成为了第一个必须处理实时问题的软件,因为有三个人的生命将依赖于此。
投入使用的阿波罗计算机
在实践中,AGC在阿波罗飞行任务中表现得尤其完美,唯一的问题是输入错误的代码或转动了错误的开关。而其实力得到真正展示的则是在阿波罗11号任务。
在历史性的“宁静之海”降落过程中,由于交会雷达被意外打开,电脑突然“大发脾气”。雷达开始向计算机发送大量无意义的数据,这要是在现代计算机中很有可能会导致设备崩溃。相反,AGC为过载错误发出“1202”信号,然后关掉了除优先级1以外的所有程序并重新启动。由于避免了可能的中止,任务指挥官尼尔·阿姆斯特朗接到了继续着陆的命令。