空气动力学实验室的开源软件
很久以前,在开源软件 (OSS) 运动之前,在万维网之前,在自由软件基金会和 GNU 之前,我受聘于加拿大国家研究委员会的不稳定空气动力学实验室,负责处理他们高速风洞的数据采集系统。那时,实验室拥有一台专用的实时小型计算机:惠普 HP-1000 F 系列。在 1980 年代初期和中期,我每年都会参加惠普国际用户组会议,并带回一盘磁带,其中包含与会者的贡献。安装磁带并浏览索引文件时,我感觉自己像个孩子在圣诞节早上拆礼物。这是我第一次接触源代码共享,我不知道这样一个简单的概念未来会怎样。

加拿大国家滑雪队队员在 2 米 × 3 米风洞中
1990 年,我 приобрел 了我的第一台 UNIX 机器,当时最先进的 Silicon Graphics 4D/80GT,以及我自己的 T1 互联网连接。从独立计算机上的小型实时操作系统切换到基于 IRIX 的联网机器,为我打开了一个充满挑战的新世界,学习曲线非常陡峭。到 1992 年,我已经编写了复杂的脚本,使用 shell、awk 和 sed 的组合来处理风洞数据文件。有一天,我在 Usenet 上寻求建议时,有人提到了 Perl。我现在真希望我当时注意到了那个人,以便我可以感谢他们让我的生活变得如此轻松。在一年之内,Perl 变得在 SGI 以及我的桌面 Macintosh 上都不可或缺。它将成为实验室最重要的开源软件。
大约在那个时候,我尝试了一个程序,虽然它看起来有点用处,但起初我严重低估了它。它被称为 Mosaic。不久之后,我安装了 NCSA 的 HTTPd,并开始了解 Web 的潜力。在其后来的化身 Apache 中,它将成为实验室每天依赖的第二大 OSS 项目。
航空航天研究所于 1995 年进行了重组,尘埃落定后,我发现自己身处现在的位置:空气动力学实验室的 2 × 3 米低速风洞。那时,我开始创建基于 Web 的软件,以扩展现有数据系统的功能,该系统依赖于在 QNX 和 AIX 下运行的命令行和 X Window 系统用户界面。 决定切换到基于浏览器的程序,很大程度上是因为来到风洞的客户类型。 尽管我们的大部分工作是为庞巴迪宇航等公司进行的飞机测试,但在过去几年中,我们测试了汽车、公共汽车、卡车、摩托车(我最喜欢的)、电力线、桥梁、天线,以及奥运自行车运动员、滑雪运动员和雪橇队。 客户范围如此广泛,他们的计算机技能从一窍不通到精通,这使得用户界面设计充满挑战。 既然连管理层都知道如何上网,我决定尝试在我们的一款应用程序上使用 Perl 编写的基于 Web 的界面。 我收到的反馈非常积极,因为我们的客户和员工都觉得它易于使用且舒适度高,所以我继续构建基于 Web 的工具。

车辆空气动力学在 2 米 x 3 米风洞中
第三个被采用的重要 OSS 项目是在几年后出现的。 1998 年,我们为计算流体动力学小组购买了一个 24 节点的 Alpha/Linux Beowulf 集群。 这是一个评估新技术的良好项目,因为尽管这项任务比风洞数据系统计算密集得多,但它对实验室客户的日常工作来说并不那么关键。 我们通过这次安装获得的成功使我们相信 Linux 是我们一直在使用的商业操作系统的可行替代方案。
在这些大部件就位的同时,我们也开始定期使用一些较小的 OSS 应用程序:Ghostscript、Xmgr、Vim 和 NEdit,仅举几例。
为了给本文的其余部分提供背景信息,我将从数据处理的角度描述一个典型的飞机实验。 模型安装在风洞中后,通常需要一到五周才能完成测试。 在此期间,将进行多达 500,000 次独立测量。 这可能会导致创建多达 2,000 个 X-Y 图、4,000 个磁盘文件以及多达 500MB 的文本数据在屏幕上显示。 必须有快速简便的方法来处理所有这些信息。
实验室的客户和测试工程师可以通过在 Apache 下运行的 Perl CGI 程序访问所有设施的数据采集、存储和可视化系统(见图 1)。 风洞操作员对实验的大部分控制也是以同样的方式处理的。 当用户在控制室的任何计算机上打开 Web 浏览器时,会自动加载风洞客户端主页。 此页面允许访问我迄今为止编写的五个基于 Web 的软件工具:绘图、配置文件编辑、数据文件查看、事件日志记录和动态数据显示(见资源)。 此外,还有指向本地资源(如系统文档和单位转换计算器)以及场外信息的链接。 我想指出的是,实验室使用了一种相当严格的内联网模型,这有助于减轻运行基于 Web 的系统的一些安全问题。
绘图系统是第一个开发的软件工具,因此,它被用作向风洞客户提供通过 Web 访问其数据的想法的概念验证。 由于我们已经在使用 Amtek Engineering 的商业数据可视化软件包 Tecplot,我决定围绕它构建绘图系统。 我的软件允许用户通过简单地选择选项并在 HTML 表单中填写文本框来设置绘图模板。 这些模板用于生成 Tecplot 命令行文件,这些文件可以立即用于在浏览器中或纸上生成绘图。 一个守护进程程序(也用 Perl 编写)也使用相同的模板在每次风洞运行结束时自动生成纸质绘图。

F18 模型在水洞中旋转
配置文件编辑是通过另一个基于 Web 的程序完成的。 它的创建是为了提供一种快速简便的方法来修改控制程序的文件,这些程序用于采集和减少实验数据。 用户会看到一个表单,其中每行都包含一个参数名称,以及一个文本框或一个选择元素来设置其值。 生成这些 HTML 表单的 Perl 程序还会动态生成 JavaScript 代码,以在提交之前验证用户输入。 如果检测到任何无效条目,闪烁的箭头将出现在输入字段旁边,并且一个弹出对话框将描述具体问题。
数据文件查看器是一个简单的 CGI 程序,它在磁盘空间中搜索给定的风洞测试。 它为找到的每个与我们的数据和配置文件命名约定匹配的条目创建一个 HTML 按钮。 这些按钮以表格形式呈现给用户,其中每行对应一次风洞运行,每列对应一种特定的数据类型(例如,原始数据、简化数据、皮重数据等)。 每次按下按钮都会弹出一个新的浏览器窗口,其中包含已解析和格式化以供查看的选定文件的内容。 然后,用户可以选择以 CSV、Matlab 或其他几种格式之一将文件下载到本地计算机。
所有新软件和许多旧代码都会生成状态消息——事件,这些事件由事件日志记录系统处理,该系统由两个主要部分组成。 第一个是简单的 Perl 守护进程,它侦听 TCP/IP 端口上的消息并将它们存储在日志文件中。 系统的第二部分是基于 Web 的查看器,它允许用户搜索日志文件以查找与特定条件匹配的事件,例如发生时间、计算机名称、事件严重性级别等。 尽管这看起来像一个微不足道的应用程序,但它必不可少,因为数据采集、操作和可视化系统由运行异构操作系统的多台计算机组成。 如果没有公共事件日志,在这种分布式系统中查找错误(尤其是由于复杂交互引起的计时问题)即使不是不可能,也很困难。

通用战斗机模型在 2 米 × 3 米风洞中
从用户的角度来看,动态数据显示系统是唯一非交互式软件工具。 它基于 Perl 服务器,该服务器接受来自数据采集系统的数据消息。 用户可以通过 CGI 程序(使用非解析标头 (NPH) 或“服务器推送”)连接到服务器来查看这些消息。 此程序向用户呈现一个数据表,并在表格顶部动态添加新信息(当新信息可用时)。 旧数据向下滚动,最终超出表格末尾。 在创建此代码时,我有点担心内存泄漏的可能性,不仅在 Perl 或 Apache 中,而且在我们的浏览器中也是如此。 我本不该担心。 我们有个别 NPH 客户端,它们在持续超过五周的风洞测试中一直与服务器保持连接。 在此期间,它们显示了超过 500MB 的数据,没有任何问题。
单独来看,这五个工具中的每一个都运行良好,但几乎没有革命性。 然而,当它们组合在一起时,它们为我们的客户和员工提供了一个简单、一致且健壮的环境,以便与他们的实验进行交互。 无需记住晦涩的命令、长数据路径、命令键序列或与许多类型的用户界面相关的任何其他内容。 用户需要做的就是指向并单击,并在网页上填写空白,这是他们知道如何做并且感到舒适的事情。
我的待办事项清单上的第一件事是完成将我开发的 Perl 代码从我们最后剩下的 SGI 转移到双处理器 Intel/Linux 系统上。 尽管让程序以当前形式运行是一项微不足道的任务,但我正在利用这个机会重构所有代码。 还有一个软件工具正在部分开发中,需要完成:模型姿态控制系统的用户界面。 此外,我们正在考虑将我们的数据文件格式从内部开发的神秘系统更改为使用 XML 的系统。 这肯定会导致需要更多新代码。
展望未来,我希望有时间开发一些 VRML 应用程序,这些应用程序可以创建我们风洞中模型和探针的动态 3D 图形模拟,并叠加载荷和压力数据。 此外,我们的仪器仪表小组正在研究将嵌入式/实时 Linux 用于我们的一些数据采集需求。
鉴于所有这些工作仍有待完成,我毫不怀疑开源软件将继续在空气动力学实验室的日常运行中发挥越来越重要的作用。
