文件骨架
- 必有:
set_up.txt+platforms/ sensors/ weapons/ process/ signatures/ scenarios/ - 允许子目录细分库(如
sensors/radar/、weapons/aam/agm/ssm),include 规则不变。
平台与场景边界
platforms/只定义 platform_type(能力组合:mover/sensor/weapon/processor/signature/comm)。scenarios/只做实例化(platform/position/route/command_chain/edit)。
include 规则
- 平台引用了什么,就 include 对应库:
- sensor →
sensors/*.txt - weapon →
weapons/*.txt - processor →
process/*.txt - signature →
signatures/*.txt - antenna_pattern →
patterns/*.txt(可同文件定义)
- sensor →
- 不要把依赖留给 scenario 或 set_up。
能力触发 → 必须生成
- 移动/航线:有 route 就必须有 mover。
- 探测:有 sensor 就必须有 data_mgr(WSF_TRACK_PROCESSOR)。
- 交战:有 weapon 就必须有 task_mgr(或任务处理器)。
- 可被探测目标:platform / missile 至少一个 signature。
武器三件套
- ammo 平台(platform_type … mover …)
- weapon_effects
- weapon(WSF_EXPLICIT_WEAPON,必须
launched_platform_type+weapon_effects)
通信/链路
- 常见:
network+comm TEAM_DATALINK+internal_link data_mgr - 支持
local_link / external_link / report_to command_chain
场景常用字段
side / position / altitude / heading / speedroute ... end_routecommand_chain <chain> <commander|SELF>edit sensor / edit processorzone ... end_zone+use_zone <zone> as <alias>
一致性校验(必须)
internal_link data_mgr→ 必有 WSF_TRACK_PROCESSORWeapon("x")↔weapon x- routes → platform_type 必有 mover
- 引用的 platform_type/sensor/weapon/signature/processor 必须存在
目标 将自然语言形式的军事想定(NL)稳定、可控地转化为 结构正确、依赖完整、可运行的 AFSIM 工程代码。
本规范定义:
- 工程目录结构
- 文件职责边界
- 能力触发 → 代码块生成规则
- 雷达 / 武器 / signature 的完整范式
- 分布式雷达-防空与一体化交战的脚本架构
- NL2Code 推荐生成顺序与一致性校验
ProjectName/
├─ set_up.txt # 仿真入口文件(顶层控制)
├─ output/ # 输出(log / event / aer)
├─ patterns/ # 天线/波束/扫描模式库
├─ platforms/ # 平台模板库(实体本体)
├─ process/ # 行为逻辑 / 处理器
├─ scenarios/ # 场景部署(实例化)
├─ signatures/ # 目标特征库(RCS / IR / EO)
├─ sensors/ # 传感器模型库
└─ weapons/ # 武器与弹药定义库
案例补充:data 中大量使用子目录来细分库,例如
sensors/radar/、sensors/esm_rwr/、weapons/aam/、weapons/agm/、weapons/ssm/。
这不改变 include 规则,只是库的组织方式更细。
- 定义 platform_type(模板)
- 描述:实体“是什么 + 能做什么”
- 包含:
- mover
- sensors
- weapons
- processors
- signatures
- comm
- 必须 include_once 所有直接依赖的库文件
- 只负责 实例化与部署
- 描述:
- 实例数量
- 阵营
- 初始位置 / 航线
- 指挥链 / zone
- ❌ 不允许定义 platform_type
- ✅ 允许
edit sensor / edit weapon / edit processor做实例差异化
平台是能力组合,场景不是能力补丁
只要平台中 直接引用 了以下对象,就必须 include 对应库:
| 引用内容 | 必须 include |
|---|---|
sensor <inst> <MODEL> |
sensors/*.txt |
weapon <inst> <WEAPON_TYPE> |
weapons/*.txt |
processor <inst> <TYPE> |
process/*.txt |
| radar/IR/EO signature | signatures/*.txt |
| antenna_pattern | patterns/*.txt |
禁止:把依赖留给 scenario 或 set_up 隐式补齐。
案例补充(data/*):
- 常见做法:
platforms/common.txt统一定义 signature / comm / network / filter,其他平台include_once platforms/common.txt复用。 include_once用于库定义,include用于组合场景或顶层入口(例如 setup.txt / orwaca_full_area.txt)。
| 类型 | 示例 |
|---|---|
| 平台类型名 | SAM_GROUND_SA10 |
| 平台实例名 | red_sam_01 |
| 武器实例名 | sam_launcher |
Weapon("X") 中的
"X"必须等于平台中 weapon 的实例名
weapon sam_launcher SA10_WEAPON
...
Weapon("sam_launcher")
触发 NL 飞机 / 车辆 / 导弹 / 舰船 / UAV / 移动 / 航线
platform_type <TYPE> WSF_PLATFORM
mover WSF_AIR_MOVER # 或 GROUND / SURFACE
maximum_speed 250 m/s
end_mover
end_platform_type
强制规则 所有平台与导弹 必须至少绑定一种 signature,否则无法被探测/交战。
radar_signature FTR_RCS
infrared_signature FTR_IR
optical_signature FTR_EO
触发 NL 搜索 / 探测 / 跟踪 / 预警 / 照射
antenna_pattern ACQ_RADAR_ANTENNA
rectangular_pattern
peak_gain 35 dB
minimum_gain -10 db
azimuth_beamwidth 10 deg
elevation_beamwidth 10 deg
end_rectangular_pattern
end_antenna_pattern
include_once patterns/radar_patterns.txt
sensor ACQ_RADAR WSF_RADAR_SENSOR
one_m2_detect_range 500 nm
maximum_range 1500 nm
antenna_height 5 m
frame_time 10 sec
scan_mode azimuth_and_elevation
azimuth_scan_limits -180 deg 180 deg
elevation_scan_limits 0 deg 50 deg
transmitter
antenna_pattern ACQ_RADAR_ANTENNA
power 1000 kw
frequency 3000 mhz
internal_loss 2 db
end_transmitter
receiver
antenna_pattern ACQ_RADAR_ANTENNA
bandwidth 2 mhz
noise_power -160 dbw
internal_loss 7 db
end_receiver
probability_of_false_alarm 1.0e-6
required_pd 0.5
swerling_case 1
hits_to_establish_track 3 5
hits_to_maintain_track 1 5
track_quality 0.6
reports_range
reports_bearing
reports_elevation
reports_iff
end_sensor
sensor acq ACQ_RADAR
on
internal_link data_mgr
end_sensor
- 在对空搜索 / 导引头 seeker 中常见字段:
selection_mode / initial_mode / slew_mode / mode_template / mode antenna_pattern可直接写在 sensors/.txt 与 sensor 同文件,**不一定非要单独 patterns/.txt**。
sensor RADAR_SEEKER WSF_RADAR_SENSOR
selection_mode single
initial_mode SEARCH
slew_mode azimuth_and_elevation
mode_template
scan_mode azimuth_and_elevation
azimuth_scan_limits -90 deg 90 deg
elevation_scan_limits -90 deg 90 deg
frame_time 1.0 sec
end_mode_template
mode SEARCH
frame_time 0.1 sec
end_mode
end_sensor
强制规则 只要任一 sensor 使用
internal_link data_mgr,平台必须定义:
processor data_mgr WSF_TRACK_PROCESSOR
end_processor
触发 NL 协同交战 / 预警机引导 / IADS / 雷达-火控分离
comm cmdr_net TEAM_DATALINK
network_name <local:slave>
internal_link data_mgr
end_comm
⚠ 即使平台没有 sensor,也必须有
data_mgr + comm才能接收航迹并交战
常见组合:
network blue_net WSF_COMM_NETWORK_MESH_LEGACY
end_network
comm blue_comm TEAM_DATALINK
network_name blue_net
internal_link data_mgr
end_comm
多跳/外链:
local_link <comm_name>用于本地转发external_link platform <id> comm <comm_name> via <comm_name>用于跨平台转发report_to command_chain <chain> commander via <comm>让 data_mgr 通过链路上报- Ad-hoc 组网常见:
WSF_COMM_NETWORK_AD_HOC+WSF_RADIO_TRANSCEIVER
track_manager + filter 常见搭配:
track_manager
filter FILTER_TACTICS end_filter
end_track_manager
platform_type LARGE_SAM_MISSILE WSF_PLATFORM
mover WSF_STRAIGHT_LINE_MOVER
average_speed 2643 kts
maximum_lateral_acceleration 20 g
guidance_mode lead_pursuit
end_mover
radar_signature MISSILE_RCS
infrared_signature MISSILE_IR
processor seeker WSF_PERFECT_TRACKER
update_interval 0.5 s
end_processor
processor fuse WSF_AIR_TARGET_FUSE
max_time_of_flight_to_detonate 37 sec
end_processor
end_platform_type
weapon_effects LARGE_SAM_EFFECT WSF_GRADUATED_LETHALITY
radius_and_pk 100 m 0.7
end_weapon_effects
weapon LARGE_SAM_WEAPON WSF_EXPLICIT_WEAPON
launched_platform_type LARGE_SAM_MISSILE
weapon_effects LARGE_SAM_EFFECT
end_weapon
weapon sam_launcher LARGE_SAM_WEAPON
quantity 16
end_weapon
- 气动/弹道模型(WSF_AERO)
aero SIMPLE_AERO WSF_AERO
mach_and_cd 0.0 1.35
mach_and_cd 1.0 1.85
reference_area 0.02488 m2
end_aero
- 导引/制导/武器管理
processor autopilot WSF_GUIDANCE_COMPUTER
end_processor
processor weapon_manager WSF_WEAPON_TRACK_PROCESSOR
turn_on_sensor seeker at_time 30 s before_intercept
end_processor
- 导弹内置 seeker(sensor + internal_link)
sensor seeker RADAR_SEEKER
internal_link track_mgr
internal_link weapon_manager
end_sensor
场景里常见字段与能力:
side / position / altitude / heading / speedcommand_chain <chain> <commander_id|SELF>edit sensor / edit processor进行单个平台的临时改参route ... end_route进行路径/航线zone ... end_zone与use_zone <zone> as <alias>
zone 100_sector
circular
maximum_radius 60 nm
maximum_altitude 20 nm
end_zone
platform 10_iads_cmdr IADS_CMDR
side blue
position 34:37:33.94n 52:06:41.47e
command_chain blue_chain SELF
edit processor data_mgr
report_to command_chain blue_chain commander via blue_comm
end_processor
end_platform
# Tank
infrared_signature TANK_IR
constant 50 watts/steradian
end_infrared_signature
optical_signature TANK_EO
constant 10 m^2
end_optical_signature
radar_signature TANK_RCS
constant 5 m^2
end_radar_signature
(Fighter / Aircraft / Ship / SAM site / Radar vehicle / UAV 同理)
infrared_signature MISSILE_IR
constant 800 watts/steradian
end_infrared_signature
radar_signature MISSILE_RCS
constant 0.05 m^2
end_radar_signature
- sensor → data_mgr → comm
- 不写脚本,靠 AFSIM 内建机制
- SIMPLE_ENGAGE 或 WSF_SCRIPT_PROCESSOR
- 从 data_mgr 取航迹
- 调用
Weapon("sam_launcher")
- 雷达开关(EMCON)
- 发射窗口
- 优先级规则
- 定时 / 周期触发
script_variables声明可在脚本/处理器内使用的变量execute at_interval_of周期执行on_message响应消息(如 WSF_TRACK_MESSAGE)
script_variables
bool mDrawTarget = false;
end_script_variables
execute at_interval_of 1 sec
if (mDrawTarget)
{
// do something
}
end_execute
on_message
type WSF_TRACK_MESSAGE
script
writeln(PLATFORM.Name(), "RECEIVES TRACK");
end_script
end_on_message
Radar 平台
- sensor + data_mgr
- comm + data_mgr
- 无 weapon
SAM 平台
- data_mgr + comm
- weapon
- fire_control processor
雷达发现 → comm 共享航迹 → SAM 自动交战 ❌ 不需要“手写雷达转交目标脚本”
- sensor + data_mgr
- weapon
- fire_control
include_once platforms/common.txt
include_once platforms/<USED_PLATFORMS>.txt
include_once scenarios/<SCENARIO>.txt
event_pipe file output/project.aer
end_event_pipe
end_time 60 minutes
set_up.txt直接 include_once 各类库 + scenarios- 适用于小规模或单一场景
setup.txt 用于加载类型库与环境,主入口文件再 include 多个场景:
file_path .
include event_output.txt
include event_pipe.txt
include terrain.txt
include_once platforms/common.txt
include_once platforms/<PLATFORMS>.txt
主入口(如 orwaca_full_area.txt):
define_path_variable CASE orwaca_full_area
log_file output/$(CASE).log
include setup.txt
include scenarios/<SCENARIO_1>.txt
include scenarios/<SCENARIO_2>.txt
event_output file output/$(CASE).evt end_event_output
event_pipe file output/$(CASE).aer end_event_pipe
end_time 5 hours
- NL → 中间表示(实体 / 能力 / 关系)
- 选择或补齐库(最小可跑)
- 生成 platforms(含 include)
- 生成 sensors / weapons / signatures / process
- 生成 scenarios
- 生成 set_up.txt
- 执行一致性校验
- internal_link data_mgr → 必有 WSF_TRACK_PROCESSOR
- Weapon("x") ↔ weapon x
- 雷达 → antenna_pattern 可达
- 所有 platform / missile → 至少一个 signature
- scenarios 中出现 route → 对应 platform_type 必须有 mover
- scenarios 中引用的平台类型必须存在
- 所有引用对象可解析
- 结构优先于细节
- 能力驱动,而不是名字驱动
- 平台是“能力组合体”
- 脚本只做决策,不做感知
- 跑得起来 > 看起来复杂