全球FlexSim系统仿真中文论坛
标题: 案例六 用户命令的创建使用 [打印本页]
作者: Yumaotuo 时间: 2018-5-2 09:26
标题: 案例六 用户命令的创建使用
本帖最后由 Yumaotuo 于 2018-5-2 09:30 编辑
如果在一个模型中有大量代码重复,我们可以使用用户命令,来自定义命令函数,应用于整个模型。
1、模型描述
有3种类型均匀分布的产品在四个加工处理器上按照以下处理顺序处理,产品1:processor1~ processor3~ processor2;产品2:processor4~ processor2~ processor1~ processor3;产品3:processor2~ processor3~processor1;最后放置在暂存区内。如果在一个模型中有大量代码重复,我们可以使用用户命令,来自定义命令函数,应用于整个模型。
2、模型布局:
[attach]4308[/attach]
3、模型分析
货物经过处理器后被发送至暂存区进行下一步加工,我们应该考虑到它可能会继续回到上一步加工处理器上,所以中间的缓冲暂存区应该与每一个处理器都要A连接。根据item的类型值及item的当前所处的加工次数,来查询全局表,决定下一步的加工发送端口。因此每个暂存区的代码逻辑相同,可使用用户命令自定义函数来进行建模。
4、用户命令界面
[attach]4309[/attach]
[attach]4310[/attach]
名称为我们将要定义使用的函数命令(不能与已有函数相同),参数为此命令将要用到的参数,返回类型,我们是要返回端口号,所以为num值,对于此函数的逻辑我们在代码里进行编写。
5、代码设置
在发生器的创建触发中,对item类型及当前加工步骤进行添加标签设定。
int type = duniform(1,3);
item.Type = type;
item.color = Color.byNumber(item.Type);
item.step = 0;
每个处理器要添加相应的机器设备号标签。
暂存区的进入触发中对stpe进行加一,来表示即将进入第几次加工步骤。
item.step++;
在用户命令里编写发送至端口的逻辑。
Object item = param(1);//定义第一个参数
Object current = param(2);//定义第二个参数
int type = item.Type;//获取item的类型值
int step = item.step;//获取即将进入的步骤数
for(int i = 1;i <= current.outObjects.length;i++)//对全局表检索获取端口号与处理器机器标签一致的端口进行返回
{
Object processi = current.outObjects;
int stationnum = processi.station;
int portnum = Table("step")[type][step];
if(stationnum == portnum)
{
return i;
}
}
对于暂存区发送至端口直接写入我们定义好的函数命令就可以。
return findstation(item,current);
作者: 非凡 时间: 2018-5-3 21:57
谢谢分享,之前是通过全局表和端口推拉操作实现的呢,这种方法也可以学习一下呢
作者: 慧娴亚伦 时间: 2018-5-4 08:28
这个方法的本质原理还是没有离开推动和拉动的选择。建议可以尝试一下list功能
作者: zjj0605 时间: 2018-5-4 17:51
谢谢楼主的分享
欢迎光临 全球FlexSim系统仿真中文论坛 (http://www.flexsimasia.com/) |
Powered by Discuz! X3.3 |