1
/**Custom Code*/
treenode item = parnode(1);
treenode current = ownerobject(c);
switch(getlabelnum(item,\)) {case 1:{return 1;break;} case 2:{return 1;break;} case 3:{return 2;break;} case 4:{return 2;break;}};
2
3
4函数学习:
Setitemtype(item,Bernoulli(60,1,2));临时实体引用,设置值 item 的引用
临时实体类型值为:getitemtype(item) Setitemtype(item,Bernoulli(60,1,2));
if(getitemtype(item==2)) setlabelnum(item,”nrofcopies”,duniform(1,1000));
设置标签值,其中nrofcopies为自定义的标签名称,duniform函数返回1到1000之间的整数值,而uniform() 函数可返回小数值。
设置不同类型,不同标签值的加工时间: if(getitemtype(item)==1) return 3; else return 5+(getlabelnum(item,”nrofcopies”)*(5.0/60.0)); 多个“标题”语句:
treenode current=ownerobject(c);
此语句为一个变量声明,声明一个变量为current,类型为树节点。变量值设置为:ownerobject(c).current为总是指向正在为其编辑代码区域的“当前”实体。 treenode item=parnode(1);
此语句为一个树节点变量声明,成为item. 其给定值为 parnode(1)。Item将总是指
向那个特定时间执行代码和触发器相关的那个临时实体。
这些语句创建了可以用于代码区域的可访问变量如current item。如有个指向临时实体的引用,并且此引用名为item.
int port=parval(2);
这里是一个名为port的整数变量声明,在此例中,在离开触发器中,端口是临时实体穿越离开的输出端口号。
这段代码表示如果有两个临时实体进入到了该实体中,那
么就关闭该实体的输出端口。
fmod(num,value1,num,value2):返回value1除以value2的余数。 getinput(obj involved)返回所涉及对象的输入统计数据
依次打开各实体的输出端口
nrip(obj object)返回对象输入端口数目 nrop(obj object)返回对象输出端口数目 nrcp(ob object )返回对象中间端口数目
5任务序列:
createemptytaskequeuece(obj dispatcher,num priority ,num preempting) 此命令在分配任务序列中创建一个新的、空的任务序列表。
dispatcher为操作工,
语句:treenode dispatcher=centerobject(current,2或1等数字(表示端口号));为指定操作工所在的中间端口。如图:
例:outobject(current,port) 指向与之相连的下一实体
current 表示当前实体
执行行进任务的语句为:
Inserttask(ts,TASKTYPE_TRAVEL, outobject(current,port)(目的地),NULL) 执行装载卸载任务的语句:
意义:inserttask(序列名称,装载,临时实体,当前实体,当前输出端口
);
Inserttask( 序列名称,卸载,临时实体,卸载目的地,目的地的输入端口);如下:
延时语句:
卸载完临时实体后,呆在处理器那里处理临时实体。使用操作员:添加utilize任务:
Inserttask(ts,TASKTYPE_UTILIZE,item,outobject(current,1),STATE_UTILIZE);
此时操作员被使用,将一直呆在处理器那里,需要释放操作员。
这样释放:首先将操作员与处理器中间连接,然后
treenode current = ownerobject(c); 树节点 当前
Ownerobject(node thenode) 返回对象节点所包含的节点。
int case_val = getlabelnum(current,\); getlabelnum(obj node,str/num label) 返回标签所存储的数值
阴影部分为实体引用