三、状态机评估流程 & 任务分配执行

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:下发任务;武器场景可直接用FireAtStartTrackingStartJamming

      • CancelTask:取消任务

      • TasksAssignedFor:查询本机向外分配出去的任务

      • AssigneesForTask:查询某任务的接收方

1).通信与失效规则

    • 跨平台任务的分配 / 取消 / 状态消息走仿真通信网络;会受距离、干扰影响,存在丢包。

    • 如果任务接收方平台被摧毁,分配方会自动全部取消发给该平台的所有任务

    • ✅收到外部下发过来的任务时,平台内部执行流程

    • 更新航迹管理器:处理任务消息附带的航迹。如果无法和本机已有航迹关联匹配,就新建一条local track本地航迹。

    • 重要提醒:任务发送方、接收方的航迹 ID 并不相同!不能直接比对 TrackID

    • 对这条航迹增加lock count(锁定计数):只要任务处于激活,该航迹就不会被系统清理删除。

    • 将任务加入本机 "已接收任务列表",调用TasksReceivedFor接口可以查询。

    • 如果本机之前不知道该目标:自动为此目标创建并启动一套独立状态机实例

    • 立刻发起一次状态评估请求,只要有空闲 thinker 就马上执行,不需要等待下一个评估周期

    2).收到任务取消指令(task cancel)时的处理逻辑

    1. 当平台收到任务取消消息,WSF_TASK_PROCESSOR 按下面顺序执行:

      从已接收任务列表清除该任务记录

      调用TasksReceivedFor()查询时,将不再返回这条任务。

      向任务下发方(assigner)发送确认回执

      通知发送方:取消指令已经收到。

      执行on_task_cancel脚本(如果用户定义了该脚本)

      释放该任务占用的传感器、武器资源(仅针对三类任务生效:FireAt(开火)、StartTracking(跟踪)、StartJamming(干扰))。

      任务取消,停止开火、停止跟踪目标、停止电子干扰,释放硬件仿真资源。

      对本地航迹的 lock‑count 锁定计数做减 1 操作

      如果没有其他任务继续锁定这条航迹,并且航迹存活时间超过系统的purge interval(航迹清理超时时间),该本地航迹就会被系统清除回收。

      如果航迹被清除:

      销毁这条航迹所对应的那套独立状态机实例

      触发执行on_track_drop脚本(如果开发者定义),做目标丢失后的自定义处理。

相关推荐
雨田哥19 天前
我使用AFSIM助手写了一个想定场景脚本
ai·afsim·ai afsim·afsim助手·afsim智能助手·afsim智能编码·afsim智能问答
vanillazheng19 天前
一、AFSIM概述
afsim
二DUAN帝4 个月前
态势仿真推演系统 AFSIM+UE 架构选型
qt·ue5·afsim
雨田哥5 个月前
Qt AFSim雷达态势显控终端-AI战术辅助智能体
ai·afsim·qt仿真·仿真智能体·战术辅助智能体·ai仿真智能体·雷达态势显控终端
雨田哥8 个月前
Qt AFSim雷达显控端-威胁目标信息卡片
afsim·qt雷达·雷达显控·雷达仿真·afsim仿真·qt威胁目标卡片·qt模拟器
雨田哥9 个月前
Qt AFSim雷达探测显示
qt·afsim·qt雷达·qt仿真·雷达显控端·qt雷达模拟器
信必诺1 年前
AFSim2.9.0学习笔记 —— 2、AFSim的Wizard软件概述(ArkSIM集成开发环境 (IDE))
afsim·仿真推演·仿真作战
信必诺1 年前
AFSim2.9.0学习笔记 —— 3、Wizard平台类型与ArkSIM平台介绍
afsim·推演仿真·作战推演
幽迷狂1 年前
AFSIM入门教程03.03:更新所有依赖库版本
c++·qt·仿真·osgearth·osg·军事·afsim