Flexsim仿真软件用户手册
版
copyright©2001-2005, Flexsim Software Products, Inc.
1欢迎查看Flexsim帮助
3Flexsim 版本新增功能
3应用
3引擎
3帮助
3新的正投影图形编辑器
4新的树编辑器
4新的自动Excel导入
5编码
8代码编辑器
9用户定义的实体库
10任务执行器
11固定资源
13网络结点
17新的交通控制实体
18流结点
18MTBF/MTTR
18时间表
18演示制作器
19实验控制器
20OptQuest优化器
203D形状
21表
23停留时间图表
24标签分页
24许多新增下拉菜单选项
25货架
27Flexsim与仿真起步知识
29模型描述
30建立模型
34详细设计模型
41模型实验
52教程
54第1课
55Flexsim软件概念学习
57模型1 描述
58建模步骤
69第2课
70Flexsim软件概念学习
82模型2 描述
83建模步骤
95第2课 进阶
96建模步骤
110第3课
111Flexsim软件概念学习
121模型3描述
122建模步骤
133Flexsim使用介绍
133Flexsim使用介绍
134主菜单和工具条
134文件菜单
137编辑菜单
138视图菜单
141执行菜单
142统计菜单
144工具菜单
145演示菜单
146窗口菜单
147帮助菜单
148工具条
149仿真运行控制面板
151模型视图
151正投影/透视视图
157平面视图
158正投影编辑器
159键盘交互
161菜单与设定
169视窗与对话框
169属性提示
170命令提示
171命令集
172完成提示
173查找替换
174字体视窗
175库图标栅格
176模型例库
177标准报告
178跟踪调试器
179树浏览对话框
180树视窗
181树编辑器
182数据库表视图
183表编辑器
184模型文档
185应用程序路径浏览器
186Flexsim概念
186何时编译Flexsim?
187Flexsim树结构介绍
190在Flexsim中编写逻辑
194基本建模函数和逻辑表达式
199运动学功能
204状态列表
2053D媒体
205使用帧
206导入3D媒体
207导入AutoCAD图形
208细节的层次(LOD)
210准备3D文件
214透明度
215实体窗口
215实体参数视窗和属性视窗
217参数页
217堆垛机分页
218碰撞分页
220合成器分页
221输送机分页
224输送机布局分页
226起重机分页
227分配器分页
228升降机分页
229固定实体分页
230临时实体流分页
232临时实体分页
233流节点分页
234分类输送机分页
236复合处理器分页
237网络节点连接分页
239网络节点分页
240操作员分页
242光电传感器分页
243处理器分页
244处理时间分页
245暂存区分页
247货架分页
249货架尺寸表分页
251记录器参数
257储液灌分页
258机器人分页
259分解器分页
260发生器分页
262任务执行器分页
264交通控制器分页
266交通控制器网络节点分页
267运输机分页
268实体触发器函数
270BFR高级分页
273BTE分页
276属性页
276视景属性分页
278常规属性分页
280标签属性分页
282统计属性分页
285Flexsim实体库
285Flexsim实体库
287堆垛机
288基本固定实体(BFR)
289基本任务执行器(BTE)
290合成器
292输送机
295起重机
296分配器
297升降机
298固定实体
303流节点
304分类输送机
306复合处理器
307网络节点
313操作员
315处理器
317暂存区
318货架
320记录器
321储液罐
322机器人
323分解器
324吸收器
325发生器
326任务执行器
329交通控制器
332运输机
333可视化工具
347工具
347建模工具
348AVI制作器
350Excel 界面
351临时实体箱
352全局C++代码
353全局实体指针
354全局表
355全局时间表
357全局用户事件
358导入媒体
359模型开始时代码
360MTBF/MTTR
363多Excel表导入
366OptQuest 优化器
371演示生成器
374脚本编辑器
375仿真实验控制器
380单表导出
381单表导入
382背景设计编辑器
383表配置器
385工具箱
387用户库
390Microsoft Visio™导入
412监视列表
413下拉菜单
413下拉菜单
415触发器
415装载/卸载触发器
429进入/离开触发器
449消息触发器
452处理结束触发器
461创建触发器
472碰撞触发器(碰撞处理)
474进入节点触发器(继续/到达时)
478覆盖与覆盖解除触发器下拉菜单
481变更触发器
483绘图触发器(用户绘图代码)
492重置触发器
498停机/启用触发器
502中断/维修触发器
505资源变为可用
506时间下拉菜单
506时间下拉菜单
513装载/卸载时间
514最小停留时间
515预置时间
516时间下拉菜单(时间间隔达到用法)
517周期时间(处理时间)
518固定资源
518停机分配器(选取操作员)
519流速
521放置到列
524放置到层
527处理分配器(选取操作员)
531从端口接收(从端口拉入)
537拉入条件
541上升/下降通过位高标记触发器
545发送请求
547送往端口
558分解数量(分解/拆盘数量)
560运输分配器(按下列请求运输工具)
565临时实体速度(速度)
566可移动资源
566中断(条件中断响应)
569传递给
572排队策略
573实验
573试验结束
574运行结束(每次重复运行结束)
576场景结束
577预热结束(预热时间段结束)
578绩效指标
584实验开始触发
585场景开始触发
590显示效果
590表X值(X值)
591表y值(y值)
592文本(文本显示)
593文本代码(文本显示)
601任务序列
601Flexsim 任务序列
604定制创建任务序列
606查询有关任务序列的信息
608任务序列先占
610协同任务序列
614任务类型快捷查询
616任务类型
628协同任务类型
631索引
欢迎查看Flexsim帮助
感谢您选用Flexsim。此用户手册将使您更好地了解Flexsim。同时,它也是有经验用户的参考指南,帮助您解决关于Flexsim的各种疑问。
有经验的用户可参考此手册开始部分的新增内容部分来看看在版本中新加入了哪些特色。
此手册中包括的帮助内容列表如下。
帮助内容
开始学习 HYPERLINK "file:///C:\\Program%20Files\\Flexsim3\\help\\Getting_Started\\" Flexsim
Flexsim教程
Flexsim的使用介绍
实体参数与属性窗口
Flexsim实体库
工具
下拉菜单
任务序列
XE "新增功能" Flexsim 版本新增功能
应用
在打开后不再需要立即编译
因库已编译好而使编译更快捷
新的窗口标题
现在可以同时打开多个图形用户界面
引擎
模型运行更快
编译更快
帮助
上下文相关的帮助
下拉菜单选项文件说明中增加了举例
更多的范例模型
更好的相关信息链接
新的正投影图形编辑器
新的“编辑所选实体”菜单
新的树编辑器
可以更快捷地在模型树中进行高级建模。
新的自动Excel导入
新的Visio模型导入能力
使用Flexsim模板在Visio中建立一个模型,可以直接导入Flexsim!
编码
改进的flexscript语言命令
宏指令
局部变量
数学运算符
比较工具
部分新的入门级别的产品开发(无需编译)
表访问命令
现可接受一个指向表节点的指针或者一个全局表的名称
gettablecell, settablesize, gettablerows, gettablecols, clearglobaltable, gettablenum, gettablestr, settablenum, settablestr
标签访问命令
现可接受定义标签排列的索引顺序号,或者标签本身的名称
label, dellabel, getlabelnum, getlabelstr, setlabelnum, setlabelstr
Excel访问命令
更稳定、快速返回状态
数据库访问命令
更灵活、稳定返回状态
Socket(套接字)命令
可生成socket服务器和socket用户
serveraccept, serversend, serverreceive, serverclosemain, servercloseconnection, numconnections, highestconnection
界面命令
msg (3rd parameter defines message types(第三个参数定义信息类型))
showprogressbar(caption(标题))
setprogressbar(percent(百分比))
hideprogressbar()
userinput(targetnode(目标结点),text(文本))
resetmodel()
getsystemmetric(screenwidth/height(屏幕宽度/高度))
任务执行器命令
distancetotravel(traveller(移动物),destination(目的地))
getedgedist(networknode(网络结点),edgenum(边序号))
getedgespeedlimit(networknode(网络结点),edgenum(边序号))
setcollisioncheck(object(实体),on/off(开/关))
redirectnetworktraveller(traveller(行进物),newdest(新目的地))
货架命令
rackgetbayofitem(rack(货架),flowitem(临时实体))
rackgetlevelofitem(rack(货架),flowitem(临时实体))
rackgetitembybaylevel(rack(货架),bay(列),level(层), itemrank(临时实体序号))
rackgetbaycontent(rack(货架),bay(列))
rackgetcellcontent(rack(货架),bay(列),level(层))
实体数据命令
nodetopath(2nd parameter for name path(第二个参数是名称路径))
getstatenum(object(实体))
getstatestr(object(实体))
getvarnode(object(实体),variable(变量))
getvarnum(object(实体),variable(变量))
setvarnum(object(实体),variable(变量),value(值))
getvarstr(object(实体),variable(变量))
setvarstr(object(实体),variable(变量),text(文本))
getobjectshapeindex(object(实体))
setobjectshapeindex(object(实体),index(索引号))
getobjecttextureindex(object(实体))
setobjecttextureindex(object(实体),index(索引号))
getobjectimageindex(object(实体))
setobjectimageindex(object(实体),index(索引号))
getinput(object(实体))
getoutput(object(实体))
getentrytime(object(实体))
getcolorcomponent(object(实体),index(索引号))
统计命令
calculateconfidence(stddev(标准方差),nrofdatapoints(数据点个数),confidence(置信度))
getdatastat(mean/confidenceinterval(均值/置信区间),dataset(数据集))
用户事件命令
geteventtime(eventname(事件名称),mode(模式))
seteventtime(eventname(事件名称),time(时间),mode(模式),createevent y/n(生成事件 是/否))
实体开发命令
holditem(item(临时实体))
releaseitem(item(临时实体))
receiveitem(item(临时实体))
addtouserlibrary(addobject(添加实体))
自动建模命令
setselectedobject(view(视窗),object(实体))
contextdragconnect(fromobject(起始实体),toobject(终到实体),characterpressed(所按字符键))
copyvariable(fromobject(起始实体),toobject(终到实体), variablename (变量名))
copyvariables(ffromobject(起始实体),toobject(终到实体))
copylabel(fromobject(起始实体),toobject(终到实体), labelname (标签名))
copylabels(fromobject(起始实体),toobject(终到实体))
copyvisuals(fromobject(起始实体),toobject(终到实体))
groupconnectto(toobject(终到实体),characterpressed(所按字符键))
groupconnectfrom(fromobject(起始实体),characterpressed (所按字符键))
groupcopyconnections(originalobject(原来实体))
groupsetnames(textnode(文本节点),startnum(起始序号),append y/n(附加数 是/否))
moveselectedintohighlighted(highlightedobject(高亮实体))
saveselectedtofile()
loadselectedfromfile(highlightedobject(高亮实体))
duplicateselected()
deleteselected()
selectall()
deselectall()
savebyname(tree(树),filename(文件名))
控制台信息命令
profiletasksequence(tasksequence(任务序列))
profileevents()
profiletasksequence()
profileevents()
模型流程控制命令
stopinput(object(实体))
stopoutput(object(实体))
resumeinput(object(实体))
resumeoutput(object(实体))
inputopen(object(实体))
outputopen(object(实体))
executing text as flexscript
executefsfile(filename (文件名))
executefsnode(node (结点),c,i, eventdata(事件数据))
代码编辑器
刷新更快
更个性化的选择:文档|编辑器属性......
文本撤消(ctrl z)
现在shift-左箭头选块可以正常的高亮显示
用户定义的实体库
用视窗|用户库图标栅格来新建库
右键点击模型中的一个实体并“添加至用户库”
任务执行器
提供可拖放的任务执行器来进行实体开发。
所有任务执行器均具有碰撞探测(新GUI(图形用户界面))
通过网络结点路径过程中加速、减速
“条件中断响应”可以生成一个新的任务次序并以此作为参照
新建或者修改任务序列中的任务
TASKTYPE_TRAVEL –现在可定义结束速度
TASKTYPE_BREAK –现在可在一个用户指定的实体上执行一个信息触发器,而不必按照默认的设定,在接受任务的任务执行器上的“条件中断响应”域段中执行
TASKTYPE_CALLSUBTASKS –与暂停任务相似,但总是控制返回到原来的任务序列
TASKTYPE_STOPREQUESTBEGIN –在involved1实体上调用stopobject()并将它置入状态 state var1
TASKTYPE_SENDMESSAGE –现在可以发送一个延迟信息,并可以引用结束执行任务序列的任务执行器
TASKTYPE_MOVEOBJECT–用来移动一个实体到另一个实体中(可以移动一个任务执行器至另一个任务执行器 中)
TASKTYPE_DESTROYOBJECT –用来删除任意实体
TASKTYPE_SETNODENUM –用来改变任意结点的值(变量和标签)
TASKTYPE_PICKOFFSET – 用来组合地或者分别地控制x、 y、z偏移行进运动,但无须像有装载任务一样真正捡取一个临时实体。
TASKTYPE_PLACEOFFSET – 用来组合地或者分别地控制x、 y、z偏移行进运动,但无须像有卸载任务一样真正放下一个临时实体。
TASKTYPE_TAG – 用来标识或者识别任务序列
协同任务序列现已全部完成测试可以操作了
XE "固定资源" 固定资源
提供可拖放的BFR来进行实体开发
连续判断“送往端口”,从而可以根据下游活动来改变输出端口的分配
“连续判断拉入条件”判断将强制对上游所释放的每个临时实体进行“拉动条件”判断(而不仅仅是涉及的要进入上游的临时实体)。
“按下列请求运输工具”中的4个新的下拉选项可用来手动创建用户自己的任务序列,且可以把任务执行器当作临时实体使用
增添新的“选择操作员”下拉菜单选项从多个团队中选择操作员
网络结点
增添新的侧偏移量来防止移动物的视觉重叠
新的路径(侧边)的GUI
连接侧边(路径)的速度限制
在节点之间,输入的虚拟距离优先于实际距离
新的触发器
到达触发器(OnArrival)
继续触发器(OnContinue)
如果到达触发器返回一个大于0的数字,那么该移动物变更路线,变更到返回的编号的侧边路径上。
现在的节点连接允许跨不同层次。
如果两个结点被连接到同一实体,且这两个结点都是用D键点击拖动方式与实体连接的,那么任务执行器将进入提供最小行进距离的节点,然后离开。
新的显示模式(X键点击)
点、路径、连接
仅适用于所选组
现在,用户可以定义曲线张力(编辑|曲线张力)
新的交通控制实体
在AGV建模项目中使用Swisslog开发的实体
控制任务执行器在一组指定的网络结点中的流程
两种交通控制模式
互斥模式
非时间模式
流结点
新的侧偏移量防止移动物发生视觉重叠
XE "检修触发器" XE "成员页" XE "恢复函数" XE "中断触发器" XE "Stopobject" XE "Resumeobject" XE "MTTR" XE "MTBF" MTBF/MTTR
可由用户定义的停机和恢复函数
停止实体
停止输入和输出
时间表
可由用户定义的停机和恢复函数
停止实体
停止输入和输出
演示制作器
XE "实验控制器" 实验控制器
OptQuest优化器
3D形状
库中实体的新增默认形状
更低的多边形计算消耗
对纹理的更好应用
不断丰富的3D实体库
根据距观察者的距离自动地将不同详细程度的文件分配给实体
基于实体的“帧”属性数值将帧文件分配至实体
setframe(object (实体), number(数量))
getframe(object (实体))
作用:
实体动画
根据实体状态分配形状
在处理过程中改变临时实体形状
表
新增表属性
cellwidth (允许用点击拖动方式按栏调整尺寸)
cellheight (允许用点击拖动方式调整所有尺寸)
drawlines (1=所有, 2=水平, 3=垂直)
drawleftcol (是/否)
fulleditor (在单元格文本编辑中新增的模式3)
新增高亮显示单元格
看起来更清晰
停留时间图表
新增的,应用于停留时间图表的置信区间功能
标签分页
新增的标签的右键点击弹出的编辑菜单
当把标签像表头节点那样使用时,可像编辑表一样编辑标签
许多新增下拉菜单选项
生成并初始化一个标签与设置一个标签
发送信息与发送延迟信息
用户绘图代码
在实体名称附近绘制文本
XE "货架" XE "放置" XE "层" XE "单元" XE "列" XE "不透明性" 货架
现在可使用货架来实现地面堆存仿真
现在可以定义横向行进偏移
XE "教程" XE "开始起步" XE "Flexsim 术语" XE "仿真" Flexsim与仿真起步知识
什么是Flexsim?
Flexsim是一个强有力的分析工具,可帮助工程师和设计人员在系统设计和运作中做出智能决策。采用Flexsim,可以建立一个真实系统的3D计算机模型,然后用比在真实系统上更短的时间或者更低的成本来研究系统。
作为一个“what-if”分析工具,Flexsim就多个备选方案提供大量反馈信息,来帮助用户迅速从多个方案中找到最优化方案。在Flexsim的逼真图形动画显示和广泛的运作绩效报告支持下,可以在短时间内识别问题并对可选方案做出评估。在系统建立之前,使用Flexsim来建立系统的模型,或在系统真正实施前试验其运作策略,可以避免在启动新系统时经常会遇到的很多缺陷。以前需要花费几个月甚至几年时间来进行查错试验以对系统进行改进,现在使用Flexsim可以在几天甚至几小时内取得效果。
建模
Flexsim是一种离散事件仿真软件程序。这意味着它被用来对这样的系统建模,这些系统根据特定事件发生的结果在离散时间点改变状态。一般,状态可分为空闲、繁忙、阻塞或停等机,事件则有用户订单到达、产品移动、机器停机等。离散仿真模型中被加工的实体通常是物理产品,但也可能是用户、文书工作、绘图、任务、电话、电子信息等等。这些实体通过一系列加工过程、排队和运输步骤,即所谓加工流程,在系统中依次进行下去。加工过程中的每一步都可能需要一个或多个资源,例如机器、输送机、操作员、车辆或某种工具。这些资源有些是固定的,另一些是可移动的。一些资源是专门用于特定任务的,另一些则必须在多任务中共享。
Flexsim是一个通用工具,已被用来对若干不同行业中的不同系统进行建模。Flexsim已被大小不同的企业成功地运用。粗略估计,大约500个Fortune企业中的一半为Flexsim的客户,包括一些著名的企业如General Mills, Daimler Chrysler, Northrop Grumman, Discover Card, DHL, Bechtel, Bose, Michelin, FedEx, Seagate Technologies, Pratt & Whitney, TRW 和 NASA。
使用Flexsim可解决的3个基本问题
服务问题 - 要求以最高满意度和最低可能成本来处理用户及其需求。
制造问题 - 要求以最低可能成本在适当的时间制造适当产品。
物流问题 - 要求以最低可能成本在适当的时间,适当的地点,获得适当的产品。
示例如何使用Flexsim
为了给读者一个有关可能应用的项目的概念,下面列出运用Flexsim成功解决的一些问题:
提高设备的利用率
减小等待时间和排队长度
有效分配资源
消除缺货问题
把故障的负面影响减至最低
把废弃物的负面影响减至最低
研究可替换的投资概念
决定零件经过的时间
研究降低成本计划
建立最优批量和工件排序
解决物料发送问题
研究设备预置时间和改换工具的影响
优化货物和服务的优先次序与分派逻辑
在系统全部行为和相关作业中训练操作人员
展示新的工具设计和性能
管理日常运作决策
Flexsim已经被成功地应用在系统设计研究和系统日常运作管理中。Flexsim也被应用于培训和教学领域。一个Flexsim的培训模型就可以透视出真实系统中的复杂相关性和动态特性。Flexsim可以帮助操作人员和管理人员了解系统是如何运作的,同时也可以了解如果实施替代方案系统将会怎样。Flexsim还被用来建立交互式模型,这些模型可以在运行中被控制,这样可以帮助讲解和展示在系统管理中固有的因果关系的影响。
可视化
Flexsim是一项高度可视的技术,它可为具有前瞻性的市场经营者用来提升其企业形象,对外界宣称他们以公司的杰出运作而自豪。
一个动画演示的仿真模型可以给人留下如此深刻的印象,以至于吸引管理者的注意力,并影响他们的思考方式,这的确令人吃惊。在仿真中显示的动画提供了视觉辅助效果,来演示最终的系统将如何运行。
起步教程
本部分将使用户熟悉在用户企业中使用仿真的优势。还将看到关于Flexsim环境的初步介绍。本教程将建立一个简单的仿真模型,然后对此模型进行试验来看看不同场景将给模型的运行带来怎样的影响。
Flexsim术语
在开始前,首先了解一些Flexsim软件的基本术语和这些术语在常规仿真概念中如何运用,这将很有帮助。
Flexsim实体
Flexsim的实体在仿真中模拟不同类型的资源。暂存区实体就是一个例子,它在仿真中扮演存储或缓冲区的角色。暂存区可以代表一队人,CPU中一队空闲处理程序,一个工厂中的地面堆存区,或客户服务中心的等待传叫的队列。另一个Flexsim实体的例子是处理器实体,它模拟一段延迟或处理时间。它可以代表工厂中的一台机器,一个为客户服务的银行出纳员,或者一个分检包裹的邮政员工,等等。
Flexsim实体可在对象库栅格面板中找到。这些实体栅格被分为几组,默认状态下显示最常用的实体。
临时实体
临时实体是那些在模型系统中移动通过的实体。临时实体可以代表零件、托盘、组装部件、纸张、集装箱、人、电话呼叫、订单,或任何移动通过你正在仿真的过程的对象。临时实体可以被加工,也可以被物料运输资源携带通过系统。在Flexsim中,临时实体产生于一个发生器实体。一旦临时实体从模型系统中通过,他们就被送至吸收器实体。
临时实体类型
临时实体类型是置于实体上的一个标签,可以代表一个条形码、产品类型或工件号。Flexsim可通过参考临时实体类型来进行临时实体行程安排。
端口
每个Flexsim的实体都可有多个端口,端口数没有数量限制。实体通过端口与其它实体进行通信。端口有3种类型:输入、输出和中间端口。
输入和输出端口在设定临时实体在模型中的流动路线时使用。例如,一个邮件分拣器,根据包裹的目的地不同,把包裹放置在几个输送机中的一个上。要在Flexsim中模拟这个过程,你需要将一个处理器实体的多个输出端口连接到几个输送机实体的输入端口,这表示一旦处理器(或邮件分拣器)完成对临时实体(或包裹)的处理,将把它发送到输送机。
中间端口用来建立一个实体与另一个实体的相关性。中间端口通常的应用是建立固定实体与可移动实体之间的相关关系,这些固定实体如机器、暂存区、输送机,可移动实体如操作员、叉车、起重机等。本课教程中不使用中间端口。
端口的创建和连接操作方法是,按住键盘上不同字母,点击一个实体并拖动至第二个实体。如果在点击和拖动过程中按住字母“A”键,将在第一个实体上生成一个输出端口,同时在在第二个实体上生成一个输入端口,这两个新的端口将自动连接。如果按住“S”键将在这两个实体上各生成一个中间端口并连接这两个新的端口。当按住的是 “Q” 键或“W”键时,输入输出端口之间或中间端口之间的连接被断开,端口被删除。下表给出了用来建立和断开两类端口连接的键盘字母。
输出 – 输入
中间
断开
Q
W
连接
A
S
模型视图
Flexsim采用3D建模环境。默认的建模视图是正投影视图窗。你还可以在一个更真实的透视视图中观察模型。通常在正投影视图中建立模型的布局更容易,而透视视图更多地用来做展示之用。然而,你尽可以使用任一个视窗来建立和运行模型。在Flexsim中,你可尽你所需打开多个视窗。但请记住,随着打开视窗数目增多,对电脑资源的要求就会增加。
XE "描述" 模型描述
描述
在这个模型中,我们来看看某工厂制造三种类型产品的过程。在仿真模型中,我们将为每种产品关联一个临时实体类型的数值。这三种类型都间隔地从工厂其它部门到达。模型中还有三台机器。每台机器加工一种特定的产品类型。产品在它们各自的机器中完成加工后,所有三种类型的产品必须在一个共享的检验站中检验其正确性。如果它们的制造完好,就被送到工厂的另一部门,离开仿真模型。如果发现制造有缺陷,则必须送回到仿真模型的起始点,被各自的机器重新处理一遍。仿真的目的是找到瓶颈的所在。该检验设备是否导致其它三台加工机器前实体的堆积,或者是否会因为三台加工机器不能跟上它的节奏而使之空闲等待?两机器间的缓冲空间是否必要?
将该模型应用到不同行业中
虽然我们以制造行业为例,但同类的仿真模型也可应用于其它行业。以一个复印中心为例。一个复印中心主要有三种服务:黑白复印、彩色复印和装订。在工作时间内有3个雇员工作,一个负责黑白复印工作,另一个处理彩色复印,第三个负责装订。另有一个出纳员对完成的工作进行收款。每个进入复印中心的顾客把一项工作交给专门负责该工作的雇员。当各自工作完成后,出纳员拿到完成的产品或服务,把它交给顾客并收取相应的费用。但有时候顾客对完成的工作并不满意。在这种情况下,此项工作必须被返回相应的员工进行返工。此场景代表了与上面描述的制造业中所用的相同的仿真模型。但是,在此例中,你可能更多关注在复印中心等待的人数,因为缓慢的服务对复印中心的业务来说成本高昂。
这里还有一个应用于运输业的相同的仿真模型例子。每辆穿越桥梁从加拿大到美国去的商业运输卡车,在允许入境前必须通过海关设施。每个卡车司机必须首先拿到适当的所需文件,然后通过对卡车的最后检查。卡车通常有三个重量级别。不同级别需要填写不同的文件,且必须向海关的不同部门提出申请。文件填写完成后,所有载重量的卡车都必须通过同一检查过程。如果未通过检查,则必须进行更多的文件填写工作。同样,这种情况包含与制造业的例子完全相同的仿真元素,只是将其运用在运输业中。这里,用户或许会对卡车在桥梁上会积聚多少辆感兴趣。如果车辆堆积数英里直到在相临的加拿大城市中造成交通堵塞,那么你就需要对设施的运作做些改变。
XE "建立" 建立模型
为验证Flexsim软件已被正确安装,双击桌面上的Flexsim图标打开应用程序。一旦软件安装好你应该看到Flexsim菜单和工具条、实体库,和正投影模型视窗。
第1步:在模型中生成一个实体
从左边的实体库中拖动一个发生器到模型(建模)视窗中。具体操作是,点击并按住实体库中的实体,然后将它拖动到模型中想要放置的位置,放开鼠标键。这将在模型中建立一个发生器实体,如下图所示。一旦创建了实体,将会给它赋一个默认的名称,例如Source#,数字#为自从Flexsim应用软件打开后所生成的实体数。在以后定义的编辑过程中,可以对模型中的实体进行重新命名。
第2步:在模型中生成更多的实体
从实体库中拖动一个暂存区实体放在发生器实体的右侧。再从库中拖动3个处理器实体放在暂存区实体的右侧,如下图所示。
移动实体 - 要在模型中移动实体,则用鼠标左键点住该实体,并拖动至你需要的位置。你还可以右键点击并拖动鼠标来旋转此实体。你也可以使用鼠标滚轮,或同时按住鼠标左右键点住该实体并拖动鼠标,可沿z轴方向上下移动该实体。
移动视窗 - 要移动模型的视景观察点,可用鼠标左键点击视窗的一个空白区,并拖动鼠标。要旋转模型视点时,用右键点击空白区并拖动鼠标。要放大或缩小视图时,使用鼠标滚轮或同时按住鼠标左右键并拖动鼠标。
第3步:完成在模型中生成实体
再拖出一个暂存区、一个处理器和一个吸收器实体放到模型中。
第4步:连接端口
下一步是连接端口来安排临时实体的逻辑路径。要连接一个实体的输出端口至另一个实体的输入端口,按住键盘上的“A”键,然后点击第一个实体并按住鼠标左键,拖动鼠标到下一个实体然后放开鼠标键。将会看到拖动出一条黄色连线,放开鼠标键时,会出现一条黑色的连线。
首先,连接发生器到第一个暂存区。然后连接此暂存区和每个处理器。再连接每个处理器到第二个暂存区。然后连接第二个暂存区到检验处理器。然后连接检验处理器到吸收器,并连接到模型前端的第一个暂存区。先连接检验处理器到吸收器,然后到第一个暂存区。现在此模型的连接应如下图所示。
下一步是改变各实体的参数,以使它们按模型的描述来工作。这里从发生器开始一直到吸收器逐个修改参数。
详细设计模型
每个实体有它自己的参数视窗。数据和逻辑会由此视窗添加到模型中。双击一个实体进入该实体参数视窗。
在这个模型中,我们需要让3种不同的产品类型进入系统。要完成这一要求,每个临时实体的类型(见Flexsim术语中“临时实体类型”的描述)将按照均匀分布被随机分配一个1到3之间的整数值。这由发生器的出口触发器来完成。
第5步:给发生器指定临时实体的到达速率
双击该发生器打开它的参数视窗。
所有Flexsim实体都有多个分页(标签页)来代表变量和信息,建模人员可根据模型要求来改变它们。在这个模型中,我们需要改变到达间隔时间和临时实体类型以产生3种类型的产品。在此模型中,产品每5秒到达,按指数分布。发生器默认使用一个指数分布的到达时间间隔,但需要改变其均值。诸如指数分布这样的各种随机分布将被仿真过程采用,可用来对现实系统中发生的变化进行建模。Flexsim提供了一个叫做ExpertFit的工具来帮助你确定何种随机分布与你的实际数据最匹配。在后面的文档中有对分布和如何使用它们的详细解释。在发生器分页中,在到达时间间隔下拉菜单中,点击 按钮。
将打开第二个视窗,来解释其选项,并可编辑该选项的参数。所有以棕色显示的内容都可以改变。
使用此模板你可以改变数值以调整分布,甚至也可以插入一个表达式。对于这个模型,将形数参数值从10改为5。对于一个指数分布,形状参数值就是均值。按确定按钮返回参数页。
第6步:指定临时实体的类型和颜色
接下来要做的是,在临时实体进入系统时为其指定一个类型值。此类型值在1到3之间均匀分布,意思是,进入系统的产品是类型1、类型2、或类型3的可能性都一样。完成该指定的最好的方式是在发生器的离开触发器中改变其临时实体类型。
选择发生器触发器分页。选择离开触发器下拉菜单选择。在下拉菜单中选择“Set Itemtype and Color(设定临时实体类型和颜色)”选项。
选择并改变了临时实体的类型和颜色后,选择摸板按钮 ,可看到如下信息(见下图)。
离散均匀分布与均匀分布相似,只是其返回值不是所给参数之间的实数,而是一个整数。
我们现在完成了发生器的参数编辑,所有默认的棕色内容已经完全如我们所需要的了。点击确定按钮即可接受参数设置并关闭该视窗。
第7步:设置暂存器容量
下一步是详细设置第一个暂存区。这里有两项内容需要设定。首先要设定的是暂存区的容量。第二,希望暂存区的分配方式是将临时实体中所有类型1送至处理器1,类型2送至处理器2,以此类推。
双击第一个暂存区,就会出现其参数视窗。
将最大容量改为10000,这实际上将得到一个无限容量的暂存区。按 按钮。
第8步:指定暂存区的路径分配
选择“临时实体流”分页来设置该暂存区的实体流选项。
在“输出”面板中,在“送往端口”下拉菜单中,选择“By Itemtype (direct)(按临时实体类型(直接))”选项。
由于已经指定了一个临时实体的类型参数等于1、2或3,我们现在可以用临时实体的类型来选定临时实体要通过的端口号。处理器1应被连接至端口1,处理器2应被连接至端口2,处理器3应被连接至端口3。
选择了“By Itemtype (direct)”选项后,按确定按钮关闭该暂存区的参数视窗。
第9步:指定处理器的操作时间
下一步是设置3个处理器的处理时间。
双击第一个处理器,就会出现其参数视窗。
在“处理时间”下拉菜单中,选择“Exponential Distribution(指数分布)”选项,然后按 按钮。默认的形状参数值是10秒。不改变该默认设定。这样,在我们的模型中,每个产品将被平均处理10秒钟,处理时间服从指数分布。
点击确定按钮来关闭模板视窗。到此为止,这是我们要对处理器所做的唯一改变。我们将在后面的课程中采用一些其它选项。点击确定按钮关闭处理器的参数视窗。
对其它两个处理器重复这一步骤。
第10步:详细设置第二个暂存区
现在双击第二个暂存区打开其参数视窗。如同在第一个暂存区中所做的一样,我们需要模拟一个无限容量的暂存区。在“最大容量”域段输入10000。然后按确定按钮关闭视窗。
第11步:设置检验站处理时间
现在需要指定检验站的处理时间和路径逻辑。双击该检验站打开其参数视窗。在“处理时间”分页中“处理时间”菜单下,按 按钮。这将又一次打开解释处理时间的当前选项的模板视窗。改常数时间10为3。这样,在模型中,它将持续3秒(恒值不变)时间来检验产品是否有加工缺陷。
第12步:设置检验站的路径分配
现在需要设置该检验站将劣质产品送回到模型的开始端,将合格产品送到吸收器。在建立该实体的连接时,应首先连接它至吸收器,然后将它连接回第一个暂存区。这个顺序可以使第一个输出端口连接到吸收器,第二个输出端口连接到暂存区。现在,我们想按照某确定的百分比来安排临时实体的路径。
点击该检验站的“临时实体流”分页。在“输出”面板中 “送往端口”下拉菜单下,选择“By Percentage (inputs)(按百分比(输入))”选项。
然后按模板 按钮。这将再次打开选择流经路径策略的视窗。为端口1输入80%,端口2为20%,意思是,将80%的产品,或者说制造合格的产品,从输出端口1输出到吸收器;而将20%的产品,或者说,有制造缺陷的产品,从端口2送回第一个暂存区。
按确定按钮关闭模板视窗。
还有一件可能想要做的事,就是对已通过检验站并已被送回第一个暂存区的实体进行可视化。点击检验站的参数视窗中的“处理器触发器”分页。在离开触发器下拉框中选择 “Set Color(设定颜色)”选项。
按 按钮并输入colorblack作为临时实体要改变成为的颜色。
按确定按钮关闭此模板视窗。然后按检验站参数视窗中的确定按钮关闭之。
模型编译与运行
第13步:编译
到此,已准备好编译,然后可以运行此模型了。
选择主视窗底部的 按钮。
一旦编译过程完成,就准备重新设置并运行此模型。
第14步:重新设置该模型
点击主视窗左下角 按钮。对模型进行重置可以确保所有系统变量被设置回初始值,并将模型中所有临时实体清除。
第15步:运行此模型
选择主视窗底部 按钮。
现在模型应该开始运行了。临时实体应该从第一个暂存区开始移动,进入3个处理器中的一个,然后到第二个暂存区,再进入检验站,并从这里进入吸收器,也有一些被重新发送回第一个暂存区。被发回的实体将变成黑色。
要停止模型运行,可随时按 按钮。后面你将学到如何按特定时间长度和特定重复次数来运行模型。当模型定义中用到随机分布时,多次运行模型是很重要的。
要加快或减慢模型运行速度,可左右移动视窗底部的运行速度滑动条。
移动此滑动条能改变仿真时间与真实时间的比率,它完全不会影响模型运行的结果。
现在已经完成了建模过程。来看一看这个模型产生的一些统计数字。
模型实验
发现瓶颈
在描述系统时通常希望知道系统的瓶颈在那里。这里有几种途径。首先,你可以简单地观察暂存区的长度。如果模型中的一个暂存区一直有很多的产品堆积,这是一个有用的迹象,表明流程在该位置造成了系统的瓶颈。运行该模型时,将注意到第二个暂存区会经常有些产品等待加工,而第一个暂存区的容量通常是20或更少,正如下图所看到的。
另一种发现瓶颈的方法是查看每个过程的统计报表。如果上游的三个处理器总是繁忙,而检验位常常空闲时,瓶颈很可能在三个处理器上。反之,如果检验站总是很忙,上游的处理器总是空闲,则瓶颈可能是在检验站上。
运行此模型至少50000秒。然后停止模型,右键点击并选择属性来打开3个处理器中第1个的属性视窗。
选择统计分页。然后选状态分页。这将显示出实体的时间处于每个状态的百分率的饼图。
饼图表明这一工序的空闲时间占仿真时间的17. 3% ,而处理时间占%。关闭这一视窗,然后右键点击另两个处理器中的一个,再次进入它们的属性视窗,它们将有类似的结果。
在检验站点击右键,打开它的属性视窗。检验站的状态饼图如下。
可以注意到,在仿真运行过程中,%的时间检测器是在工作。由这些不同状态的图可以得知,很明显瓶颈为检验站,而不是这3个处理站。
现在已经图示出瓶颈的位置了,问题是下一步应该怎么办呢?这取决于一些有关成本与获利的对比因素,还有设施的未来目标。在将来,是否这些设备需要具备以更快的速度处理更多产品的能力?在模型中,平均每5秒制造一个产品。检测器平均每5秒送一个成品到吸收器。这个平均5秒的值,是可以通过4秒的检验周期和80/20的发送策略来计算得到的。这样,在全部时间中,模型的总能力下降。如果工厂要开始在这部分设备中处理更多的产品,也就是说发生器有更高的到达速率(更低到达时间间隔)。那么如果不改变检测器,模型将持续积聚更多的部件,暂存区的容量将持续增加,直到没有剩余空间。所以要修改这里,必须增加第二个检验站,因为它是模型的瓶颈。
如果检验站的暂存区大小很重要,这成为另一个再增加一个检验站的原因。如果检验站暂存区积聚很高的数量意味着成本很大,那么增加第2个检验站将是明智的,这将确保暂存区大小,以及每个产品在该暂存区中的等待时间不会太高。来看一下该暂存区的统计数据。
右键点击该检验站暂存区,并选择属性。点击统计分页,并查看常规页。如下所示。
继续运行此模型,将会注意到这些数值随着仿真运行而改变。查看平均当前数量和平均逗留时间数值。逗留时间指临时实体在暂存区中停留的时间。在此仿真的前期,暂存区的平均数量通常较低,但随着仿真继续,它将达到较高的数值如200或300。如果200或300的平均暂存区大小是无法承受的,那么就有必要增加第2个检验站。
随机性
在决定增加另一个检验站之前,先来做一些测试。既然一个来自发生器的产品平均每5秒到达,而且平均每5秒一个产品到达吸收器,那么为什么暂存区会有的产品积聚呢?产品以其到达的速度离开,这样在系统中似乎不应该有任何积聚。
暂存区堆积的原因是系统的随机性。是的,平均每5秒到达一个产品,但这个到达率是基于指数分布的。指数分布中5为平均值,在多数时间里产品实际将以比每5秒更快的速度到达。但每隔一会都会有一段较长的时间没有产品到达。最后平均计算的到达率为5秒,但通常产品到达得更快,这样将会堆积在检验站的暂存区中,因为检验站为瓶颈。
假如,在设备中,产品实际不是以指数分布,而是以更加平稳的速度到达?暂存区大小是否将会停留在一个较低的级别?让我们来测试一下。
双击发生器打开它的参数视窗。在到达时间间隔时间下拉菜单中,选择正态分布。
点击模板 键打开一个视窗来编辑此功能。输入一个平均为5、标准偏差为的正态分布
在模板视窗中按确定,并在参数视窗中按确定。现在按 键来再次编译此模型。重置并再次运行该模型。 如果仍未打开暂存区的属性视窗,右键点击暂存区来再次打开它并选择属性。继续运行此模型。你将注意到暂存区的平均容量和平均逗留时间不会很高。现在通常它们不会高过50或60,而以前它们有时候会高至200或300。这是一个显著的改进,而且它只是由改变模型的随机性而引起的。
更高的吞吐量
现在如果设施的确需要增加15%的系统产出率。这相当于改变一个发生器的平均到达时间间隔从5秒到秒。由于检测器被100%利用,我们明显需要在系统中增加第2个检测器让我们来进行改变。
再次双击发生器来打开它的参数视窗。点击模板 键选择到达时间间隔。改变正态分布的平均值从5到。在模板视窗中点击确定。在发生器参数视窗中点击确定。
现在我们将生成第2个检测器。拖拽另一个处理器实体进入模型,放在第一个检测器下面。双击它并设置它的处理时间为持续4秒,就象原先的检测器一样。然后用”A”拖拽连接检测器暂存区的输出端口至新的检测器,然后连接新检测器输出端口至吸收器,和上游暂存区。
在新检测器的临时实体流页中,在发送至端口选项中选择百分率(输入),然后用 键打开模板视窗。输入80%至端口1,20%至端口2。
现在我们已经完成所做的改变,我们可以编辑,重置,并再次运行模型。
评估新的配置
现在运行此模型至少50,000秒。首先注意到检验站暂存区现在几乎总是空着,而3个处理器的暂存区却经常堆积。现在让我们看看原检测器的饼形图。右键点击原检测器并选择属性。进入统计分页,然后进入状态分页。这应该显示出原先的检测器现在仅仅在67%的时间中为繁忙,因为现在这里有第2个检测器。
点击确定来关闭属性视窗。现在点击新检测器并进入它的状态饼形图。它仅在50%的时间内繁忙,比原检测器少。
区别的原因是检验站暂存区发送至第一个空闲的检测器。无论何时两个检测器均为空闲,产品将总是进入原先的检测器,因为它是首先空闲的。产品只在原先检测器已经繁忙时才进入第2个检测器。这样,原先的检测器的利用率比第2个更高。
在第2个检测器的属性视窗中点击确定。现在进入3个上游处理器中的一个 ,右键点击它并选择属性。进入它的状态饼图。注意到该处理器的利用率现在已经几乎达到100%。
现在已经有效地把系统的瓶颈从检测器移动到3个处理器。并且,通过利用增加15%的产量,和加入第2个检测器,已经显著地降低了每个检测器的利用率。此决策是否是一个合理的决策,很大程度取决于增加第2个检测器的花费。现在,由于瓶颈在3个处理器中,为了将来增加产量,并由此增加每个检测器的利用率,可能需要增加更多的处理器。当然,这再一次取决于花费和获益的分析。
结果
通过生成一个模型来仿真系统,已经明确如何对系统做何有效的决定。现在可以使用从仿真中收集的这些信息来对工厂的将来作出更好的决定。
对于这个简单模型,从数学模型和公式中也可以作出许多相同的结论。然而,真实的模型经常会比我们建立的模型复杂得多,并超出数学模型的范围。使用Flexsim仿真,我们可以和上面的例子一样模拟这些实际生活中的复杂性问题,并测试结果。
Flexsim还给予仿真更多的视觉魅力。它有效帮助管理团队作出明智的决策,因为管理团队可以在实际的3D世界里看到决定的影响。这个3D世界将随着建立Flexsim模型而自动产生。
下一步是什么?
现在已经熟悉了Flexsim和仿真的应用,建议用户完成Flexsim帮助中包含的其他教程。
教程
本基础教程将带你一起完成建立过程流、创建模型、输入数据、查看动画、以及分析输出结果的各个步骤。每一节课都是基于上一节内容的,所以学完一节课要消化它,才能进入下一节课。每节课大约需要至少45分钟的时间。在第二课的最后还包括一个提高环节,可以为你的模型增色。本教程包括下列课程;
第一课:建立一个处理3种不同临时实体类型的简单模型。每种临时实体的路径都不同。本模型中使用的实体包括发生器、暂存区、处理器、输送机和吸收器。对模型表现的基本统计做了介绍,也介绍了每一实体的参数选项。
第二课:使用第一课中建立的模型。用户添加操作员和运输机。介绍实体的属性界面,进一步讨论附加统计分析。
第二课提高内容:完成第二课之后,介绍如何使用记录器实体向模型添加3D图表和图形。同时也介绍了如何使用可视化工具添加3D文本。
第三课:使用第二课中的模型,用户将要添加货架和网络路径。将会添加高级统计功能和模型逻辑编程功能。同时也将使用表来读取和写入数据。
每一课将会按照下列格式:
介绍
本课学习内容
估计完成时间
模型描述
模型数据
Flexsim软件概念学习
逐步模型构建
如果学习此课程有任何问题,请联系我们的技术团队。Flexsim技术支持的电话是 801-224-6914(美国),或者发邮件到 support@. 希望你在学习如何使用flexsim来优化你们的流程的过程中感到愉快。
重要提示:你必须在电脑上安装Visual C++.NET编译程序,否则此Flexsim软件将不会正确工作。flexsim评估版本附带的编译器并不具备与Microsoft Visual C++零售版本同样的能力。如果你没有Visual C++ .NET,在购买 Flexsim软件时,你可以选择捆绑购买Visual C++和Flexsim软件。
第1课
简介
第1课介绍了图示与建立简单模型的基本概念。在Flexsim中开始建立每个模型的好方法是先画一个图示。如果不能建立一个图示、流程图,甚至不能至少在脑子中勾画出处理过程是如何工作的画面,那么使用Flexsim建立模型将会遇到重重困难。
注释:如果你已经学习完了起步部分的指导内容,那么本课中学到的很多概念对你来说就不是新的。然而,因为后面的课程将建立在本课的基础上,所以最好还是复习一遍。
本课学习内容
如何建立一个简单布局
如何连接端口来安排临时实体的路径
如何在Flexsim实体中输入数据和细节
如何编译模型
如何操纵动画演示
如何查看每个Flexsim实体的简单统计数据
新实体
在本课中将学习发生器、暂存区、处理器、输送机和吸收器实体。
预计完成时间
完成本课大约需要30-45分钟。
Flexsim软件概念学习
Flexsim 术语
在开始建立此模型前,先来理解一些本软件的基本术语将会有帮助。
Flexsim实体:Flexsim实体模拟仿真中不同类型的资源。暂存区实体就是一个例子,它扮演储存和缓冲区的角色。暂存区可以代表一队人、CPU上一个空闲过程的队列、工厂中地面上的一个储存区或客户服务中心的一队等待的呼叫等等。另一个Flexsim实体例子是处理器实体,它模拟一段延迟或一个处理过程的时间。这个实体可以代表工厂中的一台机器、一个正在给客户服务的银行出纳员、一个邮政分检员,等等。
Flexsim实体放在对象库栅格中。对栅格进行了分组管理,默认显示最常用的实体。 临时实体:临时实体是流经模型的实体。临时实体可以表示工件、托盘、装配件、文件、集装箱、电话呼叫、订单或任何移动通过仿真过程的对象。临时实体可以被加工处理,也可以由物料处理设备传输通过模型。在Flexsim中,临时实体由发生器产生,在流经模型之后被送到吸收器中。
临时实体类型:临时实体类型是一个放在临时实体上的标志,它可以代表条形码号、产品类型
或工件号等等。在临时实体寻径中,Flexsim使用实体类型作为引用。
端口:每个Flexsim实体的端口数没有限制,通过端口它们可以与其它的实体通信。有三种端口类型:输入端口、输出端口和中间端口。
输入和输出端口用于临时实体的寻径。例如,一个邮件分拣员依靠包裹上的目的地把包裹分放到几个输送机中的一个上面。为了在Flexsim中进行仿真,连接处理器实体上的输出端口到几个输送机实体的输入端口,这意味着当一个处理器(或邮件分拣员)完成临时实体(包裹)的处理后,就通过它的一个输出端口将其发送到一个特定的输送机上。
中间端口用来建立从一个实体到另一个实体的引用。中间端口的一个惯常用法是引用可移动实体,如从设备、暂存区或输送机等引用操作员、叉车、或者起重机。
端口的建立和连接是通过按住键盘上的不同字母键,并用鼠标点击一个实体,并拖曳到另一个实体上完成的。当按住左键并拖曳鼠标时,如果同时按住“A”键,就可以在第一个实体上建立输出端口,并在另一个实体上建立输入端口。这样两个新端口就自动连接起来。如果按住“S”键,将在两个实体上都建立一个中间端口,并把这两个新端口连接起来。拖曳鼠标并同时按下“Q”键可以删除输入输出的端口和连接,按下“W”键可以删除中间端口和连接。下表说明了用于连接和断开两种端口连接的键盘字母。教程的第1课示范了如何正确建立端口连接。
输入-输出
中间
断开
Q
W
连接
A
S
模型视图:: Flexsim 应用3D建模环境。建模时默认的模型视图叫做正投影视图。你也可以在一个更真实的透视视图中查看模型。尽管透视视图表达的更真实,但是通常在正投影视图中更容易建立模型布局。当然,任一视图都可以用来建立和运行模型。Flexsim允许根据需要打开多个视图视窗。不过请记住,当打开多个视窗时会增加对计算机资源的需求。
模型1 描述
在第一个模型中,我们将研究三种产品离开一个生产线进行检验的过程。有三种不同类型的临时实体将按照正态分布间隔到达。临时实体的类型在类型1、2、3三个类型之间均匀分布。当临时实体到达时,它们将进入暂存区并等待检验。有三个检验台用来检验。一个用于检验类型1,另一个检验类型2,第三个检验类型3。检验后的临时实体放到输送机上。在输送机终端再被送到吸收器中,从而退出模型。图1-1是流程的框图。
图1-1 模型1流程框图
模型1数据
发生器到达速率:normal(20, 2)秒
暂存区最大容量:25个临时实体
检验时间:exponential(0, 30)秒
输送机速度:1米/秒
临时实体路径:类型 1到检验台 1,类型2 到检验台 2,类型3到检验台3。
建模步骤
建立第一个模型
为了检验Flexsim软件安装是否正确,在计算机桌面上双击图标打开应用程序。软件装载后,将看到Flexsim菜单和工具按钮、库、以及正投影视图的视窗。
步骤1:从库里拖出一个发生器放到正投影视图中,如图1-2所示:
图 1-2
步骤2:把其余的实体拖到正投影视图视窗中,如图1-3所示:
图1-3 完成后,将看到这样的一个模型。模型中有1个发生器、1个暂存区、3个处理器、3个输送机和1个吸收器。
步骤3:连接端口
下一步是根据临时实体的路径连接端口。连接过程是:按住“A” 键,然后用鼠标左键点击发生器并拖曳到暂存区,再释放鼠标键。拖曳时你将看到一条黄线(图1-4),释放时变为黑线。(图1-5)。
图1-4 拖曳时出现的黄线
图1-5 释放后得到的黑线
连接每个处理器到暂存区,连接每个处理器到输送机,连接每个输送机到吸收器,这样就完成了连接过程。完成连接后,所得到的模型布局应如图1-6所示。
图1-6 完成端口连接
下一步是根据对实体行为特性的要求改变不同实体的参数。我们首先从发生器开始设置,最后到吸收器结束。
详细定义模型
每个实体都有其特有的图形用户界面(GUI),通过此界面可将数据与逻辑加入模型中。双击实体可打开叫做参数视窗的GUI。
对于这一模型,我们想要有三种不同的产品类型进入系统。为此,将应用发生器的“离开触发器”为每个临时实体指定一个1到3 之间的均匀分布的整数值,来作为实体类型。
步骤4:指定到达速率
双击发生器键打开其参数视窗(见图1-7)。
图1-7 发生器参数视窗
所有的Flexsim实体都有一些分页或标签页,提供一些变量和信息,建模人员可根据模型的需求来进行修改。在这个模型中我们需要改变到达时间间隔和实体类型来产生3种实体。根据模型描述,我们要设定到达时间间隔为normal(10,2)。现在,按下到达时间间隔下拉菜单中的箭头,选择“正态分布”选项(图1-8)
图1-8
该选项将出现在视窗里。如果要改变分布的参数,则选择模板 按钮,之后可以改变模板中任何灰褐色的值。
选择模板按钮
将看到这一视窗(图1-9):
图 1-9
可以使用模板改变数值来调整分布,甚至可以插入一个表达式。在本模型中改变10为20。按确定键返回到参数视窗。
下面我们需要为临时实体指定一个实体类型,使进入系统临时实体的类型服从以1到3之间的均匀分布。最好的做法是在发生器的“离开触发器”中改变实体类型 。
步骤5:设定临时实体类型和颜色
选择发生器触发器分页(图1-10)。在“离开触发器”框中,选择“Set Itemtype and Color(设定临时实体类型和颜色) ”以改变临时实体类型和颜色。
图 1-10
在选定改变临时实体类型和颜色的选项后,按模板键 ,可以看到下列信息(图1-11):
图 1-11
离散均匀分布与均匀分布相似,但返回的不是给定的参数之间的任意实数值,而是离散整数值。
点击本视窗和发生器参数视窗的确定键。
下一步是详细设定暂存区参数。由于暂存区是在临时实体被处理器处理前存放临时实体的场所,因此需要做两件事。首先,需要设定暂存区最多可容纳25个临时实体的容量。其次,设定临时实体流选项,将类型 1的实体发送到处理器1,类型2的实体发送到处理器2,依此类推。
步骤6:设定暂存区容量
双击暂存区打开暂存区参数视窗(图1-12)
图 1-12
改变最大的容量为25。选择 按钮。
步骤7:为暂存区指定临时实体流选项
在参数视窗选择临时实体流分页来为暂存区指定流程
在“发送到端口”下拉菜单中选择“By Itemtype (direct)(按实体类型(直接))”(图1-13)。
图 1-13
由于我们已经分配实体类型号为1、2、3,我们就可以用实体类型号来指定临时实体通过的端口号。处理器1应连接到端口1,处理器2应连接到端口2,依此类推。
选定了“By Itemtype (direct)”之后,点击确定按钮关闭暂存区的参数视窗。
下一步是设定处理器的时间参数。
步骤8:为处理器指定操作时间
双击处理器1,打开处理器1的参数视窗(图1-14)。
图 1-14
在“ 处理时间”下拉菜单中,选“Exponential Distribution(指数分布)”。其默认的时间是10秒,因此,这里需要改变,改变的方法是选择模板按钮 (见图 1-15).
图 1-15
将形状参数(scale value)改为30。这里指数分布的形状参数恰好是均值。按确定按钮关闭视窗。这仅仅是这一次对处理器所做的改变,今后的课程中还要考察一些其它的操作。按确定按钮关闭处理器参数视窗。
对其它的处理器重复上述过程。
因为输送机的默认速度已经设为每时间单位为1,所以这次不需要修改输送机的速度。
现在可以编译和运行模型了。
步骤9:编译
图1-16 主视窗上的运行控制按钮
按主视窗的 按钮。完成编译过程后就可以运行模型了。
步骤10:重置模型
为了在运行模型前设置系统和模型参数的初始状态,总是要先点击主视窗底部的 键。
步骤11:运行模型
按 按钮使模型运行起来。
可以看到临时实体进入暂存区,并且移动到处理器。从处理器出来,实体将移动到输送机,然后进入吸收器。你可以通过主视窗的速度滑动条改变模型运行的速度。
步骤12:模型导航
当前,我们是从正投影视图视窗中观察模型的。让我们从透视视图中来观察它。选择正投影视图视窗视窗右上角的X来关闭它。选择工具条上的 按钮打开透视视图(图1-17)。
鼠标导航
鼠标左键:在X-Y平面内移动模型。在一个实体上按住左键,然后移动鼠标可以在X-Y平面内移动该实体。
鼠标右键:X,Y,Z轴旋转。在实体上按右键,然后移动鼠标则可以旋转此实体。
鼠标左右键(或鼠标滚轮):通过向前和向后旋转鼠标轮可以轻松地调整镜头的远近。如果有一个实体被当前选中,则将会改变它的Z向高度。如果鼠标有滚轮,则可以转动鼠标滚轮代替鼠标左右键同时点击。
F7键: F7键可启动飞行俯瞰模式。在飞行俯瞰模式下,鼠标指针在视窗中心线上方时图形向上移动,鼠标在中心线下方时图形向下移动,鼠标在中心线左边时,图形向左旋转,鼠标在中心线右边时图形向右旋转,欲退出飞行俯瞰模式时按F7键。这种方式需要通过一些练习才能掌握。如果模型丢失,可以按F7键停止飞行俯瞰模式,并按右键选择下拉菜单中的Reset View键重新找到要观察的模型。
图 1-17
步骤13:查看简单统计数据
图 1-18
为了观察每个实体的简单统计数据,选择视窗上的设置菜单,取消对“隐藏名称”选项的选择。正投影视图的默认状态是显示名称的,而透视视图在默认状态下是隐藏名称的。
步骤14:保存模型
可使用“文件 >模型另存为...”来保存模型。
现在已经完成了第一课。在模型运行的时候,花些时间来回顾一下各个步骤并观察一下模型。恭喜你!
如要继续学习本教程,请进入第二课。
第2课
简介
第2课介绍了向一个模型中加入操作员和输送机的概念,并更详细、深入地介绍了实体属性与参数。另外第2课还介绍了图形化统计结果输出功能。请在已完成第1课的基础上开始第2课,因为第2课将以第1课中的模型作为起点。
你将学到
如何访问实体参数和属性;
如何向模型中加入一组操作员;
如何向模型中加入叉车运输机;
如何选择一个实体进行统计;
如何打开统计数据收集;
如何在模型运行中观察实体统计数据;
新实体
本课将介绍分配器、操作员和运输机实体。
预计完成时间
完成本课大约需要30-45分钟。
Flexsim软件概念学习
实体属性和参数
现在更系统地介绍实体属性和参数视窗。每个Flexsim实体都有一个属性视窗和一个参数视窗。作为一个建模人员,你需要彻底理解实体属性和实体参数的不同。要访问属性,右键点击模型视窗中的一个实体并选择属性(见图2-2)。
图2-2 右键点击模型视图中的一个实体时出现的菜单
实体属性
每个Flexsim实体的属性都是相同的。在属性中有4个分页:视景、常规、标签和统计。每个分页包含所选的Flexsim实体的附属信息。
常规属性:常规属性分页包含实体的常用信息,如名称、类型、位置、端口连接、显示标记和使用者描述(见图2-3)。
图2-3 常规属性
视景属性:视景分页允许建模人员指定视觉特性,如3D形状、2D形状、3D纹理、颜色、位置、尺寸、转角和用户绘图代码。位置、尺寸和转角反映实体的当前属性(见图2-4)。建模人员可在相关字段中修改这些属性值,也可以在模型界面视窗中用鼠标来改变这些属性。
图2-4 视景属性
标签属性:标签分页显示用户定义的给实体指定的标签。标签是建模人员用来存放临时数据的一种机制。一个标签有两部分,名称和标签值。名称可以任意命名,标签值可以是数字或文字数字(包含文字和数字的字符串)。如需添加一个纯数字标签,点击底部的 “添加数字标签”按钮。同样地,如果需要一个标签保存数字和字母,则点击“添加字符串标签”按钮。然后可用该表修改此标签的名称和标签值。
也可以在模型运行中动态地更新、创建或删除标签。此分页将显示所有标签和它们的当前值。所有信息在模型运行中实时显示。这些信息对建模人员测试逻辑、调试模型很有帮助。
图2-5 标签属性
统计属性:统计分页显示实体上收集到的默认统计信息。此信息在模型运行中动态地更新显示。当选择此分页时,将出现4个附属分页(见图2-6)。
图2-6 统计属性
统计常规属性:显示实体的当前数量、停留时间、状态和吞吐量等基于时间的统计结果。“设置”选项允许用户确定显示在当前数量和停留时间图表中的数据个数。
统计状态属性:状态属性图表显示实体的各种状态占总时间的百分比(见图2-7)。
图2-7 状态图表
状态图表在模型运行中动态地更新。也可选择常规属性统计分页中的图表按钮,即可显示带有图表视图的独立视窗。
统计当前数量属性:当前数量属性图表显示实体当前数量随时间的变化(见图2-8)。要生成此图表需打开 “统计收集”。
图2-8 当前容量图表
当前容量图表在模型运行中被动态更新。从常规属性统计分页中选择图表按钮,将显示带有此图表视图的独立视窗。
统计停留时间属性:停留时间属性图表显示一个临时实体停留时间的柱状图(见图2-9)。要生成此柱状图需打开 “统计收集”。
图2-9 停留时间柱状图
在模型运行中停留时间柱状图动态更新。在常规统计分页中选择图表按钮,将显示一个带有图表视图的独立视窗。
注释:要查看仿真报告、当前数量图表和停留时间柱状图,建模人员必须打开该实体的统计收集选项。由于历史数据储存需要大量硬盘空间,因此历史记录统计是默认关闭的。需要按照下列步骤打开 “统计收集”.
第1步:选择实体进行统计
需在模型视窗中选择你想要进行统计记录的实体。按住键盘“Shift”键,拖动鼠标框选要进行统计的实体实现此步骤(见图2-10)。按住“Ctrl”键,然后点击一个实体,可以添加到选定集合中,或者从集合中删除。
图2-10 按“Shift”或“Ctrl”键拖动鼠标来选择
一旦一个实体被选中,会有一个红色方框将其框住(图2-11)。
图2-11 选中的实体
第2步:开始统计
要收集所选实体的历史统计记录,点击统计 > 统计收集 > 选定对象打开,并确认已选中“全局打开”(图2-12)。
图2-12 “所选实体打开” 和“全局打开”
打开“统计收集”后,将有一个绿色方框框住正在被记录历史统计的实体(见图2-13)。可以选择“统计>统计收集>隐藏绿色指示框”来关闭绿色方框的显示(见图2-14)。
图2-13 打开历史记录统计的选定实体
图2-14 隐藏绿色指示框
现在可以运行此模型,并可收集已选定实体的历史统计记录了。
实体参数
实体的参数根据所选的实体不同将稍有区别。由于每个实体在模型中都有特定的功能,因此必须使参数个性化以允许建模人员能够尽可能灵活地应用这些实体。所有实体的有些分页是相似的,而另一些分页对该实体则是非常特殊的。关于每个实体所有参数的特定定义可参见Flexsim实体库。双击一个实体可访问该实体的参数。参数的版面如图2-15所举示例。
图2-15 参数
到此为止,Flexsim软件相关概念部分的学习结束了,下面开始建立模型2。
模型2 描述
模型2中将采用一组操作员来为模型中的临时实体的检验流程进行预置操作。检验工作需要两个操作员之一来进行预置。预置完成以后,就可以进行检验了,无需操作员在场操作。操作员还必须在预置开始前将临时实体搬运到检验地点。检验完成后,临时实体转移到输送机上,无需操作员协助。
当临时实体到达输送机末端时,将被放置到一个暂存区内,叉车从这里将其拣取并送到吸收器。观察模型的运行,可能会发现有必要使用多辆叉车。当模型完成后,查看默认图表和曲线图并指出关注的瓶颈或效率问题。图2-1是模型2的流程图。
图2-1 模型2图示
模型2 数据
检测器的预置时间:常数值为10秒
产品搬运:操作员从暂存区到检测器。叉车从输送机末端的暂存区到吸收器。
输送机暂存区:容量=10
建模步骤
建立模型2
请首先装载前一课建立的模型1 ,然后开始建立模型2。
步骤1:装载模型1并编译
选用工具条上的打开按钮来装载模型1。选择第1课中存储的模型1的文件(.fsm file)。装载后,按下工具条上的编译按钮。切记,在运行模型前必须进行编译。
步骤2:向模型中添加一个分配器和两个操作员
分配器用来为一组操作员或运输机进行任务序列排队。在该例中,它将与两个操作员同时使用,这两个操作员负责将临时实体从暂存区搬运到检测器。从库中点击相应图标并拖放到模型中,即可添加分配器和两个操作员,如图2-16所示。
图2-16 添加分配器和操作员
步骤3:连接中间和输入/输出端口
暂存区将要求一个操作员来拣取临时实体并送至某个检测器。临时实体的流动逻辑已经在第1课中的暂存区设置好了,无需改变。只需请求一个操作员来完成该任务。由于我们使用两个操作员,我们将采用一个分配器来对请求进行排队,然后选择一个空闲的操作员来进行这项工作。如果我们只有一个操作员,就不需要分配器了,可以直接将操作员和暂存区连接在一起。
为了使用分配器指挥一组操作员进行工作,必须将分配器连接需要操作员的实体的中间端口上。若要将分配器的中间端口连接到暂存区,则按住键盘上的“S”键然后点击分配器拖动到暂存区(见图2-17)。
图2-17 按“S”键并点击拖动
释放鼠标,就建立了一个从分配器中间端口到暂存区中间端口的连接(见图2-18)。
图2-18 中间端口连接
中间端口位于实体底部中间位置。很明显它并非输入或输出端口。
为了让分配器将任务发送给操作员,须将分配器的输出端口与操作员的输入端口连接。实现方法是,按住键盘“A”键并点击分配器拖动到操作员,如图2-19所示。必须对每个操作员进行此操作。连接如图2-20所示。
图2-19 “A”键点击拖动
图2-20 分配器输出端口连接到操作员输入端口
步骤4:编辑暂存区临时实体流设置使用操作员
下一步是修改暂存区临时实体流属性来使用操作员完成搬运任务。可以双击暂存区打开参数视窗完成上述修改。视窗打开后,选择“临时实体流”分页。选择 “送往端口”下拉菜单下面的“使用运输机”复选框(图2-21)。
图2-21 选中“使用运输机 ”复选框
当选择了“使用运输机”后将激活一个“按下列请求运输工具”的新下拉菜单。这个下拉菜单将根据端口号来选择运输机或操作员去搬运临时实体。在本例中,它被连接到分配器,由分配器将任务分配给操作员。选择“确认 ”按钮关闭视窗。
步骤5: 编译、保存模型,和测试运行
现在运行模型来确认我们所做的改变是否生效。在开始运行前首先要进行。编译完成后,重置模型,然后按按钮保存此模型。
运行模型来验证操作员正在从暂存区搬运临时实体到检测器。
步骤6:为检测器的预置时刻配置操作员
为了使检测器在预置时使用操作员,必须连接每个检测器的中间端口和分配器的中间端口。操作是:按住键盘“S”键点击分配器拖到检测器释放。完成后,端口将如图2-22所示。
图2-22 分配器与每个检测器中间端口的连接
现在我们需要为检测器定义预置时间。双击第一个检测器打开其参数视窗(图2-23)。
图2-23
在“预置时间” 下拉菜单中选择“Constant Value(常数值)” 选项,然后按 键来打开代码模板视窗,将时间改为10(见图2-24)。
图2-24
点击“确认”按钮关闭代码模板视窗。点击主页中的 “应用” 保存此改变。然后打开“操作员”分页。
选择“使用操作员进行预置”旁的复选框。选择后,将会看到“操作员数量”编辑区和“选取操作员”下拉菜单可用。预置所需的操作员数量为1,“ 选取操作员”的被选内容应设置为中间端口1,如图2-25所示。
图2-25
点击“确认”按钮保存此改变并关闭视窗。对模型中的每个检测器重复此步骤。然后编译、重置,并运行模型以确认在预置时间期间确实使用了操作员。
模型的下一步是添加输送机暂存区,并重新连接输入和输出端口。
步骤7:断开输送机到吸收器的端口间连接
应在添加输送机暂存区前断开输送机和吸收器之间的输入输出端口连接。操作是:按住键盘“Q” 键点击输送机拖动至吸收器。
端口被断开后,从库中拖一个暂存区放置在中间那个输送机的末端。然后连接输送机的输出端口至暂存区的输入端口,操作为:按住“A”键点击每个输送机拖动至暂存区。然后用同样的操作连接暂存区的输出端口至吸收器。完成后,模型的布局应如图2-26所示。
图2-26 连接完成
现在已修改了模型布局,并创建了端口连接,可以添加叉车了。
步骤8:添加运输机
在模型中添加叉车,来将临时实体从输送机暂存区搬运到吸收器,这和添加操作员来完成输入暂存区到检测器之间的临时实体搬运是一样的。由于此模型中只有一辆叉车,所以不需要使用分配器。直接将叉车连接到暂存器的一个中间端口。
从库中拖出一个叉车输送机放置到模型视窗中(图2-27)。
图2-27
添加叉车后,将暂存区的中间端口连接到此叉车。按住键盘“S”键点击暂存区拖动到叉车。
完成后,模型应如图2-28所示。
图2-28
步骤9: 调整暂存区的临时实体流参数来使用叉车
下一步是调整暂存区的临时实体流参数来使用此叉车。双击暂存区打开其参数视窗(图2-29)。
图2-29 暂存区的“使用运输机”复选框
选择“临时实体流”分页并选中“使用运输机 ”复选框。暂存区的中间端口1已经被连接上,因此无须其它调整。点击“确认”按钮关闭视窗。
点击 。模型编译完成后,重置并保存模型。
步骤10:运行模型
这一步是建立本模型的收获部分,现在可以检验此模型是否如你所愿地运行。在模型运行中,可使用动画显示来直观地检查模型,看各部分是否运行正常(图2-30)。
图2-30 运行模型
应能看到操作员来回走动,叉车在暂存区和吸收器之间搬运临时实体。
可注意到当一个检测器在等待操作员进行预置时,一个黄色的方框显示在检测器下。
步骤11:输出分析
使用在前面课程中讲到的如何打开统计收集的说明,在属性视窗中查看实体的统计数据。通过观察动画显示和图表(图2-31),判断此模型是否有瓶颈?
图2-31 仿真运行时的各种图表
运行表明如果添加一个或更多操作员,模型运行更好。当添加第三个操作员时,尽管临时实体仍然会在输入处的暂存区中堆积,但却可能是系统的最佳配置。
从库中拖出一个图标即可再添加一个操作员。按住“A”键点击拖动,连接分配器与操作员。编译、重置、保存,然后运行。第2课到此结束。祝贺你!你要进入本课进阶部分的学习吗?太好了!更上一层楼!
要继续学习教程,请参看第2课 进阶。
第2课 进阶
简介
本部分用来指导建模人员如何添加一些额外的东西来在模型运行中显示数据和信息。在本课中,将学习如何添加3D图表和图形,如何显示在第2课中完成的模型中的3D文本。
本课学习内容
如何添加一个3D曲线图来显示暂存区的当前数量
如何添加一个3D柱状图来显示暂存区的等待时间
如何添加一个3D饼图来显示每个操作员的状态分布
如何添加一个3D可视化文本来显示输送机暂存区的平均等待时间
如何安排曲线图、图表、文本的位置以取得最好视觉效果
新实体
在本课中,将介绍可视化工具和记录器实体。
预计完成时间
完成本课大约需要20-30分钟。
建模步骤
建立模型 2 进阶
要开始建立进阶模型2,需要从上一课中装载模型2。
步骤1:装载模型2并编译
步骤2:将模型另存为“Model 2 Extra Mile”,并打开统计收集选项
找到菜单选项“文件>另存为”将模型用一个新名称保存。在开始进行修改前,确保已经采用菜单选项“统计 >统计收集>所有实体打开”为所有的实体打开了统计收集选项。要显示柱状图和当前数量图(见第2课,Flexsim 相关概念一节)就必须打开统计收集选项。
步骤3:添加一个记录器来显示暂存区的当前数量
从库中拖出一个记录器放到发生器实体的左上方,如图2-32所示。
图 2-32
步骤4:调整记录器的参数来显示暂存区的满意的曲线图
在记录器实体上双击打开它的参数视窗,如图2-33所示。
图 2-33 记录器参数
按下数据捕捉设置按钮。在数据类型域段中,选择“标准数据”选项。然后在实体名称域段的下拉菜单中选择那个暂存区。在 “选择捕捉数据”域段中,选择“当前数量”(见图2- 34)。
图 2-34 捕捉数据选项
点击“向前”按钮。
步骤5:设定记录器的显示选项
现在,在记录器视窗上选择显示选项按钮(见图2-33)。在“图形名称”域段中,键入名称“Queue Content Graph(暂存区当前数量曲线图)”(见图2-35)。这是一个用户定义的域段,用来定义图形的标题。可以在这里键入任意想要的名称。完成后按完成按钮。
图 2-35 标准显示选项
步骤6:调整图形的视景属性
图形的视景属性可以在属性视窗中进行编辑,右键点击记录器并选择属性选项可以打开属性视窗(见图2-36)。
图 2-36 选择属性视窗
在默认情况下,图形是平放在模型地板上的。如果将图表旋转90度直立起来视觉效果将会很好。改变记录器的旋转和高度参数就可以实现(见图2- 37)。
图 2-37 记录器属性
将“Z”(位置)改为,将“RX”(X转角)改为90。这将会把图表旋转直立起来,而设定的高度将图表的底部处于地板上(见图2-38)。
图 2-38 调整当前数量图形
编译模型后,进行重置,并运行,现在应该看到图形显示了暂存区的当前数量随时间变化的情况。如果没有显示,可能需要从“统计>统计收集>所有实体打开”菜单中打开统计历史数据选项。
步骤7:添加一个记录器来显示暂存区的停留时间柱状图
按照和添加当前数量曲线图一样的步骤,往模型中添加一个记录器作为停留时间柱状图。唯一的区别是,在记录器参数的“选择捕捉数据 ”中应该选择“停留时间”选项(见图2-39)。
图 2-39 选择“停留时间”选项
将记录器放在紧挨着当前数量曲线图的右边。像步骤6中那样选择属性,旋转图形,改变高度位置。然后编译、重置并运行,应该看到像图2-40一样的图形。
图 2-40 当前数量和停留时间图形
步骤8:为每个操作员添加一个状态饼图
按照步骤3-5的同样的程序为每个操作员添加一个状态饼图。唯一的不同是在选择捕捉数据域段中选择“状态”选项(见图2- 41)。
图2-41 选择“状态”选项
从属性视窗中将两个图形都调整为5×5的大小(见图2-42)。
图 2-42 将图形的尺寸设定为 "SX" 5 和 "SY" 5
让两个饼图平放在地板上。不需要改变它们的转角值。然后编译、重置并运行,应该看到像图2-43所示的那样的饼图。
图2-43 操作员1和操作员2的状态饼图
步骤9:给模型添加3D文本
另一种往模型中添加信息来在模型运行中显示绩效指标的方式是,在模型布局的某些战略点上放置3D文本。采用可视化实体,在视景显示中选择 “文本”选项就可以实现此操作。在这个模型中,将要添加一个3D文本来显示“Conveyor Queue”中的临时实体的平均等待时间。
拖出一个可视化工具实体到模型中,并放置到输送机暂存区旁边(见图2-44)。
图 2-44 可视化工具实体
可视化工具的默认显示是一个Flexsim标志图案的平面。在可视化工具上双击打开其参数视窗(见图2-45)。
图 2-45 可视化工具参数
在视景显示中选择“文本”选项。现在可以定义文本参数了。在文本显示下拉菜单中选择“Display Avg StayTime”选项(见图2-46)。
图 2-46 文本显示下拉菜单
然后选择代表模板按钮来改变显示的文本,改为“The average staytime of the Conveyor Queue is:(输送机的暂存区的平均等待时间是:)”,如图2-47所示。
图 2-47 定义3D文本的显示
将会注意到,在显示字符串的末尾由一个指向“centerobject(current,1)”表述的引用(见图2- 47)。这个引用用来告诉可视化工具查找要显示的数据。centerobject(current,1)的意思是显示连接到可视化工具的第一个中间端口的实体的平均等待时间。这就意味着必须在输送机暂存区和可视化工具实体之间建立一个中间端口连接。这可以通过按住键盘上的“S”键并点击可视化工具拖动到输送机暂存区的操作来实现(键图2-48)。要点击可视化工具,可直接点击所显示的3D文本。如果点击到字母之间的空白上可能不能正确建立连接。
图 2-48 连接可视化工具和输送机暂存区
编译了模型后,将会在模型视图中看到文本(见图2-49)。
图 2-49 模型视图中的3D 文本
到此,用户可能想要调整文本的显示。文本的尺寸默认设置为1,可能想要让它变小点。也可能想要文本悬在暂存区上空。
要想把文本尺寸变小,在可视化工具的文本参数中键入想要的尺寸,这里为(见图2-50)。同时,将厚度调整到,这样给文本一个3D的外观。
图 2-50 调整文本的尺寸和厚度
在可视化工具视窗的左下角,选择属性按钮打开属性视窗(见图2-51)。
图 2-51 属性按钮
在属性视窗中,用“RX”域段将文本旋转90度(见图2-52)。
图 2-52 将文本旋转90度
在参数和属性视窗中按“确认”按钮。现在模型中的文本就被旋转了。用鼠标按照意愿来选择和放置文本。记住,可以通过并用鼠标左右键选择文本并前后移动鼠标来控制文本的高度,或者选择文本然后滚动鼠标轮来上下移动文本(见图2-53)。
图 2-53 放置3D文本
步骤10:编译、重置、保存和运行
在模型中放置文本,并编译、重置、保存该模型。然后就准备好可以运行模型并查看刚刚添加的图形、图表和3D文本了(见图2-53)。
图 2-54 完成的模型
要继续学习本教程,请看第3课。
第3课
简介
第3课介绍货架和网络节点实体。将在样条线节点、输送机、高级统计和全局表的使用上有所改变。第3课将介绍试验控制器,用来对模型进行多次运行和多场景分析。第3课将以第2课建立的模型为起点。请在开始第3课之前,务必完成第1课和第2课的学习。
第3课的前提假设是已经完成了第1课和第2课,并已经熟悉了在参数和属性视窗中工作。在前面的课程中,几乎每个步骤都用插图进行了说明,以使用户能够完全理解建模的步骤。在第3课中,一些简单的操作,如给模型添加一个新的实体并输入基本参数,仍将给出单步操作的描述,但是将不再给出插图。
关于使用Flexsim评估版本的注释:如果采用的是Flexsim的评估版本,将不能完成本课的模型。Flexsim评估版本建立的模型对实体数目有限制,本课的模型超过了评估版本的最大数目限制。
本课学习内容
如何使用全局表定义路径
如何为一个运输机设定行进路径网络
如何在一个行进路径网络中创建样条线
如何建立一个定制的输出报告
如何执行模型的多次运行
本课将介绍货架、网络节点和样条线节点实体。
预计完成时间
完成本课大约需要45-60分钟。
Flexsim软件概念学习
样条线节点
在Flexsim中,在布置行进路径网络的时候使用样条线节点。Flexsim采用样条线技术提供了一种方便地添加转弯、上升、下降网络路径的方法。
当在模型视图中放置两个网络节点,并采用“A”点击拖动方式建立连接,将显示一条绿色的路径(见图3-2)。
图 3-2 连接网络节点
如果将视景推进样条线节点并在样条线节点上点击保持鼠标键,将显示相关信息(见图3-3)。
图 3-3 “样条线节点”信息视图
样条线节点参数
Deltax: 从上一个样条线节点或者网络节点到此节点的X方向的差值。
Deltay: 从上一个样条线节点或者网络节点到此节点的Y方向的差值。
Deltaz: 从上一个样条线节点或者网络节点到此节点的Z方向的差值。
XYangle: 从上一个样条线节点或者网络节点到此节点的XY角度。角度从0到正负90度。
Length: 这是两个网络节点范围之间的样条线的总长。
如要移动样条线节点,用鼠标选中节点球体。将在样条线节点球体周围显示一个黄色的方框。
图 3-4 选中样条线节点球体
要移动改变样条线节点的XY角度,或者给路径添加一个转弯,只要在模型视图视窗中用鼠标左键点击拖动球体就可以了。如要改变样条线节点的Z向高度,选中球体并同时用鼠标左右键点击拖动它即可。向前移动鼠标可以升高样条线节点,向后移动鼠标可以降低样条线节点。也可以用鼠标滚轮来改变样条线节点的Z向高度(见图3-5)。
图 3-5 改变样条线节点的Z向高度
添加附加的样条线节点
可以按住“X”键然后点击一个已存在的样条线节点来给路径添加附加的样条线节点(见图3-6)。新的样条线节点将添加到所点击的样条线节点与相邻的下一个样条线节点或者网络节点之间的中心点位置上(见图3-7)。
图 3-6 给路径添加一个样条线节点
图 3-7 在两个样条线节点之间添加一个样条线节点
一旦给路径添加了样条线节点,这些节点可以单独移动来构造样条线的形状(见图3-8)。样条线和样条线节点之间的张力可以通过编辑 | 设定样条线张力菜单选项来进行调解。张力默认设定为1。如果将张力改为0,则样条线路径将从样条线节点的正中心穿过。
图 3-8 移动样条线节点来构造路径的形状
可以配置网络节点来指定路径的方向。按住“Q”键然后从一个网络节点到另一个相连的网络节点点击拖动鼠标,将禁止那个方向的通行。这会将不再允许通行的路径的侧边用一条红色的线标示出来(见图3-9)。
图3-9 单行线路径
当路径采用了样条线节点进行配置后,使用此路径的行进物将自动沿着所定义的样条线行进。样条线节点球体的显示可以在打开和关闭选项之间切换,操作方法是按住“X”键并点击路径网络中的一个网络节点(见图3-10)。
图 3-10 “X”点击网络节点来关闭显示样条线节点
注释:当模型中使用多个样条线节点时,很有必要在“编辑”菜单中选择“锁定样条线”选项。这将吧样条线节点锁定而不能再进行编辑,从而大大提高运行速度。编译模型将会取消对样条线的锁定,因此,每次编译后都需要再将它们都锁定。
模型的树视图
在Flexsim中使用模型树视图来详细地展开模型结构和实体。选择工具栏中的 按钮可以访问模型树视图。模型树视图将会显示如下(见图3-11)。
图 3-11 模型树视图
模型树视图是一个具有许多独特特点的视图视窗。在此视图中可以:
用C++或者Flexsim脚本语言来定制Flexsim实体
查看所有实体数据
访问参数和属性视窗
编辑模型、删除实体和修改所有数据
如果遵循几条简单的导航规则,将会发现树视图是最Flexsim中通用的视图之一。Flexsim的底层数据结构包含在一个树中。Flexsim中的许多编辑视窗只不过是从树中过滤的数据的一些图形用户界面(GUI)。由于Flexsim中所有树视图的工作方式相同,只要理解了树视图如何工作,就可以理解和导航任意可访问的树的结构。
树视图基础
Flexsim的设计将所有数据和信息都包含在一个树结构中。这个树结构是面向Flexsim实体设计的核心数据结构。熟悉C++面向实体编程的人员将会立即把Flexsim的树视图认作面向实体数据管理的C++标准。
在树视图中有几个符号能够在导航过程中帮助理解树的结构。
整个主树被称为一个项目。一个项目包含库和实体。一个视图树包含所有的视图和GUI定义。当保存一个session(整体)时,就是将主树和视图树一起保存。
文件夹图标标示了一个完整项目的主要组件。模型是一个主项目的一个组件。库是主项目的另一个组件。
在树视图中,实体图标用来代表Flexsim实体。
节点图标用来指定一个实体内的节点数据。数据节点可以在它们内部包含附加的节点数据。如果一个数据节点的图标左侧有一个“+ ”,表示它有一个或更多的附加数据节点。数据节点可以包含数字的或者字母数字的值。
一些特定的数据节点被指定为C++数据节点,它们包含C++代码。可以从一个C++数据节点直接键入C++代码。当按下编译按钮时,此代码将被编译。
数据节点也可以被指定为“Flexscript(Flexsim脚本)”节点。这样的节点可以包含Flexsim脚本语言代码,并在运行模型时自动编译。Flexsim脚本语言命令是预编译的C++函数。Flexsim脚本语言命令可以在工具栏中选择相应按钮加以查看(见图 3-12)。大多数Flexsim脚本语言命令也可以在C++代码中使用。
图 3-12 Flexsim脚本语言命令
当在树视图中用鼠标点击一个图标从而选择一个实体时,树视图将显示实体如下:
将在实体图标周围显示一个高亮方框,并且在实体图标左边放一个展开树符号。如果选择了这个展开树符号,那个实体的数据节点将显示如图3-13所示。
图 3-13 展开的视图树视图
随着实体和数据节点的展开,树视图将很快增长到此树视图视窗的查看限制之外。Flexsim允许使用鼠标在视窗中随意移动树。如要在视窗中随意移动树,只要在树的左边点击拖动鼠标,或者使用鼠标滚轮来上下滚动即可。
点击节点图标左边的“+”,可以展开数据节点。由于数据节点可以包含数值或者文本,可以在节点右边看到这些文本信息或者数据的值(见图3-14)。
如果你选中了某个实体或者数据节点,可能就不能移动树。点击视图中的空白区域,然后拖动鼠标就可以移动树了。也可以使用鼠标滚轮或者 PageUp/PageDown 按钮来上下移动树。
图 3-14 文本和数值数据节点
选择想要编辑的节点可以直接编辑数据。如果是一个数字数据节点,可以在这个域段中编辑这个数字(图3-15)。如果是一个文本数据节点,将会在视窗的右边看到一个文本编辑域段,用来编辑文本(见图3-16)。
图 3-15 编辑一个数字数据节点
图 3-16 编辑一个文本数据节点
可见,树是模型所有数据的贮藏室。参数和属性视窗用来提供一个更友好的方式来操作树中的数据。虽然从树中完成模型的编辑是可能的,但还是建议用户使用参数和属性视窗,这样可以避免不小心删除模型数据。像在正投影视窗中那样,右键点击或者双击实体图标,可以在树视图中访问参数和属性视窗。
模型3描述
在模型3中,将用3个货架代替吸收器,用来存储装运前的临时实体(见图3-1)。需要改变输送机1和3的物理布局,使它们的末端弯曲以接近暂存区。采用一个全局表作为参考,所有实体类型1的临时实体都送到货架2,所有实体类型2的临时实体都送到货架3,所有实体类型3的临时实体都送到货架1。采用网络节点实体,可以为一个叉车建立一个路径网络,当它从输送机暂存区往货架运输临时实体时使用此路径网络。还要用实验控制器来设定多次运行仿真来显示统计差异,并计算关键绩效指标的置信区间。
图 3-1 模型3图表
模型3数据
修改输送机1和3将临时实体输送到离输送机暂存区更近的位置。
从输送机暂存区寻径到货架去:使用一个全局表给临时实体指定如下的路径:
实体类型1到货架2
实体类型2到货架3
实体类型3到货架1
为叉车设定一个路径网络,沿此网络在输送机暂存区和货架之间行进。
为漫游式模型展示生成一个漫游路径。
建模步骤
建立模型3
在开始建立模型3之前,需要从上一课中装载模型2。
步骤1:装载模型2并编译
装载模型后,在工具栏上按编译按钮。
步骤2:重新配置输送机1和3的布局
使用输送机1和3的参数视窗中的布局分页,改变其布局,使输送机在末端有一个弧段,将临时实体输送到离输送机暂存区更近的位置去(见图3-17a和图3-17b)。至少需要添加一个附加的弧段来实现此目的。注意,第2个分段的“类型”的值是2,表示它是一个弧形分段。对于类型1的分段,可以使用长度、上升高度和支柱数目等参数。对于类型2的分段,可以使用上升高度、弯曲角度、半径和支柱数目等参数。假如有兴趣在此布局分页中实验创建一些复杂的弯曲和倾斜上升的布局,将很有意思!
图 3-17a 添加分段来重新配置输送机1和3
图 3-17b 配置好输送机后安排布局
步骤3:删除吸收器
为模型添加货架做准备,先要把模型2中的最后的吸收器删除。选中吸收器,使它成为黄色高亮显示,并按键盘上的“ Delete” 键即可将其删除。当删除一个实体后,所有从此实体连接出和连接入的连接都同时将被删除。当心,这可能会影响到与被删除实体相连的实体的端口编号。
步骤4:给模型添加3个货架
在库中选择货架实体,往模型中拖放3个货架。模型中放入货架后,创建从输送机暂存区到每个货架的端口连接,方法是按住“ A”键然后从这个暂存区到每个货架进行点击拖动操作(见图3-18)。
图 3-18 添加到模型中的货架
将货架放置得离暂存区有足够的距离,以便让叉车在到达货架时需要行进一定的距离。
步骤5:设定用来安排临时实体从暂存区到货架的路径的全局表
下一步是设定一个全局表,用来查找每个临时实体将被送到哪个货架(或者,更确切的表述为,临时实体将从输送机暂存区的哪个输出端口发送出去)。这里假设条件是,输出端口1连接到货架1,输出端口2连接到货架2,输出端口3连接到货架3。本模型将把所有实体类型为1的临时实体送到货架2,所有实体类型为2的临时实体送到货架3,所有实体类型为3的临时实体送到货架1。下面是设定一个全局表的步骤:
在工具栏中选择全局表按钮。
打开全局建模工具视窗后,按全局表旁边的按钮。全局表的下拉菜单中将会出现默认的表名称。
选择按钮来设定此表。
在全局表参数视窗中,将表的名称改为“rout”。
设定此表有3行1列,然后点击应用按钮。
将3行分别命名为item1、item2和item3,然后填入相应的临时实体要被送到的输出端口号(货架号)。
选择视窗底部的确认按钮。选择全局建模工具视窗底部的关闭按钮。
现在,已定义了全局表,可以调整暂存区上的“送往端口”选项。
步骤6:调整输送机暂存区上的“送往端口”选项
在输送机暂存区上双击打开其产生视窗。选择临时实体流分页。在“送往端口”下拉菜单中,选择“By Lookup Table(通过查表)”选项。选择了查表选项后,选择代码模板按钮。编辑模板来使用叫做“rout” 的表(见图3-19)。
图 3-19 编辑代码模板来使用名为“rout”的表
选择确认按钮关闭模板视窗,然后再选择确认按钮来关闭参数视窗。
步骤7:编译、重置、保存和运行
到现在为止,最好编译、重置、保存一下模型,然后运行模型来验证对模型的改动。模型应该显示用叉车往货架中搬运临时实体,送往的货架的选择基于在全局表中定义的实体类型。
步骤8:为叉车添加网络节点来为叉车开发一条路径
网络节点用来为任何任务执行器实体,如运输工具、操作员、堆垛机、起重机等,开发一个路径网络。在前面几课中,已经采用过操作员和运输工具来在模型中任意运输临时实体。到此为止,任务执行器可以在模型中在实体之间的直线上自由地移动。现在,当叉车在从输送机暂存区到货架之间运输临时实体时,想将叉车的行进限制在一个特定的路径上。下面的步骤用来设定简单的路径。
1. 在输送机暂存区和每个货架旁边拖放添加网络节点。这些节点将在模型中成为捡取点和放下点(见图3-20)。可以在这些节点之间添加附加节点,但是并没有必要这样做。
图3-20 拖放网络节点(黄色点)到模型中
2. 按住“A”键在每个网络节点之间点击拖动一条连线,可以将这些网络节点彼此连接起来(见图3-21)。建立连接后将会显示一条绿色的连线,表示这两个节点之间的路径在两个方向上都是可以通行的。
图 3-21 网络节点之间的连接
3. 现在,给输送机暂存区连接一个节点,并给3个货架的每一个都连接一个节点。必须这样做,叉车才能知道与模型中每个捡取和放下地点相连的是哪一个网络节点。此连接也是用按住键盘“A”键然后在网络节点和实体之间点击拖动一条连线的方式来实现。正确建立了连接后将显示一条细蓝线(见图3-22)。
图 3-22 从网络节点到实体的连接
4. 最后一步是将叉车连接到节点网络上。为了让叉车知道它必须采用路径行进,必须把它连接到路径网络中的某个节点上。按住键盘“A”键然后在叉车到一个网络节点之间进行点击拖动操作可以实现连接。建立连接后将显示一条红色的连线(见图3-23)。所选择的连接到叉车的那个节点将成为每次重置和运行模型时叉车的起始位置。
图 3-23 将叉车连接到网络节点
步骤9:编译、重置、保存并运行模型
现在,可以编译、重置、保存,然后允许模型来查看叉车是否在使用路径网络。
关于偏移的一点说明
在模型运行的时候,可以注意到,在捡取和放下临时实体时,叉车会行进离开网络节点。这是选择了叉车参数中的“装卸时采用行进偏移 ”选项的结果(见图3-24)。
图 3-24 选择了装卸时采用行进偏移选项
偏移被叉车用来进行定位到模型中需要捡取或者放下临时实体的位置。这可以使叉车行进到暂存区内来捡取一个临时实体,并行进到特定的货架单元并放下临时实体。如要强制叉车呆在网络节点而不离开路径网络,只要不选中行进偏移复选框就可以了。
路径样条线节点
注意,当连接了两个网络节点时,显示一条绿色连接线。在连线的中间有一个样条线节点。可以添加附加的样条线节点,并随意移动这些节点来形成路径上的复杂的弯曲、转弯和斜坡(见图3-25)。
图 3-25 路径样条线节点
路径样条线节点带来了极大的灵活性,同时也减少了建立复杂路径所需要的网络节点数。路径网络自动采用Dyjkstra算法来确定网络中任意两个节点之间的最短路径。
步骤10:使用报告来查看输出结果
如要在Flexsim中获得相应的特征报告,就必须在模型中选中想要包含在报告中的实体。在运行结束后可以获得报告。要选中实体,可以按住键盘 “Shift”键然后用鼠标拖动一个选择框包围要报告的实体。当一个实体被选中时,在它周围将显示一个红色方框(见图3- 26)。也可以使用“Ctrl”键并点击实体来实现向选中的集合中添加和移除实体。
图 3-26 选择实体使它包含在报告中
选择了想要进行报告的实体后,选择菜单选项“统计>标准报告”。
选择了此选项后,将会看到Standard Report Setup(标准报告设置)视窗(见图3-27)。
图 3-27 Standard Report Setup视窗
按生成报告可以生成一个基本报告(见图3-28,3-29)。如果只需要生成关于所选实体的报告,就不要选择“整个模型的信息报告 ”复选框。如果需要向报告中添加其它的属性,可以在此界面中添加。报告将输出到一个csv文档,并自动用Excel显示,或者用用户机器上所默认的用来显示csv文档的应用程序来显示。
图 3-28 基本报告(Micrsoft Excel)
选择菜单选项“统计>统计报告”可以创建统计报告。这将生成一个包括模型中所有选定实体的状态报告。
图 3-29 状态报告(Microsoft Excel)
步骤11:使用实验控制器进行多次允许
要获取Flexsim的实验控制器,可以选择主视窗右底部的实验控制器按钮(见图3-30)。
图 3-30
按下按钮后,将出现Simulation Experiment Control(仿真实验控制)视窗(见图3-31)。
图 3-31 Simulation Experiment Control视窗
Simulation Experiment Control视窗用来设定一个特定模型的多次重复运行,和一个模型的多个场景运行。当运行多场景时,可以声明几个实验变量,然后每个场景下想要运行的各个变量的取值。将会计算并显示在绩效指标分页中定义的每个绩效指标的置信区间。参见帮助文档的实验控制器部分,可以获得更多关于实验控制器的信息。
第3课到此结束。祝贺!
Flexsim使用介绍
Flexsim使用介绍
本部分介绍如何使用Flexsim来创建用户仿真模型。本部分可分为如下五个小节:
主菜单和工具条 - 本节介绍Flexsim的主菜单、 Flexsim主面板顶部的工具条、以及Flexsim视窗底部的仿真运行控制面板等。
模型视图 - 本节介绍如何在Flexsim中查看和编辑仿真模型。
视窗和对话框 - 本节介绍首次创建仿真模型时将用到的视窗和对话框。
Flexsim相关概念 - 本节讨论软件Flexsim是如何构建的,在Flexsim中如何编写程序代码,以及在什么时候编译等。
3D媒体 - 本节介绍在Flexsim中如何使用3D媒体。
主菜单和工具条
文件菜单
新建模型-此选项清除软件中的当前模型以便创建一个新的仿真模型。此选项不影响视图布局或库。选择它的时候Flexsim会发出警告:此操作将丢失当前模型中的所有实体。
打开模型...-此选项用来选择一个Flexsim模型文件(扩展名为.fsm)来编辑。如果没有存盘,在当前模型中所进行的所有改变都将丢失。
保存...-此选项将保存当前模型文件(扩展名为.fsm),对当前模型所做的改变都会被保存。
模型另存为...-此选项用来将仿真模型保存为文件。保存所创建的文件扩展名为.fsm。此模型树的全部内容都将被保存。
状态存取-此选项用来保存模型的状态(模型当前运行),或者导入已保存的模型状态文件,然后接着运行模型。当模型处于仿真运行期间,需要保存它的当前状态(所有临时实体保持在它们所处的位置,所有的资源保持它们当前的操作状态),且以后再重新载入模型状态时能够接着所保存状态的那一状态点继续运行时,保存状态很有用。
保存状态-此选项保存模型的当前状态。
导入状态-此选项载入并重新编译先前保存的状态模型。
编辑器属性-此选项打开字体视窗,用来为在任意一个Flexsim代码视窗中显示的文字选择字体类型和字体大小。也可以在此配置文字的高亮属性。
安装服务包-此选项安装Flexsim的补丁。点击此菜单项,将打开文件浏览器,必须指定要安装的补丁文件(*.fpk)。Flexsim软件公司有时会以这种方式发布补丁供用户安装。公司也非常欢迎用户开发自己的补丁并发布。补丁是一个简单的树文件,它的第一个子节点包含带有代码的字符串数据。补丁安装后,这些代码将自动执行。典型的补丁将用补丁树中的节点替代掉Flexsim主树和视图树中的相关节点。
应用文件-此选项用来载入或保存视图布局、项目或者整体文件(视图布局和项目)。
打开视图布局-此选项用来选择并打开一个Flexsim视图布局文件(扩展名为.fsv)。此操作将会改变软件视窗的布局,但不会影响模型,或者库。
保存视图布局-此选项用来保存一个Flexsim视图布局文件(扩展名为.fsv)。视图布局将保存视图树。
打开项目或整体文件-此选项用来选择并打开一个Flexsim项目文件或整体文件(扩展名为.fsp 或 .fss)。无论打开项目还是全局文件,都不能点击默认的编译按钮进行编译,而需要从视图菜单中对文件进行整体编译。默认编译按钮只对模型的代码进行编译,而菜单“视图|系统维护”下的“整体编译 ”选项将对模型和库进行整体编译。
项目另存为... - 此选项用来保存项目文件(扩展名为.fsp)。项目文件将会保存主树,主树包含系统、库以及模型。
整体文件另存为... - 此选项用来选一个Flexsim整体文件(扩展名为.fss)保存,或打开。此操作将会替换当前视图布局、模型、库以及其它全局信息。整体文件将项目和视图都保存到一个文件中。
XML文件 - 此子菜单用来打开和保存XML格式的文件,而不是标准的Flexsim二进制格式。可以使用此选项打开模型、项目、视图布局或者整体文件。
退出 - 此选项在不进行任何保存的情况下关闭Flexsim。如果需要保存所做的改变,在点击此选项之前应该保存相应的文件。
XE "锁定样条线" XE "设定数值精确度" XE "设定样条张力" XE "解锁样条线" XE "编辑菜单" XE "查找替换" XE "撤销" XE "完成提示" 编辑菜单
撤销 - 如果激活撤消功能,并且模型有一个先前状态,此选项将会撤销对模型做的最后一次改变。当模型中的实体被创建、移动或者删除时,当端口连接或断开时,程序都将会自动保存模型状态。打开实体的参数或属性视窗不会引起状态保存。但是在脚本编辑器中键入代码时,右键单击选项或者Ctrl-Z可以实现撤销操作。
允许撤销 - 这是一个激活或者关闭模型操作撤销功能的切换开关。在仿真运行时,撤销功能被自动取消,但是点击了停止按钮被后,将会自动地恢复。
锁定样条线 - 此选项将锁定当前模型中所有网络路径的样条线。锁定样条线能明显加快仿真运行速度,但此时不能改变网络的路径。编译模型时将会解除锁定。
撤销锁定样条线 - 此选项解除对网络路径的锁定。一旦撤销了对样条线的锁定,就可以使用鼠标编辑图形。
设定样条线张力 - 此选项打开一个对话框来设定模型中的样条线张力。张力必须在0-1之间。取值为0,则所有的样条线都是直线,直接经过节点;取值为1时样条线的曲率最大。
设定数值精确度 - 此选项打开一个对话框来设定数值精确度。此数值将是当前Flexsim整体文件中数据所显示的小数点位数。
查找替换 - 此选项打开查找替换对话框。
XE "跟踪调试器" XE "视图树" XE "视图菜单" XE "用户库图标栅格" XE "正投影编辑器" XE "模型树" XE "数据库表" XE "库树" XE "库图标栅格" XE "属性提示" XE "命令提示" XE "主树" 视图菜单
输出控制台-此选项打开一个显示输出信息的视窗。可以使用pt()、 pr()、pd()、pf()等命令在输出控制台里打印自己的信息。参见命令集以获取更多有关这些命令的信息。
跟踪调试器
此子菜单包含调整跟踪“设定”、“打开跟踪 ”以及打开“跟踪控制台”方面的信息。
设定 - 此选项打开一个 跟踪调试器, 用来选择要显示在跟踪视窗里的事件类型。
打开跟踪 - 此选项打开或关闭跟踪。跟踪信息在跟踪控制台里显示。同时,如果跟踪打开着,系统控制台将打印关于例外情况的更多详细信息。
跟踪控制台 - 此选项打开一个视窗,此视窗中将会打印模型中所选实体发生事件的相关信息。要想打印这些信息,必须选中“打开跟踪”。
命令提示 - 此选项打开 command hints HYPERLINK "file:///C:\\Program%20Files\\Flexsim3\\help\\Interacting_with_Flexsim\\" (命令提示)视窗,列出可用的命令以及其参数。此列表没有可从工具条打开的 命令集 中的列表详细。
属性提示 - 此选项打开attribute hints( HYPERLINK "file:///C:\\Program%20Files\\Flexsim3\\help\\Interacting_with_Flexsim\\" 属性提示)视窗,列出可用的实体属性以及这些属性的概要性描述。
完成提示 - 此选项打开 completion hints( HYPERLINK "file:///C:\\Program%20Files\\Flexsim3\\help\\Interacting_with_Flexsim\\" 完成提示)视窗列出当前情况下可以使用的命令。此列表随编写代码而更新。
库图标栅格 - 此选项打开 HYPERLINK "file:///C:\\Program%20Files\\Flexsim3\\help\\Interacting_with_Flexsim\\" Library ( HYPERLINK "file:///C:\\Program%20Files\\Flexsim3\\help\\Interacting_with_Flexsim\\" 库图标栅格)视窗,栅格中有实体图标,实体图标可以被拖动进入模型。
用户库图标栅格 - 此选项打开 User Library ( HYPERLINK "file:///C:\\Program%20Files\\Flexsim3\\help\\Tools\\" 用户库图标栅格)视窗。
模型树 - 此选项打开一个tree( HYPERLINK "file:///C:\\Program%20Files\\Flexsim3\\help\\Interacting_with_Flexsim\\" 树)视窗 显示模型的文件夹。这将显示出模型中所有实体。模型树可以在此视窗中操作。
模型视图(平面) - 此选项打开 HYPERLINK "file:///C:\\Program%20Files\\Flexsim3\\help\\Interacting_with_Flexsim\\" planar model view( HYPERLINK "file:///C:\\Program%20Files\\Flexsim3\\help\\Interacting_with_Flexsim\\" 平面模型视图) 以2D 方式显示模型。在此视图中不显示模型的3D外形。此视图不能旋转,实体也不会显示旋转。如果用正投视图影和透视视图会造成模型仿真运行变慢,则运用平面视图,会使模型的运行速度加快。
模型视图(正投影) - 此选项打开模型的一个新的 orthographic view( HYPERLINK "file:///C:\\Program%20Files\\Flexsim3\\help\\Interacting_with_Flexsim\\" 正投影视图)。
模型视图(透视) - 此选项打开模型的一个新的 perspective view( HYPERLINK "file:///C:\\Program%20Files\\Flexsim3\\help\\Interacting_with_Flexsim\\" 透视视图)。
正投影编辑器 - 此选项打开高级正投影编辑器。
树编辑器 - 此选项打开高级 树编辑器。
数据库表 - 此选项打开一个视窗,显示 当前激活的数据表, 这些表可由命令dbopen()、dbchangetable()、dbsqlquery()打开或者查询。参见命令集 可获得更多有关这些命令的信息。
系统信息
此子菜单用来打开库树、主树以及视图树视图。
编译器控制台 - 此选项打开一个视窗,模型编译时,相关信息在此视窗里被打印。这些信息显示模型编译过程中的每一步状态。
系统控制台 - 此选项打开一个视窗打印出程序引擎状态的相关信息。此视窗打开时,模型的运行将会减慢。
库树 - 此选项打开显示库树的 HYPERLINK "file:///C:\\Program%20Files\\Flexsim3\\help\\Interacting_with_Flexsim\\" tree( HYPERLINK "file:///C:\\Program%20Files\\Flexsim3\\help\\Interacting_with_Flexsim\\" 树)视窗。视窗中显示库中所有可用实体类。其中很多实体不能拖入到模型中。不能拖入模型的可能是其它实体的基类,或者它们是通过工具条创建的实体。库树可以在此视窗中操作。
主树 - 此选项打开显示项目树的 HYPERLINK "file:///C:\\Program%20Files\\Flexsim3\\help\\Interacting_with_Flexsim\\" tree( HYPERLINK "file:///C:\\Program%20Files\\Flexsim3\\help\\Interacting_with_Flexsim\\" 树)视窗 。可以在此视窗中对树进行操作。项目树包括模型、库以及其它全局信息。
视图树 - 此选项打开显示视图布局树的 tree HYPERLINK "file:///C:\\Program%20Files\\Flexsim3\\help\\Interacting_with_Flexsim\\" (树)视窗可以在此视窗中对视图布局树进行操作。视图布局包括当前所有打开的视窗和程序中可用的GUI(图形用户界面)。
系统维护
此子菜单在边编辑模型边想要清理碎片时采用。此选项包括生成和清理Flexsim脚本和重载媒体。
生成Flexscript - 此选项读取树中的所有节点,并为所有被标志为Flexscript节点的节点生成Flexscript树,允许它们被Flexsim引擎执行。模型编译时此过程自动发生。提供此菜单为开发者使用。
编译整体 - 此选项编译所有定义在主树或视图树中的代码节点,而“执行”菜单里的 “编译应用”和主视窗底部的仿真运行控制面板里的“编译”按钮都只能编译模型。在装载项目或整体文件之后,必须使用此选项。在先前装载或者编译了用户自己的项目或整体文件之后,为了找回标准的Flexsim整体文件,必须重新启动Flexsim,并且选择此菜单选项,以恢复所有的默认设置。
清除Flexscript - 此选项读取树中的所有节点,并且从那些被标为Flexscript节点中删除Flexscript树。当Flexscript树有错的时候使用此选项。下次运行模型之前必须选择“生成全部Flexscript”。此选项给开发者使用。
重新导入媒体 - 此选项重新导入所设置的所有实体要显示的图像形状。媒体文件经常在需要的时候自动导入。当你发现模型中的某一实体不能正确显示指定的媒体文件所代表的图像时,你可以用此选项解决这个问题。
XE "重置模型" XE "逐步按钮" XE "运行模型" XE "编译" 执行菜单
编译应用 - 此选项编译模型。当模型中增加了新实体,或者改变了包含代码实体参数(包括大多数带有下拉菜单的编辑域段)后,应使用此选项编译模型。此菜单选项与工具条中的“编译”按钮的功能相同。修改实体库的开发者需要进行整体编译(参见视图|系统维护|编译整体)。
打开Visual Studio... - 此选项打开Microsoft Visual Studio(如果可用),里面含有Flexsim生成的C++项目。
重置模型 - 此选项重置当前模型文件,并准备好仿真运行。与选择仿真运行控制面板上的“运行”按钮相同。
运行模型 - 此选项运行当前的模型文件。与选择仿真运行控制面板上的“运行”按钮相同。
暂停模型 - 此选项暂停运行当前的模型。与选择仿真运行控制面板上的“暂停”按钮相同。
停止模型 - 此选项停止运行当前的模型。与选择仿真运行控制面板上的“停止”按钮相同。
步进一个事件 - 此选项将模型运行到下一个事件。在下一个事件时,模型将停止运行。与选择仿真运行控制面板上的“逐步”按钮相同。
设定运行速度 - 选项打开一个对话框,可以在此对话框中设定模型的仿真运行速度。
设定停止时间 - 此选项打开一个对话框,可以在此对话框中设定模型仿真运行的停止时间。模型将在超过所设目标时间之后的第一个事件停止。
XE "重复随机数流" XE "统计收集" XE "统计菜单" XE "状态报告" XE "模型文档" XE "标准报告" XE "实验" XE "OptQuest" 统计菜单
标准报告 - 此选项打开创建标准输出报告的对话框。标准输出报告采用CSV(逗号分隔值)文件格式输出,将会自动地被微软Excel软件或者其它任何本机上的CSV文件默认打开程序打开并查看。
状态报告 - 此选项创建并打开模型中所有选定实体的状态报告。状态报告采用CSV(逗号分隔值)文件格式输出,将会自动地被微软Excel软件或者其它任何本机上的CSV文件默认打开程序打开并查看。
模型文档 - 此选项打开模型文档对话框,用来在一个外部文本文件中保存模型相关信息。
ExpertFit - 此选项打开由Averill Law 和 Associates开发的ExpertFit软件。在ExpertFit软件的在线文档中有完全版的用户手册。ExpertFit是一个用来确定输入数据的最佳匹配的统计概率分布的程序。
实验控制器... - 此选项打开仿真实验控制导入视窗,与点击主视窗右下的实验控制器按钮的功能一样。实验控制器用来执行模型的多次多场景运行。
重复随机数流 - 此选项在每次重置和运行模型的时候重复随机数流。要想使模型每次运行的随机数流不同,不选择选项即可。
统计收集 - 此选项在Flexsim中打开一个子菜单来打开和关闭统计收集功能。
全局打开 - 如果此选项被选中,那些本地统计被切换锁定的实体将开始在其不断更新过程中记录它们的临时实体数和停留时间信息。打开了本地统计的实体在模型中被一个绿色指示框框住(除非“隐藏绿色指示框”菜单被选中)。
所有实体打开 - 此选项将打开模型中所有实体的本地统计。
所有实体关闭 - 此选项将关闭模型中所有实体的本地统计。
选定实体打开 - 此选项打开所有选定实体(用红色方框框住指示)的本地统计。
选定实体关闭 - 此选项关闭所有选定实体(用红色方框框住指示)的本地统计。
隐藏绿色指示框 - 如果此选项被选中,实体周围用来指示统计收集的绿色方框将被隐藏。
OptQuest - 此选项打开优化编辑器。OptQuest用来在用户设定的限制条件之下,为用户定义的一系列决策变量寻找最优值,以最大或最小化用户定义的目标函数。OptQuest程序是OptTeKSystem公司开发的,完全集成于Flexsim中,但是需要序列号,这些序列号是附加在Flexsim基本版本上的。请联系Flexsim公司以获得序列号。
XE "工具菜单" 工具菜单
编写脚本... - 此选项打开脚本编辑视窗。脚本编辑视窗是一个手动执行Flexscript命令的交互式视窗。
工具箱... - 此视窗打开工具箱视窗,里面包含全局性建模工具。此选项功能与点击工具条中的“工具箱”按钮相同。所有工具箱中定义的信息都将与模型一同保存。
临时实体箱 - 此选项打开临时实体箱,可以编辑模型主要的临时实体列表。此选项功能与点击工具条中的“ 临时实体”按钮相同。
Excel... - 此选项打开Excel界面视窗,可在这里定义Excel导入和导出的参数。此选项功能与点击工具条中的 “Excel”按钮相同。
Visio... - 此选项打开Visio导入视窗。
演示菜单
背景设计箱 - 此选项为模型增加一个背景设计箱,并且打开背景设计箱编辑器。背景渲染在透视视窗里效果最好。
AVI制作器 - 此选项打开AVI制作器。
演示生成器 - 此选项打开一个叫演示生成器的特定透视视图,用来进行演示过程的视角推移。
窗口菜单
Cascade(重叠视窗) - 此选项将重叠当前打开的视窗以便容易选择。
Close All(全部关闭) - 此选项关闭Flexsim中当前所有的激活视窗。在打开了太多视窗以至于影响有效工作时,可使用此选项。
其它选项 - 其它选项是Flexsim中当前打开的视窗。当选择其中的一个选项,那个选中的视窗就会变为活动视窗并呈现到屏幕顶层。
XE "用户手册" XE "模型例库" XE "开始起步" XE "帮助菜单" 帮助菜单
开始起步 - 此选项打开Flexsim的帮助文档的“ 开始”部分。
用户手册 - 此选项打开Flexsim的用户手册。
命令集 - 此选项打开命令集。
模型例库 - 此选项打开模型例库对话框。
关于Flexsim - 此选项打开一个有关Flexsim的信息。显示当前运行的Flexsim版本信息、此Flexsim的注册用户信息、显卡信息以及联系信息。
工具条
新建:此按钮关闭当前模型,可用来开始建立一个新的模型。此按钮不影响当前项目或者视图布局。如想使用一个不同项目,选用主菜单中的“打开项目或整体”选项。如想使用不同的视图布局,选用“打开视图布局”选项。
打开:此按钮用来打开一个先前保存的模型(文件扩展名为.fsm)。此选项将Flexsim中的当前模型丢弃,载入用户选择的模型。此选项不影响当前项目或视图布局。如想打开不同的项目,选用主菜单中的“打开项目或整体文件”菜单选项。如想打开不同的视图布局,选用“打开视图布局”选项。
保存:此按钮用来保存当前模型。将会出现一个对话框确认当前正在编辑的文件将被保存。
撤销:如果允许撤销,点击此按钮可撤销所做的最后一步操作。对库或者视图布局所做的改变没有被记录,所以不能用此按钮找回。当你编译或重置模型时,撤销功能被取消,如果想要重新允许撤销,需要通过编辑菜单重新激活撤销功能。
Excel:此按钮打开Excel界面对话框。
工具箱:此按钮打开工具箱。工具箱用来创建和编辑若干全局可用的建模工具。
临时实体:此按钮打开临时实体箱。在此视窗中,用户可以编辑临时实体箱中可用的当前临时实体的类型。可以改变临时实体的属性,如大小或形状。也能创建新的临时实体类,删除无用的类。
命令:此按钮打开命令集视窗,可以在这里查看Flexscript命令的语法和用法。可以查看某个特定的命令,也可以查看选中的一类命令的全部。
提示:此按钮打开命令提示视窗,提供Flexscript/C++命令提示。
树:点击此按钮打开模型的树视图。可以用来查看当前在模型中的所有实体,包括那些在正投影和透视视图视窗里不能看见的实体。这里也可以编辑实体的属性。但是建议使用实体的参数对话框改变实体的参数,而不要在此树视图中改动。此按钮一般仅供高级用户使用。
正投影:此按钮打开正投影视图视窗。在这种类型的视窗中,实体不会随用户观察视点变远而变小。此视图经常在开始建立模型时使用,所有实体可以很容易地放置到正确的位置上。
透视:此按钮打开透视或者虚拟现实视图视窗。在这种类型的视窗中,实体将随着用户观察视点变远而变小。此视图经常在模型布局完成后使用,用户可以看见模型在现实中看起来是怎么样的。
脚本:此按钮打开脚本编辑器。在这里可以执行flexscript命令以修改模型或获得相关的信息。
XE "仿真运行控制面板" 仿真运行控制面板
此面板用来控制模型的运行。大多数功能都可以通过主菜单中的执行菜单获得。此面板在Flexsim主视窗的底部。
仿真时间 - 显示模型运行的当前时间。显示的值没有时间单位,可以视之为任何时间单位(秒、天等)。
仿真时间/真实时间 - 此滑块定义实际一秒钟代表Flexsim中多少个时间单位。如果模型的每个事件都要处理太多的过程,实际结果可能达不到这个值。
按钮
此选项使模型重置。模型中的每一个实体都调用重置触发器函数。在模型仿真运行之前应该总是先进行重置。
此选项使模型开始运行。模型时钟将连续推进直到模型停止,或者直到不再需要产生任何事件时。
此选择使模型运行暂停,但是不调整模型中所有实体的状态,此时仍然可以查询每个实体处于当前状态的时间长度。模型不被重置,可以接着它被暂停的那一时刻继续运行下去。
此选项停止模型的运行,同时更新模型中所有实体的状态。模型不被重置,可以接着它被停止的那一时刻运行下去。
此选项将模型仿真钟设定到下一需要发生事件将要发生的时刻。然后那个事件发生。此功能可以一个事件一个事件地单步执行模型。当许多事件预定将在同一时刻发生时,选择此选项时可能看不到模型变化。
此选项重置并编译模型。
此选项打开Simulation Experiment control(仿真实验控制)对话视窗。实验控制器用来进行一个场景的多次重复运行,或者用户定义的多个场景运行。
模型视图
XE "编辑选择集" XE "属性" 正投影/透视视图
正投影和透视视图视窗用来在3D环境中查看和编辑仿真模型。正投影视图使用正投影平行投射,一般在设计和建模阶段采用。透视视图视窗使用透视法投射,使得模型有更好的3D立体感,一般在模型建立之后需要查看效果时采用。
在视图中随意移动
要在视图中随意移动,可点击模型中地板不放,然后在视图中四处拖动鼠标。此操作可以移动照相机。要旋转视图,可点击模型地板不放,然后沿不同方向拖动鼠标。同时按住鼠标左右键,上下移动鼠标,可以放大和缩小视图。也可以用鼠标滚轮放大和缩小视图。
在透视投影视图里工作时,可以用F7键进行鼠标导引的视角推移。确定鼠标在视窗的中心位置,然后按F7键,上下移动鼠标就可以使得视角前后推移。左右移动鼠标就可以左右转向。结束后再按F7键可退出模型视角推移。如果视图作为第一视角配置(设定视窗),则很容易进行导航。
移动实体
如要在X/Y平面内移动实体,可点击实体不放,并拖动到目标位置。要沿Z方向移动实体,则点击实体然后滚动鼠标滚轮即可。也可以同时按住左右键来实现这一功能。要旋转实体,用鼠标左键单击它并沿不同方向拖动鼠标。
要改变实体x和y方向的大小,点击黄色方框底部右角的小球,拖动鼠标。要改变实体z方向尺寸,在这个小球上同时按住左右键,并上下移动鼠标。
连接实体
要连接模型中的两个实体,按住“A”键不放,点击某一实体不放,拖动鼠标到另一个实体,然后在另一实体上释放鼠标。“A”键连接方法常用来连接输出端口到导入端口。也可以使用其它键连接。在键盘交互章节里有详细描述
创建和编辑选择集
可以创建选择集来对整个实体集合进行多种操作。要将实体加入集合,可按住Shift或Ctrl键,框住想要选中的实体。按下Shift重置选择集,按下Ctrl键将实体加入选择集。也可以按住Shift或Ctrl键,用鼠标点击实体代替方框框选方式将实体加入选择集。
选择集中的实体被一个红色方框框住。
一旦建立了一个选择集,当对其中一个实体移动、转动和改变大小,都会引起选择集中其它实体的移动、转动及改变大小。也可以通过编辑所选实体菜单对选择集执行若干操作。
菜单
正投影/透视视图视窗有三个主要的菜单。
设定菜单用来配置视图的绘制参数。
编辑所选实体菜单用来对选择集中的实体进行若干操作。
视图菜单用来存储先前的视图位置,以便在需要时快速找回那个位置。
视图还有弹出菜单,在视图中右键单击某一实体即呈现。
编辑实体的参数和属性
要编辑某实体参数,可左键双击实体,或右键单击实体然后在弹出菜单里选择“参数”。右键单击实体,然后在弹出菜单里选择“属性”,可以编辑实体的属性。
XE "高亮实体" XE "平面视图" 平面视图 XE "2D"
平面视图用来在一个2D视图里编辑模型。它操作起来与正投影和透视视图很相似,只是不能转动视点。另外,视图中的实体没有3D形状,只有2D图形。
XE "编辑所选实体" XE "正投影编辑器" 正投影编辑器
正投影编辑器用来在同一个的视窗中执行大多数(如果不是所有的)建模工作。主3D视图和常规正投影视图工作起来相似。视窗左边有一个小的图标栅格,可以从库里将实体拖动到模型中。视窗底部是运行面板,与主运行面板相似。在视图右下方是模型的一个缩小视图。白色区域显示出主正投影视图中看见的区域。在两个视图中的任一个中移动,另一个也会跟着改变。右下的视图可以快速的移动到模型的不同部分。右边的面板有若干编辑小部件,说明如下。
数值 - 当实体一开始被选中时,此面板显示它的名称与位置、转角以及尺寸大小。如果在视图中移动了这个实体,但是又需要撤销对其的改变,可以点击“应用”按钮,实体就会回到开始选中时的初始位置。也可以直接导入数值来设定实体的位置、转角和大小。点击“参数”或 “属性”按钮打开实体的参数或属性视窗,点击“更新”按钮重置这些域段来反映视图中所做的任何改变。
高亮实体 - 此面板显示所有在视图中被点击的实体的历史记录。当前活动实体四周有一个<>符号。使用方向键“向上”和“向下”可以上下移动当前的活动实体,同时此实体在视图中被高亮显示。点击“清除此记录”将实体从历史记录中去除。点击“清除所有”按钮来清除所有历史记录。点击“聚焦到高亮”按钮到高亮实体可将视图的视点聚焦于实体。输入实体的名称并点击“高亮”按钮可以按名称高亮实体。
编辑所选实体 - 此面板与正投影视图中的编辑所选实体菜单的功能相同。选中顶部的某类实体,然后点击相应选项按钮。
XE "键盘交互" XE "连接" XE "断开连接" 键盘交互
在正投影或透视视图中工作时,可以使用若干快捷键来建立、定制和获取模型信息。下图显示了键盘布局,图中用黄色高亮显示的键在与Flexsim交互中具有特定的含义。
关于快捷键的注释:必须在正投影或透视视图是激活视窗情况下,快捷键才能正常工作。在按下任何键之前,应首先点击视窗的标题栏使得视窗激活。否则,快捷键只有在试第二次时才会生效。
A、J键:情景敏感连接
A键用来连接某些类型的两个实体。按住A键点击此实体,按住鼠标键不放,拖动到另一个实体,在那个实体上释放鼠标按钮。通常A键连接是一个实体的输出端口到另一实体的输入端口。对于网络节点,A键将其连接到作为移动物的任务执行器,或连接到作为移动路径关口的固定资源,或者连接到作为移动路径的其它网络节点上。如果你习惯使用左手,也可以用J键。如果你用A键连接两个实体,但是没有看见任何变化,首先去查看确认视图设定没有隐藏连接。如果仍没有变化,则可能是那些实体不支持A键连接。
Q、U键:断开情景敏感连接
Q键用来断开某些类型的两个实体的连接。按住Q键点击实体,按下并保持鼠标左键,拖动到另一个实体,在其上释放鼠标按钮。通常使用Q来断开一个实体的输出端口到另一个实体的输入端口之间的连接。对于网络节点来说,Q键断开一个网络节点与作为移动物的任务执行器,或者与作为移动网关的固定资源之间的连接,并设定一条移动路径的单行线连接为“无连接”(红色)。如果习惯使用左手,也可以用U键。
S、K键:中间端口连接
S键用来连接两个实体的中间端口。中间端口的使用是为了引用目的,采用centerobject()命令可对其进行引用。按下S键点击一个实体,按住鼠标键不放,拖动到另一个实体,然后释放鼠标按钮。如习惯使用左手,也可用K键。
W、I键:断开中间端口连接
W键用来断开两个实体的中间端口连接。按下W键点击一个实体,按住鼠标键不放,拖动到另一个实体,然后释放鼠标按钮。如习惯使用左手,也可以用I键。
D键:情景敏感连接
D键是第二个用来进行上下文敏感连接的键。网络节点和交通控制器都采用D连接。
E键:断开情景敏感连接
E键是第二个用来断开上下文敏感连接的键。网络节点采用E连接。
X键:情景敏感点击/切换
X键用来根据实体类型改变一个实体或者实体的视图信息。使用方法:按下X键点击实体。网络节点将让整个网络在不同的显示模式间切换。X键也在网络路径上创建新的样条节点。货架也将在不同的显示模式间切换。输送机将重新布置下游输送机位置以使输送机末端齐平。
B键:情景敏感点击/切换
B键是用来根据实体的类型来改变实体或实体视图信息的附加键。使用方法:按住B键点击实体。网络节点将使整个网络在不同的显示模式之间切换。交通控制器也使用B键。
V键:查看导入/输出端口的连接
V键用来查看一个实体的输入/输出端口连接。按住V键点击实体,同时按住V键和鼠标左键。如果先释放鼠标按钮,则相关信息消失,但如果先释放V键,则会持续显示相关信息。
C键:查看中间端口连接
C键用来查看一个实体的中间端口连接。按住C键点击实体,同时按住C键和鼠标左键。如果先释放鼠标按钮,则相关信息消失,但如果先释放C键,则会持续显示相关信息。
菜单与设定
XE "显示网格" XE "名称尺寸" XE "名称风格" XE "向网格对齐" XE "第一视角" XE "网格" XE "网格尺寸" XE "背景颜色" XE "设定菜单" XE "近切割面" XE "远切割面" XE "连接端尺寸" XE "连接端风格" XE "隐藏三维形状" XE "隐藏名称" XE "隐藏底面" XE "隐藏底面" 查看正投影/透视视图的视窗设定
此对话框可以通过在正投影或透视视图视窗中选择“设定菜单 ”选项打开。这些设定只适用于那些打开了此对话框的视窗。它不会改变其它视图.
外观
这些参数影响视图视窗的外观。
背景颜色 - 此选项用来从标准Windows颜色方案选择对话框中选择视图视窗的背景颜色。
近切割面 - 此值设定视图中将要绘制的最近实体的值。
远切割面 - 此值设定视图中将要绘制的最远实体的值。 网格尺寸 - 此值设定视图视窗中网格线之间的距离。如果此数值太小,这些网格线将会太近以至于将会降慢一些计算机上模型的速度。
连接端尺寸 - 此数值设定实体上端口连接端的大小。
连接端风格 - 此拾取列表用来设定增加/删除端口按钮是否都绘制在实体上,或者是否绘制在模型不同的边上。
名称尺寸 - 此数值定义在视图视窗中绘制的实体名称的尺寸大小。写在实体下边的基本统计量也会受到同样的影响。
名称风格 - 此拾取列表用来选择在何处绘制实体的名称,在实体下面还是在实体中央。
设置
这些参数值影响视图视窗的不同视景设定。
显示网格 - 如果此方框被选中,将在视图视窗中显示绘制网格。
向网格对齐 - 如果此方框被选中,当移动模型中实体时,将自动地与最近的网格线对齐。这有助于精确布置实体位置。改变实体尺寸时也会捕捉网格对齐。
同步更新 - 如果此方框被选中,所有打开的视图视窗都会在同一时刻被更新。如果没有被选中,一些视窗可能要等到另一个视窗中的某项动作完成之后才会被更新。选择此方框可能引起程序变得慢一些。
第一视角 - 如果此方框被选中,视图视窗中的鼠标控制将会呈现第一视角模式。这意味着视图将会随着视点转动,而不是围绕平面中心点。此模式在视角推进的导航中极为有用。
隐藏连接 - 如果此方框被选中,端口及端口连接线都不会在视图视窗中显示。这使得能够更容易观看模型发生了什么。如果模型变慢了,选择此方框通常可以加快速度。
隐藏名称 - 如果此方框被选中,实体的名称和基本统计不会在视图视窗中绘制。这使得在模型运行时,能够更容易观看发生了什么。
隐藏基面 - 如果此方框被选中,实体的2D基面将不在视图视窗中显示。通常这能使3D视图的效果更好。
隐藏3D形状 - 如果此方框被选中,视图视窗将不显示所有实体的3D形状(.3ds文件或.wrl文件)。有些实体没有相应的3D文件,他们一般是用OpenGL绘制的。这些实体仍能看到。
忽略实体 - 如果此方框被选中,将无法点击视图视窗中的任何实体。这对于模型建好之后进行视角导航很有用,可以避免不小心而移动了实体。
光源
这些控件用来为视图视窗添加、编辑和创建光源。
光源 - 此拾取列表包含视图视窗中所有的光源。
编辑 - 此按钮为当前显示拾取列表的光源打开光源编辑器对话框。
添加 - 此按钮将在视图视窗中创建一个新的光源。
删除 - 此按钮将删除拾取列表中列出的当前光源。模型中必须总是至少有一个光源。
查看平面视图的视窗设定
此对话框可通过在“平面视图”视窗中选择“ 设定菜单”选项打开。这些设定只影响打开此对话框的视窗,而不会改变其它视图。
外观
这些参数影响视图视窗的外观。
网格尺寸-此值设定视图视窗中网格线之间的距离。如果此数值太小,这些网格线将会太近以至于将会降慢一些计算机上模型的速度。
连接端尺寸-此数值设定实体上端口连接端的大小。
连接端风格-此拾取列表用来设定增加/删除端口按钮是否都绘制在实体上,或是否绘制在实体的不同侧面。
名称尺寸-此数值定义在视图视窗中绘制的实体名称的尺寸。写在实体下边的基本统计量也会受到同样的影响.
名称风格-此拾取列表用来选择在何处绘制实体的名称,可选择在实体下面,或在实体中央。
设置
这些参数影响视图视窗中的不同视景设定。
显示网格-如果此方框被选中,将在视图视窗中显示绘制网格。
向网格对齐-如果此方框被选中,当在模型中移动实体时,它会自动与最近的网格线对齐。这有助于精确地布置实体位置。改变实体大小时也会捕捉网格对齐。
同步更新-如果此方框被选中,所有打开的视图视窗都会在同一时刻被更新。如果没有被选中,一些视窗可能要等到另一个视窗中的某项动作完成之后才会被更新。选择此方框可能引起程序变得慢一些。
隐藏连接-如果此方框被选中,端口及端口连接线都不会在视图视窗中显示。这使得能够更容易观看模型发生了什么。如果模型变慢了,选择此方框通常可以加快速度。
隐藏名称-如果此方框被选中,实体的名称和基本统计不会在视图视窗中绘制。这使得在模型运行时,能够更容易观看发生了什么。
隐藏基面-如果此方框被选中,实体的2D基面将不在视图视窗中显示。通常这能使3D视图的效果更好。
忽略对象-如果此方框被选中,将无法点击视图视窗中的任何实体。这对于模型建好之后进行视角导航很有用,可以避免不小心而移动了实体。
视图菜单
视图菜单用来捕获视图的当前镜头位置,并将其加入到一个视图列表中。
当一个视图位置被捕获后,它就被添加到视图的菜单中的一个列表中,如下图所示。选择其中一个视图,该视图就会回到保存的镜头位置。
选择“删除一个选取的视图”,一个对话框就会出现,问你是否删除所选的视图。
注释:在模型中有两个全局保存的捕获视图列表,正投影视图列表和透视视图列表。所有正投影视图与透视视图的列表不一样。
XE "切换" XE "编辑所选实体菜单" 编辑所选实体菜单
“编辑所选实体”菜单可以在所有视图视窗的菜单条里找到(平面、正投影或透视)。它提供若干选项可对视图视窗中当前选中的实体集进行操作。要选定一组实体,按住shift 或 control键点击实体。被选定的实体将被一个红色的方框框住。当前高亮实体(最后一个被点击的实体)周围被一个黄色方框框住。
切换 - 此选项用来打开和关闭所选实体的不同设定。对于选定的集合中的所有实体,所选择的设定将翻转(切换锁定)。也就是,当打开时选择此选项将关闭,反之,关闭的将打开。可用的拨动锁定设定有:
显示实体的名称和标签。
显示实体的端口和端口连接。
显示实体的3D形状。注意,直接用OpenGL绘制的实体不会被隐藏。
显示实体的2D形状(底面)。
显示实体包含的内容。如果此选项关闭,在主实体里面的实体就看不见。
激活实体的统计收集功能。
保护实体。此选项锁定实体的位置、大小和转角。
从选定实体复制 - 这些选项复制高亮实体(黄色方框框住的实体)的信息到所有选择集中的实体(红色方框框住的实体)。如果C++函数(如变量)被复制,模型运行前需要重新编译。可以复制的数据包括:
单变量或标签:将会打开一个对话框,来指定需要从高亮实体中复制的变量或标签名称。
所有的变量:包括所有的C++函数(例如触发器函数)。
所有标签
空间属性值:此子菜单用来从高亮实体中复制空间属性值。可以一次复制整个x/y/z向尺寸、位置和转角,或者单独复制x、y、z向的属性。
形状因素:此选项用来用复制空间属性值的方式从高亮实体中复制形状要素。
3D形状、2D维形状及颜色等可视化信息。
连接 - 此子菜单用来在高亮实体与选择集之间建立拖动连接。
A连接选中实体-到:此选项建立从选择集里所有实体到高亮实体的A拖动连接。
A连接选中实体-从:此选项建立从高亮实体到选择集里所有实体的A拖动连接。
S连接选中实体-与:此选项建立从选择集里所有实体到高亮实体的S拖动连接。
Q断开连接选中实体-从:此选项建立从高亮实体到选择集里所有实体的Q拖动连接。
Q断开连接选中实体-到:此选项建立从选择集里的所有实体到高亮实体的Q拖动连接。
W断开连接选中实体-与:此选项建立从高亮实体到选择集里所有实体的W拖动连接。
复制高亮实体的连接:此选项将高亮实体的输入、输出和中间端口连接复制到选择 集里所有的实体中。
设定名称 - 此选项打开一个对话框来设定选定集合的名称。输入想要的名称,然后如果想在名称后面附加数字,就选中此选项复选框。
移入选中实体 - 此选项将选择集里的实体(红色方框框住的)移入高亮实体(黄色方框框住)中。这使得高亮实体可以用作容器.
保存到文件 - 此选项将选中的实体保存到一个以.t为扩展名的文件中,以后可以用Flexsim重新打开此文件。这项功能可以根据用户需要保存和导入模型的一部分。
从文件导入 - 此选项将一个.t文件载入到当前高亮实体。高亮实体成为导入实体的容器。
复制 - 此选项建立一个选定集合的相同复本。所有的端口连接都保留。
全选 - 此选项将模型中的所有实体加入选定集合。
撤销全选 - 此选项将模型中的所有实体从选定集合中剔除。
正投影/透视视图的弹出菜单
展开树 - 此选项打开一个树视窗,在里面可以用树的形式管理实体。如果没有实体被选中,树视窗将显示管理整个模型。
展开结构 - 此选项打开一个树视窗来查看正视图视窗本身的树结构。
在正投影中查看 - 此选项打开一个新的正投影视窗,在里面显示所选实体的内容。通常只对可视化工具实体使用此选项,它作为其它实体的容器使用。如果没有实体被选中,则打开一个新的模型的正投影视图。
设为被选实体 so() - 此选项指定实体作为so()。通常在脚本视窗中写代码时使用此项功能。
设为被选视图 sv() - 此选项指定正投影视图作为选中视图。通常在脚本视窗中写代码时使用此项功能。
添加到用户库 - 此选项将所选实体添加到当前激活的用户库。
捕获屏幕 - 此选项捕获当前的屏幕,将其保存为一个位图文件到flexsim的打印文件夹。也可通过选中激活视图并按P键的方式来实现。
重置实体 - 此选项重置选中实体的x/y/z旋转角度和z方向位置到0。
重置视图 - 此选项将视图的镜头退回到起始位置。
参数 - 此选项打开实体的参数视窗。
属性 - 此选项打开实体的属性视窗。
光源编辑器
X坐标位置-此数值是光源在模型的X轴方向的坐标位置。这个数值与每个实体的位置相关。
Y坐标位置-此数值是光源在模型的Y轴方向的坐标位置。这个数值是相对于每个实体的位置
Z坐标位置-此数值是光源在模型的Z轴方向的坐标位置。这个数值与每个实体的位置相关。
颜色-用来在标准Windows颜色选择对话框中改变光源发出的灯光颜色。
作为点光源-如果被选中,光源发出的灯光相对镜头看上去就是从一个特定的点发出的。如果没有被选中,光源发出的光就从同一方向射来的平行光。
视窗与对话框
XE "属性提示" 属性提示
属性提示视窗显示Flexsim的特殊属性以及其含义的列表。进入此视窗,键入想要了解的属性名称,视窗就会滚动到那个属性位置。
XE "命令提示" 命令提示
在此视窗中,可以快速获得命令提示以及他们所用的参数。进入视窗,键入想要了解的命令名称,视窗将会滚动到那个命令。如果在其它视窗敲入代码时,此视窗是打开的,此视窗也会自动滚动到所键入的命令。
XE "命令集" 命令集
可通过帮助|命令集菜单选项访问命令集视窗。此视窗用来查找flexscript/c++的命令、其参数列表、功能解释及其用法举例。视图顶部的组合框用来从所有可能的命令中选择某个命令。视窗中央的主面板按照类型选择给出命令列表。点击“显示所有”按钮可以在主面板中显示所有类型。在底部的组合框中选择一类别,主面板就只显示这一类的命令。键入某命令名称然后点击“细节”按钮,有关此命令的描述就显示出来。也可以在顶部点击组合框,然后键入命令名称,视窗将自动滚动到此命令处。双击主视图中的一个词,该词就会自动进入底部的文本输入框中。
XE "完成提示" 完成提示
完成提示视窗用来在键入代码时获得命令提示。当在脚本编辑器或者代码视窗中键入代码时,完成提示视窗将为正在键入的命令提供相关提示。
XE "查找替换" XE "替换" 查找替换
查找/替换对话框用来在项目中搜索和替换文本或数字。键入想要的文本或数字。
查找内容 - 在这里键入想要查找的文本或数字,然后点击“查找”按钮。
替换为 - 键入想用来替换的文本,然后点击“替换”按钮。
开始于对象 - 这是一个到达某节点的路径参考,从这里开始搜索。可以直接键入路径,或者选用右侧提供的三个浏览按钮中的一个,浏览找到该节点。浏览按钮将打开一个浏览树对话框。
字符串数据/数值数据/节点名称 - 选择三个单选按钮中的一个来选择要在树中搜索的数据类型。
输出
点击了查找或者替换按钮后,就会出现输出控制台,并报告那些已被找到,或已被替换的数据的位置信息。
XE "字体视窗" 字体视窗
字体视窗用来设定被编辑文本的字体和大小。
字体风格 - 指定字体、文本尺寸等。点击右边的“…”按钮选择一种字体和大小。
颜色 - 此面板显示高亮显示代码时的颜色。点击右边一种颜色按钮可以改变某给定代码类型的颜色。
高亮 - 可以在此面板中指定哪些类型的代码高亮显示,哪些代码不高亮显示。
库图标栅格
可从库图标栅格中把实体拖到模型中。用鼠标点击按住要添加到模型中的实体不放,拖动到正投影视图、透视视图或平面视图中,在需要放置的地方释放鼠标。在视窗顶部提供了三个不同的类组供选择:标准实体、固定资源和可移动资源,其中标准实体组用的最多。
模型例库
从模型例库对话框中可以装载示例模型及其说明。从列表中选择一个示例模型,点击“导入示例模型”按钮。点击“察看模型描述 ”按钮可以察看此模型的说明。
XE "生成报告" XE "标准报告" XE "报告" 标准报告
标准报告生成器用来创建模型的输出报告。Flexsim以属性列表形式为用户定义的模型属性提供报告。在建立需要报告的模型属性列表后,点击 “生成报告”按钮,就会创建报告并输出到Excel中。
.
标准属性 - 此列表用来选择标准属性,诸如容量、停留时间、状态变量等。按顶部的 按钮将选中的属性添加到要生成报告的属性列表中。
用户定义属性 - 可由此键入想要输出报告的标签或变量的名称,点击底部的 按钮将选中的属性添加到报告列表中。例如,如果一个或多个暂存区都有一个叫做“lastreditem”的标签,你需要关于所有这些标签及其值的报告,则可以在此域段中键入“lastreditem”然后点击 按钮。
添加入报告的属性 - 这是一个将要报告的属性的列表。要从列表中移除某一项,只要选中并按 按钮即可。
整个模型的信息报告 - 如果此复选框被选中,将对模型中所有实体进行报告。否则,只对选中对象进行报告。
高级 - 点击此按钮为诸如Excel的电子表格软件指定替代路径。
生成报告 - 点击此按钮生成报告。
XE "跟踪调试器" XE "消息触发器" XE "OnReceive" XE "OnSend" XE "OnTimerEvent" 跟踪调试器
跟踪调试器用来获取特定事件发生时的信息以及发生的时刻。输入跟踪开始和结束时间,点击想要跟踪事件的复选框。当某实体的创建事件执行时调用定时事件触发器。当某实体接收临时实体时调用接受触发器。当某实体输送临时实体到下游时调用发送触发器。当一个消息送到某实体时调用消息触发器。
XE "树浏览器对话框" 树浏览对话框
此对话框用来浏览树中某个节点。不同的情况选择节点的目的也不同。有时使用此视窗选择开始节点进行查找/替换操作。有时使用此视窗在实验控制器中选择实验变量。
在树视图中点击想要选择的节点,然后点击选择按钮。此视窗会关闭,回到原来的视窗中。
XE "树视窗" XE "Flexsim树" 树视窗
树视窗用来在Flexsim树结构中进行导航,查看或设定实体的属性、编写代码和进行其它操作。在树视图空白处点击鼠标,随意移动鼠标就可以在视窗中随意移动。也可以用鼠标滚轮和page up/page down键在树视窗中上下滚动。如需要更多信息,请参考Flexsim 树结构。
XE "树" XE "树移动" XE "树编辑器" 树编辑器
树编辑器用来对模型树进行多种操作。左边是一个常规树视窗,右边是若干用来组织模型树的编辑部件。
选中对象 - 此面板用来编辑处于高亮状态的实体。点击参数或属性按钮,可以打开实体的参数或属性视窗。“排序^”或 “排序v”按钮可以在树中上下移动实体。点击“首位”按钮可将实体移到树的顶端,点击“末位”按钮可移动到树的底部。键入排序号然后点击“设置排序”按钮可将实体排到树的指定位置。点击“获取排序”按钮,所选实体的排序序号将写入按钮右边的文本中。点击“选择”按钮添加实体到选择集,点击“取消选择”按钮将实体从选择集中移除。
编辑所选实体 - 此面板提供绝大多数与正投影实体中的编辑选中实体菜单相同的功能。它也用来操纵选中对象。 的排序。点击“分组 ”按钮可将所有选中实体集中成组。点击“排序^”或“排序v”按钮可以在树中上下移动实体。点击“首位”按钮可将实体移到树的顶端,点击“末位”按钮可移动到树的底部。
树移动 - 此面板用来随意移动树的视点。点击 “归位” 按钮可回到树的顶端,点击“树^”或“树v”按钮可上下翻页,点击“树^^”或“树vv”按钮可上下翻两页。
XE "数据库表视图" XE "Dbopen" 数据库表视图
可从视图菜单中打开此表视图。它显示当前激活的数据库表。数据库表可用命令dbopen()打开。参见命令集可以获得更多信息。
XE "表编辑器" XE "表" 表编辑器
表编辑器用来编辑Flexsim中的简单表格。
名称 - 表格的名称。名称应容易记忆并具有描述表的功能。读写表的命令通过名称获得它们。
行数 - 表的行数。改变此数字后,点击 “应用”按钮来更新屏幕上的表。然后就可以编辑新建立的行了。
列数 - 表的列数。改变此数字后,点击 “应用”按钮更新屏幕上的表。然后就可以编辑新建立的列了。
高级 - 此选项打开表格配置视窗,用来定制专用的表。
编辑表
点击表中的单元,然后键入数据,就可以对表格单元进行编辑。用箭头键在单元间移动。单元默认接受数字数据,也可以通过右键单击单元格选择“插入>添加字符串数据”来输入字符串值。
XE "模型文档" 模型文档
模型文档对话框用来创建一个文档(.doc)以记录模型信息。选中需要记录信息的相应复选框,然后点击“生成模型文档”按钮就可以建立文档。
XE "路径浏览器" 应用程序路径浏览器
程序路径浏览器用来浏览文件,查找其它应用程序的位置,以查看Flexsim输出的数据。可能找到一个文字处理程序如word,或者电子表格编辑程序如excel等等。点击“浏览”按钮,在硬盘里寻找打开此文件的程序。
Flexsim概念
XE "编译" 何时编译Flexsim?
只要进行了下列任一操作时,在再次运行之前都必须重新编译Flexsim。
从“文件菜单”里打开模型、项目或者整体文件。
在模型中创建新的实体。可能是从库图标栅格中拖动一个新的实体到正投影/透视视图,或者到平面视图,也可能是在模型中复制选中的实体,或从用户库中创建实体。
在工具箱里添加工具。
编辑下拉菜单。
从高亮实体复制变量到其它任意实体集。
编写外部的c++代码。
只要进行了下列操作之一,就必须重置模型,但不需要重新编译模型。
编辑一个常规编辑域段,如实体名称或暂存区的最大容量变量。
建立实体之间的连接
编辑表格、列表、输送机分段等。
XE "模型" XE "树" XE "库" XE "Flexsim树结构" XE "主" XE "项目树" Flexsim树结构介绍
Flexsim是完全采用树型数据结构的概念设计的。Flexsim的所有信息全部包含在Flexsim树中,包括库实体、命令以及所有的模型信息。数的层次由相互独立的节点构成,这些节点链接在一起,并存储信息。
节点
节点是构建Flexsim树的模块。所有节点都有一个包含名称的文本。节点可以包含其它节点,可以是用来定义实体属性的关键字,或者有一个数据项。
可以附在节点上的数据项类型是:数字、字符串、实体或者指针。右键单击节点,进入“插入”菜单选项,就可以将数据附于节点上。添加到节点的选项有四个。可以使用快捷键来添加数字、字符串(文本)、实体和指针数据,分别是N、T、O和P键。点击节点,按下相应的快捷键,就可以给节点添加数据。节点也可以含有可执行代码。要使一个节点成为可执行节点,第一步为节点添加字符串数据,然后拨动锁定此节点为C++或Flexscript节点。右键单击节点,进入“生成”菜单,就可以拨动锁定此节点为C++或Flexscript节点。
不同类型节点的符号如下:
标准: 实体: 属性/变量: 函数 (C++): 函数 (FlexScript):
可以在树中添加和删除节点。点击节点,按删除键就能删除节点。右键在已存在的节点上单击,然后选择“编辑|插入”,就可以为树增加节点,这样一个新的节点即刻就会插入进来。此操作的快捷键是在先高亮该节点之后击空格键。
节点也可以包含子节点列表,称为内容分支。如果节点包含子节点,可以通过点击按钮展开它。选择 “编辑|插入到”菜单,或者敲击快捷键“回车”键可以将一个节点插入到已存在的节点内容中。
含有实体数据的节点可能包含第二个子节点列表,此列表可能包含于树的另一个独立分支中。此子节点列表叫做实体的属性树,里面包含描述实体属性的数据。一个包含实体数据的节点通常叫做实体节点。当点击实体节点时,可以看见在节点左边有一个较大的 图标。点击此按钮将会打开实体的属性树分支。
下图显示了库树中的暂存区实体的一个展开实体属性树
有实体数据的节点,属性树可以包含许多特殊的属性节点。如果一个节点在实体里面,且有一个关键属性名称,则对这个实体来说,它将拥有特定的含义。属性的实际含义取决于属性本身和实体的类型。例如,对实体位置属性,有:“spatialx”、“spatialy”、“spatialz”。Flexsim中的变量属性列表可以在属性提示中找到。
除了包含模型、库和项目信息之外,Flexsim也存储所有的视窗和界面信息。所有打开的视窗、菜单、工具条以及按钮都在Flexsim树中有相应的体现。我们称这些类型的节点为视图对象。
常规组织树
Flexsim根树的结构分成两部分,分别是项目树和视图布局树。
项目树包含可执行数据、库和模型。
视图布局树包含视窗、编辑器和其它用户界面的信息。它也管理激活视窗。
project(项目)树:
要查看项目树可点击主菜单选项:视图|系统信息|主树。项目树以最基础层次包含项目。每一个项目都含有如下极其重要的子树:可执行、库、模型、撤销和媒体文件。
exec(执行)
此树包含仿真的可执行数据。其中有仿真时间、事件表以及其它关于模型运行的信息。
library(库)
模型中使用的实体库。
model(模型)
仿真模型。
undo(撤销)
保持撤销历史记录。此节点的数值是能够撤消的步数的限制。如果没有数值,就不能执行撤销。也可以全局禁止撤销功能。
media媒体文件
存储图形、3D模型和声音。
视图布局树:
点击主菜单选项:视图|系统信息|视图树,可以查看视图布局树。视图树包含创建实体、存储实体以及使用实体图形用户界面的信息。
XE "逻辑" XE "逻辑For循环" XE "逻辑If语句" XE "逻辑Switch语句" XE "逻辑While循环" XE "编写" XE "比较" XE "执行命令" XE "命令" XE "while" XE "switch" XE "OR" XE "NOT" XE "for" 在Flexsim中编写逻辑
C++的所有能力在此均可应用。但是作为一个Flexsim的建模人员,只需要知道一小部份命令就可以建立非常复杂的模型。
从何处获得帮助
当想要知道用什么命令以及怎么使用而需要帮助时,可以参考命令集和命令提示视窗。在这些视窗中可以快速获得需要的信息。
一般规则
下面是建立用户逻辑时需要知道的一般规则。
语言对大小写敏感(A不同于a)
不需要特殊的格式(鼓励灵活运用空格、制表位以及语句换行)
如果不明确说明,数值都是双精度的浮点值
文本字符串通常用双引号引起来,如“mytext”
函数之后有圆括号,用逗号分隔函数的参数,如moveobject(object1,object2)。
函数或命令总是以分号结尾
圆括号可以在数学或逻辑表达式中自由应用生成组合
尖括号用来定义程序块
用//将一行的其余部分注释掉
在命名时不要使用空格或特殊字符
名称变量和明确的值可以在表达式中互换使用
数学运算符
下列给出了用于数值计算的各种数学运算符。
运算符
浮点数示例 (=结果)
整数示例 (=结果)
+
+ (=)
2+3 (=5)
-
(=)
5-2 (=3)
*
* (=)
3*4 (=12)
/
(=)
20/7 (=2)
% (整数取模)
34%7(=6)
sqrt()
sqrt() (=)
pow()
pow(,) (=)
pow(3,2) (=9)
round()
round() (=6)
frac()
frac() (=)
fmod() (浮点数取模)
fmod(,2) (=)
注意,Flexsim中默认数值为双精度浮点数,所以编写逻辑的时候通常要把运算符当作是适用于浮点数运算的。
变量的比较
下表给出了比较两个数值或变量的运算符。
运算符
示例 (结果)
> (大于)
> (假)
< (小于)
< (真)
>= (大于等于)
45 >= 45 (真)
<= (小于等于)
45 <= 32 (假)
== (等于)
45 == 45 (真)
!= (不等于)
45 != 35 (真)
comparetext()
comparetext(getname(current), "Processor5)
关系变量
下表给出了关联几个比较的不同逻辑运算。
运算符
示例
&& (逻辑 AND)
x>5 && y<10
|| (逻辑 OR)
x==32 || y>45
! (逻辑 NOT)
!(x==32 || y>45)
min()
min(x, y)
max()
max(x, y)
设定和改变变量
下表给出了设定和修改变量的方式。
操作
示例
=
x = x + 2;
+=
x += 2; (same as x = x + 2)
-=
x -= 2; (same as x = x - 2)
*=
x *= 2; (same as x = x * 2)
/=
x /= 2; (same as x = x / 2)
++
x ++; (same as x = x + 1)
--
x --; (same as x = x – 1)
变量类型
Flexsim中,只需要使用四种类型的变量,如下表所示:
int
整数
double
双精度浮点数
string
字符串
fsnode*
Flexsim节点或实体的指针
参考Flexsim树结构获取更多关于fsnode*(或Flexsim节点)的信息。
声明和设定变量
下面给出如何声明和设定变量的示例。
int index = 1; double weight = ; string category = “groceries”; fsnode* nextobj = next(current);
命令的执行
在Flexsim执行命令分为如下的几步。首先键入命令的名称,后面跟前括号;然后键入命令的参数,用逗号隔开,每个参数都可以是变量、表达式,或者甚至也可以是另一命令;用后括号结束命令,并跟分号。参考命令集可获取有关命令的详细信息以及它们的功能和参数列表。参考基本建模函数那一节可快速获取常用命令信息。
语法
示例
commandname( parameter 1, parameter 2, parameter 3 ...);
coloryellow(current);
setrank(item, 3 + 7);
setitemtype(item, getlabelnum(current, "curitemtype"));
程序流程结构
下面给出一些程序结构可供用户修改自己的程序代码流程。
逻辑If语句
If语句用来在表达式为真时,执行某些代码,而表达式为假时,执行另一部分代码。
程序结构
示例
if (test expression)
{
代码块
}
else
{
代码块
}
if (content(item) == 2)
{
colorred(item);
}
else
{
colorblack(item);
}
逻辑While循环
While循环将一直在其程序块内循环直到表达式为假时才停止。
程序结构
示例
while (test expression)
{
code block
}
while (content(current) == 2)
{
destroyobject(last(current));
}
逻辑For循环
For循环与while循环相似,不同之处在于for循环通常用于明确知道循环次数的情况。开始表达式只执行一次以初始化循环。在每次循环开始时执行测试表达式,如其为假则终止循环,这和while循环一样。在每次循环的最后执行记数表达式,通常是递增某些变量,来标记一次重复的结束。
程序结构
示例
for (start expression;
test expression;
count expression)
{
代码块
}
for (int index = 1;
index <= content(current);
index++)
{
colorblue(rank(current,index));
}
逻辑Switch语句
Switch语句用来在几种备选的代码段中选择一段执行,这要根据一个变量来切换。Switch变量必须是整数。下面的例子给临时实体设定颜色,类型1设为黄色,类型5设为红色,其它类型都为绿色。
程序结构
示例
switch ( switchvariable )
{
case casenum:
{
代码块
break;
}
default:
{
代码块
break;
}
}
int type = getitemtype(item);
switch (type)
{
case 1:
{
coloryellow(item);
break;
}
case 5:
{
colorred(item);
break;
}
default:
{
colorgreen(item);
break;
}
}
XE "Drawline" XE "Drawobject" XE "Drawrectangle" XE "Drawsphere" XE "Drawtext" XE "Drawtomodelscale" XE "Drawtoobjectscale" XE "高级函数" XE "Drawcolumn" XE "Drawcube" XE "Drawcylinder" XE "Drawline" XE "Drawobject" XE "Drawrectangle" XE "Drawdisk" XE "逻辑表达式" XE "设定变量" XE "数学操作符" XE "打印输出" XE "实体变量" XE "实体属性" XE "实体指代引用" XE "实体控制" XE "实体标签" XE "实体空间属性" XE "实体统计值" XE "基本建模函数" XE "命令" XE "Xloc" XE "Tonode" XE "Tonum" XE "Userinput" XE "Statenum" XE "Stopinput" XE "Stopobject" XE "Setrank" XE "Setrot" XE "Setsize" XE "Setstate" XE "Settablenum" XE "Settablesize" XE "Sendmessage" XE "Setcolor" XE "Setframe" XE "Setitemtype" XE "Setlabelnum" XE "Setlabelstr" XE "Setloc" XE "Setname" XE "Setnodename" XE "Setnodenum" XE "Setnodestr" XE "Setobjectimageindex" XE "Setobjectshapeindex" XE "Setobjecttextureindex" XE "Resetmodel" XE "Resumeinput" XE "Resumeoutput" XE "Senddelayedmessage" XE "Resumeobject" XE "Cellrc" XE "Centerobject" XE "Clearglobaltable" XE "Closeinput" XE "Closeoutput" XE "Cmdcompile" XE "Colorred" XE "Concat" XE "Containerobject" XE "Apchar" XE "Dbchangetable" XE "Dbclose" XE "Dbgetfieldname" XE "Dbgetmetrics" XE "Dbgetnumcols" XE "Dbgetnumrows" XE "Dbgettablecell" XE "Dbopen" XE "Dbsettablecell" XE "Dbsettablecell" XE "Dbsqlquery" XE "Delaytime" XE "Excelclose" XE "Excelimportnode" XE "Excelimporttable" XE "Excellaunch" XE "Excelopen" XE "Excelquit" XE "Excelreadnum" XE "Excelreadstr" XE "Excelsetsheet" XE "Excelwritenum" XE "Excelwritestr" XE "Drawcylinder" XE "Getcreationtime" XE "Getdatatype" XE "Getentrytime" XE "Getframe" XE "Getinput" XE "Getitemtype" XE "Getlabelnum" XE "Getlabelstr" XE "Getname" XE "Getnodename" XE "Getnodenum" XE "Getnodestr" XE "Getoutput" XE "Getrank" XE "Getstatenum" XE "Getstatestr" XE "Gettablecols" XE "Gettablenum" XE "Gettablerows" XE "Gettablestr" XE "Getvarnode" XE "Getvarnum" XE "Getvarstr" XE "if" XE "Inc" XE "Inobject" XE "Insertcopy" XE "Xsize" XE "Yloc" XE "Yrot" XE "Ysize" XE "Zloc" XE "Zrot" XE "Zsize" XE "Moveobject" XE "Msg" XE "Stringtonum" XE "Ncols" XE "Nodeadddata" XE "Nodeinsertafter" XE "Nodeinsertinto" XE "Nodetopath" XE "Spacescale" XE "Spacetranslate" XE "Numtostring" XE "Setvarnum" XE "Setvarstr" XE "Spacerotate" XE "ODBC" XE "Openinput" XE "Openoutput" XE "Outobject" XE "Pf" 基本建模函数和逻辑表达式
这里给出Flexsim中常用命令的快捷参考。参见命令集可获取更多有关这些命令的详细信息。
实体参量
下列的命令和存取变量在Flexsim中被用作实体引用。
变量current和item
current - 变量current是当前资源实体的引用。通常可以是下拉菜单中的一个存取变量。
Item - 变量item是某触发器或函数所涉及的临时实体引用。通常可以是下拉菜单中的一个存取变量。
引用命令
命令(参数列表)
说明
示例
first(node)
返回的是所传递的实体中排序第一的对象的引用
first(current)
last(node)
返回的是所传递的实体中排序倒数第一的对象的引用
last(current)
rank(node,ranknum)
返回的是所传递的实体中某给定排序的对象的引用
rank(current,3)
inobject(object,portnum)
返回的是与所传递的实体的输入端口号相连的对象的引用
inobject(current,1)
outobject(object,portnum)
返回的是与所传递的实体的输出端口号相连的对象的引用
outobject(current,1)
centerobject(object,portnum)
返回的是与所传递的实体的中间端口号相连的对象的引用
centerobject(current,1)
next(node)
返回的是所传递的实体中排序下一个对象的引用
next(item)
实体属性
命令(参数列表)
说明
getname( object )
返回实体的名称
setname( object, name )
设定实体的名称
getitemtype( object )
返回实体中临时实体类型的值
setitemtype( object, num)
设定实体中临时实体类型的值
setcolor( object, red, green, blue )
设定实体的颜色
colorred( object ) blue,green,white...
设定实体的颜色为红、蓝、绿、白等
setobjectshapeindex ( object , indexnum )
设定实体的3D形状
setobjecttextureindex ( object , indexnum )
设定实体的3D纹理
setobjectimageindex ( object , indexnum )
设定实体的2D 纹理,通常只在平面视图中使用
实体空间属性
命令(参数列表)
说明
xloc( object ) yloc( object ) zloc( object )
这些命令返回实体x、y、z轴向的位置
setloc( object, xnum, ynum, znum )
此命令设定实体x、y、z轴向的位置
xsize( object ) ysize( object ) zsize( object )
这些命令返回实体x、y、z轴向的尺寸大小
setsize( object, xnum, ynum, znum )
此命令设定实体x、y、z轴向的尺寸大小
xrot( object ) yrot( object ) zrot( object )
这些命令返回实体围绕x、y、z轴向的旋转角度
setrot( object, xdeg, ydeg, zdeg )
此命令设定实体围绕x、y、z轴向的旋转角度
实体统计值
命令(参数列表)
说明
content( object )
返回实体当前数量
getinput( object )
返回实体的输入统计
getoutput( object )
返回实体的输出统计
setstate( object, statenum )
设定实体的当前状态
getstatenum( object )
返回实体的当前状态
getstatestr( object )
以字符串返回实体当前状态
getrank( object )
返回实体的排序
setrank( object,ranknum )
设定实体的排序
getentrytime( object )
返回实体进入到当前所在实体中的时刻
getcreationtime( object )
返回实体的创建时刻
实体标签
命令(参数列表)
说明
getlabelnum( object, labelname ) getlabelnum( object, labelrank)
返回实体的标签值
setlabelnum( object, labelname , value ) setlabelnum( object, labelrank , value )
设定实体的标签值
getlabelstr( object, labelname )
获得实体标签的字符串值
setlabelstr( object, labelname , value ) setlabelstr( object, labelrank , value )
设定实体标签的字符串值
label( object, labelname ) label(object, labelrank)
返回一个作为节点的标签的引用,此命令常用在把标签当作一个表来使用的情况下。
表
命令(参数列表)
说明
gettablenum( tablename / tablenode / tablerank, rownum, colnum )
返回表中特定行列的值
settablenum( tablename / tablenode / tablerank, rownum, colnum, value)
设定表中特定行列的值
gettablestr( tablename / tablenode / tablerank, rownum, colnum )
返回表中特定行列的字符串值
settablestr( tablename / tablenode / tablerank, rownum, colnum, value)
设定表中特定行列的字符串值
settablesize( tablename / tablenode / tablerank, rows, columns )
设定表的行列数大小
gettablerows( tablename / tablenode / tablerank)
返回表的行数
gettablecols( tablename / tablenode / tablerank)
返回表的列数
clearglobaltable( tablename / tablenode / tablerank)
将表中所有数字值设为0
实体控制
命令(参数列表))
说明
closeinput( object )
关闭实体的输入端口
openinput( object )
重新打开实体的输入端口
closeoutput( object )
关闭实体的输出端口
openoutput( object )
重新打开实体的输出端口
sendmessage( toobject, fromobject, parameter1, parameter2, parameter3 )
触发实体的消息触发器
senddelayedmessage( toobject, delaytime, fromobject, parameter1, parameter2, parameter3 )
在一段特定时间延迟后触发实体的消息触发器
stopobject( object, downstate )
无论实体在进行什么操作,都令其停止,并进入指定的状态
resumeobject( object )
使实体恢复其原来的无论什么操作
stopoutput( object )
关闭实体的输出端口,并累计停止输出的请求
resumeoutput( object )
在所有停止输出请求都恢复以后,打开实体的输出端口
stopinput( object )
关闭实体的输入端口,并累计停止输入的请求
resumeinput( object )
在所有停止输入请求都恢复以后,打开实体的输入端口
insertcopy( originalobject, containerobject )
往容器里插入新的实体复制品
moveobject( object, containerobject )
将实体从当前容器移到它的新容器中
高级函数
实体变量
命令(参数列表)
说明
getvarnum( object, “variablename” )
返回给定名称的变量的数值
setvarnum( object, “variablename” , value )
设定给定名称的变量数值
getvarstr( object, “variablename” )
返回给定名称的变量的字符串值
setvarstr( object, “variablename” , string )
设定给定名称的变量的字符串值
getvarnode( object, “variablename” )
返回一个节点,作为指向给定名称的变量的引用
任务执行器控制
参见任务序列,可以获得更多有关控制任务执行器的信息。
提示和界面输出
命令(参数列表)
说明
pt( text string )
向输出控制台打印文本
pf( float value )
向输出控制台打印浮点数值
pd( discrete value )
向输出控制台打印整数数值
pr( )
在输出控制台中建新的一行
msg( “title”, “caption” )
打开一个简单的“ 是、否、取消”消息框
userinput( targetnode, “prompt” )
打开一个可以设定模型节点值的对话框
concat( string1, string2, etc. )
合并两个或多个字符串
更多高级函数
下面是可能使用到的更多高级函数。这里没有提供参数列表,参见命令集可获得更多信息。
节点命令 - node(), nodeadddata(), getdatatype(), nodetopath(), nodeinsertinto(), nodeinsertafter(), getnodename(), setnodename(), getnodenum(), getnodestr(), setnodenum(), setnodestr(), inc();
数据交换命令 - stringtonum(), numtostring(), tonum(), tonode(), apchar();
节点表命令 - setsize(), cellrc(), nrows(), ncols();
模型运行命令 - cmdcompile(), resetmodel(), go(), stop();
3D个性化绘制代码命令 - drawtomodelscale(), drawtoobjectscale(), drawsphere(), drawcube(), drawcylinder(), drawcolumn(), drawdisk(), drawobject(), drawtext(), drawrectangle(), drawline(), spacerotate(), spacetranslate(), spacescale();
Excel命令 - excellaunch(), excelopen(), excelsetsheet(), excelreadnum(), excelreadstr(), excelwritenum(), excelwritestr(), excelimportnode(), excelimporttable(), excelclose(), excelquit();
ODBC命令 - dbopen(), dbclose(), dbsqlquery(), dbchangetable(), dbgetmetrics(), dbgetfieldname(), dbgetnumrows(), dbgetnumcols(), dbgettablecell(), dbsettablecell();
运动学命令 - initkinematics(), addkinematic(), getkinematics(), updatekinematics(), printkinematics()
运动学功能
运动学功能用来使一个实体同时执行多个运动操作,每个运动都有各自的加速度、减速度、开始速度、结束速度以及最大速度属性。例如,起重机通常有几个马达驱动,一个马达驱动横梁沿着轨道运行,另一个驱动台车沿着横梁运行,还有一个通过钢索提升吊钩。每一个马达都有自己的加速度、减速度和最大速度属性。这三个马达同时工作,就赋予起重机动力学特征非常鲜明的运动行为。在引入运动学功能之前模拟此行为的最简单的方法是在模型树中定义三个不同层次的实体顺序,每个实体模拟一种动作或运动。然而这样可能会使模型枯燥且不友好。运动学功能则允许一个实体同时进行几种运动,从而很好地解决这个问题。此帮助页定义了运动学功能的API(应用程序接口)。以后将在这些API上建立更多地功能,如,表运动学命令可自动生成运动,用来从表中或从TASKTYPE_KINEMATICS任务中寻找数值。但现在,首先来了解运动学的核心API。
进行运动学操作的第一步是调用initkinematics命令,初始化运动数据,保存类似起始位置和实体转角等所需要完成的动作的数据。初始化运动后,就可以用addkinematic命令给出实体后继的行进/旋转操作了。例如,可以规定实体在第5秒钟开始在x方向行进10单位,给定加速度、减速度及最大速度。然后可以规定实体在第7秒开始在y方向行进10单位,分别给予不同的加速度、减速度及最大速度。这两个运动的结果是实体在刚开始时在x方向行进,然后将同时也开始在Y方向加速,经过一个抛物线路径到达目的地。每一个独立的运动都用addkinematic命令添加。然后,可以调用updatekinematics命令来在运动执行动作过程中刷新视图,此命令计算实体当前的位置和转角。后面将对此进行说明。首先从initkinematics命令开始。
与其它运动学命令一样,必须为initkinematics命令传递一个空节点的引用作为第一个参数,它指定了在哪里存储运动信息,或者是否从已经存储了运动信息的地方获取信息。此节点必须是没有被其它地方使用的节点,运动学功能才能够存储需要的信息。对于建模人员,此节点很可能是一个标签。运动初始化后,节点将会显示文本“do not touch(请勿接触)”。在运动学操作正在进行中时,不能在树或表视图中点击此节点,否则运动数据将可能混乱。
Initkinematics命令是可重载的,所以可以根据情况用两个不同的参数集调用initkinematics命令。用于这两个重载形式的参数如下:
void initkinematics(fsnode* datanode, fsnode* object [, int managerotation, int localcoords] )
此参数集假设用户需要移动一个实体,例如运输机。第一个参数,仍是运动数据的空节点,可能是标签、属性或者变量。第二个参数是将要执行移动的实体。此命令将保存此实体的初始位置和转角。可选参数managerotation取值为1或0。如果是1,将根据实体在给定时刻的速度来设定实体的转角。默认情况下,实体的x正方向与实体当前的速度方向一致。这样在某些情况下将很方便,例如,我们希望卡车行进的时候总指向前方。如果managerotation取值0,则除非用命令让它旋转,否则将不会转动。后面将会对这点加以说明。如果不指定这个参数,则它默认取值为0。可选参数localcoords指定后续行进命令位置的定位。例如,如果卡车已转动了45度,并且需要卡车在x方向行进5个单位,这可以有两个不同方式的解释:是依照卡车的坐标系统呢,还是依照模型的坐标系统(或者说是卡车容器的坐标系统)在x方向行进5单位?前一种情况,实体实际上将依照模型的坐标空间在x和y方向都前进个单位。后一种情况,实体将依照模型的坐标空间在X方向上前进5个单位。参数localcoords指定使用哪一种坐标系统。如果取值为1,就使用实体的坐标系统(前一种情况),注意,只使用实体的初始坐标系统来计算位置,而不管后续的坐标系统,如果后来实体在运动中转动了的话。如果取值为0,就使用实体容器的坐标系统(后一种情况)。此参数值默认为0。
void initkinematics(fsnode* datanode [, double x, double y, double z, double rx, double ry, double rz, int managerotation, int localcoords ] )
这个参数集用来直接传递初始位置和转角,而不是传递一个引用的实体。虽然当要把实体传递给参数时可能更经常使用其它参数,但此参数集可以使你更为灵活。当你需要直接传递实体的初始位置和转角时,或者当模型中位置和转角不必代表实际位置和参数的时候,可以使用这个参数集。例如,模拟一个机器手的运动,它有多个关节,分别进行不同的移动/转动,各有不同的加/减/最大速度。机械手运动的可视化展示不是通过直接的Flexsim位置和转角进行模拟的,而是通过用户自定义的绘制命令和标签或变量实现的。这样,你可能不希望运动学直接应用于转角和位置,而更希望其适用于你所关注的实体的信息。在这种情况下,一组给定的参数的运动无需看做是直接应用的x、y、z方向位置和转角,而可以看做是各沿一个轴向的6个独立的动作。这六个轴可以代表任何想要完成的动作。例如,机器手有四个关节,每个关节有一个转角值。要用运动学驱动这四个关节移动,可以让每一个关节模拟一个轴向的运动。x方向的运动部分应用于关节1的转角,y方向的运动部分应用于关节2的转角,z方向的运动部分应用于关节3的转角,rx(x轴转角)运动部分应用于关节4的转角。其它两部分,ry和rz,不用担心,可以用四个关节的各个初始转角的初始化其运动,然后为每个关节各自添加运动。当你想得到这些关节当前的转角值,以便在后面用来绘制机器手的动作时,可采用getkinematics命令而替代updatekinematics命令来确切获取这些值,而不把他们应用于某实体位置和转角。这些命令将在后面说明。
注意,x、y、 z、 rx、 ry和rz参数是可选的。如没有传递到命令中,其默认值是0。变量Managerotation和localcoords与第一个nitkinematics命令中一样。
void setkinematicsrotoffset(fsnode* datanode, double rx, double ry, double rz)
此命令只在managerotation取值为1被传递到运动中时使用。此命令用来设定初始转角,从这样可以管理转角。默认情况下,实体的x正方向与实体当前速度方向一致。如果是卡车,你可能希望卡车能够后退,而不是调转掉头来正面行进,这时,你可以指定卡车的转角偏移量为(0,0,180)。
double addkinematic(fsnode* datanode, double x, double y, double z, double targetspeed [, double acc, double dec, double startspeed, double endspeed, double starttime, int type ] )
此命令将一个运动添加到运动集中。参数x、y、z指定了一个位置或转角的偏移。例如,位置(5,5,0)告诉运动是向x方向行进5,向y方向行进5。注意这是相对实体当前位置的偏移,而不是绝对坐标位置。参数targetspeed指定行进操作的目标速度。其它参数是可选的。参数Acc指定加速度,参数Dcc指定减速度,参数Startspeed指定运动的开始速度。如果这个速度比目标速度高,则实体将以这个速度开始运行并减速到目标速度。参数Endspeed指定操作的结束速度。如果结束速度比目标速度大,则在操作的后期,实体将要进行从目标速度加速到结束速度。参数starttime是运动开始时间,为仿真时间,不是从当前时间算起的差值。参数type指定运动的类型。其值可以是KINEMATIC_TRAVEL(行进), 或KINEMATIC_ROTATE(旋转)。如果是 KINEMATIC_TRAVEL运动将用作x、y、z方向的位置值,如果是KINEMATIC_ROTATE,则运动将用作rx、ry、rz的转角值,速度定义为单位时间转动的角度,加/减速度定义为每单位时间平方的角度。此命令返回运动将完成的时刻。如果没有可选参数的传递,则它们的默认值如下:
acc: 0 (或者无穷大) dec: 0 (或者无穷大) startspeed: 0 endspeed: 0 starttime: 当前时间 type: KINEMATIC_TRAVEL
void updatekinematics(fsnode* datanode, fsnode* object [, double updatetime])
此命令应在运动学操作的中间调用,通常用来绘制或预先绘制画面。它依据加入的所有运动和当前时间计算,然后设定实体的当前位置和转角。参数updatetime是可选的,如没有递入值,其默认值是当前仿真时间。
double getkinematics(fsnode* datanode, int type [, int kinematicindex, double updatetime/traveldist])
此命令用来获取运动的直接信息。可以获取整个运动集的信息,也可以获取单个运动的信息。如果运动没有直接应用于实体的位置和转角,或者在逻辑中需要这些信息,就使用此命令。参数type指定需要获取的信息类型,下面将会给出简短说明。参数kinematicindex是可选的,指定需要获取哪一个运动的信息。例如,如果添加一个在x方向行进5单位的运动作为第二个用addkinematic命令添加的运动,则将2作为kinematicindex参数传递给getkinematics命令。如果不传递值,或者传递0值,则默认获取全部运动的信息。参数updatetime/traveldist也是可选的。此参数的意义取决于对参数类型的指定。有时不使用此参数。有时它代表用户想要获取信息的更新时间。如没有传递值,则默认为当前时间。在KINEMATIC_ARRIVALTIME查询中,此参数代表行进距离。下面对此参数的每个查询类型做一介绍。
如果正在获取所有运动的信息(kinematicindex没有指定值,或者为0),可以将如下的值作为类型参数进行传递。
KINEMATIC_X, KINEMATIC_Y, KINEMATIC_Z:返回实体在给定时间将会所在的x、y、z位置。
KINEMATIC_RX, KINEMATIC_RY, KINEMATIC_RZ:返回实体在给定时间将会形成的x、y、z转角。这只有在转角不是由运动学功能管理,而是由用户自己管理才有效。
KINEMATIC_VX, KINEMATIC_VY, KINEMATIC_VZ:返回实体在给定时间将具有的x、y、z方向的速度。
KINEMATIC_VRX, KINEMATIC_VRY, KINEMATIC_VRZ:返回实体在给定时间将具有的x、y、z方向的转动速度。
KINEMATIC_NR:返回已添加的运动数目。这里不使用updatetime参数。
KINEMATIC_STARTTIME:返回所有运动中最早的开始时间。这里不使用updatetime参数。
KINEMATIC_ENDTIME:返回所有运动中最晚的结束时间。这里不使用updatetime参数。
KINEMATIC_VELOCITY:返回给定时间内的总速度标量值。
KINEMATIC_RVELOCITY:返回给定时间的总转动速度标量值。只有用户管理转动时有效。
KINEMATIC_ENDDIST:返回实体起始位置到所有运动最终目标位置的距离。这里不使用updatetime参数。
KINEMATIC_ENDRDIST:返回实体起始转角到所有运动最终目标转角的距离。只有用户管理转动时有效。这里不使用updatetime参数。
KINEMATIC_TOTALDIST:返回添加的所有运动的距离之和。它与KINEMATIC_ENDDIST有细微的差别。例如,如果第一个运动在x方向行进10,第二个运动在x方向行进-10,则enddist的值为0,而totaldist的值为20。这里不使用updatetime参数。
KINEMATIC_TOTALRDIST: 返回添加的所有转动的距离之和。只有用户管理转动时有效。这里不使用updatetime参数。
KINEMATIC_CUMULATIVEDIST:返回所有运动累积的行进距离,这与enddist或totaldist不同。它计算实体在整个运动中所沿经的曲线路径距离。这里不使用updatetime参数。
KINEMATIC_CUMULATIVERDIST:返回所有运动累积的转动距离。只有用户管理转角时有效。这里不使用updatetime参数。
KINEMATIC_TOTALX, KINEMATIC_TOTALY, KINEMATIC_TOTALZ:返回所有已添加运动的x、y、z各分量和。这里不使用updatetime参数。
KINEMATIC_TOTALRX, KINEMATIC_TOTALRY, KINEMATIC_TOTALRZ:返回所有已添加运动的rx、ry、rz各分量和。只有用户管理转动时有效。这里不使用updatetime参数。
如果正在获取某单个运动的信息(通过传递一个大于0的kinematicindex参数),可以将如下的值作为类型参数传递。
KINEMATIC_X, KINEMATIC_Y, KINEMATIC_Z:返回给定运动在给定时刻的位置的x、y、z分量。例如,添加一个运动使在x方向行进10单位,在时间5开始的运动,你需要获取时此运动在时间7时的x方向位置,你可以调用getkinematics(datanode, KINEMATIC_X, index, 7)去获取这个值。
KINEMATIC_RX, KINEMATIC_RY, KINEMATIC_RZ:返回某旋转运动在给定时刻将所处的位置的rx、ry或rz分量。
KINEMATIC_VX, KINEMATIC_VY, KINEMATIC_VZ:返回给定运动在给定时刻的速度的x、y或z分量。
KINEMATIC_VX, KINEMATIC_VY, KINEMATIC_VZ:如果是旋转运动,返回给定转动在给定时刻的转速的x、y或z分量。
KINEMATIC_ENDTIME:返回给定运动将结束操作的时间。与addkinematic命令返回的endtime时间相同。这里不使用updatetime参数。
KINEMATIC_STARTTIME:返回给定运动将开始操作的时间。这与添加运动时传递的starttime一样。这里不使用updatetime参数。
KINEMATIC_ARRIVALTIME:在此查询中,参数updatetime/traveldist用来作为给定运动所要求的行进距离。这将返回某给定运动到达某特定段的距离的时间。例如,如果添加了一个运动,让实体在x方向行进5单位,但想知道行进5个单位中的3个单位需要多长时间,可以采用此查询,并传递3作为参数traveldist的值。
KINEMATIC_STARTSPEED:返回运动的开始速度。这是在addkinematic命令中指定的startspeed。这里不使用updatetime参数。
KINEMATIC_ENDSPEED:返回运动的结束速度。通常是addkinematic命令中指定的endspeed;但是如果运动不能在给定距离里加/减速到指定的endspeed,返回的就有可能不是结束速度。这里不使用updatetime参数。
KINEMATIC_ACC1:返回用来从开始速度加速到目标速度的加速度值。如果开始速度小于目标速度,则这个值是加速度值,否则就是负的减速度值。这里不使用updatetime参数。
KINEMATIC_ACC2:返回用来从目标速度加速到结束速度的加速度值。如果结束速度小于目标速度,则这个值是负的减速度值,否则就是加速度值。这里不使用updatetime参数。
KINEMATIC_PEAKSPEED:返回运动的峰值速度或者“可达速度”。通常与在addkinematic命令中指定的目标速度是一样的,但是,如果在他必须行进的距离内无法达到目标速度,两者就不一样。这里不使用updatetime参数。
KINEMATIC_ACC1TIME:返回运动从开始速度加速/减速到目标速度所用的总时间。这里不使用updatetime参数。
KINEMATIC_PEAKTIME:返回运动按峰值速度行进的总时间。这里不使用updatetime参数。
KINEMATIC_ACC2TIME:返回运动从目标速度加速/减速到结束速度的总时间。这里不使用updatetime参数。
KINEMATIC_TOTALDIST:返回运动操作的总距离。
KINEMATIC_TOTALRDIST:如果是旋转运动,则返回运动操作的总转动距离
KINEMATIC_TOTALX, KINEMATIC_TOTALY, KINEMATIC_TOTALZ:返回运动操作的总距离的x、y或z分量。这与传递给addkinematic命令的值一样。这里不使用updatetime参数。
KINEMATIC_TOTALRX, KINEMATIC_TOTALRY, KINEMATIC_TOTALRZ:如果是旋转运动,返回运动操作的转动总距离的rx、ry或rz分量。这与传递给addkinematic命令的值一样。这里不使用updatetime参数。
KINEMATIC_VELOCITY:返回给定时刻运动的总速度。
KINEMATIC_RVELOCITY:如果是旋转运动,返回给定时刻的运动总转动速度。
KINEMATIC_TYPE:如果指定运动是行进操作,则返回KINEMATIC_TRAVEL,如果运动是选择操作,则返回KINEMATIC_ROTATE。
void profilekinematics(fsnode* datanode [, int index ])
此命令打印运动信息到输出控制台。参数index可选。如果不传递index变量,将会打印所有已添加运动的信息。如果传递变量,则变量index是用户想要打印其相关信息的已添加运动的索引号。
XE "状态列表" XE "状态" XE "Stopobject" XE "STATE_BLOCKED" XE "STATE_BREAKDOWN" XE "STATE_BUSY" XE "STATE_COLLECTING" XE "STATE_CONVEYING" XE "STATE_DOWN" XE "STATE_EMPTY" XE "STATE_GENERATING" XE "STATE_IDLE" XE "STATE_LOADING" XE "STATE_OFFSET_TRAVEL_EMPTY" XE "STATE_OFFSET_TRAVEL_LOADED" XE "STATE_PROCESSING" XE "STATE_RELEASING" XE "STATE_SCHEDULED_DOWN" XE "STATE_SETUP" XE "STATE_TRAVEL_EMPTY" XE "STATE_TRAVEL_LOADED" XE "STATE_UNLOADING" XE "STATE_UTILIZE" XE "STATE_WAITING_FOR_OPERATOR" XE "STATE_WAITING_FOR_tRANSPORTER" 状态列表
下面是状态序号列表和它们各自的宏。当编写必须设定实体状态的代码时,例如采用stopobject()命令或者utilize task HYPERLINK "file:///D:\\WebHelp\\Task_Sequences\\" \l "UtilizeTask" (使用任务),可以将这些宏代替以数字。参考库实体,可获得更多关于每个实体的每个状态含义方面的信息。
1 - STATE_IDLE (空闲) 2 - STATE_PROCESSING (处理) 3 - STATE_BUSY (忙) 4 - STATE_BLOCKED (堵塞) 5 - STATE_GENERATING (产生) 6 - STATE_EMPTY (空) 7 - STATE_COLLECTING (收集) 8 - STATE_RELEASING (释放) 9 - STATE_WAITING_FOR_OPERATOR (等待操作员) 10 - STATE_WAITING_FOR_TRANSPORTER (等待运输机) 11 - STATE_BREAKDOWN (停机) 12 - STATE_SCHEDULED_DOWN (调度_停机) 13 - STATE_CONVEYING (输送) 14 - STATE_TRAVEL_EMPTY (行进_空) 15 - STATE_TRAVEL_LOADED 16 - STATE_OFFSET_TRAVEL_EMPTY (偏移_行进_空载) 17 - STATE_OFFSET_TRAVEL_LOADED (偏移_行进_装载) 18 - STATE_LOADING (装载中) 19 - STATE_UNLOADING (卸载中) 20 - STATE_DOWN (停机) 21 - STATE_SETUP (预置) 22 - STATE_UTILIZE (使用)
3D媒体
使用帧
一组帧是用一个共用名称绑定在一起的多个3D形状画面。
如果一个实体使用包含多个帧的3D形状,则此实体的形状的显示可以用setframe()命令改变。
0是基础帧“”
1是第一个帧“”
2是第二个帧“”
N是第N个帧“”
帧可用来:
显示固定资源的不同状态
显示临时实体生命周期里的不同阶段
原材料
中间产品
成品
当一个实体需要显示不同3D形状时,可以简化形状变化过程
准备帧
要准备一组3D形状画面当作帧使用,可按下面做:
收集两个或更多需要用于同一实体的帧的形状;
将帧保存为同类型的文件(3ds, wrl);
确保每个帧都使用了基本文件的.xds文件,或者至少没有被它损坏(每一帧可以有自己的.yds文件);
给帧文件适当命名。第一个文件是“”或“”,每个继承文件是“nameFRAME#.3ds”或者“nameFRAME#.wrl”,例如, , 等。
采用导入3D媒体部分中的步骤可以导入帧。使用基本实体作为选中文件的名称。然后,在仿真中,使用setframe()和getframe()命令设定想要展示哪个帧。0表示基本帧:,1表示第一个帧:等等。
XE "3D媒体" XE "导入" XE "Wrl 文件" XE "3D文件" XE "3ds文件" XE "3D" XE "Dfx" 导入3D媒体
Flexsim可以导入几种类型的3D媒体,包括3ds、wrl和dxf和stl文件。导入方法有两种:第一种,也是最普遍的一种,从实体的可视化属性页选中一个3D文件即可导入;第二种,如果有一些未被任何模型实体默认使用的3D媒体文件,但需要在模型运行过程中使用这些3D媒体文件来动态改变模型实体的3D显示,那么,可以用媒体导入器明确地导入媒体文件。
下面是一些如何正确导入媒体的提示和建议。
关于导入wrl文件的注释:Flexsim只能导入版本的形状,版本的不可以。
关于导入stl文件的注释:Flexsim只能导入stl ascii文件, stl二进制文件不可以。
使用形状因子
每一个导入的媒体文件都有特定的缩放比例和偏移量设置,这可能导致所导入的3D模型与实体的边界不符。这种情况下,从可视化属性页视窗中编辑实体的3D HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" \l "Shape_factors" 形状因子,使它在实体黄色边界框内。
使3D实体显示Flexsim定义的颜色
当你自己设计,或者从互联网上获取3D文件时,它们常常可能在3D模型中预先定义颜色和素材。如果导入到Flexsim中的3D实体上定义了素材,则将显示这些素材,而不是在Flexsim中定义的颜色。如果需要实体的Flexsim颜色显示在3D实体上,则需要改变3D文件的顺序。在3D文件中,多边形的颜色显示必须在定义任何素材之前定义。这需要技巧来完成,并取决于所使用的3D建模程序。
3D帧
使用3D帧可以使实体更栩栩如生。对于任何3D文件均可为其指定帧,可通过创建不同的3D模型,然后将其存储为<原始文件名> FRAME<帧号>.3ds来实现。例如,操作员的原始3D文件是。如果用命令setframe(current, 0)设定其帧为0,就会绘制这个图形。它的其它帧定义在、等中。如果调用setframe(current, 3)命令,操作员将绘制<原始文件名>中指定的3D文件。
细节层次
你可以为给定的3D文件指定多个层次的细节。这能够明显地增加模型绘制速度。离实体越远,绘制的细节越少,这样可以提高速度。
XE "导入" XE "AutoCAD图形" XE "AutoCAD" XE "Dfx" 导入AutoCAD图形
下面是导入AutoCad dxf文件之前须准备的步骤:
消除所有不必要信息。AutoCAD文件通常包括许多不必要的信息。消除这些信息可以使得模型更加简洁,并减少显卡的负担。结果是更容易建模和展示模型。
根据Flexsim的单位调整缩放比例:AutoCAD文件不必以英尺或米为单位来绘制,导入到Flexsim中时可能需要重新调整缩放比例。为确定比例大小,按如下几步操作:在AutoCAD中测量一段已知距离(_dist),应用下面的方程式:比例因子=Flexsim距离/ AutoCAD距离。要在AutoCAD中调整实体比例,步骤如下:选择需要调整比例的实体;在命令栏里键入“_scale”或者在菜单中选择比例命令;指定参考点;在命令栏中键入合适的比例因子。
将实体移动到原点:AutoCAD图形通常使用特定的坐标系。这总是意味着实体通常不在原点(0,0,0)附近。导入一个实体不在原点附近的dxf文件通常导致看不到导入的形状。在AutoCAD中移动实体的步骤如下:
选中要移动的实体;
在命令栏中键入“_move” ,或者在菜单里选择移动命令;
指定参考点;
在命令栏里键入所需要的位置。
拆分复杂实体:Flexsim只能导入基本的形状,所以将AutoCAD图形中的所有复杂实体拆成基础形状十分重要。在AutoCAD中拆开复杂实体的步骤如下:
选中要拆分的实体;
在命令栏中键入“_explode” ,或者在菜单里选择拆分命令;
重复上面的步骤直到没有其它拆开了的实体。
在Flexsim中:
1. 拖动一个可视化工具到模型中,打开参数视窗。 2. 在“视景显示 ”中选择“导入形状”。 3. 在“文件名 ”域段中选择想要导入的AutoCAD文件。 4. 在想要导入媒体文件的可视化工具上设定最小放大倍数为0。 5. 设定最大距离(通常可设100000,除非希望当移动视图时绘制的图形不可见)
XE "细节的层次" XE "Lds文件" XE "LOD" XE "Lrl文件" 细节的层次(LOD)
LOD文件是由一个共用名称绑定在一起的逐步简化的3D形状,这个名称是:
/
如果一个实体使用有LOD的3D形状,则此实体显示的3D形状取决于实体到视图镜头位置的距离。
0是基本LOD“”
1是第一个LOD“”
2是第二个LOD“”
N是第N个LOD“”
LOD文件用来显示实体的不同层次,观察者近时显示较高层次的实体,观察者远时显示较低层次的实体。LOD提高模型在视图视窗中的显示速度。LOD通过在给定时间上仅仅显示少数几个高层次的重要多边形形状,可以使模型采用更多的多边形增强3D形状。
准备LOD文件
要使用一个LOD文件,须准备一组3D形状,操作如下:
收集两个或更多用于同一实体的LOD的形状;
获得保存为同样类型(3ds, wrl)的LOD文件;
确保每个LOD文件都使用了基本文件的.xds文件,或者至少没有被它损坏(每一帧都可以有自己的.yds文件);
为LOD文件适当命名。第一个文件为“”或“”,每个继承文件分别为“nameLOD#.3ds”或者“nameLOD#.wrl”,例如, , 等。
导入LOD文件可按照导入3D媒体部分中所采用的步骤。使用基本实体为选中的文件命名。
LDS/LRL文件
lds / lrl文件用来确定不同LOD文件显示的距离。lds / lrl文件必须与它们要修改的实体的名称相同,如:
–
–
lds / lrl文件信息
lds/lrl文件是由行隔开的三个数字组成的文本文件:透视射程值,透视射程模式,和正投影射程值。
透视射程值是将要在透视视图视窗中改变LOD文件的距离值。透视射程模式值是1或0,0表示线性(稍快),1表示逆距离(在远距离上有更多覆盖)。正投影射程是将要在正投影视图视窗中改变LOD文件的距离值。
XE "3D文件" XE "导入" XE "Wrl 文件" XE "Xds 文件" XE "Xrl 文件" XE "YDS 文件" XE "YRL 文件" XE "3D文件" XE "3D形状" 准备3D文件 XE "3D"
为导入而准备3D文件的步骤如下:
减少多边形的数量
3ds 和 wrl 文件通常包含许多不必要的信息。移除过多的多边形将会提高模型的视觉效果,这将使建模和模型展示更容易。
INCLUDEPICTURE "WebHelp/interacting_with_flexsim/Interacting_with_Flexsim_files/" \* MERGEFORMAT
纹理与多边形
采用制作出色的纹理可以帮助建模人员减少所需多边形的数量,而达到真实外观的效果。下面是几张Flexsim中只有很少多边形的3D文件。
INCLUDEPICTURE "WebHelp/interacting_with_flexsim/Interacting_with_Flexsim_files/" \* MERGEFORMAT
调整比例
3D文件无需按照英尺或米的单位绘制,因此在导入Flexsim后可能需要调整比例才能正常工作。调整3D文件比例的方法有三种:
1. 在3D程序里适当调整比例;
2. 调整此文件导入的可视化工具或其它实体的比例;
3. 使用xds或xrl文件。
如果要想调整此文件导入的可视化工具或其它实体的比例,则需要将3D实体的比例设为1,1,1。
将实体移动到原点
3D图形在绘制时,有时采用特殊的坐标系。这通常意味着实体不在原点(0,0,0)附近。导入一个实体不在原点附近的3ds或者wrl文件通常导致看不到导入的实体形状。因此,需要将3D实体移动到原点,或者用xds或xrl文件来进行适当的调整。
XDS/XRL文件
xds / xrl文件用来使导入的3D文件形状与要使用他们的实体形状相一致。xds / xrl文件必须与它们要修改的实体的名称相同。如:
–
–
xds / xrl文件信息
空间属性值决定3D形状的最后尺寸。偏移值是使3D形状零出并将尺寸设定为1,1,1所需的值。质心值是1或0,决定实体是围绕实体中心还是左上角旋转。
xds / xrl文件组成
xds / xrl文件是由13个数值组成的文本文件,数值间由回车分隔。可以使用文本编辑器或者写字板编辑此文件,如下所示:
DS / YRL文件
yds / yrl文件可使导入的3D形状具有更好的效果。yds / yrl文件必须与它们所调整的实体同名。如:
–
–
yds / yrl文件信息
yds /yrl文件是由3个数值组成的文本文件,数值间由回车分隔。可以使用文本编辑器或者写字板来编辑此文件,如下所示:
亮度值决定3D形状是否会受Flexsim灯光影响。
剔除背面值决定Flexsim是否绘制每个多边形的两面。如果导入的形状看起来是背向的或者奇怪的,将此值设为1。
折角值是Flexsim将停止光滑3D形状尖角的角度值。
导入3d文件到Flexsim
按如下步骤将3d文件导入到Flexsim中:
建立可视化工具;
为视景显示选择“导入形状”;
在“文件名”域段中选择想要导入的3D文件;
设定最小放大倍数(通常为0,除非希望在确定放大倍数下看不到图形);
设定最大距离(通常100000,除非希望在图中移动视图时看不见图形)。
按如下步骤改变已存在实体的形状:
到某实体的属性页;
在“3D形状”域段中选择要导入的3D文件
XE "Tmp 文件" XE "Tpg 文件" XE "Bmp文件" XE "Jpg文件" 透明度
可以用.tmp和.tpg文件类型为3D实体添加透明度。.tmp和.tpg文件是灰度比例文件,决定着相应的.bmp或.jpg文件的透明度。
对于.tmp或.tpg文件来说,白色是不透明的,而黑色是透明的,所有灰度是在透明中。纹理和透明文件的名称必须与原始的.bmp或.jpg文件一致,且必须在同一个文件夹下。例如,如果纹理文件被使用,而在同一文件夹下有一个文件,则此.tmp文件将被用来指定纹理的透明度。
关于实体排序和透明度的注释:实体的排序直接影响那个实体的透明度看起来的效果。模型中所有比透明实体排序高的实体,将不会显示在透明实体后面。
实体窗口
实体参数视窗和属性视窗
Flexsim中有两种配置实体属性的视窗,分别称为参数视窗和属性视窗。
实体属性视窗
实体属性视窗用来配置对库中所有实体的共同属性。因此,所有实体的属性视窗看上去都是一样的。所有实体都具有的共同属性有颜色、3D形状、位置、转角、尺寸、标签、端口连接和统计。每个属性视窗都有四个分页,如下面所示:
常规属性页 视景属性页 标签属性页 统计属性页
右键点击实体,在弹出菜单中选择 “属性”选项,即可打开实体的属性页。
实体参数视窗
实体参数视窗用来配置与正在编辑的实体的类型相关的属性。例如,暂存区有一个最大容量的属性,而合成器有一个接收临时实体的组成列表,因此暂存区的参数视窗就与合成器的参数视窗不同。不过,参数视窗之间也有共同的地方,例如暂存区和合成器都有一个“传递给”策略。有共性的实体其参数视窗通常有相同的地方,这一点能使你更快学会使用这些视窗。
右键点击实体,在弹出菜单中选择 “参数”选项就可以打开实体的参数页。
参数视窗有一系列不同的分页组成,有哪些分页取决于实体的类型。有几个分页为几个实体所共有。此参考文档提供了每一个参数分页,以及与所使用此分页的实体的链接。参数分页列表如下:
堆垛机分页 BFR高级分页 BTE分页 碰撞 HYPERLINK "file:///D:\\WebHelp\\object_pages\\" 分 HYPERLINK "file:///D:\\WebHelp\\object_pages\\" 页 合成器分页 HYPERLINK "file:///D:\\WebHelp\\object_pages\\" 输送机分页 HYPERLINK "file:///D:\\WebHelp\\object_pages\\" 输送机布局分页 起重机分页 HYPERLINK "file:///D:\\WebHelp\\object_pages\\" 分配器分页 HYPERLINK "file:///D:\\WebHelp\\object_pages\\" 升降机分页 固定实体分页 临时实体流分页 HYPERLINK "file:///D:\\WebHelp\\object_pages\\" 流节点分页 HYPERLINK "file:///D:\\WebHelp\\object_pages\\" 分类输送机分页 HYPERLINK "file:///D:\\WebHelp\\object_pages\\" 复合处理器分页 HYPERLINK "file:///D:\\WebHelp\\object_pages\\" 网络节点连接分页 HYPERLINK "file:///D:\\WebHelp\\object_pages\\" 网络节点主页
实体参数和属性视窗 HYPERLINK "file:///D:\\WebHelp\\object_pages\\" 实体触发器函数 HYPERLINK "file:///D:\\WebHelp\\object_pages\\" 操作员分页 HYPERLINK "file:///D:\\WebHelp\\object_pages\\" 光电传感器 HYPERLINK "file:///D:\\WebHelp\\object_pages\\" 处理器分页 HYPERLINK "file:///D:\\WebHelp\\object_pages\\" 处理时间分页 HYPERLINK "file:///D:\\WebHelp\\object_pages\\" 暂存区分页 HYPERLINK "file:///D:\\WebHelp\\object_pages\\" 货架分页 HYPERLINK "file:///D:\\WebHelp\\object_pages\\" 货架尺寸表 HYPERLINK "file:///D:\\WebHelp\\object_pages\\" 记录器参数向导 HYPERLINK "file:///D:\\WebHelp\\object_pages\\" 储液灌分页 HYPERLINK "file:///D:\\WebHelp\\object_pages\\" 机器人分页 HYPERLINK "file:///D:\\WebHelp\\object_pages\\" 分解器分页 HYPERLINK "file:///D:\\WebHelp\\object_pages\\" 发生器分页 HYPERLINK "file:///D:\\WebHelp\\object_pages\\" 任务执行器分页 HYPERLINK "file:///D:\\WebHelp\\object_pages\\" 交通控制器分页 HYPERLINK "file:///D:\\WebHelp\\object_pages\\" 运输机分页 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 可视化工具分页
参数页
XE "巷道堆垛机页" 堆垛机分页
货叉升降速度-堆垛机提升叉的上下运动速度。
货叉初始高度-此数字定义了堆垛机载货台在z方向的重置值。当模型重置时平台返回到此高度位置。当其不在执行装/卸载任务的偏移行进时,也将返回此高度位置
使用此分页的有
堆垛机
XE "绘制球" XE "碰撞处理" XE "碰撞" 碰撞分页
参见任务执行器,可以获得更多关于碰撞探测功能的信息。
碰撞检测时间间隔 - 实体碰撞检测之间经过的仿真时间。此时间不是其碰撞成员的碰撞检测之间的时间。
显示碰撞球 - 如果要碰撞实体周围显示碰撞球,就选择此选框。
检测碰撞 - 选中此复选框打开碰撞探测。
碰撞球 - 此表用来在实体上定义一个或多个碰撞球。
添加碰撞球 - 选择此按钮可以给实体添加一个新的碰撞球。在表中定义球的尺寸和位置。
删除碰撞球 - 选择此按钮可删除表中的最后一个碰撞球。
高级 - 此按钮用来优化碰撞检测速度,通过配置任务执行器,在对碰撞球进行碰撞检测时用来排除某些轴。这使得能够用较少的碰撞球来覆盖更多的检测区域。点击此按钮打开如下的视窗。不选择X、Y或Z轴向维度即可排除特定的轴向检查。配置的结果绘制在视图中。一个透明的圆柱体或平面覆盖可能在所给定的配置下发生碰撞的区域。如果想要检测某个与常规轴向不平行的轴向的碰撞,也可以输入一个旋转角度的偏移,如45度。注意,X、Y、Z维是按照全局坐标系定义的,而不是按照单个实体的坐标系。
碰撞成员 - 在模型实体列表的左边,可以给任务执行器添加碰撞成员。在列表的右边是实体碰撞成员列表。点击一个任务执行器实体就可以选中它,然后点击“>>”按钮,就可以从模型列表加一个成员到它的成员列表中。选中此实体,然后点击“<<”按钮就可以从成员列表中删除一个实体。
碰撞处理 - 此下拉菜单用来定义碰撞发生时如何处理。参见碰撞触发器下拉菜单。
使用此分页的有
任务执行器 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 运输机 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 操作员 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 起重机 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 堆垛机 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 机器人 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 升降机
XE "装盘/合并/分批" XE "用户长度" XE "合成器" XE "TargetQuantity" 合成器分页
装盘/合并/分批 - 选择合成器的工作模式。
沿合成器全长传送临时实体 - 如果选中此复选框,在其处理过程中,临时实体将从一端到另一端沿着合成器行进。
组成清单 - 此表用来定义合成器在完成收集并送往下游节点之前需要收集的每种类型临时实体的数量。合成器把从输入端口1输入的临时实体作为容器,且一次合成只接收一个。表中第二行及余下各行代表从输入端口2和更大输入端口号输入的临时实体。如果在打开此视窗的情况下要增加额外的连接,需要关闭参数视窗并重新打开,以便使你的改变注册生效。
TargetQuantity(目标数量) - 每一次合成操作需要从相关输入端口接收的临时实体的数目。
使用此分页的有
合成器
XE "间隔值" XE "间隔规则" XE "速度" XE "输送机分页" XE "虚拟长度" XE "用户长度" XE "最大容量" XE "向" 输送机分页
操作
这些参数定义了输送机如何实现其功能.
进行累积 - 如果不选此复选框,输送机就是非堆积模式。在非堆积模式的输送机上,如果一个临时实体到达了输送机末端却不能离开时,整个输送机就会停下。如果是堆积模式,则多个临时实体将在输送机上连续前行,直到撞上一个停下的临时实体,或者到达了输送机末端。堆积的临时实体之间的距离由间隔规则决定。
速度 - 此数值定义临时实体在输送机上移动的行进速度。
最大容量 - 此数值限制了输送机上同一时间能够容纳的临时实体数目。输送机上容纳的临时实体的最大数目通常是由输送机的长度和临时实体的尺寸决定的,但此参数允许显示更多。
间隔长度 - 根据在“间隔规则 ”中的定义,此值有不同的用法。
间隔规则 - 此项定义输送机上的临时实体之间的间隔距离。
物品尺寸 - 当一个临时实体碰到前面的临时实体时,将会停止移动。
物品尺寸+间隔值 - 当一个临时实体到达距前面的临时实体后边界一定距离时,就停下。此距离定义为间隔值。
间隔值 - 当一个临时实体的前边界距它前面的临时实体的前边界有一定距离时,就停止。此距离定义为间隔值。
间隔方向 - 如果间隔规则包含临时实体的尺寸,则此域段决定由它的哪一维来定义其在输送机上的尺寸。可选的是x、y、z轴尺寸.
Z 方向,Y方向 - 这些域段仅为视觉目的而设,不影响输送机的操作。这些项与“间隔方向”域段一起确定临时实体的正确方向定位。它们分别为临时实体定义了围绕输送机的z轴和y轴的旋转角度数。例如,如果在 “间隔方向”域段中选择了“物品Y尺寸”而不是默认的 “物品X尺寸”,则要将 “Z 方向” 指定为90 或 270,这才能使临时实体的y轴方向,而不是x轴方向,与输送机的长度方向一致。如果选择的“物品Z尺寸”,则要将 “Y 方向” 设定为90 或 270。
虚拟长度 - 此域段用来为输送机定义一个与实际布局长度不一样的指定值。如果输入0(默认),则模型采用输送机的实际布局长度。否则,此域段的值将作为输送机长度。当需要仿真很长的输送机,而不想在模型中横跨一大段距离,或者需要定义一个精确的距离时,就可以使用此域段。
用虚拟长度调整产品尺寸 - 此项仅为视觉目的,不影响输送机的操作。如果定义了非常巨大的虚拟长度,此域段可以调整要沿着输送机传送的产品的大小比例,以避免它们重叠。例如,如果输送机的布局长度是10,但指定了虚拟长度为100,这样,尺寸为1的临时实体只应占据输送机虚拟长度的1/100。这是模型的布局中的输送机长度的单位,但由于临时实体的大小是1单位,它将与其它临时实体发生重叠。如果选上此复选框,则临时实体的尺寸就会缩短为单位。
显示
这些参数定义输送机在模型中的外观,不影响输送机的操作功能。这些参数的联合应用可以给输送机的外观带来无限灵活性。对这些设置的配置常常是采用试错法进行的,但这里可以帮助用户快速学习每个参数如何影响输送机的外观。
纹理 - 此文件将绘制在输送机上,用以改变其基本外观。纹理分为三部分。纹理左边第三部分绘制在左侧,中间部分绘制在顶部,右边部分绘制在右侧。
纹理长度 - 此数值定义在沿输送机平面上,在重复使用纹理之前伸展的一个纹理的长度。
产品Z偏移 - 改变此数值将改变临时实体在输送机上方或下方多远的位置上绘制。0值表示临时实体刚好在输送机上。负值将使临时实体绘制在输送机平面的下方。
侧围沿输送机轮廓(非地面) - 如果选上此复选框,输送机侧围将在距输送机有一段特定的距离的地方开始绘制。如果没有选上,则在距地面有一定距离的地方开始绘制。不管哪一种方式,侧围都与输送机周线相连。
围边尺寸 - 此值决定侧围的长度。
支柱基面相对于输送机定位(非地面) - 如果选上此复选框,输送机的支柱将在距输送机一段特定距离的位置开始绘制。如果没有选上,则在距地面一定距离的地方开始绘制。不管哪一种方法,侧围都与输送机周线相连。
支柱基面位置 - 此值决定输送机支柱从哪里开始。
显示示例
下面是一些不同外观的输送机示例。这些可能并不完全符合实际,但这里只是显示其灵活性并给你一些启发。每张图片上附加了一小段说明,解释此外观中改变了哪些输送机默认外观。
有侧轨的带状输送机 围边尺寸 = - 纹理 = fs3d/
有大尺寸侧围的蓝色悬挂输送机 纹理 = <blank> 未选中 “侧围沿输送机轮廓(非地面)”复选框 围边尺寸 = 0 支柱基面位置 = 颜色变为蓝色
有Flexsim纹理的悬挂带输送机 纹理 = 产品Z偏移 = - 围边尺寸 = 0 “侧围沿输送机轮廓(非地面)机”项被选上 支柱基面位置 = 0 纹理长度 = 1
只有围边的输送机 用户纹理:同一目录下的 和 产品z偏移 = -
使用此分页的有
输送机 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 分类输送机
XE "长度" XE "转角" XE "分段" XE "分段列表" XE "Rise" XE "NrofLegs" XE "半径" XE "布局" 输送机布局分页
初始Z转角 - 此值设定输送机的转角,或者输送机第一段的方向。这与编辑属性视窗中的Z转角一样。注意,当你同时打开参数视窗和属性视窗时,编辑此值可能会出现问题,在其中一个视窗点击应用/确定按钮可能会覆盖你在另一个视窗所做的改变。
分段数 - 这里定义输送机的段数。每一段对应表中的一行。一段的所有信息都存储在表中与这一段相应的行中。如需改变段数,输入想要的数字,点击应用按钮即可。此表将自动做相应的更新。
输送机段编辑表
此表存储输送机各段的所有信息。每一行代表一段。通过编辑此表来定制输送机。有若干域段的项是自动计算的,不能够编辑。用户可以安全地进行编辑的域段如下:
类型(type) - 此数值定义此行所代表的段的类型,有效的值是:1表示直段,2表示弧段。
长度(length) - 如果是直段,则此数值定义其长度;如果是弧段,则忽略此值。
提升(rise) - 此数值定义输送机段始端到末端之间的高度差。例如,如果此值是3,则这段输送机末端比始端高3单位。
角度(angle) - 如果是弧段,则此数值定义这段输送机转过的角度度数。可以为正,也可以为负,也可以大于360度。如果是直段,则忽略此值。
半径(radius) - 此数值定义弧段的弯曲半径。半径是从旋转中心到输送机中心线的距离。如果是直段,则忽略此值。
NrofLegs - 此数定义要给这段输送机绘制的支柱的数目。这将根据输送机分页上的设定进行不同的绘制。
表中的其它域段是不能编辑的。不过它们可以给你关于这段输送机的反馈。例如,如果在其它域段内给定了这些参数,则seclength这一列将显示此分段的总长。
在参数的情况下, Startlength这一列显示输送机到此段为止不包括此段的总长。
使用此分页的有
输送机 HYPERLINK "file:///D:\\WebHelp\\object_pages\\" 分类输送机
XE "起重机提升高度" XE "起重机页" 起重机分页
起重机X/Y/Z 坐标位置-这些数值定义起重机框架的位置。注意,这与起重机实际的x/y/z位置不同。起重机的x/y/z位置描述起重机的可移动部分的位置,其框架在仿真过程中是固定不动的;而起重机的实际x/y/z位置随着起重机行进是要变化的。
起重机X/Y/Z轴尺寸-这些数值定义了起重机框架的尺寸。注意,这与起重机实际的x/y/z尺寸不一样。起重机的x/y/z尺寸描述了起重机移动部分的尺寸。
起重机Y轴尺寸-此数值定义了起重机框架沿Y轴方向的尺寸
起重机Z轴尺寸-此数值定义了起重机框架沿Z轴方向的尺寸
起重机提升高度-此数值定义了起重机开始在x/y方向行进之前要提升到的z向高度。
使用此分页的有
起重机
XE "排队策略" XE "分配器分页" XE "Dispatchtasksequence" 分配器分页
传递给 - 此下拉菜单返回任务序列应通过它进行分配的输出端口号。如果返回0,则任务序列将采用下面提到的排队策略进行排队,然后分配到第一个可用的移动资源。参见传递给下拉菜单
排队策略 - 此下拉菜单返回一个“优先级 ”数值,这被任务序列用来对其在实体的任务序列排队中进行排序。默认情况下,将返回任务序列创建时所赋予的优先级,但用户可以在这里定制任务序列的优先级。参见排队策略下拉菜单。
使用此分页的有
分配器 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\TaskExecuter" 任务执行器 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 运输器 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 操作员 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 起重机 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 堆垛机 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 机器人 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 升降机
XE "升降机分页" 升降机分页
Z轴尺寸 - 此值设定升降机框架的z方向尺寸,或它的垂直立柱的尺寸。注意,这与升降机实体的z方向实际尺寸不同。这些支柱仅为视觉效果。如果升降机必须行进到超过此范围高度,升降机载货台将会绘制在支柱之外。
Z轴坐标位置 - 此值设定升降机框架的z方向位置,或垂直立柱的位置。注意,此值与升降机实体的z方向实际位置不同,只是框架的位置。
使用此分页的有
升降机
XE "Releaseitem" XE "Nroftransportsin" XE "Nroftransportsout" XE "Holditem" 固定实体分页
此页用来为固定实体添加标签。它与常规属性页中的标签页完全相同。
XE "按下列请求运输机" XE "拉式" XE "优先级" XE "临时实体流分页" XE "临时实体页" 临时实体流分页
参见固定实体,可以获得此功能的详细信息。
输出
这些参数决定实体如何将临时实体送到下游。
连续判断送往端口 - 如果此复选框被选上,则 “送往端口”将在每次下游实体可以变为可以接收临时实体时都被重新判断。非常值得注意的是,此操作只在下游实体变为可用(可接收实体)时才执行。当下游实体已经可用,就不再进行连续判断。如果需要强制在某些时候进行重新判断,而不仅仅是在下游实体变为可用时才判断,则可以在此实体中调用openoutput()命令。
送往端口 - 此下拉菜单返回与临时实体将要进入的实体连接的输出端口号。如果返回0,则打开所有的输出端口,临时实体将移动到第一个可以接收它的下游实体。参见送往端口下拉菜单。
使用运输工具 - 如果此复选框被选上,此实体将要求一个运输机将临时实体移动到下游去。如果没有选上,临时实体将自动移动。
优先级 - 此参数只有在选用了 “使用运输机”的情况下才可用。此值对将要送往运输机或者分配器的任务序列进行优先级的设定。运输机和分配器通常对任务序列进行排序,优先级高的首先被执行。具有相同优先级的任务序列将按照它们被接收的顺序执行。
先占 - 此参数只有在选用了 “使用运输机”的情况下才可用。如果被选上,送往运输机的任务序列将会自动地抢占运输机此时正在执行的任何操作。这有可能导致运输机执行在正常情况下不被允许的任务,如超载运送临时实体。
按下列请求运输工具 - 此下拉菜单只有在选用“使用运输工具”的情况下才可用。此函数返回一个指向分配器或者运输机的引用,临时实体将输出到此引用实体中。参见运输机分配器下拉菜单。
输入
这些参数定义如何从上游实体中拉取临时实体。
拉动 - 如果此复选框被选上,此实体将要从上游实体中拉取临时实体。上游实体应该打开其所有输出端口,以允许此实体拉取它需要的临时实体。
连续判断拉入条件 - 此参数只有在选择了 “拉动”的情况下才可用。如果此复选框被选上,该实体将在每次释放一个新的临时实体时,对上游所有已释放的临时实体进行重新判断。这和“连续判断送往端口” 复选框很相似,在这种情况下,如果需要手工地触发拉式请求的再判断,则需要外在地调用openinput()命令。
从端口拉动 - 此参数只有在选中了 “拉动”的情况下才可用。此下拉菜单返回一个输入端口号,此端口与正在从中拉取临时实体的实体相连接。参见选取从端口拉动的下拉菜单。
拉动条件 - 此参数只有在选中了 “拉动”的情况下才可用。如果实体正在查看的临时实体是需要拉取的,则此下拉菜单返回“真 ”。参见拉动条件下拉菜单。
使用此分页的有
发生器 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 暂存区 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 处理器 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 合成器 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 分解器 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 复合处理器 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 输送机 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 货架 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 储液罐 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 流节点 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 分类输送机
XE "跟踪列表" 临时实体分页
此参数页用来查看和改变临时实体的类型,也可以用来查看临时实体的跟踪列表。只有通过进入或离开触发器告诉那些临时实体所进入的每一个实体去向跟踪列表中写信息,跟踪列表才会进行记录。
XE "速度" XE "流节点" 流节点分页
最大容量 - 这里指定此流节点中允许同时容纳的临时实体的最大数量,其中包括正在从此流节点向其它实体中去的所有临时实体。
速度 - 此下拉菜单为每个进入此流节点的临时实体指定速度。此下拉菜单的存取变量和选取选项与循环时间下拉菜单 完全一样,只不过其返回值是速度,而不是时间。
侧偏移 - 此值指定行进临时实体的偏移距离。此项仅为视觉效果,不会改变流节点的操作。
使用此分页的有
流节点
XE "分类输送机" 分类输送机分页
发送条件 - 此下拉菜单替换了其它固定实体的临时实体流分页中的 送往端口下拉菜单。当有临时实体通过输送机上的一个输出位置时,它将被触发。这是一个真假(1或0)值函数,判断是否将临时实体从那个输出端口送出。
拉入条件 - 此下拉菜单与其它固定实体的临时实体流分页中的“拉式请求 ”相同。参见拉入条件下拉菜单。
输入/输出端口表 - 这些表用来定义输送机上的传输点的位置和阻塞逻辑。分类输送机的每个输入端口都有一个关联的入口位置,它沿着输送机长度方向分布;而每个输出端口都有一个关联的出口位置和一个阻塞参数。如果连接输送机的输入/输出端口时此参数视窗是打开的,则需要重新打开参数视窗来使所作的改变被注册生效。在正投影/透视视图中,入口/出口点的位置将会用红色或绿色箭头绘制标出。入口位置的箭头指向输送机内,出口位置的箭头指向输送机外。如要隐藏这些箭头,可在属性视窗或编辑选中实体菜单中设置不显示实体端口。如果入口/出口点显示的位置不对,重置一下模型,它们将重新配置到正确的位置上。
关于入口/出口位置的注释:如果已经改变了分类输送机的入口/出口位置,则需要重置模型才能够正确放置这些位置。
入口点(Entry Point) - 这是入口/出口点的位置,从输送机的起点开始算起。
阻塞(blocking) - 此项只存在于出口位置表中。如果此值为1,则无论何时有临时实体经过那个出口点,且“传送请求”返回1时,输送机将停下,直到临时实体离开。如果此值为0,输送机将会“企图”将此临时实体送出到出口点外,但是,如果下游实体没有准备接收此临时实体,临时实体将会简单地到下一个出口点去。建议将输送机上的最后一个出口点设置为可阻塞模式,否则到达输送机末端的临时实体如果不能离开,就会简单地返回到输送机起始端重新开始。
使用此分页的有
分类输送机
XE "处理过程分页" XE "处理过程名称" XE "复合处理器页" 复合处理器分页
处理工序数 - 此数值定义了此复合处理器中的处理过程的数目。一个处理过程是步骤序列中的一步。输入需要的数目,点击“应用处理过程”按钮,即可建立相应数目的处理过程。
处理工序分页
每个处理工序都有一个处理过程分页来定义它。处理过程分页用如下信息定义处理过程:
处理工序名称 - 在处理过程名称编辑框里用来定义每个处理过程的名称。此名称将会在复合处理器的状态报告中使用。
处理时间 - 此下拉菜单决定处理器花费多长时间来处理一个临时实体。参见周期时间下拉菜单。
需操作员数 - 此数值决定处理器在处理过程中要使用多少个操作员。
优先级 - 此值为将要送给操作员的任务序列设定优先级。操作员通常都会对任务序列排序,优先级高的任务最先被执行。优先级相同的任务按照接收到的先后顺序执行。
先占 - 如果此复选框被选上,则送给操作员的任务序列将会自动地抢占操作员,不管此时操作员在进行什么工作。
选取操作员 - 此下拉菜单返回一个指向操作员或分配器的引用,该引用是此实体在给定的处理过程中正在使用的。参见选取操作员下拉菜单。
使用该分页的有
复合处理器
XE "间隔" XE "速度限制" XE "连接" XE "虚拟距离" XE "网络节点" XE "样条线" 网络节点连接分页
参见网络节点文档,可获得关于网络节点连接的详细信息。
关于网络节点连接的注释:两个网络节点之间的每条路径都包含两个单行线连接。此分页只定义从此网络节点到另一网络节点的连接行为。如需要编辑从其它节点到此节点的连接行为,则打开那些其它节点的参数视窗。
名称 - 此域段用来命名网络中的各连接。这些名称应该反映模型中此连接的特殊目的。
连接类型 - 此下拉列表用来定义此连接如何行为。有三个选项。
无连接 - 运输机不能在此连接上行进。这类连接在视图视窗中用红色绘制。
允许超车 - 允许运输机在此连接上彼此超车。这类连接在视图视窗中用绿色画出。
禁止超车 - 运输机不能在这类连接上彼此超车。此路径上运输机之间的最小距离可以在“间隔”域段中设定。这类连接在视图视窗中用黄色画出。
间隔 - 此数值决定被指定为“禁止超车& rdquo;的连接上的运输机之间的最小间隔距离。此距离是从一个行进物的后端到它后面的行进物的前端的距离。
速度限制 - 此值决定行进物可以沿此连接行进的最大速度。
当前距离 - 此数值显示正在仿真的那个连接的当前距离。如果其虚拟距离被指定为0,当前距离为此路径的实际距离,否则,就是在虚拟距离域段中指定的距离。
虚拟距离 - 此数值用来指定连接的精确距离。
使用此分页的有
网络节点
网络节点分页
参见网络节点文档,可获得更多关于这些域段的详细信息。
尺寸 - 此数值定义网络节点的尺寸,也是网络节点绘制的路径的宽度。
节点最大行进物容量 - 此数值定义允许多少不在网络上行进的运输机停留在节点中。这可以代表不在执行行进任务的运输机,它们在此节点中进行其它的活动。
侧偏移 - 此数字定义行进物向路径右侧外偏出的偏移距离。此参数不影响行进物行进的距离,仅为了视觉效果设置,可以使相向行驶的两个行进物不会辗过彼此。
使用此分页的有
网络节点
XE "预置操作员" XE "操作员分页" XE "处理操作员" XE "优先级" XE "MTTR" XE "MTBF" 操作员分页
工作
预置时使用操作员 - 如果此复选框被选中,则此实体将在预置时间内调用一个或多个操作员。预置时间结束后,操作员被释放。
处理时使用操作员 - 如果此复选框被选中,则此实体将在处理时间内调用一个或多个操作员。处理时间结束后,操作员被释放。
预置操作员人数 - 此参数只有在选择“预置时使用操作员”复选框被选中后才可用。此数值决定在预置时间内实体需要使用多少各操作员。
处理操作员人数 - 此参数只有在“处理时使用操作员”复选框被选中,且 “预置和处理采用相同的操作员”复选框未被选中时才可用。此数值决定实体在处理时期将会使用多少个操作员。
优先级 - 此参数只有在两个“使用操作员”复选框中任一个被选中后才可用。此值为将要送给操作员的任务序列设定优先级。操作员通常要对任务进行排序,使优先级高的任务最先被执行。优先级相同的任务序列按照接收的先后顺序执行。
先占 - 此参数只有在两个“使用操作员”复选框中任一个被选中后才可用。如果此复选框被选中,则送给操作员的任务序列将自动地抢占操作员,不管当时操作员在进行什么操作。这可能引起操作员执行某些正常情况下不允许的任务。
预置和处理采用相同的操作员 - 此参数只有在两个“使用操作员”复选框都被选中后才可用。如果此复选框被选中,则在预置过程中被调用的操作员将被用来完成处理过程。如果此复选框没有被选中,预置过程调用的操作员将会被释放,处理时调用新的操作员。采用“选取操作员”这一特殊选取选项,可以调用不同的操作员。
选取操作员 - 此域段在选择了“使用操作员”复选项后才可用。此下拉菜单返回指向操作员或者分配器的引用,此引用被实体在预置和处理过程中使用。参见选取操作员下拉菜单。
维修
这些参数定义实体在MTBF(平均故障间隔时间)后在维修时间内如何使用操作员。
使用操作员 - 如果此复选框被选中,则实体将在维修时间调用一个或多个操作员。MTTR(平均修复时间)之后,这些操作员将会被释放。
需操作员数 - 此参数只有在“使用操作员”复选框都选中后才可用。此数值决定维修操作需要多少个操作员。
优先级 - 此参数只有在 “使用操作员 ”复选框被选中后才可用。此值为将要送给操作员的任务序列设定优先级。操作员通常要对任务进行排序,优先级高的任务最先被执行。优先级相同的任务序列按照接收的先后顺序执行。
先占 - 此参数只有在“使用操作员”复选框被选中后才可用。如果此复选框被选中,则送给操作员的任务序列将会自动地抢占操作员,不管当时操作员在进行什么操作。这可能导致操作员执行某些在正常情况下不被允许的任务。
选取操作员 - 此域段在选择了“使用操作员”复选项后才可用。此下拉菜单返回指向操作员或者分配器的引用,此引用被实体在预置和处理过程中使用。参见选取操作员下拉菜单。
使用此分页的有
处理器 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 合成器 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 分解器
XE "覆盖解除触发" XE "覆盖触发器" 光电传感器分页
参见输送机或者光电传感器逻辑小节,可以获得更多详细信息。
覆盖触发 - 此下拉菜单在临时实体遮挡光电传感器,且跳转时间结束后光电传感器还没有变为未遮挡状态的情况下被触发。参见覆盖/覆盖解除触发器。
覆盖解除触发 - 此下拉菜单在临时实体经过光电传感器而没有临时实体随后跟随的情况下触发,使得光电传感器变为未遮挡。参见覆盖/覆盖解除触发器
光电传感器个数 - 这里指定沿着输送机长度方向上放置的光电传感器个数。输入一个数字,点击“刷新”按钮,指定数目的行数就会显示在光电传感器表中。
光电传感器表 - 此表指定光电传感器位置和每个摄像头的跳转时间。位置的度量从输送机起始端开始算起。
显示光电传感器 - 如果需要显示输送机的光电传感器,就选中此复选框。
使用此分页的有
输送机
XE "最大容量" XE "处理器分页" 处理器分页
最大容量 - 此数值定义处理器能够同时容纳的最大临时实体数目。
输送物品通过处理器 - 如果此复选框被选中,则在处理时间流逝的过程中,将会看见临时实体从处理器的一端移动到另一端。这只是为了视觉效果。如果不选它,则进入的临时实体将被放置处理器的中部,并保持不动直到离开处理器。
使用此分页的有
处理器
XE "处理时间分页" XE "处理器的MTBF" XE "MTTR" XE "MTBF" 处理时间分页
预置时间 - 此下拉菜单定义处理器在接收到一个临时实体之后到开始处理此临时实体之前所要等待的时间。改变此参数之后必须重新编译模型。参见预置时间下拉菜单。
处理时间 - 此下拉菜单决定处理器处理一个临时实体要花费多长的时间。改变此参数之后必须重新编译模型。
MTBF(平均故障间隔时间) - 此时间下拉菜单下拉菜单 HYPERLINK "file:///D:\\Program%20Files\\Flexsim3\\help\\Pick_Lists\\" 定义此实体两次故障之间的平均时间。此时间被定义为从实体上一次故障恢复到下一次故障之间流逝的时间。换句话说,它返回实体在故障之前的工作时间。如果此函数返回0,则次实体不出现故障。参见。
MTTR(平均维修时间) - 此下拉菜单定义实体在MTBF之后保持故障状态的时间。在此段时间末尾,此实体接着它出现故障时的地方开始工作。参见时间下拉菜单。
MTBF中包括的状态 - 这里可以定义处理器的MTBF中需要应用什么样的状态。添加状态列表的操作是,在“状态数 ”域段中输入2,点击刷新按钮,并在表中新的输入域段中键入“setup(预置)”。点击 “状态列表”按钮可以查看被选的输入状态的列表。
使用此分页的有
处理器 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 合成器 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 分解器
XE "最大等待时间" XE "最大容量" XE "暂存区页" XE "批量规格" XE "成批" XE "垂直堆叠" XE "基于 堆叠" 暂存区分页
最大容量 - 这是暂存区能够容纳的最大临时实体数。
成批
这些域段定义暂存区的成批操作能力
成批操作 - 如果选中此复选框,则暂存区将积累多个临时实体打包为一批后,才释放它们到下游去。临时实体的积累将持续进行,直到达到了打包的目标量,或者到达了最大等待时间。如未被选中,将不进行打包,临时实体一发现下游的实体可用就立即离开。
批量规格 - 此数字定义暂存区在将临时实体送往下游之前,将要积累的每个批次所包含的临时实体的数目。临时实体是被单独地送往下游的。
最大等待时间 - 此数字是暂存区在将临时实体送往下游之前要等待的最长时间。如果此时间已经结束,但批量尺寸尚未达到,当前已经收集的本批次将被释放。如果指定为0,就没有最大等待时间,换句话说,暂存区将无限等待下去。
清空后接受下批 - 如果选中此复选框,则暂存区在当前批次离开之前,将不允许新的临时实体进入。
显示
这些参数定义暂存区在临时实体进入时如何放置他们。
物品堆放 - 定义临时实体如何在暂存区内进行视觉上的放置。
垂直堆放 - 临时实体向彼此的顶上堆放。堆放在实体底部的临时实体在暂存区中的时间最长。
水平直线堆放 - 临时实体将会水平地排成线。最靠近暂存区输出端口的那一个在暂存区中时间最长。
在暂存区内堆放 - 临时实体在暂存区内堆放成行。临时实体将随着排在其前面的产品离开暂存区而移动自己的位置。如果需要使产品在进入暂存区后保持位置不变,则应将暂存区选为LIFO(后入先出)模式,使下游实体拉取暂存区中的最后一个产品。
无操作 - 所有临时实体放置在暂存区的同一个位置。这会使暂存区看上去只有一个临时实体。
Z的基础堆放高度 - 此数字定义暂存区从什么高度开始堆放临时实体,这些实体将被垂直堆放,或者在暂存区内堆放。
XE "货架页" XE "标记架子" XE "最小停留时间" XE "最大容量" XE "捡取/放置时" XE "层" XE "地面堆存" 货架分页
地面堆存 - 如果选中此复选框,货架将模拟在地面存储空间,而不是一个垂直存储货架。俯视之,则排是垂直的列,层是水平的行。
货架倾斜量 - 此数值定义临时实体放在货架某给定货格上的倾斜度,因为有些货架是要让从后端向前端滑动的。
最大容量 - 此数值定义货架允许的同一时间的最大临时实体数。
标记已呼叫运输机的架子 - 选择此项,则当某货架调用运输机来进行选取时,将会用红色将此架子高亮显示。
捡取/放置时Y 轴偏移量 - 此数值用来配置运输机从货架选取或者放下临时实体到货架时,运输机与货架之间的距离。此参数在使用操作员从货架选取或者放下临时实体时尤为有用,因为通常操作员会走到货架中间去获得一个临时实体。例如,指定偏移值为1,操作员在货架上选取或者放下临时实体时,将会与货架保持更适合的举例。
不透明性 - 此项允许将货架绘制为半透明性的,这样,由于每排前面的货架都是半透明的,就可以看到同一区域中的多排货架。0值表示全透明,1表示完全不透明。
放置到列 - 当有临时实体进入货架时,调用此下拉菜单。它返回临时实体将要放置进去的那一列。参见放置到列下拉菜单。
放置到层 - 当有临时实体进入货架时,调用此下拉菜单。它返回临时实体将要放置进去的那一层。参见放置到层下拉菜单。
最小停留时间 - 此下拉菜单返回临时实体被释放到下游之前必须在货架里停留的时间。也可以从此函数返回-1值,这样货架就根本不释放临时实体,然后可以用releaseitem()命令来按照用户的策略来释放。参见最小停留时间下拉菜单。
使用此分页的有
货架
XE "列" XE "列宽" XE "层" XE "货架" XE "货架尺寸表页" 货架尺寸表分页
此分页用来配置货架的排与层的布局。如果只需要配置一个简单的列与层的货格,可以从左边基础面板进行设置。如果需要制定不同参数的不同列与层,可以使用右边的高级面板对每列进行单独配置。
基本面板
如果货架是简单的完全一致的货格,就使用基础面板。在进入高级面板中进行单独编辑之前,也可以使用基础面板进行基础设置。设定了货架的基本尺寸后,然后点击“应用基本设定 ”按钮,这些设定就会应用到货架。
货架列数 - 是货架的列数。
货架列宽 - 默认列宽。
货架层数 - 是货架的层数。
货架层高 - 各层的默认层高。在高级编辑中可以为每一列的各层进行编辑。
高级面板
使用此面板单独地配置货架的列与层。此面板左边是货架所有列的列表。选择一列,用面板右边的选项和按钮对其进行配置。在正投影/透视视图中,这些改变将立即现实在货架上。如没有立即显示,点击应用按钮,就会显示。
复制列 - 此按钮复制当前选中的列并且添加到货架末尾。
删除列 - 此按钮删除货架中当前选中的列。
添加层 - 此按钮在当前选中的列末尾添加一层。
删除层 - 此按钮从当前选中的列中删除末尾的层。
货架列宽 - 在这里指定当前选中的列的宽度。
货架层高表 - 这里可以指定当前选中列中每一层的高度。
使用此分页的有
货架
XE "记录器" XE "显示选项" XE "数据捕获设定" XE "3D图形" 记录器参数
记录器不使用标准的分页对话框,而采用自己定制的对话框。模型中放置了记录器时,双击记录器就可以打开此视窗。
数据捕捉设置
数据捕获设定用来定义需要显示或捕获的数据类型。在点击“显示选项 ”按钮之前点击此按钮。3种数据类型是:表数据、标准数据和用户定义数据。
表数据
表数据指的是包含在当前Flexsim表中的信息。
选择一个下拉菜单选取选项,并选择代码模板按钮,就可以定义想要显示的表和数据。表中数据必须是先前就用触发器选项或其它方式写入到表中的。若选择此选项,记录器将根据下拉菜单中的输入产生一系列的x/y点。然后,根据在显示选项视窗指定的图形类型来绘制这些点构成的图示。参见表中X下拉菜单和表中Y下拉菜单可以得到更多关于此下拉菜单的信息。
标准数据
标准数据是指对每个实体自动收集的数据。标准数据包括停留时间、当前数量和状态信息。这与统计分页中的属性对话框中的信息相同。需要在模型中显示3D容量图形、3D停留时间柱壮图或者3D状态饼图时,可使用此选项。选择了标准数据,就必须选择需要显示信息的实体,然后选择标准数据的类型。
用户定义数据
用户定义数据指建模者需要用图形显示或者记录到表中的特定数据。记录器 “监视”模型中某节点的值,如实体状态或者实体容量等。选择了用户定义数据,可以看见三个选项。你可以选择图形、最小/最大/平均、或表格。
按设定间隔查看值-如果选中此复选框,则按设定的时间间隔记录数据点。如未选中,只在节点的值发生变化时才会进行记录。
时间间隔长度-此域段只有在选择了“以设定的间隔检查数值”后才可用。它是两次记录数据点之间的时间间隔。
通过时间/出现权重平均值-这些单选按钮只有在为“输出类型”选择了“最小/最大/平均”选项时才有用。从统计意义上讲,有两种计算一个变量动态运行中的均值的方法:1)按时间和2)按发生事件。如果选择“根据时间计算平均值”,则被监视的节点具有某特定值的时间将按照权重计入平均值。如果选择“ 根据发生计算平均值”,则某值每出现一次与其它值出现一次都具有相同的权重,而节点在某给定值状态保持的时间长短则不影响结果。
图形
图形选项用来绘制模型中某实体的一个节点的不断变化的值。模型中任何实体的任何数字数据节点都可以采用图形表示。点击与“记录节点”相邻的帮助按钮,可看到可以使用的节点名称列表。从下拉菜单中选择模型中的实体,并键入需要绘图的节点名称。
从模型实体的下拉菜单中选择实体。需记录的节点是实体上某节点的名称。点击帮助按钮,将显示所有可能节点的列表。
必须在“记录节点”域段内键入节点名称。点击下一个按钮时,必须定义图形的标题并且从下拉菜单中选择图形的类型。
注释:要警惕,所要求的数据类型不一定与图形类型相符。例如,stats_staytimemax最好在线图中显示,而不是用饼图。选择了图形类型后,可以设定图形参数来获得较好的显示效果。双击记录器然后选择“查看获取的数据”就可查看图形。
选择图形类型后,就会看见特为那种类型图形所附加的编辑域段。条形图和曲线图需要指定记录器要记录和在图中显示的数据点的最大数目。例如,如果键入100作为某曲线图记录的数据点数,则可以看到先前声明的节点的最后100个记录数据。对于饼图和柱状图来说,记录器将自动记录对图形指定的每组或“桶”中所落进的节点值的次数。
最小/最大/平均
最小/最大/平均选项用来以表格形式查看特定节点或节点列表的最小、最大和平均值。
点击下一步可以定义需要记录的最小、最大和平均值的节点。指定需要记录的节点总数,然后点击刷新表按钮。这时,必须明确给出实体名称和实体上需要记录的节点名称。点击帮助按钮可得到可能存在的节点列表,可从中选择需要记录的节点。
要用表来查看指定节点的记录数据,可点击记录器主参数视窗中的“查看获取的数据”按钮。
数据表看起来如下。在模型运行时,可以打开此视窗来查看数据值的动态更新。
表
为输出类型定义的“表”选项在每次用户定义的节点的值发生改变,或者在用户设定的间隔时间点上,都会向表中写入其值。“最小/最大/平均”选项只记录节点的点统计数据,与此不同,“表”选项记录每个节点的连续数据流。用户应定义哪些节点需要像“最小/最大/平均”选项那样捕获数据。下面给出一个例子,是当点击“查看获取的数据”时可看见的数据表。注意,每次此表显示一个节点的情况。用下拉选取列表选择其它预先定义了的节点。另外,可以用输出按钮将这些数据输出到一个外部文件中。
记录器的用户定义选项是软件的高级特性。随着对Flexsim的熟习,这些选项的使用会越来越多。
XE "高位标记" XE "流量速率" XE "流出" XE "进入" XE "中位标记" 储液灌分页
最大容量 - 此数值是储液灌能够容纳的最大体积单位数。默认情况下,每个临时实体代表一个体积单位。使用“流入速率”选项可以改变此默认设置。
高位标记 - 当储液灌的液体体积上升或下降至此值时,储液灌调用触发函数。
中位标记 - 当储液灌的液体体积上升或下降至此数值时,储液灌调用触发函数。
低位标记 - 当储液灌的液体体积上升或下降至此数值时,储液灌调用触发函数。
关于液体容量的注释:液体容量不必代表储液灌中的临时实体数。在进入流量速率函数中,可以指定每一个临时实体代表多少体积。默认情况下,每一临时实体代表1体积单位。但是可以用下拉菜单引用标签、实体类型等来定义每个临时实体代表的体积。最大容量和标记值是基于单位体积计算的,而不是基于储液灌中的临时实体数。
流入速率 - 此下拉菜单返回储液灌在一个临时实体进入之后,到允许下一个临时实体进入之前所要等待的秒数。在此函数中,还可以设定进入的一个临时实体代表多少“体积”。默认情况下,此体积为1,但是可设置替代值,这些替代值被用来作为最大容量、高位标记、中位标记、低位标记值使用。参见流量速率下拉菜单。
流出速率 - 此下拉菜单返回储液灌在一个临时实体离开之后,到允许下一个临时实体离开之前,要等待的秒数。参见流量速率下拉菜单。
XE "机器人" XE "机器人分页" 机器人分页
Z轴旋转速度-此值设定当机器人需要移动时围绕z轴的旋转速度。 用单位时间转过的度数来指定。如果机器人需要每秒转半圈,则它的旋转速度要设定为180。
Y轴旋转速度-此值设定机器人需要移动时围绕y轴的旋转速度。用单位时间转过的度数来指定。这是机器人用来旋转到它上面/下面的实体的旋转速度。
伸臂速度-此值设定机器人的机械臂伸展去拿一个临时实体或者到其目的地的速度。用单位时间的距离来指定。
最大伸展-此值是机械臂完全伸出时能够到达的距离。机械臂的每段通常都是此长度的一半。
使用此分页的有
机器人
XE "去托盘" XE "分解" XE "分解器分页" 分解器分页
去托盘 - 如果选中此复选框,分解器将认为进入的临时实体包含了其它需要被移走的临时实体。
一般分解 - 如果选中此复选框,则分解器将会复制进入的临时实体。
沿分解器全长传送实体 - 如果选中,临时实体将会在处理时间内走过分解器的全长。
分解包数量 - 此 下拉菜单返回分解器要解包或复制出多少个临时实体。参见数量下拉菜单。
XE "重复时间表/序列" XE "生成器分页" XE "按时间表到达" XE "按序列表到达" XE "到达类型" 发生器分页
到达方式
此选项用来指定发生器创建临时实体的方法。
按时间间隔到达 - 在一段设定的时间之后,生成器就创建一个临时实体,如此重复下去直到模型停止。
按时间表到达 - 生成器依照一个表定义临时实体的生成,此表定义何时创建临时实体,创建多少,为何种类型。
按顺序到达 - 生成器依照一个表工作,此表定义创建临时实体的顺序。生成器以向下游移动临时实体的最快速度创建临时实体。
临时实体种类
用来定义生成器要创建的临时实体的类。使用工具条中临时实体按钮,可以编辑和查看临时实体类。
到达间隔时间的用法
这些域段用来定义选择了到达间隔时间为到达类型时,生成器如何创建临时实体。
在0时刻到达 - 如果选中此复选框,则在0时刻有一个临时实体被创建。下一个临时实体将在第一个间隔时间末尾被创建。
物品类型 - 所创建的临时实体将被分配以这里所定义的临时实体类型。
到达时间间隔 - 是一个函数,返回生成器在创建下一个临时实体以前要等待的时间。改变此值后必须编译模型。
到达时间表的用法
这些域段定义当选择了到达时间表或者到达序列作为到达方式时,生成器如何创建临时实体。
到达次数 - 指定到达时间表的行数。
刷新到达 - 在改变了到达数之后,点击此按钮将更新屏幕上的表。
重复时间表/序列表(Repeat Schedule/Sequence ) - 如果选中此复选框,则时间表或序列将会连续的自我重复,直到模型停止。如果是时间表,则定义在第一行中的到达将会在最后一行到达时间之后0秒重复执行。这意味着表中的第一行所给的到达时间只在仿真中使用一次。如果需要指定在重复时最后一行与第一行之间的间隔时间,则可以在末尾添加一行,设定该行为0到达数量。
刷新标签 - 表中的每一行代表了生成器中一次临时实体的到达。表中的列定义了每次到达的细节(时间、名称、类型、数量)。
ArrivalTime(到达时间) - 到达发生的时刻。
ProductName(产品名称) - 生成器创建的所有临时实体在此到达过程中都要给定产品名称。
ItemType(临时实体类型) - 生成器创建的所有临时实体在到达过程中都要给定临时实体类型。
Quantity(数量) - 此值指定在这次到达中应创建的临时实体数。
使用此分页的有
发生器
XE "容量" XE "加速度" XE "减速度" XE "任务执行器分页" 任务执行器分页
容量 - 此值是操作员或运输机一次能运送的临时实体的最大数量。
最大速度 - 这是操作员或运输机行进的最快速度。
加速度 - 此值表示操作员或运输机速度改变的快慢,它们需要逐渐增加速度直到达到最大速度,或者减小速度到达目标节点。
减速度 - 此值表示当操作员或运输机减小速度的快慢。
装卸时采用行进偏移 - 如果选中此复选框,则运输机/操作员将会被显示移动到选取或放下临时实体的准确位置。如果不选中它,运输机/操作员将移动到目标实体的原点去选取或放下临时实体。在运输机/操作员使用网络节点来到达目的地的情况下,如果没有选中此复选框,运输机/操作员将行进到与目标实体相连的网络节点去停下。
行进时转向 - 如果选中此复选框,则运输机/操作员为了使自身定向与行进方向一致,将在行进同时进行旋转。如果不选中它,运输机/操作员将会始终面向同一个方向。是否选择此选项不影响模型的统计结果,仅为视觉效果。
装载时间 - 此下拉菜单返回操作员或运输机装载临时实体所花费的时间。改变此参数后必须重新编译模型。
卸载时间 - 此下拉菜单返回操作员或运输机卸载临时实体所花费的时间。改变此参数后必须重新编译模型。
使用此分页的有
任务执行器 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 运输机 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 操作员 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 起重机 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 堆垛机 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 机器人 升降机
XE "ROYGBIV" XE "Reassignnetnode" 交通控制器分页
参见交通控制器实体,可以获得更多关于交通控制器实体的详细信息。
交通控制器模式 - 定义实体控制交通的方法。有两种选择:互斥或非时间通行模式。
互斥模式
互斥模式用来限制允许进入交通控制器区域的行进物为某给定数量,而不考虑它们是在什么路径上。这里只需要简单地指定最大数量。
区域中的最大数量 - 此值定义允许进入交通控制器区域的行进物的最大数量。
非时间交通模式
如果需要基于交通控制器区域内的每条路径来进行控制交通,则应采用非时间交通模式。在模式表中,一行定义一个模式。对于每一个模式,均可定义交通控制器区域内的一系列节点之间的路径。当交通控制器处于一种给定模式时,只有当行进物要进入的路径是当前模式中所定义的路径之一,才允许进入。交通控制器将会保持当前模式,直到没有行进物在其区域中,然后,将接收一个最先到达的行进物,并找到一个包含有此行进物所要求的进入路径的模式。这就是为什么这是一种非时间通行模式的原因。交通控制器在同一模式下的停留时间没有限制。
模式数 - 此值是模式的数目,或者是表中的行数。输入需要的模式数目,然后点击 “应用”按钮,就会创建相应的行。
入口数 - 是模型所需要的从/到入口(或列)的最大数目。如果某些模型不需要全部的列,可以让它保持空白。
寻找最佳模式 - 如果选中此复选框,则无论何时只要交通控制器得到一个进入某个路径的请求,而此路径不在当前模式中,则会搜寻所有模式来寻找是否有其它模式包含了已经输入的所有路径以及新的路径。如果是,将转换为新模式,并允许此行进物进入。注意,这种方法可能降低模型速度,因为交通控制器必须在每次有进入要求时都搜索其模式表。
进入模式表
Max_Nr - 此值指定给定模式下,交通控制器允许进入的行进物的最多数量。这与互斥模式的最大数量很相似。
n_a - 此值是为将来开发预留的保留值,以后将实现同步通行模式。
From/To(从/到)的输入字段 - 对于一种模式的每一条路径来说,可以指定路径的开始和目的节点。输入节点的名称。注意,一个入口只描述一个方向的从节点到节点的连接。因此,要指定路径是双向的,就需要指定两次“From/To”项的输入,每个方向一次。
使用此分页的有
交通控制器
交通控制器网络节点分页
交通控制器的网络节点分页用来编辑交通控制器与网络节点的连接。左边的面板显示所有连接到此交通控制器的网络节点。选中其中一个节点,右边面板将会刷新显示一个新的交通控制器列表。右边面板显示所有与在左边面板中所选的节点相连的交通控制器。正在编辑的交通控制器有一个额外的“--此交通控制器”文本,告知此交通控制器是如何置于其它交通控制器中的。右边面板中的交通控制器的排列可以对网络行为产生显著影响。参见交通控制器一节,可以得到关于交通控制器排列的更多信息。如需将一个交通控制在排列中上移,可点击“上移”按钮实现。如需将一个交通控制在排列中下移,可点击“下移”按钮实现。如需删除某网络节点与交通控制器的连接,可点击删除按钮。
使用此分页的有
交通控制器
XE "运输机" XE "运输机页" 运输机分页
货叉升降速度 - 此数值是运输机升降叉上下移动的速度。
使用此分页的有
运输工具
XE "高于中位标记触发器" XE "高于低位标记触发" XE "高于高位标记触发" XE "预置完成触发" XE "进入触发器" XE "装载触发器" XE "继续触发器" XE "离开触发器" XE "生成触发器" XE "消息触发器" XE "检修触发器" XE "收集结束触发器" XE "处理完成触发" XE "卸载触发" XE "到达触发器" XE "中断触发器" 实体触发器函数
注释:对任何触发函数做了修改,都必须重新编译模型。
到达触发:当一个行进物到达某网络节点时,此节点调用此函数。如果此函数返回非0值,则行进物下一要去的路径将改变为由返回值指定的路径。返回值是下一路径的排序号。如网络节点路径分页中所示。参见到达触发器下拉菜单。
中断触发:当一个实体的MTBF时间结束后,该实体调用此函数。参见故障/维修触发器下拉菜单。
继续触发:当某行进物继续往下一路径移动(此路径从该节点连出)时调用此函数。参见继续触发器下拉菜单。
传输完毕触发:当一个临时实体到达输送机末端时,输送机调用此函数。参见处理结束触发器下拉菜单。
创建触发:生成器创建新的临时实体时调用此函数。参见创建触发器下拉菜单。
收集结束触发:当一个暂存区容纳的临时实体到了其批次限制时调用此函数。参见处理结束触发器下拉菜单。
停留时间结束触发:当一个临时实体的停留时间结束并且准备离开时,货架调用此函数。参见处理结束触发器下拉菜单。
进入触发:当一个临时实体进入某实体时,该实体调用此函数。参见进入/离开触发器下拉菜单。
离开触发:当一个临时实体离开某实体时,该实体调用此函数。参进入/离开触发器下拉菜单。
低于高位标记触发:当液体体积下降到设计的高位标记之下时,储液灌调用此函数。参见液位上升/下降经过高度标记触发器下拉菜单。
低于低位标记触发:当液体体积下降到设计的低位标记之下时,储液灌调用此函数。参见液位上升/下降经过高度标记触发器下拉菜单。
低于中位标记触发:当液体体积下降到设计的中位标记之下时,储液灌调用此函数。参见液位上升/下降经过高度标记触发器下拉菜单。
装载触发:当装载临时实体完成时,操作员或行进物调用此函数。参见装/卸载触发器下拉菜单。
消息触发:当其它实体使用sendmessage()或senddelayedmessage()命令给某实体发送一个消息时,该实体调用此函数。参见消息触发器下拉菜单。
处理结束触发:当某实体的处理时间完成时,该实体调用此函数。参见处理完成触发器下拉菜单。
维修触发:当某实体的MTTR时间结束时调用此函数。参见中断/维修触发器下拉菜单。
资源可用触发:当分配器的下游资源变为可用时调用此函数。
高于高位标记触发:当液体体积上升到设计的高位标记之上时,储液灌调用此函数。参见液位上升/下降经过高度标记触发器下拉菜单。
高于低位标记触发:当液体体积上升到设计的低位标记之上时,储液灌调用此函数。参见液位上升/下降经过高度标记触发器下拉菜单。
高于中位标记触发:当液体体积上升到设计的中位标记之上时,储液灌调用此函数。参见液位上升/下降经过高度标记触发器下拉菜单。
预置触发:当实体的预置时间结束时调用此函数。参见处理完成触发器下拉菜单。
卸载触发:当卸载临时实体完成时,操作员或行进物调用此函数。参见装/卸载触发器下拉菜单。
BFR高级分页
发现欲载离物品- 完成装载将离开:此下拉菜单可在两个不同的时刻触发。第一,是在发现一个临时实体将要使用一个运输机离开实体时触发,此函数称为“发现欲载离物品”。第二,是在运输机到达后完成了装载时间,将要把临时实体运出时,被称为“完成装载将离开”。有一个变量传递给此函数,来告诉用户适合用哪个操作。在这里可以进行管理,如对变量nroftransportsout,还有如何进一步显示实体的输入/输出等。
“发现欲载离物品 - 完成装载将离开” 函数参数的存取变量如下: current:当前实体 notifyoperation:此变量值为1或0,1表示运输输出通知操作,0表示运输输出完成操作。 item:是一个引用,指向将要离开此实体的临时实体 port:临时实体将要离开的输出端口号 transporter:对于运输输出完成的操作来说,是一个引用,指向要捡取此临时实体的运输机。 nroftransportsoutnode:是一个引用,指向实体变量nroftransportsout。发生一次通知操作,则此节点的值递增1,发生一次完成操作,则递减1。也可以查询此值以了解有多少个临时实体在等待运输机的捡取。
发现欲载达物品- 完成卸载将进入:此下拉菜单可在两个不同的时刻触发。第一,是当实体被通知有一个临时实体将要使用一个运输机进入它时,此函数称为“发现欲载达物品”。第二,是当运输机到达并完成卸载后,将要把临时实体移入到实体中时,称为 “完成卸载将进入”。一个变量被传递给此函数来告诉用户适合用哪个操作。在这里可以进行管理,如对变量nroftransportsout,还有如何进一步显示实体的输入/输出等。例如,你可能想在同一时刻允许1个以上的临时实体进入此实体。这种情况下,当接到有一个临时实体即将进入这里的通知时,可以候调用receiveitem(接收临时实体)函数。
“发现欲载达物品 - 完成卸载将进入”函数参数的存取变量如下所示: current:当前实体 notifyoperation:此变量值为1或0,1表示运输输入通知操作,0表示运输输入完成操作。 item:是一个引用,指向将要进入此实体的临时实体 port:临时实体将要进入的输入端口号 transporter:对于表示运输输入完成的操作来说,是一个引用,指向将要放下此临时实体的运输机。 nroftransportsoutnode:是一个引用,指向实体变量nroftransportsout。运输输入通知操作将使此节点的值递增1,运输输入完成操作使此节点值递减1。也可以查询此值以了解还有多少个临时实体仍在运输进入此实体。
关于发现欲载达物品- 完成卸载将进入函数返回值的注释:在运输输入输出的通知和完成操作中,如果函数返回0,则实体认为没有执行任何操作,从而将执行其自身的默认逻辑;如果返回值为1,则实体则认为已完成了相应的变量管理,于是将不执行任何操作;如果返回值为-1,且操作是一个运输输入/输出的完成操作,实体则再次认为已完成了相应的变量管理,但它将另外通知运输机它不准备接收临时实体。此时,运输机必须等待,直到被通知它可以恢复其操作时。之所以需要采用此函数,是因为可能存在这样的情况,此实体被stopobject()命令停止,这是就需要用savestoppedtransportin()或者savestoppedtransportout()函数来保存指向运输机的引用,然后返回-1。然后,当运输机可以恢复其操作(通常来自于实体的恢复实体函数)时,需要调用esumetransportsin()和resumetransportsout()来通知所有停止的运输机它们可以恢复操作了。
捡取偏移-放置偏移:此下拉菜单可在两个不同的时刻触发。第一是当运输机视图放置或卸载一个临时实体到此实体上时,这称为放置偏移,将返回运输机在放置临时实体之前要进行偏移的偏移位置。第二个时刻是当运输机将要从此实体捡取或装载一个临时实体时,这称为捡取偏移,将返回运输机在捡取临时实体之前要进行偏移的偏移位置。
“捡取偏移-放置偏移”函数的存取变量如下所示: current:当前实体 pickoperation:此变量的值为1或0,1表示捡取操作,0表示放置操作。 item:是一个引用,指向将要被捡取/放置的临时实体 otherobject:是一个引用,指向将要捡取/放置此临时实体的实体 xvalnode, yvalnode, zvalnode:是三个引用,指向应在此函数中赋值,并将代表此函数返回的偏移位置的那些节点。例如,如果需要捡取/放置实体进行x方向为10,y方向为0,z方向为5的偏移,则应用setnodenum()命令设定xvalnode为10,yvalnode为0,zvalnode为5。
关于捡取/放置偏移返回值的注释:如果希望实现用户自己的捡取/放置逻辑,而不希望执行默认逻辑,则此函数必须返回1。如果此实体从此函数得到的返回值为0,则认为没有执行任何操作,并将执行其默认逻辑。
停止实体-恢复实体:此下拉菜单可在两个不同时刻触发。第一个是当此实体调用stopobject()命令时。第二个是当此实体调用resumeobject()命令时。在这里为实体定义如何“停止”和“恢复 ”的策略。这里也要管理数据来记录产生了多少停止请求,实体被停止前的状态是什么,等等。
“停止实体-恢复实体” 函数的存取参数如下所示: current:当前实体。 stopoperation:此值是1或0,1表示此实体调用stopobject()命令,0表示此实体调用resumeobject()命令。 stopstate:此值仅用于停止操作。它指明传递给stopobject()命令的需求状态。 nrofstopsnode:这是一个引用,指向此实体的nrofstops 变量。如果是停止操作,则此函数将要节点的值递增1,如果是一个恢复操作,此函数将此节点的值递减1。同样,你可以获取此值以了解此实体调用了多少次stopobject() 命令。当此实体第一次被停止(此节点值由0变为1)时,应该执行指定的如何停止此实体的逻辑。当实体最后一次恢复(此值由1变为0)时,应该执行如何恢复此实体的逻辑。 timeoflaststopnode:这是一个引用,指向实体的timeoflaststop 变量。当此实体第一次被停止时,此节点应该被设定为当前时刻,这样就可以在最后恢复时得知此实体的总停止时间。 statebeforestopnode:这是一个引用,指向实体的statebeforestopped 变量。当此实体第一次停止时,此节点应该被设定为实体的当前状态,这样就可以在实体被恢复时得知要恢复到哪个状态。
关于停止/恢复实体的返回值的注释:如果要实现自己的停止/恢复逻辑,而不想执行默认的逻辑,此函数必须返回1。如果实体从此函数得到的返回值是0,则认为什么也没有做,并将执行其本身默认的逻辑。
高级功能:实体上调用的几个不同的通知和函数都会触发此下拉菜单。大多数情况下,不需要为那些通知实现任何逻辑,不过可以获取它们。此函数的返回值是1或0。如果是0,实体将执行与给定的通知相关的默认功能。如果是1,实体不执行任何默认功能,但是认为此函数已覆盖了默认操作。
高级功能调用的通知类型是作为parval(1)或msgtype传递进去的。此参数可以是下面这些值之一:
ADV_FUNC_CLASSTYPE:这是获取实体类的类型的请求,classtype应该返回整数值,其特定的位被设为高值。可以用位OR操作符| 和几个classtype宏指令来构建该值。例如一个固定实体的classtype是:CLASSTYPE_FLEXSIMOBJECT | CLASSTYPE_FIXEDRESOURCE。
ADV_FUNC_DRAGCONNECTION:当某键盘键被按下并保持,且点击并拖动此实体到另一个实体时调用此函数。这种情况下,鼠标拖动的实体用parnode(2)传递,此被点击的键的ascii 值用parval(3)传递,而classtype 的值由parval(4)传递。
ADV_FUNC_CLICK:此函数在当点击实体时调用。这里有一个指向节点被点击时所在的视图的引用,此视图作为parnode(2)被传递,点击代码作为parval(3)被传递进去。点击码可能是:DOUBLE_CLICK、LEFT_PRESS、LEFT_RELEASE、RIGHT_PRESS、RIGHT_RELEASE。
ADV_FUNC_KEYEDCLICK:此函数当键盘上某键被按下并保持,且实体被点击时被调用。在此,视图作为parnode(2)进行传递,点击代码作为parval(3) 传递,所按下的键的ascii 值作为parval(4)传递。点击代码可能是:DOUBLE_CLICK、 LEFT_PRESS、 LEFT_RELEASE、 RIGHT_PRESS、 RIGHT_RELEASE。
使用此分页的有
BFR (基本固定实体)
BTE分页
注释:参见任务执行器的偏移行进文档,可以获得更多关于偏移行进的信息。
开始偏移触发 - 此下拉菜单在偏移行进操作开始时被触发。一个x、y、z的偏移位置被传递到此函数中。实体将计算应如何从此x、y、z的偏移位置行进特定的派偏移量,然后返回进行此行进操作要花费的时间。
OnBeginOffset函数的存取变量如下所示: current:当前实体。 x:要求的x偏移,是从实体x中心的偏移距离。 y:要求的y偏移,是从实体y中心的偏移距离。 z:要求的z偏移,是从实体z中心的偏移距离。 item:如果偏移操作涉及到某临时实体,则此值是指向它的引用。 endspeed:偏移操作要求的结束速度。 maxspeed:实体的速度变量的最大值。 acceleration:实体加速度变量的值。 deceleration:实体减速度变量的值。 lastupdatedspeed:实体lastupdatedspeed变量的值,它是实体最后一次行进操作的结束速度。 rotatewhiletraveling:实体rotatewhiletraveling变量的值,可以是1或0,规定实体在行进过程中能否旋转。
更新偏移触发 - 视图刷新之前触发此下拉菜单。表示实体是否在当前偏移操作的基础上调整其位置。
完成偏移触发 - 实体完成其偏移操作之后触发此下拉菜单,这将调整实体的位置到最终偏移位置。
下面列出更新偏移触发和完成偏移触发两个触发器的可用变量:
current:当前实体 offsettingnow:实体的offsettingnow变量的值,如果实体正在执行偏移操作,此值是1,否则就是0。调用开始偏移触发器时自动设置Offsettingnow的值为1,当调用完成偏移触发器时则自动设为0。 offsettingtotaltime:实体的offsettotaltime变量的值,表示实体从开始偏移触发函数返回的总时间。 maxspeed:实体的最大速度变量的值 acceleration:实体的加速度变量的值 deceleration:实体的减速度变量的值 lastupdatedspeed:实体的lastupdatedspeed变量的值,是实体最后的行进操作的结束速度。 rotatewhiletraveling:实体的rotatewhiletraveling变量的值,可以是1或0,指定用户是否需要实体在行进途中旋转。 curloadunloadtime:如果偏移操作是装载或卸载操作,则此值是操作的装/卸载时间。需注意,,如果装/卸载时间是一个非零值,则这个时间将在完成偏移触发器被触发前执行。这意味着,在更新偏移函数中,需要查询是处于操作的偏移部分,还是装/卸载部分。通常,这并不重要,因为行进操作即将完成,在剩余的装/卸载时间里,更新函数将自动将实体的位置设置到最终的目标位置。仅在这样的情况下才需要使用此变量,即,当想要在装/卸载时间里做一些动画/运动时,如巷道堆垛机和垂直电梯的行为。
捡取偏移-放置偏移-此下拉菜单可在两个不同的时刻触发。第一是当运输机视图放置或卸载一个临时实体到此实体上时,这称为放置偏移,将返回运输机在放置临时实体之前要进行偏移的偏移位置。第二个时刻是当运输机将要从此实体选取或装载一个临时实体时,这称为选取偏移,将返回运输机在选取临时实体之前要进行偏移的偏移位置。注意,当此实体企图从其它实体装载,或卸载到其它实体时,将不被触发,但是当当其它实体企图从此实体装载,或卸载到此实体时则会被触发。
“选取偏移-放置偏移”函数的存取变量如下所示:
current:当前实体 pickoperation:此变量的值为1或0,1表示选取操作,0表示放置操作。 item:是一个引用,指向将要被选取/放置的临时实体 otherobject:是一个引用,指向将要选取/放置此临时实体的实体 xvalnode, yvalnode, zvalnode:是三个引用,指向应在此函数中赋值,并将代表此函数返回的偏移位置的那些节点。例如,如果需要选取/放置实体进行x方向为10,y方向为0,z方向为5的偏移,则应用setnodenum()命令设定xvalnode为10,yvalnode为0,zvalnode为5。
关于捡取/放置偏移返回值的注释:如果希望实现自己的选取/放置逻辑,而不希望执行默认逻辑,则此函数必须返回1。如果此实体从此函数得到的返回值为0,则认为什么也没有做,并将执行其默认逻辑。
停止实体-恢复实体:此下拉菜单可在两个不同时刻触发。第一是当此实体调用stopobject()命令时。第二个时刻是当此实体调用resumeobject()命令时。在这里为实体定义如何“停止”和“恢复 ”的策略。这里也要管理数据来记录产生了多少停止请求,实体被停止前的状态是什么,等等。
“停止实体-恢复实体” 函数的存取变量如下所示:
current:当前实体。 stopoperation:此值是1或0,1表示此实体调用stopobject()命令,0表示此实体调用resumeobject()命令。 stopstate:此值仅用于停止操作。它指明传递给stopobject()命令的需求状态。 nrofstopsnode:这是一个引用,指向此实体的nrofstops 变量。如果是停止操作,则此函数将要节点的值递增1,如果是一个恢复操作,此函数将此节点的值递减1。同样,你可以获取此值以了解此实体调用了多少次stopobject() 命令。当此实体第一次被停止(此节点值由0变为1)时,应该执行指定的如何停止此实体的逻辑。当实体最后一次恢复(此值由1变为0)时,应该执行如何恢复此实体的逻辑。 timeoflaststopnode:这是一个引用,指向实体的timeoflaststop 变量。当此实体第一次被停止时,此节点应该被设定为当前时刻,这样就可以在最后恢复时得知此实体的总停止时间。 statebeforestopnode:这是一个引用,指向实体的statebeforestopped 变量。当此实体第一次停止时,此节点应该被设定为实体的当前状态,这样就可以在实体被恢复时得知要恢复到哪个状态。
关于停止/恢复实体的返回值的注释:如果要实现自己的停止/恢复逻辑,而不想执行默认的逻辑,此函数必须返回1。如果实体从此函数得到的返回值是0,则认为什么也没有做,并将执行其本身默认的逻辑。
高级功能 - 此下拉菜单可被实体调用几个不同的通知和函数触发。大多数情况下,不需要为通知实现任何逻辑,但它们是容易取得的。函数的返回值是1或0。如果是0,实体将执行与给定的通知相关的默认功能。如果是1,实体不做任何默认功能,但是认为此函数已覆盖了默认操作。
高级功能调用的通知类型是作为parval(1)或msgtype传递进去的。此参数可以是下面这些值之一:
ADV_FUNC_CLASSTYPE:这是获取实体类的类型的请求,classtype应该返回整数值,其中某些特定位按高值取整。可以用位OR操作符(|) 和几个classtype宏指令来构建此值。例如一个固定实体的classtype是:CLASSTYPE_FLEXSIMOBJECT | CLASSTYPE_FIXEDRESOURCE。
ADV_FUNC_DRAGCONNECTION:当某键盘键被按下并保持,且点击并拖动此实体到另一个实体时调用此函数。这种情况下,鼠标拖动的实体用parnode(2)传递,此被点击的键的ascii 值用parval(3)传递,而classtype 的值由parval(4)传递。
ADV_FUNC_CLICK:此函数在当点击实体时调用。这里有一个指向节点被点击时所在的视图的引用,此视图作为parnode(2)被传递,点击代码作为parval(3)被传递进去。点击码可能是:DOUBLE_CLICK、LEFT_PRESS、LEFT_RELEASE、RIGHT_PRESS、RIGHT_RELEASE。
ADV_FUNC_KEYEDCLICK:此函数当键盘上某键被按下并保持,且实体被点击时被调用。在此,视图作为parnode(2)进行传递,点击代码作为parval(3) 传递,所按下的键的ascii 值作为parval(4)传递。点击代码可能是:DOUBLE_CLICK、 LEFT_PRESS、 LEFT_RELEASE、 RIGHT_PRESS、 RIGHT_RELEASE。
使用此分页的有
BTE (基本任务执行器)
属性页
XE "编辑3D形状因子" XE "形状因子" XE "3D纹理" XE "3D文件" XE "3D形状" XE "尺寸" 视景属性分页
此属性页用来配置实体的外观和方向。
三维形状 - 此选项指定实体的3D形状,定义一个到.3ds、.wrl、.dxf或.stl文件的路径。
编辑三维形状因子 - 点击此按钮打开编辑实体3D形状因子的视窗。3d形状因子用来改变实体的3d形状。
上面视窗显示某暂存区3d形状的默认形状因子。下面的图片显示了另一个暂存区,其x形状因子从改为,其sy形状因子从变为。注意,黄色线框仍然反映暂存区的真实位置和尺寸,但是3d形状已经在x方向进行了平移,在y方向进行了比例调整。
二维形状 - 此选择指定实体的2D形状,或者是在底部绘制的纹理。通常2D纹理不在正投影视图中显示,但是在平面视图中显示。
三维纹理 - 这里指定实体的3D纹理。如果3D形状没有在一个3d文件中定义纹理,则此纹理将会绘制在3d形状的表面。注意,如果已经定义了实体的3d形状的纹理,则此纹理不会被使用。
颜色 - 这里指定实体的颜色。注意,如果此实体已经在其3d形状文件里定义了素材,则此颜色不会显示。此颜色只有在3d文件里没有定义素材的情况下才会显示。
位置、转角和尺寸 - 此选项用来定义实体的位置、转角和尺寸。
用户绘图代码 - 此下拉菜单用来定义用户自己的实体绘图代码。如果此域段的返回值为1,则实体的默认绘图代码不会被执行。注意,实体的绘图代码与它的3d形状不一样。大多数实体都没有任何绘图代码,显示其3d形状,而有些实体,如输送机和货架,需要更多的动态绘制能力,而不是静态的3d形状。返回1则覆盖此专用绘图代码,而不是绘制实体的3d形状。要隐藏3d形状,在常规属性页中不选显示3d形状的复选框即可。
XE "连接" XE "输入端口" XE "输出端口" XE "用户描述" XE "常规属性页" XE "属性" XE "中间端口" 常规属性分页
此分页提供关于实体的大部分信息,但是也可以设定实体的名称,也可设定如何绘制实体的标志。
名称 - 在此分页的顶部,可以输入实体的名称。当同时打开参数和属性视窗时要十分小心,因为一个视窗中的“应用”可能覆盖掉另一个视窗中的改变。还有,在命名实体时,不要使用特殊的字符,如>、<、*、-、(、)等,这将导致Flexsim不能正确地编译。空格和下划线是可用的仅有非阿拉伯数字字符。此外,不要用数字开头命名。
类型 - 这里显示实体是什么类型。
位置 - 这里显示包含此分页描述的实体的上一层次的实体的名称。
输入/中间/输出端口 - 此区域用来编辑实体的连接。从左边的组合框中选择输入端口、中间端口或输出端口之一,右边的列表将显示相应的连接。点击一个连接,通过“上移 ”和“下移”按钮在列表中上下移动它。使用删除按钮来删除连接。完成实体连接的编辑后,需要在模型运行前重置模型。
标志 - 可以在这里选择不同的选项从而显示/隐藏实体的不同部分,如实体中的物品、名称、端口等。
用户描述 - 这里用来对实体进行描述,实体做什么用,包括在实体上添加的任何特殊逻辑。
XE "复制标签" XE "添加数字标签" XE "添加文字标签" XE "标签" XE "标签页" XE "删除标签" XE "Setlabelnum" XE "Getlabelnum" XE "创建/编辑标签表" 标签属性分页
标签是自定义变量,可以在实体上指定。例如,如果需要跟踪知道进入某实体的类型3的临时实体的数量,可以使用一个标签来记录这个值。使用setlabelnum()、getlabelnum()和label()命令来与所创建的标签进行交互。可在命令集中找到更多关于这些命令的信息。
主面板显示实体的所有标签列表。点击视窗底部的添加数值/文本标签按钮可以添加数字和文本标签。也可以右键点击标签来编辑它,将有一个弹出菜单出现,给出如下图所示的选项。确保只是右键点击此标签来得到此弹出菜单。如果是点击标签,然后右键点击,得到的将是一个文本编辑菜单。
关于删除标签的注释:只有右键单击某标签然后选择“删除标签”选项才可以删除它。你可能需要从表格中退出(单击面板上的空白区域),然后右键点击标签。不要先击左键再右键点击标签,否则出现的是一个不同的弹出菜单。
添加数值标签-此选项给实体添加一个数字标签,功能与底部的添加数字标签按钮相同。
添加文字标签-此选项给实体添加一个文字标签,功能与底部的添加文字标签按钮相同。
删除标签-此选项删除选中的标签。
复制标签-此选项复制选中的标签。
创建/编辑标签表-使用此选项可以将标签当作一个二维表使用。它打开表编辑视窗以表格形式编辑此标签。在模型运行过程中可以获取或设定此表中的值,方法是,使用gettablenum()或settablenum()命令,作为label()命令第一个参数传递一个引用给标签。参见命令集可以获得更多关于这些命令的信息。例如gettablenum(label(current, "curitemtype"), 4, 5);。
按树结构展开-此选项用来在一个树视图中查看选中的标签。
XE "状态" XE "吞吐量" XE "统计" 统计属性分页
统计分页用来查看实体的状态、容量、停留时间信息。此界面被分成四个部分。第一个部分显示常规信息,如容量、停留时间和状态。其它三个部分显示这些信息的图形。
内容 - 此框内显示实体当前、最小、最大和平均物品数。平均容量是根据时间计算的,而不是根据某给定容量出现的次数来计算的。右边的图表按钮用来打开一个视窗显示此实体容量-时间图表。此图与容量分页中的一样。此图表显示在下面。
关于容量图表的注释:为了记录一个实体的容量图形,必须打开该实体的“统计收集”选项。参见统计菜单,可以获得更多关于“统计收集”的信息。
停留时间 - 此线框显示实体的最小、最大和平均停留时间。右边的图形按钮打开一个显示此实体停留时间柱状图的视窗。图形与停留时间页中的一样,图形显示在下方。
关于停留时间柱状图的注释:为了记录一个实体的停留时间柱状图,实体的统计收集必须打开。参见统计菜单,可以获得更多的统计收集信息。
状态 - 此框内显示实体当前状态值。每一状态的意义取决于所涉及的实体的类型。参见库实体以获得关于每一状态的含义的更多信息。参见状态列表可以快速得到每一个状态的数字和宏定义。右边的图表按钮打开视窗显示此实体的停留时间柱状图。此图与状态分页中显示的图一样。图形显示在下方。
吞吐量 - 吞吐量线框内显示实体当前输入输出统计结果。
设置 - 可在这里定义如何进行统计记录,例如,在容量历史记录中存储的记录点的数量限制,停留时间柱状图的上下界,停留时间柱状图的分组或“桶 ”的数量,以及是否显示平均停留时间的置信区间。置信度的选择一般是90%、95%或99%。如果改变了这些设定,需要在模型重新运行之前进行重置。
XE "固定资源" XE "任务执行器" XE "临时实体" XE "Object-oriented" XE "Flexsim实体库" Flexsim实体库
Flexsim实体库
简介
Flexsim库由实体组成,这些实体之间可进行方便易懂的交互。这些实体是采用面向对象的方法构建的,具有父类/子类的层次结构。子类实体继承父类实体的属性和默认行为,同时又特别指定了适用于特定情形的行为。在Flexsim中,库中的大多数实体都是由两个通用实体类,或者说是父类,之一创建的。这里所说的两个通用类是固定实体(FixedResources)和任务执行器(TaskExecuters)。
固定实体
固定实体是模型中固定不动的实体,可以代表处理流程的步骤,如处理站或存储区域。临时实体中从头到尾穿过模型,经历进入、被处理、完成各个处理步骤的过程。当一个临时实体在模型中某一步被处理完成,就被发送到下一步,或者说是发送到下一个固定实体。
任务执行器
任务执行器是模型中共享的可移动的资源。它们可以是操作员,被用来在某给定步骤中处理一个临时实体时使用。或者,可以在步骤之间运输临时实体。它们还可以执行许多其它仿真功能。
随着Flexsim的应用经验积累,将会发现,固定实体和任务执行器之间的差别有时会变得非常模糊。在模型中,任务执行器能够仿真类似固定实体的处理步骤,而固定实体也能配置用来像共享资源一样行进和操作。唯一差别在于看待问题的角度。
学习建议
要学习Flexsim的实体库,我们建议首先阅读固定实体的帮助文档,然后阅读任务执行器的帮助文档,同时还要看任务序列帮助。一旦熟习了这两种通用类型实体如何工作,就可以掌握它们的子类的特定功能了。这些子类列出如下:
固定实体
发生器 HYPERLINK "file:///D:\\WebHelp\\flexsim_object_library\\" 暂存区 HYPERLINK "file:///D:\\WebHelp\\flexsim_object_library\\" 处理器 HYPERLINK "file:///D:\\WebHelp\\flexsim_object_library\\" 吸收器 HYPERLINK "file:///D:\\WebHelp\\flexsim_object_library\\" 输送机 HYPERLINK "file:///D:\\WebHelp\\flexsim_object_library\\" 合成器 HYPERLINK "file:///D:\\WebHelp\\flexsim_object_library\\" 分解器 HYPERLINK "file:///D:\\WebHelp\\flexsim_object_library\\" 流节点 HYPERLINK "file:///D:\\WebHelp\\flexsim_object_library\\" 分类输送机 HYPERLINK "file:///D:\\WebHelp\\flexsim_object_library\\" 复合处理器 HYPERLINK "file:///D:\\WebHelp\\flexsim_object_library\\" 货架 HYPERLINK "file:///D:\\WebHelp\\flexsim_object_library\\" 储液罐 HYPERLINK "file:///D:\\WebHelp\\flexsim_object_library\\" 基本固定实体(BFR)
任务执行器
操作员 HYPERLINK "file:///D:\\WebHelp\\flexsim_object_library\\" 运输机
堆跺机 HYPERLINK "file:///D:\\WebHelp\\flexsim_object_library\\" 起重机 HYPERLINK "file:///D:\\WebHelp\\flexsim_object_library\\" 升降机 HYPERLINK "file:///D:\\WebHelp\\flexsim_object_library\\" 机器人 HYPERLINK "file:///D:\\WebHelp\\flexsim_object_library\\" 基本任务执行器(BTE)
其它
实体库中也有一些实体,既不是任务执行器,也不是固定实体。这些实体列出如下。
分配器 HYPERLINK "file:///D:\\WebHelp\\flexsim_object_library\\" 网络节点 HYPERLINK "file:///D:\\WebHelp\\flexsim_object_library\\" 记录器 HYPERLINK "file:///D:\\WebHelp\\flexsim_object_library\\" 交通控制器 HYPERLINK "file:///D:\\WebHelp\\flexsim_object_library\\" 可视化工具
XE "巷道堆垛机" 堆垛机
概述
堆垛机是一种特殊类型的运输机,专门设计用来与货架一起工作。堆垛机在两排货架间的巷道中往复滑行,提取和存入临时实体。堆垛机可以充分展示伸叉、提升和行进动作。提升和行进运动是同时进行的,但伸叉运动只在堆垛机完全停车后才进行。
详细说明
堆垛机是任务执行器的一个子类。它通过沿着自身x轴方向行进的方式来实现偏移行进。它一直行进直到与目的地位置正交,并抬升其载货平台。如果偏移行进是要执行装载或卸载任务,那么一完成偏移,它就会执行用户定义的装载/卸载时间,将临时实体搬运到其载货平台,或者从其载货平台搬运到目的位置。
默认情况下,堆垛机不与导航器相连。这意味着不执行行进任务。取尔代之的是所有行进都采用偏移行进的方式完成。
关于将临时实体搬运到堆垛机上的注释:对于一个装载任务,如果临时实体处于一个不断刷新临时实体位置的实体中,如输送机时,不能将临时实体搬运到载货平台上。这种情况下,如果想要显示将临时实体搬运到载货平台的过程,则确保在模型树中,堆垛机排在它要提取的那个实体的后面(在模型树中,堆垛机必须排在此实体下面)。
除了标准任务执行器所具有的属性外,堆垛机具有建模人员定义的载货平台提升速度和初始提升位置。当堆垛机空闲或者没有执行偏移行进任务时,载货平台将回到此初始位置的高度。
应用背景
由于堆垛机的主要特性是它只沿着它的x和z轴运动且不转动,所以此实体可用来模拟任何不做旋转,只前后和上下往复运动的情形。在一些模型中,它被当作一辆简单的中转车使用,或者当作两个或多个运输机之间的中转运输机使用。
状态
此实体的状态与任务执行器状态一样。
参数分页
任务执行器 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 碰撞 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 分配器 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 任务执行器触发器 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 堆垛机
相关主题
任务执行器 HYPERLINK "file:///D:\\WebHelp\\Task_Sequences\\" 任务序列 HYPERLINK "file:///D:\\WebHelp\\Task_Sequences\\"
基本固定实体(BFR)
概述
基本固定实体(BFR)是为开发人员提供的用来建立用户库的固定实体。它把固定实体的几乎所有可继承逻辑传递给拾取列表函数,这样,用户库开发人员就能够切实地指定固定实体的所有功能。
详细说明
BFR是固定实体的一个子类。它用来指定重置、进入、离开以及消息触发器的逻辑,同时也包括停止/恢复实体、捡取/放置偏移、运输输入通知/完成、运输输出通知/完成、及其它高级功能。
在此实体的进入、离开、重置及消息触发器中,需要用receiveitem()和releaseitem()命令来实现接收和释放临时实体的逻辑。还有一些命令可在处理临时实体时使用,如setstate()和senddelayedmessage()命令,和命令列表中固定实体类的所有命令。此实体是固定实体的基本要素实现,而全部逻辑则由建模人员来完成。
进入/离开触发器的特有参数
BFR传递两个特有的参数给进入和离开触发器。参数parval(3)传递变量nroftransportsin的当前值。参数parval(4)传递变量nroftransportsout的当前值。
参数分页
临时实体流 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 固定实体触发器 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 标签 BFR高级
基本任务执行器(BTE)
概述
基本任务执行器(BTE)是为开发人员提供的用来创建用户库的任务执行器。它把任务执行器的几乎所有可继承逻辑传递给拾取列表函数,这样用户库开发人员就可以切实地指定任务执行器的所有功能。
详细说明
BTE是任务执行器的一个子类。它用来指定偏移行进功能的逻辑,同时也包括停止/恢复实体、捡取/放置偏移和其它高级功能。参见BTE页可以获得更多信息。
参数分页
BTE 任务执行器 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 碰撞 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 分配器 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 任务执行器触发器
XE "处理器" XE "合并" XE "合成器" 合成器
概述
合成器用来把模型中行进通过的多个临时实体组合在一起。它可以将临时实体永久地合成在一起,也可以将它们打包,在以后某个时间点上还可以再将它们分离出来。合成器首先从输入端口1接收一个临时实体,然后才会从其它输入端口接收后续的临时实体。用户指定从输入端口2及更大序号的端口接收的临时实体的数量。只有当用户要求的后续临时实体全部到达后,才开始对预置/处理时间计时。可以把合成器设置为在其预置、处理和维修时间期间需要操作员。
详细说明
合成器是处理器的一个子类,而处理器又是固定实体的一个子类。在操作中,合成器首先从它的第一个输入端口接收一个临时实体。合成器将一直等待直到从输入端口1接收到一个临时实体,然后才允许其它临时实体进入。然后,它根据组成列表收集一批临时实体。组成列表指定了合成器每一批次从其它每个输入端口接收的临时实体的数量。组成列表的第1行是从输入端口2接收的临时实体数量,第2行对应输入端口3,依此类推。当连接实体到合成器的输入端口时,组成列表会自动更新。如果在添加输入端口时,合成器的参数视窗是开着的,则需要关闭视窗并再次双击合成器才能注册所做的改变。
合成器一旦收集到一个批次的量,就经历预置和处理时间,并根据处理器功能中所做的定义调用操作员进行预置和处理操作。
合成器有三种操作模式:装盘、合并与分批。在装盘模式下,合成器将从输入端口2与更高序号的输入端口接收到的所有临时实体全部移入到由输入端口1接收的临时实体中,然后释放此容器临时实体。在合并模式下,除了从输入端口1接收到的那个临时实体,合成器将破坏掉其余所有的临时实体。在分批模式下,合成器仅在收集到本批次的临时实体并完成了预置和处理时间后释放所有临时实体。
“从端口拉入”选项对于合成器无效。合成器自己处理该逻辑。
如果正在向合成器送入临时实体,则在接收容器临时实体时,在给定时刻它只允许一个临时实体进入,也就是那个容器临时实体。一旦容器临时实体到达,合成器即允许组成列表中的所有临时实体同时进入。
关于从输入端口1接收多于1个临时实体的注释:合成器被配置为总是从输入端口1接收一个临时实体。如果采用合并或分批模式,可能需要从连接到输入端口1的上游实体接收大于1的数量的临时实体。这里有两种办法。最简单的做法是将上游实体同时连接到合成器的输入端口1和2,然后在组成列表中的第一行中,输入一个比所需要收集的临时实体数少1的值。则合成器将从输入端口1接收1个,从输入端口2接收所需的其余数量。如果这种方法不适合某种情形的需要,可采取另一种方式,给模型添加一个生成器,将其连接到合成器的输入端口1,并将生成器的时间间隔设为0。
从同一上游实体接收多种类型的临时实体的技巧:如果有一个上游实体,它可容纳多种类型的临时实体,而用户需要在合成器的组成列表中分别显示这些不同类型,则可以将上游实体的多个输出端口与合成器的多个输入端口连接起来。例如,一个合成器从一个上游处理器接收1和2两种类型的临时实体。需要收集4个类型1和6个类型2的临时实体,将其装盘到一个托盘上。要实现此过程,首先将托盘发生器连接到合成器的输入端口1,然后将处理器的输出端口1连接到合成器的输入端口2,将处理器的输出端口2连接到合成器的输入端口3。将处理器的发送策略指定为按类型发送。然后在合成器组成列表中,在对应于输入端口2的那一行输入4,对应于输入端口3的那一行输入6。
关于手工将临时实体移出合成器的注释:如果要使用一个任务序列或者moveobject(移动实体)命令手工地将临时实体移出合成器,则要确保为临时实体移出指定一个非0端口。当合成器装盘时,它将临时实体从它自身移动到容器中。这将触发离开触发器,而区别组件离开到容器中和容器离开此合成器这两个事件的方法是根据离开触发器端口号进行判断。如果端口号为0,则认为是一个组件被移到容器中,则无操作。如果用户明确指定将容器临时实体移出合成器,而端口号指定为0,则会认为是一个打包了的临时实体,就不会接收下一个容器临时实体。
状态
空闲 – 合成器没有从输入端口1接收第一个临时实体。 收集 -合成器已经从输入端口1接收到了第一个临时实体,正在收集余下的临时实体。 预置 -合成器处于用户定义的预置时间内。 处理 -合成器处于用户定义的处理时间内。 阻塞 -合成器已释放临时实体,但是下游实体还没有准备好接收它们。 等待操作员 -合成器在等待操作员的到达,从而进行中断维修或是对某批次进行操作。 等待运输机 -合成器已释放一个临时实体,下游实体也准备好接收它,但是运输机还没将它捡取。 停机 –合成器中断停机。.
参数分页
处理时间 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 合成器 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 临时实体流 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 处理触发器 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 操作员
XE "输送机" XE "跳转" XE "覆盖解除触发" XE "覆盖触发器" XE "覆盖解除" XE "覆盖" 输送机
概述
输送机用来在模型中沿一系列路径移动临时实体。通过创建输送机的不同分段来定义路径。每个分段可以是直段,也可以是弧段。弧段用转过的角度和半径定义。直段由长度定义。这样可以使输送机具有其所需要的弯曲度。输送机可以是可积聚的,也可以是非积聚的。
详细说明
输送机是固定实体的一个子类。它有两种操作模式,可积聚模式与非积聚模式。在可积聚模式下,输送机像辊道输送机一样运作,即使输送机末端被阻塞,临时实体也可以在上面积聚。在非积聚模式下,输送机像皮带传送机一样运作,如果输送机被阻塞,则输送机上的所有临时实体都会停下。
当临时实体到达输送机时,先是它的前端到达输送机的起始端。然后开始沿着输送机的长度方向向下输送。一旦临时实体的全长被输送通过了输送机的起始端,输送机就重新打开其输入,可以接收另一个产品了。当临时实体的前端碰到输送机的末端时输送机就释放掉此临时实体。
关于第一个分段是弧段的注释:如果输送机的第一段是弧段,则正在进入的临时实体将会像先前的输送机的最后一个分段也是弧段一样被输送到此输送机上。这样,临时实体实际上是沿着弧度被输送到此输送机上的。这可能不符合用户的期望。用户可能想要让临时实体直着放到输送机上。要做到这点,不要让输送机的第一个分段为弧段,插入一个长度为0的直段作为第一段。这样,临时实体就能直着放到输送机上了。
输送机一次只接收一个临时实体,且一次只释放一个临时实体。意思是说,如果使用一个任务执行器将临时实体运入或运出输送机,一次只能有一个临时实体被运进来,一次也只能有一个临时实体等待一个输送机来从输送机上将其捡取。当同时有多个操作员捡取临时实体并将其运送到输送机上时,这一点很重要。为了实现同时操作,需要在输送机前端设置一个暂存区,因为暂存区可以同时接收多个临时实体。
速度限制
输送机不执行临时实体的加速或减速。在仿真过程中,输送机的速度也不能动态地改变。没有设计输送机的这种功能。
排列输送机
输送机还有一种简单的能力可以排列后面的输送机。按下X键,然后点击输送机,则连接到其第一个输出端口的输送机将被重新排列,与此输送机的末端齐平。同样,连接到那个输送机输出端口1的输送机也会被执行此操作,依次类推。这只适用于成系列的输送机,且只适用于输出端口1。
输送机X向尺寸
注意,输送机实体的实际尺寸(被选中时的黄色方框的尺寸)和输送机的长度是不同的。改变输送机的y向尺寸将改变其宽度。另一方面,改变输送机的x向尺寸将改变其支柱的宽度。
状态
空 - 输送机上没有临时实体。 输送 - 输送机上的所有临时实体都在向下移动。 阻塞 - 前面的临时实体到达了输送机的末端,且已被释放,但是还没有被一个下游实体接收。注意,这并不意味着所有的临时实体都停下来了,如在可积聚输送机上就不是。 等待运输机 - 前面的临时实体到达了输送机的末端,且已被释放,也已被下游实体接收,但是运输机还没有来捡取它。
XE "覆盖解除触发" XE "覆盖触发器" XE "跳转" 光电传感器
输送机允许在它上面指定的位置安装光电传感器。光电传感器注视输送机上的一些位置,当光电传感器被遮挡时,触发输送机的遮挡触发器和未遮挡触发器。除非在遮挡触发器和未遮挡触发器中明确指定了改变输送机行为,它们并不影响输送机的其它逻辑。每个光电传感器都有两个用户定义的域段:一个沿着输送机长度方向的从输送机起始端开始算起的位置,和跳转时间。
在任意给定时间,每个光电传感器都处于三种状态之一,描述如下:
未遮挡/绿色 – 此状态表示没有临时实体遮挡光电传感器。 部分遮挡/黄色 - 此状态表示临时实体正遮挡着光电传感器,但是还未遮挡到其全部跳转时间。 遮挡/红色 - 此状态表示临时实体正遮挡着光电传感器,而且至少已经被遮挡了全部跳转时间。
可能发生下列状态转移。每次状态转移都触发一个触发器。
绿到黄 - 此状态转移发生的条件是,光电传感器没有被遮挡,一个临时实体经过并遮挡它。这时触发输送机的遮挡触发器,向此触发器的遮挡模式参数中传递一个值1。输送机也开始光电传感器跳转时间的计时。 黄到红 - 此状态转移发生的条件是,一个光电传感器被部分遮挡(黄色状态),其跳转时间计时期满。这将再次触发输送机的遮挡触发器,向触发器的遮挡模式参数中传递一个值2。注意,在触发器逻辑中,需要区分绿到黄转变和黄到红转变的不同触发器。还要注意,如果指定光电传感器的跳转时间为0,则遮挡触发器将会同时触发两次:一次是状态由绿变黄时,然后又是由黄变红时。 黄到绿 - 此状态转移发生的条件是,光电传感器被遮挡且处于黄色状态时,一个临时实体,后面跟随一段空隙,完成经过光电传感器的过程,使它变为未遮挡。这时触发输送机的未遮挡触发器,并向遮挡模式参数传递1。
红到绿 - 此状态转移发生的条件是,光电传感器被遮挡处于红色状态,一个临时实体,后面跟随一段空隙,完成经过光电传感器的过程,使它变为未遮挡状态。这将触发输送机的未遮挡触发器,并向遮挡模式参数传递2。
关于0跳转时间的注释:如果将光电传感器的跳转时间设为0,则遮挡触发器将同时触发两次:一次是状态由绿变黄,然后是从黄变红。
关于使光电传感器变为未遮挡的注释:不是每次临时实体完全经过光电传感器时都会触发未遮挡触发器。如果在此临时实体后面紧跟着一个临时实体,则此临时实体经过光电传感器之后,光电传感器仍然保持遮挡状态。不过,如果用户指定一个大于产品实际长度的产品间隔长度,则在两个产品之间就会有空隙,这将会使得在每个临时实体经过光电传感器之后都会触发未遮挡触发器。
光电传感器可视化
输送机的光电传感器显示为横跨输送机的直线。要隐藏输送机的光电传感器,可以按住B键,然后点击输送机,或者可以在输送机参数视窗的光电传感器分页中隐藏光电传感器。
参数分页
输送机 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 布局 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 光电传感器 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 临时实体流 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 输送机触发器
XE "起重机" XE "起重机导航器" 起重机
概述
起重机与运输机的功能类似,但它的图形经过了修改。起重机在固定的空间内工作,沿着互相垂直的x、y和z三个方向运动。它用来模拟有轨梁导引的起重机,如门式、桥式和悬臂式起重机。在默认情况下,起重机吊具在捡取或放下临时实体,移动到下一个位置前,会上升到某一个高度。要想更进一步地控制吊具从一次捡取到下一次捡取的运动,可以使用网络节点来定义所需要的路径。
详细说明
起重机是任务执行器的一个子类。它实现偏移行进的方式非常类似任务执行器。它行进到使它的x/y中心和z基面到达目的地位置。如果此偏移行进任务有一个涉及的临时实体,则起重机行进使其x/y中心和z基面到达临时实体的顶部,换句话说,它通过增加临时实体的z尺寸来提高到达z的位置。
起重机使用一个起重机导航器。对于行进任务,起重机导航器使用一个简单的机制让起重机到达正确的位置。起重机直线加速到其起重提升高度。一旦到达起重机提升高度,就以最高速度运动到目标实体的x/y位置。它一旦到达目标实体的x/y位置,行进操作就完成了。余下的操作是下降到适当的z位置,由一个后续的装载/卸载任务的偏移行进来完成。
应用背景
默认的起重机导航器采用一种简单的方式执行行进,它只使用一组加速度、最大速度、减速度来使得起重机到达正确的位置。许多起重机使用多个马达,每个都有自己的加速度、减速度和最大速度属性。更灵活的起重机功能未来将发布,目前可以使用协同任务序列和层次结构组织的任务执行器进行组合使用,以达到设定复合实体内部的多个加速度、减速度和最大速度的目的。
状态
起重机遵循任务执行器状态。
参数分页
起重机 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 任务执行器 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 碰撞 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 分配器 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 任务执行器触发器
XE "排队" XE "分解数量" 分配器
概述
分配器用来控制一组运输机或操作员。任务序列从一个实体送到分配器,分配器将它们委派给与其输出端口相连的运输机或操作员。最终接收到请求的可移动资源将执行此任务序列。
详细说明
分配器实体对任务序列实施排队和寻径逻辑。根据建模人员的逻辑,任务序列一旦传递给一个分配器,则可能进行排队,也可能被立即分配。
当分配器接收到一个任务序列时,被dispatchtasksequence()命令触发,首先调用其 “Pass To(传递给)”函数。此函数返回一个端口号,它是要把此任务序列发送给的端口号。分配器将立即把任务序列传送给与那个端口相连的实体。如果函数返回0而不是一个端口号,则任务序列在分配器任务序列队列中进行排队。这是通过调用任务序列的排队策略函数完成的。排队策略返回一个与此任务序列相关联的值,代表在队列中对此任务序列进行排序的优先级。高的优先级值排在队列的前面,低的排在后面。通常会简单地返回任务序列的优先级值,但是如果需要,排队策略函数允许动态地改变任务序列的优先级。在对队列中的任务序列进行排序时,实际上分配器多次调用排队策略函数,队列中的每个任务序列都调用一次,从而将每个优先级的值与新的任务序列的优先级值进行比较。一旦发现可放置新的任务序列的正确位置,就对它进行相应的排序。
分配器是所有任务执行器的父类,换句话说,所有任务执行器都是分配器。这意味着所有的操作员或者运输机都可以扮演分配器或者团队指挥的角色,给组中其它成员安排任务序列,同时自己也执行任务。
状态
分配器没有任何状态
参数分页
分配器 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 分配器触发器
XE "升降机" 升降机
概述
升降机是一种特殊的运输机,上下运输移动临时实体。它自动移动到需要捡取或放下临时实体的高度。可以动画显示临时实体在进入或离开升降机的过程。这使得升降机的装载和卸载时间感觉更逼真。
详细说明
该垂直起重设备是任务执行器的一个子类。它只执行偏移位置的z轴方向的偏移量来实现偏移行进。如果偏移行进是为了一个装载或卸载任务进行的,则偏移一完成,它就采用用户定义的装载/卸载时间将临时实体移到载货平台上,或者从载货平台移到目的地位置。在移出或移入升降机时,临时实体沿升降机的x轴向运动。
关于将临时实体移上升降机的注释:对于一个装载任务,如果实体包含在一个不断刷新临时实体位置的实体中,例如是一个输送机,则可能不能正常地将临时实体移动到升降机上。在这种情况下,如果需要显示出临时实体被移到载货平台上的过程,则必须确保在模型树中升降机排在捡取位置的实体的后面(在树中,升降机必须比此实体更低)。
默认情况下,升降机不与导航器相连。这意味着不会执行行进任务。所有行进都是采用偏移行进来完成的。
应用背景
由于升降机主要特性是只沿z轴运动,它可用来完成让实体只沿着一个轴向运动的目的。
状态
升降机遵循任务执行器状态。
参数分页
升降机 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 任务执行器 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 碰撞 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 分配器 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 任务执行器触发器
XE "首个可用列" XE "释放" XE "等待运输" XE "按下列请求运输机" XE "拉式" XE "拉式请求" 固定实体
概述
固定实体是生成器、暂存区、处理器、吸收器、合成器、分解器、货架、流节点、复合处理器和储液罐的父类。它定义将临时实体拉入到站点并继续发送实体的逻辑。用户不能将固定实体拖入模型中,而是使用固定实体子类实体的临时实体流分页来编辑固定实体的逻辑。
详细说明
固定实体描述了一类用特定方式处理临时实体的实体。它们通过其输入端口 “接收”临时实体,对这些临时实体执行一些操作,然后通过其输出端口“释放”临时实体将其传送下去。虽然不同类型的固定实体在不同的时间接收和释放临时实体,但所有固定实体接收和释放临时实体的过程都是相同的。例如,暂存区可以同时接收多个临时实体。在每个临时实体进入暂存区后,暂存区立即释放它们。而另一方面,处理器只接收一个临时实体,处理它,然后释放它,并一直等待直到此临时实体离开后才接收下一个临时实体。虽然暂存区和处理器在不同的时间接收临时实体,但它们接收和释放临时实体的过程是相同的。它们在接收和释放每个临时实体时都经历一系列特定的步骤。其中一些步骤是固定实体自动处理的,另外一些允许建模人员来定义接收和释放临时实体的方式。所有这些建模人员定义的输入都可以在实体参数视窗的“临时实体流”分页中编辑。下图显示了一个固定实体接收和释放临时实体的步骤。此图描述了一个没有选择“ 连续判断送往端口” 复选框的固定实体。
1.打开输入端口并寻找一个要接收的临时实体
当固定实体准备好接收一个临时实体时,它首先查看是否在使用拉动模式。如果是,调用从端口接收函数。此函数返回将要打开的输入端口的序号值。如果返回0,则打开所有输入端口。当上游的一个临时实体被释放时,它调用拉入条件域段的函数来拉动那个临时实体。此域段将返回一个真(1)或假(0)值。如果为真,就接收此临时实体。如果为假,就尝试为下一个已释放的临时实体再次调用拉入条件函数,或者等待,直到上游固定实体又释放另一个临时实体。继续此循环直到拉入条件函数对某个特定临时实体返回真(1),然后就接收此临时实体。然而,如果实体没有采用拉动模式,则固定实体跳过所有拉动逻辑,只是等待第一个变为可用的临时实体。
拉动逻辑示例
上图显示了两个固定实体。这里设定,采用拉动模式的固定实体从上游固定实体拉入临时实体。上游固定实体释放了3个临时实体(绿色的),还有2个正在处理(红色的)中。当拉动式固定实体准备好接收上游固定实体的一个临时实体时,它对这3个临时实体依次调用拉入条件函数,直到拉入条件函数返回一个真(1)值。一旦返回一个真值,拉动式固定实体就立即接收那个临时实体并完成拉动逻辑,直到准备好接收下一个临时实体。如果3次调用都返回假(0),则拉动式固定实体将等待。此后,在仿真中,当临时实体4被释放时,拉动式固定实体对它调用拉入条件函数。如果返回真,就接收它。如果返回假,将重复这个过程,直到找到一个满足拉入条件的临时实体。
关于固定实体等待释放一个上游临时实体的注释:当一个上游临时实体被释放时,拉动式固定实体将为那个特定的临时实体调用拉入条件函数。它将不会为先前释放的、且拉入条件函数已返回假(0)值的那些临时实体再次调用拉入条件函数。如果需要对所有释放了的临时实体都重新进行拉入条件的判断,则要选中“连续判断拉入条件” 复选框,这样,拉动式固定实体将在每释放一个临时实体时,都会对所有已释放的临时实体重新进行拉入条件判断。
关于被一个实体从中进行拉动的上游实体的送往选项的注释:如果一个实体被配置为从上游实体拉入临时实体,则那些上游实体的送往选项是无效的,意思是,不要为那些实体指定送往逻辑,用默认的“第一个可用”选项就可以了。
2. 处理临时实体
临时实体一进入固定实体,就按照固定实体的类型被进行相应的“处理 ”,然后被释放。例如,如果是一个处理器,则临时实体就会被处理一定的时间。如果是一个暂存区实体,则临时实体立即被释放。如果是输送机实体,则临时实体沿着输送机长度方向输送,并在到达末端时被释放。
3. 释放临时实体并决定打开哪一个输出端口
当释放一个临时实体时,固定实体调用送往函数。与“从端口拉入”函数相似,此函数返回一个端口号。然后,固定实体打开那个端口。如果返回0,则打开所有端口。一旦打开端口,固定实体就等待直到一个下游实体准备好接收此临时实体。如果配置固定实体为连续判断送往端口,则每当一个下游固定实体变为可用能接收一个新的临时实体时,上游固定实体都会为此临时实体重新判断送往端口条件。强调指出,这只在下游实体变为可用时执行。它不会为已经是可用的下游实体进行连续判断。如果需要在其它某时刻,而不是当一个下游实体变为可用的时刻,手工强制进行再判断,则可以在上游实体上掉用openoutput()命令来实现。
关于送往返回值的注释:如果返回的端口号大于0,则打开那个端口。如果返回端口号为0,则打开所有端口。如果返回的端口号为-1,则不释放此临时实体,而是在以后明确地使用releaseitem()命令来释放它,或者使用moveobject命令将它移出。当它再次被释放时,将再次调用sendtoport函数。-1的返回值是为高级用户所设计的更多功能。
4. 将临时实体传递给下一站点
一旦释放了临时实体,且下游实体已准备好接收它,如果没有选中“使用运输机”复选框,则此临时实体将会被立即发送到下游实体中。如果选中了“使用运输机”复选框,则固定实体将会调用请求运输机函数。此函数将返回一个任务执行器或分配器的引用。如果返回一个有效引用,则将自动创建一个默认的任务序列,最终将有一个任务执行器来捡取此临时实体并将其送到目的地。也可以从“从下列请求运输机”域段中返回一个0值。如果返回0值,则固定实体认为用户已建立了一个任务序列,它自己将不再创建默认的任务序列。如果用户返回0,则需要创建用户的任务序列。实现此想法的易行方式是,在“请求运输机”域段的下拉菜单中选取“手工创建任务序列”选项,然后在这里手工编辑代码。
使用运输机
如果一个实体需要使用一个运输机将临时实体运送到下游实体,则当下游实体拉动临时实体,或变为准备好接收临时实体状态时,就不再立即将此临时实体移入到下一站点,而是由实体创建一个任务序列给一个任务执行器,以行进到此实体,捡取临时实体,行进到下游实体,并在那儿放下临时实体。此操作包含若干重要步骤。第一,当这种情况发生时,实体调用按下列请求运输工具函数,得到要接收此任务序列的实体的引用。然后,临时实体变为“等待运输机” 状态。这意味着此临时实体的目的地已经确定,不能改变。发送到和拉入所要通过的端口也已经确定,不会改变。每个固定实体跟踪两个数字:要进入此实体的临时实体数目,和要运输出此实体但还没有被捡取的临时实体数目。这两个变量分别叫做nroftransportsin和nroftransportsout。一旦此实体调用了按下列请求运输工具域段的函数,它将递增自身的nroftransportsout变量,并通知下游实体,下游实体将随后递增它的nroftransportsin变量。这样,实体就创建一个任务序列:
1. 行进到上游实体: travel task( HYPERLINK "file:///D:\\WebHelp\\Task_Sequences\\" \l "TravelTask" 行进任务)。 2. 装载临时实体:Frload task( HYPERLINK "file:///D:\\WebHelp\\Task_Sequences\\" \l "LoadTask" 固定实体装载任务)。 3. 在适当情况下则暂停转向其它任务序列: break task( HYPERLINK "file:///D:\\WebHelp\\Task_Sequences\\" \l "BreakTask" 暂停任务)。 4. 行进到下游实体:travel task( HYPERLINK "file:///D:\\WebHelp\\Task_Sequences\\" \l "TravelTask" 行进任务)。 5. 将临时实体卸载到下游实体: Frunload task HYPERLINK "file:///D:\\WebHelp\\Task_Sequences\\" \l "UnloadTask" (卸载任务).
注意,固定实体采用固定实体装载/卸载任务类型代替装载/卸载任务类型。这两个任务与常规的装载和卸载任务相似,区别只在于,在任务执行器移动临时实体之前,它向固定实体通报操作要进行,这样固定实体就可以适当地递增其nroftransportsin/nroftransportsout变量的值。总之,上游实体的nroftransportsout变量和下游实体的nroftransportsin变量在调用按下列请求运输工具函数时,同时进行递增。然后,在任务执行器完成固定实体装载任务,并将临时实体从上游实体中移出之前,变量Nroftransportsout被递减。在任务执行器完成固定实体卸载任务,并将临时实体移入下游实体之前,变量Nroftransportsin被递减。
变量nroftransportsin和nroftransportsout的统一对所涉及实体的正确操作是必要的,因为每个实体都可能根据这些变量屏蔽进一步的输入/输出。例如,来看一个容量为10的暂存区。如果暂存区当前数量为5,还有5个产品没有到达,但是正在向此暂存区转移,那么暂存区必须关闭其输入端口,因为尽管在当前时间点只有5个产品,却可能会装满。一个错误的nroftransportsin变量可能致使暂存区容纳临时实体数量出现严重问题。这意味着什么呢?意味着两点。第一,如果一个实体已选择了运输一个临时实体到指定的下游实体,就不能将此临时实体返回或者改变其目的地,因为这样将会使nroftransportsin/out变量的递减陷入混乱。第二,相对于常规的装载/卸载,使用固定实体装载/卸载任务要非常小心,因为可能影响此实体的输入输出功能。简单地说,每次执行一个按下列请求运输工具函数都将最终(如果不是立即)导致创建一个从上游实体装载临时实体的固定实体装载任务,和一个将临时实体卸载到下游实体的固定实体卸载任务。在其它情况下,应使用常规的装载和卸载任务。
XE "速度" 流节点
概述
流节点用于将临时实体从一个位置移动到另一个位置,其移动过程伴随时间的消耗。使用“A”键点击拖动的简单连接方式,就可以使用流节点引导临时实体流。例如,如果需要产品花费一定时间从一个暂存区移动到一个处理器,则在两者之间放置一个流节点,并连接暂存区的输出端口与流节点的输入端口,然后连接流节点的输出端口与处理器的输入端口。
详细说明
流节点是固定实体的一个子类。它将持续接收临时实体直到达到其最大容量。临时实体一进入流节点,流节点就对它执行送往函数。接着执行速度域段会找到临时实体的速度。然后将临时实体的位置设为自身的位置,并开始向送往函数返回的下游实体移动临时实体。临时实体一到达目标实体的位置,流节点就释放它。
注意,只要到达一个临时实体,流节点就执行送往函数。这与固定实体在释放临时实体时执行的常用送往功能不同。此区别具有重要的含义。首先,不能从送往函数返回0值,因为流节点需要立即决定要送到哪一个下游实体。如果送往函数返回0,则流节点将总是送到输出端口1。第二,尽管可以自由使用,但对流节点进行连续送往条件判断并没有多大意义。由于临时实体在进入时必须交付一个输出端口,连续判断送往条件可能会导致这样的情形,即,临时实体到达一个目标实体,但到达后其送往条件可能会改变,于是从一个与它所到达的端口不同的端口送出。
应用背景
流节点用来对临时实体的行进网络进行仿真。也可以用输送机来仿真行进网络。用输送机建模是从创建和连接行进网络路径的角度来进行描述,而使用流节点是从创建和连接行进网络的节点的角度来进行描述,在某些情况下能使建模相对更容易。然而,与输送机不同,流节点模式不提供沿路径积聚临时实体的功能,只允许用一个最大容量值来限制网络上的交通。因此,如果有一块行进区域需要定义更灵活的交通控制,则采用输送机而不要用流节点。还可以使用网络节点行进网络来代替流节点来实现,方法是:使用任务执行器临时实体,选中一个上游固定实体的“使用运输机”复选框,这个上游固定实体是用户想要临时实体从那里开始行进的实体,并在从下列请求运输机下拉菜单中选中“Flow Item as TaskExecuter(临时实体作为任务执行器) ”。
状态
流节点不执行任何状态。可以使用其当前数量-时间图来得到流节点的统计数据。
参数分页
流节点 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 临时实体流 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 流节点触发器
XE "非累积模式" XE "输送机" XE "分类输送机" 分类输送机
概述
分类输送机是一种非积聚式输送机,允许沿着输送机有多个输入位置,同时也有多个输出位置。每个输入/输出端口都有一个用户定义的输入/输出位置。
详细说明
分类输送机是输送机的一个子类,而输送机又是固定实体的一个子类。分类输送机的每个输入端口都在沿着输送机长度方向上有一个关联入口位置。每个输出端口都有一个关联离开位置和一个阻塞参数。
接收/释放逻辑
对于每个进入点,只要进入点没有临时实体占据,且它前面有足够空间容纳进入的临时实体,分类输送机将会在那个进入点接收临时实体。进入的临时实体的前边界对齐进入点放置,然后开始沿输送机长度方向向下游传送。
关于进入/离开位置的注释:如果已经改变了分类输送机的进入/离开位置,则为了正确布置那些位置,需要重置模型。
每当一个临时实体到达输送机上的一个离开点时,分类输送机在那个端口检查发送条件。如果发送请求返回真,则输送机将释放它从而“尝试”从那个端口将临时实体送出。如果下游实体准备好了接收此临时实体,则尝试成功,临时实体将会从那个输出端口送出。如果尝试失败,将发生两种情况之一。如果那个输出端口的阻塞参数为0,则临时实体将成为“未释放的”并继续沿输送机的长度方向向下输送。如阻塞参数是1,整个输送机都会停止,直到下游实体准备好接收此产品。
到达输送机末端但没有离开的临时实体将循环回到输送机的起始端,并再次沿输送机长度方向向下游移动。这就是为什么建议每个分类输送机的最后一个离开点要设定为阻塞的原因,除非想要它们再次沿着输送机输送。当一个临时实体循环到输送机起始端时,触发进入触发器,所涉及的端口号为0。
关于阻塞的注释:分类输送机是非积聚式输送机,这意味着如果输送机上有一个产品停下,则输送机上的所有产品都停下。在堵塞时,产品不会积聚。在模型中使用分类输送机之前,要清楚这一点。因为,否则,用户可能不再对其分类输送机重新做许多逻辑,而使用常规输送机作为替代。
固定实体逻辑编程
分类输送机的固定实体执行方式与标准方式有几点不同,了解这些不同很重要。首先,分类输送机总是用拉动模式。然而,与其它拉动模式的固定实体不同,它一定检查上游流动实体送往函数的值,以确保可以把临时实体送给分类输送机。第二点不同于常规固定实体的地方是,用户没有权利访问“从下列端口拉入”域段。分类输送机自己处理这些逻辑,因为每个端口接收临时实体的能力取决于进入点的位置和输送机上其它临时实体的尺寸和位置。还有,这里没有送往端口参数域段来返回端口号。同样,临时实体离开要通过的端口取决于临时实体的位置和输出点的位置。相反,分类输送机提供一个“发送条件”域段,每当有一个临时实体经过离开位置时就触发该域段的函数。此域段将返回一个真或假值(1或0),表示是否允许临时实体离开那个离开点。
关于使用运输机的注释:使用任务执行器将临时实体搬运到输送机上时要特别小心。分类输送机通过某给定端口接收临时实体的能力取决于仿真中任意给定时间的输送机上其它临时实体的位置。如果分类输送机变为准备好接收临时实体的状态的时刻,与其实际接收到临时实体的时刻之间存在时间延迟,则在临时实体到达时,接收临时实体的机会可能已经错过了。这将导致分类输送机不能正确的输送临时实体。如果需要将临时实体运输到分类输送机上,则只能将它们运输到输送机上第一个进入点。或者,将临时实体运输到常规输送机上,由它喂入分类输送机。还有,离开分类输送机时使用运输机的权利被取消。再次采用常规输送机,将临时实体从分类输送机喂入到这些常规输送机中,并使用运输机使临时实体离开常规输送机。
进入/离开点可视化
进入/离开点在正投影/透视视图中用红色或绿色箭头绘出。输入位置用箭头指向输送机内部。离开位置用箭头指向输送机外部。绿色箭头表示分类输送机可以通过那个进入点接收临时实体,或者正在等待着通过那个离开点送出临时实体。红色箭头表示分类输送机那个进入点不可用,或者当前正有临时实体等待着通过那个离开点。如要隐藏箭头,从它的属性视窗,或者从编辑选中实体菜单中设置实体不显示端口。
状态
空:输送机上没有临时实体。 输送:输送机上的临时实体在向下游输送。 阻塞:输送机上的一个临时实体到达了离开点,且它的阻塞参数是1,但是它还没有离开输送机,所以输送机上的所有临时实体都停下来了。
参数分页
分类输送机 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 输送机 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 布局 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 输送机触发器
XE "用户定义状态" XE "复合处理器" 复合处理器
概述
复合处理器用来模拟对临时实体的顺序地有序操作过程。用户对每个复合处理器实体定义一系列的处理过程。每个进入复合处理器的临时实体都将按顺序经历这些处理过程。复合处理器可能在处理过程中调用操作员。
详细说明
复合处理器是固定实体的一个子类。它接收一个临时实体,将此临时实体放入其处理过程序列中逐个经过,然后释放此临时实体。一旦临时实体离开此复合处理器,它又接收一个临时实体,再经过这样的处理过程。复合处理器中同一时刻只能有一个临时实体。
对于用户定义的每一个处理过程,可以指定处理过程的名称、处理时间、那个处理过程需要的操作员数目、送给那些操作员的任务的优先级和先占值,以及接收操作任务的操作员或分配器。在每个过程的开始,复合处理器调用处理时间域段,将其状态设定为处理过程的名称,并且调用操作员(如果操作员数目大于0)。当处理完成之后,复合处理器释放此过程调用的所有操作员,并调用处理结束触发器。它还用parval(2)将处理过程序号传递给处理完成触发器。
应用背景
如果有一个站点,涉及多个操作,各有不同的处理时间,并且/或者有不同的资源,则应该使用复合处理器。也可以将复合处理器当作不同类型操作的共享站点使用。例如,临时实体1需要经过操作A、B、C、D,临时实体2需要操作E、F、G、H,但是两种类型必须共享一个站点来进行处理。给复合处理器设定8个处理过程:A-H,对于临时实体类型1,将E – H的处理过程的处理时间设定为0,对临时实体类型2,将A - D的处理过程的处理时间设定为0。
注意,复合处理器不提供管道处理过程。管道就是当一个临时实体完成了过程1并移动到过程2,另一个临时实体可以进行过程1的处理。这样,在任意给定时刻,可以有几个临时实体“沿管道向下流动”。如果需要模拟这种情况,可以使用顺序连接的多个处理器。
状态
空闲 - 没有临时实体在处理。 用户定义状态 - 用户自定义的状态,每个过程对应一个。 阻塞 - 复合处理器已完成对一个临时实体的所有处理并已释放,但没有下游实体准备好接收此临时实体。 等待操作员 - 复合处理器等待操作员的到来以便开始某个处理过程。 等待运输机 - 复合处理器已完成对某个临时实体的所有处理,并释放了它,且一个下游实体已准备好接收此临时实体,但是临时实体还没有被一个任务执行器捡取。
参数分页
复合处理器 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 临时实体流 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 复合处理器触发器
XE "网络节点页" 网络节点
概述
网络节点用来定义运输机和操作员遵循的路径网络。通过使用样条线节点来增加路径弯曲部分从而修改路径。在默认情况下,在网络上行进的实体将沿着起始位置和目标位置之间的最短路径行进。学习如何使用网络节点,可参考Flexsim教程的第3课。
详细说明
连接行进网络有如下三个步骤:
1. 将网络节点相互连接。 2. 将网络节点连接到扮演网关的实体上。 3. 将任务执行器连接到某些网络节点,在仿真开始时,任务执行器将呆在那些网络节点上。
相互连接网络节点
每个网络节点都可以有多条路径与其它网络节点相连。每条路径代表两条单行线路径。每条单行线都可以单独配置。
在正投影/透视视图中配置路径
要在两个网络节点之间创建一条路径,可以按住“A”键点击一个网络节点,然后拖动到另一个节点。
这将会创建两条经由两个网络节点间连接的单行线路径。路径用两节点之间的绿色带子画出。带子被分为两个侧边。每个侧边描述路径的一个方向。随后的“A” 键拖动连接将会在一个单行线上进行允许超车和禁止超车两种模式之间切换(黄色和绿色)。切换的方向取决于操作是从哪个节点拖到哪个节点。下图显示了两条路径。第一条是两个方向都允许超车的。第二条是一条从右向左允许超车,从左向右禁止超车的路径。路径带的两个侧边和它们所描述的方向的确定规则与美国公路系统的规则相同:沿路的右边行驶。
一个“Q”键拖动连接将会把路径的一个单行方向切换锁定为“无连接 ”,它意味着不允许行进物沿那个方向行进。这种类型的连接用红色绘制。下图显示了一个从左到右禁止超车而从右向左为无连接的路径。如果在两个方向上都进行“Q” 连接,则整个连接将被删除。
通过网络节点的路径属性页配置路径
打开网络节点的参数视窗,路径属性页可用来配置从此节点向外延伸的所有单行线路径。如果需要配置连接进入此节点的路径,则去编辑连接到此节点的那个节点的参数视窗。对于网络节点的每条向外连接的路径,可以进行命名,指定其行进连接类型、间隔、速度限制以及“虚拟”用户距离。
名称 - 连接的名称仅为语义表达,对模型逻辑没有影响。
连接类型 - 有三种连接类型:无连接、允许超车和禁止超车。无连接意味着这条路径上不允许有行进物沿着某个给定方向行进。如果选择无连接,则这条路径将会用红色表示相应的侧边。允许超车意味着行进物不会沿着路径聚集,如果速度不同,只简单地相互超过就可以了。禁止超车意味着此路径上的行进物将会聚集,采用间隔值作为它们之间的缓冲距离。
间隔 - 只适用于禁止超车的路径。这是在一个行进物后边界与另一个行进物前边界之间需要保持的距离。
速度限制 - 这是路径的速度限制。行进物将会用它们自身的最小速度以及路径的限制速度行驶。如果路径是允许超车的连接,则一旦行进物上路就会加速或减速到适当的速度。但如果是禁止超车的连接,则行进物将会立即将其速度改变为合适的速度,而不使用加速或减速。
虚拟距离 - 这里你可以输入一个用户定义的路径距离。如果想要设定一个特定的距离来覆盖路径的(在三维模型中的)实际距离,或者,如果距离很大,而不想让另一个网络节点显示在模型中一个相距极远的位置上,则可以使用虚拟距离。如果输入0,则会使用路径的实际距离。否则,将使用输入的距离。
每个节点的连接都有一个相应的号码。这和在路径属性页上的各连接的列表顺序相同。列表中的第一个连接是连接1,第二个是连接2, 依次类推。如要得到通过给定连接号与此节点相连的网络节点的引用,根据指定的连接号,使用outobject()命令即可。
动态关闭侧边
在仿真过程中,可以使用closenodeedge和opennodeedge命令动态地关闭路径。在这两个命令中,要指定网络节点,以及侧边的排序号或者名称。一个关闭的侧边将不再允许更多的行进物进入到此侧边中,直到它再次被打开。不过,关闭时已经在侧边上的行进物可以继续行进并能离开此侧边。关闭的侧边用橙色绘制,如下图所示。当模型重置时,所有先前被关闭的侧边都将重新打开。
侧边上的加速/减速
加速和减速应用在允许超车的侧边上,而不适用于禁止超车的侧边。实体在网络上行进时,将会逐渐加速到它们的最大速度。当接近目的地时,它们也会进行减速。同样,以最大速度行驶的行进物在到达一条限制速度小于其最大速度的侧边时,它将减速到限制的速度。行进物从开始沿着那条具有较小限制速度的侧边行驶时开始减速,而不是在到达此侧边之前进行减速。
样条线控制点
在两个节点之间建立连接时,在两个节点之间默认放置一个样条线节点。它用橙色圆球绘制。在模型中拖动此顶点就可以调整路径的曲率。也可以按住“X”键,点击样条线节点,就可以添加一个相邻的节点。选中样条线节点,点击删除键,即可删除此节点。可以删除侧边的所有样条线节点,这将使一条侧边变成直线路径。注意,如果一条侧边有太多节点,在那条路径上行驶的行进物可能会出现急动现象。急动现象是样条线立方弯曲属性所固有的。减少样条线节点可以减轻急动现象。
连接网络节点到实体
要连接一个网络节点到模型中的某个实体,相对此实体,该网络节点扮演行进网关的角色,可以在这个网络节点和此实体之间创建一个“A”拖动连接。这将在网络节点和实体左上角之间绘制一条蓝色连线。这种类型连接意味着任何在网络上行进并想到达那个实体的任务执行器,都将行进到它所连接的网络节点。
你可以将多个网络节点连接到一个实体上。这将导致一个想要到达那个实体的任务执行器行进到与那个实体相连的、离它自己最近的网络节点。也可以将多个实体与同一个网络节点相连。这些功能如下所示。左边的处理器连接到左右两个网络节点上。右边的网络节点也同时连接到左右两个处理器上。
如果将一个节点连接到某站点,却没有看见蓝色连线,可试着四处移动网络节点来查看,也许蓝色连线被网格线遮住了。
将连接网络节点连接到任务执行器
要将一个网络节点连接到一个任务执行器上,使它在网络中行进,可以在网络节点与任务执行器之间建立一个“A”键拖动连接。这将在网络节点与实体左上角之间绘制一条红色连线。建立这种类型的连接意味着任何一个给定了行进任务的任务执行器都将沿着此网络到达其目的地。它还意味着,当任务执行器需要穿过网络行进时,它第一个到达的节点是与它相连的那个节点。每当一个任务执行器完成一次行进操作到达与行进操作的目的实体相连的网络节点时,任务执行器将会在那个节点变为“非激活”当它在那个节点区域内进行某些操作时,将会绘制出连接此任务执行器的红色连线。这意味着,任务执行器下一次再接到行进任务时,它必须首先返回到它以非激活态所在的那个网络节点去,才能回到网络中。
可以将多个任务执行器连接到同一个网络节点。当模型重置时,连接到同一个网络节点的所有任务执行器都会把它们的位置重置为最初把它们分配给的网络节点的位置。
如果连接了一个节点和一个任务执行器,却看不到红色连线,可试着移动网络节点来查看一下,可能红色连线被网络线遮住了。
使用“D”键可将一个网络节点连接到一个任务执行器,并作为一个行进网关;使用“E”键来断开连接。用这种方式连接,将会绘制一条连接到任务执行器的蓝色连线,标示着向着那个任务执行器行进的其它任务执行器将行进到与它用蓝色线连接的网络节点去。
查看连接
建立了行进网络后,即可在正投影/透视视图中配置需要绘制的连接的类型。网络有一系列的绘制模式,从显示最多信息到显示最少信息等方式各异。这些模式列出如下:
模式 1:显示节点、路径、实体/任务执行器连接、样条线节点。 模式 2:显示节点、路径、实体/任务执行器连接。 模式 3:显示节点、路径。 模式 4:显示节点。 模式 5:只显示一个节点。
按住“X”键并重复点击网络节点,整个网络将会在这些模式之间进行切换,每进行一次 “X” 点击,就显示更少的信息。按住“B”键并重复点击网络节点,整个网络将会在这些模式之间进行逆向轮流切换。也可以选中一系列网络节点(按住Ctrl键然后点击几个节点),然后在其中的某一个节点上做“X”点击操作,则显示模式切换就应用到所选中的那些节点上。如果选中一系列网络节点,但却在一个未被选中的节点上做“X”点击操作,则显示模式的切换将应用到那些没有选中的节点上。当模型很大,而不需要显示所有的样条线连接时,此操作功能将很有用。
最大行进物数目
可以指定节点上允许的非激活或者静止的行进物的最大数目。一个非激活行进物就是连接到此网络节点,且不在执行行进任务,而是在做其它任务或者空闲的行进物。如果在行进物和网络节点之间有一条红色连线,可以凭这一点断定这个行进物是非激活的。
如果将网络节点的静止行进物的最大数目设为1,且已经有一个行进物停在那个节点,则当其它行进物到达此节点时就必须等待,直到第一个行进物在这个行进物完成行进任务之前离开此节点。注意,这只适用于第二个行进物的目的地是此节点的情况。如果第二个行进物只是想通过此节点到其它节点去,则它不必等待。
虚拟出口
网络节点还可以有虚拟出口。上面提到,当一个任务执行器完成行进任务时,它就在目标网络节点处变为非激活态。一旦它接到另一个行进任务,就必须返回它所在的原来的网络节点从而回到网络中。虚拟出口用来指定一个替代节点让任务执行器返回网络。虚拟出口创建在网络节点之间。按住“D”键点击一个网络节点拖动到另一个节点,可以建立虚拟出口。示例如下:
上图显示了两个货架和两个网络节点。这两个网络节点是货架的行进网关(在货架与节点间绘制了蓝色连线)。已经建了两个网络节点之间的双向虚拟出口连接(指向两个节点的橙色箭头)。这意味着,如果一个任务执行器通过节点之一到达货架,而后需要返回网络,则它可以通过两个节点中的总距离较短的那一个节点“离开”此区域。指向给定网络节点外部的橙色箭头表示,如果那个节点上有一个非激活的任务执行器,它可以从那个节点所连接的网络节点中的任意一个“离开”。
按住“E”键在网络节点之间沿着想要删除的虚拟出口连接方向拖动鼠标,可以删除虚拟出口。
命令
这里有几个命令可用来动态操纵网络和运输。命令如下。参见命令集可以获得更多的详细信息。
reassignnetnode(object transport, object newnode) - 动态改变一个任务执行器正静止驻留的网络节点。 redirectnetworktraveler(object transport, object destination) -如果一个行进物正在网络上向着给定目的地行进,而用户想要在行进过程中改变它的目的地,则可用此命令。 distancetotravel(object traveler, object destination) - 此命令可以用来计算任务执行器当前所在静止节点到目的实体的距离。. getedgedist(object netnode, num edgenum) - 此命令返回一个网络节点中的一个连接侧边的距离。 getedgespeedlimit(object netnode, num edgenum) -此命令返回网络节点的一个侧边的速度限制。
改变距离表
模型中所有网络节点的距 离/路径表都保存于一个叫做“defaultnetworknavigator”的全局实体中。只有在对网络进行了改变时,才对进行进行重新计算优化。如果点击了模型中的一个网络节点,或者在模型中的两个网络节点之间进行了“A”或 “Q”拖动操作,那么下一次重置模型时,距离/路径表将会重新计算。
复制网络节点
复制网络节点要小心。如果复制了网络节点,在编辑这些新的网络节点之前,需要重置模型。
状态
网络节点没有任何状态。
参数分页
网络节点 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 连接 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 网络节点触发器
相关主题
教程:第3课 HYPERLINK "file:///D:\\WebHelp\\Flexsim_Object_Library\\" 交通控制器
XE "操作员" XE "帧" 操作员
概述
实体可以调用操作员在预置、处理或者维修过程中使用他。他们将与调用他们的实体呆在一起直到被释放。一旦被释放,如果又被调用,它们就可以去为另一个实体工作。他们也可以用来在实体之间搬运临时实体。如果要操作员沿着特定的路径行走,可以将它们置于一个网络中。
详细说明
操作员是任务执行器的一个子类。他根据是否有一个相关临时实体需要执行偏移操作来决定如何执行偏移行进。如果没有临时实体,他将和任务执行器完全一样执行偏移。他行走到使得其x/y中心与z基面到达目的地位置上。如果存在一个相关的临时实体,则操作员只沿x/y平面行走。他只行走到使他的前边界到达临时实体边界的位置点上,而不是x/y中心。这通过将总行进距离减去(x尺寸(操作员) / 2 + x尺寸(临时实体) / 2)来得到。
使用setframe和getframe命令,还可以动画显示操作员的走动。对于任何3ds或wrl文件,都可以通过创建不同的3d模型来作为那个3d文件的帧,并将它们保存为<原始文件名> FRAME<帧编号>.3ds。例如,操作员的原始3d文件是。当它的帧设为0时将绘制它的这个文件所表示的图形。它的其它帧定义在,,等等中。也可以指定用户自己的3d文件和帧。但是,如果需要使用操作员,则应该知道操作员将自动地更新帧。如果想要使用操作员,却还想定义用户帧,则它们必须于操作员的帧编号一致。这些编号描述如下:
帧 0 - 站立,手臂在身侧。 帧 1-6 - 行走,手臂在身侧。 帧 7-12 - 行走,手臂伸开去握住一个临时实体。 帧 13 - 站立,手臂伸开去握住一个临时实体。 帧 14 - 坐着,手臂在身侧。 帧 15 - 坐着,手臂伸开去握住一个临时实体。
如果操作员正在行走(在执行一个行进任务或者在进行偏移行进),则其图形的帧将在1-12之间自动更新。否则,根本不更新帧。当操作员不行走的时候,可以按照需要设定它的帧。如果想使操作员即使在行走中也不更新帧,则可在操作员的绘图触发器中返回一个1值,那么操作员就不会进行任何帧的更新了。
应用背景
上面已经提到,需要查询临时实体的x尺寸以减少总偏移距离。但如果临时实体的x与y尺寸差得太大,此功能可能就不能正常工作了,操作员会从临时实体的y方向一侧接近临时实体。如果是这种情况,要想看起来更逼真些,可以在操作员捡取它之前,交换临时实体的x和y尺寸,并将其右旋90度,然后从操作员的装载/卸载触发器中取消这些改变。
状态
此实体遵循任务执行器状态。
参数分页
任务执行器 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 碰撞 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 分配器 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 任务执行器触发器
处理器
概述
处理器用来在模型中模拟对临时实体的处理过程。处理过程仅被简单地模拟为一段强制的时间延迟。总延迟时间被分成预置时间和处理时间。处理器一次可以处理多个临时实体。处理器可以设置中断停机,并且经过随机或定期的时间间隔之后恢复在线状态。处理器可在其预置、处理及维修时间内调用操作员。当处理器中断停机时,所有正在处理的临时实体都会被延迟。
详细说明
处理器是固定实体的一个子类。它还是合成器和分解器的父类。它持续地接收临时实体直到达到其最大容量。每个进入处理器的临时实体都将经过一段预置时间和随后的处理时间。这两个过程结束后,释放临时实体。如果最大容量大于1,则并行处理多个临时实体。
关于最大容量值的注释:设置大于1的最大容量值时要非常小心。如果一次处理多个临时实体,处理器将不能正确地请求操作员。如果最大容量大于1,也将不能正确计算MTBF/MTTR时间。还有,状态统计也不能正确记录。最大容量只是用来创建多个并行的简单的处理器,而不用往模型中拖入那么多个图标。如果需要编辑除预置、处理时间和临时实体流分页参数之外的任何其它参数,则需要拖出多个处理器图标,并设定每个每次只接收一个临时实体。
预置/处理操作员
如果设定处理器在预置或处理期间使用操作员,则在每个操作开始时,它都将使用requestoperators命令调用用户定义的几个操作员,在此函数中,处理器作为站点,临时实体作为相关实体。这将导致处理器停下来等待,直到操作员到达。请留意一个requestoperators任务序列是如何构建的,如requestoperators命令的文档中所描述。还要了解stopobject命令是如何工作的,可以参见命令集中的解释。一旦所有的操作员到达,处理器就恢复其操作。一旦操作完成,处理器就释放它所调用的操作员。如果处理器被设定为使用相同的操作员来完成预置和处理过程,则处理器要等到预置和处理操作都完成后才会释放操作员。
MTBF/MTTR(平均故障间隔时间/平均修复时间)
如果MTBF函数返回一个非零值,则处理器会模拟停机和维修时间。可以指定在MTBF时间里应用哪种状态。尽管可以指定不是预置和处理状态的MTBF状态,但是处理器却只有在预置或处理操作中才可能中断停机。这意味着,虽然停留在其它状态的时间将会正确地累计,但即使累计的时间到达处理器要中断的适当时间,处理器实际上并不会中断停机,直到它又接收到一个产品并开始计时其预置时间。处理器在一次预置和一次处理过程中,最多只执行一次停机。对于处理时间很长的情况,了解这点很重要。
如果将处理器配置为使用操作员进行维修,则处理器将使用requestoperators命令调用用户定义的几个操作员来对站点进行维修。在命令中,处理器既作站点,也作涉及实体。维修操作一结束,就用freeoperators命令释放操作员。
关于使用预置/处理操作员进行维修的注释:因为处理器不到整个预置和/或处理操作完成,不会释放预置/处理操作员,所以不应将处理器配置为在维修期间使用相同的操作员。模型可能会形成死锁,因为操作员正忙于预置/处理,并且不等到操作完成不会被释放,但是,此操作不等到用同样的操作员完成处理器维修就不能完成。如果简单地处理,不把处理器配置为维修期间使用操作员,则在停机时,预置/处理操作员将会呆在站点,这和让它们实际进行停机操作是一样的。另一种选择是在停机触发器中使用freeoperators命令释放预置/处理操作员,然后在维修触发器中使用requestoperators命令将它们调用回预置/处理操作。
状态
空闲 - 实体是空的。 设置 - 实体处于建模人员定义的预置时间内。 处理 - 处于建模人员定义的处理时间内。 阻塞 - 实体已释放临时实体,但是下游实体没有准备好接收。 等待操作员 - 实体在等待操作员到达,来进行维修或者处理。 等待运输机 - 实体已释放了临时实体,且下游实体也已准备好接收,但是运输机还没有捡取临时实体。 停机 - 实体停机。
参数分页
处理时间 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 处理器 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 临时实体流 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 处理器触发器 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 操作员
XE "释放" XE "收集结束触发器" XE "收集" XE "排队" XE "批量规格" XE "成批" XE "堆积" 暂存区
概述
暂存区用来在下游实体尚不能接收临时实体时暂时存储它们。暂存区的默认工作方式是先进先出式,意思是,当下游实体变为可用时,已经等待那个实体的等待时间最长的那个临时实体首先离开暂存区。暂存区设有分批选项,可以积累临时实体到一个批次再释放它们。
Details详细说明
暂存区是固定实体的一个子类。它将持续接收临时实体直到达到其最大容量。如果设定不分批,暂存区将会在临时实体到达之后立即释放它,并在释放每个临时实体之前调用收集结束触发器。
分批
如果激活了分批功能,则暂存区将会等待直到接收到的临时实体个数达到目标数量,然后作为一批同时释放所有的临时实体。最大等待时间默认值为0。最大等待时间为0意味着没有最大等待时间,或者暂存区将无限等待下去以收集一批临时实体。如果最大等待时间是非零值,则当第一个临时实体到达,暂存区就开始计时。如果计时已经到达最大限制而一个批次还未收集到,则暂存区停止收集,并全部释放已经收集的临时实体。在释放临时实体前调用收集结束触发器,一个指向本批次中第一个临时实体的引用作为函数的item参数传递,收集到的临时实体的数量作为parval(2)传递。如果将暂存区设置为“清空后接受下一批”,则当它一结束收集一个批次就立即关闭其输入端口,并一直等到整个批次离开才再次打开输入端口。如果暂存区不“清空后接受下一批”,则它在结束收集每个批次后立即就开始收集下一个批次。这意味着,在任何给定时间,暂存区中都可以有几个完成的批次在等待离开。
关于批量目标大小的注释:设置一个批量的目标大小必须考虑不能使暂存区最大容量值无效。这意味着如果设定目标批量值大于最大容量,则此暂存区将永远都不能达到其批量值,因为其最大容量太小。
状态
空 - 暂存区是空的。 收集 - 暂存区在收集批量临时实体。 释放 - 暂存区已完成批量的收集,正在释放这些临时实体。同样,如果暂存区不分批,而在其队列中有临时实体,则它将是处于此状态。 等待运输机 - 暂存区中有已经释放并准备好向下游移动的临时实体,但是正在等待一个运输机到达来捡取临时实体
参数分页
暂存区 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 临时实体流 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 暂存区触发器
货架
概述
货架用来像在仓库货架上一样存储临时实体。货架的列数和层数可以由用户定义。用户可以指定位置来放置进入货架的临时实体。如果使用一个运输机实体来从一个货架捡取或传递临时实体,运输机将行进到货架中分配给那个临时实体放置的特定货格。货架也可以用来当作一个仓库的地面堆存,使用列号来指定在地面上放置临时实体的x位置,用层来指定放置临时实体的y位置。
详细说明
货架是固定实体的一个子类。它将持续接收临时实体直到达到其最大容量。每当一个临时实体进入货架时,则对那个临时实体执行最小停留时间函数。此函数返回此临时实体的最小停留时间。货架为那段时间启动一个计时器。当计时到时,货架就释放此临时实体。
进入/离开触发器中的附加参数
货架将附加的参数传递给进入和离开触发器。在这些函数中,parval(3)是临时实体所在的列,parval(4)是临时实体所在的层。
放入列、放入层函数
调用放入列和放入层函数的时间取决于模型中货架的配置。这取决于临时实体是被运输到货架的,还是直接从上游实体移动进来的。如果它们是被移动进来的,则在接收它们的时候(接收事件中)调用放置函数。如果是被运输机运送到货架中的,则在运输机完成行进任务并开始卸载任务的偏移行进时调用放置函数。参见任务序列可以获得更多关于任务序列的信息。在此时间点上,运输机向货架询问将临时实体放在哪儿。货架调用放置函数来告诉运输机让它行进到正确的列和层。如果在当运输机请求放置的时候调用放置函数,则当临时实体实际已经进入货架时就不再再次调用。这个新的功能与及更早版本中的功能不一样,它将在运输机请求和临时实体进入两个时刻都调用放入列与放入层函数。
放置临时实体
如果货架是垂直存储货架,则进入货架的临时实体将放置在给定的列与层,靠着货架的y边缘(yloc(rack)- ysize(rack)。它们将会从那一点开始往货架里向后堆积。如果货架被用作地面堆存,则临时实体将放置在地面上给定的列和层,并从那一点开始垂直堆积。
可视化
货架有几种显示模式以更好地观察货架中的产品。除了不透明属性值,可按住 “X” 键重复点击货架,则货架将回在不同的显示模式之间切换。这些模式列出如下。
1.完全绘制模式:该模式显示每个货格,货架的每层有一个平台以放置临时实体。这是对货架的现实主义的表示方法。 2. 带货格线的后板面绘制模式:该模式只显示货架的后板面,故总是可以看到货架内部。它还在后板面上绘制网格来代表货架的列和层。这中模式用来更好地查看货架中的临时实体,以及临时实体所在的列和层。 3. 后板面绘制模式:该模式与前一种相似,只是不绘制网格线。这种模式用来方便地查看货架中的临时实体。 4. 线框架绘制模式:该模式围绕货架的形状轮廓绘制一个线框。这种模式用来在多个背对背货架中查看临时实体。当货架在这种模式下时,需要用“X”点击那个线框才能切换回模式1。
命令
这里有几个命令可用来查询货架的列和层信息。这些命令如下。参见命令集可以获得更多详细信息。
rackgetbaycontent(obj rack, num bay) 此命令返回给定的列中的临时实体总数。 rackgetbayofitem(obj rack, obj item) 此命令返回临时实体所进入的列编号。 rackgetcellcontent(obj rack, num bay, num level) 此命令返回给定的列和层中的临时实体数目。 rackgetitembybayandlevel(obj rack, num bay, num level, num itemrank) 此命令返回给定的列和层中的临时实体的引用。 rackgetlevelofitem(obj rack, obj item) 此命令返回临时实体所在的层编号。 rackgetnrofbays(obj rack) 此命令返回货架的总列数。 rackgetnroflevels(obj rack [,num bay]) 此命令返回货架给定列的层数。
状态
货架没有任何状态。使用当前数量曲线图可以获得统计数据。
参数分页
货架 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 尺寸表 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 临时实体流 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 货架触发器
XE "记录器" 记录器
概述
记录器用来在模型中以图形的形式记录和/或显示信息。更特殊一些的用法是用记录器来捕获表数据、标准数据和用户定义的数据。模型中所有数据类型都可用图形显示,并在Flexsim中写入表中,导出到Excel、Access或任何ODBC数据库中。由于记录器实体是一个强大的数据表达工具,在此手册的教程部分中提供了一个如何使用记录器的例子。
详细说明
参见记录器参数页可以获得更多关于记录器的信息。
储液罐
概述
储液罐用来存储临时实体,而使模拟效果仿佛是在一个液体灌或池槽中存储一样。用户可以定义储液罐的流入流出速率。当液面上升或下降到用户定义的特定值时,可以触发某些事件。
详细说明
储液罐是固定实体的一个子类。它将持续接收临时实体直到达到其最大容量。每当进入一个临时实体,它首先执行进入流速函数,改函数设定临时实体的体积,同时返回接收下一个临时实体之前所需的时间。如果还有空间再接收一个临时实体,储液罐将在上述函数返回的时间点创建一个事件来接收下一个临时实体。然后,如果此临时实体是储液罐的第一个临时实体,它将调用流出流速函数,并将在返回的时间点创建一个事件释放临时实体。
每当一个临时实体离开时,储液罐首先检查先前是否是满的。如果先前是满的,现在有空间接收另一个临时实体,它就调用流入流速函数,储液罐将在上述函数返回的时间点创建一个事件来接收下一个临时实体。然后,如果储液罐中还有另一个临时实体,它就调用流出流速函数,并将在返回的时间点创建一个事件释放临时实体。
状态
根据储液罐最后一次发生的事件来定义储液罐的状态。
空:在储液罐中没有临时实体。 收集:储液罐发生的最后一个事件是进入事件,储液罐中还有空间接收更多的临时实体。 阻塞:储液罐发生的最后一个事件是进入事件,但储液罐已经满了。 释放:储液罐发生的最后一个事件是离开事件,仍然有临时实体等待释放。
参数分页
储液灌 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 临时实体流 HYPERLINK "file:///D:\\WebHelp\\" 储液灌触发器
XE "机器人" 机器人
概述
机器人是一种特殊的运输工具,它从起始位置提升临时实体并将其放到终止位置。通常,机器人的基面不会移动,而机器人的手臂在搬动临时实体时进行转动。机器人的手臂有两段组成,伸出向着要移动的临时实体或是目的地运动。用户可以设定手臂的长度。也可以设定机器人手臂转动和伸展的速度。
详细说明
机器人是任务执行器的一个子类。它通过伸展其手臂到目的位置来实现偏移行进。注意,在偏移行进时,机器人的x/y/z位置根本不会改变。在它向目的地行进的过程中,只是其y、z方向的旋转和手臂伸展发生改变。如果目的地位置超出了机器人手臂的最大伸展范围,那么机器人只将伸展手臂到最大伸展长度。机器人使用y/z旋转速度和手臂伸展来执行偏移行进以到达目的地。偏移行进时间就是伸展手臂、绕z轴转动和绕y轴转动的时间的最大值。它不使用标准的任务执行器最大速度、加速度和减速度值。
在默认情况下,机器人不与导航器相连。这意味着除非用户明确地将其连接到网络上,否则它不执行行进任务。
状态
机器人遵循任务执行器状态。
参数分页
机器人 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 任务执行器 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 碰撞 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 分配器 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 任务执行器触发器
XE "复制" XE "去托盘" XE "分解器" XE "分解" 分解器
概述
分解器用来将一个临时实体分成几个部分。分离可以通过拆分一个由合成器装盘的临时实体,或者复制原始实体的多个复本来实现。在处理时间完成后进行分解/拆盘。可以设置分解器在其预置、处理和维修时间内需要操作员。
详细说明
分解器是处理器的一个子类,而处理器是固定实体的一个子类。它接收一个临时实体,然后执行预置和处理时间。如果分解器是去托盘模式,则当预置和处理时间一结束,分解器就把去托盘数量的临时实体从临时实体移入到自身内部。然后释放拆出的所有临时实体。当所有拆盘分离出的临时实体全部离开分解器时,就释放容器实体。如果分解器是分解模式,则当预置和处理时间一结束,分解器就复制此临时实体,得到总数等于分隔数量的临时实体。然后释放所有的临时实体。对于去托盘和分解两种模式,一旦所有的临时实体离开分解器,分解器将立即接收下一个临时实体。
关于分解/去托盘数量的注释:去托盘与分解数量对于这两种方式存在细微的差别。在去托盘模式中,分解器精确地拆出此参数指定数量的临时实体。这意味着,结果得到的总的临时实体数比拆盘数量多1(拆盘数量+容器临时实体)。然而,在分解模式中,分解器进行分解数量-1次复制。这意味着,结果得到的临时实体总数与分解数量精确相等。
关于去托盘次序的注释:当分解器为去托盘模式时,它从后往前拆盘容器中的临时实体,就是说,它首先将最后一个临时实体从容器中拉出,然后拉出倒数第二个,依次类推。如果需要临时实体按特定次序拆盘,则在进入触发器中设定它们的排序号。
状态
空闲:实体是空的。 设置:实体在用户定义的预置时间内。 处理:实体在用户定义的处理时间内。 阻塞:实体已释放临时实体,但是下游实体还没有准备好接收。 等待操作员:实体在等待操作员的到来,以进行维修或者操作。 等待运输机:实体已释放临时实体,下游实体也已准备好接收,但是运输机还没有捡取此临时实体。 停机:实体停机。
参数分页
处理时间 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 分解器 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 临时实体流 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 处理器触发器 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 操作员
XE "破坏" XE "吸收器" 吸收器
概述
吸收器用来消除模型中已经完成全部处理的临时实体。一旦一个临时实体进入吸收器,就不能再恢复。任何涉及即将离开模型的临时实体的数据收集,都应在它进入吸收器之前或在吸收器的进入触发器中进行。
详细说明
吸收器是固定实体的一个子类。它将持续接收临时实体,并在它们进入之后立即消除这些临时实体。由于它消除所有接收到的临时实体,所以吸收器在临时实体流分页里就没有任何送往逻辑。
应用背景
有时需要循环利用临时实体而不是消除掉。这样可以提高模型的性能。要实现这点,不要使用吸收器,而代之为一个暂存区。进入暂存区的临时实体可以被移进模型中的其它部分而实现重新进入。
状态
吸收器无任何状态。请参见其输入统计。
参数分页
临时实体流 吸收器触发器
XE "按时间表到达模式" XE "按序列表到达模式" XE "发生器" XE "创建" 发生器
概述
生成器用来创建在模型中行进通过的临时实体。每个生成器创建一类临时实体,并能够为它所创建的临时实体分配属性,如实体类型或颜色。模型中至少有一个生成器。生成器可以按照每个到达时间间隔、每个到达时间表或一个定义的到达序中创建临时实体。
详细说明
尽管生成器不接收临时实体,它也是固定实体的一个子类。相反,它创建并释放临时实体。因此,在其临时实体流参数页中没有输入部分。生成器可以按下面三种模式之一进行操作:
到达时间间隔模式:在按时间间隔到达模式中,生成器使用到达时间间隔函数。此函数的返回值是直到下一个临时实体到达需要等待的时间。生成器等待这么长的时间,然后创建一个临时实体并释放。临时实体一离开,它再次调用间隔到达时间函数,并重复这过程期。注意,到达间隔时间定义为一个临时实体离开与下一个临时实体到达之间的时间,而不是一个临时实体到达与下一个临时实体到达之间的时间。如果想要将到达间隔时间定义为两次到达之间的真实时间,则在下游使用一个容量很大的暂存区,确保生成器在生成临时实体时立即将其释放。还可以指定间隔到达时间是否在第一个到达事件上使用,或者说,第一个临时实体是否在0时刻创建。
到达时间表模式:在到达时间表模式中,生成器遵循一个用户定义的时间表来创建临时实体。此表的每一行指定了在仿真中某给定时间的一次临时实体的到达。对每个到达进入,可以指定到达时间、名称、类型、要创建的临时实体数目,以及这次到达附加的临时实体标签。到达时间应在时间表中正确排序,意思是每个进入时间应大于或等于先前进入的到达时间。如果将发生器设定为重复时间表,则在完成最后一个到达时立即循环回到第一个到达,导致第一个进入到达与最后一个进入到达发生在完全相同的时刻。这里提醒一下,当重复时间表时,第一个进入到达时间适用于第一次的时间表循环。这使得一个初始到达时间只执行一次,而不被重复。如果需要生成器在最后一次到达后和重复的第一次到达之间等待一段给定的时间,则在表的末尾添加一个进入,给他指定一个大于先前进入到达时间的到达时间,但是将那个新的进入的到达临时实体数量设为0。
到达序列模式:到达序列模式与到达时间表模式项类似,只不过这里没有相关联的时间。生成器将创建给定表格行的临时实体,然后当那个进入的最后一个临时实体一离开,就立即转到表的下一行。也可以重复使用到达序列。
状态
生成:在生成器中没有临时实体。它正在等待直到下一次创建事件发生以创建临时实体。 阻塞:已创建了临时实体,且临时实体正等待离开生成器。
参数分页
生成器 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 临时实体流 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 生成器触发器 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\"
任务执行器
概述
在库中,任务执行器是几种实体的顶层类。操作员、运输机、堆垛机、起重机和其它可移动资源都是从任务执行器类派生出来的。所有这些实体都可以行进,装载、卸载临时实体、充当处理站点的共享资源,和执行其它仿真任务。
参见教程的第2课可以学习更多关于如何使用任务执行器的内容。
详细说明
任务执行器及其子类实体能执行任务序列,进行碰撞检测和执行偏移行进。
任务执行器也是分配器的一个子类,因此,一个任务执行器实际上可以扮演团队指挥的角色来将任务序列分配给团队成员。然而,其处理和分配逻辑与分配器有细微的差别。当任务执行器接收到一个任务序列时,它首先查看它是否已经有一个激活的任务序列。如果没有激活的任务序列,或者如果新接收的到的任务序列是先占的并且比当前激活任务序列的优先级高,则它将开始执行新的任务序列,则根据需要先占当前的激活任务。否则,它就执行常规的分配逻辑。如果没有立即传递任务序列,它将在执行器的任务序列队列中进行排队。如果当任务执行器完成其激活任务序列时那个任务序列还在队列中,则任务执行器将执行那个任务序列。
用户定义的参数
所有的任务执行器都包含有下列用户可以定义的参数。
容量:此参数为实体的最大容量定义一个值。在默认的操作中,实体从来不会装载超过此值指定数量的临时实体。
关于高级用户使用容量值的注释:如果创建用户自己的任务序列,则此值可能具有欺骗性。由于任务执行器首要的和最重要的职责就是执行任务序列,所以,如果给实体一个任务序列让它装载比它的最大容量还多的临时实体,则它也仍将装载这些临时实体。真正使用最大容量值的例子是TASKTYPE_BREAK任务。如果一个任务执行器执行进入一个中断任务,且已达到其最大容量,则它将不会执行中断,而将继续执行其当前任务序列,而不是中断转而进行另一个任务序列。在默认情况下,当自动创建任务序列时就会这样,因为每个任务序列负责装载一个临时实体。
最大速度、加速度、减速度:这几个值定义任务执行器的最大速度、加速度和减速度。最大速度用每单位时间的长度单位数来定义,而加速度和减速度用每时间单位的平方的长度单位数来定义。例如,模型用米和秒来定义,则速度值的单位是米/秒,等。这些值用来定义实体的峰值速度,和在执行诸如TASKTYPE_TRAVEL和TASKTYPE_TRAVELTOLOC的任务类型时的速度变化。
装载/卸载任务的行进偏移:此值决定任务执行器在装载/卸载一个临时实体时是否执行偏移行进以到达装载/卸载位置。例如,如果不选中此项,且任务执行器在一个网络上行进,则它将只行进到装载/卸载站的网络节点去。在执行装载过程中将停留在那个节点上。
行进时转向:如果想要实体在行进过程中旋转调整方向,可用此选项指定。这对模型的输出没有影响,只是为了视觉效果目的。
装载时间:此域段在每个装载任务的开始时执行。它的返回值是任务执行器在装载临时实体并转到下一个任务之前要等待的时间。注意,如果将任务执行器配置为“装卸时采用行进偏移”,则它将首先行进正确的偏移量,然后开始装载时间计时。这样,装载时间被添加到偏移行进时间的末尾;而不是偏移行进时间的一部分。
卸载时间:此域段在每个卸载任务开始时执行。它的返回值是任务执行器在卸载临时实体并转到下一个任务之前要等待的时间。注意,如果将任务执行器配置为装卸时采用行进偏移,则它首先行进正确的偏移量,然后开始卸载时间计时。这样卸载时间就添加到偏移行进时间的末尾;而不是作为偏移行进时间的一部分。
中断条件:此域段在任务执行器执行到一个暂停任务时执行。其返回值是一个任务序列的引用。此域段中的逻辑将搜索任务执行器的任务序列队列,并找到一个适当的任务序列作为中断当前任务序列后要转到的任务序列。
参数分页
任务执行器 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 碰撞 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 分配器 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 任务执行器触发器
状态
任务执行器的状态只取决于任务执行器所执行的任务类型。许多任务处于特定的不可变的状态,用户无法改变。但是一些任务允许用户为任务执行器指定状态,使它在执行那个任务时处于这个状态。下列是一些可以经常看到的任务执行器的状态。参见任务序列可以获得更多关于任务和任务序列的信息。
空载行进:实体正在向目的地实体行进,且没有装载任何临时实体。此状态只专有关联TASKTYPE_TRAVEL任务。 装载行进:实体正在向目的地实体行进,且装载着一个或多个临时实体。此状态只专有关联TASKTYPE_TRAVEL任务。 空载偏移行进:实体正在执行偏移行进,且没有装载临时实体。 装载偏移行进:实体正在执行偏移行进,且装载着一个或多个临时实体。 装载:实体正在装载一个临时实体。此状态与TASKTYPE_LOAD任务关联,且仅适用于实体已完成偏移行进、正在执行用户定义的装载时间而在装载临时实体之前的那段时间。 卸载:实体正在卸载一个临时实体。此状态与TASKTYPE_UNLOAD任务关联,且仅适用于实体已完成偏移行进、正在执行用户定义的卸载时间而在卸载临时实体之前的那段时间。 使用:实体正在一个站点被使用。此状态常用于操作员,当操作员达到站点并被预置、处理或维修过程使用时,即为使用状态。使用状态通常与一个TASKTYPE_UTILIZE任务关联,但是那个任务也可以指定一个不同的状态。同样,其它任务类型,如TASKTYPE_DELAY,也可以采用使用状态。
偏移行进
偏移行进是一种机制,可以采用同样的行进界面,让不同类型的实体按不同的方式行进。例如,一个实体要把一个临时实体放到货架中指定的列和层。实体行进到放下临时实体的正确位置的方式取决于实体的类型。一个操作员会走到货架那个列的位置并将临时实体放置到相应的层。一个运输机行进到那个列,但必须将起货叉提升到相应层的正确高度。它可以在x和y两个方向行进,但只有它的货叉可以在z方向行进。一个堆垛机只会沿着它的x方向行进,提升其载货平台到相应的层高,然后从货架中取出临时实体。因此说,每个实体实现行进的方式是不同的,但是表现是相同的:行进到正确的地点,把临时实体放到货架中。偏移行进是本质上区别任务执行器子类的唯一凭据。参见实体的帮助页中的“详细说明”部分,可以获得每个子类如何实现偏移行进的相关信息。偏移行进用于load/unload(装载/卸载)任务,traveltoloc(行进到位置)和travelrelative(相对行进任务),以及pickoffset(捡取偏移)和pickoffset(放下偏移)任务中。
偏移行进的表现很简单。每种类型的偏移要求都转化为x、y、z方向的偏移距离,有时是一个临时实体的引用。例如,如果一个实体得到一个traveltoloc(行进到位置)的任务,目的地是(5,0,0),而其当前位置是(4,0,0),则它自动将偏移任务转化成一个偏移请求(1,0,0),意思是需要在x方向上行进1个单位。 HYPERLINK "file:///D:\\WebHelp\\Task_Sequences\\" \l "TravelRelativeTask" travelrelative(相对行进任务)则直接解释为要行进的距离。例如,一个(5,0,0)的相对行进任务,它告诉实体在x方向行进5个单位。如果选中了 “装卸时采用行进偏移”复选框,则装载/卸载任务也使用偏移行进。当一个实体需要从一个站点装载一个临时实体时,它向此站点查询临时实体的位置。同样,当它需要卸载临时实体时,它向此站点查询卸载临时实体的位置。站点返回x、y、z方向的偏移距离,任务执行器按照此距离执行偏移行进量。同样,对于一个装载和卸载任务,任务执行器在器偏移要求中有一个临时实体的引用。这可能会影响实体的行进方式,也可能不会影响,这取决于实体的类型。例如,执行运输机的偏移行进机制,以使得如果有一个临时实体,或者换句话说,如果此运输机在装载/卸载一个临时实体,运输机将沿z方向抬升其货叉。如果没有临时实体,或者换句话说,如果运输机在执行一个traveltoloc(行进到位置)任务或travelrelative(相对行进)任务,则它将确实沿z方向行进,而不是抬升其货叉。
偏移值应该相对于实体的x/y中心和实体的z底面进行计算。例如,一个机器人放置在(0,0,0),它的尺寸是(2,2,1)。从这些条件可以计算出x/y中心和z底面为(1,-1,0)(注释:y尺寸沿着y负轴方向延伸)。所有偏移量的计算都应以(1,-1,0)位置为准进行。当给此机器人一个traveltoloc的任务时,将会自动地进行此计算,但有时也需要人工计算此位置并使用travelrelative任务。如果机器人接到一个(1,0,0)的相对行进任务,这就意味着正确的行进目的地位置是机器人x/y中心和z底面的右边一个单位处。这可以转化为位置(2,-1,0)。注意,这并不意味着机器人会行进使自身的位置(2,-1,0)。也不会行进使其x/y中心和z底面到达此位置。因为它是一个机器人,它将会转动和伸展手臂,使手臂末端到(2,-1,0)位置上。它的实际位置根本不会改变。这样,从实体的x/y中心和z底面的计算用来指定一个期望的目的地位置,它对于所有实体都是相同的,但是它允许不同的实体用不同的方式处理此目的位置。
碰撞检测
任务执行器和它的子类都有检测与其它实体碰撞的能力。碰撞检测通过往任务执行器里添加碰撞成员来实现,然后添加碰撞球及其碰撞成员,然后当任务执行器的一个碰撞球碰撞到其碰撞成员之一的一个碰撞球时就执行相应的逻辑。指定的每个碰撞球都定位在任务执行器的特定位置上,并具有一个半径。任务执行器按照指定的时间间隔重复进行碰撞检测。在每次碰撞检测中,任务执行器检测其所有碰撞球与其所有碰撞成员的所有碰撞球之间的碰撞。如果发现一个碰撞,那么任务执行器触发其碰撞触发器。它不触发与之碰撞的实体的碰撞触发器。另一实体的碰撞触发器在它进行自身的碰撞检测时才会触发。注意,碰撞触发器是由特定的球对球碰撞来触发的。这意味着,在一次碰撞检测中,碰撞触发器可能被触发多次,遇到的每个球对球碰撞都会触发一次。
要警惕,如果碰撞检测使用不当,极容易导致模型执行速度的明显降低。例如,如果一个任务执行器有5个碰撞球和5个碰撞成员,且每个碰撞成员都有5个碰撞球,则每次碰撞检测需要检测125个球对球碰撞。如果共有6个任务执行器在执行碰撞检测,则模型在每次间隔时碰撞检测要检测750个球对球碰撞。这将会大大降低模型速度,尤其是当碰撞检测间隔很小时。
使用setcollisioncheck()命令可以打开或关闭给定任务执行器的碰撞检测选项。参见命令集可以获得更多关于此命令的信息。
XE "非时间交通模式" XE "进入区域" XE "网络节点" XE "离开区域" XE "动态改变模型" XE "交通控制" XE "互斥模式" 交通控制器
概述
交通控制器用来控制一个交通网络上给定区域的交通。连接网络节点与交通控制器可以建立一个交通控制区域。这些网络节点就变成交通控制区域的成员。同一个交通控制器实体中的任意两个网络节点之间的路径都是交通控制路径。行进物只有在获得交通控制器许可的情况下才能到那条路径上去,这条路径在给定时间只允许一定数目的行进物进入区域,或者可以使用非时间模式,只允许行进物立即到给定的路径段上去。
详细说明
按住“A”键并从交通控制器拖动到节点即可连接网络节点和交通控制器。这将这将会在节点和交通控制器之间绘制一条红色连线。如果两个节点之间有路径,且两个节点都是同一个交通控制实体的成员,则那条路径就被指派为交通控制路径,或者叫成员路径。
所有进入交通控制区域的行进物都必须获得交通控制器的许可。一个交通控制器的区域由所有交通控制路径和网络节点成员自身组成。这就是说,“进入”交通控制区域定义为进入一条属于交通控制区域成员的路径,或者到达一个其网络节点是交通控制区域成员之一的最终目的地节点。然而,如果行进物经过的网络节点是交通控制区域的成员,而继续行进进入的路径不是此交通控制区域的成员,则此行进物不被认定为进入此交通控制区域。在这种情况下,行进物不需要获得许可。行进物 “离开”交通控制区域的方式有两种。一种是行进物从交通控制区域的一条成员路径到一条非成员路径,或者是行进物从一个成员网络节点的“非激活”状态继续到一个不是此交通控制区域的成员的路径上去。每当一个行进物离开一个饱和区域时,就为其它行进物进入此区域创建空间。也可以通过调用reassignnetnode()命令,将行进物指派给一个非此区域成员的网络节点,来让一个非激活行进物离开此交通控制区域。下表显示了进入/离开定义。
交通控制区域进入/离开标准
从…来
到…去
进入区域
非成员路径
1.成员路径或 2. 成员最终目的地节点
离开区域
1.成员路径或 2.在成员节点的非激活态
非成员路径
交通控制器实体用两种模式屏蔽向其区域的进入:互斥模式或非时间模式。
互斥
当交通控制采用互斥模式时,在给定时刻,它只允许给定数量的行进物进入其控制区域。一旦区域处于饱和状态,要求进入的行进物就必须在交通控制区域边界等待,直到另一个行进物离开此区域释放相应的空间。
非时间交通模式
当交通控制采用非时间模式时,它根据它的模式表和要求进入此区域的行进物的进入路径来屏蔽向此交通控制区域的进入。模式表的每一行代表一种模式。每种模式包括一系列的交通控制器允许的进入路径。
交通控制根据进入要求来选择模式。如果区域内没有行进物,交通控制器就只是等待。当第一个行进物要求进入区域的某给定成员路径时,交通控制器搜寻它的模式表,以找到包含这条路径的模式。如果找到,交通控制器就进入这种模式,允许行进物进入此区域。交通控制器一旦处于某给定模式,它将会保持这种模式直到所有行进物都离开此区域。然后它会等待下一个“第一个行进物 ”的请求,并将重复此循环过程。
动态改变模式
如果将交通控制器设定为搜寻最佳模式,则它可能在没有清空区域的情况下动态地改变模式。交通控制器对在当前模式下有通行历史的路径进行记录。当一个行进物进入一条路径时,交通控制器将此路径标记为诸如“有通行”或 “脏”等状态。即使后来行进物离开了此区域,标记记录仍然保留。只有在彻底清空交通控制区域时才会将记录重置。当一个行进物请求进入一条路径,而此路径不是当前模式的成员,则交通控制器搜寻表中的剩余部分来查看是否有其它的模式包含有当前记录为“脏”的所有路径和行进物要求的路径。如果找到一个,就改变为那种模式,并允许行进物进入那个区域。否则,行进物必须等待。
使用多个交通控制器
每个网络节点都可以同时与50个交通控制器相连。下图显示了一个与两个交通控制器相连的网络节点。
注意,从节点到左边交通控制器之间的连线是橙色的,而到右边交通控制器之间的连线是红色的。这些颜色显示了交通控制器在节点成员列表中的顺序。颜色排序以ROYGBIV方式(红、橙、黄、绿、篮、靛、紫)完成。网络节点的第一个交通控制器用红色线条画出,第二个是橙色,依次类推。此排序对模型的功能来说非常重要,也可以避免死锁。当一个行进物到达一个网络节点,而在此网络节点它必须进入两个及以上的交通控制区域,那么它将按照节点上的区域列表顺序请求进入那些交通控制区域。每次只请求一个交通控制器。一旦一个交通控制器许可进入,那个行进物技术上就已进入相应的交通控制区域了,尽管它可能仍然请求许可进入其它的交通控制区域。当在两条路径之间转移时,一个行进物将在离开与原来的路径相对应的交通控制区域之前,首先进入与新路径相对应的所有交通控制区域。
关于使用多个交通控制器时死锁的注释:虽然在模型中使用多个交通控制器可以提高行进网络的灵活性和交通容量,但是也非常容易导致死锁。交通控制器死锁通常是由循环等待导致的。当一个饱和的交通控制区域内的一个行进物等待进入另一个交通控制区域,但是另一个交通控制区域也是饱和的并也在等待第二个行进物离开,但是第二个行进物不能离开,因为它必须首先进入第一个行进物所在的区域,这时就发生了死锁。这是循环等待的一个简单例子。循环等待可以涉及多个行进物和交通控制器,并且非常难以调试。因此,使用多个交通控制器时一定要非常小心。经验表明使用层次结构的交通控制器排序,一些交通控制器控制大区域,一些控制器控制小区域,大有益处。强烈推荐不要让交通控制区域出现部分重合。一个交通控制器要么完全包含在一个大区域里,要么成为它的区域中唯一的一个。行进物将在请求进入小区域之前请求进入大区域。即使遵循这些规则也仍然不能保证模型不出现死锁。多数这种类型的模型建模是用试错法完成的。下图显示了一个非常简单却仍然导致死锁的模型。请留意,左边的绿色交通控制器是饱和的,这可以从其区域中有手持临时实体的操作员等待获得允许进入右边的蓝色交通控制区域的事实推断出。但是,蓝色区域也是饱和的,因为此区域中不携带临时实体的操作员正在等待进入左边的绿色交通控制区域。
与交通控制器交互
可以在正投影/透视视图中进行几项操作来编辑交通控制器实体。按住“X”键并重复点击交通控制器实体,模型中所有的交通控制器实体将会在显示和隐藏其节点连接两种方式之间切换。如果只想隐藏一个交通控制器的连接,用shift键选中此交通控制器,然后按 “X” 键点击此实体,它将隐藏其连接。在运行模型时,可以按住“V” 键点击实体,按住鼠标键不放。按住“V”键的操作与键盘交互部分中所描述的相同。这将会绘制一条连线到所有正在请求进入此交通控制区域但是还没有被许可的行进物上。如果交通控制器的颜色不是白色,那么将会用它的颜色绘制这些线,以更好地区分不同的交通控制区域进入请求。
重置含交通控制器的模型
到目前为止,还不能将交通控制器正确地配置来处理在模型重置时已放在交通控制区域内的行进物。需要将所有行进物都重置到一个不属于任何交通控制区域的网络节点去。通常,这意味着在模型的旁边添加一个网络节点,并用“A”连接将所有任务执行器连接到此网络节点,然后使它们在每次仿真运行开始时进入模型。
状态
交通控制器在此时尚没有任何状态。
参数分页
交通控制器
XE "运输机" 运输机
概述
运输机主要用来从一个实体到另一个实体搬运临时实体。它有一个货叉,可以在向货架中捡取或放下临时实体时抬升到相应的高度。如果需要,它可以一次搬运多个临时实体。
详细说明
运输机是任务执行器的一个子类。它实现偏移行进的方式有两种。第一,如果此行进操作有一个涉及的临时实体,则它自身将行进到使其货叉前沿位于x/y目的位置,并抬升其货叉到z目标高度的位置。第二,如果此偏移行操作没有涉及临时实体,则它行进到使其x/y中心和z基面到达目的地的位置。
状态
运输机遵循任务执行器状态。
参数分页
任务执行器 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 碰撞 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 分配器 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 运输机 HYPERLINK "file:///D:\\WebHelp\\Object_Pages\\" 任务执行器触发器
XE "视景文本" XE "视景显示" XE "纹理" XE "文字厚度" XE "文字大小" XE "展示幻灯片" XE "导入形状" XE "容器" XE "可视化工具" XE "Wrl 文件" XE "VR" XE "AutoCAD" 可视化工具
概述
可视化工具采用道具、风景、文字和展示幻灯片来装饰模型空间,目的是给模型更逼真的外观。它们可以是简单如彩色方框、背景之类的东西,或者是精细如3D图形模型、展示幻灯片之类的东西。可视化工具的另一种用法是用做模型中其它实体的容器实体。当用作容器时,可视化工具就成为一个分级组织模型的便利工具。容器也可以保存在用户库中,作为将来开发模型的基本建模模块。
详细说明
可视化工具在模型中的使用方式有多种。
作为一个容器或子模型
作为平面、立方体、柱形或球形
作为导入形状
作为文本
作为展示幻灯片
其它设置
现在用可视化工具代替了Flexsim以前版本中的可视化实体、可视化文本。可视化工具扮演一个比可视化实体和可视化文本更广泛的角色。现在,可视化工具作为一个容器在层次建模结构中用来囊括子模型。由于可视化工具与其它Flexsim实体工作方式不同,现在解释一下如何使用它的详细情况。
将可视化工具用作容器
可视化工具默认设置是平面。当放置在模型中时,可视化工具显示为一个带有Flexsim GP位图纹理的平面。平面的尺寸和位置可以在正投影或VR(虚拟现实)模型视图视窗中进行图形化地设置,或者用可视化工具的参数分页来设置(参数分页的使用在“将可视化工具用作平面、立方体、柱形或球形”部分中进行解释)。当把可视化工具用作容器时,建议在开始时使用默认视图(一个平面)设置,可以以后再改变其视觉表达。在此例中,我们要建立一个容器,里面有1个暂存区、2个处理器。临时实体将会从容器外面的一个发生器进入容器。处理器将会把临时实体送到容器外面的一个吸收器。
步骤1:在模型视图中放置一个可视化工具
可视化工具与Flexsim GP位图纹理一起显示。要往容器中添加实体,只要从库中将它们拖出并放置到可视化工具上就可以了。
步骤2:拖放1个暂存区和2个处理器到可视化工具中
当把一个实体放置到可视化工具上时,它将自动地放置到可视化工具中去。可以通过选择可视化工具并用鼠标移动它来测试这一点。当移动可视化工具时,它里面的实体也跟着移动。
步骤3:拖放1个生成器和1个吸收器到模型视图中
往模型中放置生成器和吸收器时,确保不要放到可视化工具上,需要保证它们是在外面的。
在为此例建立端口连接之前,先放大端口连接的图形显示,这对于理解用容器工作的2种方式可能会有帮助。
步骤4:放大端口连接图形
这可以通过选中模型视图视窗中的设置菜单来完成,这将打开如下的输入页面。
将连接器的尺寸设定为,然后点击确定按钮。
步骤5:连接生成器到可视化工具,连接可视化工具到吸收器
按住键盘上的“A”键,点击并拖动一个从生成器到可视化工具(不是暂存区)的连接。当释放鼠标左键时,就可看到在生成器与可视化工具之生成到一个连接,如下所示。
现在,建立一个从可视化工具到吸收器之间的连接,如下所示。
此时,生成器和吸收器都连接在容器上(可视化工具)。现在,来连接容器与内部的模型。
步骤6:连接容器和暂存区
建立一个从容器到暂存区的连接。
当释放鼠标左键时,将会看见一条从容器的内部端口(蓝色)到暂存区的连接。
步骤7:连接暂存区到处理器
按同样的程序将暂存区连接到两个处理器。
步骤8:连接处理器到容器或直接到吸收器
有两种方式“连接入”或“连接出”一个容器。 第一种方式如步骤5中所示,建立一个从生成器连接到容器的连接,然后是从容器到暂存区的联机。然而,也可以通过点击拖动一个连接直接将处理器连接到吸收器。对于此例,第一个处理器将被连接到容器,然后容器连到吸收器,第二个处理器直接连接到吸收器。
步骤9:设定容器的显示选项
到此时,已经有了一个包含子模型的功能容器。如何显示此容器由用户来决定。如果想要在仿真运行期间隐藏容器的内容,可以切换关闭掉内容显示选项,操作方法是不选择“显示内容 ”复选框。
也可以使用任何视景显示选项来展现容器的显示,如方框、建筑物或文本。在正投影视图视窗中右键点击并选择“在正投影中查看”选项,可以在任何时间查看容器的内容。
容器的统计数据和其它实体的统计数据一样,可以通过属性对话框中的统计属性页查看。
将可视化工具用作平面、立方体、柱形或球形
将可视化工具在模型中用作可视化道具是一个简单的过程。只要选择所需要的道具类型然后定义参数就可以了。
平面
平面可以定义为背景,如Autocad布局、纹理或图片,或者要在模型中特定部位贴补的颜色。平面是可视化工具的默认显示。只需要设定平面的尺寸然后选择纹理就可以了。纹理可以在在垂直和水平方向上重复。
立方体、柱形或球形
立方体、柱形或球形是简单的形状,可以象平面一样被指定纹理。
将可视化工具用作导入形状
使用可视化工具来导入形状时,需要有一个要导入到模型的3D模型或者实体。Flexsim支持多种3D形状的文件格式,如3D Studio Max (.3ds,.max)、VRML (.wrl) 、 3D DXF (.dxf)和 Stereo Lithography (.stl)。
将可视化工具用作可视化文本
3D可视化文本可以添加到模型中来显示标签、统计数据或其它模型信息。当视景显示设置为可视化文本时,将会呈现一个下拉菜单提供想要显示的可视化文本选项。
选取选项包括仿真时间、内容、状态、输出、输入及其它。如果在下拉菜单中选择了任何统计项,则必须将可视化工具的中间端口连接到想要显示其相关信息的实体。选择代码模板按钮可以对文本进行编辑。
将可视化工具用作展示幻灯片
可视化工具也被用作展示幻灯片,与使用幻灯片制作PowerPoint演示文稿很相似。展示幻灯片放置在模型中,用以展示数据、模型结果等等。可以使用演示菜单中的演示生成器开发一个“漫游”序列。关于如何建立一个模型演示的教程可以在此手册的教程部分中找到。
当视景显示设置为“演示幻灯片”时,可以拖动附加的可视化工具实体到幻灯片上来创建幻灯片的文本。每个放置在展示幻灯片上的可视化工具都将切换到可视化文本,并将在幻灯片上被格式化。添加的第一个可视化工具是幻灯片标题,第二个是项目1,依次类推。例如,如果将4个可视化工具拖到展示幻灯片上,将会看到如下所示的情景:
如图所示,每个文本在幻灯片上都被给定一个默认的位置。当双击展示幻灯片查看参数视图时,将会看见左上角的一个新标签叫做“文本”。选择此标签,就可以编辑想要显示的文本。
可以在可视化工具分页上选择一个纹理来应用任何想要的边侧背景,或者通过在纹理域段中删除默认的Flexsim标志来移除背景。
可视化工具的其它视景设置
视景显示 - 在这里选择可视化实体要显示的类型。可用的类型有:平面、立方体、柱形、球形、导入形状、文本或展示幻灯片。
显示内容 - 如果选中此复选框,则显示可视化工具的内容。内容是指实体内部的文本或者实体。
禁止鼠标选择 - 如果选中此复选框,则在正投影或VR(虚拟现实)视图中将不能用鼠标选择实体。
照明 - 如果选中此复选框,实体将发出自身的光线。
最小可视放大倍数 - 这是实体能够被看见的最小放大倍数。
最大可视距离 - 这是实体能被看见的最大距离。如果视图在远过这个距离上查看,就不显示此实体。
位置、转角和尺寸 - 此区域用来定义实体的位置、尺寸和转角参数。与属性页上的界面相同。
纹理 - 这些参数用来定义如何在实体上绘制纹理。
文件名 - 这是要绘制到实体上的纹理的位图文件。
布告板 - 此选项将纹理显示为一个布告板(平面)。布告板将总是面对查看者。
分隔 - 如果实体是柱形,此数值用来定义它的边数,如果是球形,则用来定义它的曲率。如果实体是球,此数值应该定义得相对大一些(~20)。
水平重复次数 - 此数值定义纹理图案在水平方向上重复的次数。
垂直重复次数 - 此数值定义纹理图案在垂直方向上重复的次数。
模型 - 这些参数只在道具类型设定为导入模型时才显示(导入形状必须被选中到本模型中来显示)。
文件名 - 这是要在此实体上绘制的.3ds或 .wrl文件。
在正投影中查看 - 此按钮打开一个正投影视图,显示作为容器的可视化工具中的内容。
在透视视图中查看 - 此按钮打开一个透视视图,显示作为容器的可视化工具中的内容。
调整可视化文本
文本大小-此数值定义实体中文本的高度。文本的宽度将会将会自动调整使文本清晰易读。
文本厚度-此数值定义实体中文本的厚度。
XE "建模工具" XE "工具" 工具
建模工具
本节主要介绍不同的建模工具,用来模型的建立、配置以及结果的获得。这些建模工具列出如下。
AVI制作器 Excel界面 临时实体箱 全局C++代码 全局对象指针 全局表 全局时间表 全局用户事件 导入媒体 模型开始时代码 MTBF/MTTR 多Excel表导入 优化器 演示生成器 脚本编辑器 仿真实验控制 单表导出 单表导入 背景设计编辑器 表配置器 工具箱 用户库 Visio导入 监视列表
XE "记录" XE "每秒帧数" XE "AVI制作器" XE "AVI文件" XE "C代码" AVI制作器
从展示菜单中选定“AVI制作器”选项即可创建AVI制作器。AVI制作器是模型中的一种特殊对象,能调用命令来生成模型运行的AVI文件。只要它存在于模型中,就会生成此文件。如果不需要生成AVI文件,则需要在模型中删除此实体。在模型运行之前,必须指定一个记录视图。方法是:在所要记录的视图上击右键,选择“视图>设为被选视图(sv)”。在记录AVI文件过程中,模型运行可能十分缓慢,在此期间,模型将无法响应运行控制视窗中的速度滑动条命令。
AVI 名称 - 这是AVI 制作器进行制作时写入的文件的名称。它必须以.Avi为扩展名。
开始时间 - 这是指AVI制作器开始记录 AVI 文件的时刻。
终止时间 - 这是AVI制作器停止记录 AVI 文件的时刻。建议在此终止时间前不要停止运行模型,否则可能破坏正在写入的文件。
帧间隔时间 - 模型中记录的帧与帧之间经历的仿真时间的长度。
每秒帧数 - 此数字定义了 AVI 文件每秒播放多少帧。
删除AVI 制作器 - 点击此按钮可将AVI制作器从模型中删除。模型将恢复正常速度运行,而不再生成AVI文件。
如何使AVI制作器正常工作
AVI制作器的使用常常需要技巧。这里给出一些步骤来确保顺利地创建AVI。
1.如果模型中已有一个AVI制作器, 可以点击 “删除AVI制作器” 按钮将其删除。
2. 编译模型。
3. 再打开 AVI制作器视窗。
4. 正确填写前面提及的各个域段。
1. 确定avi 文件名不与已存在的文件重名。
2. 根据所需avi记录的仿真时间,来设定开始及停止的时间。
3. 根据你所需要的avi播放速度,设定每秒帧数。一般每秒10帧是合理的。
4. 根据你设定的每秒帧数,来设定帧间隔时间的值。找到所需要的从模型中记录avi 的理想运行速度(从仿真运行控制面板)。帧间隔时间应根据理想运行速度除以每秒帧数来计算。
5. 右击需要记录的正投影或透视视图,选择“设定为选定视图sv()” 选项。
6. 根据需要的avi 电影质量,重设正投影或者透视视图的尺寸。设定较小的视窗尺寸能显著地提高avi制作器的制作速度。
7. 重置模型。
8. 将弹出一个关于采用的codec(解码器)代码的视窗。输入想要使用的codec 代码/压缩。
9. 模型运行
10. 重要提示: 请等候直到 avi制作器完成工作。一旦模型进入avi的开始时间, 不要按任何按钮或点击任何东西,直到模型时间到了所设定avi制作器的完成时间。
11. 模型运行超过了所设定的avi制作器完成时间时,停止模型。在删除AVI制作器之前,不要再次点击重置。
12. 使用 “删除AVI制作器”按钮删除AVI制作器。
XE "微软Excel" XE "Excel" XE "Excel界面" XE "导入/导出" Excel 界面
单表导入 - 点击单表导入按钮将配置好的表导入到Flexsim中。要配置此表,点击编辑按钮,可打开单表导入编辑。
单表导出 - 点击单表导出按钮将配置好的表从Flexsim导出到Microsoft Excel中。要配置此表,点击编辑按钮,可打开单表导出编辑。
多表导入 - 点击多表导入按钮将多个表导入Flexsim中。要配置这些表,点击编辑按钮,可打开多表导入编辑。
用户导入 - 点击用户导入按钮,采用用户自己的代码从Excel导入。若要编写和编辑此用户代码,可点击编辑按钮打开一个代码编辑器。一旦编辑了此代码,则需要进行编译后,才能够从Excel导入。
用户导出 - 点击用户导出按钮,采用用户自己的代码导出至Excel。若要编写和编辑此用户代码,点击编辑按钮,打开一个代码编辑器。一旦编辑了此代码,在其能输出至Excel前,需要进行编译。
全局设定 - 点击全局设定按钮,来设定导入/导出参数,包括Excel的安装地址等等。
XE "临时实体存档编辑器" XE "临时实体箱" 临时实体箱
临时实体
临时实体是创建的一些简单物体,从模型中移动通过。它们可以代表真实的物体,也可以代表一个更为抽象的概念。在此视窗中创建不同类别的临时实体,并保存在临时实体箱中。点击工具条或工具菜单上的临时实体按钮,可以打开编辑器。
临时实体列表 - 这个列表包含了所有可用的临时实体类型。当某个临时实体类型被选中,它将显示在主视窗中。从此列表中选择临时实体,随后点击属性按钮,可以编辑临时实体的属性,诸如名称、形状、尺寸等。
新建物品 - 此按钮用来向临时实体箱中添加一个新的临时实体。此新的临时实体是当前选中的列表中的某项的复制。
删除物品 - 此按钮用来从临时实体箱内删除当前选定的实体。被删除实体将不能再在模型中被创建。
属性 - 此按钮用来打开当前选定实体的属性视窗。
XE "代码" 全局C++代码
在全局C++代码编辑器中,可以定义用户的全局可用c++ 函数和变量。此代码写入到编译时创建的全局范围c++文件中。这样,一旦创建了这些函数,可以从模型的触发器以及其他代码中进行访问。
关于从Visual C++导入的注释: 在Visual C++中改动的全局代码,将无法正确地导入到全局C++代码编辑器中。需要在Visual C++中进行改动,然后将那些改动复制并粘贴到Flexsim中,而无法导入它们。
关于编写大量代码的注释: 如果在此视窗中完成了大量代码的编写,我们建议用户采用另一个方式,使用预编译#include直接包括另一个.cpp,并采用一个第三方文本编辑器,例如Visual C++,来分别编辑这些c++文件。由于第三方编辑器经常具有Flexsim所不具备的多种代码编辑功能,因此能够大大提高编程效率。注意,c++文件的当前目录时Flexsim的程序目录。
全局实体指针
全局实体指针编辑器用来定义指向模型中的实体的全局指针。输入想要使用的实体指针数,然后点击应用按钮。然后输入模型中实体的名称。如果此实体包含在一个容器实体内,需要指定到此实体的路径。这将创建一个与此实体同名的全局fsnode* 类型变量。注意,添加这些变量之后,必须对模型进行编译才能使用。
上例给出了两个变量。第一个变量是处理器实体Processor1的。第二个变量是暂存区Queue 5的,此暂存区在容器可视化工具VisualTool 5内。一旦创建了这些引用,就可以在模型代码中简单地写Processor1或Queue5来访问这些实体,而不必采用centerobject(), outobject(), inobject(), rank(), node(),或其他命令。
全局表
这些实体不是被拖出到模型中的。它们的创建是通过特殊对话框实现的,这些对话框可在具条上找到。
通过工具条或“工具”菜单上的“工具箱”按钮可以访问全局表。全局表可以存储数字型或字符串型数据。模型中任何一个实体都可以用gettablenum()、gettablestr()、settablenum()、settablestr()、reftable()命令来访问这些数据。参考命令集可以获得更多关于这些命令的信息。一个模型可以有多个全局表。
名称 - 这是表的名称。名称应便于记忆,并能描述表的功能。各种函数通过表的名称访问它们,进行读写。
行数 - 这是表的行数。如果改变了此值,点击“应用”按钮来更新屏幕上的表,此时,创建的新行均可进行编辑了。
列数 - 这是表的列数。如果改变了此值,点击“应用”按钮来更新屏幕上的表,此时,创建的新列均可进行编辑了。
重置时清零 - 如果此按钮被选中,当模型被重置时,表中所有数值类型单元将被清零。
高级 - 此选项打开一个表配置器视窗,用来根据特殊需要对表进行定制。
编辑表
如需编辑表中的某个单元,点击此单元,并在单元中填写数据。可使用箭头键在单元之间导航。单元默认的是数值型数据,但可设定为字符串型数据,方法是右击单元,并选择“插入>添加字符串数据”。
XE "持续时间" XE "时间表" XE "恢复函数" XE "恢复触发器" XE "Stopobject" XE "Resumeobject" 全局时间表
点击工具栏上的“工具箱”按钮,或者选择“工具”菜单的“工具箱”选项,均可访问时间表。时间表用来进行模型中指定实体的状态更改的设定,如设定停机时间。每一个时间表可以控制多个实体,每个实体又能被多个时间表所控制。一个模型可以包含多个时间表。
名称 - 这是时间表名称。名称应能描述此时间表在模型中的功能,例如, “Weekend(周末)”或者“Shift Change(轮班)”。
添加与移除时间表成员 - 在视窗的顶部,左侧面板显示的是模型中的实体。右侧面板显示的是时间表成员列表。在左侧面板中选择一个成员,并点击 按钮,可以将此实体添加到成员列表中。从右侧面板的成员列表中选择一个实体,并点击 按钮,则可以将此实体从成员列表中移除。
行数 - 这是表的行数。改变后需要点击“应用”按钮来更新屏幕上的表。每一行记录状态更改的时间,要变成的状态,在那个状态下要维系的时间。
重复时间 - 此数值指定从第一状态开始改变起,到时间表被重复执行时止所经历的时间。如果第一行包含时间60,重复时间为300,那么第一次停机时间将发生在时刻60,而时间表将在时刻360,660,960等时刻被重复执行。
时间表 - 可在此查看和编辑时间表。
Time(时间) - 这是自开始执行表以后,将要发生状态变化的时间。
State(状态) - 这是受此时间表所控制的实体根据时间表上对它的安排,将要变成的状态。如果点击此列,将在顶部出现一个下拉对话框,给出一个可能状态的列表。参见库实体可获得更多关于每个实体的每个状态的含义的信息。参见状态列表以获得关于每个状态的编号和宏定义的快捷索引。
Duration(持续时间) - 这是实体在重新恢复最初状态之前,保持在新状态的时间长度。
停机函数 - 当成员列表中的实体停机时,此下拉菜单被执行。此函数对于成员列表中每个实体执行一次操作。从这里指定要进行什么操作来使实体停止运行。
恢复函数 - 当成员列表中实体恢复其操作时,此下拉菜单被执行。此函数对成员列表中每个实体执行一次操作。从这里指定要进行什么操作来使实体恢复运行。
停机触发器 - 此下拉菜单与停机函数同时被触发执行,但此函数只运行一次,而不是对成员列表中每个实体执行一次操作。参见停机/恢复触发器。
恢复触发器 - 此下拉菜单与恢复函数同时被触发执行,但此函数只运行一次,而不是对成员列表中每个实体执行一次操作。参见停机/恢复触发器。
关于对同一实体使用多个停机计划的注释:如果一个实体具有若干个停机计划,每个计划都具有自身的停机状态,就会遇到使用实体状态图表的问题。这是由于stopobject()命令和resumeobject()命令的特性所导致的。如果有两个实体要求同一实体停止运行,此实体不会记住每个停止请求所要求的停机状态。参见命令集可获得更多关于stopobject()命令的信息。
XE "首次事件时间" XE "重复事件" XE "用户事件" XE "事件代码" 全局用户事件
选择工具条上的“工具箱”按钮,或者从“工具”菜单里的“工具箱”选项,均可访问用户事件。用户事件是在模型运行中在设定的时间上执行的C++函数,但并不与任何特定的可见的实体关联。用户事件是由模型中一类称为“工具”的特殊节点,在一个称为“用户事件”的子节点中创建的。一个模型可有多个用户事件。
名称 - 这是用户事件的名称。此名称应该能描述用户事件做些什么。
只在重置时执行事件 - 如果此选项被选中,事件将只在重置键被点击时被执行。
第一事件时间 - 这是指用户事件发生的时间。
重复事件 - 如果此选项被选中,用户事件一停止,就重新开始进行执行时间计时。根据定义的执行时间,用户事件总是按照规律性间隔重复执行。
事件代码 - 在这里编写事件的C++代码。任何有效的C++ 语句均可在此域段中使用。如果编辑过此代码,在仿真运行前必须对模型进行编译。
导入媒体
此编辑器用来添加模型需预装载的3D形状及图形,并获得已装载的路径的字符串。如果需要在仿真过程中动态改变实体的形状,通常就需要使用此编辑器。此外,也可以从一个实体的属性视窗选择一个形状。
要使用此编辑器,可从顶部的下拉框中选择形状或图形,然后从第二个下拉框中选择一个形状。当选定一个形状后,文本框将根据当前选定实体更新其文本,来显示具体路径。若要添加一个新实体,请点击浏览按钮,寻找到.3ds, .wrl, .dxf, or .stl 等形状文件, 或者一个.bmp 或.jpg 的图形文件,然后点击打开,再点击添加按钮,即可将3d实体或者图形添加到预装载列表中。点击删除按钮,则可以从列表中删除已添加的形状。
如果在代码中引用了一个纹理或形状的索引,则也同样可以使用在下拉列表中与每个选项相邻的数字。
模型开始时代码
模型开始时代码编辑器用来编写代码,这些代码将在模型编译后被立即执行。注意,每编译一次,启动代码只执行一次,而不是每次模型重置后都执行。
MTBF/MTTR
MTBF MTTR实体的访问方法是,点击工具条上“工具箱”按钮,或者选用“工具”菜单里的“工具箱”选项。它们用来设定模型中实体群的随机中断和修复时间。每个MTBF MTTR实体均可以和模型中多个实体相联,每个实体也可以被多个MTBF MTTR实体所控制。MTBF MTTR实体还用来指定当实体停机时所要进入的状态。一个模型可以包含多个MTBF MTTR实体。MTBF MTTR 视窗被分割为两个分页。
名称 - 是MTBF MTTR实体的名称。 名称应该富以解释、方便记忆,例如“Forklift(叉车控制)”或“Random Inspection(随机检查)”。
成员分页
在此分页中,可以为此MTBF MTTR 实体设定成员实体列表。左侧面板是一个模型实体列表。右侧面板的是此MTBF MTTR实体的成员列表。从左侧面板中选择一个实体,点击 按钮将实体添加至成员列表中。从右侧面板中选择一个实体,点击 按钮可将其从列表中移除。
单个中断各成员 - 如果此选项被选中,MTBF MTTR 实体将为每个成员实体创建一个单独的停机和恢复事件线程。如果此选项没有被选中,则所有成员实体将在同一时间停机和恢复。
停机状态 - 指定实体停机时要进入的状态。
函数页
在此分页中,可以设定停机和恢复的时间,停机和恢复的触发器, 以及停机和恢复函数。
第一故障时间 - 此下拉菜单将返回首次故障时间。参见时间下拉菜单。
MTBF - 此下拉菜单返回MTBF MTTR实体所控制的实体的平均故障间隔时间。此函数决定了这些实体在进入中断状态前的时间长度。MTBF时间专门用来定义从实体最后一次停机期恢复到开始下一次停机期之间的时间跨度。参见时间下拉菜单。
MTTR - 此下拉菜单返回MTBF MTTR实体所控制的实体的平均修复时间。此函数决定了这些实体在恢复正常运行前停留在中断状态的时间。所有被控制的实体将同时恢复到其初始状态。参见时间下拉菜单 HYPERLINK "file:///C:%5CDocuments%20and%20Settings%5CQH%5CApplication%20Data%5CProgram%20Files%5CFlexsim3%5Chelp%5CPick_Lists%" 。
停机函数 - 此下拉菜单在成员列表中的实体停机时被执行。此函数将对成员列表中的每个实体执行一次。从这里指定用什么操作停止实体。
恢复函数 - 此下拉菜单在成员列表中的实体恢复其操作时被执行。此函数将对成员列表中的每个实体执行一次。从这里指定用什么操作恢复实体。
中断触发器 - 此下拉菜单将与停机函数同时被触发执行,但它只被执行一次,而不是对成员列表中的每个实体执行一次。参见停机/恢复触发器。
维修触发器 - 此下拉菜单将与恢复函数同时被触发执行,但它只被执行一次,而不是对成员列表中的每个实体执行一次。参见停机/恢复触发器 HYPERLINK "file:///C:%5CDocuments%20and%20Settings%5CQH%5CApplication%20Data%5CProgram%20Files%5CFlexsim3%5Chelp%5CPick_Lists%" 。
关于同一实体使用多个停机线程的注释:如果一个实体是若干个mtbf/mttr 实体成员,每个mtbf/mttr实体都有各自的停机状态,这时可能会遇到使用实体状态图表的问题。这是由于stopobject() 命令和 resumeobject() 命令的特性所决定的。如果两个实体要求同一个实体停止,此实体不会记住每个停止请求的状态。参见命令集中的stopobject()命令可获得更多信息。
XE "导入表" XE "多Excel表导入" XE "Excel" 多Excel表导入
概述
多Excel表导入 (MTEI) 用来快速便捷地实现从多个文件中导入多个工作表。按照一定的表尺寸和单元数据类型,MTEI能够自动完成大部分导入过程。如果允许MTEI在其处理过程中有更大的自动程度,将极大地有助于导入随时间变化的数据。
导入表的填写
编辑MTEI时将会注意到每个导入行有10列需要填写。这些列定义了数据来源和用处,也包括如何编译和这些数据的格式。
Excel_Book_Name(Excel工作簿名称)
Excel文件名一栏用来定义Excel文件的名称,此文件包含着你所需要导入的信息。根据使用的电子数据表格形式,主要有四种方式向此栏中填写信息。
工作簿名称或路径未知(“NEW”)
如果要使用的工作簿的名称或路径都未知,或者将随时间变化,则可在所有工作簿名称表项中键入“New”(新)。在此栏中键入 “New”将打开浏览视窗,提示用户去寻找所需要的Excel文件。当输入数据在多次运行中或者多个用户使用时有所改变时,此功能可带来极大的方便。
与前一个位置相同(BLANK)
如需继续使用前一行使用的工作簿,则可将此栏留为空白。当从同一个工作簿中导入多个工作表时,建议使用此选项。注释:不要将此栏的第一行设为空白。
绝对路径(ABSOLUTE)
如果在模型的整个应用中,工作簿的位置和名称都不发生改变,可以输入此Excel工作簿的绝对路径。例如,“c:/tempdirectory/”。 注释:为了让Flexsim寻找到正确的Excel电子数据表,必须采用".xls"扩展名。
相对路径(RELATIVE)
如果在整个模型生命时间内,工作簿的名称将不发生改变,工作簿的相对地址目录也将不会改变,则可以输入此Excel工作簿的相对路径。所输入的路径必须是相对于Flexsim安装目录的,并且必须有两个斜线“//”,而不同于路径名称中用一条斜线。例如,“userprojects//myproject//”。
Excel_Sheet_Name(Excel工作表名称)
包含导入信息的Excel工作表名称应该在此栏输入,例如,“Sheet1”。 如果由于工作表不存在,或者名字键入错误,MTEI找不到工作表,将导致导入过程暂停,并向用户进行问题报警。用户可以选择彻底退出导入,也可以选择跳过有问题的一行继续导入下一行。提示:出现工作表名称不存在的报警信号时,去查看一下是否在名字的开端和结尾有空格。
Flexsim_Table_Location(Flexsim表的路径)
应在此栏中键入包含此表的Flexsim节点的路径。此栏的默认路径是全局表的路径,即“/Tools/GlobalTables”。 例如,要将数据导入至一个发生器的发生时刻表中去的路径是“/Source1>variables”。注释:不要输入表节点的名称,它应在下一栏中输入。
Flexsim_Table_Name(Flexsim表的名称)
Flexsim表节点的名称输入此栏。如果目标表是一个全局表,仅需要输入全局标的名称。如果需要向一个发生器发生时刻表中导入数据,需要键入此“发生时刻表 ”的名称。提示:如果要向一个全局表导入,而这个表尚不存在,MTEI将会是否创建此表。
Headers(标题)
执行标题将导致MTEI为表导入行和/或列的名称。这有助于以后在Flexsim中对行、列进行识别。可在标题栏中输入的值及其含义列出如下:
0 – 不要输入任何标题信息 1 – 只输入行标题信息 2 – 只输入列标题信息 3 – 输入行、列标题信息
行或列的标题信息是自动计算的。标题信息应总是在任何数据差别信息或者实际数据之前。
Data_Distinction(数据辨别)
数据辨别是MTEI解释进入的数据的方式,和它格式化Flexsim表的方式。数据辨别可以同时导入数值和文本数据的表。可输入到数据辨别栏的数值及其含义列出如下:
0 –无辨别 – 所有的数据都认为是数值类型 1 – 自动– 数据辨别基于表单元格的第一个字符 2 – 行 – 数据由Excel中数据的第一行之上的行定义 3 – 列 – 数据由Excel中数据的第一列之前的列定义
对选项2和3,Excel 中行或列的数据辨别包含了一个数值,此数值决定着跟随它的整个行或列的数据在Flexsim中是什么类型。数据辨别行或列应总是放在实际数据之前,而置于任何标题信息之后。可在Excel中行或列的数据辨别中输入的值列出如下:
1 – 数值数据 2 – 文本数据 3 – Flexscript 数据 4 – C++ 数据
根据数据辨别,MTEI将自动将表中的节点格式化为数值或文本,或建立为Flexscript(Flexsim脚本)或C++格式。如果表导入了Flexscript或C++格式数据,MTEI将提示用户在导入结束后,对模型进行再编译。
Start_Row and Start_Col (起始行和起始列)
起始行和起始列决定着MTEI从Excel工作表的何处开始导入所需要的数据。在这些单元格中输入数据的起始位置,而不是标题或数据辨别信息。如果任这些单元格的值为0不管,则MTEI将自动调整数据导入位置。因此,如果总是将数据放在工作表左上方,则无论在数据前是否有标题或数据辨别信息,均无需输入0以外的任何值。
Num_Rows and Num_Cols (行数和列数)
行数和列数这两栏决定MTEI将导入的行数和列数。如果有5行数据,则要在列数一栏中输入5。如果将这些栏设定为0,MTEI将自动计算行数和列数。如果有标题或数据辨别信息,则MTEI的自动计算将基于这些信息进行,否则,将依据首行数据的行数与首列数据的列数进行计算。让MTEI自动计算行列数是一个很好的方法,这样模型的开发者或使用者可以不用顾及修改其他任何数值,而可以根据需要从表格中对行列进行添加或删除。
关于自动恢复尺寸的注释:MTEI自动设定要导入到的Flexsim表的尺寸,使它与正在导入的表尺寸相一致。
关于MTEI的注释:如果允许MTEI自动计算行列数,那么行数和列数的值必须大于Excel表中的行数和列数。
相关主题
单Excel表导入 HYPERLINK "file:///D:\\WebHelp\\tools\\" 单Excel表导出 HYPERLINK "file:///D:\\WebHelp\\tools\\" Excel界面
XE "OptQuest" XE "场景" XE "满足置信区间" XE "用户控制" XE "重复运行" OptQuest 优化器
OptQuest优化器用来优化模型中的变量,以最大化某些特定的输出变量。
决策变量
最优化设计的第一步是定义模型的决策变量。一个最优化的主要决策变量的选择,通常可以通过对待解决问题的重述获得。例如,一个问题可能是:此区域需要多少台机器可获得最佳生产量?此问题陈述定义了模型的决策变量:处理器容量的最大值,和模型的产量。注意,这两个变量有不同的用途,容量最大值是要对其进行改变而进行仿真实验的,而产量作为结果反馈来体现改变的效果。
若要增加一个决策变量,可点击变量面板上的添加按钮,这将为变量表添加一个新的变量。从新变量行中选择任一单元格均可选中此变量,然后点击修改按钮。这将打开一个视窗用以编辑此新变量。
每个决策变量具有一个关联名称,可被OptQuest 使用。同样,每个变量都有一个关联类型,如Continous(连续型)、Integer(整数型)或User-controlled(用户控制型)。用户控制变量是“反馈”变量,他们不会被OptQuest的实验改变,但被当作输出变量使用,来得到关于不同场景的效果如何的反馈。所有其他变量类型在最优化过程中都将被改变和进行实验。参见<<link>> OptQuest文件可获得更多信息。
指定了变量的名称和类型后,点击浏览按钮,将此变量与模型中某节点关联起来。这将打开一个树浏览视窗,可从中选择持有此最大容量值的节点。必须选择具有数值数据的节点,否则最优化将不能正常进行。
约束
定义了决策变量后,需要定义最优化的约束条件。在最优化过程中,优化器将根据决策变量对若干种场景进行实验。约束用来将不能满足约束条件的某些场景剔除出去,这样,优化器就不会将一个无效场景选作最优化方案。每个约束具有一个表达式,例如“MaxNrofProcessors < NrofProcessorsUsed + 5”。若要添加一个约束,可按添加按钮,然后在公式栏进行填写。
目标函数
目标函数是想要最大化或最小化的一个表达式。目标函数可以是一个简单的表达式,如,假设你有一个决策变量为“Throughput(产量) ”,则表达式可以是“Throughput”。目标函数也可以是收入相对成本的评价。例如,如果每个产品产出$,每台机器成本(根据仿真运行长度进行加权)是$50,则目标函数可以是“(Throughput*) - (MaxNrofProcessors*)”。
停止条件
优化运行最长时间 - 这是优化器进行优化计算所花费真实时间的最大值。
自动停止 - 如果此框被选中,当目标函数的值停止改进时优化停止。Flexsim的当前设置是:当发现优化方案的目标函数值经过100次循环后,其改变小于时,停止优化。
场景
最大场景数 - 这是优化器将采用的不同场景个数的最大值。一个场景是优化器搜索的一个配置。
当前场景 - 这是正进行实验的当前场景编号。
当前解答 - 这是当前场景的目标函数的值。
最佳解答 - 这是迄今为止最佳场景的目标函数的值。
每个场景的仿真时间/每个场景真实时间 - 这是优化器在每个场景上花费的最大仿真时间。当这个时间一到达,优化器将立即停止这个场景的演算。
重复运行
如果需要对一个给定的场景进行多次仿真来提高目标函数的均值的可信度,可用 “重复运行”面板来指定重复运行次数。
各场景中执行多次运行- 如果此框被选中,优化器将对每个场景进行大于一次的运行。
重复运行的最少次数 - 这是每个场景需要运行的最少次数。如果没有提前退出寻优判据,则优化器将总是重复运行“最少重复运行次数”次。
重复运行的最多次数 - 这是每个场景重复运行的最多次数。如果有提前退出寻优判据,优化器将运行到此判据被满足,最多到此最多重复次数,到达此最多次,优化器将停止此场景的重复运行。
提前退出准则 - 此命令使优化器根据用户选择的判据,停止对同一场景的继续重复运行。如果选择了“满足置信区间 ”,则当优化器能够确定此场景在给定的置信水平和误差百分数下的目标函数的真实平均值时,即立即停止重复运行。例如,如果指定80%的置信水平和5%的误差,则一旦目标函数在80%的置信水平下,真实平均值的落在均值样本的5%区间内时,优化器就停止重复运行。如果选择了“最佳解答在置信区间外”,则优化器如果确定在给定的置信水平和允许的误差率范围内,此场景无法获得最优方案,它将停止对此场景的重复运行。
优化
配置了上述参数后,选择应用按钮来应用所做的配置,然后点击最优化按钮,然后等待,会有一条消息告知优化过程结束。
注释:确保在点击优化按钮前,模型已经编译,否则Flexsim可能出现死机。
注释:点击了优化按钮后,在优化结束前,不要进行任何操作。
XE "视角推移路径" XE "Wav 文件" 演示生成器
演示生成器是一种特殊的透视视图,可以用来制作模型的漫游效果的展示。当与可视化工具的展示幻灯片功能一起使用时,演示生成器可以生成PowerPoint™ 格式的3D演示。在展示菜单中选择演示生成器选项,演示生成器将显示出来。它由两个视窗组成:上面是一个3D 透视视图,与常规的正投影/透视视图相同;下面是演示编辑面板,用来创建和编辑漫游路径。
一个Flexsim演示就是一组漫游路径。每个漫游路径由一个观察点或者漫游点组成。沿给定的漫游路径进行漫游,也就是透视视图顺序地漫游通过漫游路径上的每个漫游点。一个演示是一系列有序的漫游路径。
演示编辑面板
演示编辑面板用来创建、编辑和运行漫游路径。它由若干个控制面板组成,用来设定要制作的演示。
路径面板
路径面板用来编辑所有的漫游路径。点击“新漫游路径”按钮来创键一个新的漫游路径。演示视图的当前观察点将被设置为漫游路径的第一个观察点。点击“删除漫游路径”可以删除当前选定的漫游路径。若要选择一个漫游路径进行编辑,可以点击前进、后退按钮,或者从下拉列表中选择相应的漫游路径。
观察点面板
此观察点面板用来编辑漫游路径中的单个观察点。点击新观察点按钮,将演示视图的当前观察点添加至漫游路径中。点击更新按钮,将当前选定观察点改为演示视图的当前观察点。点击删除观察点按钮可以删除选定的观察点。若要选择一个视角点,可点击向前、后退按钮,或者从下拉列表中选择观察点。
运行控制面板
运行控制面板用来测试创建的漫游路径。点击运行按钮,可以重复地播放沿当前选定的漫游路径所进行的漫游。点击单步按钮可以单步漫游到漫游路径的一个观察点。点击测试按钮,可以沿着当前选定漫游路径漫游一次。点击停止按钮,可以停止当前的漫游。选中“以仿真时间运行镜头路径”复选框,可以使漫游路径的漫游时间依据于仿真时间,而不是真实时间。
音效面板
可以在这里设定要播放的声音,并设定漫游路径漫游的起点和终点。点击 “...”按钮,找到要在漫游路径漫游过程中播放的.wav 文件。“开始 ”文件将在漫游路径运行的刚一开始被播放,而“结束”文件则在漫游路径完成时立即开始播放。
漫游路径数据表
漫游路径数据表用来给当前漫游路径的观察点进行明确的赋值。通常只需要编辑时间栏,但也可以编辑其他值。
时间(Time) - 这里指定漫游到观察点所需的时间。如果没有选中“以仿真时间运行漫游路径”复选框,则时间参数将按照真实时间秒数进行赋值。如果选中,则需要以千秒计地来指定时间。例如,需要在2秒仿真时间内漫游到此位置。
PosX – 在这里指定照相机焦点的x位置。
PosY - 在这里指定照相机焦点的y位置。
PosZ – 在这里指定照相机距其焦点的距离。
RotX – 在这里指定照相机的俯仰角。
RotY – 在这里指定照相机的偏转角。
RotZ – 在这里指定照相机的转动角。
声音 – 是一个.wav文件路径,此文件将在照相机开始向那个观察点漫游时播放。只有漫游路径的起始点和终点可以播放此声音文件。
开始触发器 - 可以在这里编写flexscript代码,将在漫游路径开始时被触发。开始触发器只在路径的第一个观察点执行。
结束触发器 - 可以在这里编写 flexscript代码,将在漫游路径结束时被触发。结束触发器只在路径的末一个观察点执行。
在透视视图中沿漫游路径导航
在透视视图中使用演示生成器工作时,可以采用键盘按键进行漫游路径的漫游操作。可以运行相关联的漫游路径。按空格键或者“N”键,视图将运行行下一个漫游路径。按“B”键,视图将后退到先前的视角漫游路径。
脚本编辑器
脚本编辑器用来执行flexscript命令以获得信息,同时也进行模型配置。点击执行按钮来执行代码。代码的返回值显示在底部方框中。
如果执行的脚本有多行,可以使用双斜杠“//”来注释掉某些行。
注释:所执行的脚本返回值只有在最后一个命令后面没有跟随分号(;)的情况下才会显示。
XE "绩效评估" XE "实验" XE "场景" 仿真实验控制器
实验控制器工具可以从统计菜单中获得。此对话框用来进行实验运行,包括多场景运行,在多次模型运行之间改变某些变量,从每个场景中收集输出数据等。每个场景都代表某一特定的模型配置。对于每个场景,模型都重复运行若干次。
重复运行
这些域段决定需要运行多少个不同场景,每个场景重复运行几次,以及其他模型运行信息。
仿真停止时间 – 当模型运行了这里定义的时间后即停止,下一个重复运行或者场景(如果有的话)开始运行。
预热停止时间 – 当模型运行了这里定义的时间后,统计结果将被重置, 但模型不重置。
每个场景的运行次数 – 此值定义每个场景需要重复运行多少次。
场景数目 – 此值定义要运行多少个场景。每个场景可能包含着多次重复运行。场景个数在“场景数目 ”域段中定义。在每个场景结束时都调用一个特殊事件。
当前运行 – 此数字是当前正在运行的一次重复运行的序号。每个场景的重复运行都重新开始编号。
当前场景 – 此数字是当前正在运行的场景的序号。
每次运行后保存状态 – 如果选中此选项,模型将会在每次重复运行结束时保存其状态。状态以.fsp文件形式保存于实验文件夹。用文件菜单中的“装载状态”选项可以打开这些文件,查看每次重复运行的结果。
实验变量
此表用来定义实验中每个场景的配置。一个实验变量是模型中的某个节点,需要对此节点的值进行实验。例如,实验变量可以是暂存区最大容量值,或者可以是某表中的一个值。可以为实验定义多个实验变量。每个实验变量都与表中某一列相关联。输入需要采用的实验变量的个数,按应用按钮,即可创建相应数目的列。
实验变量的说明
若要将一个实验变量与适当的节点相关联,可点击表中的路径行。
点击浏览路径按钮,打开一个树浏览视窗,可在此查看变量树。
在上面的例子中,暂存区中的maxcontent变量被选择实验变量。
关于实验变量数据的注释:要确保为实验变量所选择的节点具有数字数据,否则实验将不能正常运行。若要对不具有数字数据的变量进行实验,则需要用一个数字来当作对想要进行实验的某种情况的解释。例如,若要对不同类型的“送往端口”策略进行实验,可以在实体或者表中保存一个数字标签,然后在送往端口策略中,查询标签,并根据标签的值来执行不同的策略。
选择一个实验变量后,填入需要让每个场景都设置相同的值。每个场景都与表中某一行相关联。
绩效指标
绩效指标分页用来指定用来对每个场景的绩效指标输出进行评价。
可以定义多达10个绩效指标。输入绩效指标个数,然后按应用按钮即可创建相应个数的绩效指标。每个绩效指标都是用一个下拉菜单来定义的。参见绩效指标下拉菜单。在每次重复运行结束时,执行绩效指标函数并记录结果。整个实验一结束,即可点击结果按钮打开一个视窗来显示某给定绩效指标的结果。
上述绩效指标结果显示了一个吸收器的输入的不同场景,这些场景将暂存区最大容量设为2、 4、6、8和10。注意,最大容量为10的场景很自然产量最高。点击查看表按钮可看到表中所有的值。
高级
高级选项分页中的各项定义了所有重复运行过程中不同点的行为。
实验开始 - 此下拉菜单在实验开始运行时被调用,用来在开始运行任何场景之前先来设定某些变量值。此函数只在第一个场景运行前被调用一次。参见实验开始下拉菜单。
场景开始 - 此下拉菜单在一个场景的第一个重复运行开始之前被调用。每个场景仅调用一次。参见开始场景下拉菜单。
重复运行开始 - 此下拉菜单在每次重复运行的开始时间被调用。每次重复运行只执行一次。参见开始运行下拉菜单。
预热期结束 - 此下拉菜单在重复运行的预热期结束时被调用。参见预热期结束下拉菜单。
重复运行结束 - 此下拉菜单在重复运行期满结束时被调用。参见重复运行结束下拉菜单。
场景结束 - 此下拉菜单在每个场景结束时被调用。每个场景仅调用一次。参见场景结束下拉菜单。
实验结束 - 此下拉菜单在实验结束时被调用,用来在实验运行结束时编写模型数据。此函数仅在最后一个场景运行完毕后被调用一次。参见实验结束下拉菜单。
XE "Excel" XE "微软Excel" XE "单表导出" 单表导出
单表导出工具用来从Flexsim向Microsoft Excel进行表的导出。配置了此编辑器后,点击Excel界面视窗中的单表导出按钮,可导出此表。
Excel工作簿 - 在此指定表要导出所至的Excel 工作簿。点击浏览按钮查找此工作簿。
Excel工作表 - 在此定义表要导出所至的工作表名称。
Flexsim全局表 - 在此定义要从中导出数据的全局表。从下拉列表中选择此表。
使用行标题 - 如果选中此选项,全局表的行标题将成为被导出的首行。
起始行 - 在此定义Excel电子数据表格中的起始行号。
使用列标题 - 如果选中此选项,全局表的列标题将成为导出的首列。
起始列 - 在此定义Excel电子数据表格中起始列号。
XE "微软Excel" XE "表" XE "导入" XE "单表导入" XE "Excel" 单表导入
单表导入工具用来从Microsoft Excel向Flexsim进行表导入。配置了编辑器后,点击Excel界面视窗中的单表导入按钮,即可导入此表。
Excel工作簿 - 在此指定要从中导入表(到Flexsim中)的Excel工作簿。点击浏览按钮查找工作簿。
Excel工作表 - 在此定义从中进行导入的工作表名称。
Flexsim全局表 - 在此定义接受导入数据的全局表。在下拉列表中选择此表。
使用行标题 - 如果选中此选项,Excel电子数据表格中的首行将导入成为全局表的行标题。
起始行 - 在此定义Excel电子数据表格中要导入的第一行的行号。
使用列标题 - 如果选中此选项,Excel电子数据表格中的起始列将作为全局表列标题导入。
起始列 - 在此定义Excel电子数据表格中被导入的第一列序号。
XE "背景设计" XE "展示幻灯片" 背景设计编辑器
背景渲染是指在“展示”菜单中选择“背景设计箱”选项所创建的背景。这是一个围绕模型的盒子,每面都有一个不同的图片。用户可以定义盒子的尺寸和所显示的图片。
注释:只有在透视视图中才能正确显示背景设计,在正投影视图中则不行。
删除背景 - 按下此按钮,即把背景实体从模型中删除。
前面 - 此文件是背景盒前面的图形。
后面 - 此文件是背景盒后面的图形。
左面 - 此文件是背景盒左面的图形。
右面- 此文件是背景盒右面的图形。
顶面 -此文件是背景盒顶面的图形。
底面 -此文件是背景盒底面的图形。
XE "配置器" XE "导入表数据" XE "导出表数据" XE "Csv文件" XE "表配置器" 表配置器
表配置器用来配置表、导入数据、导出数据,并为给定的行或列指定类型。
导入表数据 - 此按钮打开一个文件浏览器,选择一个.csv 文件导入至表中。
导出表数据 - 此按钮打开一个文件浏览器,选择一个.csv 文件,将表导出至其中。
使用行表头 - 此选项仅当从.csv 文件导入表数据时采用。如果选择此选项,csv文件的第一行将导入成为表的行标题。
使用列表头 - 此选项仅当从.csv 文件导入表数据时采用。如果选择此选项,csv文件的第一列将导入成为表的列标题。
列宽 - 此值指定表默认的列宽。注意,可以通过左右拖动列边界来设定每列宽度。点击重置宽度按钮,可将所有列置为默认列宽。
行高 - 此值指定表默认的行高。点击重置高度按钮,可将所有行置为默认行高。
行数据类型 - 在此为表中任意行指定数据类型。键入一个行数,从下拉列表中选择一个数据类型,然后点击指定按钮。
列数据类型 - 在此为表中任意列指定数据类型。键入一个列数,从下拉列表中选择一个数据类型,然后点击赋值按钮。
XE "监视列表" XE "用户事件" XE "时间表" XE "MTBF MTTR" 工具箱
工具箱用来创建和编辑几个模型工具。
全局表
全局表面板用来添加、删除和编辑全局表。根据需要,用添加和删除按钮来添加和删除表。点击编辑按钮可打开全局表编辑器视窗。
时间表
时间表面板用来添加、删除和编辑时间表。根据需要,用添加和删除按钮来添加和删除表。点击编辑按钮可打开时间表编辑器视窗。
用户事件
用户事件面板用来添加、删除和编辑用户事件。根据需要,用添加和删除按钮来添加和删除用户事件。点击编辑按钮可打开用户事件编辑器视窗。
MTBF MTTR
Mtbf mttr 面板用来添加、删除和编辑MTBF MTTR实体。根据需要,用添加和删除按钮来添加和删除MTBF MTTR实体。点击编辑按钮可打开MTBF MTTR编辑器视窗。
监视列表
监视列表面板用来添加、删除和编辑监视列表。根据需要,用添加和删除按钮来添加和删除监视列表。点击编辑按钮可打开监视列表编辑器视窗。
全局C++代码
点击全局C++代码按钮可打开全局C++代码编辑器。
全局对象指针
点击全局实体指针按钮可打开全局实体指针编辑器。
XE "Dfx" XE "Jpg文件" XE "Stl文件" XE "Wrl 文件" XE "图像" XE "导入媒体文件" XE "形状" 导入媒体文件
点击导入媒体文件按钮来打开导入媒体文件编辑器。
模型开始时代码
点击模型启动代码按钮可打开模型开始时代码编辑器。
刷新列表
如果更改了全局表、mtbf mttr、时间表、监视列表或者用户事件的名称,并想要组合框显示这些更改,可按更新列表按钮。
XE "装载用户库" XE "用户库" XE "浏览用户库树" XE "新建用户库" XE "从用户库移除实体" 用户库
用户库用来创建和配置实体的特殊功能,并将这些实体保存为模板以便在其他模型中的其它部分使用。每个用户库包含一组实体。可以保存用户库,以后可以将它们装载到其它项目中。
用户库视窗可同时打开若干个用户库。视窗顶部的菜单用来创建、清除和编辑用户库。
文件菜单
新建用户对象库 - 此选项用来创建一个新用户库,并将它添加到当前打开的用户库列表中。
导入用户对象库 - 此选项用来装载一个保存过的用户库, 将它添加到当前打开的用户库列表中。
另存为... - 此选项用来将当前选定的用户库保存为文件。
关闭用户对象库 - 此选项用来从用户库列表中移除当前选定的用户库。
关闭所有用户对象库 - 此选项用来关闭全部用户库。
编辑菜单
编辑菜单用来更改当前装载的用户库。
重命名用户对象库 - 此选项用来重命名当前选定的用户库。
添加实体到一个用户库
若要向用户库添加一个实体,在正投影或透视视图中右击此实体,并选择“添加到用户库”选项。
这样将把实体添加到当前选定的用户库。如果用户库视窗中没有库,那么将创建一个新用户库里,实体将被添加到此新用户库中。
关于添加一个实体到一个用户库的注释:当一个实体被添加到一个用户库中时, 是创建了一个此实体的复制品,并纳入此库中。这意味着,一旦实体被添加至用户库中,它就不再和原来的实体相关联了。它是一个复制品,可以独立于原始实体而进行更改。
一旦向用户库中添加了实体,就可在用户库视窗中右键单击这些实体来编辑或清除它们。点击后将出现如下的菜单。
浏览实体树 - 此选项用来在一个树视窗中浏览实体。
浏览用户实体树 - 此选项用来在一个树视窗中浏览整个用户库。
从用户库中删除实体 - 此选项可以从用户库中移除实体。
参数 - 此选项可以打开实体的参数视窗。
属性 - 此选项可以打开实体的属性视窗。
模型添加用户库实体
若要向模型中添加一个用户库实体,点击此实体并保持,拖动鼠标到模型中需要创建此实体的位置,然后在此点释放鼠标键。
Microsoft Visio™导入
Visio导入工具用来在Microsoft Visio™中创建模型,并将它们导入Flexsim。操作如下:
启动 Visio
打开
Visio如下所示。
从模板中拖出一些实体到模型空间中进行布局安排。
将A端口连接实体拖到模型中来创建一个连接。
连接始于左上点,终止于右下点。如果向后反向连接,则在Flexsim中连接将是向后的。
这是一个连接到上游实体的连接。
注释:不要直接连接实体。必须连接到蓝色的点上。
拖出一条连接线时,其两端应该都连接蓝色连接点,才能创建正确的连接。同样,在Visio中所连接的连接点不是问题关键。Flexsim的连接将根据它们在Visio中被拖出的顺序进行排序。下面的例子将暂存区连接到处理器的第一个输入端口,无涉于被连接到Visio中的实体的第二个连接端口。
S端口连接 (中间端口) 的创建与A端口连接的创建一样。在Visio中它们所连接的连接点在顺序上并不存在差异。允许将S端口连接到蓝色连接点。
实体可在Visio中旋转和调整大小,这样可以在Flexsim 中进行旋转和尺寸调整。
Visio中旋转工具外观如此:
在调整尺寸时不要移动实体的质心点。质心点表示为一个中间有黑点的绿色圆形,用来定义实体的旋转中心。如果在Visio中移动了质心点,此实体将无法正确地在Flexsim中定位。
通过点击和拖动旋转工具 ,此处理器围绕它的某个角点进行旋转。
使用选择工具 ,向下拖动暂存区的侧点,此暂存区尺寸被改变。
每个通过双击实体和键入新名称可为实体重新命名。
模型中的每个实体都必须有一个唯一的名称,这样才能正确地导入到Flexsim中。如果在Visio中为实体进行同样的命名,则在Flexsim 中不能正常创建它们的连接。在下面的例子中,运输机具有相同的名称,因此分配器两次都被连接到第一个运输机。
这里是一个快要完成的Visio 页,内容是一个Flexsim的布局图。
还有几项,必须要在导出到Excel从而导入到Flexsim中之前进行检查,以确保正确无误。
确保每个实体有一个唯一的名称。
必须在此菜单中对每个实体正确格式化。
在名称域段中包含实体的类和一个被句点分开的数字,或者只有实体的类。如果有数字,它必须和ID号相对应,否则实体将不能正常导出。通常实体会自然进行这些操作,但有时Visio会在此域段中生成不正确的名称。如果模型不能正确导入到Flexsim中,可能就是这样的原因。下面的例子给出了如果名称保留为“” 而不改为“”将会发生的情况。
现在,实体都具有一个唯一的名称,且根据特定格式进行了正确赋值,导出准备已经完成。
从 Tools > Macros > Visio Extras > Database Export 导出文件
将出现此屏幕。点击下一步。
下一步。
选择“All shapes on the page(页中所有形状)”,点击下一步。
点击“添加所有>>”按钮,来得到导出的所有正确信息。
然后,点击下一步。
选择 Excel Files 并点击下一步.
选择要接收导出的Excel文件。路径通常为:C:/Program Files/Flexsim3/program/.
在表名称栏中键入名称。在Flexsim中再次键入此名称,以便使Flexsim确定从哪个工作表导入。记住所键入的名字,并点击下一步。
不要改变此屏幕中任何数据的值,点击下一步。
下一步。
完成。
现在,在Flexsim中,进入工具 > Visio…
将出现此对话框。
在行数和列数两栏中分别输入一个数值,应大于Visio数据库输出创建的Excel工作表中的行数和列数。通常,50已经足够大。如果模型不能正常导入,可去查看Excel工作表的大小,如果需要则要增大这些值。
点击“…” 按钮浏览要打开的Excel 文件。
在工作表名称一栏中键入先前定义的表名称。
确保指定的Excel路径是正确的。
点击导入模型按钮。将会出现如下信息框。
请等待,直到Excel已完全打开正确的工作表,随后点击确定。
这样模型将被导入。这需要几分钟的时间。等待Visio模型导入视窗的关闭。这时,模型就被导入到Flexsim中了。
XE "监视列表" 监视列表
选择工具条中“工具箱”按钮,或者从工具菜单的“工具箱”选项,都可以访问监视列表。一个监视列表是这样一组变量,建模人员想要对其进行监控。不同的变量被添加到表中接受监视,并在它们的值发生变化时进行记录。
名称 - 监视列表实体的名称。 此名称应该具有描述性且便于记忆。例如,“Watching Servers(监视服务器)”或者“Watching Label WIP(监视WIP标签)”。
需监视变量数 - 需要监视的变量数。必须将每个变量都添加到列表中。
监视列表表格
编辑监视列表来指定需要监视的实体和变量。
ObjectName(实体名称) - 在这里键入模型中的实体名称。
WatchVariable(监视变量) - 在这里键入需要监视的变量名称或实体的属性。
OldValue(上次记录值) - 这是上次对实体所作的记录值。不要更改这个值。
ObjectAddr(实体地址) - 是个实体指针。不要更改这个值。
变更触发器 - 此下拉菜单指定某个监视变量发生改变时要进行的活动。参见变更触发器下拉菜单。
XE "编译" XE "下拉菜单" 下拉菜单
下拉菜单
不难发现,下拉菜单视窗贯穿整个Flexsim。这些视窗提供了在Flexsim中方便地实现功能的界面。在视窗背后,每一个视窗都指向一个节点。这些下拉菜单的优点在于,可以用做编写功能却无需编写代码。它们提供了常用的功能列表,点击下拉框时就会出现。
一旦进行了一个选择,可以通过点击代码模板按钮 来对此选项进行定制。首先会打开一个视窗,解释此选项的作用。同时,也可以对用棕色高亮显示的指定参数进行输入,改为用户自己的信息。
在上例中,从下拉框中选择“按标签(直接)”选项。代码模板视窗中显示,此临时实体的标签“标签名”的值将被用来作为处理器1的预置时间使用。
当再次选择一个下拉菜单选项,并在代码模板视窗进行编辑时,实际上是在创建用户自己的代码段。其优势在于,只需要设定极少量的信息,而不用真正进行代码编写。
关于下拉菜单编译的注释: 鉴于下拉菜单引用了一段代码,如果对这些域段中之一做了更改,就必须在运行前对Flexsim进行编译。参见何时编译Flexsim可获得更多关于Flexsim何时需要编译的信息。
在需要时,高级用户也可以明确地编写代码。点击代码编辑按钮 可以打开代码编辑视窗,可在此视窗中看到此域段中所实施的所有代码。注意,所看到的很多代码事实上是用来设计代码模板视窗的。根据代码模板的格式代码的颜色来译解这些真实代码。代码模板的设计代码被标示为灰色。
参见在Flexsim 中编写逻辑可获得更多关于如何在Flexsim中编写代码的信息。
触发器
XE "装载触发器" XE "卸载触发器" 装载/卸载触发器
综述:
装载触发器:任务执行器一完成装载时间,但在它将临时实体移动到任务执行器中之前,此触发器就被触发。
卸载触发器: 任务执行器一完成卸载时间,但在它将临时实体移动到其目的地之前,此触发器就被触发。
存取变量:
item: 将被装载/些载的临时实体
current: 当前实体
Do Nothing (无操作)
默认模板
Do nothing
无操作
详细说明
调用此触发器时不执行任何命令。
应用背景
在此触发器执行期间没有附加逻辑要求时采用此函数。
Set Location (位置设定)
默认模板
Set the location of item to:
X=
Y=
Z=
设定临时实体 item 位置如下:
X=
Y=
Z=
详细说明
将指定实体的全局坐标设置为这三个指定值。
其他参数示例
current
gettablenum("mytable",2,3)
getlabelnum(item,"mylabel")
6
应用背景
用来设定一个实体的位置。
如果此指定实体是临时实体,则其指定位置是相对所涉及的任务执行器的。
Set Rotation (设定转角)
默认模板
Set the rotation of item to:
X= 0
Y= 0
Z= 0
设定临时实体 item 的转角如下:
X= 0
Y= 0
Z= 0
详细说明
为指定实体设定旋转角为三个指定值。
其他参数示例
current
gettablenum("mytable",4,4)
getlabelnum(item,"mylabel")
get(spatialrz(current))+90
7
应用背景
用来设定一个实体的转角。
Set Size (设定尺寸)
默认模板
Set the size of item to:
X=
Y=
Z=
设定临时实体 item 的尺寸如下:
X=
Y=
Z=
详细说明
设定指定实体的尺寸为三个指定值。
其他参数示例
gettablenum("mytable",5,6)
get(spatialsx(item))+4
4
应用背景
用来设定一个实体的尺寸。
通常,在一个实体的尺寸进行动态变化,以使得仿真的视觉效果更真实时,采用此功能。
Set Itemtype (设置实体类型)
默认模板
Assign item the following itemtype number: duniform(1,3).
将临时实体item指定为如下实体类型号:duniform(1,3)。
详细说明
将指定实体的实体类型设定为指定值。
其他参数示例
getlabelnum(current,"mylabel")
gettablenum("mytable",3,4)
12
应用背景
用来在仿真运行过程中动态地改变临时实体的类型。
Set Name(设定名称)
默认模板
Assign item the following name: "newname".
指定临时实体item的名称为 “newname”。
详细说明
将指定实体的名称设定为指定值。
其他参数示例
concat("name",numtostring(getlabelnum(current,"mylabel"),0,0))
concat("anothername",getlabelstr(current,"mystringlabel"))
Context 应用背景
用来在仿真运行过程中改变实体的名称。
常在此实体被一个下游实体按名称引用时采用此函数。
Create and Initialize Label(创建并初始化标签)
默认模板
Create a label called "labelname" on item and initialize it with a value of duniform(1,3).
在临时实体item上创建一个名为 “newname”的标签,并初始化其值为duniform(1,3)。
详细说明
给指定实体添加一个新的指定名称的数值标签,且将其设置为指定值。
如果此标签已经存在,则此函数将把此标签设定为指定值。
其他参数示例
12
getlabelnum(current,"mylabel")
content(current)
time()
应用背景
用来给一个实体添加一个数字标签并进行初始化,而不是在属性菜单中添加标签,以后再给它赋值。
Set a Label(设定一个标签)
默认模板
Set a label called "labelname" on item to the value duniform(1,3).
(This optio n assumes that the label has already been created.)
设定临时实体item上名为 “labelname”的标签的值为duniform(1,3)。
(此功能的前提假设条件是标签已被创建。)
详细说明
将指定实体上某指定名称的标签设定为指定值。
如果此标签名不存在,则此函数不做任何操作。
其他参数示例
5
gettablenum("mytable",2,3)
content(current)
time()
应用背景
用来更新已在某实体上创建的标签。
Set Color(设置颜色)
默认模板
Assign item the color:
colorrandom
Note: To assign a random color use colorrandom, otherwise
use one of the standard color commands below:
colorred colorpink
colorgray colorgreen
colorblue colorblack
coloryellow colorwhite
colororange colorteal
colorpurple coloraqua
colorbrown colorsilver
colorlime colorlightblue
为临时实体 item 赋颜色:
colorrandom(赋一个随机颜色)
注释:用colorrandom来随机赋色,否则采用如下所示的标准颜色命令。
colorred(颜色红) colorpink(颜色粉红)
colorgray (颜色灰) colorgreen(颜色绿)
colorblue (颜色蓝) colorblack(颜色黑)
coloryellow (颜色黄) colorwhite(颜色白)
colororange (颜色橘黄) colorteal(颜色凫蓝)
colorpurple(颜色紫) coloraqua(颜色浅绿)
colorbrown (颜色褐) colorsilver(颜色银)
colorlime (颜色酸橙) colorlightblue(颜色淡蓝)
详细说明
在指定实体上调用一个函数来改变其颜色。
为了在Flexsim中改变一个实体的颜色,要改变颜色的3d文件中的那部分必须没有被指定素材。
如果是3DS文件,则没有素材的那部分还必须在有指定素材的其它部分之前,为的是改变它们的颜色。
其他参数示例
参见默认模板。
应用背景
用来在仿真运行期间动态地改变实体颜色。
常用来从列表中指定一个随机颜色或某指定颜色,而无须找到所需颜色的三原色量值。
Set Color (rgb) (设定颜色(rgb))
默认模板
Assign item a color using red, green, blue (rgb) inputs:
Red=255
Green=0
Blue=0
Note: use an index number between 0 and 255 for each color.
采用红、绿、蓝(rgb)输入方式为临时实体item指定一种颜色:
红=255
绿=0
蓝=0
注释: 每种颜色指数均在0~255之间。
详细说明
在某指定实体上调用设置颜色函数,使用0~255之内的红、绿、蓝原色值,来改变其颜色。
为了在Flexsim中改变一个实体的颜色,要改变颜色的3d文件中的那部分必须没有被指定素材。
如果是3DS文件,则没有素材的那部分还必须在有指定素材的其它部分之前,为的是改变它们的颜色。
其他参数示例
current
centerobject(current,1)
30*getitemtype(item)
duniform(0,255)
getlabelnum(item,"mylabel")
50
应用背景
用来在仿真运行期间动态地改变实体颜色。
常用来根据特定颜色的已知三原色输入来设定某一指定颜色。
也常用来显示阴影差异程度,较低的指数比较高的指数颜色更暗。
Set Color by Itemtype( 根据实体类型设定颜色)
默认模板
Assign item a unique color according to its itemtype number:
case 1: colorred(item); break;
case 2: coloryellow(item); break;
case 3: colorblue(item); break;
default: colorblack(item);
Notes:
Case instances must be a valid itemtype number.
Additional cases may be added as needed.
Use "current" to access the current involved object.
Use "item" to access the involved flowitem as an fsnode*.
根据实体类型号,为每个类型的临时实体 item 指定唯一的颜色:
case 1: colorred(item); break;
case 2: coloryellow(item); break;
case 3: colorblue(item); break;
default: colorblack(item);
注释:
每种case都必须是一个有效的临时实体类型编号。
可根据需要添加附加case分支。
用“current(当前)”来获得当前涉及的实体。
用“item(临时实体)”作为一个fsnode*(flexsim节点指针)来获得所涉及的临时实体。
详细说明
每种情况条件代表一个特定的实体类型。采用所示的语句为那种情况调用改变颜色函数。
如果所涉及实体的类型没有在各种情况切换中有一个对应的情况,将运行默认的声明,这将把此种情况的临时实体指定为黑色。
采用正确的表述语句可以添加或移除case分支。
其他参数示例
case 8: colorwhite(item); break;
case 24: colorsilver(item); break;
case 17: colorgray(item); break;
case 2: colorblack(item); break;
default: colorpink(item);
应用背景
用于根据所涉及的临时实体的类型来改变实体的颜色。
Set Color by Label(根据标签设定颜色)
默认模板
Assign item a unique color according to the value of a label named "labelname":
case 1: colorred(item); break;
case 2: coloryellow(item); break;
case 3: colorblue(item); break;
default: colorblack(item);
Notes:
Case instances must be a valid itemtype number.
Additional cases may be added as needed.
Use "current" to access the current involved object.
Use "item" to access the involved flowitem as an fsnode*.
根据一个名为“labelname”的标签的值为临时实体item指定唯一的颜色。
case 1: colorred(item); break;
case 2: coloryellow(item); break;
case 3: colorblue(item); break;
default: colorblack(item);
注释:
每种case都必须是一个有效的临时实体类型编号。
可根据需要添加附加case分支。
用“current(当前)”来获得当前涉及的实体。
用“ item(临时实体)”作为一个fsnode*(flexsim节点指针)来获得所涉及的临时实体。
详细说明
每种情况条件代表一个特定的实体类型。采用所示的语句为那种情况调用改变颜色函数。
如果所涉及实体的类型没有在各种情况切换中有一个对应的情况,将运行默认的声明,这将把此种情况的临时实体指定为黑色。
采用正确的表述语句可以添加或移除附加情况的分支。
其他参数示例
case 9: colorwhite(item); break;
case 16: colorsilver(item); break;
case 1: colorgray(item); break;
case 33: colorblack(item); break;
default: colorpink(item);
应用背景
用来根据所涉及的临时实体上的标签来改变实体的颜色。
Send Message (发送消息)
默认模板
Send a delayed message to centerobject(current,1) in 0 time units from now. Pass the current object reference as "msgsendingobject", the value tonum(item) as "msgparam(1)", the value tonum(station) as "msgparam(2)" and the value 3 as "msgparam(3)".
从现在算起在0 时间内发送一条消息给centerobject(current,1)。用“msgsendingobject”传递当前实体的引用,用“msgparam(1)”传递tonum(item) 的值,“msgparam(2)”传递tonum(station) 的值,并用“msgparam(3)”传递值“3”。
详细说明
在运行任何其它代码之前,立即执行指定实体的消息触发器中的代码。
这三个指定的值可以从消息触发器中引用。当需要了解某些特定的数字时,如端口号、实体类型或容量,就需要用到此命令。
其他参数示例
current
outobject(current,2)
inobject(current,1)
node("/Processor1",model())
content(current)
应用背景
用来立即运行某个特定实体的一段代码。
常用来触发当前实体或者其它实体来运行某特定代码段。
Send Delayed Message(发送延迟消息)
默认模板
If true send a message to centerobject(current,1) in 0 time units from now. Pass the current object reference as "msgsendingobject", the value tonum(item) as "msgparam(1)", the value port as "msgparam(2)" and the value 3 as "msgparam(3)".
从现在算起在0 时间单位内,发送一个延迟消息给centerobject(current,1) 。用“msgsendingobject” 传递当前实体的引用,用“msgparam(1)”传递tonum(item) 的值,用“msgparam(2)”传递tonum(station) 的值,并用“msgparam(3)”传递值“3”。
详细说明
在指定长度的仿真时间过去后,执行指定实体的消息触发器中的代码。
其他参数示例
current
outobject(current,2)
inobject(current,1)
node("/Processor1",model())
content(current)
应用背景
用来在一段给定的时间延迟期后运行一段代码。
Conditional Message(状态消息)
默认模板
If true send a message to centerobject(current,1) in 0 time units from now. Pass the current object reference as "msgsendingobject", the value tonum(item) as "msgparam(1)", the value tonum(station) as "msgparam(2)" and the value 3 as "msgparam(3)".
如果为 true(真),则从当前算起在 0 时间单位内发送一条消息给centerobject(current,1) 。用“msgsendingobject”传递当前实体的引用,用“msgparam(1)”传递tonum(item) 的值,用“msgparam(2)”传递tonum(station) 的值,并用“msgparam(3)”传递值“3”。
详细说明
“真”被一个诸如getitemtype(item) > 5,或getlabelnum(current,"mylabel")的条件表达式所替代。
如果临时实体的实体类型号大于5,getitemtype(item) > 5将返回“真”。
getlabelnum(current,"mylabel")将检查当前实体上的标签“mylabel”是否不等于(真)或等于(假)0。
如果条件表达式为真,在指定的仿真时间过去后,执行指定实体的消息触发器里的代码。
如果指定仿真时间为0,则在执行其它任何代码之前,立即执行消息触发器的代码。
这三个指定的值可以从消息触发器中引用。当需要了解某些特定的数字时,如端口号、实体类型或容量,就需要用到此命令。
其他参数示例
current
outobject(current,2)
inobject(current,1)
node("/Processor1",model())
content(current)
应用背景
只有在条件表达式为真的情况下,用来在一段给定的时间延迟期后运行一段代码。
Write to Table (1) (写入表中(1))
默认模板
Write to global table "mytable" row 1 column 1 value 10.
填写全局表“mytable”行1 列1 值10。
详细说明
将全局表中某特定单元格设定为指定值。
确保指定的表的名称正确无误。
确保表中指定单元格包含数值数据。
其他参数示例
content(current)
getlabelnum(current,"labelname")
应用背景
用来将信息存储倒表中以备以后使用。
Write to Table (2) (写入表中(2))
默认模板
As each flowitem enters, sequentially write a new row of Global Table named "mytable" per the following commands:
settablenum(tablename,rows,1,time()/60);
settablenum(tablename,rows,2,getitemtype(item));
settablenum(tablename,rows,3,getlabelnum(item,"labelname"));
Notes:
The user must first create a global table with at least 1 row and x columns.
The number of rows in the table will be set back to one as the first flowitem enters.
The number of rows in the table will be incremented as each additional flowitem enters.
The new value will always be written to the last row in the table, creating a history of values.
The example needs a table with four columns:
Column 1 is the time (in minutes) that the flowitem entered this object.
Column 2 is the itemtype of the flowitem.
Column 3 is the value of a label named "labelname"
随着每个临时实体的进入,用如下命令,顺序向全局表“mytable”中写入一个新行。
settablenum(tablename,rows,1,time()/60);
settablenum(tablename,rows,2,getitemtype(item));
settablenum(tablename,rows,3,getlabelnum(item,"labelname"));
注释:
用户必须首先创建一个最少1行1列的全局表。
表中的行数将会重新设为第一个临时实体的进入时的值。
表中的行数将被随着每个另外的临时实体进入递增。
新值总是被填写于表中最后一行,创建一个历史值。
示例需要一个4列的表格:
列1代表时间(按分计),指临时实体进入此实体的时间。
列2代表临时实体的类型。
列3代表标签“labelname”的量值。
详细说明
创建一个量值表,每当此函数被调用时,向表中添加另一行。
每添加一行,都运行此命令,而将变量行作为一个指向正在添加的当前行的引用。
在为特定临时实体添加的行中,将给定的信息填入相应的各列中。
确定指定的表的名称正确无误。
确定表中指定单元格包含数值数据。
其他参数示例
settablenum(tablename,rows,1,time());
settablenum(tablename,rows,2,content(current));
settablenum(tablename,rows,3,getlabelnum(item,"labelname"));
应用背景
用来记录一个值表,用来在每次调用此函数时,显示某些特定变量的状态。
Write to Tracelist (向追踪列表写入)
默认模板
Write the name of the current object to column 1, and write time()-getentrytime(item) to column 2 of the flowitem's tracelist table. Each flowitem will be given a variable named "tracelist" which can be viewed as a table by double-clicking on the flowitem. A new row will be added to the tracelist table whenever it is written to.
对于临时实体的追踪列表,将当前变量的名称写入列1,将time()-getentrytime(item)写入列2。每个临时实体将给定一个名为“tracelist”的变量,此变量可通过双击临时实体进行查看。每当进行写入时,都给追踪列表添加一个新行。
详细说明
在参数视窗中创建一个涉及临时实体的表,第一列显示当前实体的名称,第二列显示一个指定的双精度值(默认为停留时间,time()-getentrytime(item))。
其他参数示例
time()
getentrytime()
应用背景
用来在临时实体的参数视窗中,输入一个临时实体的流程历史纪录。
Travel to a Specific Location(行进到指定位置)
默认模板
Travel to the global coordinates:
X=
Y=
Z=
行进到全局坐标系:
X=
Y=
Z=
详细说明
在当前实体上创建一个TravelToLoc任务,来行进到一特定的全局坐标位置。
其他参数示例
0
8
应用背景
用来告知实体在继续其任务前,行进到一个指定位置。
Travel to an Object (行进到一个实体)
默认模板
Travel to the following object: centerobject(current,1).
行进到如下实体:centerobject(current,1)。
详细说明
创建一个从当前实体到另外一个特定实体的行进任务。
其他参数示例
node(“/Processor1”,model())
outobject(current,2)
应用背景
用来告知实体在继续其任务前,行进到一个指定实体。
Reassign current node(重新分配当前节点)
默认模板
Reassign this TaskExecuter to a NetworkNode connected to center port 2.
Note:
Reassigning a TaskExecuter to a new node can ONLY be done when the TaskExecuter is not in a travel task.
Reassigning nodes can be useful for having a transport enter from one node to dropoff to a Rack, and leave via another node.
将这个任务执行器重新分配给一个与中间端口2 相连接的网络节点。
注释:
只有当任务执行器不在执行行进任务时,才能将任务执行器重新分配给一个新节点。
在让一个运输工具从一个节点将物品卸载到一个货架,再从另一个节点离开的情况下,重新分配节点是有用的。
详细说明
重新分配网络节点的功能,会告知任务执行器它当前是在一个节点上,而不是它上次所在的那个节点。
注释:从一个任务执行器到一个网络节点的中间端口连接并不是可视的。若要查看这些连接,则需要打开任务执行器的属性菜单。
其他参数示例
N/A
应用背景
用来采用偏移方式放置/捡取一个临时实体,并从不同于进入时的另一个节点再次进入节点网络。
Increment Label(递增标签)
默认模板
Increment the label on item called “labelname” by 1.
(Remember to first create the label in the Properties window of the object – or use the “addlabel” command)
将实体item上名为 “labelname”的标签递增1 。
(请记住首先在实体属性视窗中创建标签,或者可使用“addlabel”命令创建。)
详细说明
将指定实体上具有指定名称的标签递增指定的值。
如果此标签名不存在,此功能不执行任何操作。
使用负数可实现标签递减。
其他参数示例
current
centerobject(current,3)
5
gettablenum(“mytable”,2,3)
content(current)
time()
-12
应用背景
用来更新已在某实体上创建的标签。
Close and Open Ports (关闭和开放端口)
默认模板
If true then closeinput ports of the current object.
Notes:
You may closeinput or openinput ports of an object, and you may closeoutput or openoutput ports of an object.
Use "current" to access the current object.
Use "item" to access the involved flowitem.
Use "station" to reference the current load/unload station.
如果条件为 true(真),对current(当前)实体进行closeinput(关闭输入)端口操作。
注释:
可以打开或关闭一个实体的输入端口,也可以开或关闭其输出端口。
使用“current(当前)”调用当前实体。
使用“item(临时实体)”来调用涉及的临时实体。
使用“station(站点)”来引用当前装载/卸载站点。
详细说明
打开或关闭一个实体的输入或输出端口。如果一个实体的输出端口被关闭,在这些端口被重新打开前,不再发送任何临时实体。如果一个实体的输入端口被关闭,在这些端口被重新打开前,不再接收任何临时实体。
如果条件为真,则打开或关闭输入或输出端口。
用类似content(current) > 5 或getlabelnum(current,"mylabel")这样的条件表达式代替 “真”。 如果当前实体中的临时实体数目大于5,则表达式content(current) > 5返回“真”。
getlabelnum(current,"mylabel")将检查当前实体上的标签“mylabel”是否不等于(真)或等于(假)0。
如果“真”没有被一个条件表达式替代,则每次调用此函数,它都将打开/关闭输入/输出端口。
其他参数示例
inobject(current,1)
outobject(current,3)
centerobject(current,2)
应用背景
用来根据特定的条件控制在实体间的临时实体流。
常用来关闭某实体上的输入端口,然后用另一个下游实体来重新打开那些输入端口。
Change 3D Shape(改变3D形状)
默认模板
Change the 3D shape of item object to shape index number 1.
将临时实体item 的3D形状改变为形状序号1 所代表的形状。
详细说明
改变指定实体的3D形状。
在导入媒体文件工具箱中可以找到形状索引号。每个导入的形状或图形都有一个号码,代表其形状索引号。
如果需要用此函数来将一个实体的形状改变为某3D形状,而此3D形状不在“预先导入图形图像” 中,则必须首先添加此3D形状。
其他参数示例
inobject(current,1)
outobject(current,2)
getshapeindex(“fs3d//”)
getshapeindex(“C://Program Files//Flexsim//fs3d//”)
应用背景
用来动态地改变一个实体的形状。
XE "进入触发器" XE "进入" XE "离开触发器" XE "离开" 进入/离开触发器
综述:
进入触发器:每当一个临时实体进入此实体时,就执行此函数。
离开触发器:每当一个临时实体离开此实体时,就执行此函数。
关于进入/离开触发器应用背景的注释:通常,在一实体的接收/发送事件刚开始时,进入和离开触发器先于其它任何逻辑而执行。这意味可以在事件逻辑内改变实体的变量、标签等,并正确地应用这些修改。然而,那些可能影响实体今后某些事件的可执行命令不能在进入和离开触发器中执行,因为那些事件还没有在实体的事件逻辑中创建,而影响实体事件的函数必须等待,直到那些事件被创建后才能执行。在这种情况下,应该在0时间内向实体发送一个延迟消息(使用senddelayedmessage()命令),然后用消息触发器执行此函数的功能。这样,就使得实体在执行命令前能完成剩余部分的事件逻辑。可在此部分应用的命令是stopobject(),requestoperators(),openoutput(), openinput(), resumeinput(), resumeoutput(),有些情况下是根据它们当中的任务类型而创建或分配的任务序列。
存取变量:
current(当前):当前实体。
item(临时实体):涉及的刚进入/离开的实体。
port(端口):实体进入/离开的端口号。
Do Nothing (无操作)
默认模板
Do nothing
无操作
详细说明
当调用此触发器时不执行任何命令。
应用背景
在此触发器执行期间没有附加逻辑时采用。
Set Location(设定位置)
默认模板
Set the location of item to:
X= 0
Y= 0
Z= 0
设定临时实体item位置如下:
X= 0
Y= 0
Z= 0
详细说明
将指定实体的全局坐标设定为三个指定的值。
其他参数示例
current
gettablenum("mytable",2,3)
getlabelnum(item,"mylabel")
6
应用背景
用来设定一个实体的位置。
如果此指定实体是临时实体,该指定位置是相对当前实体的。
Set Rotation(设定转角)
默认模板
Set the rotation of item to:
X= 0
Y= 0
Z= 0
设定临时实体item的旋转角度如下:
X= 0
Y= 0
Z= 0
详细说明
将特定实体的旋转角度设定为三个指定的值。
其他参数示例
current
gettablenum("mytable",4,4)
getlabelnum(item,"mylabel")
get(spatialrz(current))+90
7
应用背景
用来设定一个实体的转角。
Set Size (设定尺寸)
默认模板
Set the size of item to:
X=
Y=
Z=
设定临时实体item的尺寸如下:
X=
Y=
Z=
详细说明
将特定实体的尺寸设定为三个指定的值。
其他参数示例
gettablenum("mytable",5,6)
get(spatialsx(item))+4
4
应用背景
用来设定一个实体的尺寸。
通常,在动态变化一个实体的尺寸以使仿真的视觉效果更真实时采用。
Set Itemtype (设置临时实体类型)
默认模板
Assign item the following itemtype number: duniform(1,3).
将临时实体item指定为如下实体类型号:duniform(1,3)。
详细说明
将指定实体的实体类型设定为指定值。
其他参数示例
getlabelnum(current,"mylabel")
gettablenum("mytable",3,4)
12
应用背景
用来在仿真运行过程中动态地改变临时实体的类型。
Set Name (设定名称)
默认模板
Assign item the following name: "newname".
指定临时实体item的名称为“newname”。
详细说明
将指定实体的名称设定为指定值。
其他参数示例
concat("name",numtostring(getlabelnum(current,"mylabel"),0,0))
concat("anothername",getlabelstr(current,"mystringlabel"))
应用背景
用来在仿真运行过程中改变实体的名称。
常在此实体被一个下游实体按名称引用时采用此函数。
Create and Initialize Label (创建并初始化标签)
默认模板
Create a label called "labelname" on item and initialize it with a value of duniform(1,3).
在临时实体item上创建一个名为 “newname”的标签,并初始化其值为duniform(1,3)。
详细说明
给指定实体添加一个新的指定名称的数值标签,且将其设置为指定值。 如果此标签已经存在,则此函数将把此标签设定为指定值。
其他参数示例
12
getlabelnum(current,"mylabel")
content(current)
time()
应用背景
用来给一个实体添加一个数值标签并进行初始化,而不是在属性菜单中添加标签,以后再给它赋值。
Set a Label (设置一个标签)
默认模板
Set a label called "labelname" on item to the value duniform(1,3).
(This option assumes that the label has already been created.)
设定临时实体item上名为 “labelname” 的标签的值为duniform(1,3)。
(此功能的前提假设条件是标签已被创建。)
详细说明
将指定实体上某指定名称的标签设定为指定值。
如果此标签名不存在,则此函数不做任何操作。
其他参数示例
5
gettablenum("mytable",2,3)
content(current)
time()
应用背景
用来更新已在某实体上创建的标签。
Set Color (设置颜色)
默认模板
Assign item the color:
colorrandom
Note: To assign a random color use colorrandom, otherwise
use one of the standard color commands below:
colorred colorpink
colorgray colorgreen
colorblue colorblack
coloryellow colorwhite
colororange colorteal
colorpurple coloraqua
colorbrown colorsilver
colorlime colorlightblue
为临时实体item指定颜色:
colorrandom(设定随即颜色)
注释:如需指定随机颜色,采用colorrandom,否则,采用如下所示的标准颜色命令。
colorred(颜色红) colorpink(颜色粉红)
colorgray (颜色灰) colorgreen(颜色绿)
colorblue (颜色蓝) colorblack(颜色黑)
coloryellow (颜色黄) colorwhite(颜色白)
colororange (颜色橘黄) colorteal(颜色凫蓝)
colorpurple(颜色紫) coloraqua(颜色浅绿)
colorbrown (颜色褐) colorsilver(颜色银)
colorlime (颜色酸橙) colorlightblue(颜色淡蓝)
详细说明
在特定实体上调用一个函数来改变其颜色。
为了在Flexsim中改变一个实体的颜色,要改变颜色的3d文件中的那部分必须没有被指定素材。
如果是3DS文件,则没有素材的那部分还必须在有指定素材的其它部分之前,为的是改变它们的颜色。
其他参数示例
查看默认模板。
应用背景
用来在仿真运行期间动态地改变实体的颜色。
常用来从列表中指定一个随机颜色或某特定颜色,而无须找到所需颜色的三原色量值。
Set Color (rgb) (设定颜色(rgb))
默认模板
Assign item a color using red, green, blue (rgb) inputs:
Red=255
Green=0
Blue=0
Note: use an index number between 0 and 255 for each color.
采用红、绿、蓝(rgb)输入方式为临时实体item指定一种颜色:
红=255
绿=0
蓝=0
注释: 每种颜色指数均在0~255之间。
详细说明
采用0~255的红、绿、蓝三原色方式,在特定实体上调用设定颜色函数来改变其颜色。
为了在Flexsim中改变一个实体的颜色,要改变颜色的3d文件中的那部分必须没有被指定素材。
如果是3DS文件,无素材的部分必须在有指定素材的其它部分之前,目的是为了改变它们的颜色。
其他参数示例
current
centerobject(current,1)
30*getitemtype(item)
duniform(0,255)
getlabelnum(item,"mylabel")
50
应用背景
用来在仿真运行期间动态地改变实体颜色。
常用来根据特定颜色的已知三原色输入来设定某一特定颜色。
也常用来显示阴影差异程度,较低的指数比较高的指数颜色更暗。
Set Color by Itemtype (根据实体类型设定颜色)
默认模板
Assign item a unique color according to its itemtype number:
case 1: colorred(item); break;
case 2: coloryellow(item); break;
case 3: colorblue(item); break;
default: colorblack(item);
Notes:
Case instances must be a valid itemtype number.
Additional cases may be added as needed.
Use "current" to access the current involved object.
Use "item" to access the involved flowitem as an fsnode*.
根据临时实体 item 的实体类型号设定一种独特的颜色。
case 1: colorred(item); break;
case 2: coloryellow(item); break;
case 3: colorblue(item); break;
default: colorblack(item);
注释:
每种case必须是一个有效的临时实体类型号。
根据需要可以添加case。
用“current(当前)”来获得当前涉及的实体。
用“ item(临时实体)”作为一个fsnode*(flexsim节点指针)来获得涉及的临时实体。
详细说明
每种case代表一种特定的实体类型。采用所示的语句为那种case的实体调用改变颜色函数。
如果涉及的实体的类型在切换语句中没有对应的情况条件,将运行默认的声明,这将把此种情况的临时实体指定为黑色。
采用正确的表述语句可以添加或者移除case.
其他参数示例
case 8: colorwhite(item); break;
case 24: colorsilver(item); break;
case 17: colorgray(item); break;
case 2: colorblack(item); break;
default: colorpink(item);
应用背景
用来根据涉及的临时实体的实体类型改变实体的颜色。
Set Color by Label (根据标签设定颜色)
默认模板
Assign item a unique color according to the value of a label named "labelname":
case 1: colorred(item); break;
case 2: coloryellow(item); break;
case 3: colorblue(item); break;
default: colorblack(item);
Notes:
Case instances must be a valid itemtype number.
Additional cases may be added as needed.
Use "current" to access the current involved object.
Use "item" to access the involved flowitem as an fsnode*.
根据一个名为“labelname”的标签的值为临时实体item指定唯一的颜色。
case 1: colorred(item); break;
case 2: coloryellow(item); break;
case 3: colorblue(item); break;
default: colorblack(item);
注释:
每种case都必须是一个有效的临时实体类型号。
可根据需要添加附加case。
用“current(当前)”来获得当前涉及的实体。
用“ item(临时实体)”作为一个fsnode*(flexsim节点指针)来获得涉及的临时实体。
详细说明
每种case代表一个特定的实体类型。采用所示的语句为那种情况调用改变颜色函数。
如果涉及实体的类型没有在各种情况切换中有一个对应的情况,将运行默认的声明,这将把此种情况的临时实体指定为黑色。
采用正确的表述语句可以添加或移除case。
其他参数示例
case 9: colorwhite(item); break;
case 16: colorsilver(item); break;
case 1: colorgray(item); break;
case 33: colorblack(item); break;
default: colorpink(item);
应用背景
用来根据涉及的临时实体上的标签来改变实体的颜色。
Set Itemtype and Color (设定实体类型和颜色)
默认模板
Assign item the itemtype number duniform(1,3) and give each itemtype a unique color.
为临时实体item指定一种实体类型号duniform(1,3),并为每种实体类型指定唯一的颜色。
详细说明
将特定实体的实体类型设定为特定值,并给下列实体类型如下的颜色:
1:红, 2:绿,3:蓝,4:黄,5:紫,6:青,
所有其他:白
其他参数示例
duniform(1,7)
4
应用背景
用来设定每个临时实体的实体类型,通常采用一个随机分布,并根据实体类型改变每种实体的颜色。
Write to Table (1) (写入表中(1))
默认模板
Write to global table "mytable" row1 column 1 value 10.
向全局表“mytable”的行1列1写入值10。
详细说明
将全局表中某特定单元格设定为指定值。
确保指定的表名正确无误。
确保表中指定的单元格包含数值数据。
其他参数示例
content(current)
getlabelnum(current,"labelname")
应用背景
用来将信息存储到表中,以便以后使用。
Write to Table (2) (写入表中(2))
默认模板
As each flowitem enters, sequentially write a new row of a global table named "mytable". The global table has 4 columns with the following array of datatypes (1=number, 2=string) {2, 1, 1, 1} assigned to each column. The following settable commands will define what is actually written to the global table.
settablenum(tablename,rows,1,getname(item));
settablenum(tablename,rows,2,time());
settablenum(tablename,rows,3,getitemtype(item));
settablenum(tablename,rows,4,getlabelnum(item,"labelname"));
Notes:
The number of rows in the table will be set back to one as the first flowitem enters.
The number of rows in the table will be incremented as each additional flowitem enters.
The new value will always be written to the last row in the table, creating a history of values.
The example needs a table with four columns:
Column 1 is the name of the entering flowitem.
Column 2 is the time that the flowitem entered this object.
Column 3 is the itemtype of the flowitem.
Column 4 is the value of a label named "labelname"
随着每个临时实体进入,在名为“mytable”的全局表中顺序地写入新的一行。全局表有4列,每列被指定为如下的数据类型(1=数值,2=字符串)数组{2, 1, 1, 1}。下列的设定表命令定义具体向全局表写入的内容。
settablenum(tablename,rows,1,getname(item));
settablenum(tablename,rows,2,time());
settablenum(tablename,rows,3,getitemtype(item));
settablenum(tablename,rows,4,getlabelnum(item,"labelname"));
注释:
在第一个临时实体进入时,表的行数将被重新设置为1。
随着每个后续的临时实体的进入,表的行数将不断增加。
新值总是被填写于表的最后一行,创建一个数值的历史记录。
此例需要一个4列的表:
列1是进入的临时实体的名称。
列2是临时实体进入此实体的时间。
列3是临时实体的实体类型。
列4是标签“labelname”的量值。
详细说明
创建一个表,每次调用此函数时都向表中添加一行。
每添加一行,都运行此命令,而将变量行作为一个指向正在添加的当前行的引用。
将添加给特定临时实体的给定信息添加到每行的各列中。
确保指定的表名正确无误。
确保表中指定单元格包含数字数据。
其他参数示例
settablenum(tablename,rows,1,time());
settablenum(tablename,rows,2,content(current));
settablenum(tablename,rows,3,getlabelnum(item,”labelname”));
应用背景
用来在每次调用此函数时,记录一个表的值来显示模型中特定变量的状态。
Send Message (发送消息)
默认模板
Send a message to centerobject(current,1) . Pass the current object reference as "msgsendingobject", the value tonum(item) as "msgparam(1)", the value port as "msgparam(2)" and the value 3 as "msgparam(3)".
发送一条消息给centerobject(current,1)。用“msgsendingobject”传递当前实体的引用,用“msgparam(1)”传递tonum(item) 的值,用“msgparam(2)”传递port的值,用“msgparam(3)”传递值“3”。
详细说明
在运行任何其它代码之前,立即执行指定实体的消息触发器中的代码。
这三个指定的值可以从消息触发器中引用。当需要了解某些特定的数字时,如端口号、实体类型或容量,就需要用到此命令。
其他参数示例
current
outobject(current,2)
inobject(current,1)
node("/Processor1",model())
content(current)
应用背景
用来立即执行特定实体中的一段代码。 常用来按一定顺序执行命令以产生期望的结果。
高级功能:由于这些触发器被触发有一定的顺序,有些命令需要从消息触发器,而不是从其它域段中调用,如请求操作员的命令。
Send Delayed Message (发送延迟消息)
默认模板
Send a delayed message to centerobject(current,1) in 0 time units from now. Pass the current object reference as "msgsendingobject", the value tonum(item) as "msgparam(1)", the value port as "msgparam(2)" and the value 3 as "msgparam(3)".
从当前算起在0时间单位内,发送一个延迟消息给centerobject(current,1)。用“msgsendingobject”传递当前实体的引用,用“msgparam(1)”传递tonum(item) 的值,用“msgparam(2)”传递port的值,用“msgparam(3)”传递值“3”。
详细说明
在经过一段指定的仿真时间长度后,执行指定实体的消息触发器中的代码。
其他参数示例
current
outobject(current,2)
inobject(current,1)
node("/Processor1",model())
content(current)
应用背景
用来在一段给定的时间延迟期后运行一段代码。
常用来重复地从一实体向自身发送延迟消息,目的是每隔X时间单位就运行一次某段代码。
Conditional Message (条件消息)
默认模板
If true send a message to centerobject(current,1) in 0 time units from now. Pass the current object reference as "msgsendingobject", the value tonum(item) as "msgparam(1)", the value port as "msgparam(2)" and the value 3 as "msgparam(3)".
如果条件为真,在从现在算起的0时间内发送一条消息给centerobject(current,1)。用“msgsendingobject”传递当前实体的引用,用“msgparam(1)”传递tonum(item) 的值,用“msgparam(2)”传递port的值,用“msgparam(3)”传递值“3”。
详细说明
“真”被一个诸如getitemtype(item) > 5,或getlabelnum(current,"mylabel")的条件表达式所替代。
如果临时实体的类型号大于5,getitemtype(item) > 5将返回“真”。
getlabelnum(current,"mylabel")将检查当前实体上的标签“mylabel”是否不等于(真)或等于(假)0。
如果条件表达式为真,在指定的仿真时间过去后,执行指定实体的消息触发器里的代码。
如果指定仿真时间为0,则在执行其它任何代码之前,立即执行消息触发器的代码。
这三个指定的值可以从消息触发器中引用。当需要了解某些特定的数字时,如端口号、实体类型或容量,就需要用到此命令。
其他参数示例
current
outobject(current,2)
inobject(current,1)
node("/Processor1",model())
content(current)
应用背景
只有在条件表达式为真的情况下,用来在经过一段特定的时间延迟后运行某段代码。
Sort by Ascending Itemtype (按实体类型升序排列)
默认模板
Sort entering flowitems in ascending order according to itemtype (lower numbers to the front of the queue).
Note: if you want the flowitems to leave according to their position in the queue, downstream objects must pull with a "Pull Requirement" that selects the first in queue.
对进来的临时实体,根据实体类型进行升序排列(低数值排在队列的前面)。
注释:如果需要让临时实体按照它们在暂存区中的位置逐个离开,则下游的实体必须用 “Pull Requirement(拉入条件)”来进行拉动,该请求将会选择队列中的第一个临时实体。
详细说明
每个实体进入时,此命令都将进入的临时实体的实体类型与暂存区内的第一个临时实体进行比较。如果它的实体类型号大于暂存区第一个临时实体的,就和下一个比较,如此依次比较,直到队列的末尾,如果一旦发现一个具有比它更大的实体类型的实体,就停止比较,并将它排到那个实体的位置去。
此命令将把较低类型号的实体排到队列的前面。
应用背景
用来根据临时实体的类型对它们进行排序,目的是在实体中对它们进行优先级排序或组织。
Sort by Descending Itemtype (按实体类型降序排列)
默认模板
Sort entering flowitems in descending order according to itemtype (higher numbers to the front of the queue).
Note: if you want the flowitems to leave according to their position in the queue, downstream objects must pull with a "Pull Requirement" that selects the first in queue.
对进入的临时实体,按照实体类型的降序(高数值在暂存区前部)进行排序。
注释:如果需要让临时实体按照它们在队列中的位置逐个离开,必须由下游实体用 “Pull Requirement(拉入条件)”来拉动,这将选择队列中的第一个实体。
详细说明
当每个实体进入时,此命令将它的实体类型与暂存区内第一个实体的类型进行比较。如果它的实体类型小于暂存区的第一个实体的类型,就与下一个比较,依次比较下去,直到暂存区的末尾。一旦发现有比它更小的实体类型的实体,就将它排到那个实体的位置去。
此命令将具有较大类型号的临时实体排到暂存区的前面。
应用背景
用来根据临时实体的实体类型对它们进行排序,目的是在实体中对它们进行优先级排序或者组织。
Notify Visual Tool of Entry (通告可视化工具进入)
默认模板
If true then notify the VisualTool object up(current) that the flowitem item has just entered.
如果为true(真),就通告可视化工具实体up(current),临时实体item已经进入了。
详细说明
所引用的实体必须是一个可视化工具类的实体。
表达式为“真”意味着允许显示通告,这取决于临时实体从哪个输入端口进入。例如,如果从输入端口1进入的临时实体在先前已经通知可视化工具它的进入,但那些来自端口2和3的临时实体还没有通知,则“ 真”表达式应为“port == 2 || port == 3”。
其他参数示例
port == 2 || port == 3
up(up(current))
centerobject(current,2)
node("/VisualTool2",model())
first(item)
rank(item,3)
应用背景
用来进行统计收集。
Notify Visual Tool of Exit (通告可视化工具退出)
默认模板
If true then notify the VisualTool object up(current) that the flowitem item has just exited.
如果为true(真),则通知视化工具实体up(current) 临时实体item已经退出。
详细说明
所引用的实体必须是一个可视化工具类的实体。表达式为“真 ”意味着允许显示通告,这取决于临时实体从哪个输出端口离开。例如,如果正在从输出端口1发送的临时实体还未“离开”可视化工具,而那些从端口2和3发送的临时实体将要离开,则 “真”表达式应该为“port == 2 || port == 3”。
其他参数示例
port == 2 || port == 3
up(up(current))
centerobject(current,2)
node("/VisualTool2",model())
first(item)
rank(item,3)
应用背景
用来进行统计收集。
Write to Tracelist (写入追踪列表)
默认模板
Write the name of the current object to column 1, and write getentrytime(item) to column 2 of the flowitem's tracelist table. Each flowitem will be given a variable named "tracelist" which can be viewed as a table by double-clicking on the flowitem. A new row will be added to the tracelist table whenever it is written to.
将当前实体的名称写入临时实体追踪列表的列1,将getentrytime(item)写入列2。每个临时实体都会被赋给一个叫做“tracelist(追踪列表)”的变量,它是一个表,双击临时实体可以查看到。当向追踪列表中写入时,就添加一个新行。
详细说明
在涉及的临时实体的参量视窗中创建一个表,在第一列显示当前实体的名称,在第二列显示一个双精度值(默认的是停留时间,time()-getentrytime(item))。
其他参数示例
time()
getentrytime()
应用背景
用来将一个临时实体的流动历史记录以表的格式输出到其参数视窗中。
Dump Tracelist to a Table (将跟踪列表填入表)
默认模板
Write the flowitem’s tracelist table to a global table named "mytable" Each new flowitem’s tracelist will be written to the global table at the end of the previous flowitem’s list. The name of the flowitem will be written in column 1. Therefore, the global table will have 3 columns (flowitem name, object name, staytime).
将临时实体的跟踪列表写入名为“mytable”的全局表。每个新的临时实体的跟踪列表都将紧接前一个临时实体的列表写入此表。临时实体的名称写在第一列。因此,这个全局表有三列(临时实体名称、实体名称、停留时间)。
详细说明
当第一个临时实体进入时,将表的大小调整为[1,3],并复制其跟踪列表信息到此表。 每个跟随第一个之后进入的临时实体,都在表中添加一行,并复制其跟踪列表信息到此表。 确保指定的表已经存在。 确保指定的表名正确无误。
应用背景
用来将模型中所有临时实体的跟踪列表写入一个全局表。
Increment Label (递增标签)
默认模板
ncrement the label on item called"labelname" by 1.
(Remember to first create the label in the Properties window of the object - or use the "addlabel" command)
将临时实体item上的标签“labelname”递增1。
请记住首先在实体属性视窗中创建标签,或者可使用“addlabel”命令创建。)
详细说明
将指定实体上具有指定名称的标签递增指定的值。
如果此标签名不存在,此功能不执行任何操作。
使用负数可实现标签递减。
其它参数示例
Current
centerobject(current,3)
5
gettablenum("mytable",2,3)
content(current)
time()
-12
应用背景
用来更新已在某实体上创建的标签。
Close and Open Ports (关闭和打开端口)
默认模板
If true then closeinput ports of the current object.
Notes:
You may closeinput or openinput ports of an object, and you may closeoutput or openoutput ports of an object.
If you experience problems opening/closing ports in this trigger, use senddelayedmessage() to cause the ports to change in 0 seconds.
Use "current" to access the current object.
Use "item" to access the involved flowitem.
Use "port" to reference the port through which the item passed.
如果为 true(真),则对 current(当前)实体执行closeinput(关闭输入)端口的操作。
注释:
可以打开或关闭一个实体的输入端口,也可以打开或关闭其输出端口。
如果这个触发器函数在打开或关闭端口时遇到问题,可使用senddelayedmessage()命令在0秒内改变端口。
使用“current(当前)”来获取当前实体。
使用“item(临时实体)”获得涉及的临时实体。
使用“port(端口)”作为指向临时实体所通过的端口的引用。
详细说明
打开或关闭一个实体的输入或输出端口。如果一个实体的输出端口被关闭,在这些端口被重新打开前,不再发送任何临时实体。如果一个实体的输入端口被关闭,在这些端口被重新打开前,不再接收任何临时实体。
如果条件为真,则打开或关闭输入或输出端口。
用诸如content(current) > 5 或getlabelnum(current,"mylabel")这样的条件表达式代替“真”。
如果当前实体中的临时实体数目大于5,则表达式content(current) > 5返回“真 ”。
getlabelnum(current,"mylabel")将检查当前实体上的标签 “mylabel”是否不等于(真)或等于(假)0。 如果没有用条件表达式代替真,则每次调用此函数都将打开或关闭输入/输出端口。
其它参数示例
inobject(current,1)
outobject(current,3)
centerobject(current,2)
应用背景
用来根据特定条件控制实体中的临时实体流。
常用来关闭一个实体的输入端口,然后在另一个下游实体中重新打开那些输入端口。
Update Component List (更新组成列表)
默认模板
Set the component list table of a Combiner based on a global table named "tablename" where the column reference is defined by the itemtype of the first flowitem to enter. It is assumed that the global table has a row for each input port number 2 and higher.
根据名为“tablename”的全局表设定合成器的组成列表,其中的列的引用由第一个进入的临时实体的类型定义。每个大于等于2的端口号在在全局表中都对应一行。
详细说明
此触发器仅被合成器的进入触发器使用。
该容器的临时实体(从端口1进来的临时实体)的类型与全局表的列数相关。
全局表的每行均与合成器的某个输入端口相对应。确保每个大于等于2号的输入端口在表中都有对应的行。
其它参数示例
应用背景
用来动态地改变某个合成器中不同的容器所需要的临时实体数目。
通常用于装配生产线上,不同的部件需要不同数量的各种特定装配组件。
Change 3D Shape (改变3D形状)
默认模板
Change the 3D shape of item object to shape index number 1.
将临时实体item的3D形状改变为形状序号1所代表的形状。
详细说明
改变特定实体的3D形状。
形状序号可以在导入媒体文件下的工具箱中找到。每个导入的形状或图像都有一个数字来代表其形状序号。
如果需要用此函数改变实体的形状,而要改变成的3D形状还没有在“预先导入3D图形图像”中,就必须首先添加这些形状或图像。
其它参数示例
inobject(current,1)
outobject(current,2)
getshapeindex("fs3d//")
getshapeindex("C://Program Files//Flexsim//fs3d//")
应用背景
用来动态地改变实体的形状。
Update Queue’s Batch Size (更新暂存区的批量大小)
默认模板
At the beginning of each batch, reset the queue’s batch size to:
getlabelnum(item,"labelname")
Note: This trigger is only applicable to a queue object.
在每次分批开始时,将暂存区的批次大小设为:
getlabelnum(item,"labelname")
注释:这个触发器只应用于暂存区实体。
详细说明
此触发器在暂存区的进入时刻使用。
如果进入的临时实体是暂存区中唯一的临时实体(打包开始),将暂存区的目标批量大小改为指定值。
只有选择了“清空后接收下批” 才能正常工作。这种方式将使暂存区在接受下一批的第一个临时实体之前清空整个暂存区。
确保给定的值返回的是整数。如果批量大小为双精度值,则程序永远无法达到那个值。
其它参数示例
gettablenum("GlobalTable1",getitemtype(item),1)
getlabelnum(current,"mylabel")
应用背景
用来动态地改变暂存区批量大小。
Update Processor’s Max Content (更新处理器最大容量)
默认模板
Dynamically set the ‘Maximum Content’ of the processor to:
getlabelnum(item,"labelname")
Note: This trigger is only applicable to a processor object.
动态设定处理器的“最大容量 ”为:
getlabelnum(item,"labelname")
注释:此触发器只应用于处理器实体。
详细说明
将处理器的最大容量改变为指定值。
其它参数示例
gettablenum("GlobalTable1",getitemtype(item),1)
getlabelnum(current,"mylabel")
应用背景
用来在仿真运行期间动态地改变处理器的最大容量。
A List of Common Commands (普通命令列表)
默认模板
Add, delete or modify the commands as desired:
setloc(item,0,0,0);
setrot(item,0,0,0);
setsize(item,1,1,1);
setcolor(item,255,0,0);
setname(item,"newname")
setitemtype(item,1);
setlabelnum(item,"labelname",1);
setlabelstr(item,"labelname","Hello");
inc(label(item,"labelname"), 1);
sendmessage(current,current,1,2,3);
senddelayedmessage(current,0,current,1,2,3);
settablenum("tablename",1,1,10);
settablestr("tablename",1,1,"Hello");
inc(gettablecell("tablename",1,1), 1);
destroyobject(shape(item)); //delete shape when updating shapeindex
setnodenum(shapeindex(item),22);
根据需要添加、删除或更改命令:
setloc(item,0,0,0);
setrot(item,0,0,0);
setsize(item,1,1,1);
setcolor(item,255,0,0);
setname(item,"newname")
setitemtype(item,1);
setlabelnum(item,"labelname",1);
setlabelstr(item,"labelname","Hello");
inc(label(item,"labelname"), 1);
sendmessage(current,current,1,2,3);
senddelayedmessage(current,0,current,1,2,3);
settablenum("tablename",1,1,10);
settablestr("tablename",1,1,"Hello");
inc(gettablecell("tablename",1,1), 1);
destroyobject(shape(item)); //delete shape when updating shapeindex
setnodenum(shapeindex(item),22);
详细说明
设定位置
设定方向
设定尺寸
设定颜色
设定名称
设定数值标签
设定字符串标签
递增数值标签
发送消息
发送延迟消息
设定数值型表单元格
设定字符串型表单元格
递增表的数值单元格
改变3D形状
其它参数示例
查看使用这些命令的其它触发器
应用背景
用来在一个选取选项中执行多个命令。
XE "消息触发器" XE "Senddelayedmessage" XE "Sendmessage" XE "Msgparam" XE "Msgsendingobject" 消息触发器
概述:
当sendmessage 或senddelayedmessage命令将一条消息发送到该实体时,执行此函数。每个命令可以传递三个用户定义的参数。
存取变量:
current :当前实体
msgsendingobject :发送此消息的实体
msgparam(1) :消息的第一个参数
msgparam(2) :消息的第二个参数
msgparam(3) :消息的第三个参数
Do Nothing (无操作)
默认模板
Do nothing
无操作
详细说明
当调用这个触发器的时候,不会执行任何命令。
应用背景
在此触发器执行期间没有附加逻辑要求时采用此函数。
Close and Open Ports Based on Case (根据不同情形打开与关闭端口)
默认模板
Switch on the value passed in as the third parameter.
case 1: closeoutput(current); break;
case 2: openoutput(current); break;
case 3: closeinput(current); break;
case 4: openinput(current); break;
根据第三个参数传递进来的值进行切换:
case 1: closeoutput(current); break;
case 2: openoutput(current); break;
case 3: closeinput(current); break;
case 4: openinput(current); break;
详细说明
根据第三个参数传递进来的值打开或关闭端口。
其它参数示例
case 6: openinput(current); break;
case 11: openoutput(current); break;
case 14: closeinput(current); break;
case 19: closeoutput(current); break;
应用背景
根据消息触发器中指定的参数来打开或关闭输入或输出端口。
常与延迟消息一起使用,在某件事发生后的特定时间打开或关闭端口。
Close and Open Ports (打开与关闭端口)
默认模板
If true then closeinput ports of the current object.
Notes:
You may closeinput or openinput ports of an object, and you may closeoutput or openoutput ports of an object.
如果为 true (真)就对current (当前实体)执行 closeinput(关闭输入)端口操作。
注释:
可以打开或关闭一个实体的输入端口,也可以打开或关闭其输出端口。
详细说明
打开或关闭一个实体的输入或输出端口。如果一个实体的输出端口被关闭,在这些端口被重新打开前,不再发送任何临时实体。如果一个实体的输入端口被关闭,在这些端口被重新打开前,不再接收任何临时实体。
如果条件为真,则打开或关闭输入或输出端口。
用诸如content(current) > 5 或getlabelnum(current,"mylabel")这样的条件表达式代替“真”。
如果当前实体中的临时实体数目大于5,则表达式content(current) > 5返回“真”。
getlabelnum(current,"mylabel")将检查当前实体上的标签“mylabel”是否不等于0(真)或等于0(假)。
如果没有用条件表达式代替真,则每次调用此函数都将打开或关闭这些输入/输出端口。
其它参数示例
inobject(current,1)
outobject(current,3)
centerobject(current,2)
应用背景
用来根据特定的条件控制实体之间的临时实体流。
常用来关闭一个实体的输入端口,然后在另一个下游实体中重新打开这些输入端口。
Create Flowitems(创建临时实体)
默认模板
Create msgparam(1)flowitems and move them into the current object. The flowitems created will be copies of the flowitem class ranked msgparam(2) in the FlowItem Bin.
创建msgparam(1)个临时实体,并将它们移入current (当前)实体。创建的临时实体是临时实体箱中排序号为msgparam(2) 的临时实体类的复制品。
详细说明
创建指定数量的临时实体并将它们移入指定的实体。
每次创建一个临时实体,随后就移入目标实体,并触发这个实体的进入触发器。
在临时实体箱中,临时实体类的序号是从上到下显示的顺序数,第一个临时实体(可能是FlexsimBox)排号为1,列表如此向下依次类推。
其它参数示例
duniform(1,5)
centerobject(current,2)
model()
12
应用背景
用来在实体中创建一定数量的临时实体,而不用发生器。
Change 3D Shape(改变3D形状)
默认模板
Change the 3D shape of current object to shape index number1.
改变current (当前)临时实体的3D形状为形状序号1 的形状。
详细说明
改变指定实体的3D形状。
形状序号可以在导入媒体文件下的工具箱中找到。每个导入的形状或图像都有一个号码来代表其形状序号。
如果需要用此函数改变实体的形状,而要改变成的3D形状还没有在“预先导入3D图形图像”中,就必须首先添加这些形状或图像。
其它参数示例
inobject(current,1)
outobject(current,2)
getshapeindex(“fs3d//”)
getshapeindex(“C://Program Files//Flexsim//fs3d//”)
应用背景
用来动态地改变一个实体的形状。
XE "处理完成触发器" 处理结束触发器
概述:
每当一个临时实体完成它的处理时间,就执行此代码。
变量操作:
current :当前实体
item :完成处理时间的实体
Do Nothing (无操作)
默认模板
Do nothing
无操作
详细说明
调用这个触发器时不执行任何命令。
应用背景
在此触发器执行期间没有附加逻辑要求时采用此函数。
Set Location(设定位置)
默认模板
Set the location of item to:
X=
Y=
Z=
将临时实体item的位置设定为:
X=
Y=
Z=
详细说明
将指定实体的全局坐标设定为三个指定值。
其它参数示例
current
gettablenum(“mytable”,2,3)
getlabelnum(item,“mylabel”)
6
应用背景
用来设定一个实体的位置。
如果指定实体是临时实体,则指定位置是相对当前实体而言的。
Set Rotation (设定转角)
默认模板
Set the rotation of item to:
X= 0
Y= 0
Z= 0
设定临时实体item的转角为:
X= 0
Y= 0
Z= 0
详细说明
将指定实体的旋转角度设定为三个指定值。
其它参数示例
current
gettablenum(“mytable”,4,4)
getlabelnum(item,“mylabel”)
get(spatialrz(current))+90
7
应用背景
用来设定一个实体的方位角度。
Set Size(设定尺寸)
默认模板
Set the size of item to:
X=
Y=
Z=
将临时实体item的尺寸设定为:
X=
Y=
Z=
详细说明
将指定实体的尺寸设定为三个指定值。
其它参数示例
gettablenum(“mytable”,5,6)
get(spatialsx(item))+4
4
应用背景
用来设定实体的尺寸。
通常,在一个实体的尺寸进行动态变化,以使得仿真的视觉效果更真实时,采用此功能。
Set Color(设定颜色)
默认模板
Assign item the color:
colorrandom
Note: To assign a random color use colorrandom, otherwise
use one of the standard color commands below:
colorred colorpink
colorgray colorgreen
colorblue colorblack
coloryellow colorwhite
colororange colorteal
colorpurple coloraqua
colorbrown colorsilver
colorlime colorlightblue
指定临时实体item的颜色:
colorrandom(赋一个随机颜色)
注释:使用colorrandom指定随机颜色,也可以使用下列的标准颜色命令:
colorred(颜色红) colorpink(颜色粉红)
colorgray (颜色灰) colorgreen(颜色绿)
colorblue (颜色蓝) colorblack(颜色黑)
coloryellow (颜色黄) colorwhite(颜色白)
colororange (颜色橘黄) colorteal(颜色凫蓝)
colorpurple(颜色紫) coloraqua(颜色浅绿)
colorbrown (颜色褐) colorsilver(颜色银)
colorlime (颜色酸橙) colorlightblue(颜色淡蓝)
详细说明
在指定实体上调用一个函数来改变它的颜色。
为了在Flexsim中改变一个实体的颜色,要改变颜色的3d文件中的那部分必须没有被指定素材。
如果是3DS文件,则没有素材的那部分还必须在有指定素材的所有其它部分之前,为的是改变它们的颜色。
其它参数示例
参见默认模板
应用背景
用来在仿真运行期间动态地改变实体的颜色。
常用来从列表中指定一个随机颜色或某特定颜色,而无须找到所需颜色的三原色量值。
Set Color (rgb)(设定颜色(rgb))
默认模板
Assign item a color using red, green, blue (rgb) inputs:
Red=255
Green=0
Blue=0
Note: use an index number between 0 and 255 for each color.
使用红、绿、蓝(rgb)输入方式来指定临时实体item的颜色:
Red=255
Green=0
Blue=0
注释:每种颜色指数均在0~255之间。
详细说明
采用0~255的红、绿、蓝三原色方式,在特定实体上调用设定颜色函数来改变其颜色。
为了在Flexsim中改变一个实体的颜色,要改变颜色的3d文件中的那部分必须没有被指定素材。
如果是3DS文件,则没有素材的那部分还必须在有指定素材的其它部分之前,为的是改变它们的颜色。
其它参数示例
current
centerobject(current,1)
30*getitemtype(item)
duniform(0,255)
getlabelnum(item,“mylabel”)
50
应用背景
用来在仿真运行期间动态地改变实体的颜色。
常用来根据特定颜色的已知三原色输入设定某一特定颜色。
也常用来显示阴影差异程度,较低的指数比较高的指数颜色更暗。
Set Itemtype(设定实体类型)
默认模板
Assign item the following itemtype number: duniform(1,3).
将临时实体item指定为如下实体类型号:duniform(1,3)。
详细说明
将指定实体的实体类型设定为指定值。
其它参数示例
getlabelnum(current,“mylabel”)
gettablenum(“mytable”,3,4)
12
应用背景
用来在仿真运行过程中动态地改变临时实体的实体类型。
Set Name(设定名称)
默认模板
Assign item the following name: “newname”.
指定临时实体item的名称为 “newname”。
详细说明
将指定实体的名称设定为指定值。
其它参数示例
concat(“name”,numtostring(getlabelnum(current,“mylabel”),0,0))
concat(“anothername”,getlabelstr(current,“mystringlabel”))
应用背景
用来在仿真运行期间改变实体的名称。
常在此实体被一个下游实体按名称引用时采用此函数。
Create and Initialize Label(创建和初始化标签)
默认模板
Create a label called “labelname” on item and initialize it with a value of duniform(1,3).
在临时实体item上创建一个名为 “labelname”的标签,并初始化其值为duniform(1,3)。
详细说明
给指定实体添加一个新的指定名称的数值标签,且将其设定为指定值。
如果此标签已经存在,则此函数将把此标签设定为指定值。
其它参数示例
12
getlabelnum(current,“mylabel”)
content(current)
time()
应用背景
用来给一个实体添加一个数字标签并进行初始化,而不是在属性菜单中添加标签,以后再给它赋值。
Set a Label(设定一个标签)
默认模板
Set a label called “labelname” on item to the value duniform(1,3).
(This option assumes that the label has already been created.)
设定临时实体 item上名为“labelname”的标签的值为 duniform(1,3)。
(此功能的前提假设条件是标签已被创建。)
详细说明
将指定实体上某指定名称的标签设定为指定值。
如果此标签名不存在,则此函数不做任何操作。
其它参数示例
5
gettablenum(“mytable”,2,3)
content(current)
time()
应用背景
用来更新已在某实体上创建的标签。
Write to Table (1) (写入表中(1))
默认模板
Write to global table “mytable” row 1 column 1 value 10.
向全局表“mytable” 的行1 列1 中写入值10。
详细说明
将全局表中某特定单元格设定为指定值。
确保指定的表的名称正确无误。
确保表中指定的单元格包含数字数据。
其它参数示例
content(current)
getlabelnum(current,“labelname”)
应用背景
用来将信息存储到表中以备以后使用。
Send Message(发送消息)
默认模板
Send a message to centerobject(current,1) . Pass the current object reference as “msgsendingobject”, the value tonum(item) as “msgparam(1)”, the value 2 as “msgparam(2)” and the value 3 as “msgparam(3)”.
发送一条消息给实体centerobject(current,1)。用参数“msgsendingobject”传递当前实体的引用,用参数“msgparam(1)”传递tonum(item) 的值,用参数“msgparam(2)”传递值2 ,用参数“msgparam(3)”传递值3 。
详细说明
在运行任何其它代码之前,立即执行指定实体的消息触发器中的代码。
这三个指定的值可以从消息触发器中引用。当需要了解某些特定的数字时,如端口号、实体类型或容量,就需要用到此命令。
其它参数示例
current
outobject(current,2)
inobject(current,1)
node(“/Processor1”,model())
content(current)
应用背景
用来立即执行特定实体中的一段代码。
常用来按一定顺序执行命令以产生期望的结果。
Send Delayed Message(发送延迟消息)
默认模板
Send a delayed message to centerobject(current,1) in 0 time units from now. Pass the current object reference as “msgsendingobject”, the value tonum(item) as “msgparam(1)”, the value 2 as “msgparam(2)” and the value 3 as “msgparam(3)”.
从现在算起,在0 时间单位内发送一个延迟消息给centerobject(current,1)。用参数“msgsendingobject”传递当前实体的引用,用参数“msgparam(1)”传递tonum(item) 的值,用参数“msgparam(2)”传递值2 ,用参数“msgparam(3)”传递值3 。
详细说明
在指定的仿真时间长度之后,在指定实体的消息触发器中执行此代码。
其它参数示例
current
outobject(current,2)
inobject(current,1)
node(“/Processor1”,model())
content(current)
应用背景
用来在一段给定的时间延迟期后运行一段代码。
Conditional Message(条件消息)
默认模板
If true send a message to centerobject(current,1) in 0 time units from now. Pass the current object reference as “msgsendingobject”, the value tonum(item) as “msgparam(1)”, the value 2 as “msgparam(2)” and the value 3 as “msgparam(3)”.
如果为真,从现在算起,在0时间单位内,发送一条消息给centerobject(current,1)。用参数“msgsendingobject”传递当前实体的引用,用参数“msgparam(1)”传递tonum(item)的值,用数参“msgparam(2)”传递值2 ,用参数“msgparam(3)”传递值3 。
详细说明
“真”被一个诸如getitemtype(item) > 5,或getlabelnum(current,"mylabel")的条件表达式所替代。
如果临时实体的实体类型号大于5,getitemtype(item) > 5将返回“真”。
getlabelnum(current,"mylabel")将检查当前实体上的标签“mylabel”是否不等于0(真)或等于0(假)。
如果条件表达式为真,在指定的仿真时间过去后,执行指定实体的消息触发器里的代码。
如果指定仿真时间为0,则在执行其它任何代码之前,立即执行消息触发器的代码。
这三个指定的值可以从消息触发器中引用。当需要了解某些特定的数字时,如端口号、实体类型或容量,就需要用到此命令。
其它参数示例
current
outobject(current,2)
inobject(current,1)
node(“/Processor1”,model())
content(current)
应用背景
只有在条件表达式为真的情况下,用来在一段给定的时间延迟期后运行一段代码。
Increment Label(递增标签)
默认模板
Increment the label on item called “labelname” by 1.
(Remember to first create the label in the Properties window of the object – or use the “addlabel” command)
将实体 item 上名为 “labelname”的标签递增1 。
(请记住首先在实体属性视窗中创建标签,或者可使用“addlabel”命令创建。)
详细说明
将指定实体上具有指定名称的标签递增指定的值。
如果此标签名不存在,此功能不执行任何操作。
使用负数可实现标签递减。
其它参数示例
current
centerobject(current,3)
5
gettablenum(“mytable”,2,3)
content(current)
time()
-12
应用背景
用来更新已在某实体上创建的标签。
Close and Open Ports(打开与关闭端口)
默认模板
If true then closeinput ports of the current object.
Notes:
You may closeinput or openinput ports of an object, and you may closeoutput or openoutput ports of an object.
Use "current" to access the current object.
Use "item" to access the involved flowitem.
对进行端口操作。
如果为true(真),则对current (当前)实体执行closeinput(关闭输入)端口操作。
注释:
可以打开或关闭一个实体的输入端口,也可以打开或关闭其输出端口。
使用“current(当前)”来获取当前实体。
使用“item(临时实体)”来获取相关的临时实体。
详细说明
打开或关闭一个实体的输入或输出端口。如果一个实体的输出端口被关闭,在这些端口被重新打开前,不再发送任何临时实体。如果一个实体的输入端口被关闭,在这些端口被重新打开前,不再接收任何临时实体。
如果条件为真,则打开或关闭输入或输出端口。
用诸如content(current) > 5 或getlabelnum(current,"mylabel")这样的条件表达式代替“真”。
如果当前实体中的临时实体数目大于5,则表达式content(current) > 5返回“真”。
getlabelnum(current,"mylabel")将检查当前实体上的标签“mylabel”是否不等于0(真)或等于0(假)。
如果没有用条件表达式代替真,则每次调用此函数都将打开或关闭这些输入/输出端口。
其它参数示例
inobject(current,1)
outobject(current,3)
centerobject(current,2)
应用背景
用来根据特定条件控制实体间的临时实体流。
通常用来关闭一个实体的输入端口,然后在另一个下游实体中重新打开这些输入端口。
Change 3D Shape(改变3D形状)
默认模板
Change the 3D shape of item object to shape index number 1.
将临时实体item的3D形状改变为形状序号1 所代表的形状。
详细说明
改变指定实体的3D形状。
形状序号可以在导入媒体文件下的工具箱中找到。每个导入的形状或图像都有一个号码来代表其形状序号。
如果需要用此函数改变实体的形状,而要改变成的3D形状还没有在“预先导入3D图形图像 ”中,就必须首先添加这些形状或图像。
其它参数示例
inobject(current,1)
outobject(current,2)
getshapeindex(“fs3d//”)
getshapeindex(“C://Program Files//Flexsim//fs3d//”)
应用背景
用来动态地改变一个实体的形状。
XE "创建触发器" 创建触发器
概述:
第一次创建一个临时实体时执行此代码。
存取变量:
current :当前实体
item :被创建的实体
rownumber :一次到达对应的行数(如果有一次申请)
Do Nothing(无操作)
默认模板
Do nothing
无操作
详细说明
当调用此触发器时,不会执行任何命令。
应用背景
在此触发器执行期间没有附加逻辑要求时采用此函数。
Set Location (设定位置)
默认模板
Set the location of item to:
X=
Y=
Z=
将临时实体item的位置设定为:
X=
Y=
Z=
详细说明
将指定实体的全局坐标设定为三个指定值。
其它参数示例
current
gettablenum("mytable",2,3)
getlabelnum(item,"mylabel")
6
应用背景
用来设定一个实体的位置。
如果指定实体是临时实体,则指定位置是相对当前实体而言。
Set Rotation(设定转角)
默认模板
Set the rotation of item to:
X= 0
Y= 0
Z= 0
设定临时实体item的转角为:
X= 0
Y= 0
Z= 0
详细说明
将指定实体的转角设定为三个指定值。
其它参数示例
current
gettablenum("mytable",4,4)
getlabelnum(item,"mylabel")
get(spatialrz(current))+90
7
应用背景
用来设定一个实体的旋转角度。
Set Size(设定尺寸)
默认模板
Set the size of item to:
X=
Y=
Z=
将临时实体item的尺寸设定为:
X=
Y=
Z=
详细说明
将指定实体的尺寸设定为三个指定值。
其它参数示例
gettablenum("mytable",5,6)
get(spatialsx(item))+4
4
应用背景
用来设定一个实体的尺寸。
通常,在一个实体的尺寸进行动态变化,以使得仿真的视觉效果更真实时,采用此功能。
Set Itemtype(设定实体类型)
默认模板
Assign item the following itemtype number: duniform(1,3).
将临时实体item指定为如下实体类型号:duniform(1,3)。
详细说明
将指定实体的类型设定为指定值。
其它参数示例
getlabelnum(current,"mylabel")
gettablenum("mytable",3,4)
12
应用背景
用来在仿真运行过程中动态地改变临时实体的实体类型。
Set Name(设定名称)
默认模板
Assign item the following name: "newname".
指定临时实体item的名称为“newname”。
详细说明
将指定实体的名称设定为指定值。
其它参数示例
concat("name",numtostring(getlabelnum(current,"mylabel"),0,0))
concat("anothername",getlabelstr(current,"mystringlabel"))
应用背景
用来在仿真运行期间改变实体的名称。
如果该实体被一个下游实体按名称引用,则常采用此函数。
Create and Initialize Label(创建和初始化标签)
默认模板
Create a label called "labelname" on item and initialize it with a value of duniform(1,3).
在临时实体item上创建一个名为“labelname” 的标签,并初始化其值为duniform(1,3)。
详细说明。
给指定实体添加一个新的指定名称的数值标签,且将其设定为指定值。
如果此标签已经存在,则此函数将把此标签设定为指定值。
其它参数示例
12
getlabelnum(current,"mylabel")
content(current)
time()
应用背景
用来给一个实体添加一个数字标签并进行初始化,而不是在属性菜单中添加标签,以后再给它赋值。
Set a Label(设定一个标签)
默认模板
Set a label called "labelname" on item to the value duniform(1,3).
(This option assumes that the label has already been created.)
设定临时实体item上名为“labelname”的标签的值为duniform(1,3)。
(此功能的前提假设条件是标签已被创建。)
详细说明
设定指定实体上某指定名称的标签为指定值。
如果此标签名不存在,则此函数不做任何操作。
其它参数示例
5
gettablenum("mytable",2,3)
content(current)
time()
应用背景
用来更新已在某实体上创建的标签。
Set Color(设定颜色)
默认模板
Assign item the color:
Colorrandom
指定临时实体item的颜色:
Colorrandom (赋随即色)
注释:使用colorrandom命令指定一种随机颜色,否则,使用下列的标准颜色命令:
colorred(颜色红) colorpink(颜色粉红)
colorgray (颜色灰) colorgreen(颜色绿)
colorblue (颜色蓝) colorblack(颜色黑)
coloryellow (颜色黄) colorwhite(颜色白)
colororange (颜色橘黄) colorteal(颜色凫蓝)
colorpurple(颜色紫) coloraqua(颜色浅绿)
colorbrown (颜色褐) colorsilver(颜色银)
colorlime (颜色酸橙) colorlightblue(颜色淡蓝)
详细说明
在指定实体上调用一个函数以改变其颜色。
为了在Flexsim中改变一个实体的颜色,要改变颜色的3d文件中的那部分必须没有被指定素材。
如果是3DS文件,则没有素材的那部分还必须在有指定素材的其它部分之前,为的是改变它们的颜色。
其它参数示例
参见默认模板
应用背景
用来在仿真运行期间动态地改变实体的颜色。
常用来从列表中指定一个随机颜色或某特定颜色,而无须找到所需颜色的三原色量值。
Set Color (rgb)(设定颜色(rgb))
默认模板
Assign item a color using red, green, blue (rgb) inputs:
Red=255
Green=0
Blue=0
Note: use an index number between 0 and 255 for each color.
使用红、绿、蓝(rgb)输入方式来指定临时实体item的颜色:
Red=255
Green=0
Blue=0
注释:每种颜色指数均在0~255之间。
详细说明
采用0~255的红、绿、蓝三原色方式,在特定实体上调用设定颜色函数来改变其颜色。
为了在Flexsim中改变一个实体的颜色,要改变颜色的3d文件中的那部分必须没有被指定素材。
如果是3DS文件,则没有素材的那部分还必须在有指定素材的其它部分之前,为的是改变它们的颜色。
其它参数示例
current
centerobject(current,1)
30*getitemtype(item)
duniform(0,255)
getlabelnum(item,"mylabel")
50
应用背景
用来在仿真运行期间动态地改变实体的颜色。
常用来根据特定颜色的已知三原色输入来设定某一特定颜色。
也常用来显示阴影差异程度,较低的指数比较高的指数颜色更暗。
Set Color by Itemtype(按实体类型设定颜色)
默认模板
Assign item a unique color according to its itemtype number:
case 1: colorred(item); break;
case 2: coloryellow(item); break;
case 3: colorblue(item); break;
default: colorblack(item);
Notes:
Case instances must be a valid itemtype number.
Additional cases may be added as needed.
Use "current" to access the current involved object.
Use "item" to access the involved flowitem as an fsnode*.
根据临时实体item的类型为其指定唯一的颜色。
case 1: colorred(item); break;
case 2: coloryellow(item); break;
case 3: colorblue(item); break;
default: colorblack(item);
注释:
每种case都必须是一个有效的实体类型编号。
可根据需要添加附加case分支。
用“current(当前)”来获取当前涉及的实体。
用“ item(临时实体)”作为一个fsnode*(flexsim节点指针)来获取所涉及的临时实体。
详细说明
每种情况代表一种特定的实体类型。采用所示的语句为那种情况的实体调用改变颜色函数。
如果所涉及的实体的类型在切换语句中没有对应的case条件,将运行默认的声明,这将把此种情况的临时实体指定为黑色。
采用正确的表述语句可以添加或移除case分支。
其它参数示例
case 8: colorwhite(item); break;
case 24: colorsilver(item); break;
case 17: colorgray(item); break;
case 2: colorblack(item); break;
default: colorpink(item);
应用背景
用来根据所涉及的临时实体的类型改变实体的颜色。
Set Color by Label(根据标签设定颜色)
默认模板
Assign item a unique color according to the value of a label named "labelname":
case 1: colorred(item); break;
case 2: coloryellow(item); break;
case 3: colorblue(item); break;
default: colorblack(item);
Notes:
Case instances must be a valid itemtype number.
Additional cases may be added as needed.
Use "current" to access the current involved object.
Use "item" to access the involved flowitem as an fsnode*.
根据一个名为“labelname” 的标签的值为临时实体item指定唯一的颜色。
case 1: colorred(item); break;
case 2: coloryellow(item); break;
case 3: colorblue(item); break;
default: colorblack(item);
注释:
每种case都必须是一个有效的实体类型编号。
可根据需要添加附加case分支。
用“current(当前)”来获取当前涉及的实体。
用“ item(临时实体)”作为一个fsnode*(flexsim节点指针)来获取所涉及的临时实体。
详细说明
每种case代表所涉及的临时实体上指定标签的值。采用所示语句为那种情况的临时实体调用颜色改变函数。
如果标签不包含任何指定值,将运行默认的声明,这将把此种情况的临时实体指定为黑色。
采用正确的表述语句可以添加或移除case分支。
确保指定的标签名称正确无误。
确保指定的标签是一个数字标签。
其它参数示例
case 9: colorwhite(item); break;
case 16: colorsilver(item); break;
case 1: colorgray(item); break;
case 33: colorblack(item); break;
default: colorpink(item);
应用背景
用来根据所涉及的临时实体上的某个标签改变实体的颜色。
Set Itemtype and Color(设定临时实体类型和颜色)
默认模板
Assign item the itemtype number duniform(1,3) and give each itemtype a unique color.
为临时实体item指定一种实体类型号duniform(1,3),并为每种实体类型指定唯一的颜色。
详细说明
每种case代表所涉及的临时实体的指定标签的值。采用所示的语句为那种情况的实体调用改变颜色函数。
如果标签不包含任何指定值,将运行默认的声明,这将把此种情况的临时实体指定为黑色。
采用正确的表述语句可以添加或移除case分支。
确保指定的标签名称正确无误。
确保指定的标签是一个数字标签。
其它参数示例
case 9: colorwhite(item); break;
case 16: colorsilver(item); break;
case 1: colorgray(item); break;
case 33: colorblack(item); break;
default: colorpink(item);
其它参数示例
用来根据所涉及的临时实体上的某个标签改变实体的颜色。
Write to Table (1)(写入表中(1))
默认模板
Write to global table "mytable" row 1 column 1 value 10.
向全局表“mytable” 的行1列1写入值10。
详细说明
将全局表中某特定单元格设定为指定值。
确保指定的表的名称正确无误。
确保表中指定的单元格包含数字数据。
其它参数示例
content(current)
getlabelnum(current,"labelname")
应用背景
用来将信息存储到表中以备以后使用。
Send Message(发送消息)
默认模板
Send a message to centerobject(current,1) . Pass the current object reference as "msgsendingobject", the value tonum(item) as "msgparam(1)", the value rownumber as "msgparam(2)" and the value 3 as "msgparam(3)".
发送一条消息给实体centerobject(current,1)。用参数“msgsendingobject”传递当前实体的引用,参数“msgparam(1)”传递tonum(item) 的值,用参数“msgparam(2)”传递rownumber的值,用参数“msgparam(3)”传递值3。
详细说明
在运行任何其它代码之前,立即执行指定实体的消息触发器中的代码。
这三个指定的值均可从消息触发器中引用。需要了解某些特定的数字时,如端口号、实体类型或容量,就需要用到此命令。
其它参数示例
current
outobject(current,2)
inobject(current,1)
node("/Processor1",model())
content(current)
应用背景
用来立即执行特定实体中的一段代码。
常用来按一定顺序执行命令以产生期望的结果。
Send Delayed Message(发送延迟消息)
默认模板
Send a delayed message to centerobject(current,1) in 0 time units from now. Pass the current object reference as "msgsendingobject", the value tonum(item) as "msgparam(1)", the value rownumber as "msgparam(2)" and the value 3 as "msgparam(3)".
从现在算起,在0时间单位内,发送一个延迟消息给实体centerobject(current,1)。用参数“msgsendingobject”传递当前实体的引用,参数“msgparam(1)”传递tonum(item) 的值,用参数“msgparam(2)”传递rownumber的值,用参数“msgparam(3)”传递值3。
详细说明
在指定的仿真时间之后,执行指定实体的消息触发器中的代码。
其它参数示例
current
outobject(current,2)
inobject(current,1)
node("/Processor1",model())
content(current)
应用背景
用来在一段给定的时间延迟期后运行一段代码。
Conditional Message(条件消息)
默认模板
If true send a message to centerobject(current,1) in 0 time units from now. Pass the current object reference as "msgsendingobject", the value tonum(item) as "msgparam(1)", the value rownumber as "msgparam(2)" and the value 3 as "msgparam(3)".
如果为true(真),则从现在算起,在0时间单位内发送一条消息给centerobject(current,1)。用参数“msgsendingobject”传递当前实体的引用,参数“msgparam(1)”传递tonum(item) 的值,用参数“msgparam(2)”传递rownumber的值,用参数“msgparam(3)”传递值3。
详细说明
“真”被一个诸如getitemtype(item) > 5,或getlabelnum(current,"mylabel")的条件表达式所替代。
如果临时实体的实体类型号大于5,getitemtype(item) > 5将返回“真”。
getlabelnum(current,"mylabel")将检查当前实体上的标签“mylabel”是否不等于0(真)或等于0(假)。
如果条件表达式为真,在指定的仿真时间过去后,执行指定实体的消息触发器里的代码。
如果指定仿真时间为0,则在执行其它任何代码之前,立即执行消息触发器的代码。
这三个指定的值可以从消息触发器中引用。当需要了解某些特定的数字时,如端口号、实体类型或容量,就需要用到此命令。
其它参数示例
current
outobject(current,2)
inobject(current,1)
node("/Processor1",model())
content(current)
应用背景
仅在条件表达式为真的情况下,用来在一段给定的时间延迟期后运行一段代码。
Close and Open Ports(打开与关闭端口)
默认模板
If true then closeinput ports of the current object
Notes:
You may closeinput or openinput ports of an object, and you may closeoutput or openoutput ports of an object.
Use "current" to access the current object.
Use "item" to access the involved flowitem.
Use "rownumber" to reference the current row number in a schedule/sequence table.
如果为true(真),则关闭(closeinput)当前(current)实体的输入端口。
注释:
可以打开或关闭一个实体的输入端口,也可以打开或关闭其输出端口。
使用“current(当前)”来获取当前实体。
使用“item(临时实体)”来获取涉及的临时实体。
使用“rownumber(行数)” 来引用一个时间/顺序表中的当前行数。
详细说明
打开或关闭一个实体的输入或输出端口。如果一个实体的输出端口被关闭,在这些端口被重新打开前,不再发送任何临时实体。如果一个实体的输入端口被关闭,在这些端口被重新打开前,不再接收任何临时实体。
如果条件为真,则打开或关闭输入或输出端口。
用诸如content(current) > 5 或getlabelnum(current,"mylabel")这样的条件表达式代替“真”。
如果当前实体中的临时实体数目大于5,则表达式content(current) > 5返回“真”。
getlabelnum(current,"mylabel")将检查当前实体上的标签“mylabel”是否不等于(真)或等于(假)0。
如果没有用条件表达式代替真,则每当此函数被调用时都会打开或关闭输入/输出端口。
其它参数示例
inobject(current,1)
outobject(current,3)
centerobject(current,2)
应用背景
用来根据特定条件控制实体之间的临时实体流。
常用来关闭一个实体的输入端口,然后在另一个下游实体中重新打开那些输入端口。
Change 3D Shape(改变3D形状)
默认模板
Change the 3D shape of item object to shape index number 1.
将临时实体item的3D形状改变为形状序号1所代表的形状。
详细说明
改变指定实体的3D形状。
形状序号可以在导入媒体文件下的工具箱中找到。每个导入的形状或图像都有一个号码来代表其形状序号。
如果需要用此函数改变实体的形状,而要改变成的3D形状还没有在“预先导入3D图形图像 ”中,就必须首先添加这些形状或图像。
其它参数示例
inobject(current,1)
outobject(current,2)
getshapeindex("fs3d//")
getshapeindex("C://Program Files//Flexsim//fs3d//")
应用背景
Used to dynamically change the shape of an object.
用来动态地改变一个实体的形状。
XE "碰撞触发器" XE "Thisobject" XE "Thissphere" XE "Otherobject" XE "Othersphere" XE "碰撞处理" 碰撞触发器(碰撞处理)
概述:
每当一个实体执行其碰撞检测并发现已经与它的一个碰撞成员发生碰撞时,就触发碰撞触发器。参见任务执行器碰撞探测,可获得更多关于碰撞探测的信息。
存取变量:
thisobject :当前实体
otherobject :与当前实体碰撞的那个实体
thissphere :涉及的当前实体的碰撞球
othersphere :涉及的与当前实体碰撞的实体的碰撞球。
Do Nothing(无操作)
默认模板
Do nothing
无操作
详细说明
调用这个触发器时,不执行任何命令。
应用背景
在此触发器执行期间没有附加逻辑要求时采用此函数。
Print a Message(打印一条消息)
默认模板
Print a message to the output console detailing the collision.
打印一条关于此次碰撞的详细消息到输出控制台。
详细说明
将有关涉及的碰撞实体和涉及的碰撞球的排行的信息写入到输出控制台(视图/输出控制台)。
应用背景
用来在碰撞过程中查看涉及的实体和碰撞球。
Turn to the Left (向左转)
默认模板
Turn to the left.
向左转
详细说明
给任务执行器一个先占的任务序列,使其在恢复新执行旧任务序列之前,先左转并前行一小段距离。
应用背景
用来使任务执行器在碰撞的时候从碰撞位置移开。
Turn away from the collision (碰撞后移开)
默认模板
Turn the object away from the location of the collision.
将实体从碰撞位置移开。
详细说明
给任务执行器一个先占的任务序列,让它从碰撞位置转开45度,但仍然保持碰撞实体所面对的大体方向。
应用背景
用来使任务执行器在碰撞的时候离开所在路线。
Crane logic(起重机逻辑)
默认模板
For crane operation: Cranes must not cross paths along the X – axis. If a collision is detected, then priority of tasks is determined first by priority of the task sequence being executed. If the priorities are equal, then the crane with the highest label named “cranepriority” takes precedence. Create a preempting task sequence for the other crane to move out of the way 1 units of length along the axis specified, then wait for 10 units of time before trying again.
对于起重机的操作:起重机不允许横跨沿X轴方向的路径。如果探测到碰撞,首先根据正在执行的任务序列的优先级来决定任务的优先次序。如果优先级相同,具有最高“cranepriority” 的标签的起重机优先执行。为另一个起重机创建一个先占任务序列,使它沿指定的轴向移出1个单位长度,然后等待10个单位时间,再重试。
详细说明
先占支配起重机从其它起重机的路线上移开,以使它们不相互穿过或重叠。
指定轴是起重机相对彼此移开的方向。
确保将指定标签添加到涉及的起重机上。
确保指定的标签是一个数字标签。
应用背景
用于起重机逻辑,以使它们相互之间不穿过或重叠。
XE "网络节点" XE "到达触发器" XE "打开连线侧边" XE "继续触发器" XE "进入节点触发器" 进入节点触发器(继续/到达时)
概述:
当一个行进物从任意方向进入该节点时,执行此函数。当有行进物到达此节点时,就触发到达触发器。当行进物继续向下一路径行进时,就触发继续触发器。
存取变量:
current :当前实体
traveler :涉及的刚进入的行进物
edgenum :行进物通过的路径侧边编号。
Do Nothing(无操作)
默认模板
Do nothing
无操作
详细说明
调用此触发器时不执行任何命令。
应用背景
在此触发器执行期间没有附加逻辑要求时采用此函数。
Send Message(发送消息)
默认模板
Send a message to centerobject(current,1) . Pass the current object reference as “msgsendingobject”, the value tonum(traveler) as “msgparam(1)”, the value edgenum as “msgparam(2)” and the value 3 as “msgparam(3)”.
发送一条消息给实体centerobject(current,1)。用参数“msgsendingobject”传递当前实体的引用,参数“msgparam(1)”传递tonum(traveler) 的值,用参数“msgparam(2)”传递edgenum的值,用参数 “msgparam(3)”传递值3。
详细说明
在运行任何其它代码之前,立即执行指定实体的消息触发器中的代码。
这三个指定的值可以从消息触发器中引用。当需要了解某些特定的数字时,如端口号、实体类型或容量,就需要用到此命令。
其它参数示例
current
outobject(current,2)
inobject(current,1)
node(“/Processor1”,model())
content(current)
应用背景
用来立即执行特定实体中的一段代码。
常用来按一定顺序执行命令以产生期望的结果。
Send Delayed Message(发送延迟消息)
默认模板
Send a delayed message to centerobject(current,1) in 0 time units from now. Pass the current object reference as “msgsendingobject”, the value tonum(traveler) as “msgparam(1)”, the value edgenum as “msgparam(2)” and the value 3 as “msgparam(3)”.
从现在算起,在0时间单位内发送一个延迟消息给centerobject(current,1)。用参数 “msgsendingobject” 传递当前实体的引用,用参数“msgparam(1)”传递tonum(traveler)的值,用参数 “msgparam(2)”传递edgenum的值,用参数 “msgparam(3)”传递值3。
详细说明
在经过指定的仿真时间后,在指定实体的消息触发器中执行此代码。
其它参数示例
current
outobject(current,2)
inobject(current,1)
node(“/Processor1”,model())
content(current)
应用背景
用来在一段给定的时间延迟期后运行一段代码。
Conditional Message(条件消息)
默认模板
If true send a message to centerobject(current,1) in 0 time units from now. Pass the current object reference as “msgsendingobject”, the value tonum(traveler) as “msgparam(1)”, the value edgenum as “msgparam(2)” and the value 3 as “msgparam(3)”.
如果为真,从现在算起在0时间单位内,发送一条消息给centerobject(current,1)。用参数 “msgsendingobject” 传递当前实体的引用,用参数“msgparam(1)”传递tonum(traveler)的值,用参数 “msgparam(2)”传递edgenum的值,用参数 “msgparam(3)”传递值3。
详细说明
“真”被一个诸如getitemtype(item) > 5,或getlabelnum(current,"mylabel")的条件表达式所替代。
如果临时实体的实体类型号大于5,getitemtype(item) > 5将返回“真”。
getlabelnum(current,"mylabel")将检查当前实体上的标签“mylabel”是否不等于(真)或等于(假)0。
如果条件表达式为真,在指定的仿真时间过去后,执行指定实体的消息触发器里的代码。
如果指定仿真时间为0,则在执行其它任何代码之前,立即执行消息触发器的代码。
这三个指定的值可以从消息触发器中引用。当需要了解某些特定的数字时,如端口号、实体类型或容量,就需要用到此命令。
其它参数示例
current
outobject(current,2)
inobject(current,1)
node(“/Processor1”,model())
content(current)
应用背景
仅在条件表达式为真的情况下,用来在一段给定的时间延迟期后运行一段代码。
Close Node Edge(关闭路径侧边)
默认模板
Close edge number 1 of networknode current so no other travelers can pass through.
Note:
The edge's color will turn orange indicating it is closed. Open or close status of an edge will only be checked by a traveler when traveling from one node to the next (not when entering a node from an offset)
关闭网络节点current(当前)的路径侧边1,不允许其它行进物通过。
注释:
路径侧边的颜色将会变为橙色以表示它已经被关闭。只有在行进物从一个节点向下一个节点行进(而不是由偏移而进入节点)时,才会检查路径侧边的开关状态。
详细说明
在网络节点的参数属性页的路径分页中显示了连接。路径侧边编号由它在列表中的顺序来定义。例如:当前网络节点的路径侧边3是列表中从当前网络节点到第三个网络节点之间的边。
这将会关闭指定的路径侧边,这样企图从当前节点到那个节点的去的行进物将会被阻停在当前节点。
其它参数示例
edgenum : 行进物通过的路径侧边编号。
getlabelnum(traveler,“labelname”)
gettablenum(“GlobalTable2”,1,1)
outobject(current,2)
应用背景
用来控制沿网络路径的交通,方法是让任务执行器不能沿着特定连接行进。
Open Node Edge(打开路径侧边)
默认模板
Open edge number 1 of networknode current so other travelers can pass through.
Note:
The edge's color will turn orange indicating it is closed. Open or close status of an edge will only be checked by a traveler when traveling from one node to the next (not when entering a node from an offset)
打开网络节点current(当前)的路径侧边1,这样行进物可以通过。
注释:
路径侧边的颜色将会变为橙色以表示它已经被关闭。只有在行进物从一个节点向下一个节点行进(而不是由偏移而进入节点)时,才会检查路径侧边的开关状态。
详细说明
在网络节点的参数属性页的路径分页中显示了连接。路径侧边编号由它在列表中的顺序来定义。例如:当前网络节点的路径侧边3是列表中从当前网络节点到第三个网络节点之间的边。
这将打开指定的路径侧边,这样企图从当前节点到那个节点去的行进物就可以继续行进。
其它参数示例
edgenum :行进物通过的路径侧边编号。
getlabelnum(traveler,“labelname”)
gettablenum(“GlobalTable2”,1,1)
outobject(current,2)
应用背景
用来控制沿网络路径的交通,方法是允许任务执行器沿着那些先前关闭了的特定连接行进。
Change 3D Shape(改变3D形状)
默认模板
Change the 3D shape of traveler object to shape index number 1.
改变行进物 traveler 的3D形状为形状序号1 所代表的形状。
详细说明
改变指定实体的3D形状。
形状序号可以在“导入媒体文件”下的工具箱中找到。每个导入的形状或图像都有一个号码来代表其形状序号。
如果需要用此函数改变实体的形状,而要改变成的3D形状还没有在“预先导入3D图形图像”中,就必须首先添加这些形状或图像。
其它参数示例
inobject(current,1)
outobject(current,2)
getshapeindex(“fs3d//”)
getshapeindex(“C://Program Files//Flexsim//fs3d//”)
应用背景
用来动态地改变一个实体的形状。
XE "Covermode" XE "Photoeye" XE "覆盖与覆盖解除触发器" 覆盖与覆盖解除触发器下拉菜单
概述:
此函数在光电传感器状态改变的时候执行。
变量操作:
current :当前实体
item :此时正好在光电传感器前的临时实体.
photoeye :光电传感器的序号(表中的行)
covermode :对于覆盖触发器来说,1表示绿到黄的转变,2表示黄到红转变;对于覆盖解除触发器来说,1表示黄到绿转变,2表示红到绿转变。
Handle Each Photoeye Differently(分别处理每个光电传感器)
默认模板
Execute commands based on photoeye number:
case 1:
closeinput(current);
break;
case 2:
senddelayedmessage(current, 0, current, 1,2,3);
break;
case 3:
inc(label(item, "labelname"), 1);
break;
case 4:
openinput(current);
break;
Notes:
Each case executes a block of code.
Case instances must be a valid photoeye.
Cases may be added or deleted as needed.
根据光电传感器序号执行命令:
case 1:
closeinput(current);
break;
case 2:
senddelayedmessage(current, 0, current, 1,2,3);
break;
case 3:
inc(label(item, "labelname"), 1);
break;
case 4:
openinput(current);
break;
注释:
每种case执行一段代码。
每种case都必须是有效的光电传感器。
可以根据需要添加或删除不同的case分支。
详细说明
此选项用来指定每一个光电传感器的逻辑。
其它参数示例
if(covermode == 1) ;
else ;
Send Message(发送消息)
默认模板
Send a message to centerobject(current, 1) . Pass the current object reference as "msgsendingobject", the value tonum(item) as "msgparam(1)", the value 2 as "msgparam(2)", and the value 3 as "msgparam(3)".
发送一条消息给centerobject(current, 1)。用参数“msgsendingobject” 传递当前实体的引用,用参数“msgparam(1)”传递tonum(item) 的值,用参数“msgparam(2)”传递值2 ,用参数 “msgparam(3)”传递值3 。
详细说明
此选项给指定实体发送一条消息。
其它参数示例
the value covermode as "msgparam(1)"
the value photoeye as "msgparam(2)"
将covermode的值作为参数 “msgparam(1)”
将photoeye的值作为参数 “msgparam(2)”
Send Delayed Message(发送延迟消息)
默认模板
Send a delayed message to centerobject(current, 1) in 0 time units from now. Pass the current object reference as "msgsendingobject", the value tonum(item) as "msgparam(1)", the value 2 as "msgparam(2)", and the value 3 as "msgparam(3)".
从现在算起,在0时间单位内发送一个延迟消息给centerobject(current, 1)。用参数“msgsendingobject” 传递当前实体的引用,用用参数“msgparam(1)”传递tonum(item)的值,用参数 “msgparam(2)”传递值2 ,用参数“msgparam(3)”传递值3 。
详细说明
此选项给指定实体发送一条消息。
其它参数示例
the value covermode as "msgparam(1)"
the value photoeye as "msgparam(2)"
将covermode的值作为参数 “msgparam(1)”
将photoeye的值作为参数 “msgparam(2)”
Close and Open Ports(打开与关闭端口)
默认模板
If true then closeinput ports of the current object.
如果为true(真),则对current (当前)实体执行closeinput (关闭输入)端口操作。
详细说明
此选项用来指定一个if/then参数,以指示是否执行这个功能。
其它参数示例
上面的例子含义为,如果遮挡模式是2,或者是第三个光电传感器,则打开输送机的输出端口。
如果covermode == 2 || photoeye == 3,则打开当前实体的输出端口。
Display Message(显示消息)
默认模板
Display message showing the photoeye's number and state in the Output Console.
在输出控制台中显示光电传感器的序号和状态消息。
详细说明
此选项向输出控制台打印一条消息。
XE "变更触发器" 变更触发器
概述:
每当监视列表中的任何变量发生变化时,就执行此函数。站点将检查模型中的每一事件的变量,以确保能在其发生变化时捕获此变化。
存取变量:
current :当前实体
changedobject :变量发生变化的实体
changeditem :发生变化的变量(节点)
changedvalue :变量变化后的值
oldval :变量变化前的值
Write to a table(写入表中)
默认模板
Write to a table called “mytable”. Column 1 will record time(). Column 2 will hold changedval. NOTE: The table may need to be resized OnReset or at another appropriate time.
向一个叫“mytable”的表中写入。列1记录时间time(),列2记录变化后的值changedval。注释:此表需要在重置触发器或者其它适当的时间进行尺寸调整。
详细说明
每次调用都向指定的表中添加一行,并将前两列设定为指定的值。
确保指定的表名称正确无误。
确保此表至少有2列。
当添加第一项时,不会重新设定表的大小,因此,需要在重置或者其它适当时刻重新设定表的大小。
其它参数示例
time()/60
oldval
getitemtype(changeditem)
应用背景
用来以表的形式显示变量的变化。
Print a message(打印一条消息)
默认模板
Print a message to the output console describing the change that occurred.
向输出控制台打印一条消息,描述发生的变化。
详细说明
向输出控制台(视图/输出控制台)写入实验状态的相关信息。
应用背景
用来在输出控制台中显示变量的变化。
Close Open Ports(打开关闭端口)
默认模板
closeinput of the following object: changedobject.
对实体changedobject进行closeinput (关闭输入)端口的操作。
详细说明
打开或关闭一个实体的输入或输出端口。如果一个实体的输出端口被关闭,在这些端口被重新打开前,不再发送任何临时实体。如果一个实体的输入端口被关闭,在这些端口被重新打开前,不再接收任何临时实体。
其他参数示例
openoutput
closeoutput
closeinput
outobject(changedobject,1)
centerobject(changedobject,2)
应用背景
用来在一个变量变化时打开或关闭输入或输出端口。
绘图触发器(用户绘图代码)
概述:
此函数在实体的“绘图事件”之前执行。它用来执行用户定义的绘图命令和动画。如果此函数返回1,则不会调用实体的标准绘图函数。如果返回0,则正常地发生绘图事件。可以使用FlexScript(Flexsim脚本)、C++以及/或OpenGL代码来定义要绘制什么。
常规命令:
drawcolumn(xloc,yloc,zloc,nrsides,baseradius,topradius,height,xrot,yrot,zrot,red,green,blue[,opacity,texture,xrep,yrep])
drawcube(xloc,yloc,zloc,xsize,ysize,zsize,xrot,yrot,zrot,red,green,blue[,opacity,texture,xrep,yrep])
drawcylinder(xloc,yloc,zloc,baseradius,topradius,height,xrot,yrot,zrot,red,green,blue[,opacity,texture])
drawdisk(xloc,yloc,zloc,innerradius,outerradius,startangle,sweepangle,xrot,yrot,zrot,red,green,blue[,opacity,texture])
drawline(view,x1,y1,z1,x2,y2,z2,red,green,blue)
drawobject(view,shape,texture)
drawrectangle(xloc,yloc,zloc,length,width,xrot,yrot,zrot,red,green,blue[,opacity,texture,xrep,yrep])
drawsphere(xloc,yloc,zloc,radius,red,green,blue[,opacity,texture])
drawtext(view,text,xloc,yloc,zloc,xsize,ysize,zsize,xrot,yrot,zrot,red,green,blue)
drawtomodelscale(object)
drawtoobjectscale(object)
drawtriangle(view,x1,y1,z1,x2,y2,z2,x3,y3,z3,red,green,blue)
spacerotate(x,y,z)
spacescale(x,y,z)
spacetranslate(x,y,z)
存取变量:
current :当前实体
view :绘制实体的视图
Draw Text near Object’s Name(在实体名称旁绘制文本)
默认模板
Create 3 onscreen display nodes and update them with the following code:
setname(rank(displaynodes,1),concat("Curcontent: ",numtostring(content(current),0,0)));
setname(rank(displaynodes,2),concat("MaxContent: ",numtostring(get(stats_contentmax(current)),0,0)));
setname(rank(displaynodes,3),concat("AvgStaytime: ",numtostring(get(stats_staytimeavg(current)),0,1)));
创建 3 个屏幕上显示的节点,并用下列代码对它们进行更新:
setname(rank(displaynodes,1),concat("Curcontent: ",numtostring(content(current),0,0)));
setname(rank(displaynodes,2),concat("MaxContent: ",numtostring(get(stats_contentmax(current)),0,0)));
setname(rank(displaynodes,3),concat("AvgStaytime: ",numtostring(get(stats_staytimeavg(current)),0,1)));
详细说明
改变实体名称下的文本以显示不同信息。
采用正确的表述语句可以添加或移除更多case分支。
其它参数示例
4
setname(rank(displaynodes,1),concat("Content: ",numtostring(content(current),0,0)));
setname(rank(displaynodes,2),concat("AvgContent: ",numtostring(get(stats_contentavg(current)),0,0)));
setname(rank(displaynodes,3),concat("My Label: ",numtostring(getlabelnum(current,“mylabel”),0,1)));
setname(rank(displaynodes,4),concat("MinStaytime: ",numtostring(get(stats_staytimemin(current)),0,1)));
应用背景
用来改变实体名称下面的文本,这个文本显示这个实体的特定统计数据。
Draw Sphere(绘制球)
默认模板
Draw a Sphere.
Location (x,y,z) : (0,0,0)
Radius : 1
Red : 255
Green : 0
Blue : 0
Opacity (0 = clear; 1 = opaque) : 1
Texture Index : 0
绘制一个球:
Location (x,y,z) : (0,0,0)
Radius : 1
Red : 255
Green : 0
Blue : 0
Opacity (0 = clear; 1 = opaque) : 1
Texture Index : 0
详细说明
给实体添加一个纹理包围的3D球形。
纹理序号可以在导入媒体文件下的工具箱中找到。每个导入的图形都有一个数字代表其纹理序号。
如果需要使用此函数将一个实体的纹理改变为尚未导入到“预先导入3D图形图像”中的图形,则必须首先添加它。
其它参数示例
3,,2
3
0
255
255
52
应用背景
用来给一个实体添加额外的可视化效果。
Draw Column(绘制柱形)
默认模板
Draw a Column.
Location (x,y,z) : (0,0,0)
Sides : 5
Base Radius : 1
Top Radius : 1
Height : 1
Rotation (x,y,z) : (0,0,0)
Red : 255
Green : 0
Blue : 0
Opacity (0 = clear; 1 = opaque) : 1
Texture Index : 0
Repeat Texture X : 1
Repeat Texture Y : 1
绘制一个柱状图形:
Draw a Column.
Location (x,y,z) : (0,0,0)
Sides : 5
Base Radius : 1
Top Radius : 1
Height : 1
Rotation (x,y,z) : (0,0,0)
Red : 255
Green : 0
Blue : 0
Opacity (0 = clear; 1 = opaque) : 1
Texture Index : 0
Repeat Texture X : 1
Repeat Texture Y : 1
详细说明
给实体添加一个纹理包围的3D柱状图形。X、Y的纹理重复次数用来定义围绕柱形这两个方向上的纹理重复次数。
纹理序号可以在“导入媒体文件”下的工具箱中找到。每个导入的图形都有一个数字代表其纹理序号。
如果需要使用此函数将一个实体的纹理改变为尚未导入到“预先导入3D图形图像” 中的图形,则必须首先添加它。
其它参数示例
3,,2
12
2
3
5
0,90,0
0
255
255
52
2
4
应用背景
用来给一个实体添加额外的可视化效果。
Draw Cube(绘制立方体)
默认模板
Draw a Cube.
Location (x,y,z) : (0,0,0)
Size : (1,1,1)
Rotation (x,y,z) : (0,0,0)
Red : 255
Green : 0
Blue : 0
Opacity (0 = clear; 1 = opaque) : 1
Texture Index : 0
Repeat Texture X : 1
Repeat Texture Y : 1
绘制一个立方体图形。
Draw a Cube.
Location (x,y,z) : (0,0,0)
Size : (1,1,1)
Rotation (x,y,z) : (0,0,0)
Red : 255
Green : 0
Blue : 0
Opacity (0 = clear; 1 = opaque) : 1
Texture Index : 0
Repeat Texture X : 1
Repeat Texture Y : 1
详细说明
给实体添加一个纹理包围的3D立方体图形。X、Y纹理重复次数定义了在立方体的两个方向上纹理重复的次数。
纹理序号可以在“导入媒体文件”下的工具箱中找到。每个导入的图形都有一个数字代表其纹理序号。
如果需要使用此函数将一个实体的纹理改变为尚未导入到“预先导入3D图形图像” 中的图形,则必须首先添加它。
其它参数示例
3,,2
2,3,4
0,90,0
0
255
255
52
2
4
应用背景
用来给一个实体添加额外的可视化效果。
Draw Cylinder(绘制圆柱)
默认模板
Draw a Column.
Location (x,y,z) : (0,0,0)
Base Radius : 1
Top Radius : 1
Height : 1
Rotation (x,y,z) : (0,0,0)
Red : 255
Green : 0
Blue : 0
Opacity (0 = clear; 1 = opaque) : 1
Texture Index : 0
绘制一个圆柱图形
Location (x,y,z) : (0,0,0)
Base Radius : 1
Top Radius : 1
Height : 1
Rotation (x,y,z) : (0,0,0)
Red : 255
Green : 0
Blue : 0
Opacity (0 = clear; 1 = opaque) : 1
Texture Index : 0
详细说明
给实体添加一个纹理包围的3D圆柱图形。
纹理序号可以在“导入媒体文件”下的工具箱中找到。每个导入的图形都有一个数字代表其纹理序号。
如果需要使用此函数将一个实体的纹理改变为尚未导入到“预先导入3D图形图像”中的图形,则必须首先添加它。
其它参数示例
3,,2
2
3
5
0,90,0
0
255
255
52
应用背景
用来给一个实体添加额外的可视化效果。
Draw Disk(绘制圆盘)
默认模板
Draw a Disk.
Location (x,y,z) : (0,0,0)
Inner Radius : 1
Outer Radius : 2
Start Angle : 0
Sweep Angle : 360
Rotation (x,y,z) : (0,0,0)
Red : 255
Green : 0
Blue : 0
Opacity (0 = clear; 1 = opaque) : 1
Texture Index : 0
绘制一个圆盘。
Location (x,y,z) : (0,0,0)
Inner Radius : 1
Outer Radius : 2
Start Angle : 0
Sweep Angle : 360
Rotation (x,y,z) : (0,0,0)
Red : 255
Green : 0
Blue : 0
Opacity (0 = clear; 1 = opaque) : 1
Texture Index : 0
详细说明
给实体添加一个有纹理的圆盘。
纹理序号可以在导入媒体文件下的工具箱中找到。每个导入的图形都有一个数字代表其纹理序号。
如果需要使用此函数将一个实体的纹理改变为尚未导入到“预先导入3D图形图像”中的图形,则必须首先添加它。
其它参数示例
3,,2
0
3
45
270
0
255
255
52
应用背景
用来给一个实体添加额外的可视化效果。
Draw Rectangle(绘制长方体)
默认模板
Draw a Rectangle.
Location (x,y,z) : (0,0,0)
Length : 1
Width : 1
Rotation (x,y,z) : (0,0,0)
Red : 255
Green : 0
Blue : 0
Opacity (0 = clear; 1 = opaque) : 1
Texture Index : 0
Repeat Texture X : 1
Repeat Texture Y : 1
绘制一个长方体:
Location (x,y,z) : (0,0,0)
Length : 1
Width : 1
Rotation (x,y,z) : (0,0,0)
Red : 255
Green : 0
Blue : 0
Opacity (0 = clear; 1 = opaque) : 1
Texture Index : 0
Repeat Texture X : 1
Repeat Texture Y : 1
详细说明
给实体添加一个有纹理的长方体。X、Y纹理重复次数定义了长方体的两个方向上纹理的重复次数。
纹理序号可以在“导入媒体文件”下的工具箱中找到。每个导入的图形都有一个数字代表其纹理序号。
如果需要使用此函数将一个实体的纹理改变为尚未导入到“预先导入3D图形图像”中的图形,则必须首先添加它。
其它参数示例
3,,2
4
3
45 , 90, 0
0
255
255
52
3
应用背景
用来给一个实体添加额外的可视化效果。
Draw Object(绘制实体)
默认模板
Draw a 3D Object.
Object Index : 0
Texture Index : 0
绘制一个3D实体:
Object Index : 0
Texture Index : 0
详细说明
给实体添加一个有纹理的3D形状。
形状和纹理序号可以在“ 导入媒体文件”下的工具箱中找到。每个导入的形状或图形都有一个数字代表其形状或纹理序号。
如果需要使用此函数将一个实体的形状或纹理改变为尚未导入到“预先导入3D图形图像”中的图形,则必须首先添加它。
其它参数示例
12
getshapeindex(“fs3d//”)
getshapeindex(“C://Program Files//Flexsim//fs3d//”)
getshapeindex(“bitmaps//”)
应用背景
用来给一个实体添加额外的可视化效果。
Draw Rotating Object(绘制转动实体)
默认模板
Draw an object rotating about the z axis.
Object Index : 0
Texture Index : 0
Rotation Amount : time()
Location : (0,0,0)
绘制一个绕z轴转动的实体:
Object Index : 0
Texture Index : 0
Rotation Amount : time()
Location : (0,0,0)
详细说明
给实体添加转动的有纹理的3D形状。
形状和纹理序号可以在“ 导入媒体文件”下的工具箱中找到。每个导入的形状或图形都有一个数字代表其形状或纹理序号。
如果需要使用此函数将一个实体的形状或纹理改变为尚未导入到“预先导入3D图形图像”中的图形,则必须首先添加它。
其他参数示例
12
getshapeindex(“fs3d//”)
getshapeindex(“C://Program Files//Flexsim//fs3d//”)
getshapeindex(“bitmaps//”)
0
4*time()
,,
应用背景
用来给一个实体添加额外的可视化效果。
Draw Animated Arm(绘制动态臂)
默认模板
Draw an animated arm moving flowitems.
Note: This option is designed to be used with a processor that has the “fs3d/Processor/Processor – Convey ” shape applied to it.
绘制移动临时实体的动态臂。
注释:此选项用来与具有 “fs3d/处理器/处理器-输送机.3DS”形状的处理器一起使用。
详细说明
给实体添加一个可动作手臂,可以捡取临时实体并沿处理器移动它,而不是让处理器接收实体并沿着其长度方向传送过去。
应用背景
用来给一个实体添加额外的可视化效果。
Follow an Object(跟随实体)
默认模板
Set the view points to the spatial location of the object
Note: If a flowitem is being followed, a separate trigger function should be used to record its address, so that it can be referenced here.
This default pickoption assumes that the pointer number of the object has been recorded on a label named “cameraholder” of this current object.
将观察点设定在实体tonode(getlabelnum(current,”cameraholder”))的空间位置上。
注释:如果一个临时实体被跟随,应采用一个单独的触发器来记录其地址,这样就可以在这儿引用它。
此默认选取选项假设实体的指针号已经被记录到当前实体的名为“cameraholder” 的标签上了。
详细说明
屏幕每次重画时,镜头都聚焦于指定的实体上。
其它参数示例
node(“/Operator1”,model())
应用背景
用来让观察点镜头跟随特定的实体。
XE "重置触发" XE "重置触发器" 重置触发器
概述:
当模型重置的时候执行这个函数。
存取变量:
current :当前实体
Do Nothing(无操作)
默认模板
Do nothing
无操作
详细说明
调用此触发器时不执行任何命令。
应用背景
在此触发器执行期间没有附加逻辑要求时采用。
Create and Initialize Label(创建和初始化标签)
默认模板
Create a label called “labelname” on current and initialize it with a value of duniform(1,3).
在current (当前)实体上创建一个名为“labelname”的标签,并初始化其值为duniform(1,3)。
详细说明
给指定实体添加一个新的指定名称的数值标签,且将其设定为指定值。
如果此标签已经存在,则此函数将把此标签设定为指定值。
Other Parameter Examples(其它参数示例)
12
getlabelnum(current,“mylabel”)
content(current)
time()
应用背景
用来给一个实体添加一个数值标签并进行初始化,而不是在属性菜单中添加标签,以后再给它赋值。
Set a Label(设定标签)
默认模板
Set a label called “labelname” on current to the value duniform(1,3).
(This option assumes that the label has already been created.)
设定current (当前)实体上名为“labelname”的标签的值为duniform(1,3)。
(此功能的前提假设条件是标签已被创建。)
详细说明
将指定实体上某指定名称的标签设定为指定值。
如果此标签名不存在,则此函数不做任何操作。
其它参数示例
5
gettablenum(“mytable”,2,3)
content(current)
time()
应用背景
用来更新已在某实体上创建的标签。
Set Location(设定位置)
默认模板
Set the location of current to:
X= 0
Y= 0
Z= 0
将current (当前)实体的位置设定为:
X= 0
Y= 0
Z= 0
详细说明
将指定实体的全局坐标设定为三个指定值。
其它参数示例
gettablenum(“mytable”,2,3)
6
应用背景
用来设定一个实体的位置。
常与任务执行器(操作员和运输机)的重置触发器一起使用,来将它们移动到起始位置。
Set Rotation(设定转角)
默认模板
Set the rotation of current to:
X= 0
Y= 0
Z= 0
设定当前实体的转角为:
X= 0
Y= 0
Z= 0
详细说明
将指定实体的方位设定为三个指定值。
其它参数示例
gettablenum(“mytable”,4,4)
7
应用背景
用来设定一个实体的转角
常与任务执行器(操作员和运输机)的重置触发器一起使用,来将它们转到特定的方向。
Set Size(设定尺寸)
默认模板
Set the size of current to:
X=
Y=
Z=
将current (当前)实体的尺寸设定为:
X=
Y=
Z=
详细说明
将指定实体的尺寸设定为三个指定值。
其它参数示例
gettablenum(“mytable”,5,6)
4
应用背景
用来设定一个实体的尺寸。
常在动态地改变一个实体的尺寸,以使得仿真的视觉效果更真实时使用它。
Write to Table (1)(写入表(1))
默认模板
Write to global table “mytable” row 1 column 1 value 10.
向全局表“mytable” 的行1 列1 写入值10。
详细说明
将全局表中某特定单元格设定为指定值。
确保指定的表名称正确无误。
确保表中指定的单元格包含数值数据。
其它参数示例
content(current)
getlabelnum(current,“labelname”)
应用背景
用来将信息存储倒表中以备以后使用。
Close and Open Ports(打开与关闭端口)
默认模板
If true then closeinput ports of the current object.
Notes:
You may closeinput or openinput ports of an object,
and you may closeoutput or openoutput ports of an object.
Use “current” to access the current object.
如果为true(真),则对current(当前)实体执行closeinput (关闭输入)端口的操作。
注释:
可以打开或关闭一个实体的输入端口,也可以开或关闭其输出端口。
使用“current(当前)”来获取当前实体。
详细说明
打开或关闭一个实体的输入或输出端口。如果一个实体的输出端口被关闭,在这些端口被重新打开前,不再发送任何临时实体。如果一个实体的输入端口被关闭,在这些端口被重新打开前,不再接收任何临时实体。
如果条件为真,则打开或关闭输入或输出端口。
用诸如content(current) > 5 或getlabelnum(current,"mylabel")这样的条件表达式代替“真”。
如果当前实体中的临时实体数目大于5,则表达式content(current) > 5返回“真”。
getlabelnum(current,"mylabel")将检查当前实体上的标签“mylabel”是否不等于(真)或等于(假)0。
如果没有用条件表达式代替真,则每次调用此函数都会打开或关闭这些输入/输出端口。
其它参数示例
inobject(current,1)
outobject(current,3)
centerobject(current,2)
应用背景
用来根据特定的条件控制实体之间的临时实体流。
常用来关闭一个实体的输入端口,然后在另一个下游实体中重新打开那些输入端口。
Send Message(发送消息)
默认模板
Send a message to centerobject(current, 1) . Pass the current object reference as “msgsendingobject”, the value 1 as “msgparam(1)”, the value 2 as “msgparam(2), and the value 3 as “msgparam(3)”.
发送一条消息给centerobject(current,1)。用参数 “msgsendingobject” 传递当前实体的引用,用参数“msgparam(1)”传递值1,用参数 “msgparam(2)”传递值2 ,用参数 “msgparam(3)”传递值3 。
详细说明
在运行任何其它代码之前,立即执行指定实体的消息触发器中的代码。
这三个指定的值可以从消息触发器中引用。当需要了解某些特定的数字时,如端口号、实体类型或容量,就需要用到此命令。
其它参数示例
current
outobject(current,2)
inobject(current,1)
node(“/Processor1”,model())
content(current)
应用背景
用来立即执行特定实体上的一段代码。
常用来按一定顺序执行命令,以产生期望的结果。
高级功能:一些命令,如requestoperators(请求操作员),由于触发器被触发的顺序有一定的要求,所以需要在消息触发器中调用,而不是在其它域段中调用。
Send Delayed Message(发送延迟消息)
默认模板
Send a delayed message to centerobject(current, 1) in 0 time units from now. Pass the current object reference as “msgsendingobject”, the value 1 as “msgparam(1)”, the value 2 as “msgparam(2), and the value 3 as “msgparam(3)”.
从现在算起,在0 时间单位内发送一个延迟消息给centerobject(current, 1)。用参数“msgsendingobject” 传递当前实体的引用,用参数“msgparam(1)”传递值1 ,用参数 “msgparam(2)”传递值2 ,用参数“msgparam(3)”传递值3 。
详细说明
在经过指定的仿真时间后,执行指定实体的消息触发器中的代码。
其它参数示例
current
outobject(current,2)
inobject(current,1)
node(“/Processor1”,model())
content(current)
应用背景
用来在一段给定的时间延迟期后运行一段代码。
常用来重复地从一个实体发送延迟消息给它自身,目的是每隔X时间单位就运行一次某段代码。
Create Flowitems(创建临时实体)
默认模板
Create 10 flowitems and move them into the current object. The flowitems created will be copies of the flowitem class ranked 5 in the Flowitem Bin.
创建10个临时实体并将它们移入current (当前)实体。创建的临时实体将是临时实体箱中排序为5 的临时实体类的复制品。
详细说明
创建指定数量的临时实体并将它们移进指定的实体。
每次创建一个临时实体,随后被移进目标实体,触发此实体的进入触发器。
在临时实体箱中,临时实体类序号是它们从顶端向下显示的序号。第一个临时实体(可能是Flexsim盒子)排号为1,列表向下依次类推。
其它参数示例
duniform(1,5)
centerobject(current,2)
model()
12
应用背景
用来在一个实体中创建特定数量的临时实体而不使用发生器。
Change 3D Shape(改变3D形状)
默认模板
Change the 3D shape of current object to shape index number 1.
改变current(当前)实体的3D形状为形状序号1 所代表的形状。
详细说明
改变指定实体的3D形状。
形状序号可以在“导入媒体文件”下的工具箱中找到。每个导入的形状或图像都有一个号码来代表其形状序号。
如果需要用此函数改变实体的形状,而要改变成的3D形状还没有在“预先导入3D图形图像”中,就必须首先添加这些形状或图像。
其它参数示例
inobject(current,1)
outobject(current,2)
getshapeindex(“fs3d//”)
getshapeindex(“C://Program Files//Flexsim//fs3d//”)
应用背景
用来动态地改变实体的形状。
停机/启用触发器
概述:
停机触发器:当MTBFMTTR实体告知其成员中断运行时执行此函数。
启用触发器:当MTBFMTTR实体告知其成员重新启动的时候执行这个函数。
存取变量:
current:MTBFMTTR实体
members :MTBFMTTR实体的成员列表
involved :要么是1)MTBFMTTR实体,或者2)所涉及成员
curmember :当前成员(将在所有成员之间循环)——不是所有选项都可用
index:当前成员在成员列表中的序号
Do Nothing(无操作)
默认模板
Do nothing
无操作
详细说明
当调用此触发器时不执行任何命令。
应用背景
在此触发器执行期间没有附加逻辑要求时采用此函数。
Set Location (group) (设定位置(组))
默认模板
Set the location of all members of the group to ( 0 , 0 , 0 ).
将一组内的所有成员的位置都设定为( 0 , 0 , 0 )。
详细说明
遍历组里的每个成员,将其位置设为指定值。
其它参数示例
67 , 54 , 23
getlabelnum(curmember,"myxlabel") , getlabelnum(curmember,"myylabel") , 0
应用背景
用来设定所有停机或维修的相关成员的位置。
Set Location (individual)(设定位置(单独地))
默认模板
Set the location of the individual to ( 0 , 0 , 0 ).
将某个单独个体的位置设为( 0 , 0 , 0 )。
详细说明
将所涉及实体的位置设定为指定值。
其它参数示例
67 , 54 , 23
getlabelnum(curmember,"myxlabel") , getlabelnum(curmember,"myylabel") , 0
应用背景
在各成员单独中断时,用来设定中断或维修的每个成员的位置。
Set Color (group)(设定颜色(组))
默认模板
Set the color of all the members to colored
将所有成员的颜色设为colored(红色)。
详细说明
遍历组中的每个成员,在指定实体上调用一个函数来改变其颜色。
为了在Flexsim中改变一个实体的颜色,要改变颜色的3D文件中的那部分必须没有被指定素材。
如果是3DS文件,则没有素材的那部分还必须在有指定素材的其它部分之前,为的是改变它们的颜色。
其它参数示例
使用colorrandom指定一种随机颜色,或者也可以使用下列标准颜色命令:
colorred(颜色红) colorpink(颜色粉红)
colorgray (颜色灰) colorgreen(颜色绿)
colorblue (颜色蓝) colorblack(颜色黑)
coloryellow (颜色黄) colorwhite(颜色白)
colororange (颜色橘黄) colorteal(颜色凫蓝)
colorpurple(颜色紫) coloraqua(颜色浅绿)
colorbrown (颜色褐) colorsilver(颜色银)
colorlime (颜色酸橙) colorlightblue(颜色淡蓝)
应用背景
用来对所涉及的处于中断或维修中的所有成员设定颜色。
Set Color (invidiual)(设定颜色(单独地))
默认模板
Set the color of all the members to colored
将所有成员的颜色设为colored(红色)。
详细说明
在涉及的实体上调用一个函数来改变其颜色。
为了在Flexsim中改变一个实体的颜色,要改变颜色的3d文件中的那部分必须没有被指定素材。
如果是3DS文件,则没有素材的那部分还必须在有指定素材的其它部分之前,为的是改变它们的颜色。
其它参数示例
使用colorrandom指定一种随机颜色,或者也可以使用下列标准颜色命令:
colorred(颜色红) colorpink(颜色粉红)
colorgray (颜色灰) colorgreen(颜色绿)
colorblue (颜色蓝) colorblack(颜色黑)
coloryellow (颜色黄) colorwhite(颜色白)
colororange (颜色橘黄) colorteal(颜色凫蓝)
colorpurple(颜色紫) coloraqua(颜色浅绿)
colorbrown (颜色褐) colorsilver(颜色银)
colorlime (颜色酸橙) colorlightblue(颜色淡蓝)
应用背景
在各成员单独中断时,用来设定中断或维修的每个成员的颜色。
Set Label (group)(设定标签(组))
默认模板
Set the label called "mylabel" to 0.
将标签“mylabel”设为0。
详细说明
遍历组中每个成员,设定实体上指定标签为指定值。
确保指定的标签名称正确无误。
确保指定的标签是一个数值标签。
其它参数示例
gettablenum("MyTable",1,1)
12
time()
引用背景
Used to set a label on all of the involved members on break down or repair.
用来设定所有停机或维修的相关实体的标签。
Set Label (individual)(设定标签(单独地))
默认模板
Set the label called "mylabel" to 0.
设定标签“mylabel”为0。
详细说明
设定相关实体上指定标签为指定值。
确保指定的标签名称正确无误。
确保指定的标签是一个数值标签。
其它参数示例
gettablenum("MyTable",1,1)
12
time()
应用背景
Used to set a label on each of the involved members on break down or repair when members break down individually.
在各成员单独中断时,用来在中断或维修的每个成员上设定一个标签。
XE "维修触发器" XE "中断触发器" 中断/维修触发器
概述:
中断触发器:每次该实体中断停机时都执行这段代码。
维修触发器:每次该实体完成其维修时间时都执行这段代码。
存取变量:
current:当前实体
Do Nothing(无操作)
默认模板
Do nothing
无操作
详细说明
调用此触发器时不执行任何命令。
应用背景
在此触发器执行期间没有附加逻辑要求时采用。
Set Color (rgb)(设定颜色(rgb))
默认模板
Assign current a color using red, green, blue (rgb) inputs:
Red=255
Green=0
Blue=0
Note: use an index number between 0 and 255 for each color.
采用红、绿、蓝(三原色)输入方式为current(当前)实体指定一种颜色:
红=255
绿=0
蓝=0
注释:每种颜色指数均在0~255之间。
详细说明
采用0~255的红、绿、蓝三原色方式,在特定实体上调用设定颜色函数来改变其颜色。
为了在Flexsim中改变一个实体的颜色,要改变颜色的3D文件中的那部分必须没有被指定素材。
如果是3DS文件,则没有素材的那部分还必须在有指定素材的其它部分之前,为的是改变它们的颜色。
其它参数示例
current
centerobject(current,1)
30*getitemtype(item)
duniform(0,255)
getlabelnum(item,“mylabel”)
50
应用背景
用来在仿真运行期间动态地改变实体的颜色。
常用来根据特定颜色的已知三原色输入来设定某一特定颜色。
也常用来显示阴影差异程度,较低的指数比较高的指数颜色更暗。
Set Size(设定尺寸)
默认模板
Set the size of current to:
X= Y= Z=
将current(当前)实体的尺寸设定为:
X= Y= Z=
详细说明
将指定实体的尺寸设定为三个指定的值。
其它参数示例
gettablenum(“mytable”,5,6)
get(spatialsx(item))+4
4
应用背景
用来设定一个实体的尺寸。
常在动态改变一个实体的尺寸以使仿真的视觉效果更真实时采用。
Increment Label(递增标签)
默认模板
Increment the label on current called “labelname” by 1.
(Remember to first create the label in the Properties window of the object – or use the “addlabel” command)
将current(当前)上称为 “labelname”的标签递增1。
(请记住,首先在实体的属性视窗中创建标签,或者可使用“addlabel(增加标签)”命令创建。)
详细说明
将指定实体上具有指定名称的标签递增指定的值。
如果此标签名不存在,此功能不执行任何操作。
使用负数可实现标签递减。
其它参数示例
current
centerobject(current,3)
5
gettablenum(“mytable”,2,3)
content(current)
time()
-12
应用背景
用来更新已在某实体上创建的标签。
Change 3D Shape(改变3D形状)
默认模板
Change the 3D shape of current object to shape index number 1.
改变current(当前)实体的3D形状为形状序号1所代表的形状。
详细说明
改变指定实体的3D形状
形状序号可以在“导入媒体文件”下的工具箱中找到。每个导入的形状或图像都有一个号码来代表其形状序号。
如果需要用此函数改变实体的形状,而要改变成的3D形状还没有在“预先导入3D图形图像 ”中,就必须首先添加这些形状或图像。
其它参数示例
inobject(current,1)
outobject(current,2)
getshapeindex(“fs3d//”)
getshapeindex(“C://Program Files//Flexsim//fs3d//”)
应用背景
用来动态地改变一个实体的形状。
资源变为可用
概述:
在一个分配器的下游资源变为可用时触发此触发器。如果函数返回一个0值,分配器将执行其自身的分配逻辑。如果此函数返回一个1值,分配器将不进行任何操作,并认为所有的分配逻辑已经被此触发器采用movetasksequence()和dispatchtasksequence()命令完成了。
存取变量:
current: 当前实体
port:分配器的输出端口
resource:变成可用状态的下游资源
Do Nothing(无操作):
此选取选项不执行任何逻辑,返回0。
XE "时间" 时间下拉菜单
时间下拉菜单
注释:下面给出的下拉菜单选项用在多个下拉菜单中,包括:周期时间、预置时间、MTBF、MTTR、装载 HYPERLINK "file:///D:\\WebHelp\\pick_lists\\" / HYPERLINK "file:///D:\\WebHelp\\pick_lists\\" 卸载、最小停留时间和时间下拉菜单。由于不同的上下文背景,下面给出的一些选项并没有全部包含在所有上面提及的下拉菜单中。
关于随机分布下拉菜单选项的注释:这些下拉菜单中的许多选取选项是随机分布,这里不做具体说明。参见ExpertFit的文档,可以获得更多关于Flexsim的不同随机分布的信息。
常值
默认模板
Return a constant time of 10.
返回一个10的常值时间。
详细说明
返回指定的常值时间。
其它参数示例
duniform(2,4) : 注意此选项将使其不再是一个常值。也可以输入任何需要的表达式。
getlabelnum(current, "curtime")
应用背景
在需要一个常值的处理/预置时间及其它参数的时候使用。
By Itemtype (indirect)(按临时实体类型(间接))
默认模板
Time is defined by cases referenced by itemtype number:
case 1: return 1;
case 2: return 2;
case 3: return 3;
case 4: return 0;
Notes:
Case instances must be a valid itemtype number.
Additional cases may be added as needed.
Use "current" to access the current object.
Use "item" to access the involved flowitem.
根据实体类型号来定义不同情况下的时间。
case 1: return 1;
case 2: return 2;
case 3: return 3;
case 4: return 0;
注释:
每种case都必须是一个有效的实体类型编号。
可根据需要添加附加分支。
用“current(当前)”来获取当前涉及的实体。
用“ item(临时实体)”作为一个fsnode*(flexsim节点指针)来获取所涉及的临时实体。
详细说明
每种case代表一种指定的临时实类型,其返回值代表返回时间。采用正确的表述语句可以添加或移除附加分支。
其它参数示例
返回值可以是基于表或标签的。对于那种临时实体类型,不必每次都是某个特定端口。
返回值可以使用随机分布,如均匀分布。
应用背景
用来根据临时实体类型,将不同类型的临时实体发送到不同的端口。
By Label (direct)(按标签(直接))
默认模板
Return a constant time matching the number assigned to the label on item called “labelname”.
返回一个常值时间,该值与临时实体上的叫做“labelname”标签上的数字相吻合。
详细说明
返回指定实体上的标签的值。
确保指定的标签名称正确无误。
确保指定的标签是一个数字标签。
其它参数示例
current
inobject(current,2)
outobject(current,3)
centerobject(current,1)
应用背景
用标签存储时间的时候采用此选项。
By Label (indirect)(按标签(间接))
默认模板
The time is defined by the following cases referenced using the value of the label on item called "labelname"
case 1: return 10;
case 2: return 12;
case 3: return 14;
default: return 0;
Notes:
Case instances must be a valid label value.
Cases may be added or deleted as needed.
Use "current" to access the current object.
Use "item" to access the involved flowitem.
根据临时实体上叫做“labelname”的标签的值,按照如下的不同情况来定义时间。
case 1: return 10;
case 2: return 12;
case 3: return 14;
default: return 0;
注释:
每种case都必须是一个有效的实体类型编号。
可根据需要添加附加case分支。
用“current(当前)”来获取当前涉及的实体。
用“ item(临时实体)”来获取所涉及的临时实体。
详细说明
根据标签上存储的数字的情况返回不同的值。
采用正确的表述语句可以添加或移除附加分支。
确保指定的标签名称正确无误。
确保指定的标签是一个数字标签。
其它参数示例
current
inobject(current,1)
outobject(current,3)
centerobject(current,2)
case 1: return getlabelnum(current,“otherlabelname”);
case 2: return getitemtype(item);
case 3: return uniform(1,2,1);
返回值可以是基于标签或临时实体类型的。对于那种case,不必每次都是某个特定端口。
返回值也可以使用随机分布,如均匀分布。
应用背景
当输出端口是根据标签中所存储的数值来决定的时候,使用此选项。
By Lookup Table(按表查询)
默认模板
Use the time specified in the global table named “defaulttable”.. The row number will be getitemtype(item) , and the column number will be 1.
使用在全局表“defaulttable”中指定的时间。行号是getitemtype(item),列号是1。
详细说明
根据一个表中存储的数值返回一个时间。
确保指定的表的名称正确无误。
确保表中指定的单元格包含数值数据。
其它参数示例
getlabelnum(current,“labelname”)
它可用来根据模型中某个给定的标签决定查找的行或列。
详细说明
用来在全局表中查询时间。
If Itemtype Changes(如果临时实体类型改变)
默认模板
If the last itemtype is different than the current itemtype, then the time is 10 , else the time is 0 .
如果上一个临时实体类型与当前的类型不同,则时间为10,否则时间为0。
详细说明
只要到来的临时实体的类型相同,就选择“else”情况所规定的时间。然而,一旦到来一个不同类型的临时实体,就会选择第一个时间选项(10),且将新的临时实体类型设定为当前临时实体类型。后续的临时实体将一直使用“else”的时间,直到临时实体类型再次改变。
其它参数示例
getlabelnum(current,“labelname”)
uniform(5,10)
这个参数可以是随机分布、标签、表查询等。
应用背景
与预置时间一起使用来指定这样的逻辑:只要机器处理的是同一种产品,就不需要预置时间;一旦来了一种新的工件类型,机器必须经历一段预置时间。
From/To Lookup Table(从/到查询表)
默认模板
Use the time specified in the global table named "defaulttable" . Row number is specified by the previous flowitem's itemtype, and column number is specified by the current flowitem's itemtype.
使用全局表“defaulttable”中指定的时间。行号根据先前的临时实体类型指定,列号根据当前临时实体类型指定。
详细说明
在一个指定了从/到预置时间矩阵的表中进行查询,此表取决于先前的和当前的临时实体类型。
确保表的名称正确无误。
应用背景
在预置时间取决于当前临时实体和先前临时实体的类型时,用来设定预置时间。
By Percentage (inputs)(按百分比(输入))
默认模板
Time is defined by the following discrete percentages:
Percent Time
--------- -----
10 1
55 2
35 3
0 4
0 5
0 6
0 7
0 8
0 9
0 10
Times are randomly based on percentages defined above.
You may only define up to 10 percentages with this option.
Use 0 percent on unused values rather than delete lines.
Percentages must add up to 100 percent.
由下列离散百分比定义时间:
百分数 时间
10 1
55 2
35 3
0 4
0 5
0 6
0 7
0 8
0 9
0 10
时间基于上述的百分比随机确定。
使用此选项可以只定义到10%。
用不到的值定义为0%,最好不要删除行。
所有百分比的和必须是100%。
详细说明
创建一个0~100间的随机数。如果那个数字在前一个(如果是第一种情况,就是0)和指定的百分比之间,就返回指定的时间。
如果所有百分比的和不等于100%,就得不到期望的结果,且有可能导致模型停止。
其它参数示例
gettablenum(“tablename”,2,3)
getlabelnum(current,“labelname”)
getitemtype(item)
应用背景
用来定义不同情况的特定的百分比,以返回特定时间。
时间和百分比均可根据表、标签和临时实体类型确定。
By Percentage (table)(按百分比(表))
默认模板
Times are based on a continuous empirical distribution defined in the global table named "mytable" which contains percentages in column 1 and times in column 2. Use random number stream 1.
根据全局表“mytable” 中定义的连续经验分布来确定时间,表中第一列是百分比,第二列是时间。使用随机数流1。
详细说明
确保指定的表的名称正确无误。
其它参数示例
应用背景
此选项类似“按百分比(输入)”,只不过它是在表中定义百分比,不是直接输入参数。
By Time of Day(按一天内不同时段)
默认模板
Differing times per hours in the day:
int timeofday = ((int)time())%28800;
if (timeofday >=0 && timeofday <3600) return exponential(0,10,1);
if (timeofday >=3600 && timeofday <7200) return exponential(0,10,1);
if (timeofday >=7200 && timeofday <10800) return exponential(0,10,1);
if (timeofday >=10800 && timeofday <14400) return exponential(0,10,1);
if (timeofday >=14400 && timeofday <18000) return exponential(0,10,1);
if (timeofday >=18000 && timeofday <21600) return exponential(0,10,1);
if (timeofday >=21600 && timeofday <25200) return exponential(0,10,1);
if (timeofday >=25200 && timeofday <28800) return exponential(0,10,1);
区别一天中每小时的不同时段的情况:
int timeofday = ((int)time())%28800;
if (timeofday >=0 && timeofday <3600) return exponential(0,10,1);
if (timeofday >=3600 && timeofday <7200) return exponential(0,10,1);
if (timeofday >=7200 && timeofday <10800) return exponential(0,10,1);
if (timeofday >=10800 && timeofday <14400) return exponential(0,10,1);
if (timeofday >=14400 && timeofday <18000) return exponential(0,10,1);
if (timeofday >=18000 && timeofday <21600) return exponential(0,10,1);
if (timeofday >=21600 && timeofday <25200) return exponential(0,10,1);
if (timeofday >=25200 && timeofday <28800) return exponential(0,10,1);
详细说明
此选项的所有代码都是可见的。它采用time()和28800(8小时,时间单位为秒)的模数(mod())。然后,可以对8小时中的每个小时各定义一个随机分布。
其它参数示例
getlabelnum(current,“labelname”)
参数可以是标签、随机分布和表查询等。
应用背景
如果每班次内的时间都有改变,就使用此选项。
Two Possible Distributions(两种可能的分布)
默认模板
Use two different times. 50 percent of the time, use this value : uniform(1,10,1) the rest of the time, use the value : exponential(10,20,1) .
使用两种不同的时间:50%的时间使用uniform(1,10,1)的值,剩下的时间使用exponential(10,20,1)的值。
详细说明
此函数调用一个0~100间的均匀分布。如果返回值比第一个参数(50)小,它将返回第二个参数(uniform(1,10,1))。否则就返回第三个参数(exponential(10,20,1))。
其它参数示例
getlabelnum(current,“labelname”)
参数可以是标签、随机分布和表查询等。
应用背景
如果数据不能和任一随机分布很好地拟合,但有些时候数据看似某种随机分布,有些时候数据又看似另一种随机分布,这时,就使用此选项。
Different Time for Nth Item(区别第N个临时实体的时间情况)
默认模板
Every 10 th flowitem will have a setup time of 10 the rest of the flowitems will have a setup time of 1
每第10个临时实体的预置时间为10,其它的临时实体的预置时间为1。
详细说明
这里使用getinput(object)和第一个参数(10)的模数。如果模为0,则返回第二个参数(10),否则返回第三个参数(1)。
其它参数示例
getlabelnum(current,“labelname”)
每个输入均可以是标签或表的引用。模的值不能是随机分布,但其它值可以。
应用背景
用在预置时间中,来为给定数量的实体进行一次预置。
Do Not Release Item(不释放临时实体)
默认模板
Do not release the item at all. Return a -1 value.
根本不释放临时实体,返回-1值。
详细说明
此选项仅在货架的最小停留时间里使用。如果使用此选项,在最小停留时间到达后,货架也不释放这个临时实体,而是由用户采用releaseitem命令来实现释放策略。
应用背景
Use this option if you want to implement your own flowitem releasing strategy for the rack.
如果希望实现用户自定义的货架释放临时实体的策略,就使用此选项。
XE "装载时间" XE "卸载时间" 装载/卸载时间
概述:
装载时间:返回装载时间的值。在装载时间结束时,临时实体被移动到任务执行器中。
卸载时间:返回卸载时间的值。在卸载时间结束时,临时实体被移入站点中。
存取变量:
current:当前实体
tem:所涉及的临时实体
station :装载或卸载临时实体的处所
参见时间下拉菜单,可获得选取选项的列表。
XE "货架" XE "最小停留时间" 最小停留时间
概述:
此函数返回每个临时实体必须在货架里停留的最小时间。当临时实体进入货架时,就执行此函数,并返回创建一个事件。当所要求的时间结束后,货架就释放掉此临时实体。如果此函数返回-1值,那么货架就不会创建事件来释放临时实体,则必须明确地采用releaseitem()命令来释放此临时实体。如果需要执行用户自己的货架释放策略,就可以使用这个函数。
存取变量:
current :当前实体
tem:所涉及的临时实体
port:临时实体进入通过的端口
参见时间下拉菜单,可获得选取选项的列表。
XE "预置时间" 预置时间
概述:
此函数返回执行处理的实体的预置时间。
存取变量:
current :当前实体
tem:涉及的临时实体
port:临时实体进入通过的端口
参见时时间下拉菜单,可获得选取选项的列表。
XE "时间下拉菜单" 时间下拉菜单(时间间隔达到用法)
概述:
返回创建临时实体之间的秒数。
存取变量:
current :当前实体
参见时间下拉菜单,可获得选取选项的列表。
XE "处理时间" XE "周期时间" 周期时间(处理时间)
概述:
此函数返回执行处理的实体的处理时间。
存取变量:
current :当前实体
tem:涉及的临时实体
参见时间下拉菜单,可获得选取选项的列表。
固定资源
停机分配器(选取操作员)
概述:
此函数返回一个分配器(或操作员)的引用,停下操作员的请求需求将发送给它。返回值必须为双精度型,因为此函数强制返回一个双精度值。
存取变量:
current:当前实体
Specific Port(指定端口)
默认模板
The object connected to center port number 1.
连接到中间端口1的实体。
详细说明
返回一个数字引用给以特定端口号相连的分配器(或操作员)。这将把一个操作员请求发送给那个分配器(或操作员)。
其它参数示例
duniform(1,nrcp(current)):返回一个随机的中间端口号。
应用背景
当需要通过某个给定的或随机的端口发送请求时,可以使用此函数。大多数应用在实体只有一个中间端口连接的情况下。
By Table(按表)
默认模板
Call the object connected to center port number found in row 1, column 1, of the table called my "mytable".
调用在表“mytable”的第1行第1列中的中间端口号所连接的实体。
详细说明
根据一个表中存储的端口号来请求一个操作员。
确保指定表的名称正确无误。
确保那个表中指定的单元格包含数值数据。
其它参数示例
getlabelnum(current,"labelname")
它可用来根据模型中某个给定的表,改变所查看的行或列。
应用背景
用来查看一个表,看从哪一个中间端口请求一个操作员。
流速
概述:
流入速率:返回进入储液灌的临时实体之间的间隔秒数。每当有一个临时实体进入,就执行此函数。这里,应该确定进入的临时实体的体积。如果储液灌已满,一个临时实体的离开将会使储液灌空出一部分空间,则在发送触发器中再次执行流入速率函数来确定下次进入临时实体的时间。
流出速率:返回离开储液灌的临时实体之间的间隔秒数。通常,此函数在临时实体离开时执行,以找到释放下一个临时实体的时间。不过,在第一个临时实体进入时也调用此函数,来获取释放那个实体的时间。
存取变量:
Current:当前实体
Isentry:1表示此函数是在临时实体进入时执行的,0表示是在临时实体离开时执行的。
Item:如果Isentry为1,则此参数是指向刚进入的临时实体的引用,否则就指向刚离开的临时实体。
Unitsnode:这是一个指向某个节点的引用,此节点的序号可设定为此临时实体所代表的体积。只有在isentry是1,且是流入速率触发而不是流出速率触发时,设定此节点值才有效。
Constant Value(常值)
默认模板
Allow one flowitem in or out every 1 time unit(s).
允许每1 时间单位进入或离开一个临时实体。
详细说明
流入速率:每当一个临时实体进入储液灌时,都关闭储液灌的输入端口,并触发此函数。返回值是直到储液灌再次打开输入端口时的时间。此函数在进入触发器之前被调用。
流出速率:当第一个临时实体进入储液灌,它计算直到输出端口第一次打开时的时间。此函数在第一个进入触发事件之后发生。返回值是直到储液灌重新打开输出端口让另一个临时实体离开时的时间。每个离开触发事件之后,都再次触发此函数来计算直到储液灌再次打开输出端口时的时间。
其它参数示例:
duniform(2,4)
应用背景
用来控制储液灌输入输出的速率。
Units per Time(单位/时间)
默认模板
Allow 1 flow unit(s) in or out every 1 time unit(s). Each flowitem is considered 1 flow unit(s).
允许每1 单位时间进入或离开1 单位流量。每一个临时实体被当作1 单位流量。
详细说明
使用触发器可以让每个临时实体代表多个单位流量。这将影响储液灌触发其液面上升/下降经过位高标记的触发器。在流入和流出速率中使用同样的临时实体比率来处理流量单位。
在下一次打开端口允许临时实体进入/离开之前返回的时间,由这样的计算确定,每个临时实体所代表的单位数量除以指定的允许进入或离开的流量单位数,乘以指定的时间长度。
其它参数示例
3
uniform(4,7)
50
getlabelnum(item, "volume")
应用背景
用来使得一个临时实体代表一定容量的体积(流量单位)。
放置到列
概述:
此函数返回要放置进入的临时实体的货架列号。列从离货架原点最近的列开始为1,向远离原点的方向依次递增排序号。
存取变量:
current:当前实体
item:所涉及的临时实体
Random(随机放置)
默认模板
Place it in a random bay (cells are assumed to have unlimited capacity).
随机地放置到某列(假设货格容量无限)。
详细说明
此代码要被判断两次,一次是在任务执行器需要知道偏移量时,另一次是当临时实体实际进入时。
创建一个叫做curbay的标签如果它不存在,并将它设定为1到列数之间的一个随机数。
如果curbay已经存在,将销毁它并返回它存储的值,这样此代码将会在两次调用时返回一个相同的值。
应用背景
用来将临时实体随机地放置到货架某列中。
Random if Available(如果可用就随机放置)
默认模板
Place it in a random bay. If the randomly chosen bay is full, then search higher numbered bays first, then lower numbered bays. Assume each cell has a max capacity of 1 flowitem. (If all cells are full, it will be placed in bay 1)
将临时实体随机放置到某列。如果随机选择的列已满,就首先搜索序号更高的列,然后是序号较低的列。假设每个货格的最大容量是1 个临时实体(如果所有货格都已满,就放在第1列)。
详细说明
此代码要被判断两次,一次是在任务执行器希望知道偏移量时,另一次是当临时实体实际进入时。
创建一个叫做curbay的标签如果它不存在,并将它设定为1到列数之间的一个随机数。
如果此curbay标签的确存在,且最初的随机列中没有满(列中的容量小于该列的货格数乘以每个货格允许放置的临时实 体个数),将销毁它并返回它存储的值,这样此代码将会在两次调用时返回一个相同的值。
如果初始的随机列已满,则将查看每个序号较高的列,然后查看每个序号较低的列,直到发现一个未满的列。
如果所有列都已满,则放置在第1列。
其它参数示例
3
gettablenum(“mytable”,3,4)
应用背景
用来将临时实体随机放置到某列,此列的每个货格只能容纳一定数量的临时实体。
First Available(选用首个可用位置)
默认模板
Place it in the first available bay. Each cell may hold up to 1 item(s) at a time. If all cells are full, it will be placed in the first bay.
将临时实体放置在第一个可用的列。每个货格一次最多可以容纳1 个临时实体。如果所有的货格都已满,则放置在第一列。
详细说明
此代码要被判断两次,一次是在任务执行器需要知道偏移量时,另一次是当临时实体实际进入时。
返回找到的第一个未满的列(列中的容量小于此列的货格数乘以每个货格允许的容量)。
如果所有行都已满,就返回1。
其它参数示例
3
gettablenum(“mytable”,3,4)
应用背景
用来将临时实体放置到第一个可用列,其中每个货格只能容纳给定数量的临时实体。
By Itemtype(按实体类型)
默认模板
Place it in the bay corresponding to the itemtype of the flowitem.
放置临时实体到与其类型相对应的列中。
详细说明
返回实体类型作为放置临时实体的列号。
如果实体类型大于列数,就放在最后一列。
如果实体类型小于列数,就放置在第一列。
应用背景
当需要将特定类型的临时实体放置到特定列,并且是类型号和列号直接对应时,使用此选项。
By Label(按标签)
默认模板
Place it in the bay corresponding to the label called “placeinbay” of the flowitem. If the bay is full, find the closest available bay, searching first for higher bays, and then for lower bays. Each rack cell can have up to 1 item(s) in it at the same time.
根据临时实体标签“placeinbay”将其放置到相应的列。如果此列已满,则首先搜索序号较高的列,然后是序号较低的列。每个货架货格可以同时容纳1个临时实体。
详细说明
根据指定实体上的标签的数值,将临时实体放置到某列。
如果初始的随机列已满,则将查看每个序号较高的列,然后查看每个序号较低的列,直到发现一个未满的列。
如果每列都已满,则将临时实体放置到最初所选的列。
确保指定的标签名称正确无误。
确保指定的标签是数值型标签。
其它参数示例
“mylabel”
应用背景
用来根据每个临时实体的标签指定要放置到的列。
XE "货架" XE "放置" XE "层" 放置到层
概述:
此函数返回将临时实体放置到的货架层数。层从离货架原点最近的层开始编为1号,沿着远离原点的方向递增层号。
存取变量:
current:当前实体
item:所涉及的临时实体
Random(随机放置)
默认模板
Place it in a random level (cells are assumed to have unlimited capacity).
随机地放置到某层(假设货格容量无限)
详细说明
此代码要被判断两次,一次是在任务执行器需要知道偏移量时,另一次是当临时实体实际进入时。
创建一个叫做curbay的标签如果它不存在,并将它设定为1到列数之间的一个随机数。
如果curbay已经存在,将销毁它并返回它存储的值,这样此代码将会在两次调用时返回一个相同的值。
其它参数示例
N/A
应用背景
用来将临时实体随机地放置到货架的某层。
Random if Available(如果可用就随机放置)
默认模板
Place it in a random level. If the randomly chosen level is occupied, then search higher numbered levels first, then lower numbered levels. Assume each cell has a max capacity of 1 flowitem. (If all cells are full, it will be placed in level 1)
随机放置到某层。如果随机选择的层已满,则首先搜索较高序号的层,然后是较低序号的层。假设条件是每一个货格的最大容量是1个临时实体(如果所有货格都已满,就放在第1层)。
详细说明
此代码要被判断两次,一次是在任务执行器需要知道偏移量时,另一次是当临时实体实际进入时。
创建一个叫做curbay的标签如果它不存在,并将它设定为1到列数之间的一个随机数。
如果此curbay标签的确存在,且最初的随机列中没有满(列中的容量小于该列的货格数乘以每个货格允许放置的临时实 体个数),将销毁它并返回它存储的值,这样此代码将会在两次调用时返回一个相同的值。
如果初始的随机层已满,则先查看序号高的层,然后是序号较低的层,直到发现未满的层。
如果每层都已满,则放置在第1层。
其它参数示例
3
gettablenum(“mytable”,3,4)
应用背景
用来随机地放置到某层,其中每个货格只能容纳给定数量的临时实体。
First Available(选首个可用位)
默认模板
Place it in the first available level. Each cell may hold up to 1 item(s) at a time. If all cells are full, it will be placed in the first level.
放置到第一个可用的层。每个货格一次最多可以容纳1 个临时实体。所有的货格都已满,就放置在第一层。
详细说明
此代码要被判断两次,一次是在任务执行器需要知道偏移量时,另一次是当临时实体实际进入时。
返回第一个未满的层(层的容量小于层中货格数乘以每个货格允许的临时实体的容量)。
如果所有层都已满,就返回1。
其它参数示例
3
gettablenum(“mytable”,3,4)
应用背景
用来将临时实体放置到第一个可用层,其中每个货格只能容纳给定数量的临时实体。
By Itemtype(按实体类型)
默认模板
Place it in the level corresponding to the itemtype of the flowitem.
将临时实体放置到与其实体类型对应的层中。
详细说明
返回临时实体的类型,作为要放置的层号。
如果实体类型大于层数,就放在最后一层。
如果实体类型编号小于层数,就放置在第一层。
应用背景
当需要将特定类型的临时实体放置到与其类型相应的特定层的时候使用此选项。
By Label(按标签)
默认模板
Place it in the level corresponding to the label called “placeinlevel” of the flowitem. If the level is occupied, find the closest available level, starting at higher levels, and then at lower levels. Each rack cell is allowed to have 1 item(s) in it at the same time.
将临时实体放置到与标签“placeinlevel”相对应的层中。如果这层已满,则搜索最近的可用层,先搜索序号更高的层,然后是序号较低的层。每个货架货格允许同时容纳1 个临时实体。
详细说明
根据指定临时实体上的标签的值,将临时实体放置到相应的层中。
如果初始的随机层已满,则它将查看每个较高序号的层,然后是每个较低序号的层,直到找到一个未满的层。
如果每层都已满,则放置到第一层。
确保指定的标签名称正确无误。
确保指定的标签是数值标签。
其它参数示例
“mylabel”
应用背景
用来根据每个临时实体上的标签的值,放置到相应的层中。
XE "选取操作员" XE "处理分配器" 处理分配器(选取操作员)
概述:
此函数返回一个引用,是操作员请求要发送给的分配器(操作员)。返回值必须是双精度型,因为此函数强制返回双精度型。
存取变量:
current:当前实体
item:涉及的临时实体
Specific Port(指定端口)
默认模板
The object connected to center port number 1.
与中间端口1 号相连接的实体。
详细说明
返回一个通过指定端口号连接的分配器(或操作员)的引用号。这将把一个操作员请求发送给那个分配器(或操作员)。
其它参数示例
3
duniform(1,nrcp(current)) : 返回一个随机的中间端口号。
应用背景
用于需要通过给定的或随机的端口发送请求的情况。绝大多数用于实体只有一个中间端口连接的情况。
By Itemtype (direct)(按实体类型(直接))
默认模板
Call for an operator connected to a port number defined by the value of the flowitem’s itemtype.
调用一个连接到由临时实体类型的值定义的端口号上的操作员。
详细说明
将一个操作员请求通过与临时实体类型的值相等的端口号发送给分配器(或操作员)
临时实体类型2将会通过端口2发送一个请求,临时实体类型4通过端口4发送,等等。
应用背景
用来从与每个临时实体类型的值相吻合的序号的端口发送操作员请求。
By Itemtype (indirect)(按临时实体类型(间接))
默认模板
Call for an operator connected to a port number based on cases defined by the value of the flowitem’s itemtype number:
case 1: portnum = 1; break;
case 2: portnum = 2; break;
case 3: portnum = 3; break;
default: portnum = 1; break;
Notes:
Case instances must be a valid itemtype number.
Cases may be added or deleted as needed.
Use "current" to access the current object.
Use "item" to access the involved flowitem.
根据临时实体类型的值所定义的不同情况,调用连接到相应端口的操作员:
case 1: portnum = 1; break;
case 2: portnum = 2; break;
case 3: portnum = 3; break;
default: portnum = 1; break;
注释:
每种case都必须是一个有效的临时实体类型编号。 可根据需要添加其他case分支。 用“current(当前)”来获取当前涉及的实体。 用“ item(临时实体)”来获取所涉及的临时实体。
详细说明
每种case代表一种特定的临时实体类型。使用所示的语句,为那种case指定端口号。
使用正确的表述语句可以添加或移除附加的case。
其它参数示例
portnum = gettablenum(“tablename”,2,3); break;
portnum = getlabelnum(current,“labelname”); break;
portnum = uniform(2,4,1); break;
可以根据一个表或标签来分配端口号。并不需每次都为那种临时实体类型指定同一个特定的端口。
分配的端口号也可以使用随机分布,如均匀分布。
应用背景
用来根据临时实体的不同类型将操作员请求发送到相应端口。
By Label (direct)(按标签(直接))
默认模板
Call for an operator connected to a port number defined by the value of a label on item called “labelname”.
调用一个与某个端口号相连接的操作员,该端口号由临时实体 item 上一个叫做“labelname”的标签的值来确定。
详细说明
根据指定实体上标签的数值,将运输机请求发送至相应的端口。
确保指定的标签名称正确无误。
确保指定的标签是数值标签。
其它参数示例
current
inobject(current,2)
outobject(current,3)
centerobject(current,1)
应用背景
在要发送请求的端口存储在一个标签上的情况下使用。
By Label (indirect)(按标签(间接))
默认模板
Call for an operator connected to a port number based on cases defined by the value of a label on item called “labelname”.
case 1: portnum = 1; break;
case 2: portnum = 2; break;
case 3: portnum = 3; break;
default: portnum = 1; break;
Notes:
Case instances must be a valid label value.
Cases may be added or deleted as needed.
Use "current" to access the current object.
Use "item" to access the involved flowitem.
根据临时实体item上称为 “labelname”的标签的值所定义的不同情况,调用一个连接到相应相应端口号的操作员。
case 1: portnum = 1; break;
case 2: portnum = 2; break;
case 3: portnum = 3; break;
default: portnum = 1; break;
注释:
每种case都必须是一个有效的临时实体类型编号。 可根据需要添加其他case分支。 用“current(当前)”来获取当前涉及的实体。 用“item(临时实体)”来获取所涉及的临时实体。
详细说明
每种case代表那个标签上的一个值,用所示的语句来指定端口号。
如果标签不包含指定的值,则运行默认的表述声明,这将把此种情况分配为1号端口。
使用正确的表述语句可以添加或移除附加的case分支。
确保指定的标签名称正确无误。
确保指定的标签是数值标签。
其它参数示例
current
inobject(current,1)
outobject(current,3)
centerobject(current,2)
portnum = getlabelnum(current,“labelname”); break;
portnum = getitemtype(item); break;
portnum = uniform(1,2,1); break;
可以根据标签或实体类型来分配端口号。并不需要每次都为那种情况指定同一个特定的端口。
分配的端口号也可以使用随机分布,如均匀分布。
应用背景
在根据存储在一个标签中的数值来确定请求操作员的发送端口的情况下使用。
By Current Status(按当前状态)
默认模板
Call the object connected to port 1 for setup, and port 2 for processing.
调用连接到端口1 的实体来进行预置,连接到端口2 的实体来进行处理。
详细说明
此函数根据请求操作员时实体所处的状态,返回不同的值。这样,请求预置操作员和处理操作员的请求可以通过不同端口发送。
其它参数示例
getlabelnum(current,”labelname”)
getitemtype(item)
duniform(1,3)
4
应用背景
在请求预置操作员和处理操作员的请求所通过的端口不同的情况下使用。
By Table(按表)
默认模板
Call the object connected to center port number found in row 1, column 1, of the table called my “mytable”.
调用与表“mytable”的第1 行第1 列中的数字相同的端口号相连的实体。
详细说明
根据一个表中存储的端口号来请求一个操作员。
确保指定的表名称正确无误。
确保那个表中指定的单元格包含数值数据。
其它参数示例
getlabelnum(current,"labelname")
可用来根据模型中某给定标签来改变正在查看的行或列。
应用背景
用来查看一个表,看从哪一个中间端口请求一个操作员。
从端口接收(从端口拉入)
概述:
当实体采用拉动模式,且已经准备好接收下一个临时实体时,它将首先评估此 “从端口拉入”域段来确定要打开哪个输入端口。如果“从端口拉入”域段为输入端口号返回0值,则它将打开所有输入端口。当打开了一个输入端口时,如果相连接的上游实体的输出端口是打开的,则输入端口打开事件立即执行,或者在将来当相连接的上游实体的输出端口终于打开时立即触发。当输入端口打开事件触发时,将对拉入条件进行判断,确定拉入哪个临时实体。
存取变量:
current:当前实体
Specific Port(指定端口)
默认模板
Pull from port number 1.
从端口1 拉入。
详细说明
返回一个要从中拉入临时实体的指定的端口号。如果那个端口不可用,将一直等待直到可用。
其它参数示例
3
nrip(current)
应用背景
用来从某指定端口拉入临时实体,或者用nrip(current)从最后一个端口拉入。
Any Port(任意端口)
默认模板
Pull from any port.
从任意端口拉入。
详细说明
返回0,这使得从第一个可用的端口拉入。
应用背景
用来在所连接的端口可用的情况下,按顺序从端口拉入。如果没有可用的端口,则从第一个成为可用状态的端口拉入。
Round Robin(轮循模式)
默认模板
Pull from ports in round robin fashion (numerical succession).
按轮循模式(数字轮序)从各端口拉入。
详细说明
从第一个输入端口开始,等待端口变为可用状态,从此端口拉入临时实体,然后等待下一个端口。当它从最后一个端口拉入临时实体后,又开始等待第一个端口变为可用状态,如此继续轮循。
应用背景
用来从每个端口拉入一个临时实体,所有拉入请求在上游实体之间均匀分配。
Round Robin if Available(如果可用就用轮循式)
默认模板
Pull flowitems from the next available input port in round robin fashion (choosing next available input port in numerical succession).
以轮循模式(按照数字轮序选择下一个可用的输入端口)从下一个可用的输入端口中拉入临时实体。
详细说明
如果第一个端口可用,就从它开始拉入临时实体。如果此端口不可用,则看下一个端口是否可用。如果下一个端口可用,就从中拉入临时实体,否则检查下一个端口,并以轮循周期方式继续。如果没有可用的端口,则在第一个变为可用端口时从中拉入,然后从它开始继续检查。
应用背景
用来在上游实体之间均匀地分配流动实体的拉入。
Longest Queue(排队最长的)
默认模板
Pull from the port with the longest queue.
从排队最长的端口拉入。
详细说明
检查每个相连的上游实体,从排队最长的实体中拉入。
应用背景
用来从拥有最多临时实体排队等待的上游实体中拉入。
Longest Queue if Ready(可用的排队最长的)
默认模板
Pull from the port with the longest queue that is ready.
从准备好的、排队最长的端口拉入。
详细说明
检查每个相连的可用的上游实体(其与当前实体输入端口相连的输出端口是打开的),并从等待排队最长的实体中拉入。
应用背景
用来从相对其它可用的上游实体,临时实体排队等待最多的、可用的上游实体中拉入。
Longest Waiting(等待时间最长的)
默认模板
Pull from the port with the longest waiting flowitem.
从等待时间最长的临时实体所对应的端口拉入。
详细说明
检查每个相连的上游实体,从包含等待时间最长的那个临时实体的那个实体拉入。
应用背景
用来从包含有在排队中等待时间最长的临时实体的上游实体中拉入,其等待时间是相对在所有上游实体中的临时实体而言的。
Longest Waiting if Ready(可用的等待时间最长的)
默认模板
Pull from the port with the longest waiting flowitem that can leave immediately (open output port). If none are ready to leave, return 0.
从可以立即离开(输出端口打开)的临时实体等待时间最长的端口拉入。如果没有能立即离开的临时实体,就返回0。
详细说明
检查每个相连的可用上游实体(其与当前实体的相应输入端口相连的输出端口是打开的),并从包含有等待时间最长的临时实体的上游实体中拉入。
应用背景
用来从可用的、包含有排队等待时间最长的临时实体的上游实体中拉入,其等待时间是相对于所有可用上游实体中的临时实体而言的。
By Percentage (inputs)(按百分比(输入))
默认模板
Pull flowitem from the input port number defined by the following percentages:
Percent Port
--------- -----
10 1
55 2
35 3
0 4
0 5
0 6
0 7
0 8
0 9
0 10
Port selection is randomly based on percentages defined above.
You may only define up to 10 percentages with this option.
Use 0 percent on unused ports rather than delete lines.
Percentages must add up to 100 percent.
根据下列百分比从各输入端口拉入临时实体:
百分数 端口
--------- -----
10 1
55 2
35 3
0 4
0 5
0 6
0 7
0 8
0 9
0 10
端口基于上述定义的百分比随机选择。
使用此选项可以只定义到10%。 用不到的端口定义为0%,最好不要删除行。 所有百分比的和必须是100%。
详细说明
创建一个0~100之间的随机数。如果此数在前面的百分比(如果是第一种情况就是0)与指定的百分比之间,就从指定的端口拉入。
如果百分比加起来不等于100%,就得不到期望的结果,也可能导致模型停止运行。
其它参数示例
gettablenum(“tablename”,2,3)
getlabelnum(current,“labelname”)
getitemtype(item)
应用背景
用来定义从给定的端口拉入给定的百分比数量的临时实体。
此选项可用来根据表、标签和实体类型来从给定的端口拉入给定百分比数量的临时实体。
By Percentage (table)(按百分比(表))
默认模板
Pull from a port based on a discrete empirical distribution defined in the global table named “mytable” which contains percentages in column 1 and valid port numbers in column 2. Use random number stream 1.
根据定义在全局表“mytable”中的离散经验分布从相应的端口拉入临时实体。此表的第1列是百分数,第2列是有效端口号。使用随机数流1。
详细说明
确保指定的表名称正确无误。
其它参数示例
应用背景
用来在表中定义百分比,代替直接向参数中键入。
Conditional Port(按条件选择端口)
默认模板
Pull flowitem from a port based on a conditional statement: if true then pull the flowitem from port 1 else pull the flowitem from port 2.
根据一个条件表达式从相应的端口拉入:如果为true(真)则从端口1 拉入,其它情况从端口2 拉入。
详细说明
如果条件为真,就从某给定端口拉入,否则就从另一端口拉入。
“真”被一个诸如getitemtype(item) > 5,或getlabelnum(current,"mylabel")的条件表达式所替代。 如果临时实体的实体类型号大于5,getitemtype(item) > 5将返回“真”。
getlabelnum(current,"mylabel")将检查当前实体上的标签“mylabel”是否不等于(真)或等于(假)0。
其它参数示例
getlabelnum(current,“labelname”)
getitemtype(item)
gettablenum(“mytable”,3,4)
uniform(1,2,1)
端口号可根据标签、表或者实体类型来确定。它可以但不是必须每次为那种条件指定同一个给定的端口。
端口号也可以使用随机分布,如均匀分布。
应用背景
用来判断某给定条件,并根据该条件是否被满足来确定从相应的端口拉入临时实体。
By Lookup Table(在表中查找)
默认模板
Pull flowitem from the port number found in column 1, row 1, of the table called “defaulttable”.
从存储在表“defaulttable”的第1 行第1 列中的端口号相对应的端口拉入临时实体。
详细说明
根据表中记录的数字从相应端口拉入。
确保指定的表名称正确无误。
确保那个表中指定的单元格包含数值数据。
其它参数示例
getlabelnum(current,“labelname”)
应用背景
用来查看一个表,以确定从哪个输出端口拉入给定数量的临时实体。
拉入条件
概述:
这是一个布尔逻辑表达式,返回真(1)或假(0)。每当一个输入端口准备好时,就在此实体的输入端口打开事件中判断此式。一个输入端口,在它已打开并且与它相连的上游输出端口也已打开的情况下,就是准备好了。当输入端口打开,或者上游输出端口打开(假设相对应的端口已经打开了)时,连接就准备好了。对于实体内每个已准备好的临时实体,都会判断此拉入条件表达式,这些实体是与刚刚变为可用、导致输入端口打开事件被触发的端口相连接的实体。如果表达式返回真(1),就从那个准备好的输入端口拉入备好的临时实体。
存取变量:
current:当前实体
item :准备好的临时实体,正在为它判断拉入条件。
port :已变为准备好的端口号
No Requirement(无条件)
默认模板
No specific requirement. (Always returns true.)
没有特殊条件(总是返回真)
详细说明
返回 1(真)
应用背景
在拉入逻辑完全在“从端口拉入”中完成,且不关心被拉入的是哪种类型的临时实体的情况下使用。
Specific Itemtypes(指定临时实体类型)
默认模板
Only pull flowitems with itemtype number 1.
只拉入类型为1 的临时实体。
详细说明
将每个临时实体的类型与指定类型比较,如果相同就返回真,否则返回假。
其它参数示例
42
getlabelnum(current,“mylabel”):将临时实体的类型与当前实体上的一个标签比较
gettablenum(“mytable”,1,3):将临时实体的类型与一个全局表中的数值比较
一定要记住调用拉入条件的时间。如果试图使用此功能动态地改变表或标签,除非仔细计划什么时候改变它们,什么时候触发函数,否则很可能得到预想不到的结果。
应用背景
用来在任意给定的时刻拉入某种特定类型的临时实体。
Specific Label(指定标签)
默认模板
Only pull flowitems that have a label called “labelname” having a value of 1.
只拉入具有一个名为“labelname”值为1 的标签的临时实体。
详细说明
将临时实体上的指定的数值标签与指定的值比较。
其它参数示例
42
getlabelnum(current,“mylabel”):将临时实体的标签与当前实体的一个标签比较
gettablenum(“mytable”,1,3):将临时实体的标签与一个全局表的数值比较
应用背景
用来根据先前在临时实体上设定的标签拉入临时实体。
Itemtype By Case (分情况选择实体类型)
默认模板
Receive specific types of flowitems from specific ports. Switch on input port number.
case 1:
return getitemtype(item) == 10;
case 2:
return getitemtype(item) == 20;
case 3:
return getitemtype(item) == 30;
default: return 1;
Notes:
-Example only accepts itemtype 10's through port 1,
and itemtype 20's through port 2, and itemtype 30
through port 3.
-Notice double equal signs being used for comparisons.
-Case instances must be a valid port number.
-Additional cases may be added as needed.
-Unspecified ports will allow any itemtype to be pulled.
-Use "current" to access the current object.
-Use "item" to access the involved flowitem.
-Use "port" to access the current input port number.
从特定端口接收特定类型的临时实体,在输入端口号之间进行切换。
case 1:
return getitemtype(item) == 10;
case 2:
return getitemtype(item) == 20;
case 3:
return getitemtype(item) == 30;
default: return 1;
注释:
-示例中,只从端口1接收进入的类型为10的临时实体,从端口2接收类型为20的临时实体,从端口3接收类型为30的临时实体。
-请注意,用双等号来进行比较。
-每种case都必须是一个有效的端口号。
-可根据需要添加附加的case分支。
-没有指定的端口将允许拉入任意类型的临时实体。
-使用“current(当前)”来获取当前实体。
-使用“item(临时实体)”来获取相关的临时实体
-使用“port(端口)”来获取当输入前端口号。
详细说明
首先查看临时实体是从那个端口来的(case的编号)
每个端口按不同的拉入逻辑处理。(检查对比并返回结果。)
在默认的示例中,如果,临时实体从端口2来,就将其实体类型与20比较,如果实体类型等于20,就返回真,并拉入它,否则返回假,并检查下一个临时实体。
其它参数示例
case 1:
return getitemtype(item) == getlabelnum(current,“mylabel”);
case 2:
return getitemtype(item) == gettablenum(“mytable”,1,3);
case 3:
return getitemtype(item) == 30;
default: return 0;
如果将默认的返回值改为0,则不会从指定的case之外的其它端口拉入。
一定要记住调用拉入条件的时间。如果试图使用此功能动态地改变表或标签,除非仔细计划什么时候改变它们、什么时候触发函数,否则很可能得到预想不到的结果。
应用背景
在拉入逻辑取决于正在被拉动的上游实体时使用。各种case由连接到 那些实体上的端口号来定义。
Specific Rank(指定排队序号)
默认模板
Only pull flowitems that are ranked 1 in their queue.
只拉入在它们的排队中排队序号为1 的临时实体。
详细说明
排队序号是实体中所包含的临时实体的顺序。排号第一的是队列中的第一个临时实体。
如果此值设定为1,则会将队列中的第一个临时实体拉入。
其它参数示例
3
应用背景
用来从队列中某个特定位置,如第一个或者是第三个位置,拉入临时实体。
Range of Itemtype(临时实体类型范围)
默认模板
Only pull flowitems with itemtype numbers between 2 and 4.
只拉入类型在2 和 4之间的临时实体。
详细说明
比较每个临时实体的类型,如果临时实体类型比下限大而必上限小,就返回真。
如果先指定一个很大的数值,将总是返回假,且永远不会拉入。
其它参数示例
8
getlabelnum(current,“mylabel”)
gettablenum(“mytable”,1,3)
一定要记住调用拉入条件的时间。如果试图使用此功能动态地改变表或标签,除非仔细计划什么时候改变它们,什么时候触发函数,否则很可能得到预想不到的结果。
应用背景
在只拉入某实体类型范围限制内的临时实体的情况下使用。
Array of Itemtypes(类型数组)
默认模板
Only pull flowitems with itemtypes numbers listed in the following array {2,4,8}.
只拉入数组{2,4,8}所列出的实体类型的临时实体。
详细说明
将临时实体的类型与数组中的每个实体类型比较,如果与数组中的某一个相符,就返回真,并将此临时实体拉入。
其它参数示例
32, 42, 54, 89
应用背景
用来拉入特定类型的临时实体
XE "上升/下降通过位高标记触发器" 上升/下降通过位高标记触发器
概述:
当储液灌中的液面上升或者下降通过用户定义的高、中、低液位标记的时候,执行此代码。
存取变量:
current:当前实体
item :涉及的临时实体
Do Nothing(无操作)
默认模板
Do nothing
无操作
详细说明
调用此触发函数时不执行任何命令。
应用背景
在此触发器执行期间没有附加逻辑要求时采用此函数。
Close and Open Ports(打开和关闭端口)
默认模板
If true then closeinput ports of the current object.
Notes:
You may closeinput or openinput ports of an object,
and you may closeoutput or openoutput ports of an object.
Use “current” to access the current object.
如果为true(真),就对current(当前)实体进行closeinput(关闭输入)端口操作。
注释:
可以打开或关闭实体的输入端口,也可以打开或关闭实体的输出端口。
使用“current(当前)”来获取当前实体。
详细说明
打开或关闭实体的输入或输出端口。如果一个实体的输出端口被关闭,它将不会向下游发送任何临时实体,直到这些端口被重新打开。如果此实体的输入端口被关闭,他将不会接收任何临时实体,直到这些端口被重新打开。
如果条件为真,就它打开或关闭输入或输出端口。
用诸如content(current) > 5 或getlabelnum(current,"mylabel")这样的条件表达式代替 “真”。 如果当前实体中的临时实体数目大于5,则表达式content(current) > 5返回“真”。
getlabelnum(current,"mylabel")将检查当前实体上的标签 “mylabel”是否不等于(真)或等于(假)0。
如果没有用条件表达式代替真,则每次调用此函数都将打开或关闭这些输入/输出端口。
其它参数示例
inobject(current,1)
outobject(current,3)
centerobject(current,2)
应用背景
用来根据特定条件控制实体之间的临时实体流。
常用来关闭一个实体的输入端口,然后在另一个下游实体中重新打开这些端口。
Close inputs and open outputs(关闭输入和打开输出)
默认模板
Close the reservoir’s input ports and open the reservoir’s output ports.
关闭储液灌的输入端口并打开其输出端口。
详细说明
关闭储液灌的输入端口并打开其输出端口。因为储液灌的输出端口是打开的,它就会开始发送临时实体,直到此端口被关闭。因为储液灌的输入端口是关闭的,它将不会接收任何临时实体,直到这些端口被重新打开。
应用背景
用来关闭储液灌的输入端口,开始从中释放临时实体。
Close outputs and open inputs(关闭输出并打开输入)
默认模板
Close the reservoir’s output ports and open the reservoir’s input ports.
关闭储液灌的输出端口并打开其输入端口。
详细说明
关闭储液灌的输出端口并打开其输入端口。因为储液灌的输入端口是打开的,它将接收临时实体,直到这些端口被关闭。因为储液灌的输出端口是关闭的,它将不会发送任何临时实体,直到这些输出端口被重新打开。
应用背景
用来关闭储液灌的输出端口,持续接收临时实体。
Send Message(发送消息)
默认模板
Send a message to centerobject(current,1) . Pass the current object reference as “msgsendingobject”, the value tonum(item) as “msgparam(1)”, the value 2 as “msgparam(2)” and the value 3 as “msgparam(3)”.
发送一条消息给实体centerobject(current,1)。用参数“msgsendingobject”传递当前实体的引用,用参数“msgparam(1)”传递tonum(item) 的值,用参数“msgparam(2)”传递值2 ,用参数“msgparam(3)”传递值3 。
详细说明
在运行任何其它代码之前,立即执行指定实体的消息触发器中的代码。这三个指定的值可以从消息触发器中引用。当需要了解某些特定的数字时,如端口号、 实体类型或容量,就需要用到此命令。
其它参数示例
current
outobject(current,2)
inobject(current,1)
node(“/Processor1”,model())
content(current)
应用背景
用来立即执行特定实体中的一段代码。
常用来按一定顺序执行命令以产生期望的结果。
Send Delayed Message(发送延迟的消息)
默认模板
Send a delayed message to centerobject(current,1) in 0 time units from now. Pass the current object reference as “msgsendingobject”, the value tonum(item) as “msgparam(1)”, the value 2 as “msgparam(2)” and the value 3 as “msgparam(3)”.
从现在开始算起,在0 时间单位内发送一条延迟消息给实体centerobject(current,1)。用参数“msgsendingobject”传递当前实体的引用,用参数“msgparam(1)”传递tonum(item) 的值,用参数“msgparam(2)”传递值2 ,用参数“msgparam(3)”传递值3 。
详细说明
在消息触发函数中,在指定的仿真时间之后执行这些代码。
其它参数示例
current
outobject(current,2)
inobject(current,1)
node(“/Processor1”,model())
content(current)
应用背景
用来在一定延迟之后执行一段代码
经常用来重复地从实体到自身发送延迟消息,以在每个X时间里运行这段代码。
Conditional Message(条件消息)
默认模板
If true send a message to centerobject(current,1) in 0 time units from now. Pass the current object reference as “msgsendingobject”, the value tonum(item) as “msgparam(1)”, the value 2 as “msgparam(2)” and the value 3 as “msgparam(3)”.
如果为true(真),就从现在算起,在0 时间单位内发送一条延迟消息给实体centerobject(current,1)。用参数“msgsendingobject”传递当前实体的引用,用参数“msgparam(1)”传递tonum(item) 的值,用参数“msgparam(2)”传递值2 ,用参数 “msgparam(3)”传递值3 。
详细说明
“真”被一个诸如getitemtype(item) > 5,或getlabelnum(current,"mylabel")的条件表达式所替代。 如果临时实体的实体类型号大于5,getitemtype(item) > 5将返回“真”。
getlabelnum(current,"mylabel")将检查当前实体上的标签 “mylabel”是否不等于(真)或等于(假)0。如果条件表达式为真,在指定的仿真时间过去后,执行指定实体的消息触发器里的代码。
如果指定仿真时间为0,则在执行其它任何代码之前,立即执行消息触发器的代码。这三个指定的值可以从消息触发器中引用。当需要了解某些特定的数字时,如端口号、实体类型或容量,就需要用到此命令。
其它参数示例
current
outobject(current,2)
inobject(current,1)
node(“/Processor1”,model())
content(current)
应用背景
仅在条件表达式为真的情况下,用来在一段给定的时间延迟期后运行一段代码。
XE "总是发送" XE "分类输送机" 发送请求
概述:
当一个临时实体到达输送机的一个输出位置时,分类输送机将对此域段进行判断。它将返回一个真或假的结果,以确定临时实体是否要从各自的端口释放掉。
存取变量:
Current:当前实体
item :已准备好被发送的实体
port :临时实体所到达的输出端口
Always Send(总是发送)
默认模板
Always send.
总是发送
详细说明
总是返回1,意味着将会把临时实体从所要送到的输出端口释放。
应用背景
如果不关心是哪一种类型的临时实体及从哪个输出端口离开,可使用此选项。如刚好希望从第一个可用的端口离开,这就和送往端口下拉菜单中的第一个可用端口选项相类似了。
By Itemtype(按实体类型)
默认模板
Send the item if its itemtype matches the port.
如果临时实体的类型与端口相符就发送它。
详细说明
如果此临时实体类型编号与端口号相同,它就返回1。
应用背景
如果想要类型1的临时实体从端口1离开,类型2从端口2离开,依次类推,可使用此选项。这与发送到端口下拉菜单中的按类型(直接)选项相似。
By Port(按端口)
默认模板
Handle each port differently by cases:
case 1: return getitemtype(item) == 1;
case 2: return getitemtype(item) == 2;
case 3: return true;
The default option sends items of type 1 out port 1, items of type 2 out port 2,
and everything that's left over out port 3.
分各种case分别处理各个端口:
case 1: return getitemtype(item) == 1;
case 2: return getitemtype(item) == 2;
case 3: return true;
默认选项把临时实体类型1从端口1输出,类型2从端口2输出,其它类型从输出端口3输出。
详细说明
此选项针对每个的输出端口分别处理临时实体。
其它参数示例
return getitemtype(item) == 1 || getitemtype(item) == 2;
此例子中,如果一个临时实体是两类之中的一种,就将发送它到一个给定的端口。
应用背景
此选项可以像“按临时实体类型”选项一样使用,只是这里还可以为一个端口将若干类临时实体分批。它还可用来将在那点之前尚未离开的所有临时实体从最后一个输出端口发送出去。
送往端口
概述:
在每个临时实体准备好往下一个实体发送的时候,都要对此域段进行一次判断。在一个处理器实体中,临时实体在它的处理时间结束时准备好被发送。在一个暂存区中,临时实体在批量累积完成并已被释放后准备好被发送。
送往端口表达式必须返回一个有效的输出端口号。会打开输出端口,并把此端口号分 配给此临时实体。然后,当端口连接变为准备好可用(输出端口和相连的下游实体的输入端口打开)时,将临时实体推进或拉入。在特定的情况下,当送往端口表达 式返回0时,所有 的输出端口都被打开,临时实体可能从第一个准备好的端口离开。如果此实体配置了“连续判断送往端口”,则会在每次一个下游实体变为准备好接收临时实体的时候对此域段进行判断。如果此函数返回一个-1值,则根本不会释放此临时实体,将会在以后采用releaseitem()命令释放它,或者用moveobject命令将它移出。
变量操作:
current:当前实体
item:准备好被发送的实体
First available(第一个可用)
默认模板
Open all ports.
打开所有端口
详细说明
返回0,将临时实体送到第一个可用的端口。
应用背景
Used for sending to ports in the order that they were connected if available. If no port is available, it sends the flowitem to the first port to become available.
假设这些端口可用,则按照端口的连接顺序来发送临时实体。如果没有可用的端口,则从第一个变为可用的端口发送临时实体。
Default Separator Option(默认分解器选项)
默认模板
Send the contain flowitem through port 1 and the contents through port 2.
将容器临时实体从端口1 发送,将容纳的所有临时实体从端口2 发送。
详细说明
指定将容器发送到哪个输出端口,将容纳的临时实体发送到哪个输出端口。
其它参数示例
gettablenum(“tablename”,2,3)
getlabelnum(current,“labelname”)
getitemtype(item)
应用背景
在一个分解器上使用,采用不同的逻辑表述,将容器和它所容纳的临时实体发送到不同的输出端口。
Specific Port(指定端口)
默认模板
Send to port 1.
发送到端口1。
详细说明
返回将要把临时实体发送到的特定的端口号。如果那个端口阻塞,则一直等待,直到它变为可用。
其它参数示例
3
nrop(current)
应用背景
用来发送到一个特定的端口,或者,使用nrop(current) 发送到最后一个端口。
Shortest Queue(排队最短)
默认模板
Send to the port corresponding to the shortest queue downstream.
发送到与下游排队等待最短的实体相连的端口。
详细说明
查看相连的每个下游实体,发送到当前数量最少的那个实体。
应用背景
用来发送到临时实体排队等待最少的那个下游实体中。
Shortest Queue if Available(可用的排队最短的)
默认模板
Send to the port corresponding to the shortest queue downstream that is available.
发送到可用的、与等待队列最短的下游实体相对应的端口。
详细说明
查看每个相连的可用下游实体(它的输入端口连接到当前实体相应的输出端口,且是打开的),并发送到包含的当前数量最少的那个实体。
应用背景
用来将临时实体发送到可用的、与其它可用下游实体相比临时实体排队最短的那个下游实体中。
Longest Queue if Available(可用的排队最长的)
默认模板
Send to the port corresponding to the longest queue downstream that is available.
发送到与可用的、临时实体排队最长的下游实体相对应的端口。
详细说明
查看每个相连的可用下游实体(它的输入端口连接到当前实体相应的输出端口,且是打开的),并发送到包含的当前数量最多的那个实体。
应用背景
用来将临时实体发送到可用的、与其它可用下游实体相比在等待队列中包含的临时实体最多的那个下游实体中。
Random Port(随机端口)
默认模板
Send flowitem to a random output port.
发送临时实体到一个随机端口。
详细说明
返回一个1到当前实体输出端口数目之间的随机数。
应用背景
用来发送到某个特定的随机输出端口,如果此端口阻塞,则等待直到它打开。
Random Available Port(随机可用端口)
默认模板
Send flowitem to a random available output port. If none are available, send to the first port to become available.
将临时实体发送到一个随机的可用端口。如果没有端口可用,则发送到第一个变为可用的端口。
详细说明
在可用的输出端口中,它随机地选择一个作为返回。
应用背景
用来发送到一个随机的、可用的输出端口。
Round Robin(轮循)
默认模板
Send flowitem to a port in round robin fashion (choosing output ports in numerical succession).
采用轮循模式(在数字轮序中选择输出端口)将临时实体发送到一个端口。
详细说明
从第一个输出端口开始,等待此端口变为可用,将临时实体发送到此端口,然后等待下一个端口。将临时实体发送到最后一个端口之后,又开始等待第一个端口变为可用,如此继续轮循。
应用背景
用来向每个输出端口发送一个临时实体,在下游实体间均匀地分配临时实体流。
Round Robin if Available(如可用就用轮循式)
默认模板
Send flowitem to the next available output port in round robin fashion (choosing next available output port in numerical succession).
以轮循模式(按照数字轮序选择下一个可用的输出端口)将临时实体发送到下一个可用的输出端口。
详细说明
从第一个输出端口开始,如果此端口可用,则将临时实体发送到此端口,如果此端口阻塞,则尝试下一个端口是否可用。如果下一个端口可用,则将临时实体发送到那个端口。否则,检查下一个端口,并以轮循模式继续。如果没有输出端口可用,将发送到第一个变为可用的输出端口,并从那点开始继续轮循检查。
应用背景
用来把临时实体均匀地发送给所有可用的下游实体。
By Percentage (inputs)(按百分比(输入))
默认模板
Send flowitem to the output port number defined by the following percentages:
Percent Port
--------- -----
10 1
55 2
35 3
0 4
0 5
0 6
0 7
0 8
0 9
0 10
Port selection is randomly based on percentages defined above.
You may only define up to 10 percentages with this option.
Use 0 percent on unused ports rather than delete lines.
Percentages must add up to 100 percent.
按照下列百分比将临时实体发送到输出端口。
百分数 端口
--------- -----
10 1
55 2
35 3
0 4
0 5
0 6
0 7
0 8
0 9
0 10
端口基于上述定义的百分比随机选择。
使用此选项可以只定义到10%。
用不到的端口定义为0%,最好不要删除行。
所有百分比的和必须是100%。
详细说明
创建一个0~100之间的随机数。如果此数在前一个百分数(如果是第一种情况,就是0)和指定的百分数之间,就发送到指定的端口。
如果百分比加起来不等于100%,就得不到期望的结果,也可能导致模型停止运行。
其它参数示例
gettablenum(“tablename”,2,3)
getlabelnum(current,“labelname”)
getitemtype(item)
应用背景
用来定义将一定百分比的临时实体发送到一定序号的端口。
此选项可用来根据表、标签和实体类型将一定百分比的临时实体发送到特定的端口。
By Percentage (table)(按百分比(表))
默认模板
Send to a port based on a discrete empirical distribution defined in the global table named "mytable" which contains percentages in column 1 and valid port numbers in column 2. Use random number stream 1.
根据一个名为“mytable”的全局表中定义的离散经验分布发送到相应的端口,该表的第1列包含百分数,第2列是有效的端口号。使用随机数流1。
详细说明
确保指定的表名称正确无误。
其它参数示例
应用背景
用来在表中定义百分数,替代直接将它们输入到参数中的方式。
By Itemtype (direct)(按实体类型(直接))
默认模板
Send the flowitem to the port number matching the number of its itemtype.
将临时实体发送到与实体类型号相同的端口。
详细说明
类型为1的临时实体发送到端口1,类型2发送到端口2,等等。
应用背景
用来将特定类型的临时实体发送到与类型号相同的各个输出端口。
By Itemtype (indirect)(按临时实体类型(间接))
默认模板
Send the flowitem to a port number bas ed on cases defined by its itemtype number:
case 1: return 1;
case 2: return 2;
case 3: return 3;
case 4: return 0;
Notes:
Case instances must be a valid itemtype number.
Additional cases may be added as needed.
Use "current" to access the current object.
Use "item" to access the involved flowitem.
根据临时实体类型来定义不同的情况,将临时实体发送到相应的端口。
case 1: return 1;
case 2: return 2;
case 3: return 3;
case 4: return 0;
注释:
每种case都必须是一个有效的临时实 体类型编号。 可 根据需要添加更多case分支。 用“current(当前)”来获取当 前涉及的实体。 用“ item(临 时实体)”来获取所涉及的临时实体。
详细说明
每种case代表一种特定类型的临时实体,返回值代表要把那个类型的临时实体送往的 端口号。返回0将 会发送给第一个可用的实体。使用正确的表述语句可以添加或移除case分支。
其它参数示例
case 1: return gettablenum(“tablename”,2,3);
case 2: return getlabelnum(current,“labelname”);
case 3: return uniform(2,4,1);
返回值可以是基于标签或表的。并不需每次都为那种实体类型指定同一个特定的端口。
返回值也可以使用随机分布,如均匀分布。
应用背景
用来根据临时实体类型将不同类型的临时实体发送给不同的端口。
By Label (direct)(通过标签(直接))
默认模板
Send the flowitem to a port number matching the number assigned to the label on item called “labelname”.
发送临时实体到一个端口,此端口号与临时实体item上名为“labelname” 的标签所赋的数值相同。
详细说明
返回指定实体上的标签的值。如果那个端口阻塞,就等待直到可用时发送临时实体。
确保指定的标签名称正确无误。
确保指定的标签是数值标签。
其它参数示例
current
inobject(current,2)
outobject(current,3)
centerobject(current,1)
应用背景
在要送往的输出端口号存储在一个标签上的情况下使用。
By Label (indirect) (通过标签(间接))
默认模板
Send the flowitem to a port number based on cases defined by the value of the label on item called “labelname”.
case 1: return 1;
case 2: return 2;
case 3: return 3;
default: return 0;
Notes:
Case instances must be a valid label value.
Cases may be added or deleted as needed.
Use "current" to access the current object.
Use "item" to access the involved flowitem.
根据临时实体 item 上名为“labelname”的标签的值所定义的不同情况,将临时实体发送到相应的输出端口。
case 1: return 1;
case 2: return 2;
case 3: return 3;
default: return 0;
注释:
每种case必须是一个有效的标签值。
可根据需要添加或删除case分支。
使用“current(当前)”来获取当前实体。
使用“item(临时实体)”获得相关临时实体。
详细说明
根据存储在一个数值标签中的不同情况返回不同的值。
使用正确的表述语句可以添加或移除附加的情况。
确保指定的标签名称正确无误。
确保指定的标签是数值标签
其它参数示例
current
inobject(current,1)
outobject(current,3)
centerobject(current,2)
case 1: return getlabelnum(current,“labelname”);
case 2: return getitemtype(item);
case 3: return uniform(1,2,1);
返回值可以是基于标签或实体类型的。并不需要每次都为那种情况指定同一个特定的端口。
返回值也可以使用随机分布,如均匀分布。
应用背景
在根据存储在签中的不同case编号来确定相应输出端口的情况下使用。
Conditional Port(条件端口)
默认模板
Send flowitem to a port based on a conditional statement:
if true then send the flowitem to port 1 else send the flowitem to port 2.
Notes:
Use "current" to access the current object.
Use "item" to access the involved flowitem.
根据一个条件表达式,将临时实体发送到相应的端口:
如果为true(真)就将临时实体发送到端口1,否则发送到端口2。
注释:
使用“current(当前)”来获取当前实体。 使用“item(临时实体)”来获取涉及的临时实体。
详细说明
如果条件为真,就发送到某个特定端口,否则发送到另一个端口。
“ 真”被一个诸如getitemtype(item) > 5,或getlabelnum(current,"mylabel")的条件表达式所替代。 如果临时实体的实体类型号大于5,getitemtype(item) > 5将返回“真”。
getlabelnum(current,"mylabel")将检查当前实体上的标签 “mylabel”是否不等于0(真)或等于0(假)。
其它参数示例
getlabelnum(current,“labelname”)
getitemtype(item)
gettablenum(“mytable”,3,4)
uniform(1,2,1)
端口号可根据标签、表或者实体类型来确定。它可以但不是必须每次为那种条件指定同一个给定的端口。
端口号可以使用随机分布,如均匀分布。
应用背景
用来查看一个给定条件,并根据条件是否被满足将临时实体发送到相应的输出端口。
By Lookup Table(在表中查找)
默认模板
Send flowitem to the output port number found in column 1, row getitemtype(item), of table called “defaulttable”.
将临时实体发送到表“defaulttable”中的第1 列第getitemtype(item) 行中数字相对应的端口。
详细说明
根据存储在表中的数字发送到相应端口。
确保指定的表名称正确无误。
确保那个表中指定的单元格包含数值数据。
其它参数示例
getlabelnum(current,“labelname”)
这可以用来根据模型中的某给定标签改变你所查看的行与列。
应用背景
用来查看一个表,以确定将给定的临时实体发送到哪个输出端口。
Matching Itemtypes(对应实体类型)
默认模板
Send flowitem to the output port connected to an object that contains flowitems whose itemtype matches the itemtype of the involved flowitem.
将临时实体发送到特定的端口,此端口与一个实体相连,而那个实体包含有与涉及的临时实体类型相同的临时实体。
详细说明
如果某下游临时实体包含一个临时实体,它与所涉及的临时实体类型相同,则将返回与那个实体相连的端口号,并将临时实体发送到那个端口。如果那个端口阻塞,将等待直到它变为可用再发送临时实体。如果找不到与之相同的临时实体类型,将把临时实体发送到第一个可用的实体,即使那个实体中已经有一个不同类型的临时实体。
应用背景
下游的机器重复处理同一类型的临时实体时效率会很高,在此情况下,用来将具有与那种实体类型相同的临时实体发送给此下游实体。
Round Robin Array (if Available)(轮循数组(如果可用))
默认模板
Send specific numbers of flowitems to specific output ports in continuous rotation. The number of output ports is 3 for this object. Send flowitems to the output ports according to the following array of quantities: 2, 1, 2
Example: if the array is {1, 2, 1}, then the object will first send 1 flowitem to port 1, the next 2 flowitems to port 2, the next 1 flowitem to port 3. It will then repeat the sequence.
用连续巡回的方式发送特定数量的临时实体到特定的端口。对此实体,输出端口数目为3 。根据如下的数量数组:2, 1, 2,将临时实体发送到此指定端口。
示例:如果数组是{1,2,1},则实体将把1个临时实体发送到端口1,把后面两个临时实体发送到端口2,把再下1个临时实体发送到端口3。然后重复此次序。
详细说明
在数个输出端口之间,采用轮循模式向每个端口发送不同数量的临时实体。
确保输出端口数与数组中的数量个数相等。如果选择了“如果可用”选项,则实体将跳过轮循中不可用的相关端口的选项。
其它参数示例
3 {1,2,2}
4 {3,2,1,1}
5 {2,5,3,1,2}
应用背景
Used to distribute a certain number of items among certain output ports in a logical rotation.
用来按照循环轮回的逻辑在给定的多个输出端口之间分配给定数量的临时实体。
By Time of Day(按一天内不同时段)
默认模板
Send to different ports depending on the hour of the day:
int timeofday = ((int)time())%28800;
if (timeofday >=0 && timeofday <3600) return 1;
if (timeofday >=3600 && timeofday <7200) return 2;
if (timeofday >=7200 && timeofday <10800) return 3;
if (timeofday >=10800 && timeofday <14400) return 4;
if (timeofday >=14400 && timeofday <18000) return 5;
if (timeofday >=18000 && timeofday <21600) return 6;
if (timeofday >=21600 && timeofday <25200) return 7;
if (timeofday >=25200 && timeofday <28800) return 8;
根据一天内的不同小时时段,发送到不同的端口:
int timeofday = ((int)time())%28800;
if (timeofday >=0 && timeofday <3600) return 1;
if (timeofday >=3600 && timeofday <7200) return 2;
if (timeofday >=7200 && timeofday <10800) return 3;
if (timeofday >=10800 && timeofday <14400) return 4;
if (timeofday >=14400 && timeofday <18000) return 5;
if (timeofday >=18000 && timeofday <21600) return 6;
if (timeofday >=21600 && timeofday <25200) return 7;
if (timeofday >=25200 && timeofday <28800) return 8;
详细说明
根据一天内不同的时段(假设时间单位是秒)将临时实体发送到不同的端口。原示例将每个8小时班次分给了8个不同的端口。在第一个小时内,临时实体发送到端口1;第二个小时内发送到端口2,依次类推。
其它参数示例
这里包含了此域段的全部代码,可以在此编辑所有的内容。可以改变端口号,或者每个端口对应的小时时段,或者一个给定班次的时间,等等。
Do Not Release Item(不释放临时实体)
默认模板
Do not release the item at all.
Select this option if you have written other code on this object that explicitly handles moving the item to the next station.
不释放任何一个临时实体。
如果已经在实体上编写了其它代码来明确地规定如何将临时实体移动到下一站,则可选择此选项。
详细说明
返回-1值,将导致固定实体不释放临时实体。
应用背景
如果在此实体上有明确地处理临时实体移动到下一站的逻辑,就使用此选项。
XE "去托盘" XE "分解数量" 分解数量(分解/拆盘数量)
概述:
此函数返回从当前实体分解或拆盘出的临时实体的数量。
存取变量:
current :当前实体
item :涉及的临时实体,这是将要被分割或的临时实体。
Specific Number(指定数量)
默认模板
Split (or UnPack) quantity of 1.
分解(或拆盘)数量为1。
详细说明
如果采用分解模式,且指定的数量大于1,将创建多个临时实体的复制品。例如,如果分解数量为5,则会创建4个原始临时实体的复制品,然后将它们和原始临时实体发送到指定的输出端口。
如果采用分解模式,且指定的数量是1,则分解器完全像是一个包含有一个临时实体的处理器一样。不会生成复制品。
如果拆盘一定数量,则从容器实体中拆盘出指定数量的临时实体。拆盘操作从最后一个装盘进去的临时实体开始。
如果要拆盘的数量大于或等于装盘的临时实体数量,将会从最后一个装盘进去的临时实体开始,拆盘出所有临时实体。
其它参数示例
8
getlabelnum(current,“mylabel”)
gettablenum(“mytable”,1,3)
duniform(1,3,1)
应用背景
用来从装盘的临时实体中拆盘出某个变量定义的数量的临时实体,或者用来将一个临时实体分解为多个临时实体。
Entire Contents(全部容量)
默认模板
UnPack the entire content of the flowitem.
拆盘出全部的临时实体。
详细说明
返回content(item),它是装盘到此容器中的临时实体的数量。
如果查看到是分解方式,而不是去托盘模式,将根据装盘到此容器中的临时实体的数量,创建此临时实体的复本及其包含的实体。
此下拉菜单选项如同“指定数量”一样,它返回content(item)(所涉及的临时实体的容量)
应用背景
用来拆盘出全部数量的临时实体。
运输分配器(按下列请求运输工具)
概述:
此函数返回一个分配器(或运输工具)的引用,运输工具请求将发送给它。返回值必须换算成一个数字,因为此函数强制返回一个双精度值。
存取变量:
current:当前实体
item:将要被运输的临时实体
Specific Port(指定端口)
默认模板
The object connected to center port number 1.
连接到中间端口1 的实体。
详细说明
返回一个连接到指定端口号的分配器(或运输工具)的数字引用。这将发送一个运输工具请求给那个分配器(或运输工具)。
其它参数示例
duniform(1,nrcp(current)) :返回一个随机中间端口号
3
应用背景
在需要通过特定或随机的端口发送请求的情况下使用。更多用于实体上只有一个中间端口连接的情况。
By Itemtype (direct)(按实体类型(直接))
默认模板
Call for a transport connected to a port number defined by the value of the flowitem’s itemtype.
调用与临时实体类型号相同的端口号所连接的运输工具。
详细说明
通过与临时实体类型号相同的端口号给分配器(或运输工具)发送一个操作员请求。
类型为2的临时实体通过端口2发送一个请求,类型为4的通过端口4发送,依此类推。
应用背景
用来通过每个临时实体类型相同的端口号来发送运输工具请求。
By Itemtype (indirect)(按临时实体类型(间接))
默认模板
Call for a transport connected to a port number based on cases defined by the value of the flowitem’s itemtype number:
case 1: portnum = 1; break;
case 2: portnum = 2; break;
case 3: portnum = 3; break;
default: portnum = 1; break;
Notes:
Case instances must be a valid itemtype number.
Cases may be added or deleted as needed.
Use "current" to access the current object.
Use "item" to access the involved flowitem.
根据临时实体类型号所定义的不同情况,调用连接到相应端口的运输工具。
case 1: portnum = 1; break;
case 2: portnum = 2; break;
case 3: portnum = 3; break;
default: portnum = 1; break;
注释:
每种case都必须是一个有效的临时实体类型编号。 可根据需要添加或删除附加case分支。
用“current(当前)”来获取当前涉及的实体。
用“item(临时实体)”来获取所涉及的临时实体。
详细说明
每种case代表一种特定的临时实体类型。用所示的语句为每种case指定端口号。
使用正确的表述语句可以添加或移除case分支。
其它参数示例
portnum = gettablenum(“tablename”,2,3); break;
portnum = getlabelnum(current,“labelname”); break;
portnum = uniform(2,4,1); break;
可根据标签或表来分配端口号。并不需要每次都为那种实体类型指定同一个特定的端口。
分配的端口号也可以使用随机分布,如均匀分布。
应用背景
用来据临时实体类型将运输工具请求发送到相应的端口。
By Label (direct)(按标签(直接))
默认模板
Call for a transport connected to a port number defined by the value of a label on item called “labelname” .
按照临时实体item上的名为 “labelname”的标签的值,调用连接到相应端口上的运输工具。
详细说明
根据指定实体上的一个标签的值,将运输工具请求发送到相应的端口。
确保指定的标签名称正确无误。
确保指定的标签是数值标签。
其它参数示例
current
inobject(current,2)
outobject(current,3)
centerobject(current,1)
应用背景
在发送请求的端口存储在标签上的情况下使用。
By Label (indirect)(按标签(间接))
默认模板
Call for a transport connected to a port number based on cases defined by the value of a label on item called “labelname”.
case 1: portnum = 1; break;
case 2: portnum = 2; break;
case 3: portnum = 3; break;
default: portnum = 1; break;
Notes:
Case instances must be a valid label value.
Cases may be added or deleted as needed.
Use "current" to access the current object.
Use "item" to access the involved flowitem.
根据临时实体item上的名为 “labelname”的标签的值,调用连接到相应端口的运输工具。
case 1: portnum = 1; break;
case 2: portnum = 2; break;
case 3: portnum = 3; break;
default: portnum = 1; break;
注释:
每种case都必须是一个有效的标签值。
可根据需要添加或删除case分支。
使用“current(当前)”来获取当前实体。
使用“item(临时实体)”来获取涉及的临时实体。
详细说明
每种case代表那个标签上的一个值。采用所示语句为那种情况指定端口号。
如果标签没有包含任何指定的值,则运行默认表述,这将为此种case分配端口1。
使用正确的表述语句可以添加或移除附加的情况。
确保指定的标签名称正确无误。
确保指定的标签是数值标签。
其它参数示例
current
inobject(current,1)
outobject(current,3)
centerobject(current,2)
portnum = getlabelnum(current,“labelname”); break;
portnum = getitemtype(item); break;
portnum = uniform(1,2,1); break;
可以根据标签或实体类型来分配端口号。并不需要每次都为那种情况指定同一个特定的端口。
分配的端口号也可以使用随机分布,如均匀分布。
应用背景
在发送请求所通过的端口根据存储在一个标签中的数值来确定的情况下使用。
By Table(按表)
默认模板
Call the object connected to center port number found in row 1, column 1, of the table called “mytable”.
调用名为“mytable”的表中第1 行第1 列中存储的中间端口号所连接的实体。
详细说明
根据一个表中存储的端口号来请求一个运输工具。
确保指定的表名称正确无误。
确保那个表中指定的单元格包含数值数据。
其它参数示例
getlabelnum(current,"labelname")
用来根据模型中一给定标签来改变所查看的表的行或列。
应用背景
用来检查一个表,以确定从哪个中间端口请求一个运输工具。
Create Tasksequence Manually(手工地创建任务序列)
默认模板
Create tasksequence manually.
手工创建任务序列。
详细说明
此下拉菜单在代码视窗中显示一个模板,用来显示如何创建用户自己的任务序列。参考帮助中的任务序列部分可以更好地理解如何创建。
应用背景
用来为一个任务执行器创建一个定制的任务序列替代默认的任务序列。
Flowitem as TaskExecuter(临时实体作为任务执行器)
默认模板
Use the item as a TaskExecuter. Move the item into the model, then connect it to a NetworkNode that is connected to this object. Then tell it to travel to the destination and unload itself into the object. Note: this will only work for flow items created from the TaskExecuterFlowItem in the flow item bin.
将临时实体作为任务执行器使用。将临时实体移入模型,然后将它连接到一个网络节点,此网络节点连接到此实体。然后告诉它向目的地行进,并将其自身卸载到实体中。注释:只有针对从临时实体箱中的 “任务执行器临时实体”创建的临时实体,此功能才可正常使用。
详细说明
Allows flowitems to travel on network node paths between objects.
允许临时实体在实体间的网络节点路径上行进。
应用背景
用来模拟特定类型的临时实体沿路径的运动,如车道交通、AGV,或者在游乐园中被处理的人。
XE "速度" 临时实体速度(速度)
概述:
当每个临时实体进入时,对此参数进行一次判断。返回临时实体的速度。
存取变量:
current:当前实体
item:准备要发送的临时实体
临时实体速度下拉菜单采用与 时间下拉菜单一样的选项,只不过返回值被解释为速度而不是时间。
可移动资源
中断(条件中断响应)
概述:
定义此实体在“中断”当前激活任务序列的过程中可以接受哪种类型的任务序列。一个标准的任务序列由行进 - 装载 - 条件中断响应 - 行进 - 卸载任务序列组成。只有当任务执行器执行 “中断”任务时才对此域段进行判断。
当任务执行器接收到一个“中断”任务时,这就是一个通知,让它把当前激活的任务序列放到它的任务队列中,去查看一下是否有其它任务序列需要在完成当前任务序列之前先来执行。这样可以实现一些功能,如,可以在卸载之前装载多个临时实体。在这种情况下,任务执行器首先要进行检查以确定它在当前可以执行“多任务”。这是通过询问 “我的当前数量是否小于我的容量”来完成的。如果检查结果是真,则它将会执行这段代码,找到要在中断后转向新的任务序列。如果此代码返回空,它就不中断。如果返回一个有效的任务序列数字指针,则它将中断并转向新的任务序列而开始执行它。完成新任务之后,它将会返回到原来的任务序列。
存取变量:
tasksequence:正在检查的任务序列的引用
current:当前实体
New Tasksequences Only (只执行新任务)
默认模板
Take only new tasksequences (no partially completed sequences)
只执行新任务(不执行已部分完成的任务序列)
详细说明
在当前实体的任务序列的队列中,第一个包含未完成任务的任务序列将变为激活任务序列,而当前激活任务序列将被推回到任务序列队列中。
如果此实体的任务序列队列中没有包含有任何未完成任务的任务序列,则返回空,并且在中断任务期间不做任何操作。
应用背景
与具有装载容量大于1的任务执行器一起使用来装载多个临时实体。
Specific itemtype (指定临时实体类型)
默认模板
Only break to a tasksequence whose load task’s (second task) involved flowitem has itemtype 1.
只有存在这样的任务序列,即它的装载任务(第二个任务)所涉及的临时实体类型为1,才中断当前任务序列。
详细说明
在当前实体的任务序列队列中,第一个包含有未完成任务和一个涉及的具有指定类型的临时实体的任务序列,将成为激活任务序列,而当前的激活任务序列将被推回到任务序列队列中。
如果此实体的任务序列队列中没有包含未完成任务的任务序列,且涉及的临时实体也不是指定的实体类型,则返回空,那么在中断期间无任何操作。
其它参数示例
getlabelnum(current,“mylabel”)
12
应用背景
用来在其它临时实体是一种特定类型时装载多个临时实体。
Specific label (指定标签)
默认模板
Only break to a tasksequence whose load task’s (second task) involved flowitem has a label “labelname” with value 1.
只中断去执行满足这样的条件的任务序列,该任务序列的装载任务(第二个任务)所涉及的临时实体有一个名为“labelname”、值为1 的标签。
详细说明
在当前实体的任务序列队列中,第一个包含有未完成任务且包含有一个指定标签值的临时实体的任务序列,将成为激活任务序列,而当前激活任务序列将被推回到任务序列队列中。
如果此实体的任务序列队列中不存在既没有包含有未完成任务,并且所涉及的临时实体上也没有指定标签值的任务序列,则返回空,并且在中断期间不做任何操作。
其它参数示例
“mylabel”
15
应用背景
如果其它临时实体都包含一个特定标签,设定为特定值,则使用此选项来装载多个临时实体。
Same load station(相同装载站点)
默认模板
Only load flowitems from the same station object.
只从相同站点实体装载临时实体
详细说明
在当前实体的任务序列队列中,第一个既包含有未完成任务,并且涉及的一个装载站点与当前涉及站点相同的任务序列,将变为激活任务序列,而当前激活任务序列将被推回到任务序列队列中。
如果此实体的任务序列队列中,不存在既没有包含未完成任务,又没有包括与当前涉及的站点相同的涉及站点的任务序列,则返回空,在中断任务期间不做任何操作。
应用背景
用来在同一站点装载多个临时实体。
Same itemtype(相同临时实体类型)
默认模板
Take only tasksequences to transport a flowitem whose itemtype matches the itemtype of the first flowitem this object picked up. This option assumes that the tasksequences are standard sequences. (. Travel/Load/Break/Travel/Unload)
只执行这样的任务序列,这些任务序列运输与此实体第一个捡取的临时实体类型相同的临时实体。此选项假设前提条件是任务序列是标准的任务序列(行进/装载/中断/行进/卸载)
详细说明
在当前实体的任务序列队列中,第一个既包含未完成任务,又涉及一个与当前实体的第一个临时实体的类型相同的临时实体的任务序列,将成为激活任务序列,而当前激活任务序列将被推回到任务序列队列中。
如果此实体的任务序列队列中,不存在既没有包含有未完成任务,所涉及的临时实体又不同于当前实体中的第一个临时实体的类型的任务序列,则返回空,那么在中断任务期间不做任何操作。
应用背景
用来装载与第一个装载的临时实体类型相同的多个临时实体。
Same destination(相同目的地)
默认模板
Take only tasksequences to transport a flowitem whose destination matches the destination of the first flowitem this object picked up. This option assumes that the tasksequences are standard sequences. (. Travel/Load/Break/Travel/Unload)
只执行满足这样条件的任务序列,该任务序列用来运输那些目的地与此实体所捡取的第一个临时实体的目的地相同的临时实体。此选项假设任务序列是标准的任务序列(行进/装载/中断/行进/卸载)
详细说明
在当前实体的任务序列队列中,第一个包含未完成任务,且涉及的一个卸载站点与当前涉及的卸载站点相同的任务序列,将会成为激活任务序列,而当前激活任务序列将被推回到任务序列队列中。
如果此实体的任务序列队列中没有包含有未完成任务且其相关临时实体类型与当前实体中的第一个临时实体目的地不相同的任务序列,则返回空,在中断期间无任何操作。
应用背景
用来装载具有相同目的地(一个下游实体)的多个临时实体。
XE "绩效指标" XE "最短距离" XE "排队策略" XE "排队最短" XE "实验" XE "传递给" 传递给
概述:
此函数在分配器接收到一个任务序列时被触发,它将返回一个输出端口,分配器将通过此端口传递该任务序列。如果返回0,则此任务序列将依照排队策略自动排队,直到它可以被传递给一个可用的分配器或任务执行器。如果此返回值大于0,则此任务序列将会立即被传递到返回的端口。如果返回-1值,则分配器会认为,所有的分配逻辑都已经在“传递给”函数中采用movetasksequence()和dispatchtasksequence()命令完成,因此无操作。
存取变量:
tasksequence :任务序列节点的引用
current :当前实体
First available(第一个可用)
默认模板
Pass to the first available object. If there are none currently available, then queue the tasksequence up using the Queue Strategy and wait until someone connected to its output ports becomes available.
传递给第一个可用的实体。如果当前没有可用实体,则将任务序列按照排队策略进行排队等待,直到连接到它的输出端口的某个实体变为可用。
详细说明
返回0,发送到第一个可用的实体。
如果当前没有可用实体,则将任务序列按照排队策略进行排队等待,直到连接到它的输出端口的某个实体变为可用。
应用背景
用来按照任务执行器的连接顺序,在其可用的情况下,将任务序列发送给它们。
Specific Port(指定端口)
默认模板
Pass to port 1.
传递给端口1。
详细说明
返回一个与一个任务执行器相连的指定端口号,任务序列将被送往此端口。如果那个任务执行器不可用,则等待直到它变为可用。
其它参数示例
3
nrop(current)
应用背景
用来将任务序列发送到一个特定端口,或者在采用nrop(current) 的情况下发送到最后一个端口。
Shortest Distance(最短距离)
默认模板
Pass to the object that is closest to the destination (if the object is on a network, then network travel is calculated; otherwise centroid-to-centroid distance is used). If true then only consider objects who are not currently busy. In such a case, if none are found, then the tasksequence will be queued up using the Queue Strategy, and will be sent to the first available.
传递给离目的地最近的实体(如果此实体是在一个网络上,则计算网络行进路径;否则,采用中心到中心的距离)。如果为true(真),则只考虑当前空闲的实体。在这种情况下,如果没有找到可用的,则此任务序列按照排队策略排队等待,并将被发送给第一个变为可用的实体。
详细说明
要使该选项正常工作,任务序列中的第一个任务必须是行进任务。
对于当前实体的每一个输出端口而言,此选项检查看它是否是一个任务执行器,并将任务序列发送给离任务序列中第一个行进任务的目的地最近的任务执行器。
如果此条件表达式为真,则只考虑当前空闲的实体。在这种情况下,如果一个也没找到,则任务序列将会按照排队策略排队等待,并将发送给第一个可用的任务执行器。
其它参数示例
false
getlabelnum(curobj,“mylabel”) > 2 :在此函数中,参数curobj在经过每个下游实体时,对其每一个进行引用。
getlabelnum(current,“mylabel”) == 3
gettablenum(“mytable”,1,1) != 0
应用背景
用来将任务序列传递给离序列中第一个任务的目的地最近的任务执行器。
Shortest Queue(排队最短)
默认模板
Pass to the object whose tasksequence queue is the shortest.
传递给任务序列排队最短的实体。
详细说明
对当前实体的每个输出端口,检查每个下游实体的任务序列队列的长度,并传递给排队等待的任务序列最少的那个任务执行器。
应用背景
当需要在任务执行器中让任务序列排队时使用,将任务序列传递给目前队列中任务序列累积最少的那个任务执行器。
Round Robin(轮循)
默认模板
Distribute tasks in a round robin fashion.
Note: if you want to explicitly define a beginning port to send to each time you reset the model, then you will need to explicitly set a label called “fs_lastport” to (port number - 1) in this object’s reset trigger.
采用轮循模式分配任务。
注释:如果要明确地定义在每次重置模型时都从同一个端口开始,则需要在此实体的重置触发器中明确地设定一个叫做“fs_lastpor”的标签(端口号为-1)。
详细说明
用一个标签记录最后送往的端口,此标签在模型重置时不会被重置。
如果此标签比输出端口数目大,则将它重置为1。
每分配一个新的任务序列,就将此标签递增1,并返回标签中存储的输出端口号。
分配给忙或闲的任务执行器。
应用背景
用来将任务序列均匀地分配给所有连接到当前实体的输出端口的任务执行器。
XE "排队策略" XE "分解数量" 排队策略
概述:
当分配器接收到一个任务序列,且“传递给”函数返回0,然后,当这个新的任务序列进入分配器的任务序列队列时,分配器会遍历它的任务序列队列,在每个任务序列上执行同一个函数,并将其返回值与刚接收到的任务序列的返回值相比较。新的任务序列将按照此函数所返回的值从高到低进行排列(返回值最高的将被排到任务序列的前面)。
存取变量:
tasksequence:任务序列节点的引用
current:当前实体
Sort by Priority(按优先级排序)
默认模板
Sort by the priority of the tasksequence.
按任务序列的优先级排序。
详细说明
返回任务序列的优先级。首先传递较高优先级的任务序列。
应用背景
用来确保任务序列按照优先级顺序被分配和执行。
实验
实验结束
概述:
此函数在最后一个场景的最后一次运行结束时执行一次。
存取变量:
replication:当前所进行的重复运行的序号
scenario:当前场景的序号
Do Nothing(无操作)
默认模板
Do nothing
无操作
详细说明
此函数被调用时不执行任何命令。
应用背景
在此触发器执行期间没有附加逻辑要求时采用此函数。
Display Message(显示消息)
默认模板
Display message at end of experiment.
在实验结束的时候显示消息。
详细说明
向输出控制台(视图/输出控制台)写入实验状态的相关信息。
应用背景
用来在实验运行过程中观看和跟踪模型状态。
XE "结束" XE "重复运行" XE "结束" XE "运行" XE "结束" XE "结束" XE "实验" 运行结束(每次重复运行结束)
概述:
此函数在每次用户为重复运行定义的仿真时间结束时执行。
存取变量:
replication:当前重复运行的序号
scenario:当前场景的序号
Do Nothing无操作
默认模板
Do nothing
无操作
详细说明
此函数被调用时不执行任何命令。
应用背景
在此触发器执行期间没有附加逻辑要求时采用此函数。
Display Message(显示消息)
默认模板
Display message at the end of each simulation run.
在每次仿真运行结束的时候显示消息。
详细说明
向输出控制台(视图/输出控制台)写入实验状态的相关信息。
应用背景
用来在实验运行过程中观看和跟踪模型状态。
Write to table(写入表)
默认模板
Record information to a global table:
settablenum("Produced",replication,scenario,getnodenum(stats_input(Sink1)));
settablenum("WaitTime",replication,scenario,getnodenum(stats_staytimeavg(Queue1)));
settablenum("IdleTime",replication,scenario,getnodenum(rank(state_profile(Processor1),STATE_IDLE)));
Note: The above examples write each variable to a new global table. Each row is a new replication of a given scenario, and each column is a new scenario. The sample code assumes the following global variables have been defined to reference model objects: Queue1, Processor1, and Sink1.
在一个全局表中记录信息:
settablenum("Produced",replication,scenario,getnodenum(stats_input(Sink1)));
settablenum("WaitTime",replication,scenario,getnodenum(stats_staytimeavg(Queue1)));
settablenum("IdleTime",replication,scenario,getnodenum(rank(state_profile(Processor1),STATE_IDLE)));
注释:上面的示例将每个变量写入到一个新的全局表中。每一行是一个给定场景的一次重复运行,每一列是一个新的场景。样本代码假设下面的全局变量已被定义为模型实体的引用:Queue1(暂存区1), Processor1(处理器1), and Sink1(吸收器1)。
详细说明
必须首先已经创建了表,然后每次调用settablenum函数时按名称作为第一个参数来引用。表必须有足够的行和列来写入数据。在仿真运行期间不能添加行和列。要写入的单元格必须配置为接收数值数据。
第二个和第三个参数分别是行数和列数。在这里,行数与每个场景的重复次数相关,列数就是场景数目。
每次调用函数中的第四个参数用来指定将要写入表的数据,它可以用不同的命令引用出来。
其它参数示例
settablenum("Produced",replication,scenario,getinput(Sink1));
settablenum("WaitTime",replication,scenario,getvarnum(Queue1,"maxcontent"));
settablenum("IdleTime",replication,scenario,getnodenum(rank(state_profile(Processor1),STATE_IDLE)));
应用背景
用来向表中写入输出条件
XE "实验" XE "场景" XE "结束" 场景结束
概述:
此函数在每个场景最后一次重复运行结束时执行。
存取变量:
replication:当前重复运行的序号
scenario:当前场景的序号
Do Nothing(无操作)
默认模板
Do nothing
无操作
详细说明
此函数被调用时不执行任何命令。
应用背景
在此触发器执行期间没有附加逻辑要求时采用此函数。
Display Message(显示消息)
默认模板
Display message at the end of each scenario.
在每个场景结束的时候显示消息。
详细说明
向输出控制台(视图/输出控制台)写入试验状态的相关信息。
应用背景
用来在实验运行过程中观看和跟踪模型状态。
预热结束(预热时间段结束)
概述:
此函数在用户为每次重复运行定义的预热时间结束时执行。时间和系统变量都被重置,但是临时实体仍然待在所在的地方。
存取变量:
replication:当前重复运行的序号
scenario:当前场景的序号
Do Nothing(无操作)
默认模板
Do nothing
无操作
详细说明
此函数被调用时不执行任何命令。
应用背景
在此触发器执行期间没有附加逻辑要求时采用此函数。
Display Message(显示消息)
默认模板
Display message at end of warmup period for each run.
在每次仿真运行的预热期结束的时候显示消息。
详细说明
向输出控制台(视图/输出控制台)写入实验状态的相关信息。
应用背景
用来在实验运行过程中观看和跟踪模型状态。
绩效指标
概述:
在一个场景的每次重复运行结束时调用此函数,并返回一个绩效指标值作为当前运行的记录。
存取变量:
绩效指标函数没有(默认的)存取变量,使用model()作为起点。
Object output by name(按名称统计实体输出)
默认模板
The output of the object named "Processor1" in the model.
模型中名为“Processor1” 的实体的输出。
详细说明
返回模型中给定实体的输出统计结果。
其它参数示例
"Queue6" "Source5"
应用背景
用来根据模型中指定实体的输出来进行绩效评价。
Object input by name(按名称统计实体输入)
默认模板
The output of the object named "Sink1" in the model.
模型中名为“Sink1”的实体的输出。
详细说明
返回模型中给定实体的输入统计结果。
其它参数示例
"Queue6" "Processor5"
应用背景
用来根据模型中某指定实体的输入进行绩效评价。
Object contentmin by name(按名称统计实体最小容量)
默认模板
The minimum content of the object named "Queue1" in the model.
模型中名为“Queue1” 的实体的最小数量。
详细说明
返回模型中给定实体的最小容量统计结果。
其它参数示例
"Rack6" "Processor5"
应用背景
用来根据模型中特定实体的最小容量进行绩效评价。
Object contentmax by name(按名称统计实体最大容量)
默认模板
The maximum content of the object named "Queue1" in the model.
模型中实体“Queue1” 的最大容量。
详细说明
返回模型中给定实体的容量最大值统计结果。
其它参数示例
"Rack6" "Processor5"
应用背景
用来根据模型中特定实体的最大容量进行绩效评价。
Object staytimemin by name(按名称统计实体最短停留时间)
默认模板
The minimum staytime of the object named "Queue1" in the model.
模型中实体“Queue1” 中临时实体的最短停留时间。
详细说明
返回模型中给定实体的最短停留时间统计结果。
其它参数示例
"Rack6" "Processor5"
应用背景
用来根据模型中特定实体的最短停留时间进行绩效评价。
Object staytimemax by name(按名称统计实体最长停留时间)
默认模板
The maximum staytime of the object named "Queue1" in the model.
模型中实体“Queue1” 中的临时实体的最长停留时间。
详细说明
返回模型中给定实体的最长停留时间统计结果。
其它参数示例
"Rack6" "Processor5"
应用背景
用来根据模型中特定实体的最长停留时间进行绩效评价。
Object staytimeavg by name(按名称统计实体平均停留时间)
默认模板
The average staytime of the object named "Queue1" in the model.
模型中实体“Queue1” 中的临时实体的平均停留时间。
详细说明
返回模型中给定实体的平均停留时间统计结果。
其它参数示例
"Rack6" "Processor5"
应用背景
用来根据模型中特定实体的平均停留时间进行绩效评价。
Time in state by name(按名称统计实体状态时间)
默认模板
The amount of total time that "Operator1" was in the state STATE_IDLE.
The following options can be used:
STATE_IDLE
STATE_PROCESSING
STATE_BUSY
STATE_BLOCKED
STATE_GENERATING
STATE_EMPTY
STATE_COLLECTING
STATE_RELEASING
STATE_WAITING_FOR_OPERATOR
STATE_WAITING_FOR_TRANSPORT
STATE_BREAKDOWN
STATE_SCHEDULEDDOWN
STATE_CONVEYING
STATE_TRAVEL_EMPTY
STATE_TRAVEL_LOADED
STATE_OFFSET_TRAVEL_EMPTY
STATE_OFFSET_TRAVEL_LOADED
STATE_LOADING
STATE_UNLOADING
STATE_DOWN
STATE_SETUP
STATE_UTILIZE
实体“Operator1” 处于状态STATE_IDLE的总时间。
可用下列的选项:
STATE_IDLE
STATE_PROCESSING
STATE_BUSY
STATE_BLOCKED
STATE_GENERATING
STATE_EMPTY
STATE_COLLECTING
STATE_RELEASING
STATE_WAITING_FOR_OPERATOR
STATE_WAITING_FOR_TRANSPORT
STATE_BREAKDOWN
STATE_SCHEDULEDDOWN
STATE_CONVEYING
STATE_TRAVEL_EMPTY
STATE_TRAVEL_LOADED
STATE_OFFSET_TRAVEL_EMPTY
STATE_OFFSET_TRAVEL_LOADED
STATE_LOADING
STATE_UNLOADING
STATE_DOWN
STATE_SETUP
STATE_UTILIZE
详细说明
返回实体处于给定状态的时间点总时间百分比。
其它参数示例
"Queue6" "Processor5" STATE_LOADING STATE_PROCESSING
应用背景
用来根据实体给定状态的全部时间评估实体性能。
State percentage by name(按名称统计状态百分比)
默认模板
The percentage of total time that "Operator1" was in the state STATE_IDLE.
The following options can be used:
STATE_IDLE
STATE_PROCESSING
STATE_BUSY
STATE_BLOCKED
STATE_GENERATING
STATE_EMPTY
STATE_COLLECTING
STATE_RELEASING
STATE_WAITING_FOR_OPERATOR
STATE_WAITING_FOR_TRANSPORT
STATE_BREAKDOWN
STATE_SCHEDULEDDOWN
STATE_CONVEYING
STATE_TRAVEL_EMPTY
STATE_TRAVEL_LOADED
STATE_OFFSET_TRAVEL_EMPTY
STATE_OFFSET_TRAVEL_LOADED
STATE_LOADING
STATE_UNLOADING
STATE_DOWN
STATE_SETUP
STATE_UTILIZE
实体“Operator1” 处于状态STATE_IDLE的时间占总时间的百分比。
可用下列选项:
STATE_IDLE
STATE_PROCESSING
STATE_BUSY
STATE_BLOCKED
STATE_GENERATING
STATE_EMPTY
STATE_COLLECTING
STATE_RELEASING
STATE_WAITING_FOR_OPERATOR
STATE_WAITING_FOR_TRANSPORT
STATE_BREAKDOWN
STATE_SCHEDULEDDOWN
STATE_CONVEYING
STATE_TRAVEL_EMPTY
STATE_TRAVEL_LOADED
STATE_OFFSET_TRAVEL_EMPTY
STATE_OFFSET_TRAVEL_LOADED
STATE_LOADING
STATE_UNLOADING
STATE_DOWN
STATE_SETUP
STATE_UTILIZE
详细说明:
返回实体处于给定状态的时间点总时间的百分比。
其它参数示例
"Queue6" "Processor5" STATE_LOADING STATE_PROCESSING
应用背景
用来根据一个实体处于某给定状态的时间百分比进行绩效评价。
Label by name(按名称统计标签值)
默认模板
The value of the number label named "labelname" on the object named "Processor1" in the model.
模型中名为 “Processor1”的实体的数字标签“labelname”的值。
详细说明
返回模型中给定实体的标签值。
其它参数示例
"Rack6" "Queue5" "performancelabel"
应用背景
用来根据模型中指定实体的标签进行绩效评价。
XE "实验" XE "开始" XE "实验" 实验开始触发
概述:
此函数在实验开始运行时(模型重置之前)执行一次。
存取变量:
replication:当前重复运行的序号
scenario:当前场景的序号
Do Nothing(无操作)
默认模板
Do nothing
无操作
详细说明
调用此函数时不执行任何命令。
应用背景
在此触发器执行期间没有附加逻辑要求时采用此函数。
Display Message(显示消息)
默认模板
Display message at start of experiment.
在实验开始的时候显示消息。
详细说明
向输出控制台(视图/输出控制台)写入试验状态的相关信息。
应用背景
用来在实验运行过程中观看和跟踪模型状态。
XE "场景" XE "场景" XE "开始" XE "实验" XE "开始" 场景开始触发
概述:
此函数在每个新的场景的第一次重复运行开始时执行。
存取变量:
replication:当前重复运行的序号
scenario:当前场景的序号
Do Nothing(无操作)
默认模板
Do nothing
无操作
详细说明
此函数被调用时不执行任何命令。
应用背景
在此触发器执行期间没有附加逻辑要求时采用此函数。
Display Message(显示消息)
默认模板
Display message at the end of each scenario.
在每个场景结束的时候显示消息。
详细说明
向输出控制台(视图/输出控制台)写入实验状态的相关信息。
应用背景
用来在实验运行过程中观看和跟踪模型状态。
Update variables from table(在表中更新变量)
默认模板
Set variables for scenario based on lookup table:
setnodenum(var_s(Queue1,"batchsize"),gettablenum("Lookup",scenario,1));
setnodenum(var_s(Processor1,"maxcontent"),gettablenum("Lookup",scenario,2));
Note: The above examples update object variables in the model based on values retrieved from a global lookup table. The sample code assumes there is a global table named 'Lookup' and that the batchsize values are in column 1, and the maxcontent values are in column2. Each row of the table represents a new scenario. It is also assumed that the following global variables have been defined to reference model objects: Queue1, Processor1.
用查看表的方式设定场景的变量:
setnodenum(var_s(Queue1,"batchsize"),gettablenum("Lookup",scenario,1));
setnodenum(var_s(Processor1,"maxcontent"),gettablenum("Lookup",scenario,2));
注释:上面的示例根据从一个全局查找表中取来的值来更新模型中实体的变量。样本代码假设有一个名为“Lookup”的全局表,第一列是批量大小,第二列是最大容量。表中的每一行代表一个新的场景。另外,还假设,定义了如下的全局变量来引用模型中的实体:Queue1(暂存区1), Processor1(处理器1)。
详细说明
根据从表中取得的值来设定实体的不同变量的值。
其它参数示例
setvarnum(Queue1,"batchsize",gettablenum("Lookup",scenario,1));
setvarnum(Processor1,"maxcontent",gettablenum("Lookup",scenario,2));
应用背景
用来在每个场景开始时改变那个场景的条件。
Update variables by case(按case更新变量)
默认模板
Update values in a global table before each scenario:
case 1:
settablenum("tablename",1,1,333);
settablenum("tablename",1,2,444); break;
case 2:
settablenum("tablename",1,1,555);
settablenum("tablename",1,2,666); break;
case 3:
settablenum("tablename",1,1,777);
settablenum("tablename",1,2,888); break;
Note: The above example shows three cases where each case represents a scenario (1,2, and 3). In each case a global table called "tablename" has the value in column 1 and 2 of row 1 update with new values. It is then assumed that objects in the model reference the values in the table for their process times, send to port fields etc. in order to modify key variables from scenario to scenario.
在每个场景开始之前更新全局表中的值:
case 1:
settablenum("tablename",1,1,333);
settablenum("tablename",1,2,444); break;
case 2:
settablenum("tablename",1,1,555);
settablenum("tablename",1,2,666); break;
case 3:
settablenum("tablename",1,1,777);
settablenum("tablename",1,2,888); break;
注释:上面的例子显示三个case ,每个case 代表一个场景(1,2,3)。在每种case 中,一个名为 “tablename”的全局表将其第1行的第1列和第2列更新为一个新值。然后假设模型中的实体引用这些表中的值作为它们的处理时间、发往端口等的引用,目的是进行从一个场景到另一个场景的关键变量修订。
详细说明
每种case 代表一个不同的场景序号,且根据它所在的case 执行相应的代码。
使用正确的表述语句可以添加或移除附加的case 。
其它参数示例
case 1:
settablenum("tablename",1,1,33);
settablenum("tablename",1,2,44); break;
case 2:
settablenum("tablename",1,1,55);
settablenum("tablename",1,2,66); break;
case 3:
settablenum("tablename",1,1,77);
settablenum("tablename",1,2,88); break;
case 4:
settablenum("tablename",1,1,99);
settablenum("tablename",1,2,8080); break;
应用背景
用来在一个场景开始时改变一个全局表中的值。典型的应用是用于模型中不同部分基于从一个全局表中取得的值的情况。
Assign members to timetables(分配成员到时间表)
默认模板
Assign resources as members of a time table based on scenario and a global table lookup.
根据场景和一个全局表,将资源作为一个时间表的成员进行分配。
详细说明
创建时间表,和名为“lookup”的全局表中的每一列相一致。
每一列的第一行都有时间表名称,行中每个成员的名称从第二行开始。
在每列的资源名称里,不允许有空格,否则不能正确地加入时间表。
确保指定的已存在的时间表和任务执行器的名称正确无误。
其它参数示例
应用背景
用来在不同场景内实验不同的班次。
显示效果
XE "表X值(X值)" XE "数据点编号" 表X值(X值)
概述:
此函数在每个数据点绘制在记录器实体上时执行。记录器图形上的每个数据点由x值和y值构成。此函数返回x值。
存取变量:
current:记录器实体的引用
curcount :当前数据点序号
Data Point Number(数据点序号)
默认模板
Return the current data point number (curcount)
返回当前数据点的序号(curcount)。
详细说明
此选项返回当前数据序号。例如,如果记录器显示100个数据点,数据点1的x值为1,数据点2的x值为2,依此类推。
应用背景
在想要图形数据点在x轴均匀地分布的情况下使用此选项。如果图形描述的是类似“当前数量vs时间”这样的数据,就不要使用此选项。因为这种情况下x轴代表的是时间,而不是数据点序号。
Table Value表数据值
默认模板
Return the value in row number curcount and column number 1 of the table named "TableName" .
返回名为“TableName”的表中第curcount 行第1 列的值。
详细说明
此选项从表中返回一个值。在默认例子中,表中第1列的值代表图形的x值。
其它参数示例
curcount + 2 and column number 3 of the table named "ContentTimeTable"
(curcount + 2和名为“ContentTimeTable”的表的第3列)
上面的例子使用第3列,也从表“ContentTimeTabl” 的第3行开始。
应用背景
如果图形的x值不是均匀分布,而是代表类似时间这样的值,就使用此选项。
XE "记录器" XE "表Y值(Y值)" 表y值(y值)
概述:
此函数在每个数据点绘制在记录器实体上时执行。记录器图形上的每个数据点由x值和y值构成。此函数返回Y值。
存取变量:
current:记录器实体的引用
curcount :当前数据点序号
Table Value(表数据值)
默认模板
Return the value in row number curcount and column number 1 of the table named "TableName" .
返回名为“TableName”的表中的第curcount行第1 列的值。
详细说明
此选项从表中返回一个值。在默认例子中,第1列的值代表图形的x值。
其它参数示例
curcount + 2 and column number 3 of the table named "ContentTimeTable"
(curcount + 2和名为“ContentTimeTable”的表的第3 列)
上面的例子使用第三列,也从表格“ContentTimeTabl” 的第3行开始。
XE "文本显示" 文本(文本显示)
概述:
此函数与可视化文本实体一起使用,但是现在已经不重要了。现在可视化工具实体可用来显示文本。
XE "文本代码" XE "文本显示" XE "可视化工具" 文本代码(文本显示)
概述:
可视化工具每次在模型视图视窗中重画显示3d文本时,都执行此函数。必须成功地编译后,才能看到此域段中所作的修改。
存取变量:
current:当前实体
Display Text(显示文本)
默认模板
Display the following text: “Hello” .
显示后面的文本:“Hello”。
详细说明
显示静态文本。
其它参数示例
“Start”
应用背景
用来标注模型片断。
Display Time(显示时间)
默认模板
Display the current time in days, hour:minute:second format. Offset the time by hours(8) .
用小时:分:秒的格式显示一天中的当前时间,将时间偏移设定为hours(8)。
详细说明
根据仿真钟以秒为单位显示时间。偏移值是指仿真钟以第一天的00:00:00开始算起,到指定的值时开始仿真。默认值hours(8)将仿真钟设定为显示第一天的08:00:00作为仿真的0时刻。
其它参数示例
days(3)
minutes(35)
28800
应用背景
用来按小时:分:秒的时间格式显示一天中的时间,而不是只以秒来显示仿真时间。
Display Content(显示当前数量)
默认模板
Concatenate the following text string: “The content of the object is: ” with the actual content of centerobject(current, 1) .
连接文本“The content of the object is:” 和实体centerobject(current, 1) 的实际当前数量。
详细说明
显示指定字符串,和特定实体内的实体数量(它的当前数量)。
其它参数示例
“The number of items in queue is: ”
node(“/Queue2”,model())
应用背景
用3d文本显示一个实体的当前数量。
Display State(显示状态)
默认模板
Concatenate the following text string: “The current state of the object is: ” with the actual state of centerobject(current, 1) .
连接文本“The current state of the object is:”和实体centerobject(current, 1)的实际状态。
详细说明
用字符串显示指定的字符串和指定实体的状态(空闲、处理中、装载中,等)。
其它参数示例
“The operator is: ”
node(“/Operator3”,model())
应用背景
用3d文本显示实体的状态。
Display Output(显示输出)
默认模板
Concatenate the following text string: “The output of the object is: ” with the actual output of centerobject(current, 1) .
连接文本“The output of the object is:”和实体centerobject(current, 1) 的实际输出。
详细说明
显示指定字符串和通过特定实体输出端口发送的临时实体的数量(实体的输出)。
其它参数示例
“Completed parts: ”
node(“/Processor4”,model())
应用背景
用3d文本显示一个实体的输出。
Display Input(显示输入)
默认模板
Concatenate the following text string: “The input of the object is: ” with the actual input of centerobject(current, 1) .
连接文本“The input of the object is:”和实体centerobject(current, 1) 的实际输入。
详细说明
显示指定字符串和通过特定实体输入端口接收的临时实体的数量(实体的输入)。
其它参数示例
“Number of people processed: ”
node(“/Sink5”,model())
应用背景
用3d文本显示一个实体的输入。
Display Min Content(显示最小数量)
默认模板
Concatenate the following text string: “The minimum content of the object is: “ with the actual minimum content of centerobject(current, 1) .
连接文本“The minimum content of the object is:”和实体centerobject(current, 1) 的实际最少数量。
详细说明
显示指定字符串和指定实体的最小数量。
其它参数示例
“Least number of parts in system: ”
node(“/Conveyor6”,model())
应用背景
用3d文本显示一个实体的最小历史数量。
Display Max Content(显示最大数量)
默认模板
Concatenate the following text string: “The maximum content of the object is: “ with the actual maximum content of centerobject(current, 1) .
连接文本“The maximum content of the object is:”和实体centerobject(current, 1) 的实际最大数量。
详细说明
显示指定字符串和指定实体的最大数量。
其它参数示例
“Most number of parts in system: ”
node(“/Conveyor6”,model())
应用背景
用3d文本显示一个实体的最大数量。
Display Avg Content(显示平均数量)
默认模板
Concatenate the following text string: “The average content of the object is: “ with the actual average content of centerobject(current, 1) .
连接文本“The average content of the object is: ”和实体centerobject(current, 1) 的实际平均数量。
详细说明
显示指定字符串和指定实体的平均数量。
其它参数示例
“Average number of parts in system: ”
node(“/Conveyor6”,model())
应用背景
用3d文本显示一个实体的平均数量。
Display Min StayTime(显示最小停留时间)
默认模板
Concatenate the following text string: “The minimum staytime of the object is: “ with the actual minimum staytime of centerobject(current, 1) .
连接文本“The minimum staytime of the object is:”和实体centerobject(current, 1) 的实际最小停留时间。
详细说明
显示指定字符串和临时实体停留在指定实体中的最短时间(实体的最小停留时间)。
其它参数示例
“The shortest wait: ”
node(“/Queue7”,model())
应用背景
用3d文本显示一个实体的最小停留时间。
Display Max StayTime(显示最长停留时间)
默认模板
Concatenate the following text string: “The maximum staytime of the object is: “ with the actual maximum staytime of centerobject(current, 1) .
连接文本“The maximum staytime of the object is: ”和实体centerobject(current, 1) 的实际最长停留时间。
详细说明
显示指定字符串和临时实体停留在指定实体中的最长时间(实体的最长停留时间)。
其它参数示例
“The longest wait: ”
node(“/Queue7”,model())
应用背景
用3d文本显示一个实体的最长停留时间。
Display Avg StayTime(显示平均停留时间)
默认模板
Concatenate the following text string: “The average staytime of the object is: “ with the actual average staytime of centerobject(current, 1) .
连接文本“The average staytime of the object is: ”和实体centerobject(current, 1) 的实际平均停留时间。
详细说明
显示指定字符串和临时实体停留在指定实体中的平均时间(实体的平均停留时间)。
其它参数示例
“The average wait: ”
node(“/Queue7”,model())
应用背景
用3d文本显示一个实体的平均停留时间。
Display State Percentage(显示状态百分比)
默认模板
Concatenate the following text string: "Idle percentage for the object is: " with the percentage of total time that centerobject(current,1) was in the state STATE_IDLE .
The following options can be used:
STATE_IDLE
STATE_PROCESSING
STATE_BUSY
STATE_BLOCKED
STATE_GENERATING
STATE_EMPTY
STATE_COLLECTING
STATE_RELEASING
STATE_WAITING_FOR_OPERATOR
STATE_WAITING_FOR_TRANSPORT
STATE_BREAKDOWN
STATE_SCHEDULEDDOWN
STATE_CONVEYING
STATE_TRAVEL_EMPTY
STATE_TRAVEL_LOADED
STATE_OFFSET_TRAVEL_EMPTY
STATE_OFFSET_TRAVEL_LOADED
STATE_LOADING
STATE_UNLOADING
STATE_DOWN
STATE_SETUP
STATE_UTILIZE
连接文本“Idle percentage for the object is:”和实体centerobject(current,1) 处于STATE_IDLE 状态的时间占总时间的百分比。
可以使用下面的选项:
STATE_IDLE
STATE_PROCESSING
STATE_BUSY
STATE_BLOCKED
STATE_GENERATING
STATE_EMPTY
STATE_COLLECTING
STATE_RELEASING
STATE_WAITING_FOR_OPERATOR
STATE_WAITING_FOR_TRANSPORT
STATE_BREAKDOWN
STATE_SCHEDULEDDOWN
STATE_CONVEYING
STATE_TRAVEL_EMPTY
STATE_TRAVEL_LOADED
STATE_OFFSET_TRAVEL_EMPTY
STATE_OFFSET_TRAVEL_LOADED
STATE_LOADING
STATE_UNLOADING
STATE_DOWN
STATE_SETUP
STATE_UTILIZE
详细说明
显示特定字符串和指定实体处于某给定状态的时间占总时间的百分比。
其它参数示例
“Percent processing: ”
node(“/Combiner8”,model())
See .
应用背景
用3d文本方式显示实体处于某种给定状态的时间占总时间的百分比。
Display Label Value(显示标签值)
默认模板
Display the following concatenated text string: “defaultlabel has a value of: “ with the value in the label called “defaultlabel” of centerobject(current, 1) .
连接文本“defaultlabel has a value of:”和实体centerobject(current, 1) 的叫做“defaultlabel”的标签的值。
详细说明
显示特定文本和指定实体指定数值标签的值。
其它参数示例
“The charge on Transporter9 is: ”
“charge”
node(“/Transporter9”,model());
应用背景
用3D文本方式显示一个实体的数值标签的值。
任务序列
Flexsim 任务序列
XE "Utilize" XE "中断任务" XE "任务序列" XE "分配器" XE "操作员" XE "操作员任务序列" XE "激活任务序列" XE "自动创建任务序列" XE "装载/卸载" 什么是任务序列?
一个任务序列就是需要一个任务执行器按一定顺序执行的一系列任务,如下图所显示。任务执行器是指从任务执行器类派生出来的实体,包括操作员、运输机、起重机、堆垛机、机器人、升降机和其它可移动资源。如果一个实体的参数视窗中包含任务执行器属性分页,那它就是一个任务执行器。
除了是一系列任务之外,每个任务序列还有一个优先级值。优先级定义了相对其它任务序列而言,执行此任务序列的重要程度。每个任务序列还都有一个先占值,用来定义那个任务序列是否要使其它正在执行的任务序列中断转而执行它。
自动创建任务序列
固定实体有一种默认机制来创建任务序列,把临时实体移到下一站点。选择固定实体参数的“临时实体流”分页中的“使用运输机”复选框,就可以使用此默认的功能。处理器也同样有默认的机制来创建任务序列,用来为预置时间、处理时间和维修时间调用操作员。这可以通过修改处理器、合成器或分解器的“操作员”分页来完成。每个默认机制都会触发自动创建一个任务序列。
任务序列如何工作
当选择了临时实体流分页中的“使用运输机”复选框后,将创建如下的任务序列。
1. 行进到当前临时实体所在的实体
2. 从那个实体装载临时实体
3. 中断
4. 行进到目的地实体
5. 卸载临时实体到目的地实体
当一个任务执行器执行此任务序列时,将按顺序执行每个任务。上面所示的每个任务都与一种特定的任务类型相对应。请注意,在上面例子中有两个“行进”类型的任务、一个“装载”类型任务、一个“卸载”类型任务和一个“中断”类型任务。
行进任务(Travel Task)
“行进”类型任务告诉任务执行器行进到模型中的某个实体。这可以由多种方式完成,取决于模型的设定。如果任务执行器连接到一个网络,那么此“行进”任务将使其沿着网络行进,到达与目的实体相连的那个网络节点。如果任务执行器是一个起重机实体,那么它将会升高到一个用户定义的高度,然后行进到目标实体的x/y位置处。这样,一个行进任务可以代表多个类型的事件,这取决于模型的设定,也取决于使用此任务的实体的类型。然而有一点请注意,所有行进任务的相同之处就是它们在模型中都有某个它们试图到达的目的地实体。
装载和卸载任务(Load and Unload Tasks)
“装载”和“卸载”类型任务告诉任务执行器从一个站点装载一个临时实体,或将一个临时实体卸载到一个站点。这通常会涉及到需要行进一段偏移距离,目的是在正确的位置捡取或放下临时实体,同时在移动临时实体之前完成用户定义的装载/卸载时间。装载/卸载时间的处理对于所有任务执行器都是一样的,而偏移行进则因任务执行器的类型不同而不同。例如,一个运输机,将会在将货叉抬升到捡取/放下的高度同时行进到捡取/放下的位置;而一个机器人将转动到需要捡取/放下临时实体的位置。参见偏移行进可获得更多详细信息。
中断任务(Break Task)
“中断”类型任务告诉任务执行器去查看是否有它可以 “中断”转而进入的其它任务序列。例如,如果在同一个位置范围内有两个临时实体等待被运输机装载,而运输机确实可以装载两个或更多临时实体,那么它有两个任务序列要执行它。这两个任务序列都和上面提到的任务序列相同。其中一个是捡取第一个临时实体的激活任务序列,另一个任务序列放在它的任务序列队列中,等待运输机一旦完成激活任务就来执行。中断任务允许运输机在完成装载第一个临时实体后停下第一个任务序列,并开始执行第二个任务序列,这就要行进到第二个临时实体的站点并装载第二个临时实体。如果任务序列中不包含中断任务,则任务执行器必须全部完成第一个任务序列,先卸载第一个临时实体后才能去装载第二个临时实体。
操作员任务序列(Operator Task Sequences)
这里是自动创建任务序列的又一个示例。处理器实体创建此任务序列用来请求一个操作员来处理站点工作。任务序列描述如下:
1. 行进到处理站点
2. 被使用,直到处理站点释放它
和前面的例子一样,第一个任务告诉任务执行器行进到站点。第二个任务是一个新的任务类型,在前面的例子中没有提到。这是一个“使用(Utilize)”任务类型,它告诉任务执行器进入给定的状态,如“Utilized(被使用)” 或“Processing(处理中)”,然后等待直到从此站点被释放。调用freeoperators()命令可释放操作员。由于处理器自动创建此任务序列,它也自动地处理释放操作员事件。
注释:创建一个操作员任务序列并不是完全如上面所描述的那样。在实际中,会添加更多的任务。但为了简化起见,只给出上面的示例。参见命令集中的请求操作员命令的相关文档,可以获得更多有关操作员任务序列的信息。
在仿真运行中的任意给定时刻,一个任务执行器只能有一个激活任务序列和一个等待的任务序列。而另一方面,一个分配器可以有一个等待的任务序列队列,但是不能够主动地执行其中的任意任务序列。实际上,它将其任务序列队列分配给连接到它的输出端口的任务执行器。这是区别分配器实体和任务执行器及其子类的方法。
Active Task Sequence
Queue of Waiting Task Sequences
如果没有任务序列是先占的,则任务执行器将会执行它的激活任务序列直到完成它。然后,它将把队列中的第一个任务序列变为激活任务序列并开始执行它。如此重复,直到队列中的所有任务序列都被执行完。
更多任务类型
到现在为止,已经介绍了5种类型的任务,分别是行进、装载、卸载、中断、使用。还有几种类型的任务可供创建任务序列使用。参见任务类型可以获得关于每种任务类型的解释和用法的更加详细的介绍。下一节将介绍如何创建和定制用户自己的任务序列。
定制创建任务序列
可以使用3个简单的命令创建定制任务序列。
createemptytasksequence() inserttask() dispatchtasksequence()
首先,使用createemptytasksequence()创建一个任务序列。然后连续使用命令inserttask()往此任务序列中插入任务。最后使用dispatchtasksequence()来分配此任务序列。
下面的例子说明的是一辆叉车行进到一个被“station”引用的实体,然后装载一个被“item”引用的临时实体。
fsnode* newtasksequence = createemptytasksequence(forklift, 0 ,0 ); inserttask(newtasksequence, TASKTYPE_TRAVEL, station); inserttask(newtasksequence, TASKTYPE_LOAD, item, station, 2); dispatchtasksequence(newtasksequence);
如果对“fsnode” 语句感到困惑,可查阅Flexsim树型结构帮助。用简短的术语来说,“fsnode* newtasksequence” 创建一个引用或者指针,指向作为一个Flexsim节点的任务序列,这样,以后就可以在向任务序列中添加任务时使用。
createemptytasksequence命令有三个参数。第一个参数是要处理此任务序列的实体,它应当是一个分配器或任务执行器。第二个和第三个参数是数字,分别指定任务序列的优先级和先占值。命令返回一个所创建的任务序列的引用。
inserttask命令将一个任务插入到任务序列的末尾。每一个插入的任务都有几个相关的值。第一,是任务类型值,用来定义此任务是什么类型。它还有两个此任务序列涉及的实体的引用,分别是involved1和involved2。所涉及的这些实体以及它们代表什么都取决于任务类型。对于一些类型的任务,这两个涉及的参数都需要,并有其含义,而对于另外一些类型的任务,就不使用这些参数。有些任务类型只使用一个相关的实体,有些任务类型则具有一些可选择的相关实体。参见任务类型的有关文档,可以获得指定任务类型所包含的相关实体的含义方面的信息。任务可以有四个数值,它们是任务变量,用var1、var2、var3、和var4来引用。同样,它们的含义也取决于任务类型。对于下面所示的装载任务,注意,var1指定为1。对于装载任务来说,它指定临时实体要通过站点的哪个输出端口离开。
inserttask命令有两个或更多的参数来指定任务值。第一个参数是此任务要插入的那个任务序列的引用。第二个参数是任务的类型,可以从一个任务类型列表中选取。第三与第四个参数是两个相关实体的引用。如果一个任务类型中,一个指定的相关实体未被使用或者是可选的,则可以简单地传递一个NULL到插入任务命令中,如果没有需要指定的数字参数,甚至可以干脆丢掉那个参数。第五到第九个参数是可选的,只需要定义var1-var4。这些值默认为0。
关于可选参数的注释:尽管插入任务(inserttask)的多个参数从逻辑上来说,是可以根据任务类型的不同而可选的,但仍然需要指定它们。同样,还需要按正确顺序来指定它们。例如,如果要指定任务的var1,但并不不关心involved1或 involved2是什么,也仍然需要将NULL传递给参数3和参数4,尽管它们是可选的,这样才能正确地将var1作为参数5传递。
查询有关任务序列的信息
一旦分配了任务序列,就可以查询和改变这些任务序列中的特定值。下列命令用来进行这样的查询和修改:
fsnode * gettasksequencequeue(fsnode* dispatcher)
此命令返回一个指向分配器/任务执行器的任务序列队列的引用。可将其当作常规的fsnode*(Flexsim节点指针)处理。例如,我是一个任务执行器,我想查询我的队列中的第一个任务序列,则我可以这样获得此任务序列:
first(gettasksequencequeue(current))
fsnode* gettasksequence(fsnode* dispatcher, int rank)
此命令是获得任务序列的另一途径。rank是任务序列在任务序列队列中的序号。如果rank=0,则它也返回一个指向给此任务执行器的当前激活任务序列的引用,或者说是正在执行的任务序列的引用。
fsnode* gettaskinvolved(fsnode* tasksequence, int rank, int involvednum)
此命令返回一个指向任务序列中某给定任务的涉及实体的引用。rank是任务在任务序列中的序号。Involvednum是1或2,指向所涉及的那个实体。例如,一个任务执行器将要执行一个装载任务,但它想知道要从哪个实体装载此临时实体。在一个装载任务中,involved1代表此临时实体,involved2代表装载站点。我们还假设,已知此装载任务在任务序列中的序号为3,而此任务序列是当前的激活任务序列。要获得此站点的引用,可以用下面的代码:
gettaskinvolved(gettasksequence(current,0), 3, 2)
用户需要了解任务类型与给定任务类型中的哪个参数代表什么。只要了解这些,事情就很简单了。大多数相关内容在库中的任务执行器的begintask()方法中都有文档可供参考。
int gettasktype(fsnode* tasksequence, int rank)
此命令返回一个给定任务的任务类型。Rank是任务序列中任务的序号。可以与宏指令TASKTYPE_LOAD、TASKTYPE_TRAVEL等进行比较。
int getnroftasks(fsnode* tasksequence)
返回任务序列中尚未完成的任务的数量。
int gettotalnroftasks(fsnode* tasksequence)
返回任务序列中所有任务的总数。
int gettaskvariable(fsnode* tasksequence, int rank, int varnum)
返回任务序列中一个变量的值。同样,rank是任务序列中任务的序号。Varnum是一个1到4之间的值,是变量数字。在所涉及的实体中,变量数值及其含义取决于任务类型。
int getpriority(fsnode* tasksequence)
返回给定任务序列的优先级。
void setpriority(fsnode* tasksequence, double newpriority)
设定任务序列的优先级。
int getpreempt(fsnode* tasksequence)
返回任务序列的先占值。可以与PREEMPT_NOT、PREEMPT_ONLY、PREEMPT_AND_ABORT_ACTIVE、PREEMPT_AND_ABORT_ALL进行比较。参见任务序列先占可以获得更多关于先占的信息。
void setpreempt(fsnode* tasksequence, int newpreempt)
设定任务序列的先占值。需要将前面提到的宏指令之一传递到newpreempt中。参见任务序列先占可以获得更多关于先占的信息。
XE "无先占" XE "Setpreempt" XE "Setpriority" XE "PREEMPT_AND_ABORT_ALL" XE "PREEMPT_NOT" XE "PREEMPT_ONLY" XE "PREEMPT_AND_ABORT_ACTIVE" XE "getpreempt" 任务序列先占
每个任务序列都有一个先占值。先占用来中断一个任务执行器执行其当前操作,转而去执行一个更重要的操作。例如操作员A最重要的责任是维修机器。然而,当没有机器要维修的时候,他也得运输原料。如果在操作员A正在某处运输原料的过程中,有一个机器中断停机,则此操作员不会先完成运输操作,而是停下他正在做的事情去维修机器。要做到这点,需要使用先占任务序列,使操作员从当前操作里中断并被释放出来。
要创建一个先占任务序列,在createemptytasksequence()命令中给先占参数指定一个非零值。
createemptytasksequence(operator, 0, PREEMPT_ONLY);
有四种可能的先占值。这些值告诉任务执行器,在原始任务序列被先占之后要做什么。
0 - PREEMPT_NOT - 此值是无先占。
1 - PREEMPT_ONLY - 如果任务序列为此值,那么任务执行器将会抢占当前的激活任务序列,并将其放回到任务序列队列中,以后再完成。当任务序列被先占时,它自动地放在任务序列队列的最前面。当任务执行器最终回到最初的任务序列时,其中的当前任务,由于先前没有完成而将被再次执行。同样,也可以使用TASKTYPE_MILESTONE(任务类型_里程碑)任务指定在回到任务序列的时候要完成的一系列任务。此先占值是最常用的参数。
2 - PREEMPT_AND_ABORT_ACTIVE - 如果一个任务序列有PREEMPT_AND_ABORT_ACTIVE 值,则任务执行器将会停止当前激活任务序列并消毁它,这样它就不会再回到此原始任务序列。
3 - PREEMPT_AND_ABORT_ALL - 如果任务序列有PREEMPT_AND_ABORT_ALL值,则任务执行器将会停止当前激活任务序列并消毁它,并且消毁任务序列队列中的所有任务序列。
多个先占任务序列间交互
如果一个任务执行器当前正在执行一个先占任务序列,而这时接收到一个新的先占任务序列,它将使用任务序列的优先级值来决定首先执行哪一个任务序列。如果新接收到的任务序列的优先级比正在执行的任务序列的优先级更高,那么任务执行器将抢占当前执行的任务序列,转而去执行新的任务序列。如果新接收到的先占任务序列的优先级低于或者等于当前正在执行的任务序列的优先级,则任务执行器不会抢占当前激活任务序列,而是将新接收到的任务序列像其它任务序列一样放入任务序列队列中。如果必须对任务序列排队,除非明确地指定排队策略,否则在排队策略中不会考虑先占值。
关于先占任务序列排队的注释:如果一个先占任务序列实际上并没有抢占到任务执行器,那么它就与其它任务序列一样进行排队等待。如果想要将先占任务序列排到队列的前面,则要么使先占任务序列比其它所有的任务序列的优先级更高,要么将先占纳入排队策略中进行考虑。
关于分配一个先占任务序列给分配器的注释:如果给一个分配器一个先占任务序列,除非明确地告诉它,此分配器不会考虑任务序列的先占值。如果将分配器设置为分配给第一个可用的任务执行器,它将照此行事,而不会立即将先占任务序列发送给一个任务执行器。如果想要分配器立即分配先占任务序列,则需要在发送到函数中明确指定这样的逻辑。
可以使用getpreempt()、setpreempt()、getpriority()和setpriority()命令来查询或修改先占和/或优先级的值。参见命令集,可以获得更多有关这些命令的信息。
协同任务序列
协同任务序列用来完成需要两个或多个任务执行器进行复杂协同的操作。这些任务序列用来实现这样一些概念,如任务执行器的分派和取消分派,又如使多个并行进行的操作同步处理等。
示例
一个由三个操作员组成的小组共用两辆叉车。一项操作需要一个操作员和一辆叉车。操作员要前往叉车位置,叉车将操作员移入其内。然后叉车行进到装载地点,捡取临时实体行进到卸载地点,放下此临时实体。然后叉车再回到停车位置,放下操作员。要采用任务序列完成这个过程将是很困难的,这是因为它同时处理两种不同的资源,而这两种资源以协同方式工作。协同任务序列使得此例子变得较为容易。下图阐明了叉车和操作员需要完成的两个任务序列。注意,在两个协同任务序列中,存在一些这样的部分,其中一个资源需要等待而不进行操作,而另一个资源则进行各种操作。
命令
协同任务序列用一系列的命令建立和分配,这些命令与默认的任务序列命令相互排斥。适用于协同任务序列的命令如下:
createcoordinatedtasksequence() insertallocatetask() insertdeallocatetask() insertsynctask() insertproxytask() dispatchcoordinatedtasksequence()
对于先前的例子,建立任务序列的代码应编写如下。前提假设是已经建立了操作员小组(operatorteam)和叉车组(forkliftteam)的引用。这些引用被分别分配给三个操作员和两个运输机。还建立了一个进行装载的装载站点引用、一个进行卸载的卸载站点引用,和临时实体的引用。
fsnode * myts = createcoordinatedtasksequence(operatorteam); int opkey = insertallocatetask(myts, operatorteam, 0, 0); int forkliftkey = insertallocatetask(myts, forkliftteam, 0,0); int traveltask = insertproxytask(myts, opkey, TASKTYPE_TRAVEL, forkliftkey, NULL); insertsynctask(myts, traveltask); insertproxytask(myts, forkliftkey, TASKTYPE_MOVEOBJECT, opkey, forkliftkey); insertproxytask(myts, forkliftkey, TASKTYPE_TRAVEL, loadstation, NULL); insertproxytask(myts, forkliftkey, TASKTYPE_LOAD, item, loadstation); insertproxytask(myts, forkliftkey, TASKTYPE_TRAVEL, unloadstation, NULL); insertproxytask(myts, forkliftkey, TASKTYPE_UNLOAD, item, unloadstation); insertproxytask(myts, forkliftkey, TASKTYPE_TRAVEL, forkliftteam, NULL); insertproxytask(myts, forkliftkey, TASKTYPE_MOVEOBJECT, opkey, model()); insertdeallocatetask(myts, forkliftkey); insertdeallocatetask(myts, opkey); dispatchcoordinatedtasksequence(myts);
关于上面示例的注释:这里面涉及一些模型维护问题。例如,如果恰好在操作员在叉车上的时候,停止或者重置了模型,就需要从一个重置触发器中将操作员从叉车上移回到模型中。同样,每当将操作员移回模型中的时候,都需要适当地设置它的位置,因为它在两个不同的协同空间里转移。
Createcoordinatedtasksequence (创建协同任务序列)
createcoordinatedtasksequence命令有一个参数,是一个实体的引用。此实体被指定为“ 任务协调器”,它持有任务序列,并同时协调这些任务。任务协调器也可以是在任务序列中进行分派的实体之一。任务协调器可以是任意分配器或任务执行器。注意,选择一个任务协调器并不意味着分派那个任务协调器。一个任务协调器可以在任意时刻协调任意数量的协同任务序列。同时,与常规任务序列不同,协同任务序列不进行排队。当用户分配了任务协调器后,它将立即开始执行协同任务序列,无论它正在协调多少其它的协同任务序列。
Insertallocatetask (插入分派任务)
insertallocatetask命令有四个参数。第一个参数是任务序列。第二个参数是任务执行器或分配器,将给它一个“分派(allocated)” 任务。当任务协调器执行到一个分派任务时,它实际上创建一个单独的任务序列,里面有一个“分派(allocated)” 任务,并将那个任务序列传递给指定的任务执行器或分配器。如果它是一个分配器,则意味着用户需要分派几个任务执行器中的任何一个,这时可以使用此命令的返回值作为一个关键词,来引用被分派的几个任务执行器中特定的那个,这是由于在创建任务序列时还不能确切地知道是哪一个。第二和第三个参数是将要创建那个单独任务序列的优先级和先占值。第三个参数是可选的,它指定任务是否被阻塞。默认情况(0)下,任务是阻塞的。如果传递1,则任务不阻塞。
Insertproxytask(插入代理任务)
insertproxytask命令与inserttask命令类似,有一个参数,另外又添加了第二个参数。第二个参数用来指定想要分派哪个实体去执行此任务。由于任务协调器实际上是“执行 ”此任务序列的那个实体,所以,一旦它获得一个代理任务,它将通知所分派的实体来“通过代理”执行此任务。注意,对于involved1和involved2,可以传递一个关键字,也可以传递一个实体的引用。
insertsynctask(插入同步任务)
insertsync命令中断任务序列的执行,直到一个用关键字引用的特定任务被完成。它有两个参数:任务序列和一个给定的代理任务的关键值。重点指出,在默认情况下,为不同的任务执行器指定的代理任务将并行完成,除非指定了一个同步任务,而将代理任务分给了同一个任务执行器,代理任务将自动地按顺序执行,而不需要同步任务。
insertdeallocatetask(插入取消分派任务)
insertdeallocatetask命令取消一个用关键字引用的指定的任务执行器。第一个参数引用协同任务序列。第二个参数是想要取消分派的资源的分派关键字。第三个参数是可选的,指定任务是否阻塞。默认情况(0)下,任务是阻塞的。如果传递1,则任务不阻塞。
上面的代码创建一个协同任务序列,它组织了两个任务序列,如下图所示:
Coordinated Task Sequence
谨记
在给任何资源分配代理任务之前,必须做的第一件事是分派那个资源。
必须从每个分派任务中返回关键字,因为以后要使用它。insertproxytask命令为代理任务的执行器获得一个关键字。这是分派任务返回的关键字。在取消分派此实体时也要使用此关键字。
同一个分派资源的所有代理任务是顺序执行的,而不同的分派资源的代理任务,除非明确地在协同任务序列中加入阻塞任务,都是并行执行的。
阻塞任务是用来阻塞协同任务序列并行执行的任务类型。任务协调器直接遍历任务序列,并将代理任务分给适当的分派资源,直到遇到一个阻塞任务。它将一直等待,直到那个任务的阻塞请求被满足,然后继续此任务序列。换句话说,在那个阻塞任务(不管它们应用于哪一个资源)之后发生的所有任务的执行都将被停止,直到阻塞任务请求被满足。阻塞任务以及其阻塞条件如下所示。
1. 分派任务(Allocation Task):默认情况下,此任务将一直阻塞,直到指定的资源被分派。不过,如果insertallocatetask的第五个参数是1,分派任务就不会阻塞。
2. 同步任务(Sync Task):此任务将一直阻塞,直到由它的关键字指定的代理任务完成。
3. 取消分派任务(De-allocation Task):默认情况下,此任务将一直阻塞,直到指定的资源完成了所有代理任务且被取消分派。不过,如果insertallocatetask的第五个参数是1,取消分派任务就不会阻塞。
插入任务的顺序有着细微但却重要的含义,尤其是在把代理任务放到与阻塞任务的相互关系中进行考虑时,更是如此。放在特定阻塞任务后面的代理任务与把这些代理任务插入到阻塞任务之前相比,执行起来相差甚大。
确保取消分派所有已分派的实体,否则,任务序列将不能正确地释放它分派的实体。
一旦取消分派了一个资源,就不要再给它任何代理任务。
关于无阻塞取消分派和分派任务的注释:此项允许这些任务无阻塞的功能还处于测试阶段。虽然我们鼓励用户使用此功能,且到目前为止还没有发现程序缺陷,但使用中还是可能遇到一些问题,因为还未广泛使用此功能。
任务类型快捷查询
任务类型
involved1
involved2
var1
var2
var3
var4
TASKTYPE_TRAVEL
目的地
NULL
结束速度
TASKTYPE_LOAD
要装载的临时实体
站点
输出端口
TASKTYPE_FRLOAD
要装载的临时实体
站点
输出端口
TASKTYPE_UNLOAD
要卸载的临时实体
站点
输入端口
TASKTYPE_FRUNLOAD
要卸载的临时实体
站点
输入端口
TASKTYPE_UTILIZE
涉及的
站点
状态
TASKTYPE_DELAY
NULL
NULL
时间
状态
TASKTYPE_BREAK
发送消息到
任务序列
查看数量
查看接收
pv(5)*msgp(3)**
pv(6)*
TASKTYPE_CALLSUBTASKS
发送消息到
任务序列
pv(3)*msgp(1)**
pv(4)*msgp(2)**
pv(5)*msgp(3)**
pv(6)*
TASKTYPE_STOPREQUESTBEGIN
要停止的实体
NULL
状态
重复
已执行
TASKTYPE_STOPREQUESTFINISH
要恢复的实体
NULL
TASKTYPE_SENDMESSAGE
接收实体
发出实体
msgp(1)**
msgp(2)**
msgp(3)**
延迟时间
TASKTYPE_TRAVELTOLOC
NULL
NULL
x
y
z
结束速度
TASKTYPE_TRAVELRELATIVE
NULL
NULL
x
y
z
结束速度
TASKTYPE_PICKOFFSET
临时实体
站点
x
y
z
结束速度
TASKTYPE_PLACEOFFSET
临时实体
站点
x
y
z
结束速度
TASKTYPE_MOVEOBJECT
要移动的实体
容器
输出端口
TASKTYPE_DESTROYOBJECT
要破坏的实体
NULL
TASKTYPE_SETNODENUM
要设定的节点
NULL
值
递增y/n
TASKTYPE_TAG
用户定义
用户定义
用户定义
用户定义
用户定义
用户定义
非用户任务
TASKTYPE_TE_STOP
NULL
NULL
状态
TASKTYPE_TE_RETURN
任务序列
任务
TASKTYPE_TE_ALLOCATED
任务协调器
任务序列
TASKTYPE_CT_ALLOCATE
分配器
已分派实体
优先级
先占值
最前代理任务
阻塞,是(0),否(1)
TASKTYPE_CT_SYNC
NULL
NULL
关键字或任务序号
TASKTYPE_CT_DEALLOCATE
NULL
NULL
关键字或任务序号
阻塞,是(0),否(1)
Task Type
involved1
involved2
var1
var2
var3
var4
TASKTYPE_TRAVEL
destination
NULL
end speed
TASKTYPE_LOAD
item to load
station
output port
TASKTYPE_FRLOAD
item to load
station
output port
TASKTYPE_UNLOAD
item to unload
station
input port
TASKTYPE_FRUNLOAD
item to unload
station
input port
TASKTYPE_UTILIZE
involved
station
state
TASKTYPE_DELAY
NULL
NULL
time
state
TASKTYPE_BREAK
send message to
task sequence
check content
check receive
pv(5)* msgp(3)**
pv(6)*
TASKTYPE_CALLSUBTASKS
send message to
task sequence
pv(3)* msgp(1)**
pv(4)* msgp(2)**
pv(5)* msgp(3)**
pv(6)*
TASKTYPE_STOPREQUESTBEGIN
object to stop
NULL
state
repeat
already executed
TASKTYPE_STOPREQUESTFINISH
object to resume
NULL
TASKTYPE_SENDMESSAGE
to object
from object
msgp(1)**
msgp(2)**
msgp(3)**
delay time
TASKTYPE_TRAVELTOLOC
NULL
NULL
x
y
z
end speed
TASKTYPE_TRAVELRELATIVE
NULL
NULL
x
y
z
end speed
TASKTYPE_PICKOFFSET
item
station
x
y
z
end speed
TASKTYPE_PLACEOFFSET
item
station
x
y
z
end speed
TASKTYPE_MOVEOBJECT
object to move
container
output port
TASKTYPE_DESTROYOBJECT
object to destroy
NULL
TASKTYPE_SETNODENUM
node to set
NULL
value
increment y/n
TASKTYPE_TAG
user-defined
user-defined
user-defined
user-defined
user-defined
user-defined
Non-user tasks
TASKTYPE_TE_STOP
NULL
NULL
state
TASKTYPE_TE_RETURN
task sequence
task
TASKTYPE_TE_ALLOCATED
coordinator
task sequence
TASKTYPE_CT_ALLOCATE
dispatcher
allocated object
priority
preempt
front-most proxy task
blocking, (0)yes,(1)no
TASKTYPE_CT_SYNC
NULL
NULL
key or task rank
TASKTYPE_CT_DEALLOCATE
NULL
NULL
key or task rank
blocking, (0)yes,(1)no
* pv = parval
** msgp = msgparam
XE "装载/卸载" XE "装载/卸载任务" XE "行进偏移" XE "响应请求中断" XE "卸载" XE "协同任务类型" XE "任务类型" XE "Utilize" XE "TASKTYPE_BREAK" XE "TASKTYPE_CALLSUBTASKS" XE "TASKTYPE_CT_ALLOCATE" XE "TASKTYPE_CT_DEALLOCATE" XE "TASKTYPE_CT_SYNC" XE "TASKTYPE_DELAY" XE "TASKTYPE_DESTROYOBJECT" XE "TASKTYPE_FRLOAD" XE "TASKTYPE_FRUNLOAD" XE "TASKTYPE_LOAD" XE "TASKTYPE_MILESTONE" XE "TASKTYPE_MOVEOBJECT" XE "TASKTYPE_PICKOFFSET" XE "TASKTYPE_PLACEOFFSET" XE "TASKTYPE_SENDMESSAGE" XE "TASKTYPE_SETNODENUM" XE "TASKTYPE_STOPREQUESTBEGIN" XE "TASKTYPE_STOPREQUESTFINISH" XE "TASKTYPE_TAG" XE "TASKTYPE_TE_ALLOCATED" XE "TASKTYPE_TE_RETURN" XE "TASKTYPE_TE_STOP" XE "TASKTYPE_TRAVEL" XE "TASKTYPE_TRAVELRELATIVE" XE "TASKTYPE_TRAVELTOLOC" XE "TASKTYPE_UNLOAD" XE "TASKTYPE_UTILIZE" XE "TE_ALLOCATED" XE "STATE_UTILIZE" XE "Freeoperators" XE "Frload" XE "Frunload" XE "装载" 任务类型
可以参考任务序列快捷查询指南。 任务类型如下所示。
TASKTYPE_TRAVEL(任务类型_行进)
任务执行器行进到指定实体的位置。此任务通过向任务执行器连接的一个导航器发出一个行进请求来完成。如果任务执行器连接到一个网络,那么它将从网络导航器发出一个请求。
关于任务执行器和导航器的注释:有些实体在默认情况下根本不和任何导航器相连。如果不将任务执行器连接到导航器,那么它将不会执行任何操作来完成行进任务。下列实体在默认情况下不与任何导航器相连道堆垛机、升降机和机器人
involved1:
行进的目的地实体
involved2:
不使用此参数,赋值为NULL。
var1:
此参数指定所需要的行进操作的结束速度。如果是0,则所需的结束速度将是任务执行器的最大速度。如果是-1,则所需的结束速度是0。否则,所需的结束速度是此参数自身。
var2 - var4:
N/A
TASKTYPE_LOAD, TASKTYPE_FRLOAD(任务类型_装载,任务类型_固定实体装载)
此任务将使任务执行器从一个站点装载一个临时实体。如果选中了任务执行器的参数页中的“装卸时采用行进偏移”复选框,那么任务执行器就会通过向此站点询问位置,并采用行进偏移的方式行进到给定临时实体的位置。然后,任务执行器执行装载时间,在装载时间的结束时刻,任务执行器将临时实体移入自身。对于Frload(固定实体装载)任务,任务执行器将在移动临时实体之前通报固定实体,这样那个固定实体可以更新其跟踪数据。参见固定实体可以获得更多关于什么时候使用Frload和什么时候使用load任务类型的信息。
involved1:
要装载的实体(通常是一个临时实体)
involved2:
从它那里进行装载的实体(如果任务类型指定的是FRLOAD,那就意味着是指固定实体)
var1:
此参数是实体离开站点所通过的输出端口。通常是0就可以了
var2 - var4:
N/A
TASKTYPE_UNLOAD, TASKTYPE_FRUNLOAD(任务类型_卸载,任务类型_固定实体卸载)
此任务使任务执行器将一个临时实体卸载到一个站点。如果选中了任务执行器的“装卸时采用行进偏移” 复选框,那么它将通过向此站点询问位置,并采用行进偏移行进到卸货位置。然后,任务执行器执行卸载时间。在卸载时间的结束时刻,任务执行器将临时实体移入此站点。对于Frload任务类型,任务执行器将在移动临时实体之前通报固定实体,这样固定实体就可以更新其自身的跟踪数据。参见固定实体,可以获得更多关于什么时候使用Frunload和什么时候使用unload任务类型的信息。
involved1
要卸载的实体(通常是一个临时实体)
involved2
接收卸载实体的实体(如果任务类型指定的是FRLOAD,就意味着是固定实体)
var1
此参数是临时实体进入站点所要经过的输入端口。除非是要卸载到合成器,它需要知道临时实体是从哪个端口进来,用以更新其输入表,而通常情况下是0就可以了。
var2 - var4
N/A
TASKTYPE_BREAK(任务类型_中断)
此任务使任务执行器“中断”其当前激活任务序列,转到一个新的任务序列,图示说明如下:
涉及的实体和变量用来指定如何找到中断后要转向的任务序列。在默认情况下,任务执行器调用它的“条件中断响应”函数。此函数将返回一个任务序列的引用,它指向用户想要任务执行器中断转而去执行的任务序列。在中断逻辑中,可以使用任务序列查询命令来对任务执行器的任务序列队列进行搜索,或者,可以明确地采用createemptytasksequence(创建空任务序列)命令以明确地创建任务序列。如果根本不需要任务执行器中断,则返回NULL。
involved1
如果指定了involved1,那么它就是模型中某个实体的引用。任务执行器不会调用“条件中断响应”,而是给此实体发送一条消息。唯一不同的是,寻找中断后要转向的任务序列的逻辑所放的位置不同。默认情况下,在“条件中断响应”中执行逻辑,但是如果指定了此参数,那么需要在消息触发器中编写代码。同样,消息的返回值应该是一个任务序列的引用。如果想要通过消息将用户逻辑集中到一个起支配作用的“模型控制中心”,那么就很可能要使用此方法。
关于返回值的注释:因为消息触发器返回的是数字类型的值,因此,在消息中需要将任务序列的引用转换成一个数字。可以使用tonum()命令来完成:tonum(mytasksequence)
involved2
如果指定了involved2,则它被解释为指向任务执行器应该中断转而去执行的那个任务序列的直接引用。只有在创建包含有中断任务的任务序列时,就确切地知道要中断转而去执行什么任务序列的情况下,才使用此方式。此参数不经常使用,因为,如果你在创建一个任务序列的时候就知道应该中断去执行哪个任务序列,那么,在你创建它的时候,直接把那些任务添加到原来的任务序列中就可以了。
关于使用两个involved参数的注释:如果指定了此任务的involved1参数,那么involved2就应该为NULL;同样,如果指定了involved2,则involved1应该为NULL。这两个参数相互排斥。也可以使用默认情况,将两个参数都设为NULL。
var1
此参数指定在执行中断任务之前是否屏蔽任务执行器的当前数量。在默认(0)情况下,如果任务执行器的当前数量小于在其参数页中指定的最大容量,它才执行一个中断任务。然而,如果var1不为0,则任务执行器将忽略其当前数量,而执行中断任务。如果任务执行器调用自身的“条件中断响应”函数,则此参数由parval(3) 传递;如果是发送消息,则由msgparam(1)传递。
var2
此参数指定任务执行器是否查看接收来自上游分配器的任务序列。在默认(0)情况下,任务执行器将查看它的任务序列队列中是否有任务序列。如果队列为空,或者队列里面的所有任务序列都已开始执行并且都被中断,则它将打开输入端口,从上游分配器接收一个任务序列。然而,如果var2不为0,则任务执行器在调用“条件中断响应 ”逻辑之前不会接收任何来自于上游分配器的任务序列。如果任务执行器调用其“条件中断响应”函数,则此参数由parval(4)传递;如果是发送消息,则由msgparam(2)传递。
var3-var4
这两个参数在“条件中断响应”函数中由parval(5)和parval(6)传递。如果是发送消息任务类型,则var3由msgparam(3)传递到消息中。
TASKTYPE_CALLSUBTASKS(任务类型_调用子任务)
此任务和中断任务相似,只是它保证第二个任务一结束,就立即返回到原来那个任务序列的下一个任。下图说明了其工作方式。
如上图所示,任务序列A执行到一个调用子任务类型的任务,它在这里中断转入任务序列B。任务序列B一完成,立即返回任务序列A中的下一个任务。通常,只有当A实际调用子任务的时候,才会创建任务序列B。这是因为,当创建任务序列A时,还不能确切地知道,当执行到调用子任务的时候,需要让任务执行器做什么,或者是因为没有所需要的实体的预先引用。例如,如果需要让任务执行器行进到模型的某个部分,然后装载那个临时实体,再行进到模型中的另一个部分,并卸下临时实体,但是,你却无法得到想要装载的临时实体的引用,这时就是这种情况,那怎么办呢?用户会想要任务执行器到达模型中相应的那部分,并计算出要装载哪个任务。这里将要在任务执行器到达装载位置的时候采用调用子任务函数,来解决临时实体的引用问题。
调用子任务也可以是多层次的。意思是,任务序列B也可以再调用一个子任务。
如果决定在任务执行器执行到调用子任务的时候才来创建任务序列,则需要用createemptytasksequence()命令来创建任务序列,用inserttask()命令插入任务,但是不要用dispatchtasksequence()命令分配此任务序列。只返回任务序列的引用就可以了。
关于“条件中断响应”函数的注释:在默认情况下,当任务执行器执行到此类型的任务时,它会调用其“ 条件中断响应”函数。它将用parval(2) 给函数传递值1,这样可以告知函数,这是一个调用子任务而不是一个普通的中断任务。
关于协同任务序列的注释:如上图中,如果任务序列B是一个协同任务序列,则从任务序列A中执行调用子任务的任务执行器,必须是任务序列B中第一个被分派的实体。
involved1
如果指定了involved1,它必须是模型中某个实体。任务执行器不会调用“条件中断响应”函数,而是发送一条消息给参数involved1指定的实体。唯一的不同是找到中断后要转向的任务序列的逻辑所放置的位置不同。在默认情况下,在“条件中断响应”函数中执行逻辑。但是如果指定了involved1,则需要用户在一个消息触发触发器中编写自己的代码。同样,消息的返回值应该是此任务序列的引用。如果想要将用户逻辑通过消息集中到一个起支配作用的“模型控制中心”,那么就很可能要使用此方法。
关于返回值的注释:在消息中,需要将任务序列的引用转换成一个数字,因为消息触发函数返回的是数字型的值。可以使用onum()命令来完成:tonum(mytasksequence)。
involved2
如果指定了involved2,则它被解释为任务执行器应该中断转而去执行的任务序列的直接引用。这只有在创建包含有中断任务的任务序列的时候,就准确地知道中断后要去执行哪个任务序列的情况下才会使用。此参数不经常使用,因为,如果在创建原来的任务序列的时候就知道中断后应该去执行哪个任务序列,那么就把要转而执行的任务添加到原来的任务序列中了。然而,它却可以用来为任务序列的不同部分指定不同的优先级和先占值。这样,如果不想让任务序列的某个特定部分被先占,则可以将那部分定义成一个子程序任务序列,使它具有与原来的任务序列不同的优先级。
关于使用这两个involved参数的注释:如果指定了此任务的involved1参数,那么involved2就应该为NULL;同样,如果指定了involved2,则involved1应该为NULL。这两个参数相互排斥。也可以使用默认情况,将两个参数都设为NULL。
var1-var4
这些参数由parval(3)、parval(4)、parval(5)和parval(6)传递给“条件中断响应”函数。如果任务是发送消息,则参数var1、var2和var3分别由msgparam(1)、msgparam(2)和msgparam(3)传递给消息
TASKTYPE_UTILIZE(任务类型_使用)
此任务使任务执行器进入一种给定状态,并一直等待直到用freeoperators()命令将它从这那个状态释放出来。在需要一个操作员在某个站点“做某事”,而在创建任务序列时还不知道操作员要完成操作需要多长时间的情况下,常常使用此任务。在这种情况下,使用此任务类型可以使操作员进入所指定的状态,然后在他完成时用freeoperators()命令释放他。这可以在处理结束触发器和预置结束触发器等等之类的触发器中来完成。如果从开始就知道操作员必须用多长时间“做某事”,就可以使用延迟任务作为替代。
involved1
如果操作员的工作与处理一个临时实体有关,那么此参数通常是一个临时实体的引用。但有时它是一个站点的引用,例如,一个站点停机并调用了一个操作员。这里,操作员在此站点上工作,而不是为一个临时实体工作,这样,站点将会是参数involved1。如果喜欢,也可以将此参数指定为NULL。
专业一点说,此参数是匹配freeoperators命令的关键字。例如,如果此参数是一个临时实体,那么,调用freeoperators命令时,必须将同一个临时实体传递给freeoperators命令的第二个参数,目的是为了正确地释放操作员。
通常会使用一组操作员,其中任何一个都可以完成需要他们完成的工作。在这种情况下,应该将此任务序列交给一个分配器,而这个分配器将把它交给小组中的一员。在调用freeoperators时,并不知道最终哪个操作员会过来并完成工作,因此,将freeoperators命令给分配器,而在freeoperators命令中,让第二个参数与用户为此任务指定的involved1参数相匹配。这用来让分配器告诉它的操作员队伍,“你们当中任何一个正在执行使用(Utilize)任务,且参数是this(这个)的,现在可以结束那个任务了 ”。这使得分配器能够将特定的操作员从正确的任务中释放出来,而不会从错误的任务中释放其它的操作员。
involved2
只有在操作员有可能被先占而中断操作时,才需要用此参数。一个操作员可以被一个先占任务序列,或者被stopobject()命令,或者被全局时间表以及全局MTBF表等先占而中断操作。如果操作员被先占而中断一个使用(Utilize)任务,那么,如果在他回到此使用(Utilize)任务之前调用freeoperators命令,就会导致发生问题。如果在他做其它事情的时候调用freeoperators命令,则操作员只是简单地忽略该命令,认为不是针对他的命令。然后,当他一旦返回此操作,就再也不会释放他,因为模型逻辑认为已将他释放了。这个involved2参数可用来帮助缓解这种问题。如果指定了involved2,则它应该指向模型中的一个实体,此实体负责释放该操作员。当操作员被先占时他将在指定的实体上调用stopobject()来停止实体,在大多数情况下,这样将会使实体停止调用freeoperators命令。当操作员一回到使用(Utilize)任务,他将在站点上调用resumeobject()命令,情况将恢复正常,并将最终释放该操作员。参见相应的帮助章节可以获得更多关于先占的信息。
var1
这是操作员在执行使用(Utilize)任务类型过程中将进入的状态。如果是0,则任务执行器将会进入STATE_UTILIZE(状态_使用) 。
var2 - var4
N/A
TASKTYPE_STOPREQUESTBEGIN(任务类型_“停止请求”开始)
此任务使任务执行器在参数involved1传递的实体上调用stopobject()命令。
involved1
此参数指定要调用stopobject()的实体。如果为空,则任务执行器将在自身上调用stopobject()。
involved2
不使用此参数,赋值为NULL。
var1
这是要求即将停止的实体进入的状态。
var2
只有在执行此任务的任务执行器可能被先占的情况下,此参数才是必须的。当使用里程碑任务时,也需要使用此参数。如果此变量设为0,则即使在里程碑任务范围之内,并且实体在那个范围内被先占,任务也只执行一次。如果此变量设为1,且任务在一个里程碑任务范围之内,则实体每次被先占并需要重新执行任务时,此任务都被再执行一次。默认情况下,此值为0,意味着此任务只执行一次。
var3
此值由实体管理。1意味着任务已经被执行了至少1次。0表示还没有执行.
var4
N/A
TASKTYPE_STOPREQUESTFINISH(任务类型_“ 停止请求”结束)
此任务用来让任务执行器在实体involved1上调用resumeobject ()命令。
involved1
此参数指定要调用resumeobject()命令的实体。
involved2
N/A
var1- var4
N/A
TASKTYPE_SENDMESSAGE(任务类型_发送消息)
此任务用来让任务执行器发送一条消息给实体involved1。
involved1
Involved1是要接收消息的实体。此参数如果为NULL,则消息将发送给任务执行器自身。
involved2
Involved2在消息触发器中指定msgsendingobject(消息发送实体)。如果此参数为NULL,则msgsendingobject是任务执行器自身。通常此参数为NULL,因为这是消息触发器中获取任务执行器自身的唯一方法。不过,可能需要从一个不同的实体来发送消息,所以就有了这里的选项。
var1
在消息触发函数中,此参数作为msgparam(1)传递。
var2
在消息触发函数中,此参数作为msgparam(2)传递。
var3
在消息触发函数中,此参数作为msgparam(3)传递
var4
此参数用来判断发送的消息是否是一个延迟消息。如果为0,则立即发送此消息;如果为-1,则会延迟0时间发送此消息;否则,将延迟指定的秒数后发送此消息。
用户可能认为延迟消息有些多余,因为,如果想要发送一条延迟消息,为什么不在一个规范的发送消息任务后面插入一个延迟任务呢?这里有些细微的差别。例如,假设想要让任务执行器在满足给定数目的几个条件之前一直等待,而能够检查那些条件的唯一方法是靠执行代码。做到这一点的方法是,当任务执行器执行到应该停下等待条件被满足的地方,它发送一条消息给某个实体,然后,执行一个使用 HYPERLINK "file:///D:\\WebHelp\\task_sequences\\" \l "UtilizeTask" ( HYPERLINK "file:///D:\\WebHelp\\task_sequences\\" \l "UtilizeTask" HYPERLINK "file:///D:\\WebHelp\\task_sequences\\" \l "UtilizeTask" utilize HYPERLINK "file:///D:\\WebHelp\\task_sequences\\" \l "UtilizeTask" )任务,或者执行一个Stoprequestbegin(“停止请求”开始)任务。当其它实体得到这条消息时,它负责查看是否满足那些条件。如果已经满足,则它立即在任务执行器上调用resumeobject()或者freeoperators()。否则,它必须一直等到条件被满足,然后调用resumeobject()或者freeoperators()。然而,当条件已经满足并且它可以允许任务执行器立即继续执行时,就带来一个问题。如果消息被立即发送出去,而任务执行器还没有开始使用Stoprequestbegin(“ 停止请求”开始)任务,它还在发送消息任务中工作,因此,其它的实体就不能立即调用resumeobject()或者freeoperators()。这是由于它必须等待任务执行器完成发送消息的任务,并且到了使用(Utilize)任务或者Stoprequestbegin(“ 停止请求”开始)任务上。“在0时间发送一个延迟消息完全能够让任务执行器做到如此,这样就能够在条件满足时,让其它实体立即将它释放。
TASKTYPE_DELAY(任务类型_延迟)
此任务使任务执行器进入一种给定状态,然后等待一段指定的时间
involved1
不使用,将此参数赋值为NULL.
involved2
不使用,将此参数赋值为NULL.
var1
这是任务执行器在指定状态里要等待的时间
var2
这是操作员在延迟任务中要进入的状态。如果为0,则任务执行器将进入STATE_UTILIZE(状态_使用)。
var3
此参数被任务执行器保留。用户不要设置此参数,或者至少不要期望它一直与所设定的值保持一致不变.
var4
N/A
TASKTYPE_MOVEOBJECT(任务类型_移动实体)
此任务告诉任务执行器将指定实体移动到一个指定的容器中。如果想要任务执行器在装载/卸载临时实体时,不进行偏移,或者不执行装载/卸载时间,则要使用此任务类型。还可用于想要移动一个临时实体,但又不是移进或移出任务执行器的情况。
involved1
要移动的实体
involved2
involved1实体要进入的容器实体
var1
involved1实体要离开的实体的输出端口,通常为0。
var2-var4
N/A
TASKTYPE_DESTROYOBJECT(任务类型_销毁实体)
此任务告诉任务执行器消毁指定的实体。通常,当一个临时实体在模型中完成了行程,准备进入吸收器的时候,使用此任务类型。可以在这里明确地消毁临时实体。此任务也可用来消毁标签。例如,有一个标签来当作一个请求队列使用。一旦完成一个请求,或准备从队列中取出,就可以消毁它。
involved1
要消毁的实体
involved2
不使用此参数,赋值为NULL.
var1-var4
N/A.
TASKTYPE_SETNODENUM(任务类型_设定节点数值)
此任务使任务执行器在指定节点上设定一个值。当需要在实体上设定变量或标签时使用此任务类型。
involved1
要在其上设定值的节点。可能是标签label(current, "mylabel")或者变量var_s(current, "maxcontent")。
involved2
不使用此参数,赋值为NULL。
var1
要给节点设定的值
var2
此参数用来设定节点的值,或者递增节点上的值。在默认(0)情况下,将设定节点的值。如果为1,将把节点的值递增var1。
var3-var4
N/A.
TASKTYPE_TRAVELTOLOC(任务类型_行进到位置)
此任务使任务执行器采用行进偏移行进到指定位置。
involved1
不使用此参数,赋值为NULL。
involved2
不使用此参数,赋值为NULL。
var1
目标地的x位置
var2
目标地的y位置
var3
目标地的z位置
var4
想要的结束速度
TASKTYPE_TRAVELRELATIVE(任务类型 _相对行进)
此任务使任务执行器使用偏移行进行进指定的偏移量。这与行进到位置任务类似,只是此任务不是行进到某个目的地,而是从当前位置进行偏移。
involved1
不使用此参数,赋值为NULL。
involved2
不使用此参数,赋值为NULL。
var1
要行进的x偏移量
var2
要行进的y偏移量
var3
要行进的z偏移量
var4
想要的结束速度
TASKTYPE_PICKOFFSET(任务类型_捡取偏移)
此任务使任务执行器执行行进偏移,就像是要去装载一个临时实体一样,但实际上并不装载。还可用来对任务执行器在装载之前的行进操作进行排队。例如,有一个地面堆存区,任务执行器将要从这里捡取一个临时实体。临时实体在地面上按列(x)行(y)来安排。当任务执行器到达地面堆存区时,不要直接行进到产品的位置去装载它,而需要首先让它沿着x方向行进到正确的列(bay),然后进行y和z方向的行进偏移,到达临时实体的位置。此任务类型就是用来实现这样的逻辑。当任务执行器到达地面堆存区时,给它一个拾取偏移任务,其中它只需要偏移x部分,然后可以分配它常规的装载任务,那么它在完成x偏移之后,将进行y和z向的偏移。
involved1
与装载任务一样,这是将要装载的临时实体的引用。
involved2
与装载任务一样,这是要装载的临时实体所在站点的引用。
var1- var3
这三个参数通常不是0就是1。它们分别对应于偏移行进的x、y、z部分。如果为0,任务执行器将不执行相应偏移的任何部分。如果为1,任务执行器将执行相应偏移的任何部分。也可以将其设定为0到1之间的值,意味着任务执行器将行进90%的相应偏移量。
var4
想要的结束速度
TASKTYPE_PLACEOFFSET(任务类型_放置偏移)
此任务与捡取偏移任务相似,只是在这里,任务执行器就像要去执行卸载操作一样,去进行行进偏移。
involved1
与卸载任务类似,这是装载的临时实体的引用。
involved2
与卸载任务类似,这是要卸载临时实体的站点的引用。
var1-var4
与捡取偏移任务相同。
TASKTYPE_TAG(任务类型_标记)
此任务用来“标记”任务序列。例如,在模型中创建5个普通类型的任务序列。在仿真过程中的不同给定点,需要知道某特定任务序列是哪种类型。向已创建的所有任务序列中插入“标记”任务,作为每个任务序列的第一个任务,这样,可以使用gettaskinvolved()命令和gettaskvariable()命令查询这个任务,从而判断其任务类型。
involved1
给用户使用
involved2
给用户使用
var1-var4
给用户使用
TASKTYPE_TRAVELRELATIVE(任务类型_相对行进)
此任务使任务执行器采用偏移行进行进到指定的偏移位置,与行进到位置任务类似,只不过不是行进到目的地,而是从当前位置算起开始偏移。
involved1
不使用此参数,赋值为NULL。
involved2
不使用此参数,赋值为NULL。
var1
要行进的x偏移量。
var2
要行进的y偏移量。
var3
要行进的z偏移量。
var4
预期的结束速度。
TASKTYPE_MILESTONE(任务类型_里程碑)
此任务只用于可能被先占的任务序列。它在任务序列中定义一个 “书签”,使得任务执行器在某任务序列中如果被先占,以后还能回到那个位置。通常,当任务执行器从任务序列被先占时,一旦它回到那个任务序列中,它将会在同一点恢复。里程碑任务用来告诉任务执行器如果发生先占的情况,在以后恢复时要重复一个完整的部分。此任务定义了一个子序列任务范围,并对此任务序列负责。如果任务执行器在这个范围内被先占,则返回时将返回到里程碑任务。如果被先占时已经超出了里程碑范围,则将返回到默认的位置。
关于协同任务序列的注释:里程碑任务不在协同任务序列中作为代理任务工作。如果想要在协同任务序列中设置书签,应该插入一个调用子任务代理任务,在子任务序列中,可以插入需要的里程碑任务。
involved1
不使用此参数,赋值为NULL。
involved2
不使用此参数,赋值为NULL。
var1
此参数是里程碑任务的范围,以任务数目定义。例如,如果var1设定为3,并且里程碑任务是任务序列的第五个任务,那么,如果任务执行器在执行6、7、8的任何一个任务时被先占,则返回到里程碑任务。
var2-var4
N/A
注释:下面的任务类型只是为了参考目的,用户不能够将其中任何一个任务明确地插入到任务序列中。
TASKTYPE_TE_STOP(任务类型_任务执行器_停止)
在一个任务执行器上调用stopobject时创建此任务。任务执行器创建一个优先级为100000的先占任务序列,并将此停止任务插入任务序列。
involved1
不使用此参数,赋值为NULL。
involved2
不使用此参数,赋值为NULL。
var1
任务执行器停机时将进入的状态。
var2-var4
N/A
TASKTYPE_TE_RETURN(任务类型_任务执行器_返回)
此任务添加到从调用子任务返回的任务序列的末尾。它确保,一旦完成此任务序列,它将返回到原来的任务序列。
involved1
此参数指向要返回的原来的任务序列。如果原来的任务序列是协同任务序列,则此参数将指向包含有TE_ALLOCATED 任务的任务序列。
involved2
此参数指向实际的作为节点的“调用子任务”任务。
var1-var4
N/A
TASKTYPE_TE_ALLOCATED(任务类型_任务执行器_分派)
这是一个专门针对协同任务序列的特殊任务。此任务告诉任务执行器去被分派,意思是,在实体执行到此任务时,它将提醒实体去协调任务序列,然后一直等待,直到那个任务协调器告诉它去做什么。
involved1
协调任务序列的实体。
involved2
正在被执行的协同任务序列的引用。
var1-var4
N/A
协同任务类型
注释:下面给出的任务类型,不能由用户进行插入。它们应当用insertallocatetask()、insertsynctask()和insertdeallocatetask()命令进行插入。
TASKTYPE_CT_ALLOCATE(任务类型_协同任务_分派)
任务协调器执行到此任务时,将设法分派某些任务执行器。实现的方法是,创建一个包含有一个TASKTYPE_TE_ALLOCATED 任务的常规任务序列,并把它分配给一个特定的实体。此任务将阻塞任务序列的连续执行,直到分派了一个实体。
involved1
此参数是要接收所给的任务序列的分配器的引用。它可以是一个特定的任务执行器,或者,当要分派的实体是几个可用实体中的一个时,此参数可以是对那些任务执行器进行分配的分配器的引用。
involved2
此参数在任务创建时并没有指定,但是一旦分派了实体且要引用那个实体的时候,就要设定该参数。
var1
分派的优先级值
var2
分派的先占值
var3
此参数在随着任务序列的执行而变化,它是分配给已分派资源的最前面的代理任务的序号。
var4
此参数告知任务序列是否阻塞。0(默认)表示阻塞,1表示不阻塞。
TASKTYPE_CT_SYNC(任务类型_协同任务_同步)
任务协调器执行到此任务时,将阻塞任务序列的连续执行,直到完成某些先前指定的任务(按排序号引用)。
involved1
不使用此参数,赋值为NULL。
involved2
不使用此参数,赋值为NULL。
var1
要同步的任务的排序号
var2-var4
N/A
TASKTYPE_CT_DEALLOCATE(任务类型_协同任务_取消分派)
任务协调器执行到此任务时,将通知一个实体,它可以完成分派任务并回到其它任务去。此实体由分派给它的分派任务的序号指定。
involved1
不使用此参数,赋值为NULL。
involved2
不使用此参数,赋值为NULL。
var1
分派实体的分派任务的序号。
var2
此参数指定此任务是否阻塞。0(默认值)表示阻塞,1表示不阻塞。
var3-var4
N/A
索引
2D 155
3D 204, 208
3ds文件 204
3D媒体 204
3D图形 249
3D文件 204, 208, 274
3D纹理 274
3D形状 208, 274
Apchar 192
AutoCAD 205, 331
AutoCAD图形 205
AVI文件 346
AVI制作器 346
Bmp文件 212
Cellrc 192
Centerobject 192
Clearglobaltable 192
Closeinput 192
Closeoutput 192
Cmdcompile 192
Colorred 192
Concat 192
Containerobject 192
Covermode 476
Csv文件 381
C代码 346
Dbchangetable 192
Dbclose 192
Dbgetfieldname 192
Dbgetmetrics 192
Dbgetnumcols 192
Dbgetnumrows 192
Dbgettablecell 192
Dbopen 180, 192
Dbsettablecell 192
Dbsqlquery 192
Delaytime 192
Dfx 204, 205, 384
Dispatchtasksequence 225
Drawcolumn 192
Drawcube 192
Drawcylinder 192
Drawdisk 192
Drawline 192
Drawobject 192
Drawrectangle 192
Drawsphere 192
Drawtext 192
Drawtomodelscale 192
Drawtoobjectscale 192
Excel 348, 361, 378, 379
Excelclose 192
Excelimportnode 192
Excelimporttable 192
Excellaunch 192
Excelopen 192
Excelquit 192
Excelreadnum 192
Excelreadstr 192
Excelsetsheet 192
Excelwritenum 192
Excelwritestr 192
Excel界面 348
Flexsim 术语 27
Flexsim实体库 283
Flexsim树 178
Flexsim树结构 185
for 188
Freeoperators 614
Frload 614
Frunload 614
Getcreationtime 192
Getdatatype 192
Getentrytime 192
Getframe 192
Getinput 192
Getitemtype 192
Getlabelnum 192, 278
Getlabelstr 192
Getname 192
Getnodename 192
Getnodenum 192
Getnodestr 192
Getoutput 192
getpreempt 606
Getrank 192
Getstatenum 192
Getstatestr 192
Gettablecols 192
Gettablenum 192
Gettablerows 192
Gettablestr 192
Getvarnode 192
Getvarnum 192
Getvarstr 192
Holditem 227
if 192
Inc 192
Inobject 192
Insertcopy 192
Jpg文件 212, 384
Lds文件 206
LOD 206
Lrl文件 206
Moveobject 192
Msgparam 447
Msgsendingobject 447
MTBF 18, 238, 242
MTBF MTTR 383
MTTR 18, 238, 242
Ncols 192
Nodeadddata 192
Nodeinsertafter 192
Nodeinsertinto 192
NOT 188
NrofLegs 222
Nroftransportsin 227
Nroftransportsout 227
Numtostring 192
Object-oriented 283
ODBC 192
OnReceive 176
OnSend 176
OnTimerEvent 176
Openinput 192
Openoutput 192
OptQuest 140, 364
OR 188
Otherobject 470
Othersphere 470
Outobject 192
Pf 192
Photoeye 476
PREEMPT_AND_ABORT_ACTIVE 606
PREEMPT_AND_ABORT_ALL 606
PREEMPT_NOT 606
PREEMPT_ONLY 606
Reassignnetnode 262
Releaseitem 227
Resetmodel 192
Resumeinput 192
Resumeobject 18, 192, 353
Resumeoutput 192
Rise 222
ROYGBIV 262
Senddelayedmessage 192, 447
Sendmessage 192, 447
Setcolor 192
Setframe 192
Setitemtype 192
Setlabelnum 192, 278
Setlabelstr 192
Setloc 192
Setname 192
Setnodename 192
Setnodenum 192
Setnodestr 192
Setobjectimageindex 192
Setobjectshapeindex 192
Setobjecttextureindex 192
Setpreempt 606
Setpriority 606
Setrank 192
Setrot 192
Setsize 192
Setstate 192
Settablenum 192
Settablesize 192
Settablestr 192
Setvarnum 192
Setvarstr 192
Spacerotate 192
Spacescale 192
Spacetranslate 192
STATE_BLOCKED 202
STATE_BREAKDOWN 202
STATE_BUSY 202
STATE_COLLECTING 202
STATE_CONVEYING 202
STATE_DOWN 202
STATE_EMPTY 202
STATE_GENERATING 202
STATE_IDLE 202
STATE_LOADING 202
STATE_OFFSET_TRAVEL_EMPTY 202
STATE_OFFSET_TRAVEL_LOADED 202
STATE_PROCESSING 202
STATE_RELEASING 202
STATE_SCHEDULED_DOWN 202
STATE_SETUP 202
STATE_TRAVEL_EMPTY 202
STATE_TRAVEL_LOADED 202
STATE_UNLOADING 202
STATE_UTILIZE 202, 614
STATE_WAITING_FOR_OPERATOR 202
STATE_WAITING_FOR_tRANSPORTER 202
Statenum 192
Stl文件 384
Stopinput 192
Stopobject 18, 192, 202, 353
Stopoutput 192
Stringtonum 192
switch 188
TargetQuantity 218
TASKTYPE_BREAK 614
TASKTYPE_CALLSUBTASKS 614
TASKTYPE_CT_ALLOCATE 614
TASKTYPE_CT_DEALLOCATE 614
TASKTYPE_CT_SYNC 614
TASKTYPE_DELAY 614
TASKTYPE_DESTROYOBJECT 614
TASKTYPE_FRLOAD 614
TASKTYPE_FRUNLOAD 614
TASKTYPE_LOAD 614
TASKTYPE_MILESTONE 614
TASKTYPE_MOVEOBJECT 614
TASKTYPE_PICKOFFSET 614
TASKTYPE_PLACEOFFSET 614
TASKTYPE_SENDMESSAGE 614
TASKTYPE_SETNODENUM 614
TASKTYPE_STOPREQUESTBEGIN 614
TASKTYPE_STOPREQUESTFINISH 614
TASKTYPE_TAG 614
TASKTYPE_TE_ALLOCATED 614
TASKTYPE_TE_RETURN 614
TASKTYPE_TE_STOP 614
TASKTYPE_TRAVEL 614
TASKTYPE_TRAVELRELATIVE 614
TASKTYPE_TRAVELTOLOC 614
TASKTYPE_UNLOAD 614
TASKTYPE_UTILIZE 614
TE_ALLOCATED 614
Thisobject 470
Thissphere 470
Tmp 文件 212
Tonode 192
Tonum 192
Tpg 文件 212
Userinput 192
Utilize 599, 614
VR 331
Wav 文件 369
while 188
Wrl 文件 204, 208, 331, 384
Xds 文件 208
Xloc 192
Xrl 文件 208
Xrot 192
Xsize 192
YDS 文件 208
Yloc 192
YRL 文件 208
Yrot 192
Ysize 192
Zloc 192
Zrot 192
Zsize 192
按时间表到达 258
按时间表到达模式 323
按下列请求运输机 228, 296
按序列表到达 258
按序列表到达模式 323
半径 222
帮助菜单 145
报告 175
背景设计 380
背景颜色 159
比较 188
编辑3D形状因子 274
编辑菜单 135
编辑所选实体 156
编辑所选实体菜单 162
编辑选择集 149
编写 188
编译 139, 184, 411
变更触发器 479
标记架子 245
标签 278
标签页 278
标准报告 140, 175
表 181, 379
表X值(X值) 588
表Y值(Y值) 589
表编辑器 181
表配置器 381
不透明性 25
布局 222
操作员 311, 599
操作员分页 238
操作员任务序列 599
层 25, 245, 247, 522
查找替换 135, 171
长度 222
常规属性页 276
场景 364, 373, 574, 583
撤销 135
成批 243, 315
成员页 18
持续时间 353
尺寸 274
处理操作员 238
处理分配器 525
处理过程分页 234
处理过程名称 234
处理器 288
处理器的MTBF 242
处理器分页 241
处理时间 515
处理时间分页 242
处理完成触发 266
处理完成触发器 450
传递给 567
创建 323
创建/编辑标签表 278
创建触发器 459
垂直堆叠 243
从用户库移除实体 385
打开连线侧边 472
打印输出 192
代码 350
单表导出 378
单表导入 379
单元 25
导出表数据 381
导入 204, 205, 208, 379
导入/导出 348
导入表 361
导入表数据 381
导入媒体文件 384
导入形状 331
到达触发器 266, 472
到达类型 258
等待运输 296
地面堆存 245
第一视角 159
动态改变模型 327
断开连接 157
堆积 315
多Excel表导入 361
发生器 323
仿真 27
仿真运行控制面板 147
放置 25, 522
非累积模式 302
非时间交通模式 327
分段 222
分段列表 222
分解 257, 321
分解器 321
分解器分页 257
分解数量 294, 556, 570
分类输送机 232, 302, 543
分配器 599
分配器分页 225
复合处理器 304
复合处理器页 234
复制 321
复制标签 278
覆盖 290
覆盖触发器 240, 290, 291
覆盖解除 290
覆盖解除触发 240, 290, 291
覆盖与覆盖解除触发器 476
高级函数 192
高亮实体 155
高位标记 255
高于低位标记触发 266
高于高位标记触发 266
高于中位标记触发器 266
跟踪调试器 136, 176
跟踪列表 230
工具 345
工具菜单 142
固定资源 11, 283
合并 288
合成器 218, 288
互斥模式 327
恢复触发器 353
恢复函数 18, 353
绘制球 216
货架 25, 247, 512, 522
货架尺寸表页 247
货架页 245
机器人 256, 320
机器人分页 256
基本建模函数 192
基于 堆叠 243
绩效评估 373
绩效指标 567
激活任务序列 599
记录 346
记录器 249, 318, 589
继续触发器 266, 472
加速度 260
间隔 235
间隔规则 219
间隔值 219
监视列表 383, 410
捡取/放置时 245
减速度 260
检修触发器 18, 266
建立 30
建模工具 345
键盘交互 157
交通控制 327
教程 27
结束 571, 572, 574
解锁样条线 135
近切割面 159
进入 255, 427
进入触发器 266, 427
进入节点触发器 472
进入区域 327
开始 582, 583
开始起步 27, 145
可视化工具 331, 591
库 185
库树 136
库图标栅格 136
拉式 228, 296
拉式请求 296
离开 427
离开触发器 266, 427
离开区域 327
连接 157, 235, 276
连接端尺寸 159
连接端风格 159
列 25, 247
列宽 247
临时实体 283
临时实体存档编辑器 349
临时实体流分页 228
临时实体箱 349
临时实体页 228
浏览用户库树 385
流出 255
流节点 231
流量速率 255
路径浏览器 183
逻辑 188
逻辑For循环 188
逻辑If语句 188
逻辑Switch语句 188
逻辑While循环 188
逻辑表达式 192
满足置信区间 364
每秒帧数 346
描述 29
名称尺寸 159
名称风格 159
命令 188, 192
命令集 169
命令提示 136, 168
模型 185
模型例库 145
模型树 136
模型文档 140, 182
排队 294, 315
排队策略 225, 567, 570
排队最短 567
配置器 381
碰撞 216
碰撞处理 216, 470
碰撞触发器 470
批量规格 243, 315
平面视图 155
破坏 322
起重机 293
起重机导航器 293
起重机提升高度 224
起重机页 224
切换 162
去托盘 257, 321, 556
任务类型 614
任务序列 599
任务执行器 283
任务执行器分页 260
容量 260
容器 331
删除标签 278
上升/下降通过位高标记触发器 539
设定变量 192
设定菜单 159
设定数值精确度 135
设定样条张力 135
升降机 295
升降机分页 226
生成报告 175
生成触发器 266
生成器分页 258
时间 504
时间表 353, 383
时间下拉菜单 514
实体变量 192
实体标签 192
实体空间属性 192
实体控制 192
实体统计值 192
实体指代引用 192
实体属性 192
实验 140, 373, 567, 571, 572, 574, 582, 583
实验控制器 19
事件代码 355
视角推移路径 369
视景文本 331
视景显示 331
视图菜单 136
视图树 136
释放 296, 315
收集 315
收集结束触发器 266, 315
首次事件时间 355
首个可用列 296
输出端口 276
输入端口 276
输送机 290, 302
输送机分页 219
树 179, 185
树编辑器 179
树浏览器对话框 177
树视窗 178
树移动 179
数据捕获设定 249
数据点编号 588
数据库表 136
数据库表视图 180
数学操作符 192
速度 219, 231, 301, 563
速度限制 235
锁定样条线 135
替换 171
添加数字标签 278
添加文字标签 278
跳转 290, 291
统计 280
统计菜单 140
统计收集 140
图像 384
吞吐量 280
完成提示 135, 170
网格 159
网格尺寸 159
网络节点 235, 327, 472
网络节点页 305
微软Excel 348, 378, 379
维修触发器 500
文本代码 591
文本显示 590, 591
文字大小 331
文字厚度 331
纹理 331
无先占 606
吸收器 322
细节的层次 206
下拉菜单 411
显示网格 159
显示选项 249
响应请求中断 614
向 219
向网格对齐 159
巷道堆垛机 285
巷道堆垛机页 215
项目树 185
消息触发器 176, 266, 447
协同任务类型 614
卸载 614
卸载触发 266
卸载触发器 413
卸载时间 511
新建用户库 385
新增功能 3
行进偏移 614
形状 384
形状因子 274
虚拟长度 219
虚拟距离 235
选取操作员 525
样条线 235
隐藏底面 159
隐藏名称 159
隐藏三维形状 159
用户长度 218, 219
用户定义状态 304
用户控制 364
用户库 385
用户库图标栅格 136
用户描述 276
用户事件 355, 383
用户手册 145
优先级 228, 238
预置操作员 238
预置时间 513
预置完成触发 266
远切割面 159
运输机 265, 330
运输机页 265
运行 572
运行模型 139
暂存区页 243
展示幻灯片 331, 380
正投影编辑器 136, 156
帧 311
执行命令 188
中断触发器 18, 266, 500
中断任务 599
中间端口 276
中位标记 255
重复时间表/序列 258
重复事件 355
重复随机数流 140
重复运行 364, 572
重置触发 490
重置触发器 490
重置模型 139
周期时间 515
逐步按钮 139
主 185
主树 136
属性 149, 276
属性提示 136, 167
转角 222
装盘/合并/分批 218
装载 614
装载/卸载 599, 614
装载/卸载任务 614
装载触发器 266, 413
装载时间 511
装载用户库 385
状态 202, 280
状态报告 140
状态列表 202
字体视窗 172
自动创建任务序列 599
总是发送 543
最大等待时间 243
最大容量 219, 241, 243, 245
最短距离 567
最小停留时间 245, 512
周期