案例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”函数元素,计算出当前这个箱体表面积的均方根,作为给它的油漆作业时间。
- 建模步骤
- 启动BHTC Simulation仿真系统,点击控制面板上的“新建模型”按钮,开始模型构建过程。
- 设施布局:
✤ 使用设计模版,创建出本案例中的代表箱体的Part元素“PartA”、代表油漆作业工序的Machine元素“Painting”、油漆工序的线边库存元素“Buffer_in”、“Buffer_out”,并在屏幕上对它们适当布局,结果如下图所示:

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

最后点击“确定”完成函数节点的创建。模型中的函数节点在仿真过程中是执行一种计算过程,不需要布局设置操作。
✤ 继续点击设计模版上的“变量”图标创建一个代表油漆作业工序作业时间的“Variable”变量元素“CT”,系统弹出如下的“模型创建”对话框,

如图,输入变量名称,选择变量类型,点击“确定”按钮即可。
- 参数定义:
✤ 双击模型结构树上的“PartA”元素节点,打开它的属性对话框,输入它的流程参数。如下
| 零件 名称 | 类型 | 到达时间间隔 | Action on Create逻辑 | Push to 逻辑 |
| PartA | Active | System_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 逻辑 |
| Painting | pull_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_CT | push_to = array(“Buffer_out”) |
在箱体一旦进入油漆设备时,立即激活“Action on Input”按钮下的代码,首先通过系统函数get_attr()获得当前这个箱体零件的长、宽、高属性值,然后调用之前定义好的函数area()来计算箱体表面积的均方根,并把它赋值给代表油漆设备加工时间的变量CT。这样,根据计算,对每一个箱体零件油漆的作业时间,都因变量CT的不同取值而不同。
- 仿真运行
在控制面板的“仿真时长”输入框内输入“240”,点击“运行模型”按钮,仿真结束后,勾选模型结构树上油漆设备节点,点击报表工具栏上的“机器报表”按钮,观察模型运行10天后的产能情况。
