使用手册 - Simple:coder(路径编译器)机制详解
1.概念
路径编译是MDCS架构中一个重要概念,它是上位调度系统与下位车端系统之间的桥梁。路径编译发生在寻路完成之后,路径编译的操作对象是由“站点、路径、站点、路径......”构成的序列,路径编译的结果是一串AGV可以执行的命令脚本,该脚本对应车端SimpleAGVInterface里面定义的接口。
2.机制介绍
我们将编译器称为“coder”,实际业务中,整个编译逻辑是由若干的coder构成的。也就是说,coder在同一个站点或者可以叠加使用。处理路径的,称为trackCoder;处理站点的,称为siteCoder。定义好某个车型的所有coder,就完成了该车型的业务层面的所有行为定义(即,在什么路径/站点上触发什么样的行为)。下面用一个具体的例子详细解释coder运行的机制。
我们将“小车从A到B”的过程称为一个“plan”。如上图所示,假设已经生成了`模拟车1`的一段plan。该plan包含6个site(站点)、5段track(路径),共11个segment。编译路径时,依据通行顺序检查所有segment。对于每一个segment,若它是站点,则检查所有的siteCoder;若它是路径,则检查所有的路径trackCoder。对于每一个被检查的coder,依次判断其是否能够触发,触发后生成AGV脚本,并判断是否继续检查剩余的coder。如下图所示,为车辆执行的脚本。
3.TemplateCoderSettings使用方法
3.1 CoderSettings编码方法
TemplateTrackCoderSettings和TemplateSiteCoderSittings是分别实现trackCoder和SiteCoder的Attribute,通过在Simple工程中xxxCar.cs中小车类之前添加TemplateTrackCoderSettings和TemplateSiteCoderSittings定义站点编译器。下方DummyCar的示例,无条件地将所有路径编译为agv.Go()这一动作:
class DummyCarTrackField
{
public int speed = -1;
public bool reverse = false;
public int reverseDst = -1;
}
[TemplateTrackCoderSettings(
templateString = "agv.Go(${src.x},${src.y},${src.id},${dst.x},${dst.y},${dst.id},${track.id},${track.speed},${track.reverse || track.reverseDst == dst.id});",
priority = 0,
trackFields = typeof(DummyCarTrackField),
useVerb = "true",
blck)]
[CarType("模拟车")]
public class DummyCar : Car
CoderSitting中包含以下字段:
| 字段 | 类型 | 含义 |
|---|---|---|
| templateString | string | 编译后执行的命令 |
| priority | int | 优先级,数值越大越先被检查 |
| siteFields | Type | 定义站点字段的类的Type |
| trackFields | Type | 定义路径字段的类的Type |
| planFields | Type | 定义车辆字段的类的Type |
| useVerb | string | 触发条件。默认为"true" |
| blockVerb | string | 触发后,若blockVerb为"true",则不再检查其他优先级更低的coder;若为"false",则继续检查剩余优先级更低的coder。默认为"false" |