2. Machine 设备元素
2.1 元素定义
Machine元素是用来描述现实生产运作系统中的加工处理单元。这个单元既可以是一个人工,可以是一个加工处理装置,还可以是一个逻辑单元。它有一个输入端,也有一个输出端,它在流程中的功能就是对输入进来的物料进行加工处理,完成后输出到下一个单元。在仿真过程中这一单元具有多个不同的形态:等待输入空闲状态、加工处理状态、故障状态、维护状态、输出阻塞状态等等。按照它对物料加工前后数量的变化,我们又可以把Machine元素区分为以下几种类型:
- 批处理(Production)类型设备:输入、输出物料数量皆为m
- 生成(Create)类型设备:输入为1,输出m个
- 装配(Assembly)类型设备:输入m个,输出1个
- 拆解(De-assembly)类型设备:输入1个装配件,输出m个零件
如上所述,使用Machine元素,我们可以描述离散制造业中的加工设备、生产线上的人工操作工位、服务行业的一个柜台服务、物流行业中的物料处理中心、升降装置等等,它有着及其广泛的适用场景;甚至从更大尺度上看一个车间、一座工厂、一个候机楼等,只要具备上述抽象特征,都可以使用一个Machine元素来描述它。
2.2 通用选项卡
在模型结构树上,鼠标双击Machine元素节点,系统弹出Machine元素属性对话框如下,缺省的状态下,系统首先展示出的是“通用”选项卡的属性界面。它有两个流程逻辑定义按钮和四个行为逻辑定义按钮。

- 属性参数
如图,从左至右,Machine元素“通用”选项卡中的属性参数有:输入数量、机器类型、加工时间、人工定义、输出数量。其中输入数量、输出数量随着选择的机器类型不同而呈现不同形态:
- Production类型:输入数量文本框可输入想要的数量,而输出数量文本框是非激活状态,且事先赋值“As inputs”,意为输出的数量等于输入的数量。
- Assembly类型:输入数量文本框可输入想要的数量,而输出数量文本框是非激活状态,且事先赋值“1”,意为输出的数量等于1。
- De-Assembly类型:输入数量文本框是非激活状态,且事先赋值为1,输出数量文本框也是非激活状态,且事先赋值“As parts”,意为输出的数量等于构成装配件零件的数量。
- Create类型:输入数量文本框是非激活状态,且事先赋值为1,而输出数量文本框则是激活状态,用户可按需输入想要的数量。
- 人工定义
有时,设备的运行需要有人工伺服,在通用选项卡中提供了人工定义的功能。在定义人工信息之前,首选需要在模型结构中,先定义出“Labor”人工元素节点,这样点击选项卡中间的“人工”下拉菜单,就可以看到以列表形式展示出的之前模型中定义好的所有“Labor”节点名称,选中列表需要伺服这台设备的“Labor”元素名称,接着在下面“人工数量”文本框中输入需要的此类人工的数量,还要为伺服设备的人工定义好他们的工作地点:在“工作地点”下的文本框中双击鼠标,使之获得输入焦点,然后在模型结构树上找到之前定义好的,作为伺服人工的工作地的“Buffer”元素节点,鼠标双击该“Buffer”节点,该节点的全称自动录入到“工作地点”输入文本框中。此时,伺服设备工作的人工信息已经准备好,鼠标点击“添加人工”按钮,该人工信息就加入到这台加工设备的“人工列表”中。可重复上述过程,为加工设备定义多个伺服人工。反之,鼠标点击“人工列表”中的人工名称,再点击“移除人工”即可将该选中人工,从人工列表中去除掉。
- Pull_from 流程逻辑
“Pull_from”按钮下附着的流程逻辑代码,描述了该Machine元素实例加工的物料来源逻辑。如前所述,“流程逻辑”定义的具体内容,就是由用户使用计算机程序代码(VBS语言)调用系统的“流程规则语句”代码构成。这里为定义Machine元素物料来源逻辑可使用多个“流程规则语句”语法如下:
- pull_from = array(location1, location2, location3…)
这条语句的涵义是从地点locationi中取一件物料。这里的location就是流程模型中“Machine元素”、“Buffer元素”、“Passive”类型的“Part”元素节点的名称。如果该模型节点是一个成组设备节点,可用设备节点名加上设备序号即location(ii)的形式,来标记物料的来源地,是成组设备中的哪一台。
- match_any = array(location1,qty1, location2, qty2, location3, qty3 …)
这条语句的涵义是从多个地点分别取一定数量的物料。这里的locationi就是流程模型中“Machine元素”、“Buffer元素”类型节点的名称,qty是从该地点取物料的数量。如果该模型节点是一个成组设备节点,可用设备节点名加上设备序号即location(ii)的形式,来标记物料的来源地,是成组设备中的哪一台。
- match_attribute = array(condi,condi_Value, attr, location1, qty1, location2, qty2, location3, qty3 …)
这条语句的涵义是从多个地点,按照条件的要求,分别取一定数量的物料。condi, condi_Value, attr三个参数定义了取物料的条件。attr是要取物料的属性名,condi_Value是要取的物料的属性值,condi是条件。condi = 1意为要取得物料的attr的属性值必须等于condi_Value;condi = 2意为要取得物料的attr的属性值必须大于condi_Value;condi = 3意为要取得物料的attr的属性值必须小于condi_Value;这里的locationi就是流程模型中“Machine元素”、“Buffer元素”类型节点的名称,qty是从该地点取物料的数量。如果该模型节点是一个成组设备节点,可用设备节点名加上设备序号即location(ii)的形式,来标记物料的来源地,是成组设备中的哪一台。
从多个地点分别输入一定数量的物料,必须这些输入地点的物料数量、物料的输入条件同时满足时,这条规则语句才能够成功执行。
- Push_to 流程逻辑
“Push_to”按钮下附着的流程逻辑代码,描述了该Machine元素实例将完成加工的物料运往下一个目的地的输送逻辑。如前所述,“流程逻辑”定义的具体内容,就是由用户使用计算机程序代码(VBS语言)调用系统的“流程规则语句”代码构成。Machine元素建立输送逻辑的“流程规则语句”语法如下:
- push_to = array(location1, location2, location3…)
这条规则语句的涵义就是把当前的Part元素实例送往目的地locationi。这里的location就是流程模型中“Machine元素”、“Buffer元素”、“ship”元素、“Track元素”、“Conveyor元素”节点的名称。如果该模型节点是一个成组设备节点,可用设备节点名加上设备序号即location(ii)的形式,来标记要前往的目的地,是成组设备中的哪一台。
当去往下一个目的地的条件满足后,系统在往下一个目的地输送物料时,是逐个进行处理的。
系统在往下一个目的地输送物料时,如果该目的地已满不能接受,此时触发设备处于阻塞状态,物料仍然保持在设备中等待,直至目的地有空闲可以输出物料为止。
- 行为逻辑
Machine元素的在“通用”选项卡中有四个行为逻辑定义按钮:“Action On Input”、“Action On Start”、“Action On Finish”、“Action On Output”。它们分别对应着Machine元素实例,在仿真进行到不同状态所激发的行为逻辑。“行为逻辑”代码的编写,是由用户使用VBS语言调用系统的内部函数、自定义函数、模型变量等代码等构成。 这四个按钮下的“行为逻辑”代码的执行条件与含义如下:
- “Action On Input”:Machine元素实例,每完成一个物料的输入时,该按钮下的代码就被激活执行一次;
- “Action On Start”:当Machine元素实例已获得开动设备所需的物料满足开机条件,在开动设备进行加工处理的时刻,该按钮下的代码就被激活执行一次;
- “Action On Finish”:当Machine元素实例在完成加工处理的时刻,该按钮下的代码就被激活执行一次;
- “Action On Output”:当Machine元素实例完成一次加工处理,往下一个目的地输送物料时,每输送一个物料,该按钮下的代码就会被激活执行一次;
2.3 复位选项卡
点击通用选项卡页面左上角的“复位”按钮,系统将属性页面切换至“复位”选项卡的属性界面。“复位”选项卡用来定义Machine元素实例在仿真运行过程的复位工况,它有两个行为逻辑定义按钮,如下图所示:

- 属性参数
如图,从左至右,Machine元素“复位”选项卡中的属性参数有:复位模式、值表达式、复位时间。其中“值表达式”随着复位模式的不同而具有不同的涵义,分别介绍如下:
- “No of Operation”:Machine元素实例,每完成一定数量的操作后便复位一次。值表达式输入框中“值”即为完成操作的数量,复位时间输入框参数即为“Machine”元素实例完成一次复位所需要的时间。
- “Value Changed”:在模型的仿真运行过程中,当值表达式输入框中录入的表达式的“值”发生改变时便触发一次Machine元素实例的复位操作。值表达式输入框中录入的是模型变量表达式。
- “Part Changed”:Machine元素实例,下一个工作循环开始前检查将输入的物料,如果该物料与上一次工作循环物料不同时则触发一次复位操作。
- 行为逻辑
Machine元素的“复位”选项卡中有两个行为逻辑定义按钮:“Action On Start”、“Action On Resume”。 这两个按钮下的“行为逻辑”代码的执行条件与含义如下:
- “Action On Start”:Machine元素实例,在每次复位开始时,该按钮下的代码就被激活执行一次;
- “Action On Resume”:Machine元素实例,在每次复位完成时,该按钮下的代码就被激活执行一次;
一条完整的复位工况由“复位模式”、“值表达式”、“复位时间”、“Action On Start”行为逻辑代码、“Action On Resume”行为逻辑代码等五项内容构成。完成这些内容的定义后点击“复位”选项卡中的“增加”按钮,这一复位工况便记录在复位工况列表中,根据实际流程的需要,可以为Machine元素实例建立多个复位工况。如随着建模工作的进行,需要修改之前定义好的复位工况,则点击“复位”选项卡中的“复位工况列表”下拉菜单选中要修改的复位工况序号,则属性输入框中的内容,被该复位工况信息刷新,接下来,用户可直接修改这些内容,修改完成后,点击“修改”按钮,则系统记录的复位工况列表中的信息被更新。
如果要删除某条复位工况,则点击“复位”选项卡中的“复位工况列表”下拉菜单,选中要修改的复位工况序号,然后再点击“删除”按钮,该条复位工况的内容即从复位工况列表中删除掉。
2.4 故障选项卡
点击通用选项卡页面左上角的“故障”按钮,系统将属性页面切换至“故障”选项卡的属性界面。“故障”选项卡用来定义Machine元素实例在仿真运行过程的故障工况,它有两个行为逻辑定义按钮,如下图所示:

- 属性参数
如图,从左至右,Machine元素“故障”选项卡中的属性参数有:故障模式、故障间隔、修复时长。其中“故障间隔”随着故障模式的不同而具有不同的涵义,分别介绍如下:
- “Available Time”:当模型开始仿真运行时,每经历“故障间隔”参数所输入的时间间隔,Machine元素实例就被触发一次设备故障,接着设备经历“修复时长”参数所输入的时间间隔后,设备恢复正常工作。“Availabe Time”故障模式,用来描述生产线上那些当班的设备的故障行为,即只要这台设备处于“当班”状态(或者“加电”状态),不论它是否进行加工处理操作,系统都按照固定的时间间隔去触发该设备的故障状态。
- ““Busy Time”:与前一种故障模式不同,当模型开始仿真运行时,系统会自动累计该Machine 元素实例处于加工处理状态的时间,当这一累计时间每经历“故障间隔”参数所输入的时间间隔,Machine元素实例就被触发一次设备故障,接着设备经历“修复时长”参数所输入的时间间隔后,设备恢复正常工作。
- 行为逻辑
Machine元素的“故障”选项卡中有两个行为逻辑定义按钮:“Action On Start”、“Action On Resume”。 这两个按钮下的“行为逻辑”代码的执行条件与含义如下:
- “Action On Start”:Machine元素实例,在每次故障状态开始时,该按钮下的代码就被激活执行一次;
- “Action On Resume”:Machine元素实例,在每次故障修复完成时,该按钮下的代码就被激活执行一次;
一条完整的故障工况由“故障模式”、“故障间隔”、“修复时长”、“Action On Start”行为逻辑代码、“Action On Resume”行为逻辑代码等五项内容构成。完成这些内容的定义后点击“故障”选项卡中的“增加”按钮,这一故障工况便记录在故障工况列表中,根据实际流程的需要,可以为Machine元素实例建立多个故障工况。如随着建模工作的进行,需要修改之前定义好故障工况,则点击“故障”选项卡中的“故障工况列表”下拉菜单选中要修改的故障工况序号,则属性输入框中的内容,被该故障工况信息刷新,接下来,用户可直接修改这些内容,修改完成后,点击“修改”按钮,则系统记录的故障工况列表中的信息被更新。
如果要删除某条故障工况,则点击“故障”选项卡中的“故障工况列表”下拉菜单,选中要修改的故障工况序号,然后再点击“删除”按钮,该条故障工况的内容即从故障工况列表中删除掉。
2.5 内部函数
点击系统模型结构树“System”节点,然后再点击其下的“Machine”子节点,系统展开Machine元素有关的内部函数节点。在流程代码编辑阶段,用户可通过鼠标双击这些函数节点来引用它们。Machine元素有关的内部函数定义如下:
- 函数名称: Status(macNme)
函数功能: 返回机器设备当前的运行状态。
输入参数 1: macName,设备名,对成组设备可使用macNme(ii)
的形式指代获取第几台设备的运行状态。
函数返回值:
= 0 等待零件;
= 1设备工作;
= 2设备完成加工;
= 3 设备输出阻塞;
= 4设备复位;
= 5 设备故障;
= 6等待人工;
- 函数名称: Nparts(macNme)
函数功能: 返回机器设备上零件的数量。
输入参数 1: macName,设备名,对成组设备可使用macNme(ii)
的形式指代获取第几台设备上的零件数量。
函数返回值:
-1 函数未成功执行。
> 0 机器设备上零件的数量。
- 函数名称: Get_attr(macNme, index , attName)
函数功能: 返回机器设备上第 index 个零件上的属性名为
attName 的属性值。
输入参数 1: macName: (必需),字符串,设备名。
输入参数 2: index: (必需),整数,设备上零件的索引序号。
输入参数 3: attName:(必需),串表达式,该序号零件属性名。
函数返回值:
-1 函数未成功执行。
> 0 机器设备上第 index 个零件上的属性名为
attName 的属性值。
- 函数名称: Set_attr(macNme, index, attName,Value)
函数功能: 给机器设备上第 index 个零件上的属性名为 attName
的属性赋值Value。
输入参数 1: macName: (必需),字符串,设备名。
输入参数 2: index: (必需),整数,设备上零件的索引序号。
输入参数 3: attName:(必需),串表达式,该序号零件属性名。
输入参数 4: Value:(必需),值表达式,属性值。
函数返回值:
-1 函数未成功执行。
1 函数成功执行。
- 函数名称: TYPE(macNme)
函数功能: 返回Machine机器元素当前将要输出零件的名称。
输入参数 1: macNme, 机器名称。
函数返回值:输出零件的名称。
- 函数名称: Work_T(macName)
函数功能: 返回当前设备在仿真周期内的工作时间
函数输入参数 1: MacName含义:设备名称
函数返回值:
>= 0 : 设备的工作时间
< 0 : 函数调用失败
【注意】
如果当前Machine设备是由克隆功能生成的成组设备,则调用该函数返回的是该成组设备在仿真周期内总计的工作时间。如果要获得其中某台设备在仿真周期内的工作时间。请在参数名称中加入设备的索引号N,以macName(N)的形式调用该函数。
- 函数名称: Wait_T(macName)
函数功能: 返回当前设备在仿真周期内等待零件的时长
函数输入参数 1: macName含义: 机器名称
函数返回值:
>= 0 : 等待零件时长
< 0 : 程序未成功执行
【注意】
如果当前Machine设备是由克隆功能生成的成组设备,则调用该函数返回的是该成组设备在仿真周期内总计的等待零件时长。如果要获得其中某台设备在仿真周期内的 等待零件时长。请在参数名称中加入设备的索引号N,以macName(N)的形式调用该函数。
- 函数名称: Block_T(macName)
函数功能: 返回当前设备在仿真周期内输出阻塞的时长
函数输入参数 1: macName含义: 机器名称
函数返回值:
>= 0 : 输出零件受阻时长
< 0 : 程序未成功执行
【注意】
如果当前Machine设备是由克隆功能生成的成组设备,则调用该函数返回的是该成组设备在仿真周期内总计的输出零件受阻时长。如果要获得其中某台设备在仿真周期内的受阻时长。请在参数名称中加入设备的索引号N,以macName(N)的形式调用该函数。
- 函数名称: Wait_LaborT(macName)
函数功能: 返回当前设备在仿真周期内等待Labor员工的时长
函数输入参数 1: macName含义: 机器名称
函数返回值:
>= 0 : 等待Labor时长
< 0 : 程序未成功执行
【注意】
如果当前Machine设备是由克隆功能生成的成组设备,则调用该函数返回的是该成组设备在仿真周期内总计的等待Labor时长。如果要获得其中某台设备在仿真周期内的等待Labor时长。请在参数名称中加入设备的索引号N,以macName(N)的形式调用该函数。
- 函数名称: Setup_T(macName)
函数功能: 返回当前设备在仿真周期内设备复位的时长
函数输入参数 1: macName含义: 机器名称
函数返回值:
>= 0 : 设备重新复位的时长
< 0 : 程序未成功执行
【注意】
如果当前Machine设备是由克隆功能生成的成组设备,则调用该函数返回的是该成组设备在仿真周期内总计的复位时长。如果要获得其中某台设备在仿真周期内的复位时长。请在参数名称中加入设备的索引号N,以macName(N)的形式调用该函数。
- 函数名称: BreakDwn_T(macName)
函数功能: 返回当前设备在仿真周期内因故障停机的时长
函数输入参数 1: macName含义: 机器名称
函数返回值:
>= 0 : 设备故障停机时长
< 0 : 程序未成功执行
【注意】
注意: 如果当前Machine设备是由克隆功能生成的成组设备,则调用该函数返回的是该成组设备在仿真周期内总计的故障停机时长。如果要获得其中某台设备在仿真周期内的故障停机时长。请在参数名称中加入设备的索引号N,以macName(N)的形式调用该函数。
- 函数名称: Operation_Num(macName)
函数功能: 返回当前设备在仿真周期内累计完成 加工的次数
函数输入参数 1: macName含义: 机器名称
函数返回值:
>= 0 : 机器累计完成加工次数
< 0 : 程序未成功执行
【注意】
如果当前Machine设备是由克隆功能生成的成组设备,则调用该函数返回的是该成组设备在仿真周期内总计的完成加工次数。如果要获得其中某台设备在仿真周期内的完成加工次数,请在参数名称中加入设备的索引号N,以macName(N)的形式调用该函数。
- 函数名称: NQTY(macName)
函数功能: 返回当前设备在仿真模型中的数量
函数输入参数 1: MacName含义:设备名称
函数返回值:
> 0 : 设备数量
< 0 : 函数调用失败
2.6 元素报表
当模型仿真运行完成后,鼠标右键单击在模型结构树Machine元素节点,系统弹出“模型编辑”菜单,然后鼠标点击选择上面的“统计元素”菜单,系统在屏幕右侧的模型布局区域里,以表格的形式展示出Machine元素的运行状态统计信息。表头名称及取值含义如下:
| 设备名称 | 等待零件时间占比 | 加工零件时间占比 | 输出阻塞时间占比 | 等待Labor时间占比 | Setup时间占比 | BreakDown时间占比 | 已完成加工次数 |
✤ 等待零件时间占比:到仿真终止时刻,机器设备待料时间占比。
✤ 加工零件时间占比:到仿真终止时刻,机器设备用于零件加工的时间占比。
✤ 输出阻塞时间占比:到仿真终止时刻,机器设备输出阻塞的时间占比。
✤ 等待Labor时间占比:到仿真终止时刻,机器设备等待伺服人工的时间占比。
✤ Setup时间占比:到仿真终止时刻,机器设备用于复位的时间占比。
✤ BreakDown时间占比:到仿真终止时刻,机器设备修复故障消耗的时间占比。
✤ 已完成加工次数:到仿真终止时刻,该机器设备已完成加工零件的次数。
