您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > flexsim7.14自学笔记
1/**CustomCode*/treenodeitem=parnode(1);treenodecurrent=ownerobject(c);switch(getlabelnum(item,routing)){case1:{return1;break;}case2:{return1;break;}case3:{return2;break;}case4:{return2;break;}};234函数学习: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)return3;elsereturn5+(getlabelnum(item,”nrofcopies”)*(5.0/60.0));多个“标题”语句:treenodecurrent=ownerobject(c);此语句为一个变量声明,声明一个变量为current,类型为树节点。变量值设置为:ownerobject(c).current为总是指向正在为其编辑代码区域的“当前”实体。treenodeitem=parnode(1);此语句为一个树节点变量声明,成为item.其给定值为parnode(1)。Item将总是指向那个特定时间执行代码和触发器相关的那个临时实体。这些语句创建了可以用于代码区域的可访问变量如currentitem。如有个指向临时实体的引用,并且此引用名为item.intport=parval(2);这里是一个名为port的整数变量声明,在此例中,在离开触发器中,端口是临时实体穿越离开的输出端口号。这段代码表示如果有两个临时实体进入到了该实体中,那么就关闭该实体的输出端口。fmod(num,value1,num,value2):返回value1除以value2的余数。getinput(objinvolved)返回所涉及对象的输入统计数据依次打开各实体的输出端口nrip(objobject)返回对象输入端口数目nrop(objobject)返回对象输出端口数目nrcp(obobject)返回对象中间端口数目5任务序列:createemptytaskequeuece(objdispatcher,numpriority,numpreempting)此命令在分配任务序列中创建一个新的、空的任务序列表。dispatcher为操作工,语句:treenodedispatcher=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);此时操作员被使用,将一直呆在处理器那里,需要释放操作员。这样释放:首先将操作员与处理器中间连接,然后treenodecurrent=ownerobject(c);树节点当前Ownerobject(nodethenode)返回对象节点所包含的节点。intcase_val=getlabelnum(current,label);getlabelnum(objnode,str/numlabel)返回标签所存储的数值阴影部分为实体引用协同任务序列:创建协同任务序列的命令框架:treenodextrw=createcoordinatedtasksequence(执行器);创建任务intpo1rw=insertallocatetask(xtrw,执行器,0,0);分派任务intpo1rw=insertallocatetask(xtrw,执行器,0,0);insertproxytask();任务流程insertsynctask();中断insertdeallocatetask();取消分派任务dispatchcoordinatedtasksequence();分配任务Inserttask(ts,TASKTYPE_TRAVELTOLOC,NULL,NULL,X,Y,Z,结束速度);函数:rank(current,getrank(item)-1)6yrot(objobject)返回对象y轴的旋转位置。6运动学initkinematics(kin,current);它的第一个参数必须指定一个空节点,通常将这个参数设置为一个标签节点。参数localcoords控制实体的位置,其值只能为0或1,默认为0(当不写入时),0表示为参考model坐标,1表示参考实体自身的坐标。addkinematic(kin,0,15,0,10,0,0,10,0,time(),KINEMATIC_ROTATE);7treenodecurrent=ownerobject(c);treenodesource=inobject(current,1);指定相关的实体for(inti=1;i=nrop(source);i++)nrop函数返回该实体的输出端口数目。定义数值i初值为1.{openoutput(outobject(source,i));如果为真则打开相关实体outobject(source,i)的输出端口。}closeoutput(current);关闭当前实体的输出端口。senddelayedmessage(current,30,current);当前实体给当前实体发送延时消息,延时30秒。触发当前实体内的消息触发器内的函数,使之生效。8,9基本传送带(双向):switch(lb){case2:{releaseitem(item);释放指定的实体openinput(current);用于打开对象之前已锁定的输入端口sendmessage(current,current);从后一个current立即发送一个消息到前一个current.break;}case1:{break;}switch(lb){case1:{bcsetdirection(current,1);此命令停止传送带上的所有实体,并设置它的移动方向:1为正向,0为反向。bcsetitemconveystate(current,item,1,1,1,0);设置传送带上的临时实体的运作状态。(传送带,实体,开始点,开始速度,目标速度,加速度)closeinput(current);关闭对象的输入端口。stopobject(inobject(current,1),STATE_BLOCKED);告诉对象停止所有在做的事情。stopobject(inobject(current,2),STATE_BLOCKED);break;}case2:{setloc(item,10,0,0);设置对象容器内相关实体的位置bcsetdirection(current,0);bcsetitemconveystate(current,item,10,1,1,0);closeinput(current);stopobject(inobject(current,1),STATE_BLOCKED(堵塞));stopobject(inobject(current,2),STATE_BLOCKED);break;}}10:在重置触发器中设置如下代码可设置重置后该实体的转向11,吊车的部分树节点从上图中可以看出在吊车模型中在常规选项卡中spatial开头的节点控制黄色框框的xyz三个方向上的位置,大小,转角,而offset开头的节点控制在黄色框框内的3D实体的xyz三个方向上的位置,大小,转角。(即编辑三维形状因子)从上图可以看出以shellxlocshellylocshellzloc控制吊车(起重机)大的黄色框框的位置,以shellsizexshellsizeyshellsizez来控制吊车(起重机)大的黄色框框的尺寸大小。12触发器当临时实体进入处理器中时,它触发器处理的先后顺序是entrysetupfinishsendtoportexit
本文标题:flexsim7.14自学笔记
链接地址:https://www.777doc.com/doc-4731313 .html