该函数返回一个指定实数参数的正实数(就是说把一个负数变成正数)。
参数:Real_numbe
参数类型:实数
示例:
DIFF = ABS(SIZE - STANDARD)
这个表达式是对变量SIZE减变量STANDARD的结果取绝对值,并将结果赋给变量DIFF。
该函数返回特定零件或液体在模型中的平均时间。该函数不包括在被拒绝而没有进入模型的零件或液体,也不包括包含在零件里的液体。
参数:Part_or_fluid
参数类型:名型
示例:
AVGTIME = AFLOW(WIDGET)
在该表达式中,AFLOW函数是计算名称为WIDGET的零件在模型中的平均时间,并将该时间值赋给变量AVGTIME。
题目:1.假如DIFF=ABS(SIZE-STANDARD), SIZE=5,STANDARD=7,则返回的值为( )
A. 2 B.-2 C.12 D.-12
2.AFLOW函数返回的是( )和( )在模型中的平均时间。
该函数返回特定劳动者完成作业的平均作业时间。
参数:Labor_name
类型:名型
示例:
AJTIME = AJOBTIME(OPERATOR)
在该表达式中,AJOBTIME函数计算劳动者OPERATOR对完成作业耗费的平均作业时间,然后将该时间值赋给变量AJTIME。
该函数返回其参数列表中最大的实数数值。
参数:Real_number (,Real_number)
类型:实数(数列)
示例:
AMAX(1.0, 3.3, -1.7)
该函数返回其实数参数数列中的最大数:3.3
MAXVAL = AMAX(VAR1, VAR2),MAX()
该表达式计算参变量VAR1和VAR2的最大值,然后将最大的数值赋给变量MAXVAL。
习题:
1) 假设变量VAR1=10.5,VAR2=-8.8,VAR3=4.9,表达式MAX(VAR1,VAR3,VAR2)的值是()?
2) 假设模型中的劳动者Laborman截至仿真时刻100,已经完成了加工作业3个,维修作业2个,其中每个加工作业耗时10分钟,每个维修作业耗时20分钟。当前正在处理的加工作业已经进行了5分钟。AJOBTIME(Laborman)的值为()。
AJOBTIME=70SUMJOBTIME/SUMJOBQTY5
该函数返回其参数数列中的最小实数值。
参数:Real_number (,Real_number)
类型:实数
例子:
AMIN(
1.0 , 3.3 , -1.7 )
该函数返回参数列表中的最小实数值-1.7。
LOWTIME = AMIN(AFLOW(WIDGET), AFLOW(NUT), AFLOW(BOLT), AFLOW(WASHER))
该表达式先使用函数AFLOW计算名称为WIDGET,
NUT, BOLT, WASHER的四类元素在模型中的平均时间值,然后使用函数AMIN获取这四个平均时间值的最小值,并将该最小值赋给变量LOWTIME。
该函数返回缓冲区中超出最小延迟时间的平均零件数量。
AOVERT函数缓冲区中超出最小延迟时间零件的平均超时时间。
1)假设元素Bag为主动性零件,到达间隔为4,批量为1,第一批到达系统时间为0,输出规则为Push to B1,其中B1为一个缓冲区,该缓冲区设定了一个最小延迟选项,最小延迟时间为3,而且Bag进入B1将不再离开,问:
在仿真时刻10,AOVER(B1)=? AOVERT(B1)=?
APARTS函数返回一个实值,包含在指定元素名称参量的缓冲区,输送链,运输工具或模块的零部件平均数量。
举例
AVG_ON_BELT = APARTS(BELT)
在这个表述中,APARTS函数计算在BELT输送链上的零部件时间加权平均数量,并且以此值来更新AVG_ON_BELT变量。
1)假设元素Bag为主动性零件,到达间隔为4,批量为1,第一批到达系统时间为0,输出规则为Push to B1,其中B1为一个缓冲区,该缓冲区设定了一个最小延迟选项,最小延迟时间为3,而且Bag进入B1将不再离开,问:
在仿真时刻10,APARTS(B1)=?
ASTIME函数返回一个实数。这个实数是零件在特定的元素,或者是溶液在特定的管道或容器中所花的平均调动时间。
ASTIME(element_name)=所有通过和滞留于该element_name的零件在该element_name中的时间总和/这些零件的总数量
1)假设元素Bag为主动性零件,到达间隔为4,批量为1,第一批到达系统时间为0,输出规则为Push to B1,其中B1为一个缓冲区,Bag进入B1将不再离开,其中B1的班次构成为6个单位的工作时间+4个单位下班时间,即其班次周期为10个时间单位。问:
在仿真时刻18,此时,ASTIME(B1)=?
命题:
1、零件在输送链CONV上输送,写出获取零件在输送链上的平均调动时间请写出其函数表达式______________。
2、试写出一个函数表达是,该表达式的作用是带回一个溶液在TANK运行的时间的变量。
函数功能:Await函数用来和witness早期版本兼容
返回类型:实数型。
参数 参数数据类型
Labor-name工作名称 name(名型)
state状态 integer(整型)
例题 函数await的参数state 的数据类型为 (B)
A 实型 B 整型 C 字符型 D名型
该函数返回一个实数值,为指定类型的零件或流体(包括模型中当前存在的和已经离开模型的)在系统中的加权时间平均库存量。
该函数返回一个实数值,为指定类型的、已经发运出模型的零件在系统中的加权时间平均库存量。该函数计算对象不包括流体,或者那些尚存在于模型中的零件。
需要更好的描述和解释。
该函数返回一个实数,为指定缓冲区里存放零件的最大数量,或称为最大队列长度。
该函数返回指定缓冲区中零件(不论当前存在或离开该缓冲区)存放的最长时间值,如果到目前为止尚没有零件进入该缓冲区,则函数返回0.0。
举例:
LONGEST = BMAXTME(BUFF1)
在这个表达式中,BMAXTME函数计算缓冲区BUFF1中零件存放的最长时间,然后将该数值赋给变量LONGEST。
题:下列函数哪项是用于返回part在缓冲区里花费的是最大时间?
A、AJOBTIME B、BMAXTME C、AMAX D、BMAX
该函数返回一个实数,为指定缓冲区里存放零件的最小数量,或称为最小队列长度。
举例:
MIN_IN_BUFF1 = BMIN(BUFF1)
在这个表达式中,BMIN函数计算到目前为止缓冲区BUFF1里零件的最小排队数量,然后将该数值赋给MIN_IN_BUFF1。
题:
下列函数那个函数的功能是返回缓冲区内part的最小数量?
A、AMIN B、BMIN C、HMIN D、MIN
该函数返回指定缓冲区中已经离开的零件在该缓冲区中存放的时间最小值,如果到目前为止尚没有零件离开该缓冲区,则函数返回-1.0。
Chr函数返回指定ASCII码对应的一个字符串。
举例来说,ASCII_code
65 返回字母“
A ” 。
PRINT CHR(156)="
£""
CHR(64)="@"
题目
1. 表达式SHORTEST = BMINTIME(HOPPER(3))的功能是计算任何部分已用在第三个缓冲区HOPPER的__时间,然后以这个值更新变量SHORTEST。
A. 最短 B.最长
2. Chr函数返回一个字符串,其中包含相应的字符到指定的__
A.ASCII码 B.BCD码 C.机器码 D.汉字编码
该函数将关闭指定编号的窗口,该函数不返回数值。
参数:Window_number,整数
布局窗口号为从(1 – 8)
特殊窗口号:
-1 打开设计者元素窗口
-2 打开时间窗口
-3 打开时钟窗口
-4 打开交互窗口
该函数返回参数radians的余弦值。
CYCLE函数返回机器machine_name当前所在的周期数。如果是单周期机器,该函数的返回值总是1;对于多周期类型机器,该函数返回的是该机器当前执行的周期数,如果当前该机器处于空闲状态,该函数也返回1。
例:
模型中有一零件Part1和一台三周期机器Mach1,其中零件Part1到达间隔为10分钟,批量为1,首批零件在0时刻到达;机器Mach1三个周期的加工时间分别为3,4,2。问:
在仿真时刻5时,CYCLE(Mach1)=2?
在仿真时刻9.5时,CYCLE(Mach1)=1?
在仿真时刻17时,CYCLE(Mach1)=3?
该函数返回指定车辆运行的总的物理距离。
返回设计者窗口或仿真窗口元素数量;
element_type=0,该函数返回仿真窗口和设计者窗口元素数量之和;
element_type=1,该函数返回仿真窗口的元素数量;
element_type=2,该函数返回设计者窗口的元素数量。
返回元素列表窗中位置position_number的元素名称。
ELTTYPE函数返回element_name参数指定的元素在WITNESS中的编号,如果出错,将返回0。
WITNESS元素类型编号见元素列表窗口中的Type顺序。
例:
TYPE_NUMBER = ELTTYPE(MACH1)=2
EVALERR, EVALINT, EVALNAME, EVALREAL 和EVALSTR可以用于评估用户输入到模型中的表达式是否为某种格式数据,或者错误数据。我们还可以使用VALIDATE函数检验是否可以将输入的表达式转换为有效的WITNESS表达式。
EVALINT函数用于检验字符串表达式,如果该字符串可以转换为有效的整数,该函数将返回该整数;如果该字符串不是有效的整数,或者发生了某项错误,该函数将返回0。
例:
EVALINT("7+5")=12
EVALINT("7.5+5")=12
因为EVALINT函数将7.5截断为整数7。
EVALINT("MACH1")=0
EVALERR, EVALINT, EVALNAME, EVALREAL 和EVALSTR可以用于评估用户输入到模型中的表达式是否为某种格式数据,或者错误数据。我们还可以使用VALIDATE函数检验是否可以将输入的表达式转换为有效的WITNESS表达式。
EVALNAME函数用于检验字符串表达式,如果该字符串为WITNESS模型中有效的元素名,该函数将返回该名称;如果该字符串不是有效的元素名,或者发生了某项错误,该函数将返回NONE。
例:
EVALNAME("MACH1")=MACH1
EVALNAME("10.75")=NONE
EVALERR, EVALINT, EVALNAME, EVALREAL 和EVALSTR可以用于评估用户输入到模型中的表达式是否为某种格式数据,或者错误数据。我们还可以使用VALIDATE函数检验是否可以将输入的表达式转换为有效的WITNESS表达式。
EVALREAL函数用于检验字符串表达式,如果该字符串为有效的实数,该函数将返回该实数;如果该字符串不是有效的实数,或者发生了某项错误,该函数将返回0.0。
例:
EVALREAL("7.0 + 5.0")=12.0
EVALREAL("7 + 5")=12.0
EVALREAL("FRED")=0.0
EVALERR, EVALINT, EVALNAME, EVALREAL 和EVALSTR可以用于评估用户输入到模型中的表达式是否为某种格式数据,或者错误数据。我们还可以使用VALIDATE函数检验是否可以将输入的表达式转换为有效的WITNESS表达式。
EVALSTR函数用于检验字符串表达式,如果该字符串为有效的字符串,该函数将返回字符串;如果该字符串不是有效的字符串,或者发生了某项错误,该函数将返回空的字符串"" 。
例:
EVALSTR("Hello")="Hello"
EX函数返回自然对数的exponent次方的值。
例:
EXVAL=EX(1.0)=e= 2.718282
EXVAL = EX(2.0)= 7.389056
GETICON函数返回指定元素的特定编号的现实图标在图库中的位置。
例:
ICON_NUMBER = GETICON(DRILL,2)
上述表达式中,GETICON先获取元素DRILL的第2个ICON在图库中的位置编号,然后将该编号赋给变量ICON_NUMBER。
HMAX函数返回指定直方图中出现的最大数值。
HMAXTM函数返回指定直方图中出现最大数值的时刻。
HMEAN函数返回指定直方图中所有数据的平均值。
HMIN函数返回指定直方图中出现的最小数值。
HMINTM函数返回指定直方图中出现最小数值的时刻。
HMODE函数返回直方图发生频次最高的数值区间区间的中值。
MODE参数的含义:
MODE=0:该函数检查直方图最高的条块(该条块对应区间的数据发生频次最高),并返回该区间的中值;如果同时有两个以上的条块都处于最高水平,HMODE函数返回0。
MODE=1:该函数检查直方图最高的条块(该条块对应区间的数据发生频次最高),并返回该区间的中值;如果同时有两个以上的条块都处于最高水平,HMODE函数最右边处于最高水平数据区间的中值;
MODE=2:该函数检查直方图最高的条块(该条块对应区间的数据发生频次最高),并返回该区间的中值;如果同时有两个以上的条块都处于最高水平,HMODE函数最左边处于最高水平数据区间的中值。
HSTD函数返回指定频次图(直方图)数据的标准差。
例:
SD = HSTD(WIP_VALUES)
上述表达式中,HSTD获取直方图WIP_VALUES的标准差,并将该数值赋给变量SD。
IABS函数返回一个正整数,为参数integer_expression的绝对值。
例:
DIFFERENCE = IABS(3 - 5)=2
IFIX函数返回其参数的整数部分,而将小数部分全部省略。功能同TRUNC函数相同。
例:
IFIX(3.6)=3
ISNAME函数检验参数name(字符串)是否可以转化为有效的WITNESS元素名称,如果可以转换为WITNESS元素名,该函数返回整数1,否则,返回0。
例:
ELT_NAME = ISNAME("MACH001")
在上述表达式中,ISNAME函数检验字符串"MACH001",如果模型中有一元素的名称为MACH001,则表达式右侧函数返回整数1,否则返回0,并将返回值赋给变量ELT_NAME 。
ISNUMBER函数检验参数number(字符串)是否可以转换为数字,如果可以转换为数字,则该函数返回整数1,否则,返回整数0。
注:
可以使用ISNUMBER函数和INPUTDLG函数判断用户输入的字符是否为数字,用于校验用户输入格式。
例:
VALID_NUMBER = ISNUMBER("123.45")
在这个表达式中,ISNUMBER函数检验字符串"123.45",因为123.45是个有效的数字,所以该函数返回整数1,并将该值赋给变量VALID_NUMBER。
RETVAL = ISNUMBER("m001")
在上述表达式中,因为字符串"m001"不能转换为有效的数字,所以函数ISNUMBER返回0,并将该数值赋给变量RETVAL。
该函数返回指定元素element的当前状态标示值,各种元素状态及其标示值参见元素状态介绍部分。
例:
IF ISTATE(BELT(2)) = 3
PUSH to BELT(4)
ENDIF
该规则为输出规则,如果输送链BELT(2)处于阻塞状态,将零件送出至BELT(4)。
LN函数返回指定实数表达式以自然对数e为底的对数。
LOG函数返回指定实数表达式以10为底的对数。
例:
LOG(10)=1
LOG(86)=1.924498451。
MAX函数返回整数数列中的最大数值。
MIN函数返回整数数列中的最小数值。
MOD函数返回一个整数值,为integer_number除以denominator的余数。
例:
REMAINDER = MOD (8,5)
在上述表达式中,MOD返回8除5的余数3(8/5=1,尚有余数3),并将3赋给变量REMAINDER。
EXCESS = MOD(TOTAL_PARTS, BATCH_SIZE)
上述表达式中,MOD函数将变量TOTAL_PARTS除以变量BATCH_SIZE,获得余数,并将余数赋给变量EXCESS。
MOD函数与负数
WITNESS系统中的MOD函数与EXCEL中的MOD函数在处理负数时有如下的不同:
MOD(-7, 3)在Excel中返回2,而在WITNESS中将返回-1。如果希望返回整数,可以使用下列公式:
MOD(MOD(x,y) + y,y)
NAME2STR函数将指定的名型变量转变为对应的字符串。
例:
NAME_STRING = NAME2STR(MACH001)
上述表达式中,NAME2STR 函数将元素名称MACH001转变为字符串"MACH001",然后将该字符串赋给变量NAME_STRING。
NFREE函数返回指定元素的余量。
可以使用NFREE函数计算缓冲区、输送链、机器、车辆、运输站点和运输器中剩余的、可容纳零件的数量。
可以指定element_name参数的序号,序号及其含义如下:
INDEX = 0 (或者不指定): NFREE函数返回该元素的所有对象的剩余空间总量。
INDEX > 0: NFREE函数返回元素的指定序号对象的剩余空间量。
INDEX = -1: NFREE函数返回该元素中所有对象中的最小剩余空间量。
INDEX = -2: NFREE函数返回该元素中所有对象中的最大剩余空间量。
例:
SEATS = NFREE(THEATER(3))
上述表达式中,NFREE函数计算第三个THEATER缓冲区的剩余空间量,然后将该数值赋给变量SEATS。
NJOB函数返回指定劳动者从事特定类型作业数量。
Code 含义
1 指定劳动者已经开始的工作数量
2 指定劳动者已经完成的工作数量
3 指定劳动者目前正在进行的作业数量
4 指定劳动者被强占的次数
例:
USING_OP = NJOB(OPERATOR,3)
上述表达式中,NJOB函数计算劳动者目前正在进行的作业数量,并将该作业数量赋给变量USING_OP。
NLOADS函数返回指定类型车辆已经装载了零件的次数。
例:
LOAD_TIMES = NLOADS(AGV(1))
在上述表达式中,NLOADS函数计算第一辆AGV车辆装载零件的次数,然后将该数值赋给变量LOAD_TIMES。
NLSHIFT函数返回在指定班次上所具有的指定类型的劳动者数量。
例:
STAFF_NUMBER = NLSHIFT(OPERATOR, SHIFT1)
在上述表达式中,NLSHIFT函数计算在班次SHIFT1中劳动者OPERATOR 的数量,并将该数量赋给变量STAFF_NUMBER。
NOCC函数返回指定输送链上处于start和end位置之间的零件的数量,包含start和end位置上的零件。
如果start参数值为0,NOCC函数假定起始位置为输送链的前端,零部件从输送链的前端离开输送链。
如果end参数值为0,NOCC函数假定终点位置为输送链的尾端,零部件从输送链的尾端进入输送链。
如果参数是正数值时,参数指定的位置为离开输送链前端的位置数。例如,位置1是输送链的前端,位置2是倒数第2个前端位置。
如果参数是负数值时,参数指定的位置为离开输送链尾端的位置数。例如,位置-1是输送链的尾端,位置-2是倒数第2个尾端位置。
例:
PARTS_ON_C2 = NOCC(C2, 0, 5)
在该表达式中,NOCC函数计算输送链C2上前端到前端第5个位置间零件的数量(即图上第1到第5个位置间),因为在位置1,2 和5上各有一个零件,所以NOCC函数返回3,并将3赋给变量PARTS_ON_C2。
PART_ON_C2 = NOCC(C2, -1, -7)
在该表达式中,NOCC函数计算输送链C2上尾端位置到倒数第7个位置间的零件数量,即上图位置的9-3,因为在位置9, 7, 6 和5上各有一个零件,因此NOCC函数将4赋值给变量PARTS_ON_C2。
NOPS函数返回指定机器或处理器已经完成的作业数。如果机器或处理器的数量大于1,但是在该函数中没有指定序号,则函数NOPS返回的是该元素所有对象已经完成的作业数。
例:
CYCLES = NOPS(DRILL(1))
上述表达式中,NOPS函数计算第一台DRILL机器已经完成的作业数,然后将该数值赋给变量CYCLES。
CYCLES = NOPS(DRILL)
上述表达式中,NOPS函数计算所有DRILL机器已经完成的作业数,然后将该数值赋给变量CYCLES。
该函数返回指定元素当前包含的零件数量。该函数可用于缓冲区、输送链、机器、路径、轨道、车辆、运输站点和输送器。
可以为参数设定索引号,索引号取值及含义如下:
INDEX=0(或者不指定INDEX):该函数返回指定元素所包含的全部零件数量;
INDEX>0:对于指定元素的对象数量大于1的情况,该函数返回索引号指定的对象中包含的零件数量。
INDEX=-1:该函数返回特定元素中包含最多零件的对象所包含的零件数量;
INDEX=-2:该函数返回特定元素中包含最少零件的对象所包含的零件数量。
该函数返回指定元素当前包含的、指定类型的零件数量。该函数可用于缓冲区、输送链、机器、路径、轨道、车辆、运输站点和输送器。
参数:part_name,名型
part_name可以是特定零件的名称,也可以是系统变量ALL(将返回指定元素所有零件的总量),
mode取值及其含义:
0:返回指定元素整体所包含的指定的元素数量;
1:返回机器自身所包含的指定零件的数量;
2:返回机器输入缓冲区中包含的指定零件的数量;
3:返回机器输出缓冲区中包含的指定零件的数量;
该函数返回模型中元素element_name的数量。
例:
TOTAL_DRILLS = NQTY(DRILL)
上述表达式中,NQTY函数计算DRILL元素的数量,然后将该数量赋给变量TOTAL_DRILLS 。
NREJECT函数返回指定类型零件被拒绝出模型的数量。
例:
REJECTED = NREJECT(FRAME)
上述表达式中,NREJECT函数计算零件FRAME被拒绝出模型的数量,并将该数量赋给变量REJECTED。
NSHIP函数返回特定类型零件被发送出模型的数量。
例:
BILLABLE = NSHIP(CARTON)
上述表达式中,NSHIP函数计算零件CARTON被发送出模型的数量,然后将该数量赋给变量BILLABLE。
NUM2STR函数返回指定实数或整数的字符串形式。该函数的功能与str函数相同。
例:
REAL_STRING = NUM2STR(15.75)
上述表达式中,函数NUM2STR将实数15.75 转化为字符串"15.75",并使用该字符串作为变量REAL_STRING 的值。
该函数返回当前轨道track_name上车辆的数量。
例:
ON_T22 = NVEHICLE(T22)
上述表达式中,NVEHICLE函数先获取当前轨道T22上车辆数量,然后将该数量赋给变量ON_T22。
NWAIT函数返回指定缓冲区中零件超出最小延迟时间,但仍然存放在该缓冲区中的数量。
延迟时间已经过去,nwait函数在指定的缓冲去( )这方面的缓冲区
A 在
B 不在
C 可能在
D
随机无法确定
NWIP函数返回指定的零件在模型中当前的存量。
例:
WIP_BODY = NWIP(TOP)+NWIP(BOTTOM)
上述表达式计算零件TOP和零件BOTTOM在模型中的库存量,然后将这两个值之和赋给变量WIP_BODY。
该函数将在屏幕上打开指定的窗口,该函数不返回数值。
参数:Window_number,整数
布局窗口号为从(1 – 8)
特殊窗口号:
-1 打开设计者元素窗口
-2 打开时间窗口
-3 打开时钟窗口
-4 打开交互窗口
例:
OPENWIN(5)
打开5号窗口。
OPENWIN(-4)
打开交互窗口。
PathLength函数返回整数值,以像素为单位返回路径的长度。
例:
PathLength(Street)
在这个函数中返回STREET路径的像素长度。
PhysicalPathLength返回路径的实际长度。
下面两个相关函数:
GetMappingFactor获取在模型选项对话框中协调配置页中的尺寸匹配设置,即设置长度单位同像素的比例。
GetMappingUnit返回长度单位。
PathLength以像素为单位返回路径的长度。
参数:Path_name,名型。
例:
PhysicalPathLength(Street)
该表达式返回路径STREET的实际长度。
路径STREET的可视化效果见上图,GetMappingFactor()返回的值为16,问:
PathLength(Street)=? 80
PhysicalPathLength(Street)=? 5
PUTIL函数返回指定元素处于特定状态的百分率,返回值为[0,100]之间的实数值。
如果一个元素的数量大于1,并在函数中没有指定元素的序号,PUTIL函数将返回该元素所有对象处于特定状态的平均比率。
PUTIL函数对机器、输送链、轨道、车辆、班次、劳动者、运输网路、输送器、路径、路径集和站点元素有效。
参数:Element_name,名型
参数:State,整型
例:
IDLE_PERCENT = PUTIL(MILLER(3), 1)
在该表达式中,PUTIL函数返回第三台MILLER机器处于空闲状态的总时间对总的仿真时间的百分比,并将该百分比赋给变量IDLE_PERCENT。
IDLE_PERCENT = PUTIL(MILLER, 1)
(1)假设零件A到达时间间隔为4分钟,第一件在仿真时间0到达,批量为1,零件将被输出到缓存STORE中,另有一台机器Mach从STORE中提取零件A进行加工,加工每件A需要耗时3分钟,在仿真时刻14时计算PUTIL(Mach,1)=?PUTIL(Mach,2)=?
机器状态1表示其处于空闲状态;
机器状态2表示其处于工作状态;
时段 |
状态 |
累计空闲时间 |
累计工作时间 |
[0,3] |
忙 |
0 |
3 |
[3,4] |
等待 |
1 |
3 |
[4,7] |
忙 |
1 |
6 |
[7,8] |
等待 |
2 |
6 |
[8,11] |
忙 |
2 |
9 |
[11,12] |
等待 |
3 |
9 |
[12,14] |
忙 |
3 |
11 |
PUTIL(Mach,1)=3/14=21.43;
PUTIL(Mach,2)=11/14=78.57;
Qlength函数返回整数值,为输送链长度(以零件为单位)或轨道的显示长度。如果Element_Name不是轨道元素或输送链元素,该函数将返回0。
例:
Conveyor_Q_Length = QLength(Belt(3))
该表达式中,Qlength函数获取第三条BELT输送链的长度,然后将该长度数据赋给变量Conveyor_Q_Length。
该函数将通过四舍五入的方式将特定实数表达式进行处理,返回指定小数位的实数值。
例:
ROUNDED_VALUE = ROUND(1256.5678, 2)
在该表达式中,ROUND函数将1256.5678精确到2位小数,得1256.57,并将该值赋给变量ROUNDED_VALUE。
ROUNDED_VALUE = ROUND((1256.5678,-2)
在该表达式中,ROUND函数将1256.5678精确到百分位,得1300,并将该值赋给变量ROUNDED_VALUE。
该函数返回实数值,为指定零件或流体在模型中消耗的平均班次时间长度,包括加班时间。
例:
TIME_IN_MOD = SAFLOW(COOLANT)
该表达式计算流体COOLANT在模型中的平均班次时间。
(1)假设零件A到达时间间隔为4分钟,第一件在仿真时间0到达,批量为1,零件将被输出到缓存STORE中,在仿真时刻14时计算SAFLOW(A)=?
零件编号 |
到达时刻 |
存在时长 |
累计时长 |
1 |
0 |
14 |
14 |
2 |
4 |
10 |
24 |
3 |
8 |
6 |
30 |
4 |
12 |
2 |
32 |
SAFLOW(A)=32/4=8分钟/件
(2)在上题中,添加一个班次,该班次由3分钟上班和3分钟下班组成,将该班次控制零件A,其他条件同题(1),则SAFLOW(A)=?
[0,14]时间段内上下班时段分别为[0,3],[6,9],[12,14];[3,6],[9,12];
零件到达间隔仅计算上班时间,则:
Ø 在0时刻,第一个零件到达;
Ø 在7时刻,第二个零件到达;
Ø 在14时刻,第三个零件到达;
零件编号 |
到达时刻 |
存在班次时长 |
累计班次时长 |
1 |
0 |
8 |
8 |
2 |
7 |
4 |
12 |
3 |
14 |
0 |
12 |
SAFLOW(A)=12/3=4分钟/件
该函数返回实数值,为指定缓存、输送链、输送器或模块在上班时间内的平均零件数量。
(1)假设在仿真时钟等于10时,缓存STORE中现在有三个零件,这三个零件进入STORE的时间点分别为0,4,8,则该函数的计算表如下:
时间段 |
时长 |
零件数量 |
加权零件数量 |
累计加权零件数量 |
[0,4] |
4 |
1 |
4 |
4 |
[4,8] |
4 |
2 |
8 |
12 |
[8,10] |
2 |
3 |
6 |
18 |
SAPARTS(STORE)=18/10=1.8(件/单位时间)
(2)如果上述STORE受到一个SHIFT控制,该SHIFT有一个3单位的工作时间和2个单位的休息时间构成,则函数SAPARTS的计算表如下:
时间段 |
时长 |
班次状态 |
零件数量 |
加权零件数量 |
累计加权零件数量 |
累计上班时长 |
[0,3] |
3 |
Yes |
1 |
3 |
3 |
3 |
[3,4] |
1 |
No |
1 |
0 |
3 |
3 |
[4,5] |
1 |
No |
2 |
0 |
3 |
3 |
[5,8] |
3 |
Yes |
2 |
6 |
9 |
6 |
[8,10] |
2 |
No |
3 |
0 |
9 |
6 |
SAPARTS(STORE)=9/6=1.5(件/单位时间)
例如:
STORE_PARTS = SAPARTS(STORE(3))
该表达式计算第三个缓存STORE在上班时间内的平均零件数量,然后将该数值赋给变量STORE_PARTS。
该函数返回实数型参数real_expression的整数部分。
例:
INTEGER_VALUE = TRUNC(25.75)
该表达式将实数值25.75的整数部分返回给变量INTEGER_VALUE。
XLReadArray函数将EXCEL数据表中特定区域的数据读入模型,并赋给变量Array,数据表及数据区域由参数WorkbookName, WorksheetName, Range确定。
例:
XLReadArray ("\\XLLinks.xls","InputData","$D$6:$D$8",CycleTime)
上述语句实现的功能是将与模型在相同目录下的EXCEL工作表XLLinks.xls的工作簿Input的D6到D8的数据区域的数据读入模型,并赋给变量数组CycleTime。
XLWriteArray函数将模型变量Array的数据写入到EXCEL数据表中特定数据区域,数据表及数据区域由参数WorkbookName, WorksheetName, Range确定。
例:
XLWriteArray(\\XLLinks.xls,"Output","$C$10",TemporaryValue)
上述语句实现的功能是将变量TemporaryValue的值写入到与模型在相同目录下的EXCEL工作表XLLinks.xls的工作簿Output的C10数据区域。系统变量
整数变量,存储当前车辆或输送器的编号。
整数变量,存储当前元素在批量中的编号。
例如,如果零件已25件一批进入系统,那么第一个零件进入时,M等于1;第二个零件进入时,M等于2,依次类推。
如果机器是批处理机器,假设每批处理零件数量为4件,则当完成第一个零件时,M等于1;完成第2个零件时,M等于2,依次类推。
M变量还用于时间序列图,对线条1的M等于1,对线条2的M等于2。
整数变量,存储当前机器的索引号。
例如,机器Mach的数量为3,如果当前完成作业的机器是第一台,则N为1;如果当前完成作业的机器是第二台,则N为2,依次类推。
系统变量存储当前仿真时钟值。
注:一个仿真单位可以代表任意数量级的实际时间。可以选择一个仿真单位代表实际时间的一分钟、一秒、一小时,甚至一星期,这将根据模型的设置。
在设定仿真时间与实际时间比例时,必须保持所有时间单位的统一。例如,如果设定了一个仿真时间单位等于一小时。一项作业耗时2小时,则设定其耗时2个仿真时间单位;如果另一项作业耗时15分钟,则设定其耗时为1/4小时,即0.25个仿真单位。
名型系统变量,返回当前车辆的名称,如果没有车辆,将返回"NONE"
名型变量,存储当前元素的名称和序号(如果元素没有数量定义,则仅返回名称,而不包括序号)
例如:
如果机器Mach的数量为3,则当前元素为Mach(1)时,ELEMENT将设置为"MACH(1)";
零件没有数量定义,因此也就没有序号,如果当前零件名称为WIDGET,则ELEMENT的值将为"WIDGET"。
NSTAGE是整数系统属性,该属性在设置了零件的路径(Route)选项之后可用,路径选项是用于替代输入、输出规则来控制零件在系统中流程的设置项。该属性存储零部件总的工序数。
STAGE是整数系统属性,该属性在设置了零件的路径(Route)选项之后可用,路径选项是用于替代输入、输出规则来控制零件在系统中流程的设置项。
零件的每个路径同该零件下一工序作业的机器(该机器将对零件进行加工处理)联系在一起。STAGE属性显示零件下道工序的工序号。当模型运行时,一道工序完成后,WITNESS将自动将零件的阶段数加1。
我们可以通过在零件的加工工序中的完工动作中修改STAGE值,修改和控制零件的加工顺序。
例如,如果一个零件当前的加工工艺阶段为3,那么在该工序的完成动作中设置下面语句,将会控制该零件送至阶段8,而不是从上阶段4:
STAGE = 8
注: 阶段数不能设置得大于零件的总工序数
FLUID是名型系统属性元素,显示当前零件中的流体名称,如果零件中存储的是混合流体,则FLUID值为MIXTURE。可以使用FLUID属性设置零件中的流体类型,或者检验零件中的流体类型。
示例:
FLUID=WATER
该语句设置当前零件中的流体为WATER。
IF FLUID=GRAPE
PUSH to GRAPE_PACKING
ELSE
PUSH to ORANGE_PACKING
ENDIF
上述语句将设置在某个元素(尤其是处理零件的机器)的输出规则中,如果当前零件包含的流体为GRAPE,则将当前零件输出到名为GRAPE_PACKING的机器上;如果当前零件包含的流体不是GRAPE,则将当前零件输出到名为ORANGE_PACKING的机器上。
CONTENTS是实数型系统属性,显示一个零件中存储的流体量。我们可以使用CONTENTS设置零件中的流体量,或者检验零件中已有的流体量。
示例:
CONTENTS=1000
该语句将设置当前零件包含1000个单位的流体。
IF CONTENTS=1000
PUSH to PACKING
ENDIF
上述语句将设置在某个元素(尤其是处理零件的机器)的输出规则中,如果当前零件包含的流体量为1000,则将当前零件输出到名为PACKING的元素上。
TYPE是一个名型系统属性,存储当前零件、输送器、车辆和劳动者单元的名称。例如,如果当前零件是名字叫BOX,TYPE的值为BOX。
如果在模型中需要针对不同零件、输送器、车辆和劳动者进行特定的处理,TYPE属性可以派上用途。
例如:
IF TYPE=RUSH
CALL TAXI, T5, T8, 1
VSEARCH T1, T2, T3, T4, T5, T6, T7, T8
ELSE
CALL TAXI, T5, T8, 2
VSEARCH T4
ENDIF
如果当前的零件是名为RUSH的零件,则以较高的优先级呼叫名为TAXI的车辆,从轨道T1到T8八条轨道上搜索TAXI。如果当前的零件不是RUSH,则以较低的优先级从轨道T4上搜索TAXI。车辆TAXI将在轨道T5上进行装载作业,在轨道T8上进行卸载作业。
模型中有两种零件A和B,到达间隔分别为4和6,批量为1,首批在时刻0到达系统,两者的输出规则均为:push to Buf1,其中Buf1为缓冲区,排队规则为FIFO。有一台机器从Buf1中提取零件加工,对两种零件的加工时间均为6分钟,加工结束,将A送到BufA,B送到BufB,BufA和BufB为两个缓冲区,
ICON控制零件、输送器、车辆和劳动者单元在屏幕上动态显示的图标,是一个整数值的系统属性元素。WITNESS图标存放于图片库中,每个图片都有其对应的编号。将上述四类元素的ICON属性赋值为[1,500]范围内的整数,则该元素在模型中显示的就是该整数值在图库中对应位置的图片。如果ICON的值超出[1,500],则元素的图标不会发生变化。
示例:
ICON=2
如果该语句设置在零件、输送器、车辆和劳动者单元的创建动作中,则对应元素的显示图标为图库中的第2号图标。
DESC是描述每个零件、输送器、车辆和劳动者单元的字符串系统属性,用于在建模窗口显示一个元素的描述。
缺省情况下,系统属性DESC的取值为元素名称的前四个字符,即缺省的显示尺寸为4个字符。我们可以修改元素描述的显示长度(最长为80个字符)以便让具有较长名称的元素能够恰当的在窗口显示出来。如果元素名称的长度比显示尺寸要多,WITNESS将会把名称后面多余部分截掉。
当改变了元素的DESC属性值后,元素的名称仍然会保持不变。
元素的DESC属性可以通过元素的风格显示项进行设置,使得元素在初始化时就进行了DESC的赋值;也可以在模型的其他任何动作处修改和设置元素的DESC属性。
示例:
DESC="FRED"
该语句如果设置在零件、输送器、车辆或劳动者的创建动作中,将会将每个创建的元素的DESC属性值赋为FRED。
DESC=NCREATE(CUSTOMER)
该语句如果设置在零件、输送器、车辆或劳动者的创建动作中,NCREATE函数计算零件CUSTOMER已经创建的数量,然后将该数量作为当前创建的元素的DESC取值。因此,第一个CUSTOMER将在建模窗口显示为1,第二个CUSTOMER将在建模窗口显示为2,依次类推。
PEN是一个整型数值的系统属性元素,用于控制以下元素显示图标的前景和背景颜色:
零件;
运输器;
车辆;
劳动者;
交互窗口文本。
系统属性PEN经常用于改变零件或劳动者显示图标的颜色,以反映零件或劳动者状态的改变。通常在动作中设置代码改变零件的PEN属性数值。
元素缺省的系统属性PEN数值为0(绿色前景,黑色背景)
PEN值 |
前景/背景色 |
PEN值 |
前景/背景色 |
0 |
元素的缺省颜色 |
13 |
黑/紫红 |
1 |
红/黑 |
14 |
黑/青 |
2 |
绿/黑 |
15 |
黑/白 |
3 |
黄/黑 |
16 |
白/黑 |
4 |
兰/黑 |
17 |
红/红 |
5 |
紫红/黑 |
18 |
绿/绿 |
6 |
青/黑 |
19 |
黄/黄 |
7 |
白/黑 |
20 |
兰/兰 |
8 |
黑/黑 |
21 |
紫红/紫红 |
9 |
白/红 |
22 |
青/青 |
10 |
黑/绿 |
23 |
白/白 |
11 |
黑/黄 |
24 |
黑/黑 |
12 |
白/兰 |
|
|
特殊地点
为了使得零件或者流体能够进入或者输出模型,WITNESS提供了在模型范围之外的特殊的地点,主要包括1个特殊的输入地点(WORLD)和7个特殊的输出地点(SHIP, ASSEMBLE, SCRAP, WASTE, CHANGED, ROUTE and NONE)
WORLD是WITNESS模型中特殊的输入地点,在输入规则运用过程中,该地点同其他类型的模型元素用法相同。主要使用方法为下面两种:
(1)将Part类型元素提取进模型
PULL PartName from WORLD
例如:
PULL SCREW from WORLD
如果该语句为某个机器的输入规则,则该机器空闲时则将小零件SCREW从模型之外的世界中提取进模型。其中PULL规则可以是其他的可用于Part类型的输入规则,例如:Percent,Match等。
(2)将Liquid类型元素提取进模型
Liquid类型元素为连续的流体,同离散的零件Part在物理形态上是不同的,基本语句如下:
FLOW LiquidName from WORLD RATE(RateSpeed)
其中:
LiquidName为任意Liquid的名称;
RateSpeed为流体输入流速;
例如:
FLOW lng from WORLD RATE(100)
如果该规则为某个管道的输入规则,则该管道按照流速100的速度将lng提取进来。其中FLOW规则可以用其他可作用于Liquid类型的输入规则,例如:CONNECT、RECIPE等。
SHIP是一个特殊的输出地点,当Part或Liquid经过流程处理之后,需要送到其他不在仿真范围内的处所时,使用SHIP作为其输出地点。
例如:
PUSH TO SHIP
若该规则为模型中某机器的输出规则,则该机器将为零件的最后加工工序,该机器加工完毕后的零件将被送出系统,即SHIP地点。
可以使用NSHIP(partName)统计截止当前时刻,名称为partName的零件被送出系统的数量;
可以使用VSHIP(liquidName)统计截止当前时刻,名称为liquidName的流体被送出系统的容量;
可视化设置项目说明:
Display size:动态显示Part、Labor、Vehicle图标的大小。