AFSIM 05篇 场景定义语言 SDL 入门:用文本描述战场
系列导航共 15 篇入门篇01 AFSIM 是什么 · 02 从零搭建环境 · 03 跑通第一个仿真 · 04 核心概念扫盲基础篇05 SDL 入门· 06 Platform 详解 · 07 传感器与跟踪 · 08 武器与交战 · 09 机动与航线进阶篇10 通信与处理器 · 11 External Control · 12 TCP 客户端实战 · 13 Wizard 可视化高级篇14 C 插件开发 · 15 调试与最佳实践上一篇04 核心概念扫盲 下一篇06 Platform 详解05 场景定义语言 SDL 入门用文本描述战场在 第 04 篇 里我们建立了类型 实例平台包含组件的心智模型。但那些平台和传感器到底写在哪儿、怎么写成机器能读的东西答案就是本篇的主角SDLScenario Definition Language场景定义语言。可以毫不夸张地说SDL 是整个 AFSIM 系列后续所有篇章的地基。武器、传感器、机动、通信全都建立在你能熟练书写 SDL 之上。一、SDL 是什么文本 关键字 块SDL 是一门基于文本的关键字 块block语言。它不像 C 那样需要编译也不像 Python 那样强调逻辑控制它的定位非常朴素用人类可读的文本把战场长什么样描述出来。它的基本单元是块。每个块用一对关键字包裹内部是一组属性设置。最常见的块有platform/platform_type平台及其类型模板详见 第 06 篇processor/processor_type处理器sensor/sensor_type传感器comm/comm_type通信设备weapon/weapon_type武器一个 SDL 文件本质上就是若干块的有机组合。下面这张 Mermaid 图展示了 SDL 文件的整体块结构二、文件结构与常用语法一个典型的 SDL 文件从上到下大致是这样一个顺序全局场景设置场景名称、起止时间、坐标系等。各类*_type模板定义先定义类型后面实例才能引用。具体的实例块用前面定义的类型造出战场上的真实实体。SDL 有几条非常简单的语法规则记住就够用注释以#开头的行是注释引擎会忽略。多写注释是好习惯。include 其他文件用include xxx.txt可以把另一个 SDL 文件原样嵌入当前文件。这让你把通用模板和具体想定分文件管理非常清爽。变量可以用简单的变量先存一个数值后面重复引用便于统一修改。# 这是一条注释定义一个常量高度 variable ALT 5000 # 单位米 include common_types.txt # 引入通用类型模板 scenario_name My First Scenario start_time 0 end_time 3600 platform WATCHER platform_type RECON_UAV altitude ALT end_platform三、一个最小可运行场景下面给出一个最小、但可以真正跑起来的 SDL 片段包含 1 个红方侦察无人机和 1 个蓝方静止目标。把它存成demo.txt用 Wizard 或命令行加载即可运行。# demo.txt —— 最小可运行示例 scenario_name Demo Scenario start_time 0 end_time 600 # 蓝方一个静止的地面目标 platform ENEMY_GROUND platform_type GENERIC_GROUND side blue latitude 32.0 longitude 118.0 altitude 0 end_platform # 红方一架高空侦察无人机 platform UAV_01 platform_type RECON_UAV side red latitude 33.0 longitude 118.5 altitude 8000 speed 200 end_platform这个片段里你看到了side阵营、latitude/longitude/altitude经纬度与高度、speed速度等属性——它们正是 第 06 篇 要展开讲解的平台关键属性。安装实证真实场景里长什么样在demos/air_to_air/scenarios/1v1.txt中一个真实作战平台是这样写的节选platform Talon_1_1 BLUE_FIGHTER side blue commander SELF command_chain IFLITE SELF command_chain ELEMENT SELF heading 90 deg position 00:05:00.00n 01:10:00.00w altitude 30000.00 ft script_variables MISSION_TYPE SWEEP; ROUTE.Append(blue_route); end_script_variables edit processor assessment enemy_side red enemy_type RED_FIGHTER mission_task SWEEP end_processor end_platform注意几个比上面最小示例更接近实战的点commander/command_chain声明了指挥关系同一架机能同时属于IFLITE与ELEMENT两条指挥链position直接用地理坐标串度分秒而非直角坐标script_variables里能写脚本逻辑如把航线ROUTE追加进平台edit processor则就地修改某个处理器的参数。这正是 第 10 篇 要展开的指挥链 处理器的雏形。四、为什么 SDL 如此重要对比 第 04 篇 讲过的类型 实例模型你会发现 SDL 几乎一一对应xxx_type块 类型定义模板xxx块 实例具体实体换句话说你写的每一行 SDL都是在落实那套 WSF 框架模型。后面我们要学的传感器、武器、机动、通信无不是先定义*_type再在platform里挂载对应的组件。把 SDL 练熟后面所有篇章都会变成在这个框架里加新块而已。五、小结SDL 是 AFSIM 的场景定义语言用关键字 块的文本描述战场是后续所有篇章的基础。基本块包括 platform / processor / sensor / comm / weapon 及其对应的*_type模板。语法极简#注释、include引入外部文件、变量统一常量。文件结构通常是全局设置 → 类型模板 → 具体实例。一个 1~2 个 platform 的最小片段即可跑通验证了 第 04 篇 的类型 实例模型。下期预告SDL 的骨架搭好了下一篇 第 06 篇《Platform 详解》 我们深入最常用的platform_type与platform块并用作者真实项目里的UAV_01与Enemy_Ship手把手写出完整平台定义。