实例系统生产制造单一类型的产品——振动轮,其生产原材料为各种类型的钢板,通过机械加工,然后组装成一个空轮(没有安装轴承座、轴承和轴)。组成振动轮的部件主要为5类,分别为外圈、内圈、加强筋、内隔板和封口板,以数字1,2,3,4,5表示;其生产过程包括12个主要加工单元,分别为剪板切割(WS1)、打坡口(WS2)、卷圆(WS3)、轮圈焊接(WS4)、找圆(WS5)、车断面(WS6)、数控切割(WS7)、调平(WS8)、油漆(WS9)、钻孔(WS10)、内轮焊接(分装工作站)和轮子焊接(总装工作站)。其生产流程如图5.1所示。
WS1 1,2 WS2 1,2 WS3 1,2 WS4 1,2 WS5 1 WS6 1,5 2 需求 WS12 1 WS7 3,4,5 WS8 3,4,5 WS9 4,5 3 WS10 4 产成品 6 WS11 物料流 看板流 WS:工作站
图5.1 实例生产/库存系统生产流程图
外圈原材料为特定型号的钢板,加工过程依次为两块外圈钢板通过卷板切割机切割成适合大小,通过坡口机将钢板两端结合处内外打出坡度,通过卷圆机将钢板卷成轮圈,经过轮圈焊接工段将轮圈接口处焊接起来,通过找圆机将轮圈找圆,然后进入轮子焊接工段,与内轮和封口板焊接成轮子。
内圈原材料也为特定型号的钢板,加工过程为每次三块钢板通过卷板切割机切割成适合大小的板材,然后打坡口、卷圆、焊接、找圆,同外圈加工过程一样。在经过找圆工段之后,内轮圈再经过数控车床,进行端面对车,经过钻孔工段钻出工艺孔,到内轮焊接工段与加强筋和内隔板焊接成内轮。
加强筋、内隔板和封口板原材料也为特定型号的钢板,首先经过数控切割机切割成型,然后调平、油漆,内隔板和封口板需要经过钻口工段,钻制工艺孔,然后,内隔板到内轮焊接工段进行与内圈和加强筋的焊接,封口板到轮子焊接工段与内轮和外圈焊接成轮子。
1.2 基本生产单元的分解
该生产/库存系统包括四条串行线,分别为:
(1)外圈加工串行线:剪板切割、打坡口、卷圆、轮圈焊接、找圆;
(2)内圈加工串行线:剪板切割、打坡口、卷圆、轮圈焊接、找圆、车端面、钻孔; (3)加强筋加工串行线:数控切割、调平、油漆;
(4)内隔板、封口板加工串行线:数控切割、调平、油漆、钻孔。 该生产/库存系统包括两个并行加工模块,分别为:
(1)内圈、加强筋、内隔板焊接为内轮的焊接工段,即分装工作站WS11; (2)外圈、内轮、封口板焊接为轮子的轮子焊接工段,即总装工作站WS12。 生产流程中有资源共享和竞争的作业,如:
(1)内、外圈在进行切割、打坡口、卷圆、焊接等工序时,使用的都是相同的设备; (2)加强筋、内隔板、封口板在进行切割、调平工序时,也是竞争使用相同的设备。
1.3 系统绩效指标设计
系统绩效指标考虑系统产出量、在制品库存、设备稼动率和订单满意度四项。在进行Witness仿真程序设计的时候,将通过如下的数据模型和相关的程序进行统计计算获得。
(1)系统产出量(TPUT,ThroughPUT):统计在特定时间长度内,生产/库存系统所产出的成品数量。该指标在Witness中可以直接在成品缓冲区的“action on input„”中进行变量的累计。每当一个成品进入缓冲区,执行式(5-1)的计算程序,即产出量增加了一个。
TPUT= TPUT+1 (5-1)
在仿真模型中,该统计任务由订单队列DMD.b_order的“action on input„”和函数UF.tput来实现,具体程序参看附录B部分。
(2)在制品库存(WIP):用来统计某一时点上,生产/库存系统中所拥有的原材料、半成品或成品的量,一般用价值来衡量。
由于生产线上具有多种物料,如外圈、内圈、加强筋、封口板、内隔板,每种类型物料所具有的价值不一样,需要统计各种物料的实际价值。由于本实例并不是对实际的问题进行研究,仅仅是提供一种研究方法,所以为了便于对各种方案进行经济性比较,根据每件产品或部件的价值,给予它们附上对应的价值权重,然后进行统计计算。假设加强筋最便宜,以它为1,每件物料经过一道工序加工后,每加工10分钟,价值增加一个单位,不足10分钟的按10分钟计,得出实例系统中物料的价值权重系数如表5.1,表中下划线前的字符为物料名称中文首字母。
表5.1 物料价值权重系数表
*
名称 Jqj_WS7 Fkb_WS7 Ngb_WS7 Jqj_WS8 Fkb_WS8 Ngb_WS8 Jqj_WS9 fkb_WS9 ngb_WS9 权重 1 2 2 2 4 4 3 5 5 名称 Wq_WS1 Nq_WS1 Wq_WS2 Nq_WS2 Wq_WS3 Nq_WS3 Wq_WS4 Nq_WS4 Wq_WS5 权重 30 30 35 34 38 37 44 WS12 151 42 47 Ngb_WS10 WS11 名称 Nq_WS5 Nq_WS6 Nq_WS10 Fkb_WS10 权重 44 49 52 8 8 83 系统中的在制品库存WIP计算公式如式(5-2):
nWIP(QFi1iQMiQTi)Wi (5-2)
式中:QFi——第i种物料在各工序后的缓冲区中的数量;
QMi——第i种物料在各工序机器上等待加工或正在加工的数量; QTi——第i种物料在各工序间运输工具上的数量; Wi ——第i种物料的价值权重。
在该系统的仿真模型中,某一仿真时点上的QFi、QMi、QTi都可以通过Witness提供的函数直接得出。该指标的统计由目标函数UF.wip来计算,具体设计参看附录B部分。
(3)定单平均等待时间(AWT,Average Waiting Time):用于统计没能够及时被满足的订单在系统中的平均等待时间,用来揭示随机生产/库存系统对订单的反应灵敏度。如果某一订单在提前期之前得到满足,则等待时间为零;如果某一订单在提前期之后得到满足,则等待时间为当前时间与提前期的差值。该指标数值越低,表示顾客满意度越高;该指标数值越高,表示顾客满意度越低。计算公式如式(5-3)所示。
nAWTSWTnWTi1in
Ti’-Ti
WTi= 0
Ti’>Ti Ti’≤Ti
(5-3)
式中:n——仿真期间订单总数;
Ti——第i批订单实际发运时间; Ti——第i批订单预定发运时间; WTi——第i批订单的等待时间; SWT——仿真期间订单总等待时间。
在仿真模型中,这两项统计任务统一在订单处理单元中执行。执行程序体参见附录B中DMD.demand_meet的“Actions on finish”部分。
(4)设备平均稼动率(OR,Operation Rate):用于统计生产系统中机器利用程度,仿真系统对机器类型的元素提供了标准状态统计函数,可以统计机器的空闲、运行、故障和维修等状态所占时间的百分比。
在进行生产系统优化过程中,需要使用的机器时间包括下列几种:
(i) 最大操作时间:指的是设备可用的最大时间,若设备本身为厂内自购,而非租借,且可完全由厂內自主使用,则最大操作时间一般为日历时间。
(ii) 负荷时间:为机器设备可稼动的时间,是最大操作时间扣除停机损失,停机损失包括计划上的休止时间,如休假、教育训练、保养等。
’
(iii) 稼动时间:是负荷时间减去停机时间,而停机时间包括批次转换、设备异常停止、修理、待料等时间。机器稼动率=稼动时间/负荷时间。
(iv)
故障间隔时间:机器每运转多长时间就会出现一次故障,并需要维修。
(v) 故障维修时间:机器出现故障,修复所需的时间。 因此,本系统的设备平均稼动率计算公式如式(5-4)。
OR1mmORj1j (5-4)
式中:m——系统中工作单元的数量;
ORj——系统中第j个工作单元中机器设备的稼动率;
在仿真模型中,该统计任务通过函数来实现,程序设计参看附录B中的UF.OR1函数体。
1.4 生产线平衡
在进行系统仿真之前,需要将每个工作单元中机器设备的设计稼动率加以平衡,这样仿真过程不会因为设备能力不平衡,导致某些工序过快成为瓶颈工序,使前后工序的机器设备因为等待而导致利用不足。为了防止这一问题,将根据该系统的设计能力2500台/年,每年250个工作日来平衡生产线。由于机器对每一部件的加工时间均值确定,只能通过设计每个加工单元中机器的数量来对生产线进行设计,使得生产线能够很好的满足设计的生产能力。
对每个工作单元机器数量的计算过程涉及到如下的变量符号,首先对它们加以说明。 TWT——TotalWorkTime:每个工作单元中机器一年中的负荷时间; QU ——QuantityUnit:每个工作单元所拥有的机器数量; TQW——TotalQuantityofWork:每个工作单元所完成的产品套数;
TC ——TimeCycle:每个单元完成一套产品的生产平均周期时间,例如:WS3设备完成的一套产品为分别加工一个外圈、一个内圈,则平均周期时间为完成一个外圈的平均周期时间(30’)+完成一个内圈的平均周期时间(30’),共60分钟;
TNB——TotalNumofBreakdown:全年机器发生故障的次数,每月1次,均值为12次; RT——RepairTime:单次机器维修所需时间,均值为半天,4小时,240分钟; BR——BreakdownRate:故障率,均值为240*12/240/480=2.5%; BI——BreakdownInterval:机器故障发生时间间隔; OR——Operating Rate:机器稼动率,假设为80%。
通过该产品的BOP,得出该系统生产单件最终产品,在各个生产单元上需要的平均周期时间TC如表5.2所示。
表5.2 生产系统中生产单元TC表
单元 时间 WS1 50 WS2 90 WS3 60 WS4 120 WS5 40 WS6 50 WS10 WS7 130 8 WS8 38 WS9 20 WS11 WS12 30 45 通过系统的设计生产能力和机器的生产周期,同时考虑故障比率较低,在计算机器台数时将其忽略不记,设计计算公式如(5-5)所示。
TQWiTCiTWTi (5-5)
TWTiQUi250480式(5-5)中涉及四项变量,其中由于设备的故障、维修等所占时间比例忽略不记,所以机器全年负荷时间为TWT=250天*480分钟/天=120000分钟;假设稼动率产品套数就是生产线的年设计能力,即TQW=2500;从表5.2可以得出这12个工作单元的单套产品生产平均周期时间TCi。所以根据式(5-5)可以得出每个工作站的机器数量计算公式,如式(5-6)。
QUTQWiTCii120000ORTCi38.4 (5-6)
计算式(5-6)可以得出每个加工单元所需的设备数量,如果结果是小数,取不小于结果的最小整数。通过计算得出每个单元需要配备的机器数量如表5.3所示。
表5.3 加工单元设备台数表
加工单元 设备数量 WS1 2 WS2 3 WS3 WS4 WS5 WS6 2 4 2 2 WS10 WS7 4 1 WS8 WS9 WS11 WS12 1 1 1 2 根据设备故障比率,可以计算出设备故障平均时间间隔,计算公式如式(5-7):
BI=TWT×(OR-BR)/TNB=120000×0.775/12=7750 (5-7)
即每台设备加工时间累计达到7750分钟,就会发生故障,需要进行平均时间为240分钟的维修后,才可以继续运转。
1.5 看板数量的确定
生产系统循环过程中看板的数量决定了生产、使用或转让的在制品数量,决定了系统运作效率的高低。建立看板控制系统需要确定所需要的看板卡的数量。对于本文的单看板生产系统需要确定生产看板的套数,以它来控制加工单元的开始生产或停止生产。得到多数研究文献和实际应用接收的计算方式有如下两种:
文献[9]的最优看板计算公式(5-8)。
kDL(1S)C (5-8)
式中:k——看板卡套数;
D——一段时期所需产品的平均数量; L——补充订货的提前期; S——安全库存; C——容器容量。
文献[10]的看板数量计算公式(5-9)。
NR(TpTd)(1X)/C (5-9)
式中:R——组件利用速度,如15件/分钟;
Tp——单件生产时间,如:1.5分钟/件; Td——箱子的运输和传送时间,如:2.5分钟; C——箱子的单位容量,如:45件; X——需求速率变化的百分比,如10%。
使用式(5-8)来确定看板数量,由于该公式没有应对动态需求这一项的变量,有效运用该公式的重要一步就是确定安全库存S的数值,而一旦动态需求的随机特征有所变化,该公式不能相应的进行反馈;式(5-9)考虑到动态需求,在公式中设定了需求速率变化X这一项,但是它没有考虑到安全库存,计算出来的数值通常偏小,引起生产系统较严重的缺货现象。本文研究生产/库存系统在需求和生产服务具有随机波动性时,随机变量的变异系数对系统绩效的影响,所以根据式(5-8)和式(5-9)进行修正,在式(5-9)添加安全系数α项,以保持看板数量能够对随机变量做出反应;同时,考虑批处理作业,添加批处理数据项B,保持系统的有效运行。对于生产看板数量的修正公式如(5-10)式。
k[RB(TPTd)(1X)/C] (5-10)
式中:k——生产看板数量;
[]——取大于表达式数值的最小整数; R——组件利用速度;
B——下道工序对该部件的批处理数量; Tp——单件生产时间; Td——箱子的运输和传送时间; C——箱子的单位容量; X——需求速率变化的百分比; α——安全系数。
同一产品生产线的利用速率R为每天设计产出量除以每天的时间。在仿真实例中,产出量为每天10套,即R=10/480min=1/48(套/分钟);B和Tp各个部件各不相同,见流程数据表附录A;由于不考虑工序间运输时间对系统绩效的影响,取Td为0,C为1;X就是需求随机分布函数的变异系数CV,如果是需求确定性实验,则X=0,如果为需求随机性实验,则X有需求的变异系数确定;安全系数α通过仿真优化,暂取为1.7。
根据看板数量计算公式(5-9),对各个部件的各工序生产看板数量计算程序见附录B的Initial Actions和看板计算函数UF.KB部分。
1.6 仿真模型的WITNESS实现
通过对该随机生产/库存系统流程的分析和系统配置参数的设定,设计出系统的Witness仿真模型,
其可视化界面如图5.4所示。
图5.4 振动轮生产/库存系统Witness仿真界面
其中仿真模型中变量数据的初始化设置设计于Witness仿真模型的Initialize程序中,函数的逻辑结构、加工单元、原材料、半成品以及库存等实体元素的输入输出关系等都设计在这些元素对应的action或rule编辑框内,具体程序参考附录部分。
1.7 模型参数优化
在计算机模型验证部分,为了证明计算机模型同理论模型是相符的,只考虑了计算机模型在确定型和随机型两种情况下的设备稼动率和故障率,以及产品产出数量,没有考虑系统的另外两个绩效指标:库存水平和定单平均等待时间。这两项指标与看板数量和维修人员数量之间具有很强的相关性。因此为了研究各种可变因子变化对系统绩效的影响,需要建立一个统一的、优化的模型参数环境,需要对模型的相关参数进行优化取值,涉及的参数有看板安全系数α和维修工的数量,对其进行优化选择的准则是:在制品库存尽可能低、定单平均等待时间尽可能低、维修工数量尽可能少。
将参数α和维修工的数量Qmen的可能取值设置如表5.8所示,从表上可以看出α有13种可选取值,Qmen有6个可能取值,累积有78种组合,现在寻求仿真模型在这78种方案的哪一种方案配置下,系统绩效最优。
表5.8 优化参数的可能取值表 变量名称 可能取值 α Qmen 累积 [1.2,2.4] step=0.1 13 [1,6] step=1 78 通过Witness仿真优化工具包optimize进行优化仿真运行,将实验结果导入到Excel中,按照定单平均等待时间AWT为第一排序字段、在制品库存WIP为第二排序字段,递增排列。将排列结果的
前9个相对最优配置方案及实验结果列入表5.9。
表5.9 模型仿真参数优化结果数据表
WIP 4794 4794 5031 5031 5140 5140 5230 5230 5230 Qmen 4 4 6 6 5 5 3 3 3 α 1.7 1.8 1.7 1.8 1.7 1.8 1.9 2 2.1 AWT 0 0 0 0 0 0 0 0 0 OR 52.012 52.012 52.054 52.054 52.053 52.053 52.061 52.061 52.061 TPUT 2520 2520 2520 2520 2520 2520 2520 2520 2520 从表5.9可以看出,在确定性情况下,α取1.7和1.8两个数值得出的系统绩效相同;再比较WIP数值,最低值为4794;维修工数量直到第7条配置时,才为3人,少于第一条配置。因此,选定第一条配置为系统的最优配置方案。在下一章进行的仿真实验研究中,如果没有特别的说明,模型中的α和Qmen将确定为这两个数值(1.7和4)。
附录B Witness 仿真程序
MODEL INFORMATION:
Model Name: Model Title:
production and inventory system simulation optimize system parameters
Model Author: jiannywang
Creation Date: Thu Mar 31 11:29:17 2005
Industrial Engineering Department
Model Notes:
Business Administration School University of Jiangsu
!pm_var.mypns = 100
Initial Actions:
!pm_var.cv = 0 Uvar.kbsafe = 1.7
Uvar.PK_wl_qg = UF.KB (25) Uvar.PK_wl_dpk = UF.KB (50) Uvar.PK_wl_jy = UF.KB (30) Uvar.PK_wl_hj1 = UF.KB (60) Uvar.PK_wl_zy = UF.KB (25) Uvar.PK_nl_qg = UF.KB (20)
Uvar.PK_nl_dpk = UF.KB (40) Uvar.PK_nl_jy = UF.KB (25) Uvar.PK_nl_hj1 = UF.KB (50) Uvar.PK_nl_zy = UF.KB (20) Uvar.PK_nl_cdm = UF.KB (50) Uvar.PK_nl_zk = UF.KB (30) Uvar.PK_jqj_qg = UF.KB (12 * 4) Uvar.PK_jqj_tp = UF.KB (14 * 4) Uvar.PK_jqj_yq = UF.KB (60 * 4) Uvar.PK_ngb_qg = UF.KB (15 * 2) Uvar.PK_ngb_tp = UF.KB (25 * 2) Uvar.PK_ngb_yq = UF.KB (60 * 2) Uvar.PK_ngb_zk = UF.KB (50 * 2) Uvar.PK_fkb_qg = UF.KB (18 * 2) Uvar.PK_fkb_tp = UF.KB (25 * 2) Uvar.PK_fkb_yq = UF.KB (60 * 2) Uvar.PK_fkb_zk = UF.KB (50 * 2) Uvar.PK_hj2 = UF.KB (30) Uvar.PK_hj3 = UF.KB (45) Uvar.breakinterval = 7750 Uvar.repairtime = 240
_____________________________________________________________ ELEMENT NAME: DMD.b_order Element Type: Quantity: Capacity: Input Option:
1000
Rear First Front Buffer 1
Output Option:
Search From:
Actions
Input: Output:
Uvar.totaldemand = Uvar.totaldemand + DMD.batchsize Uvar.outpart = Uvar.outpart + DMD.batchsize
_____________________________________________________________ ELEMENT NAME: DMD.demand Element Type: Type:
Part
Variable attributes
1
UF.DIT () + 1
Group number: Inter Arrival Time: First Arrival at:
310.0
Maximum Arrivals: Input / Output Rules
Output:
Unlimited
PUSH to DMD.b_order
Actions
Create:
DMD.arrivaltime = TIME
DMD.batchsize = UF.DBS () + 1 DMD.leadtime = UF.DLT () + 1
_____________________________________________________________ ELEMENT NAME: DMD.demand_meet Element Type: Quantity: Priority:
Machine 1 Lowest
Input / Output Rules
Input:
SEQUENCE /Wait DMD.b_order#(1),
WS12.store#(DMD.batchsize)
PUSH to SHIP
Output:
Actions
Finish:
IF DMD.arrivaltime + DMD.leadtime + 20 < TIME
Uvar.Nunsatisfy = Uvar.Nunsatisfy + 1
Uvar.waittime = Uvar.waittime + TIME - DMD.arrivaltime - DMD.leadtime - 20
ENDIF
_____________________________________________________________ ELEMENT NAME: pm_part.fengkouban Element Type: Type:
Part
Variable attributes
1 0
Group number: Maximum Arrivals: Actions
Create:
Uatt.tpnum = 4
Uatt.qgnum = 8 ICON = 106 Uatt.skqgtime = 25 Uatt.tptime = 18 Uatt.zktime = 25
_____________________________________________________________ ELEMENT NAME: pm_part.neigeban Element Type: Type:
Part
Variable attributes
1
Group number:
Maximum Arrivals: Actions
Create:
0
Uatt.tpnum = 4
Uatt.qgnum = 8 ICON = 107 Uatt.skqgtime = 25 Uatt.tptime = 15 Uatt.zktime = 25
_____________________________________________________________ ELEMENT NAME: pm_part.neilunban Element Type: Type:
Part
Variable attributes
1 0
Group number: Maximum Arrivals: Actions
Create:
Uatt.jbqgnum = 3
Uatt.jbqgtime = 60 Uatt.dpktime = 40 Uatt.jytime = 25 Uatt.hj1time = 50
_____________________________________________________________ ELEMENT NAME: pm_part.neiquan Element Type: Type:
Part
Variable attributes
1 0
Group number: Maximum Arrivals: Actions
Create:
Uatt.zytime = 20
Uatt.cdmtime = 50 Uatt.zktime = 30
_____________________________________________________________ ELEMENT NAME: pm_part.strengthban Element Type: Type:
Part
Variable attributes
1 0
Group number: Maximum Arrivals: Actions
Create:
Uatt.tpnum = 8
Uatt.qgnum = 16
ICON = 105 Uatt.skqgtime = 12 Uatt.tptime = 14
_____________________________________________________________
ELEMENT NAME: pm_part.wailun Element Type: Type:
Part
Variable attributes
1 0
Group number: Maximum Arrivals: Actions
Create:
Uatt.zytime = 25
_____________________________________________________________ ELEMENT NAME: pm_part.wailunban Element Type: Type:
Part
Variable attributes
1 0
Group number: Maximum Arrivals: Actions
Create:
Uatt.jbqgnum = 2
Uatt.jbqgtime = 50 Uatt.dpktime = 50 Uatt.jytime = 30 Uatt.hj1time = 60
_____________________________________________________________ ELEMENT NAME: repairmen Element Type:
Labor
Quantity always available: 4
____________________________________________________________ ELEMENT NAME: UF.AWT Notes:
Function
THE AVERAGE WAITING TIME OF ORDER
Element Type: Type:
Real
Parameters: Actions
0
Execution: RETURN Uvar.waittime / UF.numD ()
_____________________________________________________________ ELEMENT NAME: UF.bt
Notes: break time distribution funtion Function
Element Type: Type:
Real
Parameters:
2
mean,Real ppns,Integer
Actions
Execution: Uvar.funpt = GAMMA (1 / Uvar.cv ** 2,mean * Uvar.cv ** 2,Uvar.mypns + ppns)
RETURN Uvar.funpt !mean
_____________________________________________________________ ELEMENT NAME: UF.DBS Notes:
Function
DEMAND BATCH SIZE
Element Type: Type:
Integer
0
Parameters: Actions
Execution: RETURN GAMMA (1 / Uvar.cv ** 2,29 * Uvar.cv ** 2,Uvar.mypns + 14)
_____________________________________________________________ ELEMENT NAME: UF.DIT Notes:
Function
DEMAND INTER ARRIVAL TIME
Element Type: Type:
Real
Parameters: Actions
0
Execution: RETURN GAMMA (1 / Uvar.cv ** 2,1439 * Uvar.cv ** 2,Uvar.mypns + 13) !1439
_____________________________________________________________ ELEMENT NAME: UF.DLT Notes:
Function
DEMAND LEAD TIME
Element Type: Type:
Integer
0
Parameters: Actions
Execution: RETURN GAMMA (1 / Uvar.cv ** 2,1439 * Uvar.cv ** 2,Uvar.mypns + 15) !1439
_____________________________________________________________ ELEMENT NAME: UF.KB Element Type:
Function
Type: Integer
1
Parameters:
meantime,Real
Actions
Execution: Uvar.fun_kbsum = 1 / 48 * meantime * (1 + Uvar.cv + Uvar.kbsafe) + 1
RETURN Uvar.fun_kbsum !x=the coeffection variation !a=the safe index of kanban !p=the process time multi batchsize
_____________________________________________________________ ELEMENT NAME: UF.numD Element Type: Type:
Function
Integer
0
Parameters: Actions
Execution: RETURN TOTALIN (DMD.b_order)
_____________________________________________________________ ELEMENT NAME: UF.OR1 Element Type: Type:
Real
0 Function
Parameters: Actions
Execution: RETURN (SUTIL (WS9.mach,2) + SUTIL (WS1.mach,2) + SUTIL (WS8.mach,2) + SUTIL (WS5.mach,2) +
SUTIL (WS6.mach,2) + SUTIL (WS10.mach,2) + SUTIL (WS7.mach,2) + SUTIL (WS12.mach,2) + SUTIL (WS4.mach,2) + SUTIL (WS11.mach,2) + SUTIL (WS3.mach,2) + SUTIL (WS2.mach,2)) / 12 _____________________________________________________________ ELEMENT NAME: UF.pt Notes:
Function
process time distribution funtion
Element Type: Type:
Real
Parameters:
2
mean,Real ppns,Integer
Actions
Execution: Uvar.funpt = GAMMA (1 / Uvar.cv ** 2,mean * Uvar.cv ** 2,Uvar.mypns + ppns)
RETURN Uvar.funpt !mean
_____________________________________________________________ ELEMENT NAME: UF.rt
Notes:
repair time distribution funtion
Element Type: Type:
Real
Function
Parameters:
2
mean,Real ppns,Integer
Actions
Execution: Uvar.funpt = GAMMA (1 / Uvar.cv ** 2,mean * Uvar.cv ** 2,Uvar.mypns + ppns)
RETURN Uvar.funpt !mean
_____________________________________________________________ ELEMENT NAME: UF.TPUT Element Type: Type:
Function
Integer
0
Parameters: Actions
Execution: RETURN Uvar.outpart
_____________________________________________________________ ELEMENT NAME: UF.WIP Element Type: Type:
Real
0 Function
Parameters: Actions
Execution: !add all finish product WIP value
Uvar.valwip (1) = NPARTS (WS1.store) * 30 + NPARTS (WS2.store(1)) * 35 + NPARTS (WS2.store(2)) *
34 + NPARTS (WS3.store(1)) * 38 + NPARTS (WS3.store(2)) * 37 + NPARTS (WS4.store(1)) * 44 + NPARTS (WS4.store(2)) * 42 + NPARTS (WS5.store(1)) * 47 + NPARTS (WS5.store(2)) * 44 + NPARTS (WS6.store) * 49 + NPARTS (WS11.store) * 83 + NPARTS (WS12.store) * 151
Uvar.valwip (1) = Uvar.valwip (1) + NPARTS (WS7.store(1)) * 1 + NPARTS (WS7.store(2)) * 2 + NPARTS
(WS7.store(3)) * 2 + NPARTS (WS8.store(1)) * 2 + NPARTS (WS8.store(2)) * 4 + NPARTS (WS8.store(3)) * 4 + NPARTS (WS9.store(1)) * 3 + NPARTS (WS9.store(2)) * 5 + NPARTS (WS9.store(3)) * 5 + NPARTS (WS10.store(1)) * 52 + NPARTS (WS10.store(2)) * 8 + NPARTS (WS10.store(3)) * 8 + NPARTS (DMD.demand_meet) * 151
!add all material in machine value Uvar.valwip
(3) * * * * *
= 28 30 34 37 42
NPARTS2 + + + + +
(WS1.mach,pm_part.wailunban,0)
* * * * * *
27 30 35 38 44 44
+ + + + + +
NPARTS2 NPARTS2 NPARTS2 NPARTS2 NPARTS2 NPARTS2
(WS1.mach,pm_part.neilunban,0) (WS1.mach,pm_part.neilunban,0) (WS3.mach,pm_part.neilunban,0) (WS4.mach,pm_part.neilunban,0) (WS5.mach,pm_part.neiquan,0)
NPARTS2 NPARTS2 NPARTS2 NPARTS2 NPARTS2
(WS2.mach,pm_part.wailunban,0) (WS3.mach,pm_part.wailunban,0) (WS4.mach,pm_part.wailunban,0) (WS5.mach,pm_part.wailun,0) (WS6.mach,pm_part.neiquan,0)
(WS12.mach,pm_part.fengkouban,0) (WS12.mach,pm_part.neilun,0) * 83
Uvar.valwip
(3)
* 8 + NPARTS2 (WS12.mach,pm_part.wailun,0) * 47 + NPARTS2
= +
Uvar.valwip NPARTS2 + 4
(3) + NPARTS (WS7.mach) * * * *
6 2 2 4
+ + + +
NPARTS2 NPARTS2 NPARTS2 NPARTS2
(WS8.mach,pm_part.strengthban,0) (WS8.mach,pm_part.neigeban,0)
*
(WS8.mach,pm_part.fengkouban,0)
2 *
NPARTS2 +
NPARTS2
(WS9.mach,pm_part.strengthban,0) (WS9.mach,pm_part.neigeban,0)
(WS9.mach,pm_part.fengkouban,0)
(WS10.mach,pm_part.fengkouban,0) * 5 + NPARTS2 (WS10.mach,pm_part.neigeban,0) * 5 + NPARTS2 (WS10.mach,pm_part.neiquan,0)
* 49 + NPARTS2 (WS11.mach,pm_part.strengthban,0) * 3 + NPARTS2
(WS11.mach,pm_part.neiquan,0) * 52 + NPARTS2 (WS11.mach,pm_part.neigeban,0) * 8
RETURN Uvar.valwip (1) + Uvar.valwip (2) + Uvar.valwip (3)
_____________________________________________________________ ELEMENT NAME: WS1.mach Notes:
IF NPARTS (b_finish(1)) + NPARTS2 (mach,wailunban,0) <= NPARTS (b_finish(2)) + NPARTS2
(mach,neilunban,0) + 1 AND NPARTS (b_raw(1)) >= 2
PULL from b_raw(1)
ELSEIF NPARTS (b_finish(1)) + NPARTS2 (mach,wailunban,0) > NPARTS (b_finish(2)) + NPARTS2
(mach,neilunban,0) AND NPARTS (b_raw(2)) >= 3
PULL from b_raw(2)
ELSE
Wait
ENDIF
Machine 2 Lowest
Element Type: Quantity: Priority: Type:
Batch Uatt.jbqgnum
Uatt.jbqgnum UF.pt (Uatt.jbqgtime,1)
Batch Min: Batch Max: Cycle Time:
Input / Output Rules
Input:
IF N = 1 AND NPARTS (WS1.store(1)) < Uvar.PK_wl_qg PULL from pm_part.wailunban out of WORLD
ELSEIF N = 2 AND NPARTS (WS1.store(2)) < Uvar.PK_wl_qg
PULL from pm_part.neilunban out of WORLD
ELSE
Wait
ENDIF
PUSH pm_part.wailunban to WS1.store(1),pm_part.neilunban to WS1.store(2)
Output:
Labor Requirements
Repair #1: repairmen#1
Breakdown
Description:
Breakdown Number 1
Breakdown type: Busy Time At Start of Cycle:
Yes
Down Interval: UF.bt (Uvar.breakinterval,21) Repair Time: Scrap Part: No Set-up on repair: No
UF.rt (Uvar.repairtime,41)
_____________________________________________________________ ELEMENT NAME: WS10.mach Element Type: Quantity: Priority: Type:
Machine 4 Lowest
Single
UF.pt (Uatt.zktime,10)
Cycle Time:
Input / Output Rules
Input:
IF NPARTS2 (WS10.mach,pm_part.neiquan,0) + NPARTS (WS10.store(1)) < Uvar.PK_nl_zk OR
NPARTS2 (WS10.mach,pm_part.neigeban,0) + NPARTS (WS10.store(2)) < Uvar.PK_ngb_zk OR NPARTS2 (WS10.mach,pm_part.fengkouban,0) + NPARTS (WS10.store(3)) < Uvar.PK_fkb_qg
IF NPARTS (WS6.store) > 0 AND 2 * (NPARTS2 (WS10.mach,pm_part.neiquan,0) + NPARTS
(WS10.store(1))) <= NPARTS2 (WS10.mach,pm_part.neigeban,0) + NPARTS (WS10.store(2)) AND 2 * (NPARTS2 (WS10.mach,pm_part.neiquan,0) + NPARTS (WS10.store(1))) <= NPARTS2 (WS10.mach,pm_part.fengkouban,0) + NPARTS (WS10.store(3))
PULL from WS6.store
ELSEIF NPARTS (WS9.store(2)) > 0 AND NPARTS (WS10.store(2)) <= NPARTS (WS10.store(3))
PULL from WS9.store(2)
NPARTS2
(WS10.mach,pm_part.fengkouban,0)
+
NPARTS
(WS10.store(3))
<
ELSEIF
Uvar.PK_fkb_qg
PULL from WS9.store(3)
ENDIF
ELSE
Wait
ENDIF
PUSH pm_part.neiquan to WS10.store(1),pm_part.neigeban to WS10.store(2),
pm_part.fengkouban to WS10.store(3)
Output:
Labor Requirements
Repair #1: repairmen#1
Breakdown
Description: Breakdown Number 1
Breakdown type: Busy Time At Start of Cycle:
Yes
Down Interval: UF.bt (Uvar.breakinterval,30) Repair Time: Scrap Part: No Set-up on repair: No
UF.rt (Uvar.repairtime,50)
_____________________________________________________________ ELEMENT NAME: WS11.mach Element Type: Quantity: Priority: Type:
Machine 1 Lowest
Assembly
7
UF.pt (30,11)
Assembly Qty: Cycle Time:
Input / Output Rules
Input:
IF NPARTS (WS11.store) < Uvar.PK_hj2 SEQUENCE /Wait WS10.store(1)#(1), WS10.store(2)#(2), WS9.store(1)#(4)
ELSE
Wait
ENDIF
PUSH to WS11.store
Output:
Labor Requirements
Repair #1: repairmen#1
Breakdown
Description:
Breakdown Number 1
Breakdown type: Busy Time At Start of Cycle:
Yes
Down Interval: UF.bt (Uvar.breakinterval,31) Repair Time: Scrap Part: No Set-up on repair: No
UF.rt (Uvar.repairtime,51)
Actions
Finish:
CHANGE ALL to pm_part.neilun
_____________________________________________________________ ELEMENT NAME: WS12.mach Element Type:
Machine
Quantity: Priority: Type:
2 Lowest
Assembly
4
UF.pt (45,12)
Assembly Qty: Cycle Time:
Input / Output Rules
Input:
IF NPARTS (WS12.store) < Uvar.PK_hj3 SEQUENCE /Wait WS5.store(1)#(1), WS11.store#(1), WS10.store(3)#(2)
ELSE
Wait
ENDIF
PUSH to WS12.store
Output:
Labor Requirements
Repair #1: repairmen#1
Breakdown
Description:
Breakdown Number 1
Breakdown type: Busy Time At Start of Cycle:
Yes
Down Interval: UF.bt (Uvar.breakinterval,32) Repair Time: Scrap Part: No Set-up on repair: No
UF.rt (Uvar.repairtime,52)
Actions
Finish:
CHANGE ALL to pm_part.lunzi
_____________________________________________________________ ELEMENT NAME: WS2.mach Element Type: Quantity: Priority: Type:
Machine 3 Lowest
Single
UF.pt (Uatt.dpktime,2)
Cycle Time:
Input / Output Rules
Input:
IF NPARTS2 (WS2.mach,pm_part.wailunban,0) + NPARTS (WS2.store(1)) < Uvar.PK_wl_dpk OR
NPARTS2 (WS2.mach,pm_part.neilunban,0) + NPARTS (WS2.store(2)) < Uvar.PK_nl_dpk
IF NPARTS (WS1.store(1)) > 0 AND NPARTS2 (WS2.mach,pm_part.wailunban,0) + NPARTS
(WS2.store(1)) < NPARTS2 (WS2.mach,pm_part.neilunban,0) + NPARTS (WS2.store(2))
PULL from WS1.store(1)
ELSEIF NPARTS2 (WS2.mach,pm_part.neilunban,0) + NPARTS (WS2.store(2)) < Uvar.PK_nl_dpk
PULL from WS1.store(2)
ENDIF
ELSE
Wait
ENDIF
PUSH pm_part.wailunban to WS2.store(1),pm_part.neilunban to WS2.store(2)
Output:
Labor Requirements
Repair #1: repairmen#1
Breakdown
Description:
Breakdown Number 1
Breakdown type: Busy Time At Start of Cycle:
Yes
Down Interval: UF.bt (Uvar.breakinterval,22) Repair Time: Scrap Part: No Set-up on repair: No
UF.rt (Uvar.repairtime,42)
_____________________________________________________________ ELEMENT NAME: WS3.mach Element Type: Quantity: Priority: Type:
Machine 2 Lowest
Single
UF.pt (Uatt.jytime,3)
Cycle Time:
Input / Output Rules
Input:
IF NPARTS2 (WS3.mach,pm_part.wailunban,0) + NPARTS (WS3.store(1)) < Uvar.PK_wl_jy OR
NPARTS2 (WS3.mach,pm_part.neilunban,0) + NPARTS (WS3.store(2)) < Uvar.PK_nl_jy
IF NPARTS (WS2.store(1)) > 0 AND NPARTS2 (WS3.mach,pm_part.wailunban,0) + NPARTS
(WS3.store(1)) < NPARTS2 (WS3.mach,pm_part.neilunban,0) + NPARTS (WS3.store(2))
PULL from WS2.store(1)
ELSEIF NPARTS2 (WS3.mach,pm_part.neilunban,0) + NPARTS (WS3.store(2)) < Uvar.PK_nl_jy
PULL from WS2.store(2)
ENDIF
ELSE
Wait
ENDIF
PUSH pm_part.wailunban to WS3.store(1),pm_part.neilunban to WS3.store(2)
Output:
Labor Requirements
Repair #1: repairmen#1
Breakdown
Description:
Breakdown Number 1
Breakdown type: Busy Time At Start of Cycle:
Yes
Down Interval: UF.bt (Uvar.breakinterval,23) Repair Time: Scrap Part: No Set-up on repair: No
UF.rt (Uvar.repairtime,43)
_____________________________________________________________ ELEMENT NAME: WS4.mach Element Type: Quantity: Priority: Type:
Machine 4 Lowest
Single
UF.pt (Uatt.hj1time,4)
Cycle Time:
Input / Output Rules
Input:
IF NPARTS2 (WS4.mach,pm_part.wailunban,0) + NPARTS (WS4.store(1)) < Uvar.PK_wl_hj1 OR
NPARTS2 (WS4.mach,pm_part.neilunban,0) + NPARTS (WS4.store(2)) < Uvar.PK_nl_hj1
IF NPARTS (WS3.store(1)) > 0 AND NPARTS2 (WS4.mach,pm_part.wailunban,0) + NPARTS
(WS4.store(1)) < NPARTS2 (WS4.mach,pm_part.neilunban,0) + NPARTS (WS4.store(2))
PULL from WS3.store(1)
ELSEIF NPARTS2 (WS4.mach,pm_part.neilunban,0) + NPARTS (WS4.store(2)) < Uvar.PK_nl_hj1
PULL from WS3.store(2)
ENDIF
ELSE
Wait
ENDIF
PUSH pm_part.wailun to WS4.store(1),pm_part.neiquan to WS4.store(2)
Output:
Labor Requirements
Repair #1: repairmen#1
Breakdown
Description:
Breakdown Number 1
Breakdown type: Busy Time At Start of Cycle:
Yes
Down Interval: UF.bt (Uvar.breakinterval,24) Repair Time: Scrap Part: No Set-up on repair: No
UF.rt (Uvar.repairtime,44)
Actions
Finish:
CHANGE pm_part.wailunban to pm_part.wailun
CHANGE pm_part.neilunban to pm_part.neiquan
_____________________________________________________________ ELEMENT NAME: WS5.mach Element Type: Quantity: Priority: Type:
Machine 2 Lowest
Single
UF.pt (Uatt.zytime,5)
Cycle Time:
Input / Output Rules
Input:
IF NPARTS2 (WS5.mach,pm_part.wailunban,0) + NPARTS (WS5.store(1)) < Uvar.PK_wl_zy OR
NPARTS2 (WS5.mach,pm_part.neilunban,0) + NPARTS (WS5.store(2)) < Uvar.PK_nl_zy
IF NPARTS (WS4.store(1)) > 0 AND NPARTS2 (WS5.mach,pm_part.wailunban,0) + NPARTS
(WS5.store(1)) < NPARTS2 (WS5.mach,pm_part.neilunban,0) + NPARTS (WS5.store(2))
PULL from WS4.store(1)
ELSEIF NPARTS2 (WS5.mach,pm_part.neilunban,0) + NPARTS (WS5.store(2)) < Uvar.PK_nl_zy
PULL from WS4.store(2)
ENDIF
ELSE
Wait
ENDIF
PUSH pm_part.wailun to WS5.store(1),pm_part.neiquan to WS5.store(2)
Output:
Labor Requirements
Repair #1: repairmen#1
Breakdown
Description:
Breakdown Number 1
Breakdown type: Busy Time At Start of Cycle:
Yes
Down Interval: UF.bt (Uvar.breakinterval,25) Repair Time: Scrap Part: No Set-up on repair: No
UF.rt (Uvar.repairtime,45)
_____________________________________________________________ ELEMENT NAME: WS6.mach Element Type: Quantity: Priority: Type:
Machine 2 Lowest
Single
UF.pt (50,6)
Cycle Time:
Input / Output Rules
Input:
IF NPARTS2 (WS6.mach,pm_part.neilunban,0) + NPARTS (WS6.store) < Uvar.PK_nl_cdm PULL from WS5.store(2)
ELSE
Wait
ENDIF
PUSH to WS6.store
Output:
Labor Requirements
Repair #1: repairmen#1
Breakdown
Description:
Breakdown Number 1
Breakdown type: Busy Time At Start of Cycle:
Yes
Down Interval: UF.bt (Uvar.breakinterval,26) Repair Time: Scrap Part: No Set-up on repair: No
UF.rt (Uvar.repairtime,46)
_____________________________________________________________ ELEMENT NAME: WS7.mach Element Type: Quantity: Priority: Type:
Machine 1 Lowest
General
2
Uatt.qgnum
No
Input Quantity: Output Quantity: Inherit Attributes: Cycle Time:
UF.pt (Uatt.skqgtime,7)
Input / Output Rules
Input:
IF NPARTS (WS7.store(1)) < Uvar.PK_jqj_qg OR NPARTS (WS7.store(2)) < Uvar.PK_ngb_qg OR
NPARTS (WS7.store(3)) < Uvar.PK_fkb_qg
IF NPARTS (WS7.store(1)) <= 2 * NPARTS (WS7.store(2)) AND NPARTS (WS7.store(1)) <= 2 *
NPARTS (WS7.store(3))
PULL from pm_part.strengthban out of WORLD
ELSEIF NPARTS (WS7.store(2)) <= NPARTS (WS7.store(3))
PULL from pm_part.neigeban out of WORLD
ELSEIF NPARTS (WS7.store(3)) < Uvar.PK_fkb_qg
PULL from pm_part.fengkouban out of WORLD
ENDIF
ELSE
Wait
ENDIF
PUSH pm_part.strengthban to WS7.store(1),
pm_part.neigeban to WS7.store(2),pm_part.fengkouban to WS7.store(3)
Output:
Labor Requirements
Repair #1: repairmen#1
Breakdown
Description:
Breakdown Number 1
Breakdown type: Busy Time At Start of Cycle:
Yes
Down Interval: UF.bt (Uvar.breakinterval,27) Repair Time: Scrap Part: No Set-up on repair: No
UF.rt (Uvar.repairtime,27)
_____________________________________________________________ ELEMENT NAME: WS8.mach Element Type: Quantity: Priority: Type:
Machine 1 Lowest
Batch Uatt.tpnum
Uatt.tpnum UF.pt (Uatt.tptime,8)
Batch Min: Batch Max: Cycle Time:
Input / Output Rules
Input:
IF NPARTS (WS8.store(1)) < Uvar.PK_jqj_tp OR NPARTS (WS8.store(2)) < Uvar.PK_ngb_tp OR
NPARTS (WS8.store(3)) < Uvar.PK_fkb_tp
IF NPARTS (WS8.store(1)) <= 2 * NPARTS (WS8.store(2)) AND NPARTS (WS8.store(1)) <= 2 *
NPARTS (WS8.store(3))
MATCH/ANY pm_part.strengthban out of WS7.store(1) #(8)
ELSEIF NPARTS (WS8.store(2)) <= NPARTS (WS8.store(3))
MATCH/ANY pm_part.neigeban out of WS7.store(2) #(4)
ELSEIF NPARTS (WS8.store(3)) < Uvar.PK_fkb_tp
MATCH/ANY pm_part.fengkouban out of WS7.store(3) #(4)
ENDIF
ELSE
Wait
ENDIF
PUSH pm_part.strengthban to WS8.store(1),
pm_part.neigeban to WS8.store(2),pm_part.fengkouban to WS8.store(3)
Output:
Labor Requirements
Repair #1: repairmen#1
Breakdown
Description:
Breakdown Number 1
Breakdown type: Busy Time At Start of Cycle:
Yes
Down Interval: UF.bt (Uvar.breakinterval,28) Repair Time: Scrap Part: No Set-up on repair: No
UF.rt (Uvar.repairtime,48)
_____________________________________________________________ ELEMENT NAME: WS9.mach Element Type: Quantity: Priority: Type:
Machine 1 Lowest
Batch 24
24 UF.pt (60,9)
Batch Min: Batch Max: Cycle Time:
Input / Output Rules
Input:
IF NPARTS (WS9.store(1)) < Uvar.PK_jqj_yq OR NPARTS (WS9.store(2)) < Uvar.PK_ngb_yq OR
NPARTS (WS9.store(3)) < Uvar.PK_fkb_yq
SEQUENCE /Wait pm_part.strengthban out of WS8.store(1)#(12), pm_part.neigeban out of WS8.store(2)#(6), pm_part.fengkouban out of WS8.store(3)#(6)
ELSE
Wait
ENDIF
PUSH pm_part.strengthban to WS9.store(1),
pm_part.neigeban to WS9.store(2),pm_part.fengkouban to WS9.store(3)
Output:
Labor Requirements
Repair #1: repairmen#1
Breakdown
Description:
Breakdown Number 1
Breakdown type: Busy Time At Start of Cycle:
Yes
Down Interval: UF.bt (Uvar.breakinterval,29) Repair Time: Scrap Part: No
UF.rt (Uvar.repairtime,49)
Set-up on repair: No
_____________________________________________________________
因篇幅问题不能全部显示,请点此查看更多更全内容