自用学习翻译的文档,参考了google翻译和bing翻译~~转发请注明出处(持续施工中)
Table of Contents
1. 介绍
1.1 本软件的创作目的
1.2 系统要求
1.3 更多教程
1.4 疑问解答和问题报告
2. 系统概况
2.1 系统组件和结构
2.2 工厂模型元素
2.2.1 点(Point)
2.2.2 路径(Path)
2.2.3 位置(Location)
2.2.4 位置类型(Location type)
2.2.5 小车(Vehicle)
2.2.6 块(Block)
2.3 工厂运营要素
2.3.1 运输订单(Transport order)
2.3.2 订单序列(Order sequence)
2.4 通用元素属性
2.4.1 唯一名称
2.4.2 通用属性
3. 操作系统
3.1 启动系统
3.1.1 从建模模式开始
3.1.2 从工厂运行模式开始
3.2 构建新的工厂模型
3.2.1 启动工厂建模组件
3.2.2 向工厂模型添加元素
3.2.3 保存工厂模型
openTCS是一款为自动小车设计的控制系统,或者说是协作式的管理软件。主要是为协调多个AGV在生产型工厂中执行运转任务而开发的。同时,也可以应用于类似移动机器人或者四轮小车上等产品上。openTCS对于每个小车是独立控制的,每个小车的控制方式取决于该小车的所配置的特性,如导航原则、轨道引导系统(track guidance system不知应该翻译成轨道引导系统还是跟随引导系统)和负载处理装置等。他可以同时处理不同类型的小车且同时处理不同的任务。这是通过可插拔驱动将小车集成到系统中来实现的,与操作系统中的设备驱动类似。
openTCS没有任何特定的硬件要求。CPU功率和RAM容量在很大程度上取决于使用情况,例如驾驶路线的大小和复杂性以及所管理的小车数量。某些网络硬件需要与小车进行通信,在大多数情况下只需要一个标准的以太网控制器(以及可能的其他系统,如仓库管理系统等)。
要运行openTCS,需要Java Runtime Environment(JRE)1.8版。(JRE的安装路径的bin,需配置到环境变量中,例如将C:/Program Files/Java/jre1.8.0/bin配置到PATH中,以便能够使用包含的启动脚本)。
如果您扩展和定制openTCS,请参阅开发人员指南和openTCS发行版中的JavaDoc文档。
如果您对本手册、openTCS项目或使用和扩展openTCS等方面有疑问,请使用http://sourceforge.net/projects/opentcs/上的邮件列表联系开发团队。
如果您在使用openTCS时遇到技术问题,请记住在问题报告中应附带足够的数据以帮助开发人员为您解决问题,例如:
应用程序的日志文件,在kernel和plant overview应用的log/文件夹内。
您正在使用的工厂模型,在kernel和plant overview应用的data/文件夹内。
openTCS由以下组件组成,这些组件作为单独的进程运行,并在C/S体系结构中协同工作:
内核(服务器进程):运行与小车无关的策略和受控小车的驱动程序
客户端:
用于建模和可视化工厂模型的工厂概述
用于控制和监视内核的内核控制中心,例如提供小车/其相关驱动程序的详细视图
任意客户与其他系统通信,例如过程控制或仓库管理
图1. openTCS系统概览
openTCS的内核的功能是提供了一个运输系统或工厂的抽象驱动的模型,可用来管理运输订单、计算小车行进路线。客户端可与该服务进程通信来完成如下工作:修改工厂模型、观察驾驶路线、观察运输订单的处理状态和创建新的运输订单等。对于用户交互来说,内核提供了一个名叫内核控制中心(Kernel Control Center)的用户图形界面。
内核应用程序提供的内核控制中心GUI已弃用,并计划在5.0版中删除。并会增加一个单独的内核控制中心应用程序来代替。 |
内核中的运输订单处理策略主要有三个:
调度员决定哪个订单由哪个小车处理。此外,他需要制定在特殊情况下小车的处理策略,例如,当没有任何运输订单或小车电量不足时的处理策略。
制定一个路由策略(router),使得小车能沿着最优的路径抵达目标点。
制定一个调度方案(scheduler),管理资源分配以进行车流管理,即避免小车相互撞击。
openTCS发行版附带了每种策略的默认实现。开发人员可以轻松地替换这些实现,以适应特定于环境的要求。
作为openTCS内核一部分,驱动程序框架(The driver framework)管理着通信通道并将小车驱动与小车相关联。小车驱动是内核和小车之间的适配器,并且将每个小车的特定的通信协议转换为内核的内部通信方案(kernel’s internal communication schemes),反之亦然。此外,驱动可以通过内核的图形用户界面向用户提供低级功能,例如手动将电报发送到相关车辆。通过使用合适的车辆驱动,可以通过一个openTCS实例可同时管理不同类型的车辆。
作为openTCS发行版的一部分,工厂概述客户端(The plant overview client)可以编辑工厂模型,该模型可以在kernel中加载。它可以用来配置负载变换站、驾驶路线和小车。在内核的工厂运行模式中,工厂概览客户端用于显示运输系统的概览状态、所有激活的运输流程监控和以人机交互的方式创建新的运输订单。
作为openTCS发行版的一部分,内核控制中心客户端(The kernel control center client)用来控制和监视内核。其中一部分功能是将车辆驱动分配给车辆,可通过通信的方式来控制它们,可通过显示车辆状态信息来监控它们。
其他客户例如控制更高级别的工厂流程,也可以实施和附加。对于Java客户端来说,openTCS内核提供基于Java RMI(远程方法调用)的接口。还提供了一个主机接口,用于使用通过TCP/IP连接发送的XML报文创建传输订单。此外,openTCS还提供了一个Web API,用于创建和撤销传输订单以及检索传输订单状态更新。
在openTCS中,一个工厂模型由一下一系列的元素构成。可以使用工厂概览客户端(在建模模式下)编辑与工厂模型相关的元素的属性,例如点的坐标或路径的长度。
点是驾驶过程中离散小车位置的逻辑映射。在工厂运行模式中,小车指定从在模型中的一个点出发移动至在模型中的另一个点。一个点具有以下几种属性:
类型(type),有如下三种类型:
停止位置(Halt position):表示小车在处理订单时暂时停留的位置,在改点可执行某些操作。每当车辆到达此位置时需要进行报告。但是,它可能不会在此停留超过必要的时间。使用工厂概览客户端进行建模时,暂停位置是点的默认类型。
报告位置(Reporting position):表示车辆仅进行报告的位置。车辆不会被指派到报告位置,并且不允许在这样的位置停止。因此,仅由报告点组成的路线将是不可路由的,因为车辆无法在任何位置停止。
停车位置(Park position):表示车辆在没有订单时可停留较长时间的位置。车辆到达此位置时也会报告。
位置(position),即在工厂的坐标系中的点的坐标。
车辆方向角(vehicle orientation angle),它体现了小车在某点上时的假定/预期的方向。
2.2.1.1 布局坐标和模型坐标
一个点有两组坐标:布局坐标和模型坐标。布局坐标仅用于工厂概览客户端中的图形呈现,而模型坐标是小车驱动在导航时使用的或发送到与其通信的小车的数据(例如,如果车辆需要目的地点的精确坐标)。两个坐标集本身并不相互关联,它们可以不同。这样做可以将展示在UI界面上的坐标和驱动系统内部使用的坐标进行区分;例如,您主要想集中查看所有的点和坐标,但是工厂里的实际路线和点的位置可能相距甚远。所以您可能需要能够提供一份进行扭曲压缩后的视图。拖动一个点, 更改它们在GUI中的位置只会影响相应的布局坐标。
要同步布局坐标与模型坐标以及每个点周围的路径,您将有两个选择:
选择操作 ▸ 将模型值复制到布局或操作 ▸ 将布局值复制到模型以全局同步它们。
选择单个布局元素,右键单击并选择菜单中的上下文(Context) ▸ 将模型值复制到布局或上下文菜单(Context) ▸ 将布局值复制到模型以仅对所选元素同步它们。
Select Actions ▸ Copy model values to layout or Actions ▸ Copy layout values to model to synchronize them globally.
Select a single layout element, right click it and select Context menu ▸ Copy model values to layout or Context menu ▸ Copy layout values to model to synchronize them only for the selected element.
路径两个点之间的连接线,点和路径组合起来可以用于小车的导航。路径的主要属性如下(仅次于源点和目标点旁边??A path’s main attributes, next to its source and destination point, are:):
长度(length),在工厂运行模式中,这个是与小车相关的信息。如何配置了相关的路由器信息,它还可用于计算路由成本/寻找到目的地点的最佳路由。
最大正向速度和最大反向速度(maximum velocity and maximum reverse velocity),在工厂运行模式中,这个是与小车相关的信息。如何配置了相关的路由器信息,它还可用于计算路由成本/寻找到目的地点的最佳路由。
路由成本(routing cost),这是一个明确的,无单位的值。根据路由器配置,它可用于计算路由成本/寻找到目的地点的最佳路由。
锁定标志(locked flag),这个标志如何使能,他的作用是在计算时,不可使用该路径来进行小车的路线。
位置是一个特殊的点的标记,在位置上,车辆可以执行一些的特殊操作(例如装载或卸载货物,为电池充电等)。位置的属性如下:
类型(type),基本上定义了在该位置允许的操作 - 请参阅位置类型一节。
链接(links ),该位置可以到达的点的集合。为了小车能够在工厂模型中的使用,需要将位置与至少一个点相关联。
位置类型是对位置进行分组的抽象元素。位置类型只有一个相关属性:
一组允许的操作(allowed operations)的集合,定义车辆可以在这种类型的位置执行哪些操作。
小车映射的是每一台物理上存在的小车,目的是与他们通信、观察他们所在的位置和其他特性。每个小车提供以下属性:
临界能量水平(critical energy level),这是一个电量的阈值,如果低于该阈值,小车的电量会被认为处于致命的状态。此时小车必须要进行充电。
良好的能量水平(good energy level),这是一个电量的阈值,如果超过该阈值,小车的电量被认为是正常的。此时小车返回充电并不是必须的。
完全充电的能量水平(fully recharged energy level),这是一个电量的阈值,如果超过该阈值,则认为小车是完全充满电的。此时小车应该停止充电。
需要再充电的能量水平(sufficiently recharged energy level),这是一个电量的阈值,如果超过该阈值,则认为小车达到了需要充电的要求。该值可以在工厂运行时使用,以决定车辆何时可以停止充电。
最大速度和最大反向速度(maximum velocity and maximum reverse velocity)。根据路由配置,它可用于计算路由成本或者寻找到目的地点的最佳路由。
集成度(integration level),指示该小车能够被集成到系统中的等级。例如:车辆可以被
... 忽略(ignored):车辆及其报告的位置将被完全忽略,因此车辆将不会在工厂概览中显示。此时该车辆无法用于运输订单。
... 注意(noticed):该小车将按照每次他所汇报的位置,显示在工厂概览中,但是系统将不会针对该位置进行资源分配。该车辆无法用于运输订单。
... 尊敬(respected):该小车将获得在他所汇报的位置的资源。该车辆无法用于运输订单。
... 利用(utilized):车辆可用于运输订单,将被openTCS使用。
处理的运输订单类别(processable transport order categories),它们是一组字符串,用于过滤运输订单并分配给车辆的。另请参阅运输订单一节。
路线颜色(route color),当小车向目的点运行时,将以该颜色着色。
块(或块区域)可以应用特殊交通规则。它们可在例如路径交叉点或死角处防止死锁的情况发生,块有两个相关属性:
成员(members),即块组成的资源(点、路径、位置)。
类型(type),它确定小车进入到块区域的规则:
仅限单一车辆(Single vehicle only):此区块中汇总的资源只能由同一辆车同时使用。使用工厂概览客户端进行建模时,这是块的默认类型。
仅相同方向(Same direction only):此块中聚合的资源可以由多个车辆同时使用,但前提是它们以相同方向遍历该块。
小车横穿区块的方向在第一次申请分配分配区块的资源时就已经确定 - 参见默认调度程序。对于请求的资源(通常来说就是指的点和路径(a point and a path)),将使用密钥tcs:blockEntryDirection(key)来检查路径的属性。属性的值可以使任意字符串(包括空字符串)。如果没有这样的属性,那么路径的名字将被当做方向来使用。
运输订单和订单序列是仅在工厂运营时可用的元素。它们的属性主要在创建相应元素时设置。
运输订单是移动的参数化序列和小车所有的操作 。创建运输订单时,可以设置以下属性:
目的地(destinations):小车必须进行操作的一系列的目的地的集合(按照给定的顺序)。每个目的地包括车辆必须前往的位置以及必须在那里执行的操作。
截止日期(deadline)(可选),指示应该处理运输单的截止时间。
可选类别(category)(可选),是用于区分不同可进行订单运输的小车。小车仅可以接受他对应类别的订单。(类别示例如"Transport"和"Maintenance")。
预期车辆(intended vehicle)(可选),告知调度员将运输订单分配给指定的车辆而不是自动选择一个。
依赖项、(dependencies)(可选),即对在传输订单之前需要先处理完成的其他传输订单。依赖是可传递的,意味着如果订单A依赖于订单B而订单B依赖于订单C,则必须首先处理C,然后是B,然后是A.因此,依赖关系是运输订单集的执行顺序的一种方法。(但是,它们不会要求所有运输订单必须由同一车辆处理。这可以通过设置运输订单的预期车辆属性来实现。)下图显示了多个运输订单之间的依赖关系的示例:
图2. 运输订单的依赖
工厂概览应用程序(plant overview application)当前不提供创建订单序列的方法。它们只能通过不属于openTCS发行版的其他专用客户端以编程方式创建。 |
订单序列描述了跨越多个运输订单的过程,该过程随后将由单个小车以序列定义的确切顺序执行。一旦将小车分配给某个订单序列,它就不会处理该序列以外的运输订单,直到当前序列完成。
当某一个小车在执行一个复杂的订单时且这个时候小车不能被映射到运输订单的时候,使用订单序列是非常有效的方法。例如,当处理过程中,某些步骤的细节必须等到前序步骤执行完毕之后才可以获得。情况就是这样。
订单序列具有以下属性:
传输订单(transport orders)序列,可以在未设置完整标志的情况下延长。
完成(complete)标志,表示不会向序列中添加其他传输订单。这不能重置。
失败的致命的(failure fatal)标志,这表明,如果序列中的一个运输秩序失败,到其后的所有订单,应立即被视为失败了。
结束完成(finished )标志,表示该顺序序列已被处理(并且小车不会再被当前订单序列绑定)。如果需要使用这个标志(finished),必须先将序列标记为完成(complete)。
类别 (category )(可选)- 请参阅运输订单。如果设置,将忽略序列中使用传输订单设置的类别。
预期车辆(intended vehicle)(可选),告知调度员将订单序列分配给指定的车辆而不是自动选择一个。如果设置,则添加到订单序列的所有运输订单必须使用相同的小车。
图3.订单序列
每个工厂模型和工厂操作元素都有一个唯一的名称,在系统中标识它,无论它是什么类型的元素。两个元素可能不会被赋予相同的名称,即使例如一个是一个点而另一个是运输订单。
除了列出的属性之外,还可以以键值对(key-value pairs)的方式为驱动定义任意属性,这样,小车的驱动和客户端软件都可以读取。键和值都可以是任意字符串。例如,可以为模型中的小车定义新的键值对"IP address": "192.168.23.42"说明客户端将使用哪个IP地址与小车进行通信;现在,小车驱动可以在运行期间检查键"IP address"的值是否已定义,如果是,则使用它自动配置与小车的通信通道。这些通用属性的另一个用途是可以在模型中的某些路径上执行的小车的特定动作。例如,如果小车应当在当前在某个路径上时发出声音警告,且/或打开右侧方向指示器,则可以为该路径定义具有键"acoustic warning"且/或属性"right-hand direction indicator"并由相应的小车驱动进行评估。
要创建或编辑传输系统的工厂模型,必须启动openTCS工厂概览应用程序并切换至建模模式。如果是要使用这个运输控制系统(transportation control system)必须以一个现有的工厂模型为基础且必须在工厂操作模式(plant operation mode)下启动。通过执行相应的Unix shell脚本(*.sh)或Windows批处理文件(*.bat)来完成组件的启动。通过修改工厂概览(Plant Overview)里面的配置项可以使程序以特定模式启动,如initialMode配置成OPERATING或MODELLING(见工厂概览配置)。
启动工厂概述客户端(startPlantOverview.bat/.sh)
默认情况下,它配置为以“建模模式”("Modelling mode")启动。
工厂概览将以新的空模型开始,但您也可以从文件(文件 ▸ 加载模型(File ▸ Load Model))或当前内核模型(文件 ▸ 加载当前内核模型(File ▸ Load current kernel model))加载模型。后一个选项需要工厂概述客户端可以连接到的已运行的内核,并且已加载现有工厂模型。
使用工厂概览客户端的图形用户界面可以为相应应用程序/项目创建任意驱动(driving course)。如何在驾驶过程中添加点,路径和车辆等元素,请参阅构建新工厂模型。
图4.显示工厂模型的工厂概览客户端
1. 启动内核(startKernel.bat/.sh)。
如果这是您第一次运行内核,则需要先保存当前的工厂模型。在工厂概览中选择文件 ▸ 内核中的持久模型(Select File ▸ Persist model in the kernel in the plant overview)(另请参阅保存工厂模型)。
2. (可选)启动内核控制中心客户端(startKernelControlCenter.bat/.sh)
3. 启动工厂概览客户端(startPlantOverview.bat/.sh)
将工厂概览客户端切换到“操作模式”(文件 ▸ 模式 ▸ 操作模式)(File ▸ Mode ▸ Operating mode)。
4. 在内核控制中心中选择选项卡车辆驱动(Vehicle driver)。然后为模型中的每辆车选择配置和启动驱动(configure and start driver)。
a) 窗口左侧的列表显示模型中的所有车辆。
b) 双击列表中的车辆后,可以在右侧的驱动面板看到小车的详细视图。该详细视图的具体设计取决于与车辆相关联的驱动。通常,显示由车辆发送的状态信息(例如,当前位置和操作模式),并且在此提供低级设置(例如,用于车辆的IP地址)。
c) 右键单击列表中的小车会弹出一个菜单,允许为选定的车辆添加驱动程序。
d) 对于由系统控制的小车,需要将驱动程序附接到小车并使能。(如果要测试,但是没有可以与系统进行通信的真实车辆,可以使用所谓的环回驱动程序,它提供虚拟小车或仿真小车。)在配置中详细说明了如何连接和启用车辆驱动程序小车驱动。
目前,有关选项卡小车驱动程序(Vehicle driver)的所有步骤都可以在内核本身提供的内核控制中心中完成,也可以在独立/远程版本中完成。但是,内核中的内核控制中心GUI将在openTCS 5.0中删除。 |
图5.带有小车详细信息视图的驱动面板
这些说明大致说明了如何创建新的工厂模型并填充驱动元素,以便最终可以在工厂运行模式中使用。
启动工厂概述客户端(startPlantOverview.bat/.sh)并选择“建模模式”。
等到工厂概览客户端的图形用户界面显示出来。
您现在可以将驱动组件添加到空模型中。每当要重新开始时,从主菜单中选择文件 ▸ 新建模型(File ▸ New Model)。
图6.工厂概述客户端中的控制元素(建模模式)
从驱动元素工具栏中选择点工具,然后单击绘图区域上的三个位置,创建三个点(请参见上面屏幕截图中的红框)。
将三个点与路径连接到闭环
双击选择路径工具。
单击一个点,然后将路径拖动到下一个点并在那里释放鼠标按钮。
通过双击位置工具并单击绘图区域上的任意两个自由位置来创建两个位置。由于工厂模型中尚不存在位置类型,因此在创建第一个位置时会隐式创建一个新位置,这可以在绘图区域左侧的树视图中看到。
将这两个位置与(不同)点相连
双击链接工具。
单击某个位置,将链接拖动到某个点并释放鼠标按钮。
单击元素工具栏中的车辆按钮创建新车辆。
通过以下方式为新创建的位置定义车辆的允许操作
在绘图区域左侧的树视图中选择位置类型(请参阅上面屏幕截图中的蓝框)。
单击"Actions"树视图下面的属性窗口中标记的值单元格。
例如"Load cargo",在显示的对话框中输入允许的位置作为任意文本"Unload cargo"。
(可选)您可以通过编辑属性为所选类型的位置选择符号"Symbol"。
除非您在工厂模型中创建位置,将这些位置链接到驾驶路线中的点并定义车辆可以使用相应位置类型执行的操作,否则您将无法创建任何运输订单并将其分配给车辆。 |
您有两种保存模型的选项:在本地的硬盘里或在工厂概述已经连接到的内核实例中。
3.2.3.1 模型保存在本地
选择文件 ▸ 保存模型或文件 ▸ 模型另存为...(File ▸ Save Model or File ▸ Save Model As…),然后为模型输入任意名称。
3.2.3.2 在正在运行的内核中保留模型
选择文件 ▸ 在内核中保留模型(File ▸ Persist model in the kernel),您的模型将保留在内核中,此时可以切换操作模式。但是,这种做法也需要您先在本地保存模型。请注意,之前保留在内核中的模型将被替换,因为内核一次只能保留一个模型。