AFSIM 13篇 可视化利器 Wizard:快速调试与态势呈现

🧭 系列导航(共 15 篇):
入门篇:01 AFSIM 是什么? · 02 从零搭建环境 · 03 跑通第一个仿真 · 04 核心概念扫盲
基础篇:05 SDL 入门 · 06 Platform 详解 · 07 传感器与跟踪 · 08 武器与交战 · 09 机动与航线
进阶篇:10 通信与处理器 · 11 External Control · 12 TCP 客户端实战 · [13 Wizard 可视化]
高级篇:14 C++ 插件开发 · 15 调试与最佳实践
上一篇:12 TCP 客户端实战 | 下一篇:14 C++ 插件开发

13. 可视化利器 Wizard:快速调试与态势呈现

如果你已经跟着本系列走到了第 12 篇,应该已经能用 Java/Python 客户端把仿真"跑起来"并实时操控了(详见 第 12 篇)。但有一个问题始终绕不开:人怎么"看见"仿真里发生了什么? 字符界面打印的_track_(跟踪)、事件文本,终究不如一幅态势图来得直观。

AFSIM 自带了一款图形界面工具 Wizard,它就像仿真系统的"驾驶舱仪表盘"——不需要写一行代码,就能浏览场景、查看对象属性、控制运行、回放态势、绘制曲线。这一篇,我们就把它彻底玩明白。

Wizard 是什么:你的仿真"驾驶舱"

一句话类比:Wizard 之于 AFSIM,就像 Chrome DevTools 之于前端开发。你写的 SDL(场景定义语言)是"源码",仿真引擎是"运行时",而 Wizard 就是那个让你能随时看状态、下断点、查日志的可视化调试环境。

Wizard 通常随 AFSIM 安装包一起放在 bin/ 目录下,真实可执行文件名就是 wizard.exe(不是文章里偶尔误写的"启动脚本")。双击运行后,它会自动关联当前安装的 AFSIM 引擎版本。打开一个 .txt 场景文件(AFSIM 的 SDL 想定就是纯文本 .txt,不是 .adt)后,你就能进入主界面。
在这里插入图片描述

主界面大致分四块:场景树(Scenario Tree) 在左侧,态势视图(Scenario View) 占中间,底部是运行控制条与事件/日志窗口,右侧通常是属性面板。下面我们逐一拆解。
在这里插入图片描述

🔍 安装实证:打开你本机的 E:\afsim-2.9.0-win64\bin\,能直接看到 wizard.exe——它就是 Wizard 的真实文件名。同目录里还有一整排"幕后工具":warlock.exe(仿真引擎,第 03 篇 讲过)、mystic.exe(蒙特卡洛分析)、evt_reader.exe(事件阅读器)、post_processor.exe(后处理)、sensor_plot.exe(传感器绘图)等。Wizard 只是其中面向"人"的那块 GUI 面板,真正的计算都由 warlock 在后台跑。另外再强调一次:AFSIM 场景文件扩展名是 .txt(纯文本 SDL),双击 Wizard 打开的也是 xxx.txt 想定,不是 .adt。

场景树与对象属性:看懂你的战场

场景树浏览

场景树把整个仿真世界按层级展开:顶层是 Scenario(场景),往下是各个 Platform(平台,如飞机、舰艇),再往下是它们挂载的 Processor(处理器)、Sensor(传感器)、Weapon(武器)等组件。

你可以把它理解为文件资源管理器——只不过这里"文件夹"是平台,"文件"是平台的各个子系统。展开 UAV_01,你能看到它的雷达、数据链、挂载弹药;展开 Enemy_Ship,能看到蓝方的探测与防御配置。调试时,最先要确认的就是:我定义的平台,真的按预期加载进来了吗?场景树会立刻给你答案。

对象属性查看

点选任意平台或组件,右侧属性面板会列出它的实时状态:位置、速度、航向、高度、当前任务(Mover Route)、各传感器开关状态等。当仿真实时运行时,这些数值会随仿真时钟跳动更新。

这正是验证 第 06 篇 平台定义、第 07 篇 传感器配置是否生效的最快途径——不需要打日志,直接看面板。

运行控制:跑起来、停下来、看回放

运行 / 暂停控制

Wizard 底部控制条提供了我们最熟悉的那组按钮:运行(Run)、暂停(Pause)、单步(Step)、停止(Stop)、重置(Reset)。其中"单步"在排查"某事件为什么没触发"时格外好用——你可以让仿真时钟一点一点往前推,配合事件窗口观察每一步推进后世界状态的变化。

如果你已经按 第 03 篇 用命令行 warlock 跑通过第一个仿真,会发现 Wizard 的按钮本质上就是给同一套引擎套了个 GUI 外壳:点"运行",等同于在引擎里启动时钟;点"暂停",等同于冻结事件队列。理解了这点,warlock 命令行派和 Wizard 的 GUI 派就打通了。

态势回放

AFSIM 是离散事件仿真(Discrete Event Simulation),仿真时钟由事件驱动而非真实时间推进(详见 第 04 篇)。这意味着一次仿真可以被完整记录,之后反复回放。

Wizard 支持在仿真结束后加载记录文件进行态势回放(Replay):拖动时间轴,就能让整场战斗倒带、慢放、快进。做武器交战分析、复盘红蓝对抗时,回放比"再跑一遍"高效得多——尤其是跑一次要十几分钟的复杂场景。

调试利器:实时 Track 与事件日志

查看实时 Track

在 第 07 篇 我们讲过,传感器探测到的目标会变成 Track(跟踪)。Wizard 的态势视图里,每个被探测到的目标通常会以特定图标(如空心三角形或方框)标注,点开就能看到该 Track 的置信度、位置、速度估计值。

更进阶的,Wizard 可以直接把一个平台的 Master Track List(主跟踪列表)可视化——你写的外部控制程序(第 11/12 篇)通过 TCP 拿到的,正是这份数据。在 Wizard 里对照"引擎真实 Track"与"客户端收到的 Track",是排查外部控制数据异常的第一步。

事件日志

Wizard 底部有一个事件/日志窗口,会实时滚动输出仿真过程中产生的事件(如平台起飞、传感器探测到目标、武器发射、通信收发等)。每条事件带时间戳(仿真时钟)与所属平台。

小贴士:如果你用 第 12 篇 的 Java 客户端发了一条 FlyTo 指令但平台"不动",第一反应应该是——打开 Wizard 事件日志,看这条指令对应的 PlatformCommandEvent 到底有没有被引擎解析执行。日志里没有,说明指令没送达或格式错了;日志里有但平台没动,说明指令解析了但路由/机动配置有问题。这个二分法能省下大量瞎猜时间。

关于断点

需要说明:Wizard 的"断点"能力取决于具体版本与组件支持,属于可选调试手段。更可靠、跨版本通用的做法,是在 SDL 中插入 event_output 输出语句,或在 第 15 篇 将要讲到的 LOG 日志里打点。本文不把断点作为"一定存在"的功能来承诺,避免误导。

.plt 绘图文件:把数据变成曲线

仿真跑完,光看数字不够,我们还要"看图说话"。AFSIM 在运行过程中可以输出 .plt 格式的数据文件(记录某变量随时间的变化,例如某平台高度曲线、某传感器探测距离、某通信链路吞吐等)。

查看 .plt 有两种常见方式:

  1. Wizard 内嵌查看:Wizard 的 Plot 视图可以直接加载 .plt 并渲染曲线(前提是场景里通过 plot 语句输出了数据)。
  2. 配套命令行工具:bin/ 下的 sensor_plot.exe 专门负责传感器/探测类绘图;更复杂的后处理与统计交给 post_processor.exe;要回看离散事件全过程,用 evt_reader.exe 读取 .evt 事件文件。这些都是 bin/ 里真实存在的程序,不是示例占位——把 .plt 想成仿真的"心电图",把 evt_reader 想成它的"黑匣子读取器"即可。

# 典型的 .plt 文件结构(示意,非真实语法,各版本略有差异)


# 头部描述变量名与单位


TIME  ALTITUDE  GROUND_SPEED
0.0   8000      220
1.0   8050      225
2.0   8100      230
...

一句话类比:.plt 就是仿真的"心电图",把离散事件驱动下某个量随时间的变化,画成一条连续的曲线,让你一眼看出"哪里抖动、哪里突变、哪里没动"。

小结

  • Wizard 是 AFSIM 自带 GUI,相当于仿真系统的可视化调试驾驶舱,零代码即可上手。
  • 场景树负责"看全貌"(平台、组件是否加载),属性面板负责"看细节"(位置、速度、开关状态)。
  • 运行/暂停/单步/回放让离散事件仿真可被交互式控制与复盘,比反复重跑更高效。
  • 实时 Track 与事件日志是排查外部控制(第 11/12 篇)问题的第一现场。
  • .plt 曲线文件把数据变成"心电图",配合 Wizard 或配套工具直观呈现变量随时间变化。

下期预告

下一篇我们钻进 AFSIM 的"内核"——第 14 篇 C++ 插件开发,从继承 WSF 基类到编译出自己的 DLL,亲手扩展仿真能力。如果这篇对你有帮助,别忘了点赞、收藏、关注,我们下期见。

posted @ 2026-08-15 14:58  沙盘客  阅读(3)  评论(0)    收藏  举报