飞行模拟器
您是否曾想过全飞行模拟器和 CATS(计算机辅助训练系统,图 1)是如何制造的?答案正如人们可能预料的那样,它们是用大量高科技硬件和数百万行代码制成的。这是一个真正的技术奇迹,硬件和软件在此交汇,产生了当今世界上一些最令人难以置信的逼真模拟。全飞行模拟器基于三个原则:视觉、声音和运动。利用这三个基本概念,我们能够制造出世界上最先进的飞行模拟器。全飞行模拟器是帮助飞行员掌握应对不可预测情况的必要技能和能力的重要训练工具。
全飞行模拟器(图 2)采用复杂而有效的六自由度运动系统构建。该运动系统负责产生逼真的起飞、着陆和飞行中湍流的感觉。视觉投影仪生成真实世界的图像作为视觉参考。整个系统的核心是主机计算机,它负责与所有航空电子硬件、运动和视觉系统交互,并模拟飞机的空气动力学。CATS 是一种不同类型的飞机模拟。CATS 不是定义与所有飞机面板交互的硬件接口,而是生成所有飞机面板(图 3)、原理图(图 4)、线路可更换单元(LRU,图 5)和有时称为黑匣子(图 6)的图形表示。相比之下,CATS 为培训相关的飞机维护人员以及飞行员提供了一个非常有用的工具。它们作为维护人员在排除故障和诊断飞机系统故障方面的诊断工具也具有不可估量的价值。CATS 有三种配置:单屏(迷你 CATS,图 7)、三屏(CATS,图 1)和七屏(CATS 系统训练器,图 8)。最后一种是飞机驾驶舱的完整图形表示,带有触摸屏。该系统为入门级飞行员和/或飞机维护人员提供了掌握其驾驶舱程序技能的机会。
生产飞行模拟所需的逼真度需要什么样的软件和计算能力?直到不久之前,这个领域一直是 IBM、Digital VAX/VMS 和 Gould 等行业巨头的游乐场。如今,随着强大的 CPU 变得司空见惯,大型机几乎过时,英特尔几乎占据了市场的主导地位。
我工作的公司(CAE Electronics Inc.,加拿大魁北克省蒙特利尔)雇用了 4000 人,其中一半是仿真硬件和软件领域的软件工程师。客观地说,我很自豪地说 CAE Electronics 制造了当今世界上技术最先进的全飞行模拟器。CAE 工程师有责任在软件模拟方面提出新技术,包括 CPU 硬件和生产高质量产品所需的操作系统。Linux 可以用作航空业商业飞行模拟软件的可靠平台。
CAE 一直是一家坚信构建自己的软件工具和基本软件开发环境的公司。在过去的九年中,CAE 一直是 IBM AIX RS/6000 用户。IBM 一直是我们构建基于 AIX 的稳定平台的基础,以便在实时环境中运行数千个软件模块,这对 Linux 来说是一项艰巨的任务。然而,在过去的四年中,Linux 已被用作 CAE 工程师需要完整模拟环境的基本开发平台。
Linux 可以用于开发 CAE 商业软件模拟系统吗?可以。在过去的几年里,Linux 已经成熟了很多。考虑到这一点,CAE 工程部门一直在积极支持 Linux。我们的客户会对 Linux 做出积极反应吗?Linux 社区会在未来几年支持该产品吗?这两个都是 серьезные 问题。全飞行模拟器对我们的客户来说是一项长期投资。在我们完全致力于并支持未来的 Linux 开发之前,必须回答这些以及许多其他问题。当前的行业趋势表明,Linux 越来越受到 IBM、H-P、Compaq 和 Dell 等公司的支持。Linux 的未来看起来光明。
我们在软件模拟方面的基本原则很简单。我们在名为 SIMEX(模拟器可执行文件)的 CAE 软件环境中生成直线执行的 C 代码。该环境提供了在实时环境中控制软件模块执行所需的基本软件调度程序。SIMEX 还提供 RCS 下的软件配置控制,以维护用于测试和集成的多个配置。SIMEX 能够从不同的源模块集合构建用于运行时执行的不同可执行文件。这为工程师提供了一个宝贵的环境,可以在不破坏先前工作配置的情况下测试新的软件代码。
由于 AIX 是非实时操作系统,因此出现了一个问题,即如何在非实时操作系统上创建实时环境。答案很简单:生成您自己的异步 I/O 控制函数库,软件工程师将需要该库用于所有 I/O 系统调用。将软件调度程序代码的系统优先级设置为最高级别不足以创建实时环境。所有模拟 I/O 请求都必须以异步方式处理,以维护实时模拟环境。我们称此环境为 CAELIB(CAE 库)。
软件调度程序还需要控制软件模块执行的顺序和持续时间,以防止发生任何溢出。这种技术称为分段。软件分段使软件调度程序能够控制执行一组软件模块所需的时间以及代码执行顺序。某些模块需要在其他模块之前运行,以维护飞机系统模拟的完整性。这使所有模块都有充足的机会在分配的时间内执行。对于实时模拟,所有软件模块的一个完整过程为 60 赫兹或 16.66 毫秒。然后,软件调度程序进一步将分段分解为腿,这些腿在受控状态下执行。
并非所有模块都需要以 60 赫兹的速率执行。大多数飞机系统只需要以三分之一甚至四分之一秒的速率执行。因此,软件调度程序以 16.66、33、66、133 或 266 毫秒的迭代速率调用某些模块。CAE 工程师将其模块输入到调度表中。反过来,这指示软件调度程序代码按照工程师的请求执行和排序。如果一个特定腿中有太多模块,并且代码无法在分配的时间内完成执行,则软件调度程序将终止代码的执行并继续执行下一条腿。
这种情况称为软件溢出。为了控制软件溢出,集成专家和软件工程师将软件模块重新分配到执行时间过多的较轻权重段中。这使关键模块有充足的时间执行,而非关键模块以较慢的迭代速率执行。由于我们所有的代码都基于旧版 FORTRAN 77 和 ANSI C,因此将我们的代码移植到 Linux PC 平台被证明是一项相对简单的任务,当然,除了考虑 Linux 和 AIX 编译器之间明显的差异。(关于该主题的更多内容将在后面介绍。)
本文讨论的软件模拟配置是庞巴迪/加拿大航空支线喷气机 RJ-200 飞机(图 9),这是一款由庞巴迪宇航公司在蒙特利尔制造和建造的成功 50 座双喷气支线飞机,深受 Comair、Skywest 和加拿大航空等航空公司的欢迎,仅举几例。CAE 工程师的首要任务是将整个 CAELIB 和 SIMEX 软件环境移植到 Linux。对于我们的操作系统支持组 (OSU) 来说,这被证明是一项相对简单的任务,因为我们的大部分代码都是用 ANSI C 编写的。所有模块都经过编译,只需进行较小的修改。完成此操作后,将整个软件模拟代码从 SIMEX 传输和移植到 Linux 的任务被证明更具挑战性。现在,我指的是在 AIX 上进行多年的软件开发,至少有 500 个软件模块,每个模块的代码行数从 1,000 行到超过 100,000 行不等——移植它们绝非易事。第三个任务是将所需的 CAE 特定编译器从我们自己的基于 OpenGL 的图形编译器和编辑器移植到我们的基本支持实用程序。CAE 开发了自己的图形环境,名为 TIGERS(基于 OpenGL 的系统)。
在 CAE 开发 TIGERS 时,用于模拟的复杂图形系统尚未普及。图 10、11、12、13 和 14 显示了 CATS 模拟所需的图形细节级别。CATS 和全飞行模拟器之间的主要区别很简单:CATS 要求所有飞机面板都是图形表示,而不是全飞行模拟器上的硬件驱动接口。简而言之,在驾驶舱环境中,使用开关的图形表示来代替真实的开关。在所有方面,CATS 上所需的模拟软件量都比真实的全飞行模拟器复杂得多。在 CATS 环境中模拟所有飞机系统,而不是仅模拟全飞行模拟器的模拟黑匣子。在飞行模拟器中,我们模拟与飞机上使用的相同的黑匣子。在努力满足庞巴迪培训部门的需求时,他们寻求其现有 AIX CATS 在 PC 平台上的便携式版本,CAE 工程部门认为 Linux 将是该项目的理想且实用的选择。
我们决定使用标准的 GNU ANSI C 编译器和 F77 转换器来完成这项任务。我们的 FORTRAN77 旧版软件模块被证明是最大的挑战。AIX FORTRAN77 编译器在将逻辑数据类型等同于整数数据类型方面非常宽容。例如,如果您将整数标签等同于逻辑标签,则 AIX FORTRAN 编译器会假定您需要将逻辑标签中的值存储到整数标签中。这种编程风格在 F77 Linux 下是不允许的。您必须声明和等同于相同数据类型的标签,否则编译将失败。现在,如果标签是在本地模块中定义的,这将是一项简单的任务。当有问题的软件模块使用在我们的 CDB(公共数据块)中声明为整数标签的逻辑标签时,问题就出现了。此公共数据块用于声明每个模拟模块使用的所有全局标签,以便在彼此之间传递变量。如果 CDB 中的声明错误,则必须在所有模块中进行更正。然后必须使用新的 CDB 重新处理每个模块并重新编译。
下一个问题在于 AIX 和 Linux 之间逻辑标签的内存存储格式。例如,F77 Linux 中 Logical*4(四个字节)的数据类型是从左到右(MSB,最高有效位,到 LSB,最低有效位)存储的,而 AIX 以相反的顺序(LSB 到 MSB)存储逻辑。当在位操作中使用逻辑时,这可能会产生重大问题。如果您在代码中将每个位用于不同的功能并应用位操作(例如,FECDE .XOR. Logical Label),则问题会变得更复杂。您必须反转位操作中使用的所有掩码——这是一项相当大的工作。
另一个令人担忧的领域是用于存储导航和发动机数据插值信息的数据文件。这些数据文件中的字节顺序也必须反转,才能将数据正确读取到其分配的 CDB 标签中。我们的 ANSI C 代码没有这个问题。大多数 C 代码在进行少量更改后即可编译。
听觉警告系统转换需要少量工作。在 AIX 下,所有音频警告都设计为与带有大型数字音频文件的 DSP 卡一起使用。我们需要将大型数字听觉警告数据文件转换为单独的 PCM wave 文件。然后需要一个新的编码音频软件模块来交叉索引请求的听觉警告及其相应的 wave 文件,并将它们管道传输到标准的 SoundBlaster 声卡。再加上所有图形文件和 IOS 页面(教员操作员系统页面,图 15),我们就有一项巨大的移植任务。
Linux 和 CATS 被证明是很好的匹配。系统可靠性和性能达到并超出了我们的预期,结果令人惊讶地可预测。CAE 现在拥有一个功能齐全的飞机模拟系统,包括图形和听觉警告,在 Linux 环境中运行。我们的 Linux 开发环境包括配备 128MB 内存的 Pentium II 英特尔 350MHz CPU 和配备 32MB 内存的东芝 233 MMX Portege 320CT 笔记本电脑。如前所述,CATS 有三种版本:单屏、三屏和七屏版本。在 AIX CATS 下,IBM 主机驱动三个独立的 X 工作站,每个屏幕显示不同的信息。在单屏配置下,一个 X 工作站为所有图形页面提供功能,同时使用驾驶舱导航面板,如图 16 所示。右上角的快速参考面板是飞机驾驶舱的小型图形表示。当选择其中一个面板时,系统会在单屏的指定部分显示所选面板,七屏 CATS 显示在七个独立的 X 工作站上。每个工作站都显示所有飞机面板(前部、顶部、基座和侧面板,图 8)的完整图形表示。使用 Linux,硬件配置略有不同。图形显示是相同的(单屏、三屏或七屏配置);不同之处在于我们如何以及在何处显示图形页面。在 Linux 下,我们使用名为 Evolution 4 的显卡。
此卡由英国的 Color Graphics Systems 制造。它允许我们使用 Xi Graphics 的 Multi-Headed X 服务器同时显示四个 X 显示输出。AcceleratedX 是一款出色的产品,允许我们同时驱动多达 16 个 X 显示器(使用四个 Evolution 4 显卡)。与配备 RS6000 IBM 主机 CPU 的三台 IBM X 工作站和配备一块 Evolution 4 显卡的 Linux PC 相比,硬件成本显着降低。
在 MINI CATS 版本(单屏配置)中,我们现在可以选择在标准 PC 笔记本电脑上安装 CATS,使用每个 Linux 发行版都包含的 Xfree86 X 服务器。CATS 的分发和安装也已得到解决。客户不希望在以前预加载的 Microsoft 操作系统上安装专用的 Linux 系统。因此,我们开发了一张 CD-ROM,它可以启动到 Linux 环境,在内存中设置一个小型的虚拟 Linux 文件系统,并加载所有必需的 CAE CATS 软件,而无需在本地硬盘上安装任何软件。这也已被证明是成功的。庞巴迪现在可以在预配置的可启动 CD-ROM 上分发其 CATS 系统。在现场启动和加载 CATS 现在不需要任何 Linux 操作系统方面的先前知识或经验——客户不再会发生文件损坏或意外文件删除的情况。为庞巴迪开发基于 PC 的 CATS 的主要原因是成本和便携性,便携性是庞巴迪现场培训教员的首要任务。所有这些因素都转化为庞巴迪及其客户更经济实惠的 CATS。
Linux 毫无疑问地证明,它是为航空培训行业交付商业级模拟产品的可靠且稳定的开发平台。CAE 已经认识到 Linux 的潜力及其在未来 CAE 模拟产品中的潜力。CAE 甚至可能会探索有一天在 Linux 上运行全飞行模拟器的可能性。做得好,Linus Torvalds。
