3 多产品多阶段制造系统仿真与分析new.docx
《3 多产品多阶段制造系统仿真与分析new.docx》由会员分享,可在线阅读,更多相关《3 多产品多阶段制造系统仿真与分析new.docx(39页珍藏版)》请在冰豆网上搜索。
3多产品多阶段制造系统仿真与分析new
第八章多产品多阶段制造系统仿真与分析
8.1建立概念模型
8.1.1问题描述
有一个制造车间由5组机器组成,第1,2,3,4,5组机器分别有3,2,2,3,1台相同的机器。
这个车间需要加工三种原料,三种原料分别要求完成4、3和5道工序,而每道工序必须在指定的机器组上处理,按照事先规定好的工艺顺序进行。
假定在保持车间逐日连续工作的条件下,对系统进行365天的仿真运行(每天按8小时计算),计算每组机器队列中的平均产品数以及平均等待时间。
通过仿真运行,找出影响系统的瓶颈因素,并对模型加以改进。
8.1.2系统数据
三种原料到达车间的间隔时间分别服从均值为50,30,75分钟的指数分布。
三种原料的工艺路线如表11.1所示。
第1种原料首先在第3组机器上加工,然后在第1组、再在第2组机器上加工,最后在第5组机器上完成最后工序。
第1种原料在机器组3、1、2、5加工,在机器组3、1、2、5加工的平均时间分别为30、36、51、30;第2种原料在机器组4、1、3加工,在机器组4、1、3加工的平均时间分别为66、48、45;第3种原料在机器组2、5、1、4、3加工,在机器组2、5、1、4、3加工的平均时间分别为72、15、42、54、60,如表8.1所示。
表8.1原料加工工艺路线与各工序加工时间参数
原料类型
机器组别
相继工序平均服务时间(Minute)
1
3,1,2,5
20,36,51,30
2
4,1,3
66,48,25
3
2,5,1,4,3
72,15,42,54,30
如果一种原料到达车间时,发现该组机器全都忙着,该原料就在该组机器处的一个服从先进先出FIFO(FirstInFirstOut)规则的队列。
前一天没有完成的任务,第二天继续加工。
在某机器上完成一个工序的时间服从Erlang分布,其平均值取决于原料的类别以及机器的组别。
例如,表11.1中的第2类原料,它的第一道工序是在第4组机器上加工,加工时间服从均值为66的Erlang分布。
8.1.3概念模型
8.2建立Flexsim模型
第1步:
模型实体设计
模型元素
系统元素
备注
Flowitem
原料
不同实体类型代表不同类型的原料,分别标为1、2、3
Processor
机器
进行不同的参数定义以表征不同机器组中的机器
Queue
机器组暂存区
Source
原材料库
原材料的始发处,每天连续8小时提供原料,不同的原料有不同的间隔到达时间,因此用不同的Source生成不同类型的原料
Sink
成品库
原料加工后的最终去处
第2步:
生成实体
从实体库中拖出三个Source(每个Source代表一类原料)、一个Sink、相应数量的Processor和Queue,把各实体按照概念模型中的位置摆好,如图8-1所示。
图8-1模型实体布局图
第3步:
连接端口
进行端口连接时,需要考虑不同类型原料的加工流程。
流动实体将沿着连接后的实体路径从系统中流过。
首先我们考虑第一类原料在机器组间的流动路径。
由表7.1可知,原料1依次流过机器组3、1、2、5。
当原料完成某一阶段的加工,如机器组3上的加工后,它将进入机器组1,进行后续加工。
机器组1中的任意一台空闲机器均可完成该加工,因此,我们将机器组3中的每台机器的输出端口与机器组1中的每台机器的输入端口连接,将机器组1中的每台机器的输出端口与机器组2中的每台机器的输入端口连接,再将机器组2中的每台机器的输出端口与机器组5中的每台机器的输入端口连接。
最后,为了使原料1能流入、流出系统,将Source的输入端口与机器组3中的每台机器的输入端口连接,并将机器组5中的每台机器的输出端口与Sink的输入端口连接。
连接后的模型如图8-2所示。
图8-2第一类原料路径端口连接后的模型
在上述分析中,我们没有考虑当原料进入某机器组时发现该组机器均不空闲的情况。
由系统描述可知,若没有空闲机器加工该原料,原料进入该机器组的暂存区。
因此,对于由机器组3加工完成并进入机器组1的原料,在无法进入机器进行加工的情况下,需要进入暂存区,为此,我们添加一个连接,将机器组3的每台机器的输出端口再与机器组1的暂存区的输入端口连接。
注意:
连接顺序不能颠倒,必须先和机器组1的每台机器连接,再和机器组1的暂存区连接。
同样地,我们将机器组1的每台机器的输出端口与机器组2的暂存区的输入端口连接,机器组2的每台机器的输出端口与机器组5的暂存区的输入端口连接。
最后,不要忘记进入机器组3而需要等待的原料,因此将Source的输入端口与机器组3的暂存区的输入端口连接。
连接后的模型如图8-3所示。
图8-3考虑暂存区后的连接图
至此,原料1的路径端口连接还没有完成。
进入各机器组暂存区的原料还需要在有机器空闲的情况下,按照先进先出(FIFO)的原则进入机器中加工。
因此,我们需要将各暂存区的输出端口与该机器组的各台机器输入端口相连接。
将机器组3的暂存区的输出端口与机器组3的每台机器的输入端口相连接,同样地处理机器组1、2、5。
完成后的模型如图8-4所示。
图8-4第一类原料相关连接完成后的模型
现在,我们就完成了原料1的路径端口连接,注意,上述连接均表明原料1的流动方向,故均为“A”连接。
由表7.1可知,原料2依次流过机器组4、1、3,而原料3依次流过机器组2、5、1、4、3。
我们可以按照原料1的端口连接方法分别完成原料2和原料3的端口连接。
完成后的模型图8-5所示。
图8-5所有连接完成后的模型
在连接后两类原料的路径端口时需要注意,对于在处理原料1的路径端口时已有的连接不需要重复连接,比如机器组1的暂存区与该组机器的连接。
由于所有的原料都进入同一个暂存区,并由此暂存区进入某台机器,因此从该暂存区到各机器的连接不需要重复搭建。
第4步:
设置连接线
端口连接完成后,我们可以发现,由于模型中的路径较为复杂,众多的连接线使得整个视窗显得非常混乱,不利于后续建模,因此我们考虑将这些连接线设为不可见。
单击建模视窗左侧的菜单弹出按钮
,可以看到如图8-6的弹出菜单。
图8-6建模视窗左侧弹出菜单
单击ShowConnections选项前的方框,除去其前的√,可以看到模型视窗中的连接线都不见了。
注意,这只是视觉效果,而实际上我们刚才所作的连接没有被消除,也就是说,各实体间的逻辑连接还是存在的。
图8-7连接线不可见的模型
为了使界面更加清晰简洁,我们再去掉ShowNames选项前面的√,使得模型中各实体的名字属性等标签不显示出来。
图8-8实体的名字属性不可见的模型
再单击菜单隐藏按钮
,将菜单隐藏。
第5步:
定义Source
在模型中,共有3个Source实体,每个Source对应一类原料,也就是说,一个Source生成一类原料。
我们需要设置每个Source实体,使得每类原料的到达间隔时间满足系统的要求。
第一类原料的到达间隔时间服从均值为50分钟的指数分布。
我们双击对应于第一类原料的那个Source实体(按照原料路径,即为输出端口与机器组3的输入端口连接的Source),打开其参数视窗。
保留其ArrivalStyle的默认选项“Inter-ArrivalTime”,因为我们将以原料的到达间隔时间为特征来刻画其原料流。
同时我们发现Inter-ArrivalTime选项默认值就是指数分布Exponentialdistribution,但是我们需要修改其参数,因此单击右侧的
按钮,出现参数修改视窗。
图8-9修改Source中流动实体的到达间隔时间
我们将尺度参数Scalevalue改为50,也就是说该分布的均值是50。
注意这个时间的单位是分钟,因此我们将模型的单位时间定义为1分钟,而不是通常默认的一秒钟。
图8-10修改随机分布的参数
同样地,我们可以修改第二类原料和第三类原料的Source,使得其生成实体的到达间隔时间分别服从均值为30分钟和75分钟的指数分布。
三类原料进入系统后,为了方便各机器组能区分开不同的原料,我们需要给这三类原料相对应的实体不同的实体类型。
同时为了能在后续的仿真运行中更好的观察系统的行为和变化,可以赋予三类原料不同的颜色,方便我们直接从视觉上观察不同原料的加工状态。
这里我们简单将三类原料用红、黄、蓝三种颜色区分,其中第一类原料红色,第二类原料黄色,第三类原料蓝色。
因此,我们还需要在流动实体未离开各自Source时定义其实体类型和颜色。
我们再次打开第一个Source(对应第一类原料)的参数视窗,选择SourceTriggers标签。
我们可以在生成流动实体时设置其类型,在其将要离开Source时赋予颜色,这需要定义OnCreation和OnExit选项。
首先我们来设置其实体类型。
单击OnCreation下拉菜单,选择SetItemtype选项。
图8-11Source中OnCreation选项下拉菜单
再打开其参数修改视窗,将其类型值改为1。
图8-12修改参数,设置实体类型值为1
单击确定,关闭该参数修改窗口。
再单击主窗口的应用Apply,可以看到OnCreation选项已经显示为我们设置的内容。
图8-13OnCreation选项栏
接下来,我们来定义实体颜色。
单击OnExit选项的下拉菜单,选择Setcolor选项。
图8-14OnExit下拉菜单
再打开其参数修改窗口,将颜色设置为红色。
注意,在这个窗口下部,列举了很多不同的颜色,我们将原始值colorrandom改为colorred。
图8-15修改颜色设置
单击确定,关闭该参数修改窗口,再单击参数窗口的确定按钮,关闭该Source实体的参数窗口。
这样,我们就完成了第一类原料Source实体的定义。
相同的,我们可以定义第二类原料Source实体和第三类原料Source实体,其实体类型和颜色分别为2、黄色和3、蓝色。
第6步:
定义机器组1
三类原料都需要在机器组1上进行加工,只是各类原料的加工时间、前项工序和后续工序有所不同,也就是说,不同的原料在机器组1上进行加工所耗费的时间不同,而且这些原料加工后的输出也不同,分别流向不同的机器组。
因此我们需要定义每台机器的加工时间和输出端口规则,需要注意的是,机器组1内的3台机器是完全一致的,也就是说,只要我们定义好了一台机器,剩余的两台机器可以完全按照第一台进行定义。
首先我们来定义机器的加工时间。
由表7.1可知,不同类型的原料加工时间不同,分别为均值是36分钟、48分钟、42分钟的Erlang分布。
双击任一台Processor,打开其参数窗口,单击ProcessTime选项的下拉菜单,选择ByItemtype(indirect)。
图8-16加工时间下拉菜单
打开其参数修改窗口,可以看到,我们可以针对不同的实体类型定义不同的加工时间。
图8-17ByItemtype(indirect)选项参数设置
原始值都是常数,而这里我们需要使用随机数,因此需要用到生成随机数的函数。
在Flexsim工具栏上,单击
按钮,打开一个新窗口。
通过这个窗口,我们可以查询在Flexsim中可用的各类函数,包括这些函数的格式、含义等。
在最上方的下拉选项框中输入erlang,将会出现erlang分布函数的使用说明。
图8-18Command窗口,erlang函数介绍
Erlang分布中的位置参数(locationvalue)是其均值,而其它两个参数均为1。
最后一个流参数(stream)定义的是生产该随机数的种子,不同的种子生成的随机数流不同。
因此,第1类原料的加工时间可以表示为erlang(36,1,1,1),第2类原料的加工时间可以表示为erlang(48,1,1,1),第3类原料的加工时间可以表示为erlang(42,1,1,1)。
现在我们可以修改机器组1中的机器的加工时间了。
图8-19修改加工时间参数
接下来,我们定义机器的输出端口。
第1类原料从机器组1流向机器组2,第2类原料从机器组1流向机器组3,第2类原料从机器组1流向机器组4。
注意,这些原料不仅流入各机器组的机器,也会在所有机器均在进行加工时流入该组的暂存区。
首先,我们查看一下机器组1的输出端口,右键单击机器,打开其属性窗口,选择General标签。
图8-20属性窗口
单击OutputPorts,右侧将出现该机器输出端口所连接实体的列表。
图8-21输出端口列表
由我们之前的连接顺序,或者由各实体所对应的机器组可知,1-3实体是第1类原料的流出方向,4-8实体是第2类原料的流出方向,9-12实体是第3类原料的流出方向。
也就是说,第1类原料应该从1-3号输出端口流出,第2类原料应该从4-8号输出端口流出,第3类原料应该从9-12号输出端口流出。
在了解清楚了各类原料流出的输出端口后,我们需要对该机器的输出端口进行设置。
单击属性窗口左下角的Parameters按钮,打开该机器的参数窗口,选择Flow标签。
图8-22参数窗口的Flow标签页
通过修改SendToPort选项可以控制从该机器流出的实体所通过的输出端口。
同样的,我们是根据实体类型来区分输出端口的,单击SendToPort下拉菜单,选择ByItemtype(indirect)选项。
图8-22选择SendToPort下拉菜单中的ByItemtype(indirect)选项
打开其参数修改窗口,我们发现,对应不同的实体类型,我们需要确定一个输出端口。
而对于一种类型对应于多个输出端口的情形,尤其是需要判断这些端口对应的机器是否正在加工。
因此,我们需要对模型进行一定的修改。
以第1类原料为例。
在完成了机器组1上的加工上,第1类原料将被送到空闲的机器组2中的机器上,或者是送到该组暂存区。
现在我们认为原料在加工完成后,统一先送到机器组2的暂存区中,如果有机器空闲,该原料不在暂存区停留,直接进入空闲机器进行加工。
这样,对于机器组1的机器而言,第一类原料只有一个输出:
机器组2的暂存区。
同样的,对于其它类的原料在完成了机器组1上加工后,先进入下一工序的暂存区,再被分配到该组的空闲机器上进行加工。
对模型进行修改,我们依然以第1类原料为例。
首先,我们需要取消机器组1的各台机器到机器组2的各台机器的连接,只保留这些机器到机器组2的暂存区的连接。
取消已有的“A”连接,需要按住“Q”键,同时沿原A连接的方向,重新在两个实体间连线。
为了确定连接取消,我们可以右键单击某台机器,打开其属性窗口的General标签,选中OutputPorts一项,窗口右侧出现现有的输出端口连接,如下图所示。
可以发现,其输出端口已经少了两台Processor的连接,但是保留了原来的Queue连接。
对于第2类原料和第3类原料的输出,我们进行同样的处理。
最后,机器组1中的机器的输出端口列表中只有Queue实体,没有Processor,如图8-24所示。
图8-23模型修改前的输出端口列表
图8-24模型修改后的输出端口列表
接下来,我们来完成对机器组1的输出端口设置。
重新打开机器的参数窗口,选择Flow标签。
正如之前所说的,各类原料的输出端口与它们的实体类型有关,所以我们选择SendToPorts中的Byitemtype(direct)选项。
注意,这次我们的选项选择和上次不一样,上次选择的是Byitemtype(Indirect)。
主要是因为这次只有三个输出端口,每个端口与一类原料相关,而且由我们的连接顺序可知,这三个端口与原料类型是一一顺序对应的。
图8-25选择SendToPorts中的Byitemtype(direct)选项
最后单击确定,关闭参数窗口。
现在,我们完成了对机器组1中机器的设置。
在开始的时候,我们提到,同一机器组中的机器设置是完全一样的,依照刚才的方法,确认设置好了所有机器组1中的机器。
第7步:
定义机器组2
机器组2的设置方法和机器组1完全一样,这是设置具体内容不同。
由表8.1可知,只有第1类原料和第3类原料流过该机器组,其中,第1类原料从机器组1流入,流向机器组5,加工时间服从均值是51分钟的Erlang分布;第2类原料从Source流入,也流向机器组5,加工时间服从均值是72分钟的Erlang分布。
我们依旧首先设置加工时间。
加工时间的设置和机器组1完全一致,根据不同的实体类型给出不同的加工时间,如下图所示。
注意,我们只需要修改类型1和类型3的加工时间参数。
图8-26修改加工时间参数
我们注意到,机器组2的输出端口非常统一,都是直接输出到机器组5,也就是说,不需要通过判断实体类别来选择输出端口。
而在Flexsim中,流动实体的输出端口默认选项是FirstAvailable,也就是说将流动实体送到第一个可用的输出端口去。
对应我们的模型则是,如果机器空闲,则将原料送上机器加工,否则送到暂存区。
这个逻辑的实现得益于之前我们先连接机器,后连接暂存区。
因此我们不需要专门设置机器组2的输出端口。
图8-27保留机器组2的输出端口默认设置
第8步:
定义机器组3
由表8.1可知,三类原料均流过机器组3,其中,第1类原料从Source流入,流向机器组1,加工时间服从均值为30分钟的Erlang分布;第2类原料从机器组1流入,流向Sink,加工时间服从均值为45分钟的Erlang分布;第3类原料从机器组4流入,流向Sink,加工时间服从均值为60分钟的Erlang分布。
首先,我们定义机器组3的加工时间。
图8-28修改机器组3的加工时间参数
机器组3的输出端口比机器组1的情况略为简单,只是需要对第1类原料的输出实体,也就是对机器组1的连接进行修改和设置。
与机器组1的设置相同,我们首先取消机器组3的机器到机器组1的机器的连接,只保留其到机器组1的暂存区的连接。
修改后机器的输出端口列表如图8-29。
图8-29模型修改后机器组3的输出端口列表
机器组3的输出端口选择仍旧是根据不同的类型实体,类型1的实体流向端口1,也就是流向机器组1的暂存区,而类型2、3的实体流向端口2,也就是流向Sink。
这里,我们不能选择Byitemtype(direct),因为类型3实体和其流出端口号不一致。
我们改而选择Byitemtype(indirect),并依照上述分析修改这个选项的参数。
图8-30选择SendToPort下拉菜单中的Byitemtype(indirect)选项
图8-31修改输出端口设置
第9步:
定义机器组4
由表8.1可知,只有第2类原料和第3类原料流过机器组4,其中,第2类原料从Source流入,流向机器组1,加工时间服从均值为66分钟的Erlang分布;第3类原料从机器组1流入,流向机器组3,加工时间服从均值为54分钟的Erlang分布。
从上述几组机器的设置可知,我们不仅需要设置其加工时间,还需要修改模型,设置输出端口,具体分析和方法同机器组1。
首先设置机器组4的加工时间。
图8-32设置机器组4的加工时间
其次,需要修改机器组4的输出端口连接,只保留其到其它机器组暂存区的连接。
图8-33模型修改后机器组4的输出端口列表
最后,我们只需要按照实体类型设置其输出端口。
图8-34机器组4的输出端口设置
第10步:
定义机器组5
由表8.1可知,只有第1类原料和第3类原料流过机器组5,其中,第1类原料从机器组2流入,流向Sink,加工时间服从均值为30分钟的Erlang分布;第3类原料从机器组2流入,流向机器组1,加工时间服从均值为15分钟的Erlang分布。
从上述几组机器的设置可知,我们不仅需要设置其加工时间,还需要修改模型,设置输出端口,具体分析和方法同机器组1。
首先设置机器组5的加工时间。
图8-35设置机器组5的加工时间
其次,需要修改机器组5的输出端口连接,只保留其到其它机器组暂存区和Sink的连接。
图8-36模型修改后机器组5的输出端口列表
最后,我们只需要按照实体类型设置其输出端口。
图8-37机器组5的输出端口设置
第11步:
定义暂存区
暂存区用来存放等待加工的原料,采用先进先出策略,而且暂存区没有容量限制,也就是说,只要是加工完了而又无法立即开始下一阶段加工的原料都可以存放在暂存区中。
Flexsim中,暂存区Queue实体的默认出入规则就是先进先出,因此不需要设置。
但是其默认最大容量是10,由于我们不知道在模型运行过程中可能需要的容量是多少,因此我们将其最大容量改为一个大值,比如10000。
双击暂存区,打开其参数窗口,将Maximumcontent一栏的值改为10000。
单击确定,关闭窗口。
对模型中所有的暂存区作相同的设置。
图8-38暂存区最大容量设置
8.3模型运行
第12步:
设置Experimenter
系统要求模型在保持车间逐日连续工作的条件下,进行365天的仿真运行(每天按8小时计算),因此我们需要设置模型的仿真总时间。
一天24个小时,但是其中只有8小时在加工,剩余16个小时我们可以忽略,也就是说,我们可以将第二天开始加工的时刻点与当天停止结束的加工点连接起来,认为是连续加工365天,每天是8个小时。
注意,在模型中,我们假设单位时间长度是1分钟,因此,需要运行的总时间长度是365×8×60=175200单位时间。
模型的运行总时间长度在Experimenter中设置。
单击界面右下方的
按钮,打开Experimenter窗口,将SimulationEndTime改为175200。
这里,我们只运行一次仿真,因此将仿真次数改为1。
图8-39设定仿真运行总时间
单击确定关闭窗口。
第13步:
编译、重置、运行模型
单击
按钮,对模型进行编译。
编译完成后,单击
按钮,重置模型。
最后单击
按钮,开始仿真。
仿真进行过程中,可以看到红、黄、蓝三种不同颜色的原料从系统中流过,经过不同机器组的加工,最后离开系统。
图8-40仿真运行过程中的模型
仿真运行到175200单位时间的时候,自动停止。
8.4数据分析
首先我们来查看各组机器处的暂存区的统计数据。
右键单击Queue,选择Properties,打开其属性窗口,选择Statistics标签。
该页面的Content一栏统计了暂存区内存放的待加工产品数量信息,而Staytime一栏统计了待加工产品在暂存区内等待时间信息。
图8-41是机器组1的暂存区的统计数据。
图8-41机器组1暂存区的统计数据
根据不同暂存区的统计信息,我们可以得出各机器组处等待加工的产品的数量和等待时间,如表8.2所示。
表8.2各机器组统计数据
机器组数
1
2
3
4
5
平均等待时间(分)
157.26
157.37
4.67
107.85
16.54
平均数量
10.1
4.92
0.24
4.17
0.29
由上表可以发现,机器组1的暂存区中等待加工的产品数量大、等待时间长,我们可以认为这是整个加工系统的瓶颈,如果要提高整体产出率,那么首先需要添加机器组1的机器。
除了机器组1,机器组4的平均等待数量不高,但是平均等待时间很长,因此也需要改善。