本文档提供了阿波罗制导计算机(AGC)架构的高级概述,重点介绍核心系统设计、主要组件及其交互。有关特定模块的详细信息,请参阅其各自的维基页面,例如指令舱 (Comanche055) 和登月舱 (Luminary099)。
阿波罗制导计算机是美国国家航空航天局(NASA)阿波罗计划中用于引导和控制阿波罗航天器的机载数字计算机系统,其中包括具有历史意义的阿波罗11号登月任务。AGC由麻省理工学院仪器实验室(现德雷珀实验室)开发,在当时具有革命性意义,是集成电路首次应用于任务关键型系统之一。
AGC 为指令舱(CM)和登月舱(LM)提供了关键的制导、导航和控制能力,并为每种飞行器配备了专用版本
这两个版本共享一个共同的架构基础,但包含针对各自任务要求定制的飞行器特定功能。
按照现代标准,AGC 在极其有限的硬件条件下运行。了解这些限制对于理解其所采用的优雅软件设计原则至关重要。
| 组件 | 规格 |
|---|---|
| CPU | 16位字长,2.048 MHz 时钟频率 |
| 内存 | 36,864字(2,048字可擦写存储器,34,816字固定存储器) |
| 大小 | 24" × 12.5" × 6.5"(61厘米 × 32厘米 × 17厘米) |
| 字重 | 约70磅(32公斤) |
| 功耗 | 约70瓦 |
| 接口 | DSKY(显示和键盘),各种航天器系统 |
AGC 采用了独特的内存架构,分为:
这种内存布局对软件设计造成了重大限制,需要巧妙的优化技术和内存管理。
AGC 通过离散的输入/输出通道与其他航天器系统交互。这些通道通过内存映射I/O访问,特定的内存地址被分配给物理I/O端口。宇航员主要通过DSKY(显示和键盘)界面与AGC进行交互。
AGC 软件架构遵循模块化设计,其子系统围绕核心功能清晰定义。本节提供了软件结构的高级概述。
来源:Luminary099/MAIN.agc1-91 README.md85-114
AGC 软件的基础是四个主要的运行时组件,它们负责管理程序执行、计时和命令解释。
执行系统(位于EXECUTIVE.agc中)是 AGC 的多任务内核,提供作业调度和优先级管理。与现代操作系统不同,它采用协作式多任务模型,其中作业自愿放弃控制权。执行系统管理:
等待列表系统(位于WAITLIST.agc中)是一个基于时间的任务调度器,与执行系统协同工作。执行系统处理基于优先级的作业调度,而等待列表系统则管理时间相关的任务:
来源:Luminary099/WAITLIST.agc Luminary099/EXECUTIVE.agc
解释器(位于INTERPRETER.agc中)处理命令并提供用于执行程序的虚拟机。它处理:
AGC 包含复杂的重启保护(位于FRESH_START_AND_RESTART.agc和RESTART_TABLES.agc中),以在不丢失任务关键功能的情况下从硬件或软件故障中恢复。该系统:
来源:Luminary099/FRESH_START_AND_RESTART.agc Luminary099/RESTART_TABLES.agc
制导和导航系统是 AGC 功能的核心,提供精确的轨道计算和轨迹规划。
制导系统使用复杂的数学算法来:
来源:Luminary099/CONIC_SUBROUTINES.agc Luminary099/ORBITAL_INTEGRATION.agc Luminary099/MEASUREMENT_INCORPORATION.agc
数字自动驾驶仪(DAP)控制航天器的姿态和推力,保持稳定并执行机动。
DAP 主要有两个组成部分:
该系统处理不同的控制模式:
来源:Luminary099/DAP_INTERFACE_SUBROUTINES.agc Luminary099/DAPIDLER_PROGRAM.agc Luminary099/P-AXIS_RCS_AUTOPILOT.agc Luminary099/Q_R-AXIS_RCS_AUTOPILOT.agc
宇航员主要通过DSKY(显示和键盘)界面与AGC交互,该界面由PINBALL系统管理。
该界面采用动词-名词范式:
宇航员会输入一个两位数的动词代码,然后是一个两位数的名词代码,向 AGC 发出命令。
扩展动词提供了对标准动词集之外的专用功能和能力的访问。它们处理复杂的任务,例如:
来源:Luminary099/PINBALL_GAME_BUTTONS_AND_LIGHTS.agc Luminary099/EXTENDED_VERBS.agc Luminary099/PINBALL_NOUN_TABLES.agc
任务操作被组织成编号程序(P代码),用于执行特定的任务阶段或功能。
| 程序 | 功能 | 描述 |
|---|---|---|
| P20-P25 | 交会对接 | 交会对接操作的跟踪与导航 |
| P30-P37 | 轨道机动 | 轨道机动的规划和执行 |
| P40-P47 | 推力控制 | 管理动力飞行操作 |
| P51-P53 | IMU 对准 | 惯性测量单元的对准 |
| P63-P67 | 月球着陆 | 控制下降至月球表面 |
| P70-P71 | 中止程序 | 紧急中止程序 |
| P12 | 动力上升 | 月球起飞和上升制导 |
每个程序协调多个子系统以执行其指定功能,通常包括制导、导航、控制和用户界面元素。
来源:Luminary099/P20-P25.agc Luminary099/P30_P37.agc Luminary099/P40-P47.agc Luminary099/THE_LUNAR_LANDING.agc
尽管指令舱(Comanche055)和登月舱(Luminary099)的 AGC 共享相同的核心架构,但它们在支持各自独特任务角色方面存在显著差异。
| 功能 | 指令舱 (Comanche055) | 登月舱 (Luminary099) |
|---|---|---|
| 导航 | 地心和月心导航 | 月球表面和轨道导航 |
| 任务程序 | 指令舱专用程序(再入制导) | 登月舱专用程序(着陆、上升) |
| 自动驾驶仪 | SPS 发动机大推力点火控制 | 下降发动机和上升发动机控制 |
| 用户界面 | 指令舱专用显示和程序 | 登月舱专用显示和程序 |
登月舱软件包含指令舱软件中没有的专用组件:
同样,指令舱软件包含独特的组件:
尽管存在这些差异,两个系统都共享核心运行时架构、解释器以及许多导航和制导算法。
来源:README.md101-102 Luminary099/README.md11-19
AGC 源代码被组织成功能模块,每个模块负责系统的特定方面。代码结构旨在有效利用有限的可用内存。
内存分配通过存储区和段进行精心管理
SETLOC指令进行分配该存储库根据功能角色组织 AGC 源代码文件:
MAIN.agc 文件作为根文件,包含了所有其他源文件,并以逻辑顺序组织它们进行汇编。这种结构反映了原始开发中使用的单体构建过程,其中源模块被组合成一个单一的汇编文件,而不是作为单独的目标文件进行链接。
来源:Luminary099/MAIN.agc1-91 Luminary099/README.md21-26
阿波罗制导计算机是计算和航天史上的一项里程碑式成就。其架构通过优雅的软件设计和精心的系统集成,平衡了严苛的硬件限制与复杂的任务需求。其模块化结构、优先任务调度和重启保护能力在当时遥遥领先,并建立了在现代嵌入式系统中仍然相关的设计模式。
AGC 的设计展示了有效的软件架构如何克服硬件限制以实现非凡目标——在本例中,即以远低于现代智能手机的计算能力,安全地引导人类往返月球。