学习内容
- 如何创建并访问全局表
- 如何创建和访问全局变量和全局宏
- 如何根据模型需要编写简单的用户命令
- 如何使用合成器和分解器实体
模型:创建两种货物,根据货物的不同进行分类加工并送到不同的仓库,在根据设定好的打包类型(全局表),对不同托盘类型进行不同打包方式,最后进行配送。
第一步:端口连接
第二步参数设置
source
时间间隔设置: experional(0,10,0);创建触发设置:设置标签和颜色
Object current = ownerobject(c); Object item = param(1); int rownumber = param(2); //row number of the schedule/sequence table { // ************* PickOption Start ************* // /***popup:SetLabelAndColor*/ /**设置标签和颜色*/ Object involved = /** \nObject: *//***tag:object*//**/item/**/; string labelname = /** \nLabel: *//***tag:label*//**/"Type"/**/; Variant value = /** \nValue: *//***tag:value*//**/duniform(1, 2, getstream(current))/**/; involved.color = Color.fromPalette(value); involved.labels.assert(labelname).value = value; } // ******* PickOption End ******* //
palletsource
- 临时实体类型:选择托盘;
- 0时刻到达;
- 创建触发:选择数据→设置标签→duniform(1,6);
添加Operators(操作员、叉车)
由于没有找到全局宏,这里暂且使用中间端口连接
PartQueue,Processor1、2
设置最大容量和加工时间(可以自己根据需求设定)
全局表
- 合成器用于将多个临时实体合成在一起。整个作业过程如下:
- 首先从合成器的第1个输入端口接收一个临时实体。它将变为一个容器,用来放置所有其它的临时实体。
- 一旦接到第一个临时实体,它就开始按照component list(组件列表)接收剩余的临时实体。一旦完成整个批次,合成器就会执行预置和加工时间进行处理。
其中Row代表两种货物,Col代表托盘类型,数值表示对应打包的数量是多少。
合成器
调用全局表:是根据托盘类型的type值返回全局表对应的列。
合成器的进入触发设置:更新合成器组件列表的源代码。
/**Custom Code*/ Object current = ownerobject(c); Object item = param(1); int port = param(2); { // ************* PickOption Start ************* // string tablename = "partlist"; //设定列表名 string labelname = "Type"; //托盘对应的类型 if (port == 1) { Table thelist = getvarnode(current, "componentlist"); //获取合成器的组件列表 treenode thesum = getvarnode(current, "targetcomponentsum"); //获取当前合成器的目标组件总和 thesum.value = 0; //初始设为0 Table table = Table(tablename); //获取全局组件 for(int index = 1; index <= thelist.numRows; index++) { //遍历组件列表的每一行。 thelist[index][1] = table[index][item.labels[labelname].value];//更细将index的第一列的值根据Type的值找出全局表中对应的列数。 inc(thesum, table[index][item.labels[labelname].value]); //总件数+1 } } } // ******* PickOption End ******* //