在您继续阅读本文之前,请注意,本文涉及的RCS-CMS-WCS 4.x版本及其新系统TAS(Task Arrangement Service,任务编排服务)可能包含作者基于当前知识水平的推测和假设。
作者已尽最大努力确保信息的准确性和完整性,但鉴于宇宙的无限性和技术的不断进步,本文中的信息可能与读者的量子状态发生纠缠,导致不可预测的结果,根据量子物理学,本文中的某些信息可能处于存在与不存在的叠加状态。作者不对因量子不确定性导致的信息不准确性负责。作者无法保证所有信息的绝对正确性。
为了防止有些萌新不清楚4.X如何找到RCS,作为引导进入主页面使用,死在第一步可不是好事情。
【项目关注】|【搬运主流程】|【WMS主流程】|【子流程】
下面将逐个介绍分别对应任务分类
【项目关注】: 顾名思义,只是起到一个收藏的作用,类似于书签,在任务条的侧边,有一个五角星(收藏)图标
点亮图表即可把任务加入收藏,就可以在项目关注中查看到该任务,方便使用者快速查找任务。
【搬运主流程】: 即为所有主任务合集,所有导入的任务编排都可以在此中寻找,若找不到也可以使用搜索框
进行模糊搜索或筛选功能,但请注意不要直接更改自带任务编排,最好复制出来更改备份编排
【WMS主流程】:这里面一般存放用于与IWMS对接的任务编排,如叉车通用,CTU通用,接驳,顺序出库编排,但是一般情况下仓储项目都需要定制编排,所以使用的情况很少,可按需使用。
【子流程】:子流程任务编排更像是一个组件包,并不属于能够直接下发的任务编排,所以尽量不要修改原生子任务编排,当然你也改不了
我们把任务抽象成一个箱子,那么子流程更像构建箱子的材料,而不是箱子里包装的东西,比如一个纸箱子,他里面装的什么和箱子本身并无关系,而子任务在这种情况下,更像是做纸箱子的纸材料,回归到任务编排的层面,一个任务编排可能有很多个节点,而这其中很多节点也有自身的子节点,他们本身只是把参数传递到子节点中,依靠着子节点去处理逻辑并返回给主节点,再回归到大的任务编排中。
二,任务编排逻辑
===========
------------------------------------------------重点内容警告----------------------------------------------
在界面上方的是操作栏,主要用于连线节点与布局,保存任务链,但是就算不对齐节点,也是可以连线上去的,连线需要选择一个起点节点,需要选择一个终点节点(大多数情况下),连线的箭头方向即表达为任务链的流动方向
比如图中 申请载具节点 指向 申请站点节点(申请载具 ==> 申请站点) 则表示这个任务流需要先申请载具,然后才能申请站点,如果申请载具失败了则会直接报错,并不会向后流动。
而在界面左侧的则是组件节点,他们大多时是用来构建任务链的内部逻辑的,一个完整的任务链一定是需要一个开始符号与结束符号的,类似于下图
在构建任务链时,我们第一步一定需要先从组件栏中配置开始符与结束符,然后再在他们之间加我们需要的节点逻辑
在了解了任务链的基础功能的情况下,现在,我们试着去了解LMR潜伏通用搬运任务链的逻辑吧
首先,我们先找到任务编排中最重要的开始符与结束符
然后我们来看他们之间的组件逻辑,任务开始时遇到的第一步为申请载具节点,单击选择他即可看到他的节点属性 ID为节点的标识,名称则为节点前端渲染的字符,调用流程就是我们前面提到的子流程
【忘记了的小伙伴可以回到(任务分类与收藏)这一栏重新观看】
我们再切到业务参数属性中,这里主要用于给节点配置入参属性载具获取方式分为 目标路径/接口参数的方式获取货架一类的载具,其中目标路径更像是一种全局变量(一个内置的TypeValue),其中包含了以下类型
class TypeValue = {
ZONE: '区域',
SITE: '站点别名',
STORAGE: '仓位别名',
MAT_LABEL: '物料标签',
CARRIER: '载具编号',
STACK: '巷道编号',
STACK_LABEL: '巷道特征值',
CARRIER_TYPE: '载具类型',
BIN_TYPE: '仓位类型',
MIX_CONDITION: '条件组合',
EQPT: '外设编号' };
而接口参数更像是直接填 入参 去调用接口,比如上图中,获取载具的方式为目标路径,所以他使用的是一个目标接口数组 ${submitParam.targetRoute[0]}
而如果我们 使用 接口参数 去调用这个数组,我们只需要在下面的获取方式值中填 1 即可获取到 ${submitParam.targetRoute[0]}的返回值,有的小伙伴就想问了,这里为什么不是填0呢,这里有一个小注意事项,如果使用接口参数来获取的话,targetRoute 数组中 只需要填写 targetRoute 中的第几个参数,从1开始,而填0是获取不到参数的。所以使用接口参数去填写的话,应该是如下图所示
继续往下
场景一: 载具获取方式值为空,载具编号填入相应的值,支持通过载具获取到系统已绑定的载具。
场景二: 载具获取方式值为点位,载具编号填入相应的值,支持已填入的点位为起点,填入的载具编号为任务载具。
场景三: 载具获取方式值为区域,载具编号填入相应的值,支持在区域中查找相应的载具。
该参数用于控制申请载具时是否可以选中已经被锁定的载具,选择“是”,常用于多工作台拣选的场景,多工作台挑中同一货架,支持对同一个货架下发多个任务。
查找载具时的附加条件,满足现场的特殊要求
参数 | 具体含义 |
---|---|
先进先出 | 优先挑最新执行任务的载具,载具状态表更新时间升序排列 |
后进先出 | 优先挑最早执行任务的载具,载具状态表更新时间降序排列 |
近距离优先 | 优先挑离终点近的载具 |
远距离优先 | 优先挑离终点远的载具 |
特殊:区域策略排序 | 按照区域的优先顺序进行排序查询 |
特殊:自定义策略 | 需要通过脚本的方式自定义查找的策略 |
申请载具的种类,包括货架、托盘、料箱三种,在查询的时候会增加载具种类的条件进行筛选
查找的载具类型,可选择系统中已添加的载具类型
是否查找空的载具
空载具定义:载具上所有仓位都是空的,只要有一个仓位不是空的则不算空载具
确定载具是否在仓位上查找
选择“否”:优先从站点中查找载具,找不到再从仓位中查找
选择"是": 在仓位中查找载具,同时需要选择仓位所属类型
无码载具表示系统中未维护该载具,常用于工厂不方便提前贴载具码的场景。系统会自动生成随机的载具编号进行搬运。
可选择地图,在查询的时候以该地图范围进行筛选
可以增加SQL语句的筛选条件,扩展功能,可以使用系统定义别名。
包含两个参数:
一次:只查找一次,未找到则直接报错
一直:循环申请,需要设置申请间隔时间
申请载具未成功,等待循环的时间间隔
表示本节点的入参,可以抽象成一个对象结构,比如前面一个节点输出了一个Object,然后他指向的那个节点就可以接收到这个Object,去获取他的属性。
节点运行会输出,赋值给变量,可供后续节点调用,参数名可修改,流程中不可重复,有覆盖的风险
------至此我们已经认识到了任务链中一个节点自身做附带的属性------
接下来,让我们来看看任务链中的节点逻辑吧
这就是一个完整的任务链的逻辑,其实抽象一下就很好理解
【AGV要搬运的是什么货架 ==> 起点有没有这个货架 ==> 终点是不是空闲的 ==> 点位在不在一张拓扑图上 | 在的话我需要用什么车去搬 | 不在的话我该怎么走才能去另外一张图 】
现在,我们尝试着自己写一个任务编排来运行一下吧!!
(一阶段入门结束)