第二章 openTCS系统概述
添加时间: 2021-08-07
来源:
2.1.系统组成及结构
openTCS 由以下组件组成,这些组件作为独立进程运行并在客户端-服务器架构中协同工作:
(1)内核(服务器进程):运行与小车无关的策略和受控小车的驱动程序;
(2)客户端;
(3)用于对工厂模型进行建模的模型编辑器;
(4)用于在工厂运行期间可视化工厂模型的操作台;
(5)用于控制和监视内核的内核控制中心,例如提供小车及其相关驱动程序的详细;
(6)视图,用于与其他系统通信的任意客户端,例如:过程控制或仓库管理。
openTCS 内核的目的是用来提供运输系统/工厂的抽象驱动模型,管理运输订单并计算车辆的路线。客户端可以与这个服务器进程通信,例如修改工厂模型、可视化驾驶路线和运输订单的处理以及创建新的运输订单。内核中的运输订单处理策略主要有三个:
(1)调度员决定哪个订单由哪个小车处理。此外,他需要制定在特殊情况下小车的处理策略,例如,当没有任何运输订单或小车电量不足时的处理策略。
(2)制定一个路由策略(router),使得小车能沿着最优的路径抵达目标点。
(3)制定一个调度方案(scheduler),管理资源分配以进行车流管理,即避免小车相互撞击。
openTCS发行版附带了每种策略的默认实现。开发人员可以轻松地替换这些实现,以适应特定于环境的要求。
作为openTCS内核一部分,驱动程序框架(The driver framework)管理着通信通道并将小车驱动与小车相关联。小车驱动是内核和小车之间的适配器,并且将每个小车的特定的通信协议转换为内核的内部通信方案(kernel’s internal communication schemes),反之亦然。此外,驱动可以通过内核的图形用户界面向用户提供低级功能,例如:手动将电报发送到相关车辆。通过使用合适的车辆驱动,可以通过一个openTCS实例可同时管理不同类型的车辆。
作为openTCS发行版一部分,模型编辑器客户端(The model editor client)可以编辑可加载到内核中的工厂模型。它可以用来配置负载变换站、驾驶路线和车辆。
作为openTCS发行版一部分,操作台客户端(The operations desk client)用于显示运输系统的一般状态和任何活动的运输流程,并以交互方式创建新的运输订单。
作为openTCS发行版的一部分,内核控制中心客户端(The kernel control center client)用来控制和监视内核。其中一部分功能是将车辆驱动分配给车辆,可通过通信的方式来控制它们,可通过显示车辆状态信息来监控它们。
其他客户例如控制更高级别的工厂流程,也可以实施和附加。对于Java客户端来说,openTCS内核提供基于Java RMI(远程方法调用)的接口。此外,openTCS还提供了一个Web API,用于创建和撤销传输订单以及检索传输订单状态更新。
2.2.工厂模型元素
在openTCS中,一个工厂模型由以下一系列的元素构成。可以使用模型编辑器客户端编辑与工厂模型相关的元素的属性,例如点的坐标或路径的长度。
2.2.1.点
点是驾驶过程中离散小车位置的逻辑映射。在工厂运行模式中,小车指定从在模型中的一个点出发移动至在模型中的另一个点。一个点具有以下几种属性:
(1)类型(type),有如下五种类型:
·停止位置(Halt position):表示小车在处理订单时暂时停留的位置,在该点可执行某些操作。每当车辆到达此位置时需要进行报告。但是,它可能不会在此停留超过必要的时间。使用模型编辑器客户端进行建模时,暂停位置是点的默认类型。
·报告位置(Reporting position):表示车辆仅进行报告的位置。车辆不会被指派到报告位置,并且不允许在这样的位置停止。因此,仅由报告点组成的路线将是不可路由的,因为车辆无法在任何位置停止。
·停车位置(Park position):表示车辆在没有订单时可停留较长时间的位置。车辆到达此位置时也会报告。
·位置(position),即在工厂的坐标系中的点的坐标。
·车辆方向角(vehicle orientation angle),它体现了小车在某点上时的假定/预期的方向。
2.2.1.1.布局坐标与模型坐标
一个点有两组坐标:布局坐标和模型坐标。布局坐标仅用于工厂概览客户端中的图形呈现,而模型坐标是小车驱动在导航时使用的或发送到与其通信的小车的数据(例如,如果车辆需要目的地点的精确坐标)。两个坐标集本身并不相互关联,它们可以不同。这样做可以将展示在UI界面上的坐标和驱动系统内部使用的坐标进行区分;例如,您主要想集中查看所有的点和坐标,但是工厂里的实际路线和点的位置可能相距甚远。所以您可能需要能够提供一份进行扭曲压缩后的视图。拖动一个点, 更改它们在GUI中的位置只会影响相应的布局坐标。
要同步布局坐标与模型坐标以及每个点周围的路径,您将有两个选择:
·选择操作 ▸ 将模型值复制到布局或操作 ▸ 将布局值复制到模型以全局同步它们。
·选择单个布局元素,右键单击并选择菜单中的上下文(Context) ▸ 将模型值复制到布局或上下文菜单(Context) ▸ 将布局值复制到模型以仅对所选元素同步它们。
2.2.2.路径
路径是车辆可导航的点之间的连接,点和路径组合起来可以用于车辆的导航。路径的主要属性如下:
(1)长度(length),这可能是工厂运行模式下车辆的相关信息。根据路由器的配置,它也可以用于计算路由成本/寻找到达目标位置的最佳路线。
(2)最大正向速度和最大反向速度(maximum velocity and maximum reverse velocity),这可能是车辆在工厂操作模式下的相关信息。根据路由器的配置,它还可用于计算路由成本/寻找到达目标位置的最佳路线。
(3)锁定标志(locked flag),设置后告诉路由器在计算车辆路线时可能不使用该路径。
2.2.3.位置
位置是一个特殊的点的标记,在位置上,车辆可以执行一些的特殊操作(例如装载或卸载货物,为电池充电等)。位置的属性如下:
(1)类型(type),基本上定义了在该位置允许的操作——请参阅位置类型一节。
(2)链接(links ),该位置可以到达的点的集合。为了小车能够在工厂模型中的使用,需要将位置与至少一个点相关联。
2.2.4.位置类型
位置类型是对位置进行分组的抽象元素。位置类型只有一个相关属性:
一组允许的操作(allowed operations)的集合,定义车辆可以在这种类型的位置执行哪些操作。
2.2.5.小车
小车映射的是每一台物理上存在的小车,目的是与他们通信、观察他们所在的位置和其他特性。每个小车提供以下属性:
(1)临界能量水平(critical energy level),这是一个电量的阈值,如果低于该阈值,小车的电量会被认为处于临界水平。该值至关重要,它可在工厂运行时用于决定何时对车辆进行充电。
(2)良好的能量水平(good energy level),这是一个电量的阈值,如果超过该阈值,小车的电量被认为是正常的。此时小车不需要返回充电。
(3)完全充电的能量水平(fully recharged energy level),这是一个电量的阈值,如果超过该阈值,则认为小车是完全充满电的。此时小车应该停止充电。
(4)充足电的能量水平(sufficiently recharged energy level),这是一个电量的阈值,如果超过该阈值,小车被认为充电充足。 该值可以在工厂运行时用于决定车辆何时可以停止充电。
(5)最大速度和最大反向速度(maximum velocity and maximum reverse velocity)。根据路由配置,它可用于计算路由成本或者寻找到目标位置的最佳路由。
(6)集成度(integration level),指示该小车能够被集成到系统中的等级。车辆的集成级别只能通过操作台客户端进行调整,而不能通过模型编辑器客户端进行调整。一辆车可以被:
(7)略(ignored):车辆及其报告的位置将被完全忽略,因此车辆将不会在工厂概览中显示。此时该车辆无法用于运输订单。
(8)注意(noticed):该小车将按照每次他所汇报的位置,显示在工厂概览中,但是系统将不会针对该位置进行资源分配。该车辆无法用于运输订单。
(9)处理的运输订单类别(processable transport order categories),它们是一组字符串,用于过滤运输订单并分配给车辆的。另请参阅运输订单一节。
(10)路线颜色(route color),当小车向目标点运行时,将以该颜色着色。
2.2.6.块区
块(或块区域)可以应用特殊交通规则。它们可在例如路径交叉点或死角处防止锁死的情况发生,块有两个相关属性:
(1)成员(members),即块组成的资源(点、路径、位置)。
(2)类型(type),它确定小车进入到块区域的规则:
(3)仅限单一车辆(Single vehicle only):此区块中汇总的资源只能由同一辆车同时使用。使用模型编辑器客户端进行建模时,这是块的默认类型。
(4)仅相同方向(Same direction only):此块中聚合的资源可以由多个车辆同时使用,但前提是它们以相同方向遍历该块。
2.2.7.图层
图层是对点、路径、位置和链接进行分组的抽象元素。它们可用于对复杂工厂建模并将工厂部分划分为逻辑组(例如:多层工厂中的楼层)。图层具有以下属性:
(1)活动标志,指示当前是否将图层设置为活动(绘图)图层。一次只能有一个活动图层。此属性仅在模型编辑器客户端中显示。
(2)一个可见标志,指示图层是显示还是隐藏。当一个图层被隐藏时,它包含的模型元素不会显示。
(3)描述性名称。
(4)一个图层被分配到的组—请参阅图层组。一个图层一次只能分配给一个图层组。
(5)一个组的可见标志,指示图层分配到的图层组是显示还是隐藏—请参阅图层组。
除了上面列出的属性之外,图层还有一个序号(不显示),用于定义图层之间的顺序。图层的顺序由模型编辑器和操作台客户端中“图层”表中条目的顺序表示。最顶层条目对应于最顶层(显示在所有其他层之上),最底层条目对应于最底层(显示在所有其他层之下)。
2.2.8.图层组
图层组是对图层进行分组的抽象元素。图层组具有以下属性:
(1)描述性名称。
(2)一个可见标志,指示图层组是显示还是隐藏。隐藏图层组时,不会显示分配给它的所有图层中包含的模型元素。图层组的可见性状态不会影响分配给它的图层的可见性状态。
2.3.工厂运营要素
运输订单和订单序列是仅在工厂运营时可用的元素。它们的属性主要在创建相应元素时设置。
2.3.1.运输订单
运输订单是移动的参数化序列和小车所有的操作 。创建运输订单时,可以设置以下属性:
(1)目的地(destinations):小车必须进行操作的一系列的目的地的集合(按照给定的顺序)。每个目的地包括车辆必须前往的位置以及必须在那里执行的操作。
(2)截止日期(deadline)(可选),指示应该处理运输单的截止时间。
(3)可选类别(category)(可选),是用于区分不同可进行订单运输的小车。小车仅可以接受他对应类别的订单。(类别示例如"Transport"和"Maintenance")。
(4)预期车辆(intended vehicle)(可选),告知调度员将运输订单分配给指定的车辆而不是自动选择一个。
(5)依赖项、(dependencies)(可选),即对在传输订单之前需要先处理完成的其他传输订单。依赖是可传递的,意味着如果订单A依赖于订单B而订单B依赖于订单C,则必须首先处理C,然后是B,然后是A。因此,依赖关系是运输订单集的执行顺序的一种方法。(但是,它们不会要求所有运输订单必须由同一车辆处理。这可以通过设置运输订单的预期车辆属性来实现。)下图显示了多个运输订单之间的依赖关系的示例:
2.3.2.订单序列
订单序列描述了跨越多个运输订单的过程,该过程随后将由单个小车以序列定义的确切顺序执行。一旦将小车分配给某个订单序列,它就不会处理该序列以外的运输订单,直到当前序列完成。当某一个小车在执行一个复杂的订单时且这个时候小车不能被映射到运输订单的时候,使用订单序列是非常有效的方法。例如,当处理过程中,某些步骤的细节必须等到前序步骤执行完毕之后才可以获得。订单序列具有以下属性:
(1)传输订单(transport orders)序列,可以在未设置完整标志的情况下延长。
(2)完成(complete)标志,表示不会向序列中添加其他传输订单。这不能重置。
(3)失败的致命的(failure fatal)标志,这表明如果序列中的一个运输订单失败,到其后的所有订单,应立即被视为失败了。
(4)结束完成(finished )标志,表示该顺序序列已被处理(并且小车不会再被当前订单序列绑定)。如果需要使用这个标志(finished),必须先将序列标记为完成(complete)。
(5)类别 (category )(可选)—请参阅运输订单。如果设置,将忽略序列中使用传输订单设置的类别。
(6)预期车辆(intended vehicle)(可选),告知调度员将订单序列分配给指定的车辆而不是自动选择一个。如果设置,则添加到订单序列的所有运输订单必须使用相同的小车。
2.4.常用元素属性
2.4.1.唯一名称
每个工厂模型和工厂操作元素都有一个唯一的名称,在系统中标识它,无论它是什么类型的元素。两个元素可能不会被赋予相同的名称,即使例如一个是点而另一个是运输订单。
2.4.2.通用属性
除了列出的属性之外,还可以以键值对(key-value pairs)的方式为驱动定义任意属性,这样,小车的驱动和客户端软件都可以读取。键和值都可以是任意字符串。例如,可以为模型中的小车定义新的键值对"IP address": "192.168.23.42"说明客户端将使用哪个IP地址与小车进行通信;现在,小车驱动可以在运行期间检查键"IP address"的值是否已定义,如果是,则使用它自动配置与小车的通信通道。这些通用属性的另一个用途是可以在模型中的某些路径上执行的小车的特定动作。例如,如果小车应当在当前在某个路径上时发出声音警告,且/或打开右侧方向指示器,则可以为该路径定义具有键"acoustic warning"且/或属性"right-hand direction indicator"并由相应的小车驱动进行评估。