可达性状态编程

来自MDCS wiki
Artheru讨论 | 贡献2024年7月1日 (一) 15:41的版本 (创建页面,内容为“可达性状态编程是SimpleCore提供的重要功能。AGV集群运行时经常出现多车的业务相关的通行顺序,这些通行顺序和地图、包络等无关,仅仅和场景状态有关。比如以下一些典型场景: 文件:四向穿梭车多车送货举例.jpg|缩略图|四向穿梭车多车送货举例,A车B车同时往一个巷道送货。此时只能B车先送货后,A车才能送货。否则A车放下的货物会妨碍B车将货…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

可达性状态编程是SimpleCore提供的重要功能。AGV集群运行时经常出现多车的业务相关的通行顺序,这些通行顺序和地图、包络等无关,仅仅和场景状态有关。比如以下一些典型场景:

四向穿梭车多车送货举例,A车B车同时往一个巷道送货。此时只能B车先送货后,A车才能送货。否则A车放下的货物会妨碍B车将货物送达终点。
  • 四向穿梭车场景中,多台车向同一个巷道送货。
  • 驶入式巷道中,多台叉车向同一个巷道送货或取货。
  • 产线对接时,使用两台车分别进行取满托盘、送空托盘。

Simple提供Reachability功能来自动化处理这些冲突。类似于编程器(Coder)和包络(Enveloper),可达状态也是通过插件来声明的。可用的方法包括:

  • SiteReachability/TrackReachability中:Require/Reject/Declare/Clear,分别为“需要某个状态”,“如果某状态存在则拒绝”,“声明一个状态”,“清除某个状态”
  • Scene.conf.RemoveReachabilityState/AddReachabilityState来从外部增加或删除状态
  • 使用Scene.conf.status.reachabilityState 查看全部状态。


以下是一个范例,可用于处理【四向穿梭车场景中,多台车向同一个巷道送货】。

public class LoadedTest : SiteReachability<ReachabilityTestCar>
{
 public override int priority => 1;
 public override bool Block() => false;
 public override void Prompt() => this.Reject($"cargo{site.id}");
 public override bool Use() => plan.fields.ContainsKey("put");
}

public class PutCargo : SiteReachability<ReachabilityTestCar>
{
 public override int priority => 1;
 public override bool Block() => false;
 public override void Prompt() => Declare($"cargo{site.id}");
 public override bool Use() => plan.fields.ContainsKey("put") && curSeg == plan.segments.Count - 1;
}