witness仿真系统
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
示例: MSGDLG (“Change the path”,2,“Do you want to change the path?”,“&Yes|&No”,1) 会弹出下列 消息框:
Inputdlg(title,dialog_text, field_default, field_width,type_id) 用来产生用户可以进行编辑的交互窗口。
3、模型交互对话函数 Msgdlg(title,icon_id,dialog_text,button_text, default_button)用来产生一个消息框。
title : 字符串型,用来产生消息框的标题; icon_id 整数型,用来标记消息框的类型。若 icon_id=0, 则消息框无任何图标;若 icon_id=1,则消息框的图标为 “Stop”型;若 icon_id=2,则消息框的图标为 “Question”型;若 icon_id=3,则消息框的图标为 “Warning”型;若 icon_id=4,则消息框的图标为 “Information”型; dialog_text 字符串型,在消息框中要显示的文本; button_text 字符串型,消息框中按钮的显示文本。一个 消息框中至多有 4个按钮,每个按钮的文本用“|”分隔开; default_button 整数型;default_button 用来设置按钮 的默认值,若default_button=1,则默认第一个按钮;若 default_button=2,则默认第二个 按钮;若 default_button=3,则默认第三个按钮;
循环结构 (1)计数型循环 基本语法如下: FOR〈循环变量〉=〈循环变量初值〉TO 〈循环变量终值〉 [STEP〈循环变量步 长〉] 〈 命令行序列〉 NEXT
例: NUMBER_FOUND = 0 FOR BUFFER_INDEX = 1 to NPARTS(STORE(1)) IF STORE(1) at BUFFER_INDEX:color=red NUMBER_FOUND = NUMBER_FOUND + 1 ENDIF NEXT 这段程序用来统计缓冲区 store(1)中颜色为红 色的部件的数量。BUFFER_INDEX 是循环变量; NPARTS(STORE(1))函数计算缓冲区 STORE(1)中的部 件数量;IF 分支用来判断 STORE(1)中排于第 BUFFER_INDEX 位置的部件的属性 color 是否等于 “red”
三、Witness随机分布函数 WITNESS 提供了14 种整型或实数型的标准随机分布函数, 它们能返回一系列理论分布的随机样本值。WITNESS 提供 了如下14 种标准随机分布函数: (1)BETA β分布; (2) NORMAL 正态分布; (3)BINOMIAL 二项分布;(4)POISSON 泊松分布; (5)ERLANG 爱尔朗分布 (6)RANDOM 0-1 均匀分布; (7)GAMMA γ分布; (8)TNORMAL 截断正态分布 (9)IUNIFORM 整数均匀分布 (10)TRIANGLE 三角分布; (11)LOGNORML 对数正态分布(12)UNIFORM 均匀分布; (13)NEGEXP 负指数分布; (14)WEIBULL 威伯尔分布 Witness提供了四种类型的变量:整型、实型、名型、 字符型。
通过本案例的学习:
熟悉WITNESS建模与仿真的基本步骤; 建模元素part、machine、buffer的基本应用; 可视化工具栏建立输入、输出工序流程; 负指数分布NEGEXP()和均匀分布Uniform()的 使用; 仿真实验及统计数据分析; WITNESS仿真系统的工作模式;
在图中通过下拉框选中 “Function” 一项, 并给要 定义的函数命名, 然后单击 “Create” ,单击 “Detail” ,如下图:
在图中通过 “type” 下的下拉框选择要定义的函数 的返回数据类型; 通过 “Add/Remove”选项添加 或删除函数的自变量;通过单击“Actions”进行函 数体的编写。
三、生产线物流系统建模案例
某公司有一条加工一种零件的生产线,有四道工序: 称重工序,服从均值为为5分钟的负指数分布;清洗工 序,服从均值为为4.5分钟的负指数分布;加工工序, 服从均值为为4分钟的负指数分布; 检测工序,服从 均值为为3分钟的负指数分布。 每道工序的每台机器上每次只能加工一个零件, 工序之间零件依靠输送链运输,零件通过每条输送链 的时间为10分钟。
使用循环语句时应注意的几点
WHILE 和ENDWHILE、FOR 和NEXT 必须配对使用。 〈命令行序列〉可以是任何WITNESS 的命令或语 句,也可以是循环语句,即可以嵌套为多重循环。
五、 Witness常用系统函数 1、数字函数 Abs(R) Amax(R1,R2,R3…,Rn) 2、转换函数 Chr(I) Float(I) Str(R or I) Strstr(Sa,Sb) Leftstr(S,N)
通过本案例的学习:
熟悉建模元素part、machine、conveyor、 labor的一般应用; 输入输出Pull、Push规则的使用 熟悉machine元素的setup、breakdown设 计; 了解负指数分布NEGEXP()的使用;
XLWriteArray( WorkbookName,WorksheetName, Range,Array )
用来将Witness的变量或变量数组的值写入 Excel工作表中,若成功,返回1;否则,返回0。
示例:
XLWriteArray ("\\XLLinks.xls","Output","$H$3" ,ProcessTime) 其作用是将变量ProcessTime的值写入与模型系统路 径相同的工作簿XLLinks.xls的工作表Output中,单 元格由H列和第3行所确定的。
示例: ♦ INPUTDLG ("Number of Machine","Please input the number of machine!","2",5,2) 会 弹出下列可编辑的交互窗口,
4、数据库函数 DBOpen();用来根据ODBC数据源及SQL语句对数据库 进行查询。 DBClose();用来关闭用DBOpen()打开的数据库。 DBAdd();用来向打开的数据库添加记录,并使记录 指针指向当前记录。
Widget L
称重
L1
ຫໍສະໝຸດ Baidu
清洗
L2
加工
L3
检测
清洗工序每清洗完10件产品,就需要整理一 下工作台,整理时长服从均值为8分钟的负指数分 布; 加工工序的机器每运行50分钟,进行一次预 防性检修,检修时长服从均值为10分钟的负指数 分布; 加工工序会发生随机故障,故障间隔服从均 值100分钟的负指数分布,维修时长服从30分钟的 负指数分布; 这三项作业都需要一名工人参与 ; 假设该生产线上每道工序仅有一台机器,整 条生产线由一名工人维护,零件数量足够多,建 立该系统的WITNESS仿真模型。
二、在单队列单服务台案例基础上完成如下情况的建模: 1.船舶到达时发现港口中已经有4艘船舶在等待,则选 择离开(case1.1.mod); 统计系统100天流失的船舶数量; 通过控制Buffer元素的Capacity实现 2.船舶等待时间超出30小时,则选择进行服务投诉 (case1.2.mod); 统计系统100天中接受到的投诉数量; 通过控制Buffer元素的Delay项实现 3.港口增加了一台岸桥对船舶进行服务(case1.3.mod) 仿真比较此时系统与case1系统在绩效指标上的变化, 通过设置Machine元素的Quantity项目实现
(2)“当”型循环 语法结构: WHILE <条件表达式> <命令行序列> ENDWHILE 注:ENDWHILE 可以缩写为END。 语句功能: 当<条件表达式>为真时,一直执行<命令行序列>,直到 <条件表达式>为假时,循环结束。示例: WHILE NPARTS(STOCK) > 90 PRINT "Warning! The STOCK buffer is nearly full." ENDWHILE
6、常用元素函数 NQTY(element_name) 返回模型中特定元素的数量。 NPARTS( element_name ) 返回模型中特定元素中部件的数量。 7、用户自定义函数 Define… 定义函数可通过在 Witness的布局窗口中单击 鼠标右键,单击“define…” ,弹出如下图所示 的窗口。
title 字符串型,用来产生交互窗口的标题; dialog_text 字符串型,用来产生交互窗口的要进行编 辑的提示信息; field_default 字符串型,在交互窗口要输入的默认值; field_width 整数型,交互窗口要输入的文本的宽度; type_id 整数型;交互窗口要输入的类型,若 type_id =1,则应该输入字符串型;若 type_id =2,则应该输入 整数型;若 type_id =3,则应该输入实数型;
分支结构有单向分支和多向分支语法结构,分别如下: (1) 单向分支,也叫简单分支结构 IF <条件表达式> <命令行序列> ENDIF (2) 多向分支,也叫复杂分支结构 IF <条件表达式1> <命令行序列1> ELSE <命令行序列2> ENDIF
(3)使用分支语句应注意的几点: a IF… … ENDIF 必须配对使用; b〈条件表达式〉可以是各种表达式或函数的组合,其 值必须是逻辑值; c〈命令行序列〉可以由一个或多个命令组成,也可以 是条件控制语句组成的嵌套结构。 示例 IF (water_level >= 0) AND (water_level <= 5) PRINT "The level in the water tank is low" ELSEIF (water_level > 5) AND (water_level <= 10) PRINT "The level in the water tank is normal" ELSE PRINT "The level in the water tank is high" ENDIF
举例:一、 单队列单服务台系统建模与仿真
案例case1.0.mod: 某港口只有一个岸桥为到达的船舶提供卸货服务。当船 舶到达港口时,停入泊位等待服务。如果岸桥空闲,则立即对 其进行货物卸载作业;如果岸桥为其他船舶卸载,则船舶在泊 位等待;岸桥为船舶提供服务的规则为FIFO。 假设船舶到达时间间隔服从均值为10小时的负指数分 布,岸桥为每艘船的卸载时间服从[6,14]小时的均匀分布。 建立仿真模型,运行100天=2400小时,统计: •岸桥的利用率; •船舶的平均等待时间 •港口船舶等待队列的最大长度 •服务船舶数量:
四、witness程序三种基本结构 1、顺序结构 顺序结构是在程序执行时,根据程序中语句的书写顺 序依次执行的命令序列。 2、分支结构 分支结构是在程序执行时,根据不同的条件,选择执 行不同的程序语句,用来解决有选择、有转移的诸多 问题。 3、循环结构 允许有限次重复执行某一特定的程序。
5、Excel函数
XLReadArray(WorkbookName,WorksheetName, Range,Array)
用来将Excel工作表中某些区域的数据读给 Witness的变量或变量数组,若成功,返回1;否 则,返回0。
示例:
XLReadArray (“\\XLLinks.xls”,“InputData”,“$D$6:$D$8” ,CycleTime), 其作用是将与模型在同一路径下的工作簿 XLLinks.xls 打开,并将该工作簿的工作表 InputData 中的 D6:D8 三个单元格的数据读 出来,最后赋予 CycleTime(1) 、 CycleTime(2)、 CycleTime(3)。