
TacviewConnector-QT:基于 Qt 的 Tacview 实时遥测数据推送工具
1. 项目简介
TacviewConnector-QT是一款基于 C++/Qt 框架开发的桌面应用程序,其核心功能是将外部仿真系统的空战数据实时推送到回放客户端,使操作人员能够在 Tacview 中以三维视角实时观察仿真态势。
Tacview 是飞行模拟领域广泛使用的空战回放和分析工具,支持通过 ACMI(Air Combat Maneuvering Instrumentation)格式记录和回放飞行数据。本项目实现了 Tacview 的实时遥测协议(Real-Time Telemetry),通过 TCP 网络连接将仿真帧数据以 ACMI 文本格式流式推送给 Tacview 客户端,从而实现"边仿真、边回放"的实时态势展示效果。
2. 核心架构
项目采用经典的生产者-消费者模式,整体架构分为三层:


2.1 UI 层 — MainWindow
主窗口使用 Qt Widgets 构建(通过.ui文件设计),提供以下交互功能:
| 功能 | 说明 |
|---|---|
| 服务器设置 | 可配置监听端口(默认 42674)和帧间隔(默认 100ms),一键连接/断开 |
| 仿真控制 | 开始、暂停/继续、停止仿真,实时显示当前帧号和仿真时间 |
| 实体数据表 | 3 行 x 8 列表格,实时显示蓝方 F-35、红方 F-22、AIM-120C 导弹的名称、阵营、经纬度、高度和姿态角 |
| 状态指示 | 以彩色圆点实时显示服务器和 Tacview 客户端的连接状态(灰/橙/绿) |
2.2 仿真层 — SimWorker
SimWorker 继承QThread,在独立线程中运行仿真循环,不阻塞 UI。内置一套完整的演示场景,每帧按照时间线编排各种事件:
蓝方 F-35:持续飞行,正弦波模拟爬升/下降,周期性释放热诱弹
红方 F-22:持续飞行,反向正弦波模拟爬升/下降,周期性释放箔条弹,第 200 帧后开启雷达传感器
AIM-120C 导弹:第 101~201 帧从红方 F-22 位置发射并飞行,第 201 帧销毁
航路管理:红/蓝双方航路的添加、删除和随机重建
雷达威胁区:红方雷达传感器在第 200 帧后激活
仿真数据通过dataUpdated信号(跨线程安全传递)通知 UI 刷新,同时通过 API 调用将数据投递给 TacviewServer。

2.3 传输层 — TacviewServer
TacviewServer 是整个项目的核心,负责与 Tacview 客户端进行 TCP 通信,实现了完整的 Tacview 实时遥测协议:
协议握手流程:
服务端监听指定端口,等待 Tacview 客户端连接
客户端连接后,服务端发送握手标识:XtraLib.Stream.0\nTacview.RealTimeTelemetry.0\nhunter\n\0
客户端回复后,服务端发送 ACMI 文件头(FileType=text/acmi/tacview\nFileVersion=2.2\n)和参考时间
握手完成,帧定时器开始按固定间隔推送数据
数据推送机制:
TacviewServer 内部维护了多个待处理队列(QQueue),外部调用者通过以下 API 将数据投递到队列中:

帧定时器每帧按以下顺序处理数据:
处理实体删除请求
处理航路删除请求
处理传感器删除请求
构建时间戳头(RecordingTime+#帧时间)
创建箔条弹对象(带随机位置散布和自动到期清理)
创建热诱弹对象(同上)
发送航路更新数据
发送传感器更新数据
发送实体位置更新/创建数据
发送带雷达属性的实体数据
清理到期的箔条弹/热诱弹对象
这种队列化的设计使得仿真线程和网络发送线程实现了松耦合,任何线程都可以安全地调用 API 投递数据。
3. 数据类型体系
项目在TacviewTypes.h中定义了完整的数据类型体系:

每种数据类型都提供了toString()/toStringUpdate()/toStringCreate()方法,可将自身序列化为 Tacview ACMI 文本格式。
4. 技术特性
| 特性 | 说明 |
|---|---|
| 实时遥测协议 | 完整实现 Tacview Real-Time Telemetry 协议,支持 TCP 连接、握手、ACMI 格式数据流 |
| 多线程架构 | UI 线程、仿真线程、网络发送通过信号/槽和原子变量协调,线程安全 |
| 队列化发送 | 所有数据操作通过内部队列缓冲,由帧定时器统一处理,实现生产者-消费者解耦 |
| 箔条弹/热诱弹模拟 | 支持创建带随机散布的箔条弹和热诱弹对象,自动按时清理 |
| 雷达威胁区 | 支持为实体挂载雷达传感器属性(波束宽度、探测距离、方位等) |
| 航路管理 | 支持创建/删除/动态重建航路,航路点通过 Next 链接串联 |
| 可配置参数 | 帧间隔、监听端口、箔条弹散布系数、持续时间、重绘模式均可调整 |
| FD 版本兼容 | 通过 FD_VERSION 编译宏支持与外部仿真系统的数据转换 |
| 跨平台 | 基于 Qt 框架,支持 Windows / Linux 编译运行 |
| C++17 | 使用 C++17 标准,std::atomic 确保线程安全 |
5. 快速使用
使用 Qt Creator 打开TacviewConnector.pro
编译并运行程序
在界面上设置端口号(默认 42674)和帧间隔(默认 100ms)
点击"连接服务器"按钮
打开 Tacview 客户端,连接到localhost:42674
界面状态变为绿色 "Tacview 客户端已连接" 后,点击"开始仿真"
在 Tacview 中即可看到蓝方 F-35 和红方 F-22 的实时飞行态势
6. 扩展与集成
本项目设计为中间件角色,核心价值在于 TacviewServer 提供的 API 接口。实际使用时,可以将 SimWorker 替换为真实的外部仿真数据源:

只需按帧调用上述 API,即可将任意仿真系统的态势数据实时投射到 Tacview 中进行可视化。
7 适用场景
空战仿真态势展示:将仿真系统中的飞行器位置、姿态实时推送到 Tacview
战术训练回放:训练过程中实时记录,训练结束后可在 Tacview 中完整回放
雷达/传感器威胁可视化:将探测范围和波束方向投射到三维地图上
航路规划展示:动态显示飞行航路和航路点
武器效果模拟:箔条弹释放、热诱弹投放、导弹飞行轨迹的实时展示

欢迎关注我们的公众号,获取最新产品动态和技术资讯


声 明:原创文章,欢迎联系获取转载授权,并注明来源航空宝;转载文章,目的在于传递更多信息,并不代表平台赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时联系我们更正或删除。文章版权归原作者及原出处所有 ,本平台只提供参考并不构成任何投资及应用建议。

夜雨聆风