AFSim 基础总结一 代码总结详解(4)【通讯】

本项目完整代码 见 AFSIM通讯完整代码

通讯


     通讯设备为许多AFSIM功能奠定了基础,包括远程任务分配、指挥链以及许多其他模拟和建模选项。

这些设备是促进平台之间远程通信的部分。它们在平台之间传输和接收消息,可以是有线或无线。通讯设备必须使用相同的网络进行相互通信


1   communications.txt中代码如下

# communications.txt
# A component of the simple_flight demo
 
comm AIR_RADIO_TRANSCEIVER WSF_RADIO_TRANSCEIVER
   transmitter
      frequency 120 mhz
   end_transmitter
 
   receiver
      frequency 120 mhz
   end_receiver
end_comm

下面是您提供的 communications.txt 文件的逐行解释:

# communications.txt 
  • 这行是一个注释,通常用于描述文件内容。这里说明该文件与“simple_flight”演示相关。
# A component of the simple_flight demo 
  • 另一行注释,进一步说明文件是该演示的一部分。
comm AIR_RADIO_TRANSCEIVER WSF_RADIO_TRANSCEIVER 
  • 这行定义了一个通信组件。AIR_RADIO_TRANSCEIVER 是组件的名称,WSF_RADIO_TRANSCEIVER 是此组件所使用的模型或类型。
transmitter 
  • 此行指示该组件包含一个发射器。
frequency 120 mhz 
  • 这里定义了发射器的频率为 120 MHz(兆赫兹)。这表示发射器工作在这个频率上。
end_transmitter 
  • 这一行表示发射器的定义结束。
receiver 
  • 这里定义了一个接收器,表示该组件也具有接收功能。
frequency 120 mhz 
  • 这行设定接收器同样工作的频率为 120 MHz。
end_receiver 
  • 这一行表示接收器的定义结束。
end_comm 
  • 这行表示通信组件的定义结束。

总结

整体来看,这个 communications.txt 文件定义了一个名为 AIR_RADIO_TRANSCEIVER 的无线电收发器组件,包含一个发射器和一个接收器,二者均在 120 MHz 的频率下工作。文件结构简洁明了,使用缩进以区分各个部分的层级。

 

2  在CARGO_AIRCRAFT的平台注册类型定义中添加以下代码:

add comm atc AIR_RADIO_TRANSCEIVER
end_comm

 

 更新behavior.txt以反映以下内容
  行为1

# behaviors.txt
# A component of the simple_flight demo
 
behavior next_selector
   precondition
      return true;
   end_precondition
end_behavior
behavior all_clear
   precondition
      WsfLocalTrackList trackList = PLATFORM.TrackList("track_proc");
      return (trackList.Empty() && !PLATFORM.AuxDataBool("collisionExpected"));
   end_precondition
 
   execute
      WsfPlatform plat = PLATFORM;
      writeln(plat.Name(), " Report: All Clear");
   end_execute
end_behavior
behavior entity_detected
   precondition
      WsfLocalTrackList trackList = PLATFORM.TrackList("track_proc");
      return !trackList.Empty();
   end_precondition
 
   execute
      WsfPlatform plat = PLATFORM;
      WsfTrack firstTrack = plat.TrackList("track_proc")[0];
      writeln(plat.Name(), " Report: Entity Detected");
 
      if (!plat.AuxDataBool("collisionWarningRcvd"))
      {
         plat.SetAuxData("collisionExpected", false);
      }
 
      if (plat.AuxDataBool("collisionWarningCooldown"))
      {
         plat.SetAuxData("collisionWarningCooldown", false);
      }
      else
      {
         WsfLocalTrackList trackList = plat.TrackList("track_proc");
         int index = 0;
         foreach (WsfTrack t in trackList)
         {
            if (t.Target().IsValid())
            {
                  writeln("\t - Entity: ", t.Target().Name());
               double lastDist = plat.AuxDataDouble("lastKnownDistance");
               double currDist = plat.GroundRangeTo(t.CurrentLocation());
 
 
              if (Math.Ceil(plat.Altitude()/100) == Math.Ceil(t.Altitude()/100) &&
                  (lastDist == -1 || lastDist > currDist))
               {
                  plat.SetAuxData("lastKnownDistance", currDist);
                  writeln("\t    - WARNING: Collision Expected!\n");
                  plat.SetAuxData("collisionExpected", true);
                  plat.SetAuxData("collisionTrackIdx", index);
               }
               else
               {
                  plat.SetAuxData("collisionExpected", false);
               }
            }
            index = index + 1;
         }
      }
   end_execute
end_behavior

 

以下是您提供的 behaviors.txt 文件的逐行解释:

# behaviors.txt 
  • 这行是一个注释,说明该文件的名称。

# A component of the simple_flight demo

  • 另一行注释,进一步说明文件是该演示的一部分。

behavior next_selector

behavior next_selector 
  • 这行定义了一个名为 next_selector 的行为。
precondition 
    return true; 
end_precondition 
  • precondition 块表示在执行该行为之前的条件。这里的条件始终为真,意味着该行为可以随时执行。
end_behavior 
  • 结束 next_selector 行为的定义。

behavior all_clear

behavior all_clear 
  • 定义了一个名为 all_clear 的行为。
     precondition 
        WsfLocalTrackList trackList = PLATFORM.TrackList("track_proc"); 
       return (trackList.Empty() && !PLATFORM.AuxDataBool("collisionExpected")); 
     end_precondition 
  • precondition 块检查两个条件:trackList 是否为空,以及 collisionExpected 是否为假。只有在这两个条件都满足时,才会执行此行为。
 execute WsfPlatform plat = PLATFORM; 
   writeln(plat.Name(), " Report: All Clear"); 
 nd_execute 
  • 在 execute 块中,获取当前平台对象并输出 "All Clear" 的报告。
end_behavior 
  • 结束 all_clear 行为的定义。

behavior entity_detected

behavior entity_detected 
  • 定义了一个名为 entity_detected 的行为。
 precondition WsfLocalTrackList trackList = PLATFORM.TrackList("track_proc"); 
   return !trackList.Empty();
 end_precondition 
  • precondition 块检查 trackList 是否非空。只有在检测到实体时,才会执行此行为。
execute WsfPlatform plat = PLATFORM; 
WsfTrack firstTrack = plat.TrackList("track_proc")[0]; 
writeln(plat.Name(), " Report: Entity Detected"); 
  • 在 execute 块中,获取当前平台对象和第一个跟踪对象,并输出 "Entity Detected" 的报告。
if (!plat.AuxDataBool("collisionWarningRcvd")) { 
    plat.SetAuxData("collisionExpected", false); 
} 
  • 如果没有收到碰撞警告,将 collisionExpected 设置为假。
if (plat.AuxDataBool("collisionWarningCooldown")) {
   plat.SetAuxData("collisionWarningCooldown", false); 
} 
  • 如果在碰撞警告冷却状态,将其重置为假。
else { sfLocalTrackList trackList = plat.TrackList("track_proc"); 
int index = 0;
foreach (WsfTrack t in trackList) { 
   if (t.Target().IsValid()) {
     writeln("\t - Entity: ", t.Target().Name());
     double lastDist = plat.AuxDataDouble("lastKnownDistance"); 
     double currDist = plat.GroundRangeTo(t.CurrentLocation()); 
  • 如果没有在冷却状态,遍历当前跟踪列表中的每个有效目标,并输出目标的名称。同时获取上一个已知距离和当前距离。
      if (Math.Ceil(plat.Altitude()/100) == Math.Ceil(t.Altitude()/100) && (lastDist == -1 || lastDist > currDist))
      { 
          plat.SetAuxData("lastKnownDistance", currDist); 
          writeln("\t - WARNING: Collision Expected!\n");
          plat.SetAuxData("collisionExpected", true);
          plat.SetAuxData("collisionTrackIdx", index); 
     } else {
        plat.SetAuxData("collisionExpected", false); 
     } 
  • 检查平台和目标的高度是否在同一层级(以 100 米为单位),并且如果当前距离小于上一个已知距离,则设置为碰撞预期。否则,将 collisionExpected 设置为假。
} index = index + 1; } } end_execute 
  • 更新索引并结束 execute 块。
end_behavior 
  • 结束 entity_detected 行为的定义。

总结

    该文件定义了三个行为:next_selectorall_clear 和 entity_detected。每个行为都有其前置条件和执行逻辑。all_clear 行为在没有碰撞预期时执行,而 entity_detected 行为在检测到实体时执行,处理碰撞警告和目标跟踪。整体结构清晰,逻辑严谨,适合用于模拟飞行演示中的行为管理。

  行为2

behavior reroute
   precondition
      bool collisionExpected = PLATFORM.AuxDataBool("collisionExpected");
      bool collisionWarningRcvd = PLATFORM.AuxDataBool("collisionWarningRcvd");
      return (collisionExpected || collisionWarningRcvd);
   end_precondition
 
   execute
      WsfPlatform plat = PLATFORM;
      double altDelta = 100 * Math.Ceil(RANDOM.Uniform(0, 30) - 20);
      plat.GoToAltitude(plat.Altitude() + altDelta);
      writeln(plat.Name(), " Report: Rerouting");
      writeln("\t - New Target Altitude = ", plat.Altitude() + altDelta, "m\n");
      plat.SetAuxData("collisionWarningRcvd", false);
      plat.SetAuxData("collisionExpected", false);
      plat.SetAuxData("offRoute", true);
   end_execute
end_behavior

 

以下是您提供的 behavior reroute 定义的逐行解释:

behavior reroute  
这行定义了一个名为 reroute 的行为,它表示在某些条件下需要改变航向或高度。
前置条件
   precondition  
      bool collisionExpected = PLATFORM.AuxDataBool("collisionExpected");  
      bool collisionWarningRcvd = PLATFORM.AuxDataBool("collisionWarningRcvd");  
      return (collisionExpected || collisionWarningRcvd);  
   end_precondition  
precondition 块中的代码用于检查执行该行为的前提条件。
collisionExpected 和 collisionWarningRcvd 变量分别从平台的辅助数据(AuxData)中获取信息,判断是否存在碰撞预期或是否已收到碰撞警告。
返回的条件是: 只要 collisionExpected 或 collisionWarningRcvd 中至少有一个为真,则行为可以执行。
执行部分
   execute  
      WsfPlatform plat = PLATFORM;  
execute 块中的代码为行为的主体部分。首先获取平台的实例,赋值给变量 plat。
      double altDelta = 100 * Math.Ceil(RANDOM.Uniform(0, 30) - 20);  
这里定义了一个 altDelta 变量,用于计算新的高度偏移。首先调用 RANDOM.Uniform(0, 30) 生成一个 0 到 30 之间的随机数,然后减去 20,最终乘以 100。这个逻辑意图是让新的高度变化范围在 -2000 到 +1000 米之间(即负高度到正高度)。
      plat.GoToAltitude(plat.Altitude() + altDelta);  
调用平台的方法 GoToAltitude,将平台高度设置为当前高度加上 altDelta。这意味着平台会以随机的偏移量调整其飞行高度。
      writeln(plat.Name(), " Report: Rerouting");  
输出报告,显示当前平台的名称以及它正在进行的操作(即重新规划航向)。
      writeln("\t - New Target Altitude = ", plat.Altitude() + altDelta, "m\n");  
再次输出报告,显示新的目标高度。注意,这里为 plat.Altitude() + altDelta,但由于在上一行已将平台高度转到了目标高度,这个打印出的值实际上是新的高度。
      plat.SetAuxData("collisionWarningRcvd", false);  
      plat.SetAuxData("collisionExpected", false);  
将辅助数据 collisionWarningRcvd 和 collisionExpected 的值都设置为假,表示已处理碰撞警告和预期。
      plat.SetAuxData("offRoute", true);  
将辅助数据 offRoute 的值设置为真,说明平台已经偏离了初始航线。
   end_execute  
结束 execute 块。
end_behavior  
结束 reroute 行为的定义。
总结
该行为定义了如何在发生潜在碰撞预期或警告时,通过调整飞行高度来重新规划航线。行为的设计考虑了几个重要的因素,包括随机高度调整、更新状态信息以及相应的报告输出,确保在飞行过程中平台能够灵活应对突发情况。

行为3

behavior send_warning_message
   precondition
      bool collisionExpected = PLATFORM.AuxDataBool("collisionExpected");
      bool collisionWarningRcvd = PLATFORM.AuxDataBool("collisionWarningRcvd");
      bool trackListEmpty = PLATFORM.TrackList("track_proc").Empty();
      return (collisionExpected && !collisionWarningRcvd && !trackListEmpty);
   end_precondition
 
   execute
      WsfPlatform plat = PLATFORM;
      if (plat.AuxDataBool("collisionWarningCooldown"))
      {
         plat.SetAuxData("collisionWarningCooldown", false);
      }
      else
      {
         writeln(plat.Name(), " Report: Sending Warning");
         WsfLocalTrackList trackList = plat.TrackList("track_proc");
         int collisionTrackIdx = plat.AuxDataInt("collisionTrackIdx");
         WsfPlatform trackPlat = trackList[collisionTrackIdx].Target();
         WsfComm platComm = plat.CommEntry(0);
         writeln("\t - Comm: ", platComm.Name());
         writeln("\t - Destination: ", trackPlat.Name());
         if (trackPlat.CommCount() > 0)
         {
            WsfComm trackComm = trackPlat.CommEntry(0);
            WsfMessage warningMessage = WsfMessage();
            warningMessage.SetType("WARNING");
            warningMessage.SetSubType("collision-expected");
            platComm.SendMessage(warningMessage, trackComm);
            writeln("\t - Warning Sent(", warningMessage.Type(), ")");
            plat.SetAuxData("collisionWarningCooldown", true);
         }
         else
         {
            writeln("\t - Warning Failed: Target has no comms!");
         }
      }
   end_execute
end_behavior 

以下是您提供的 behavior send_warning_message 定义的逐行解释:

behavior send_warning_message  
这行定义了一个名为 send_warning_message 的行为,表示在特定条件下需要发送警告信息。
前置条件
   precondition  
      bool collisionExpected = PLATFORM.AuxDataBool("collisionExpected");  
      bool collisionWarningRcvd = PLATFORM.AuxDataBool("collisionWarningRcvd");  
      bool trackListEmpty = PLATFORM.TrackList("track_proc").Empty();  
      return (collisionExpected && !collisionWarningRcvd && !trackListEmpty);  
   end_precondition  
precondition 块用于检查该行为的执行前提条件。
collisionExpected 变量通过 PLATFORM.AuxDataBool("collisionExpected") 获取,表示是否预期发生碰撞。
collisionWarningRcvd 变量通过 PLATFORM.AuxDataBool("collisionWarningRcvd") 获取,表示是否已收到碰撞警告。
trackListEmpty 变量通过 PLATFORM.TrackList("track_proc").Empty() 获取,表示当前的跟踪列表是否为空。
返回值是一个逻辑条件:只有在 collisionExpected 为真、collisionWarningRcvd 为假且 trackListEmpty 为假时,该行为才能执行。
执行部分
   execute  
      WsfPlatform plat = PLATFORM;  
在 execute 块中,首先获取当前平台的实例,并将其赋值给变量 plat。
      if (plat.AuxDataBool("collisionWarningCooldown"))  
      {  
         plat.SetAuxData("collisionWarningCooldown", false);  
      }  
检查辅助数据 collisionWarningCooldown 的值。如果为真(表示警告冷却期),则将其设置为假,表示可以发送新的警告。
      else  
      {  
         writeln(plat.Name(), " Report: Sending Warning");  
如果没有在冷却状态,则输出报告,表示正在发送警告。
         WsfLocalTrackList trackList = plat.TrackList("track_proc");  
获取当前平台的跟踪列表,并将其赋值给变量 trackList。
         int collisionTrackIdx = plat.AuxDataInt("collisionTrackIdx");  
从辅助数据中获取 collisionTrackIdx(碰撞跟踪索引),用于确定哪个目标可能会发生碰撞。
         WsfPlatform trackPlat = trackList[collisionTrackIdx].Target();  
使用碰撞跟踪索引,获取当前跟踪列表中对应的目标平台实例,并将其赋值给 trackPlat。
         WsfComm platComm = plat.CommEntry(0);  
获取当前平台的通信条目,赋值给 platComm,用于发送消息。
         writeln("\t - Comm: ", platComm.Name());  
         writeln("\t - Destination: ", trackPlat.Name());  
输出当前平台的通信名称以及目标平台的名称,提供发送消息的上下文信息。
         if (trackPlat.CommCount() > 0)  
         {  
            WsfComm trackComm = trackPlat.CommEntry(0);  
检查目标平台是否有可用的通信渠道(通信数量大于 0)。如果有,获取其通信条目并赋值给 trackComm。
            WsfMessage warningMessage = WsfMessage();  
            warningMessage.SetType("WARNING");  
            warningMessage.SetSubType("collision-expected");  
创建一个新的消息对象 warningMessage,并设置其类型为 "WARNING",子类型为 "collision-expected",表明这是一个碰撞预警信息。
            platComm.SendMessage(warningMessage, trackComm);  
通过调用当前平台的通信方法发送警告消息到目标通信。
            writeln("\t - Warning Sent(", warningMessage.Type(), ")");  
            plat.SetAuxData("collisionWarningCooldown", true);  
输出已发送的警告信息类型,并将 collisionWarningCooldown 设置为真,表示进入警告冷却状态,防止短时间内重复发送警告。
         }  
         else  
         {  
            writeln("\t - Warning Failed: Target has no comms!");  
         }  
如果目标平台没有可用的通信,则输出警告发送失败的信息。
      }  
   end_execute  
结束 execute 块。
end_behavior  
结束 send_warning_message 行为的定义。
    总结
      该行为定义了在碰撞预期且未收到警告的情况下,如何向可能发生碰撞的目标发送警告信息。逻辑包括前置条件检查、消息构建、发送及冷却管理等,确保在检测到潜在危险时能够及时、准确地传递警告。

 

更新 CARGO_TASK_MANAGER,如下所示

processor CARGO_TASK_MANAGER WSF_TASK_PROCESSOR
   update_interval 10 sec
   behavior_tree
      sequence
         selector
            behavior_node all_clear
            behavior_node entity_detected
            behavior_node next_selector
         end_selector
         selector
            behavior_node send_warning_message
            behavior_node reroute
         end_selector
      end_sequence
 
   end_behavior_tree
end_processor

以下是您提供的 processor CARGO_TASK_MANAGER WSF_TASK_PROCESSOR 定义的逐行解释:

processor CARGO_TASK_MANAGER WSF_TASK_PROCESSOR  
定义了一个名为 CARGO_TASK_MANAGER 的处理器,类别为 WSF_TASK_PROCESSOR,表示该处理器负责管理与货物相关的任务。
更新间隔
   update_interval 10 sec  
设置处理器的更新间隔为 10 秒,表示该处理器每 10 秒执行一次更新。
行为树定义
   behavior_tree  
开始定义一个行为树(behavior tree),这是一种控制结构,用于管理和调度处理器的行为。
      sequence  
定义一个序列节点(sequence)。序列节点会依次执行其下的节点,直到其中一个节点失败为止。
         selector  
在序列节点内部,我们定义一个选择节点(selector)。选择节点按照优先顺序执行其子节点,直到找到一个成功的节点为止。
第一个选择节点
            behavior_node all_clear  
第一个行为节点 all_clear,尝试检查是否所有条件都已清楚(无碰撞风险等)。
            behavior_node entity_detected  
第二个行为节点 entity_detected,检查是否检测到任何实体。
            behavior_node next_selector  
第三个行为节点 next_selector,可能会执行其他后续操作,具体取决于其内部定义。
         end_selector  
结束第一个选择节点。
         selector  
开始第二个选择节点。在第一个选择节点成功或失败后,接下来会执行这个选择节点。
第二个选择节点
            behavior_node send_warning_message  
第一个行为节点 send_warning_message,表示如果检测到需要警告的情况,则发送警告信息。
            behavior_node reroute  
第二个行为节点 reroute,表示如果需要的话,重新规划航线。
         end_selector  
结束第二个选择节点。
      end_sequence  
结束序列节点。
   end_behavior_tree  
结束整个行为树的定义。
end_processor  
结束 CARGO_TASK_MANAGER 处理器的定义。
    总结
该 CARGO_TASK_MANAGER 处理器使用行为树结构来管理货物相关的任务。它定期(每 10 秒)检查不同的条件(通过第一个选择节点),并在发现需发送警告或重新规划航线的情况时执行相应的行为。整个结构分为两个主要的选择节点,灵活处理不同的情况。这种设计使得任务管理更加模块化和高效。

 

  创建一个 WARNING PROCESSOR,如下所示:

processor WARNING_PROCESSOR WSF_SCRIPT_PROCESSOR
   on_message
      type WARNING
         script
            writeln(PLATFORM.Name(), " Report: Message Received");
            WsfMessage warningMessage = (WsfMessage)MESSAGE;
            writeln("\t - Type: ", warningMessage.Type());
            writeln("\t - Subtype: ", warningMessage.SubType());
            writeln("\t - Origin: ", warningMessage.Originator());
            PLATFORM.SetAuxData("collisionWarningRcvd", true);
            PLATFORM.SetAuxData("collisionExpected", true);
         end_script
      type default
         script
            writeln(PLATFORM.Name(), "Report: Message Received");
         end_script
   end_on_message
end_processor

 

下面是您提供的 WARNING_PROCESSOR 处理器定义的逐行解释:

processor WARNING_PROCESSOR WSF_SCRIPT_PROCESSOR  
定义了一个名为 WARNING_PROCESSOR 的处理器,类型为 WSF_SCRIPT_PROCESSOR,表示该处理器用于处理脚本消息。
消息处理部分
   on_message  
开始定义处理消息的部分,表示当该处理器接收到消息时会执行下面的逻辑。
消息类型为 WARNING
      type WARNING  
定义对 WARNING 类型消息的处理方式。
         script  
开始定义与该消息类型相对应的脚本。
            writeln(PLATFORM.Name(), " Report: Message Received");  
输出当前平台的名称,并记录 "Message Received" 的信息,表示已经接收到消息。
            WsfMessage warningMessage = (WsfMessage)MESSAGE;  
将接收到的消息 MESSAGE 强制转换为 WsfMessage 类型,并赋值给变量 warningMessage。
            writeln("\t - Type: ", warningMessage.Type());  
输出接收到的警告消息的类型。
            writeln("\t - Subtype: ", warningMessage.SubType());  
输出接收到的警告消息的子类型。
            writeln("\t - Origin: ", warningMessage.Originator());  
输出发出警告消息的源头(发件人)。
            PLATFORM.SetAuxData("collisionWarningRcvd", true);  
将平台的辅助数据 collisionWarningRcvd 设置为 true,表示已接收到碰撞警告。
            PLATFORM.SetAuxData("collisionExpected", true);  
将平台的辅助数据 collisionExpected 设置为 true,表示已预期发生碰撞。
         end_script  
结束该消息类型的脚本定义。
默认消息处理
      type default  
定义对未指定类型消息的默认处理方式。
         script  
开始定义与默认消息类型相对应的脚本。
            writeln(PLATFORM.Name(), "Report: Message Received");  
输出当前平台的名称,并记录 "Report: Message Received" 的信息,表示已经接收到一条消息,但不包含其他细节。
         end_script  
结束默认消息类型的脚本定义。
   end_on_message  
结束整个消息处理部分的定义。
end_processor  
结束 WARNING_PROCESSOR 处理器的定义。
  总结
该 WARNING_PROCESSOR 处理器专门用于处理接收到的消息。当接收到类型为 WARNING 的消息时,它会输出详细信息并更新平台的辅助数据,以指示已接收到碰撞警告和预期碰撞。当接收到其他类型的消息时,处理器将输出简单的接收报告。这种结构使得不同类型消息的处理变得清晰且高效。

更新 CARGO_AIRCRAFT 平台类型定义中的 AIR_RADIO_TRANSCEIVER 命令块,如下所示

add comm atc AIR_RADIO_TRANSCEIVER
   internal_link warning_proc
end_comm

 解释见末尾;

 更新 CARGO_AIRCRAFT 平台类型定义中的 aux_data 命令块,如下所示

 

aux_data
   struct CARGO_AUX_DATA
      bool   collisionExpected = false
      bool   collisionWarningCooldown = false
      bool   collisionWarningRcvd = false
      int    collisionTrackIdx = 0
      double lastKnownDistance = -1
   end_struct
end_aux_data

  解释见末尾;

 最后,在 platform_laydown.txt 中,通过将以下代码添加到 cargo-1 平台定义中来增加 cargo_radar 的范围

 

edit sensor cargo_radar
   maximum_range 40 nm
end_sensor

 

通信部分

add comm atc AIR_RADIO_TRANSCEIVER 
  • 这一行定义了一种名为 AIR_RADIO_TRANSCEIVER 的通信方式,也就是与空中交通控制相关的无线电通讯组件添加到配置中。
internal_link warning_proc 
  • 将内部链接 warning_proc 关联到上述的 AIR_RADIO_TRANSCEIVER。这意味着,当通过此通信通道进行发送时,处理警告的处理器(WARNING_PROCESSOR)将接收这些消息。
end_comm 
  • 结束通信部分的定义。

辅助数据部分

aux_data 
  • 开始定义辅助数据(auxiliary data),这是为平台存储一些额外信息的结构。
struct CARGO_AUX_DATA 
  • 定义一个名为 CARGO_AUX_DATA 的数据结构,用于保存与货物相关的辅助数据。
bool collisionExpected = false 
  • 定义一个布尔类型的变量 collisionExpected,初始值为 false,表示目前未预期发生碰撞。
bool collisionWarningCooldown = false 
  • 定义一个布尔类型的变量 collisionWarningCooldown,初始值为 false,用来指示当前是否处于警告冷却状态。
bool collisionWarningRcvd = false 
  • 定义一个布尔类型的变量 collisionWarningRcvd,初始值为 false,表示尚未接收到碰撞警告。
int collisionTrackIdx = 0 
  • 定义一个整型变量 collisionTrackIdx,初始值为 0,用来指示与碰撞有关的跟踪索引。
double lastKnownDistance = -1 
  • 定义一个双精度浮点型变量 lastKnownDistance,初始值为 -1,用于记录最后已知的距离信息,可能代表与目标之间的距离。
end_struct 
  • 结束数据结构 CARGO_AUX_DATA 的定义。
end_aux_data 
  • 结束辅助数据部分的定义。

传感器部分

edit sensor cargo_radar 
  • 开始编辑名为 cargo_radar 的传感器配置,表示即将定义或修改该传感器的特性。
maximum_range 40 nm 
  • 设置该传感器的最大有效范围为 40 nautical miles(海里),指示该雷达传感器能够探测的最大距离为 40 海里。
end_sensor 
  • 结束传感器部分的定义。

总结

整个配置段包含了与货物管理相关的重要组成部分:

  • 通信部分:设置了导致碰撞警告的内部通信方式,以确保警告消息能通过无线电传输到所需的处理器。
  • 辅助数据:定义一个结构体来存储涉及碰撞预警的各种状态和距离信息,为进一步的决策和处理提供数据支持。
  • 传感器部分:定义了一个雷达传感器的属性,包括其最大探测范围,为系统提供环境感知能力。

这些定义有助于提高货物管理系统在复杂环境中对潜在危机的响应能力。

本项目完整代码 见 AFSIM通讯完整代码

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小道士写程序

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值