Frequentis TAPtools® - Python 在空中交通管制中的应用
简介
Frequentis 是全球领先的空中交通管理和公共安全与交通领域安全关键解决方案供应商之一。在全球拥有 500 多名员工,它为客户提供创新、以用户为中心的解决方案。
Frequentis 一直在其 TAPtools® 产品系列中使用 Python,该产品系列专注于空中交通管制中的塔台和机场工具领域。这些工具被空中交通管制员用来跟踪天气状况、控制跑道照明以及监控和控制导航辅助仪器。

TAPtools® 产品向空中交通管制员显示跑道和天气状况,以管理进场飞机的进近 放大
简史
开发空中交通管制解决方案的一个问题是,每个客户独特的机场、监管情况和方法都会对用户界面的外观和行为提出特定且不同的要求。部署空中交通管制系统的一个重要部分是其界面的定制。
Frequentis 没有在每个客户的基础上从头开始开发每个用户界面,而是开发了一个名为 PanView 的用户界面布局工具,类似于 QDesigner 或 Visual Studio 等产品。此工具用于设计和构建用户界面,然后由一个名为 PanMachine 的软件执行。PanMachine 在内部开发的硬件 PowerPanel 上运行,该硬件配备 66MHz PowerPC、32 MB RAM 和 12 英寸触摸屏输入设备。

TAPtools® 用户界面的开发满足了每个空中交通管制客户的独特需求 放大
借助这些工具,Frequentis 开发人员可以在客户面前快速构建布局原型,从而大大减少了解决方案部署中所需的客户设计研讨会的次数。
客户至上
PanView 和 PanMachine 最初是使用 Lua 作为脚本语言开发的,用于将用户界面连接到空中交通管制系统的底层功能。
事实证明,由于各种原因,这种选择对于布局实施者来说是有问题的
- 提供的错误信息有限,使得开发人员难以定位错误。
- 默认情况下,变量是全局的,而不是局部的。Python 正好相反,这使得程序更不容易出错。
- Lua 没有列表数据结构。虽然它的字典可以用作列表,但这在实践中导致了不必要的复杂性。
- Lua 代码对于短脚本来说很容易理解,但是它的语法和最小的标准库使得它难以管理更大的程序。
在一个非常重要的项目中,芬兰民航局 (FCAA) 希望他们的用户界面布局不仅在 PowerPanel 上运行,而且在 Web 浏览器的环境中运行。此要求非常重要,以至于导致在 Java 中重新实现 PanMachine,以便它可以在浏览器中作为 applet 运行。由于 Lua 无法在 Java 下运行,这是替换它的好时机。
之所以选择 Python 和 Jython(Python 的 Java 实现),是因为它们允许 PanMachine 的 PowerPC 和 Java 实现执行相同的用户界面布局。在 PowerPC 上使用了用 C 实现的 Python,在浏览器 applet 中使用了用 Java 实现的 Jython。
用 Python 实现
使用 Python 重新实现的过程很顺利。Python 语言解释器和支持库是用 C 编写的,并且可以使用大多数 C 编译器进行编译。在这个项目中,Python 嵌入到其他代码中的能力非常出色。 文档 非常出色,示例也易于理解。
但是,PowerPanel 硬件没有硬盘,因此它本身无法编译 Python 解释器的 C 源代码。为了解决这个问题,开发人员从另一台机器交叉编译 Python,使用在另一种硬件上运行的编译器生成 PowerPC 的目标代码。完成此操作后,在任何机器上生成的 Python 字节码都可以在 PowerPanel 上运行而无需修改;只有语言本身的初始编译才需要交叉编译。
重写 Lua 布局
一旦基于 Python 的 GUI 布局工具的实现完成,就有必要使用 Python 重写现有的 Lua 布局。我们的布局编码员张开双臂拥抱 Python,因为它解决了他们在使用 Lua 时遇到的所有问题,并且由于 Python 简单明了的语法和广泛的标准库,使得编写新代码更容易。
在这次转换中,我们发现 Python 的语法对于新用户来说非常容易学习,并且我们的编码员能够完全重写 Lua 布局以利用 Python 提供的新功能,而不是仅仅在语言级别进行移植。
完成的布局代码包含大约 5000 行,是原始代码的一半大小,更容易维护,并且在 PanMachine 的 Java 端口中与 Jython 无缝协作。
结论
Python 使我们能够在时间紧迫的项目中满足客户要求,同时提高了我们工具的整体质量。自从改用 Python 以来,由于以下各种原因,布局实施变得容易得多
- Python 的运行时错误处理使得在代码中定位和修复问题更容易。Python 生成的堆栈跟踪,即使在自定义 PowerPanel 硬件上的分阶段生产中运行,也帮助加快了测试和调试过程。
- Python 庞大的标准库允许快速开发功能,而无需重新发明轮子。
- Python 非常简洁的语法和基于缩进的程序结构使得代码更易于阅读和维护。
自从在我们的开发中使用 Python 以来,为 TAPtools® 产品系列编写新用户界面布局的时间减少了三倍。
关于作者
Michael Bartl 最初于 2000 年加入 Frequentis 担任软件工程师,负责测试电信硬件,后来转向开发天气信息系统。几年后,他现在是 TAPtools® 产品系列的产品经理。他的主要嗜好是 Java、Python 和国际象棋。