3.1、The Evaluation Process of a State Machine|状态机评估过程
1). 请求 thinker(思考器)进程
thinker:仿真中的计算工作线程,模拟人 / 设备处理任务的耗时。
当需要做状态评估,申请一个thinker;拿到 thinker 后,把它标记为忙,占用时间等于本状态配置的time_to_evaluate,模拟处理耗时。
time_to_evaluate模拟人或者机器完成逻辑判断的耗时。
如果当前所有 thinker 都忙,本次评估进入pending queue(待处理队列),等待空闲 thinker。
WSF_TASK_PROCESSOR 支持配置多 thinker:
cpp
number_of_servers <n>
默认值为1,增大 n 可以并行处理更多航迹的状态评估。
2). thinker 评估时间结束后,执行当前状态规则(完整执行顺序)
- 初始化内置脚本变量:
TRACK, PLATFORM, PROCESSOR, MESSAGE, TIME_NOW。 - 按从上到下顺序依次执行每一个
next_state布尔脚本- ① 如果所有
next_state都返回 false:停留在当前状态 。thinker 标记空闲,根据evaluation_interval调度下一轮评估。 - ② 如果某一个
next_state返回 true,执行状态跳转:-
执行旧状态的
on_exit退出脚本 -
执行新状态的
on_entry进入脚本 -
更新当前状态为新状态
-
thinker 占用时间更新为新状态的
time_to_evaluate -
等待 thinker 完成,继续执行新状态评估逻辑
3.2、Assignment and Execution|任务分配与执行
任务管理器可以向下属平台分配任务、取消任务 。
WsfTaskManager提供核心接口: -
AssignTask:下发任务;武器场景可直接用FireAt、StartTracking、StartJamming -
CancelTask:取消任务 -
TasksAssignedFor:查询本机向外分配出去的任务 -
AssigneesForTask:查询某任务的接收方
-
- ① 如果所有
1).通信与失效规则
-
-
跨平台任务的分配 / 取消 / 状态消息走仿真通信网络;会受距离、干扰影响,存在丢包。
-
如果任务接收方平台被摧毁,分配方会自动全部取消发给该平台的所有任务。
-
✅收到外部下发过来的任务时,平台内部执行流程
-
更新航迹管理器:处理任务消息附带的航迹。如果无法和本机已有航迹关联匹配,就新建一条
local track本地航迹。 -
重要提醒:任务发送方、接收方的航迹 ID 并不相同!不能直接比对 TrackID。
-
对这条航迹增加
lock count(锁定计数):只要任务处于激活,该航迹就不会被系统清理删除。 -
将任务加入本机 "已接收任务列表",调用
TasksReceivedFor接口可以查询。 -
如果本机之前不知道该目标:自动为此目标创建并启动一套独立状态机实例。
-
立刻发起一次状态评估请求,只要有空闲 thinker 就马上执行,不需要等待下一个评估周期。
2).收到任务取消指令(task cancel)时的处理逻辑
-
当平台收到任务取消消息,WSF_TASK_PROCESSOR 按下面顺序执行:
从已接收任务列表清除该任务记录
调用TasksReceivedFor()查询时,将不再返回这条任务。
向任务下发方(assigner)发送确认回执
通知发送方:取消指令已经收到。
执行on_task_cancel脚本(如果用户定义了该脚本)
释放该任务占用的传感器、武器资源(仅针对三类任务生效:FireAt(开火)、StartTracking(跟踪)、StartJamming(干扰))。
任务取消,停止开火、停止跟踪目标、停止电子干扰,释放硬件仿真资源。
对本地航迹的 lock‑count 锁定计数做减 1 操作
如果没有其他任务继续锁定这条航迹,并且航迹存活时间超过系统的purge interval(航迹清理超时时间),该本地航迹就会被系统清除回收。
如果航迹被清除:
销毁这条航迹所对应的那套独立状态机实例
触发执行on_track_drop脚本(如果开发者定义),做目标丢失后的自定义处理。
-