5. Variable 变量元素

5.1 元素定义

在BHTC simulation中使用三种类型的变量:系统变量Time、局部变量、全局变量:

  • 系统变量Time

该变量存储的是当前仿真时钟的值,随着模型的仿真运行,Time的值被实时刷新。它也是一种全局变量,用户可以在模型中的流程逻辑代码、行为逻辑代码中的任何地方引用它(但不可以对它进行赋值操作):双击模型结构树上的“System”模组下的“Time”节点,即可在代码编辑框中引用该系统变量。

  • 局部变量

用户在各个流程逻辑、行为逻辑代码编辑过程中,使用VBS语言Dim语句自行声明的变量,其作用域仅限于这些代码的内部,这些变量称之为局部变量。

  • 全局变量

以模型“Variable”元素节点形式定义的变量,称之为全局变量,用户可以在模型中的流程逻辑代码、行为逻辑代码中的任何地方引用它:既可以取得它的值,也可以对它进行赋值。双击模型结构树上的“Variable”元素节点,即可在代码编辑框中引用该模型全局变量。

全局变量既可以是单值变量,也可以是多值的数组变量,如果是数组变量,需要在“变量名称”输入框中直接写明数组的名称与维数,如下图所示。目前系统最多支持到3维数组作为全局变量,同时全局变量的定义也必须指明其类型:Integer 为整型变量,float 为实型变量,string 为字符型变量,name 为名型变量。

5.2 全局变量初始化

在模型结构树上,鼠标双击Variable元素节点,如果该元素是单值变量,则系统弹出Variable元素初始化对话框如下图所示:

图中,只有左侧的单变量属性框被激活,在“初值”属性输入框中输入单值变量的初始值,单击确定按钮即可,这样,模型在仿真开始前,此变量便具有此初始值。

  • EXCEL导入

如果用户将该变量的初始值数据保存在EXCEL电子表格文件中,用户可以直接将事先在EXCEL表格中保存的数据,赋值给模型中的单值变量。操作过程如下:点击“EXCEL导入”按钮,系统弹出打开文件对话框,选择存有数据的EXCEL表格文件后,系统进一步弹出如下数据导入对话框:

按提示,依次选择数据所在的EXCEL表单名、数据区域名(对EXCEL单元格保存的单值数据,也要给该单元格定义为一个区域名),最后,点击确定后,即可完成EXCEL数据的导入工作。在模型开始仿真前,系统会首先读取EXCEL表格中相应区域的数据,赋值给模型中的单值变量,然后再进行模型仿真的各种仿真推演计算工作。

  • EXCEL导出

类似的,当模型仿真结束后,我们也可将模型中单值变量存储的仿真结果写入到EXCEL数据文件中,以便于后期的数据处理。定义过程与“EXCEL导入”类似,当仿真模型运行完成后,点击系统主菜单“文件”–> “导出到EXCEL”按钮,BHTC Simulation系统将模型变量中存储的数据写入到“模型数据表”相应的数据区域中。

在模型结构树上,鼠标双击Variable元素节点,如果该元素是数组变量(以下以该Variable元素是一个10行5列数组变量uio(10,5)为例说明),则系统弹出数组元素初始化对话框如下图所示:

这时,单变量属性定义框处于非激活状态,数组属性定义框被激活,其中包含两部分内容,一是“数组定义”,二是“数组初始化”。前者是对数组数据列标、数据项的定义,后者是对此数组初始化方式的定义,即对数组进行初始化时,各个行列的数据是如何输入的。缺省状态是“自定义输入”,即手动输入数组各个行列数据项的值;二是从“EXCEL导入”方式,即系统通过读取EXCEL数据表中某一区域中的数据赋值给数组,来实现数组各个单元数据的初始化。当对数组数据初始化的选择是“自定义输入”时,则需要进行“数组定义”;当选择“EXCEL”数据表导入的方式,则不需要进行“数组定义”。分别介绍如下:

  • 自定义输入

即手工录入数据,首选要进行“数组定义”,即对数组数据列标、数据项进行定义,根据定义的内容在系统内部生成一张用于录入数组数据的表格。假设我们使用数组uio(10,5)来存储一个有4个码头港口的作业数据,如下图所示:这里第一列至第三列都是数值数据,而第四列、第五列则是日期数据。

“数组定义”过程如下:首先鼠标选中“数组定义”属性框中的列表序号,如下图所示的“列1”,然后在“列名称”输入框中输入“航道长度”,然后在“数据项”下拉菜单中选择“正常数据列”,最后点击“修改”按钮,即完成对数组uio(10,5)第1列名称及数据项的定义,如下图所示:

以此类推,完成对其余各列数据项的定义,其中对第四列、第五列数据项的定义时,选择“日期数据项”,结果如下:

观察港口作业数据,我们可以发现描述“港口开放时段”的第3列数据,等于每个码头各自的数据行数,因此数组各行第三列填写不同的数据,就呈现出不同的表格结构。这里,我们把第三列数据称之为参数列。如果数据表中有这样的数据列,在进行“数组定义”时,就鼠标点选“有无参数列”可选按钮,并在“参数列”输入框中输入参数列序号,如上图所示。最后点击“确认”按钮完成数组定义。

完成“数组定义后”,再次鼠标双击模型结构树上的数组元素节点,系统在屏幕布局区域弹出数组的手工输入表格,如下图所示:

首先在第三列中分别输入各个码头的开放时段数量2、1、3、1后,系统自动将输入的表格结构调整为下图所示结构形式:

接下来,即可给每个数据单元格录入数据,在录入第4、5列日期数据时,点击这两列下的单元格,系统自动弹出日期数据输入框,用户可选择输入日期数据,如下图所示:

数据录入完成后,点击输入表格中的“确认”按钮,表格关闭,系统退出数据录入状态。

【提示1】

数组数据的手工输入可以通过不断地点击模型结构树上的数组节点,打开对应数组的输入表格,反复进行数组数据的录入与修订,以便于数据的维护。

  • EXCEL导入

如果用户的作业流程数据已经建立好并保存在EXCEL电子表格文件中,用户可以直接将事先在EXCEL表格某一区域的数据,赋值给全局变量数组。仍以上述的港口作业数据为例,在定义好全局变量数组uio(10,5)后,鼠标双击模型结构树上该数组节点,在系统弹出的“数组初始化”属性框中点击“EXCEL导入”按钮,系统弹出打开文件对话框,选择存有数据的EXCEL表格文件后,系统进一步弹出如下数据导入对话框:

按提示,依次选择作业流程数据所在的EXCEL表单名、数据区域名,最后,点击确定后,即可完成EXCEL数据的导入工作。在模型开始仿真前,系统会首先读取EXCEL表格中相应区域的数据,对全局变量数组进行初始化,然后再进行模型仿真的各种仿真推演计算工作。

  • EXCEL导

类似的,当模型仿真结束后,我们也可将模型中变量存储的仿真结果写入到EXCEL数据文件中,以便于后期的数据处理。定义过程与“EXCEL导入”类似,当仿真模型运行完成后,点击系统主菜单“文件”–> “导出到EXCEL”按钮,BHTC Simulation系统将模型变量中存储的数据写入到“模型数据表”相应的数据区域中。