案例5:油漆作业仿真

5.1 流程描述
  • 案例描述

某油漆作业工序油漆一种立方体的箱体,油漆工序为每个箱体油漆的作业时间等于油漆箱体表面积的均方根。根据以往的统计数据:客户提供箱体的时间间隔服从(10,20)小时的均匀分布到达油漆作业工序,箱体长、宽、高分别服从(12,25)、(25,35)、(40,65) 的均匀分布。

  • 仿真目标

建立上述油漆作业过程的仿真模型,运行10天= 24*10 = 240小时,分析产能情况。

  • 建模分析

案例流程描述中,明确了箱体的到达规律,因此使用“Active”类型的“Part”元素代表箱体。进一步流程中还明确了箱体到达的外观尺寸规律,因此建模时,Part元素一旦被产生出来就要在“Action on Create”代码按钮中加入初始化箱体长、宽、高尺寸的代码,对每一个到达的箱体尺寸进行初始化赋值。

油漆作业工序是逐个对箱体进行油漆操作的,因此使用“Production”类型的“Machine”元素代表油漆作业工序,并将创建2个“Buffer”元素分别代表油漆工序的输入库存和输出库存。

本案例中“Machine”元素的作业时间不是固定的:油漆工序为每个箱体油漆的作业时间等于箱体表面积的均方根,即作业时间与被作业对象的外观尺寸之间是一种函数关系。因此,本案例的模型表达,需要建立一个“Function”函数元素,每次油漆工序“Pull from”一个箱体作业时,首先就要调用这个“Function”函数元素,计算出当前这个箱体表面积的均方根,作为给它的油漆作业时间。

  • 建模步骤
  1. 启动BHTC Simulation仿真系统,点击控制面板上的“新建模型”按钮,开始模型构建过程。
  2. 设施布局:

使用设计模版,创建出本案例中的代表箱体的Part元素“PartA”、代表油漆作业工序的Machine元素“Painting”、油漆工序的线边库存元素“Buffer_in”、“Buffer_out”,并在屏幕上对它们适当布局,结果如下图所示:

继续点击设计模版上的“函数”图标创建计算箱体表面积均方根的“Function”函数元素,系统弹出如下的“模型创建”对话框,输入函数名称“area”,并选择返回值类型的“single”类型。即该函数计算返回实型数值。

最后点击“确定”完成函数节点的创建。模型中的函数节点在仿真过程中是执行一种计算过程,不需要布局设置操作。

继续点击设计模版上的“变量”图标创建一个代表油漆作业工序作业时间的“Variable”变量元素“CT”,系统弹出如下的“模型创建”对话框,

如图,输入变量名称,选择变量类型,点击“确定”按钮即可。

  1. 参数定义:

双击模型结构树上的“PartA”元素节点,打开它的属性对话框,输入它的流程参数。如下

零件 名称类型到达时间间隔Action on Create逻辑Push to 逻辑
PartAActiveSystem_Math_uniform(10, 20)Dim L, W, H   L = System_Math_uniform(12, 25)   W = System_Math_uniform(25, 35)   H = System_Math_uniform(40, 65)     Call System_set_Attr(“Length”, L)   Call System_set_Attr(“Width”, W)   Call System_set_Attr(“Height”, H)push_to = array(“Buffer_in”)

如表中所示,在模型仿真过程中,一旦箱体零件被产生出来,就立即激活并执行“Action on Create”按钮下的代码,首先调用系统均匀分布函数uniform()对箱体的长、宽、高进行采样取值,然后调用系统属性设置函数set_attr()函数给当前这个新产生出来的箱体的长、宽、高进行赋值。这样,在后面油漆工序加工时,就可以根据这些零件的长、宽、高的具体取值来计算箱体表面的均方根,即可获得对当前这个箱体零件的油漆作业时间。

双击模型结构树上的“area”函数元素节点,打开它的属性对话框如下:

首先定义“area”函数的形参,如图选择形参类型“single”,输入第一个形参名称“length”,表示箱体的长度,单击红色箭头所示的“增加”按钮,为“area”函数定义第一个形参。重复上述操作,定义出分别代表箱体宽度和高度的形参“width”、“height”,然后单击“函数体定义”按钮,打开系统函数体代码编辑框,录入如下函数体计算代码:

Dim a, b, c, d

  a = length*width

  b = length*height

  c = width*height

  d = 2*(a + b + c)

  area = sqr(d)

最后单击“确认”按钮完成函数体定义。

双击模型结构树上的“Painting”元素节点,打开它的属性对话框,输入它的流程参数。如下

设备 名称Pull from 逻辑Action on Input逻辑加工时间Push to 逻辑
Paintingpull_from = array(“Buffer_in”)Dim a, b, c  a = System_get_attr(“Length”)  b = System_get_attr(“Width”)  c = System_get_attr(“Height”)  CT = area(a, b, c)MM_Model_CTpush_to = array(“Buffer_out”)

在箱体一旦进入油漆设备时,立即激活“Action on Input”按钮下的代码,首先通过系统函数get_attr()获得当前这个箱体零件的长、宽、高属性值,然后调用之前定义好的函数area()来计算箱体表面积的均方根,并把它赋值给代表油漆设备加工时间的变量CT。这样,根据计算,对每一个箱体零件油漆的作业时间,都因变量CT的不同取值而不同。

  • 仿真运行

在控制面板的“仿真时长”输入框内输入“240”,点击“运行模型”按钮,仿真结束后,勾选模型结构树上油漆设备节点,点击报表工具栏上的“机器报表”按钮,观察模型运行10天后的产能情况。

5.2 案例小结

【小结1】

【小结2】

了解和掌握如何在模型中定义变量、自定义函数,并且如何正确使用这些变量和自定义函数。