在AGVsTD系统中,交通管制TC(TrafficController)作为整个系统的核心部分之一,起着至关重要的作用,整个调度管理系统中但凡涉及交通逻辑算法的事务都与之有关,这些事务的处理基于静态交通管制提供的数据信息,是静态交通管制的动态运用。
更多精彩内容请前往AGV调度管理系统技术中心。

本章目录
名称解释
一个运输在TC中的一生
获得Agv并验证其状态
处理来自TO的运输
向transports添加运输
验证路径
占据AGV
执行运输
流程图及其对象关系图
名词解释
订单:Order,一个完成的AGV需要执行的运输订单,比如从A站点拾取交付到B站点。
运输:Transport,简称Trp,一个订单可以分解为多个运输,比如从AGV当前位置前往A站点拾取。
TC(TrafficController)作为动态交通管制的载体,在收到来自TO的(添加运输)消息后开始处理运输(比如为该订单规划具体路线),之后通过AI将指令传输到AGV,从而实现动态交通管制效果。
TC的运作主要基于委托和事件,当来自其他组件(AI/TO)的消息事件被触发时,TC将委托事件的响应者去执行一些方法。
关于TC到TO/AI的消息传输详见文件/文章“AGVSRemotingMessagesInterface.doc”。
TO到TC的主要消息包括AddAgvTransport,DeleteAgvTransport,用于TO向TC添加或者删除一个运输。
添加运输:一个新的运输或者一个被重新优化的运输被添加到TC。
删除运输:由于一些原因必须删除运输,比如来自操作员/外部主机系统的错误运输或者当前运输被优化到其他AGV。
一个运输订单Order通常是这样的,从A站点拾取负载交付到B站点。这样一个订单将由TO拆分为两个运输Trp:
Trp1、从AGV当前位置到A站点拾取负载;
Trp2、AGV从A站点前往B站点交付负载。
之后TO将每一个Trp传输到TC。
动态交通管制中TC的工作是负责为每一个运输找到最优路径并下发驱动AGV行驶的指令。比如从AGV当前位置到A站点的最优路径为线段1、2、3、4、5、6、7,那么TC将负责驱动AGV从线段1行驶到线段7。
当TC准备让AGV驱动一条线段时,首先应该判断要驱动的线段是不是“免费”的,即没有其他AGV占用该线段,否则AGV将不能驱动,如果线段没有被其他AGV占用,那么TC将检查与该线段存在锁关系的线段组中有没有被其他AGV锁定的,如果有则TC不能让AGV驱动该线段,因为AGV驱动线段之前应该锁定该线段并锁定与该线段存在锁关系的线段,一条线段只能被一个AGV锁定,这意味着,TC想要AGV驱动一个线段应该保证该线段和与之存在锁关系的线段不能被其他AGV锁定。要驱动的线段满足条件后才能驱动AGV驶入。
锁:AgvLock,用于agv锁定一些线段,以避免其他AGV驶入而造成交通管制故障。
当然,TC的工作不仅仅是负责动态交通管制事务,一切和交通管制有关的事务都归TC负责,所以说TC是AGVsTD调度管理系统中的核心组件之一。
一个Trp在TC中的一生
当TC收到一个AddAgvTransport消息后,TC中的AddAgvTransportReceived事件将被触发,TcAgvs作为事件的响应者则开始OnAddAgvTransport方法以处理添加运输这个事件。
TcAgvs验证Trp参数中负责执行运输的agv和运输Trp的有效性并寻找运输的最短路径TrpParts,TcAgvs开始占用指定的agv并执行运输TrpParts中的每一个(线段驱动或站点任务执行)TrpPart,TrpPart分为两类,一是驱动一个线段SegmentTrpPart,二是执行站点任务StationTrpPart,agv在进入一条线段前应该验证线段的BeforeEnter线段,BeforeEnter通过后开始驱动指定线段
驱动指定线段需要进行AgvLock操作,即在驱动线段之前应该验证要驱动的线段是否被锁定,如果将要驱动的线段被其他agv(不包括当前要驱动线段的agv)锁定,则该agv暂时不驱动这个线段,而是等待并报告被某一台AGV锁定。如果要驱动的线段没有被锁定,则验证要驱动的线段的具有锁关系的线段是否被锁定,如果具有锁关系的线段被其他agv锁定,则agv等待并报告被某一台agv锁定。

