14. 模型初始化

本质上说,一个工程系统的计算机仿真模型,就是由一个描述系统构成要素的变量代码集合和一个描述系统运行逻辑的函数过程代码集合构成。这些变量从使用功能上可以分成:输入变量,中间变量,结果输出变量。输入变量用来接收系统的所有外部输入参数。这些输入变量每一次取值,就相当于是工程系统的一个规划方案或者运行实施方案。仿真模型的一次运行,就是在给这些输入变量赋值后,由它们驱动的一次计算机运算过程。系统仿真模型建好后,通常需要在计算机上进行多次运行,以观察系统模型在不同的变量取值方案下的性能变化。我们把模型每次运行前,对所有输入变量赋值的过程,称之为“模型初始化”。

在BHTC Simulation系统中,对变量的赋初值有两种途径:一是在初始定义变量的阶段(详见“建模元素”一章中“变量元素”的内容);二是在模型开始运行之前,通过点击系统主菜单上的“模型初始化action”按钮,如下图所示:

系统弹出模型初始化代码框,在代码框内使用VBS语言,对模型中的变量赋值,进行模型初始化。下面以一个由一台AGV运输车辆、两条Track轨道、一个Part物料、一个卸料库存构成的简单的物料运输系统为例,进行建模仿真,说明此初始化过程。该系统模型构成如下图所示:(该案例模型文件详见本系统安装主目录下Demo子目录下的“case_模型初始化.BHsim”文件)

模型中除了表示四个实物对象的建模元素外(Part1元素表示物料对象,Track1元素表示第一条轨道对象,Track2元素表示第二条轨道对象,Vehicle1元素表示运输车辆对象,Buffer1元素表示卸载库存),还定义了表示零件重量的变量W_part元素,表示代表轨道长度的变量元素length_T1、length_T2,表示车辆卸载时间的变量元素unload_T,和表示计算装载时间的函数元素load_T。

该模型要实现的基本功能是:当仿真开始后车辆Vehicle1立即前往Track1轨道,并向前运行直至末端,开始装载物料,完成装载后,驶入Track2轨道,继续前行至末端,并开始卸载物料,当完成卸载物料进入卸料库存后,模型立即显示完成卸料的时间。

为了简化计算,在定义Vehicle1车辆元素时,将其空载和满载的速度均设为“10”。将表示轨道长度的变量“length_T1”
全称输入到Track1元素的“轨道长度”对话框内,如下图所示:

同样地,将变量“length_T2”
全称输入到Track2元素的“轨道长度”对话框内。车辆在运行到Track1轨道末端进行物料的装载,将函数元素“load_T”的全称及其形参W_part输入到Track1轨道元素的装载选项卡中的“装载时间”输入框中,将物料“Part1”元素全称输入到“装载目的地”对话框中,如下图所示:

那么在仿真运行阶段,当车辆运行到Track1轨道末端进行装载操作时,BHTC Simulation系统会调用函数load_T,获得一个返回值,作为当前时刻,这次车辆装载物料所需要花费的时间。下面是load_T函数过程的定义:

该函数有一个形参“weight”,在模型中,是将代表物料重量的变量W_part作为形参,带入到此函数中。从上图中函数体的定义可知,当物料重量少于100时,load_T函数返回的装载时间是“3.5”;当物料重量大于100时,load_T函数返回的装载时间是“6.5”。

类似的,对Track2轨道上的卸载选项卡进行定义,如下图所示:

即当车辆行驶至Track2轨道末端,进行车辆的卸载操作,把物料卸载到卸料库存“Buffer1”处,卸载所花费的时间由变量unload_T的取值决定。

当模型完成卸载时,激活对话框显示当前卸载的完成时间,为此,在表示卸料库存的Buffer1元素的“行为逻辑”按钮“Action on input”代码框中输入显示物料进入Buffer1时间的对话框,如下图所示:

由上述模型定义过程可以看出:表示实物对象的建模元素,它们的规格参数不仅仅可以是具体的数值,如车辆元素Vehicle1的空载和满载速度,还可以是变量,比如Track1轨道、Track2轨道的长度以及Track2轨道的卸载时间,甚至可以使用函数的返回值作为建模对象的规格参数,比如Track1轨道的装载时间等。要使这些模型对象在仿真运行时刻发挥作用,就必须在模型开始运行前,对这些变量、函数进行初始化赋值,这就是模型初始化的作用。在本例中,使用系统主菜单上的“模型初始化action”按钮,在模型初始化代码框中,使用VBS语言直接对模型变量进行赋值,如下图所示:

从上述初始化代码中我们可知运输车辆Vehicle1在Track1轨道上行驶的时间为:Track1轨道长度/Vehicle空载速度 = 100/10 = 10, 同样车辆在Track2轨道上的行驶时间也为10,装载时间,从load_T的函数定义中可知为3.5(因为物料重量W_part = 68.5 < 100),因此运输车辆Vehicle1完成一次物料的装载卸载工作,总计需要的时间 = 10 + 3.5 + 10 + 8 = 31.5。接下来,在BHTC Simulation系统控制面板上的“仿真时长”输入框中,输入仿真时长“50”,然后点击“运行模型”按钮,开始仿真:仿真开始后,车辆立即进入Track1轨道,进行物料装载,完成后进入Track2轨道,行至末端,将物料卸载到卸料库存Buffer1后,系统立即弹出提示框。如下图所示:

即运行模型得到的物料卸载时间与预计的相同,说明模型达到了预期的功能。接下来,点击系统控制面板上的“重置模型按钮”使模型复位,仿真时钟回到“0”点,继续点击主菜单上的“模型初始化action”,弹出模型初始化代码编辑框,修改物料重量为168.5,修改Track1轨道长度为120:

Model_W_part = 168.5

Model_length_T1 = 120

由load_T函数定义可知,这种情况下车辆对物料的装载时间为6.5,这样系统完成一次物料的装载与卸载时间为:12 + 6.5 + 10 + 8 = 36.5。点击“运行模型按钮”进行第二次仿真,系统很快完成仿真,并弹出提示框显示卸料时间,再次与预计一致。

【小结】

在BHTC Simulation系统中,提供了两种模型变量初始化的方法,一是在模型变量的定义阶段,通过使用EXCEL数据表,直接给所定义的变量赋初值,这样模型在仿真时,它们都是有初始值的;二是在模型的仿真运行阶段,系统会首先执行“模型初始化代码”(即“初始化action”代码框中的代码),对模型变量赋初值。如果一个变量同时使用了两种方法初始化,模型开始运行后,就会用初始化代码中定义的变量值,覆盖掉模型变量定义阶段设定的初始值。

在实际应用中,一个工程系统的仿真模型的输入数据,通常数百甚至上千个,在这种情况下,建议使用第一种方法,即建立和维护模型数据表,通过EXCEL数据表单,对模型变量初始化;如果模型涉及的输入变量不多,几个甚至几十个,可以使用第二种方法,对模型初始化,更为便捷。