flexsim handbook

717
Flexsim 仿真软件用户手册 3.0 copyright©2001-2005, Flexsim Software Products, Inc.

Upload: hexiyaba

Post on 14-Jul-2015

1.085 views

Category:

Business


9 download

TRANSCRIPT

Page 1: Flexsim handbook

Flexsim 仿真软件用户手册

3.0 版

copyright©2001-2005, Flexsim Software Products, Inc.

Page 2: Flexsim handbook

欢迎查看 Flexsim 帮助..........................................................................................................................................1

Flexsim 3.0 版本新增功能....................................................................................................................................3

Flexsim 与仿真起步知识.....................................................................................................................................28

模型描述......................................................................................................................................................31

建立模型......................................................................................................................................................32

模型实验......................................................................................................................................................45

教程......................................................................................................................................................................57

第 1 课...........................................................................................................................................................58

Flexsim 软件概念学习........................................................................................................................59

模型 1 描述..........................................................................................................................................61

建模步骤..............................................................................................................................................62

第 2 课...........................................................................................................................................................73

Flexsim 软件概念学习........................................................................................................................74

模型 2 描述..........................................................................................................................................86

建模步骤..............................................................................................................................................87

第 2 课 进阶.................................................................................................................................................99

建模步骤 ...........................................................................................................................................100

第 3 课.........................................................................................................................................................114

Flexsim 软件概念学习......................................................................................................................115

模型 3 描述........................................................................................................................................125

建模步骤............................................................................................................................................126

Flexsim 使用介绍...............................................................................................................................................138

Flexsim 使用介绍......................................................................................................................................138

主菜单和工具条........................................................................................................................................140

模型视图....................................................................................................................................................159

视窗与对话框............................................................................................................................................179

Flexsim 概念..............................................................................................................................................198

3D 媒体......................................................................................................................................................220

实体窗口............................................................................................................................................................232

实体参数视窗和属性视窗........................................................................................................................232

参数页........................................................................................................................................................235

属性页........................................................................................................................................................302

Flexsim 实体库...................................................................................................................................................313

Flexsim 实体库..........................................................................................................................................313

堆垛机........................................................................................................................................................316

基本固定实体(BFR)..................................................................................................................................317

Page 3: Flexsim handbook

基本任务执行器(BTE).........................................................................................................................318

合成器........................................................................................................................................................319

输送机........................................................................................................................................................322

起重机........................................................................................................................................................325

分配器........................................................................................................................................................326

升降机........................................................................................................................................................327

固定实体....................................................................................................................................................329

流节点........................................................................................................................................................334

分类输送机................................................................................................................................................335

复合处理器................................................................................................................................................338

网络节点....................................................................................................................................................339

操作员........................................................................................................................................................346

处理器........................................................................................................................................................349

暂存区........................................................................................................................................................351

货架............................................................................................................................................................352

记录器........................................................................................................................................................355

储液罐........................................................................................................................................................356

机器人........................................................................................................................................................357

分解器........................................................................................................................................................358

吸收器........................................................................................................................................................360

发生器........................................................................................................................................................361

任务执行器................................................................................................................................................362

交通控制器................................................................................................................................................366

运输机........................................................................................................................................................369

可视化工具................................................................................................................................................371

工具....................................................................................................................................................................387

建模工具....................................................................................................................................................387

AVI 制作器 ................................................................................................................................................388

Excel 界面..................................................................................................................................................390

临时实体箱................................................................................................................................................391

全局 C++代码............................................................................................................................................392

全局实体指针............................................................................................................................................393

全局表........................................................................................................................................................395

全局时间表................................................................................................................................................396

全局用户事件............................................................................................................................................399

导入媒体....................................................................................................................................................400

模型开始时代码........................................................................................................................................401

Page 4: Flexsim handbook

MTBF/MTTR.............................................................................................................................................402

多 Excel 表导入.........................................................................................................................................406

OptQuest 优化器.......................................................................................................................................409

演示生成器................................................................................................................................................414

脚本编辑器................................................................................................................................................418

仿真实验控制器........................................................................................................................................419

单表导出....................................................................................................................................................425

单表导入....................................................................................................................................................426

背景设计编辑器........................................................................................................................................427

工具箱........................................................................................................................................................430

用户库........................................................................................................................................................432

监视列表....................................................................................................................................................458

下拉菜单............................................................................................................................................................461

下拉菜单....................................................................................................................................................461

任务序列............................................................................................................................................................679

定制创建任务序列....................................................................................................................................682

查询有关任务序列的信息........................................................................................................................684

索引....................................................................................................................................................................712

Page 5: Flexsim handbook

欢迎查看 Flexsim 帮助

感谢您选用 Flexsim。此用户手册将使您更好地了解 Flexsim。同时,它也是有经验用户的参考指南

帮助您解决关于 Flexsim 的各种疑问。

有经验的用户可参考此手册开始部分的新增内容部分来看看在 3.0 版本中新加入了哪些特色。

此手册中包括的帮助内容列表如下。

帮助内容

• 开始学习 Flexsim

• Flexsim 教程

• Flexsim 的使用介绍

• 实体参数与属性窗口

• Flexsim 实体库

• 工具

• 下拉菜单

• 任务序列

1

Page 6: Flexsim handbook

Flexsim 3.0 用户手册

2

Page 7: Flexsim handbook

Flexsim 3.0 新增功能

Flexsim 3.0 版本新增功能

应用• 在打开后不再需要立即编译

• 因库已编译好而使编译更快捷

• 新的窗口标题

• 现在可以同时打开多个图形用户界面

引擎• 模型运行更快

• 编译更快

帮助• 上下文相关的帮助

• 下拉菜单选项文件说明中增加了举例

• 更多的范例模型

• 更好的相关信息链接

新的正投影图形编辑器新的“编辑所选实体”菜单

3

Page 8: Flexsim handbook

Flexsim 3.0 用户手册

新的树编辑器

可以更快捷地在模型树中进行高级建模。

4

Page 9: Flexsim handbook

Flexsim 3.0 新增功能

新的自动 Excel 导入

新的 Visio 模型导入能力

5

Page 10: Flexsim handbook

Flexsim 3.0 用户手册

使用 Flexsim 模板在 Visio 中建立一个模型,可以直接导入 Flexsim!

编码

改进的 flexscript语言命令

宏指令

局部变量

数学运算符

比较工具

部分新的入门级别的产品开发(无需编译)

表访问命令

• 现可接受一个指向表节点的指针或者一个全局表的名称 • gettablecell, settablesize, gettablerows, gettablecols, clearglobaltable, gettablenum,

gettablestr, settablenum, settablestr

标签访问命令

• 现可接受定义标签排列的索引顺序号,或者标签本身的名称 • label, dellabel, getlabelnum, getlabelstr, setlabelnum, setlabelstr

Excel访问命令

• 更稳定、快速返回状态

数据库访问命令

6

Page 11: Flexsim handbook

Flexsim 3.0 新增功能

• 更灵活、稳定返回状态

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(变量))

7

Page 12: Flexsim handbook

Flexsim 3.0 用户手册

• 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(终到实体))

8

Page 13: Flexsim handbook

Flexsim 3.0 新增功能

• 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(事件数据))

代码编辑器 • 刷新更快

• 更个性化的选择:文档|编辑器属性......

9

Page 14: Flexsim handbook

Flexsim 3.0 用户手册

• 文本撤消(ctrl z)

• 现在 shift-左箭头选块可以正常的高亮显示

用户定义的实体库• 用视窗|用户库图标栅格来新建库

• 右键点击模型中的一个实体并“添加至用户库”

10

Page 15: Flexsim handbook

Flexsim 3.0 新增功能

任务执行器

提供可拖放的任务执行器来进行实体开发。

• 所有任务执行器均具有碰撞探测(新 GUI(图形用户界面))

• 通过网络结点路径过程中加速、减速

11

Page 16: Flexsim handbook

Flexsim 3.0 用户手册

• “条件中断响应”可以生成一个新的任务次序并以此作为参照

• 新建或者修改任务序列中的任务

• 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 – 用来标识或者识别任务序列

• 协同任务序列现已全部完成测试可以操作了

固定资源• 提供可拖放的 BFR 来进行实体开发

连续判断“送往端口”,从而可以根据下游活动来改变输出端口的分配

12

Page 17: Flexsim handbook

Flexsim 3.0 新增功能

• “连续判断拉入条件”判断将强制对上游所释放的每个临时实体进行“拉动条件”判断(而不仅仅

是涉及的要进入上游的临时实体)。

“按下列请求运输工具”中的 4 个新的下拉选项可用来手动创建用户自己的任务序列,且可以把任务

执行器当作临时实体使用

• 增添新的“选择操作员”下拉菜单选项从多个团队中选择操作员

13

Page 18: Flexsim handbook

Flexsim 3.0 用户手册

网络结点

增添新的侧偏移量来防止移动物的视觉重叠

14

Page 19: Flexsim handbook

Flexsim 3.0 新增功能

• 新的路径(侧边)的 GUI

连接侧边(路径)的速度限制

在节点之间,输入的虚拟距离优先于实际距离

新的触发器

• 到达触发器(OnArrival)

• 继续触发器(OnContinue)

15

Page 20: Flexsim handbook

Flexsim 3.0 用户手册

• 如果到达触发器返回一个大于 0 的数字,那么该移动物变更路线,变更到返回的编号的侧边路

径上。

• 现在的节点连接允许跨不同层次。

• 如果两个结点被连接到同一实体,且这两个结点都是用 D键点击拖动方式与实体连接的,那么

任务执行器将进入提供最小行进距离的节点,然后离开。

• 新的显示模式(X键点击)

• 点、路径、连接

• 仅适用于所选组

• 现在,用户可以定义曲线张力(编辑|曲线张力)

16

Page 21: Flexsim handbook

Flexsim 3.0 新增功能

17

Page 22: Flexsim handbook

Flexsim 3.0 用户手册

新的交通控制实体• 在 AGV 建模项目中使用 Swisslog 开发的实体

• 控制任务执行器在一组指定的网络结点中的流程

• 两种交通控制模式

互斥模式

非时间模式

18

Page 23: Flexsim handbook

Flexsim 3.0 新增功能

流结点• 新的侧偏移量防止移动物发生视觉重叠

MTBF/MTTR

• 可由用户定义的停机和恢复函数

• 停止实体

• 停止输入和输出

时间表• 可由用户定义的停机和恢复函数

• 停止实体

• 停止输入和输出

演示制作器

19

Page 24: Flexsim handbook

Flexsim 3.0 用户手册

实验控制器

20

Page 25: Flexsim handbook

Flexsim 3.0 新增功能

OptQuest 优化器

3D 形状

• 库中实体的新增默认形状

• 更低的多边形计算消耗

• 对纹理的更好应用

• 不断丰富的 3D 实体库

• 根据距观察者的距离自动地将不同详细程度的文件分配给实体

21

Page 26: Flexsim handbook

Flexsim 3.0 用户手册

• 基于实体的“帧”属性数值将帧文件分配至实体

• setframe(object (实体), number(数量))

• getframe(object (实体))

• 作用:

实体动画

根据实体状态分配形状

在处理过程中改变临时实体形状

表• 新增表属性

• cellwidth (允许用点击拖动方式按栏调整尺寸)

• cellheight (允许用点击拖动方式调整所有尺寸)

• drawlines (1=所有, 2=水平, 3=垂直)

• drawleftcol (是/否)

• fulleditor (在单元格文本编辑中新增的模式 3)

• 新增高亮显示单元格

• 看起来更清晰

22

Page 27: Flexsim handbook

Flexsim 3.0 新增功能

23

Page 28: Flexsim handbook

Flexsim 3.0 用户手册

停留时间图表• 新增的,应用于停留时间图表的置信区间功能

24

Page 29: Flexsim handbook

Flexsim 3.0 新增功能

标签分页• 新增的标签的右键点击弹出的编辑菜单

• 当把标签像表头节点那样使用时,可像编辑表一样编辑标签

许多新增下拉菜单选项 • 生成并初始化一个标签与设置一个标签

• 发送信息与发送延迟信息

• 用户绘图代码

o 在实体名称附近绘制文本

25

Page 30: Flexsim handbook

Flexsim 3.0 用户手册

货架• 现在可使用货架来实现地面堆存仿真

• 现在可以定义横向行进偏移

26

Page 31: Flexsim handbook

Flexsim 3.0 新增功能

27

Page 32: Flexsim handbook

Flexsim3.0 用户手册

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 个基本问题

1. 服务问题 - 要求以最高满意度和最低可能成本来处理用户及其需求。

2. 制造问题 - 要求以最低可能成本在适当的时间制造适当产品。

3. 物流问题 - 要求以最低可能成本在适当的时间,适当的地点,获得适当的产品。

示例如何使用 Flexsim

为了给读者一个有关可能应用的项目的概念,下面列出运用 Flexsim 成功解决的一些问题:• 提高设备的利用率

• 减小等待时间和排队长度

28

Page 33: Flexsim handbook

• 有效分配资源

• 消除缺货问题

• 把故障的负面影响减至最低

• 把废弃物的负面影响减至最低

• 研究可替换的投资概念

• 决定零件经过的时间

• 研究降低成本计划

• 建立最优批量和工件排序

• 解决物料发送问题

• 研究设备预置时间和改换工具的影响

29

Page 34: Flexsim handbook

Flexsim3.0 用户手册

• 优化货物和服务的优先次序与分派逻辑

• 在系统全部行为和相关作业中训练操作人员

• 展示新的工具设计和性能

• 管理日常运作决策

Flexsim 已经被成功地应用在系统设计研究和系统日常运作管理中。Flexsim 也被应用于培训和教学领

域。一个 Flexsim 的培训模型就可以透视出真实系统中的复杂相关性和动态特性。Flexsim 可以帮助操作

人员和管理人员了解系统是如何运作的,同时也可以了解如果实施替代方案系统将会怎样。Flexsim还

被用来建立交互式模型,这些模型可以在运行中被控制,这样可以帮助讲解和展示在系统管理中固有

的因果关系的影响。

可视化

Flexsim 是一项高度可视的技术,它可为具有前瞻性的市场经营者用来提升其企业形象,对外界宣称他

们以公司的杰出运作而自豪。

一个动画演示的仿真模型可以给人留下如此深刻的印象,以至于吸引管理者的注意力,并影响他们的

思考方式,这的确令人吃惊。在仿真中显示的动画提供了视觉辅助效果,来演示最终的系统将如何运行

起步教程

本部分将使用户熟悉在用户企业中使用仿真的优势。还将看到关于 Flexsim环境的初步介绍。本教程将

建立一个简单的仿真模型,然后对此模型进行试验来看看不同场景将给模型的运行带来怎样的影响。

Flexsim术语

在开始前,首先了解一些 Flexsim 软件的基本术语和这些术语在常规仿真概念中如何运用,这将很有

帮助。

Flexsim 实体

Flexsim 的实体在仿真中模拟不同类型的资源。暂存区实体就是一个例子,它在仿真中扮演存储或缓冲

区的角色。暂存区可以代表一队人,CPU 中一队空闲处理程序,一个工厂中的地面堆存区,或客户服

务中心的等待传叫的队列。另一个 Flexsim 实体的例子是处理器实体,它模拟一段延迟或处理时间。它

可以代表工厂中的一台机器,一个为客户服务的银行出纳员,或者一个分检包裹的邮政员工,等等。

Flexsim 实体可在对象库栅格面板中找到。这些实体栅格被分为几组,默认状态下显示最常用的实体。

临时实体

临时实体是那些在模型系统中移动通过的实体。临时实体可以代表零件、托盘、组装部件、纸张、集装箱、

人、电话呼叫、订单,或任何移动通过你正在仿真的过程的对象。临时实体可以被加工,也可以被物料运

输资源携带通过系统。在 Flexsim 中,临时实体产生于一个发生器实体。一旦临时实体从模型系统中通

过,他们就被送至吸收器实体。

30

Page 35: Flexsim handbook

Flexsim 与仿真起步知识

临时实体类型

临时实体类型是置于实体上的一个标签,可以代表一个条形码、产品类型或工件号。Flexsim 可通过参考

临时实体类型来进行临时实体行程安排。

端口

每个 Flexsim 的实体都可有多个端口,端口数没有数量限制。实体通过端口与其它实体进行通信。端口

有 3 种类型:输入、输出和中间端口。

输入和输出端口在设定临时实体在模型中的流动路线时使用。例如,一个邮件分拣器,根据包裹的目的

地不同,把包裹放置在几个输送机中的一个上。要在 Flexsim 中模拟这个过程,你需要将一个处理器实

体的多个输出端口连接到几个输送机实体的输入端口,这表示一旦处理器(或邮件分拣器)完成对临

时实体(或包裹)的处理,将把它发送到输送机。

中间端口用来建立一个实体与另一个实体的相关性。中间端口通常的应用是建立固定实体与可移动实体

之间的相关关系,这些固定实体如机器、暂存区、输送机,可移动实体如操作员、叉车、起重机等。本课教

程中不使用中间端口。

端口的创建和连接操作方法是,按住键盘上不同字母,点击一个实体并拖动至第二个实体。如果在点击

和拖动过程中按住字母“A”键,将在第一个实体上生成一个输出端口,同时在在第二个实体上生成一个

输入端口,这两个新的端口将自动连接。如果按住 “S”键将在这两个实体上各生成一个中间端口并连接

这两个新的端口。当按住的是 “Q” 键或“W”键时,输入输出端口之间或中间端口之间的连接被断开,端

口被删除。下表给出了用来建立和断开两类端口连接的键盘字母。

输出 – 输入 中间

断开 Q W

连接 A S

模型视图

Flexsim采用 3D 建模环境。默认的建模视图是正投影视图窗。你还可以在一个更真实的透视视图中观察

模型。通常在正投影视图中建立模型的布局更容易,而透视视图更多地用来做展示之用。然而,你尽可

以使用任一个视窗来建立和运行模型。在 Flexsim 中,你可尽你所需打开多个视窗。但请记住,随着打

开视窗数目增多,对电脑资源的要求就会增加。

模型描述

描述在这个模型中,我们来看看某工厂制造三种类型产品的过程。在仿真模型中,我们将为每种产品关

联一个临时实体类型的数值。这三种类型都间隔地从工厂其它部门到达。模型中还有三台机器。每台

机器加工一种特定的产品类型。产品在它们各自的机器中完成加工后,所有三种类型的产品必须在

一个共享的检验站中检验其正确性。如果它们的制造完好,就被送到工厂的另一部门,离开仿真模

31

Page 36: Flexsim handbook

Flexsim3.0 用户手册

型。如果发现制造有缺陷,则必须送回到仿真模型的起始点,被各自的机器重新处理一遍。仿真的

目的是找到瓶颈的所在。该检验设备是否导致其它三台加工机器前实体的堆积,或者是否会因为三

台加工机器不能跟上它的节奏而使之空闲等待?两机器间的缓冲空间是否必要?

将该模型应用到不同行业中虽然我们以制造行业为例,但同类的仿真模型也可应用于其它行业。以一个复印中心为例。一个复

印中心主要有三种服务:黑白复印、彩色复印和装订。在工作时间内有 3 个雇员工作,一个负责黑

白复印工作,另一个处理彩色复印,第三个负责装订。另有一个出纳员对完成的工作进行收款。每

个进入复印中心的顾客把一项工作交给专门负责该工作的雇员。当各自工作完成后,出纳员拿到完

成的产品或服务,把它交给顾客并收取相应的费用。但有时候顾客对完成的工作并不满意。在这种

情况下,此项工作必须被返回相应的员工进行返工。此场景代表了与上面描述的制造业中所用的相

同的仿真模型。但是,在此例中,你可能更多关注在复印中心等待的人数,因为缓慢的服务对复印

中心的业务来说成本高昂。

这里还有一个应用于运输业的相同的仿真模型例子。每辆穿越桥梁从加拿大到美国去的商业运输卡

车,在允许入境前必须通过海关设施。每个卡车司机必须首先拿到适当的所需文件,然后通过对卡

车的最后检查。卡车通常有三个重量级别。不同级别需要填写不同的文件,且必须向海关的不同部

门提出申请。文件填写完成后,所有载重量的卡车都必须通过同一检查过程。如果未通过检查,则

必须进行更多的文件填写工作。同样,这种情况包含与制造业的例子完全相同的仿真元素,只是将

其运用在运输业中。这里,用户或许会对卡车在桥梁上会积聚多少辆感兴趣。如果车辆堆积数英里

直到在相临的加拿大城市中造成交通堵塞,那么你就需要对设施的运作做些改变。

建立模型

为验证 Flexsim 软件已被正确安装,双击桌面上的 Flexsim 图标打开应用程序。一旦软件安装好你应该

看到 Flexsim 菜单和工具条、实体库,和正投影模型视窗。

32

Page 37: Flexsim handbook

Flexsim 与仿真起步知识

第 1 步:在模型中生成一个实体

从左边的实体库中拖动一个发生器到模型(建模)视窗中。具体操作是,点击并按住实体库中的实体,

然后将它拖动到模型中想要放置的位置,放开鼠标键。这将在模型中建立一个发生器实体,如下图所示

一旦创建了实体,将会给它赋一个默认的名称,例如 Source#,数字#为自从 Flexsim 应用软件打开后

所生成的实体数。在以后定义的编辑过程中,可以对模型中的实体进行重新命名。

第 2 步:在模型中生成更多的实体

从实体库中拖动一个暂存区实体放在发生器实体的右侧。再从库中拖动 3 个处理器实体放在暂存区实体

的右侧,如下图所示。

33

Page 38: Flexsim handbook

Flexsim3.0 用户手册

移动实体 - 要在模型中移动实体,则用鼠标左键点住该实体,并拖动至你需要的位置。你还可以右键点

击并拖动鼠标来旋转此实体。你也可以使用鼠标滚轮,或同时按住鼠标左右键点住该实体并拖动鼠标,

可沿 z轴方向上下移动该实体。

移动视窗 - 要移动模型的视景观察点,可用鼠标左键点击视窗的一个空白区,并拖动鼠标。要旋转模型

视点时,用右键点击空白区并拖动鼠标。要放大或缩小视图时,使用鼠标滚轮或同时按住鼠标左右键并

拖动鼠标。

34

Page 39: Flexsim handbook

Flexsim 与仿真起步知识

第 3 步:完成在模型中生成实体

再拖出一个暂存区、一个处理器和一个吸收器实体放到模型中。

第 4 步:连接端口

下一步是连接端口来安排临时实体的逻辑路径。要连接一个实体的输出端口至另一个实体的输入端口,

按住键盘上的“A”键,然后点击第一个实体并按住鼠标左键,拖动鼠标到下一个实体然后放开鼠标键。

将会看到拖动出一条黄色连线,放开鼠标键时,会出现一条黑色的连线。

35

Page 40: Flexsim handbook

Flexsim3.0 用户手册

首先,连接发生器到第一个暂存区。然后连接此暂存区和每个处理器。再连接每个处理器到第二个暂存

区。然后连接第二个暂存区到检验处理器。然后连接检验处理器到吸收器,并连接到模型前端的第一个

暂存区。先连接检验处理器到吸收器,然后到第一个暂存区。现在此模型的连接应如下图所示。

下一步是改变各实体的参数,以使它们按模型的描述来工作。这里从发生器开始一直到吸收器逐个修改

参数。

36

Page 41: Flexsim handbook

Flexsim 与仿真起步知识

详细设计模型

每个实体有它自己的参数视窗。数据和逻辑会由此视窗添加到模型中。双击一个实体进入该实体参数视

窗。

在这个模型中,我们需要让 3 种不同的产品类型进入系统。要完成这一要求,每个临时实体的类型(见

Flexsim术语中“临时实体类型”的描述)将按照均匀分布被随机分配一个 1到 3之间的整数值。这由发生

器的出口触发器来完成。

第 5 步:给发生器指定临时实体的到达速率

双击该发生器打开它的参数视窗。

所有 Flexsim 实体都有多个分页(标签页)来代表变量和信息,建模人员可根据模型要求来改变它们。

在这个模型中,我们需要改变到达间隔时间和临时实体类型以产生 3 种类型的产品。在此模型中,产品

每 5秒到达,按指数分布。发生器默认使用一个指数分布的到达时间间隔,但需要改变其均值。诸如指

数分布这样的各种随机分布将被仿真过程采用,可用来对现实系统中发生的变化进行建模。Flexsim提

供了一个叫做 ExpertFit 的工具来帮助你确定何种随机分布与你的实际数据最匹配。在后面的文档中有

对分布和如何使用它们的详细解释。在发生器分页中,在到达时间间隔下拉菜单中,点击 按钮。

将打开第二个视窗,来解释其选项,并可编辑该选项的参数。所有以棕色显示的内容都可以改变。

37

Page 42: Flexsim handbook

Flexsim3.0 用户手册

使用此模板你可以改变数值以调整分布,甚至也可以插入一个表达式。对于这个模型,将形数参数值从

10改为 5。对于一个指数分布,形状参数值就是均值。按确定按钮返回参数页。

第 6 步:指定临时实体的类型和颜色

接下来要做的是,在临时实体进入系统时为其指定一个类型值。此类型值在 1到 3之间均匀分布,意思

是,进入系统的产品是类型 1、类型 2、或类型 3 的可能性都一样。完成该指定的最好的方式是在发生器

的离开触发器中改变其临时实体类型。

选择发生器触发器分页。选择离开触发器下拉菜单选择。在下拉菜单中选择“Set Itemtype and Color(设

定临时实体类型和颜色)”选项。

38

Page 43: Flexsim handbook

Flexsim 与仿真起步知识

选择并改变了临时实体的类型和颜色后,选择摸板按钮 ,可看到如下信息(见下图)。

离散均匀分布与均匀分布相似,只是其返回值不是所给参数之间的实数,而是一个整数。

我们现在完成了发生器的参数编辑,所有默认的棕色内容已经完全如我们所需要的了。点击确定按钮即

可接受参数设置并关闭该视窗。

第 7 步:设置暂存器容量

下一步是详细设置第一个暂存区。这里有两项内容需要设定。首先要设定的是暂存区的容量。第二,希望

暂存区的分配方式是将临时实体中所有类型 1 送至处理器 1,类型 2 送至处理器 2,以此类推。

双击第一个暂存区,就会出现其参数视窗。

39

Page 44: Flexsim handbook

Flexsim3.0 用户手册

将最大容量改为 10000,这实际上将得到一个无限容量的暂存区。按 按钮。

第 8 步:指定暂存区的路径分配

选择“临时实体流”分页来设置该暂存区的实体流选项。

在“输出”面板中,在“送往端口”下拉菜单中,选择“By Itemtype (direct)(按临时实体类型(直接))”选

项。

由于已经指定了一个临时实体的类型参数等于 1、2或 3,我们现在可以用临时实体的类型来选定临时

实体要通过的端口号。处理器 1 应被连接至端口 1,处理器 2 应被连接至端口 2,处理器 3 应被连接至

端口 3。

选择了“By Itemtype (direct)”选项后,按确定按钮关闭该暂存区的参数视窗。

第 9 步:指定处理器的操作时间

40

Page 45: Flexsim handbook

Flexsim 与仿真起步知识

下一步是设置 3 个处理器的处理时间。

双击第一个处理器,就会出现其参数视窗。

在“处理时间”下拉菜单中,选择“Exponential Distribution(指数分布)”选项,然后按 按钮。默认的

形状参数值是 10秒。不改变该默认设定。这样,在我们的模型中,每个产品将被平均处理 10秒钟,处

理时间服从指数分布。

点击确定按钮来关闭模板视窗。到此为止,这是我们要对处理器所做的唯一改变。我们将在后面的课程

中采用一些其它选项。点击确定按钮关闭处理器的参数视窗。

41

Page 46: Flexsim handbook

Flexsim3.0 用户手册

对其它两个处理器重复这一步骤。

第 10 步:详细设置第二个暂存区

现在双击第二个暂存区打开其参数视窗。如同在第一个暂存区中所做的一样,我们需要模拟一个无限容

量的暂存区。在“最大容量”域段输入 10000。然后按确定按钮关闭视窗。

第 11 步:设置检验站处理时间

现在需要指定检验站的处理时间和路径逻辑。双击该检验站打开其参数视窗。在“处理时间”分页中“处理

时间”菜单下,按 按钮。这将又一次打开解释处理时间的当前选项的模板视窗。改常数时间 10为 3。

这样,在模型中,它将持续 3秒(恒值不变)时间来检验产品是否有加工缺陷。

第 12 步:设置检验站的路径分配

现在需要设置该检验站将劣质产品送回到模型的开始端,将合格产品送到吸收器。在建立该实体的连接

时,应首先连接它至吸收器,然后将它连接回第一个暂存区。这个顺序可以使第一个输出端口连接到吸

收器,第二个输出端口连接到暂存区。现在,我们想按照某确定的百分比来安排临时实体的路径。

点击该检验站的“临时实体流”分页。在“输出”面板中 “送往端口”下拉菜单下,选择“By Percentage

(inputs)(按百分比(输入))”选项。

然后按模板 按钮。这将再次打开选择流经路径策略的视窗。为端口 1 输入 80%,端口 2为 20%,意

思是,将 80%的产品,或者说制造合格的产品,从输出端口 1 输出到吸收器;而将 20%的产品,或者

42

Page 47: Flexsim handbook

Flexsim 与仿真起步知识

说,有制造缺陷的产品,从端口 2 送回第一个暂存区。

按确定按钮关闭模板视窗。

还有一件可能想要做的事,就是对已通过检验站并已被送回第一个暂存区的实体进行可视化。点击检验

站的参数视窗中的“处理器触发器”分页。在离开触发器下拉框中选择 “Set Color(设定颜色)”选项。

按 按钮并输入 colorblack 作为临时实体要改变成为的颜色。

43

Page 48: Flexsim handbook

Flexsim3.0 用户手册

按确定按钮关闭此模板视窗。然后按检验站参数视窗中的确定按钮关闭之。

模型编译与运行

第 13 步:编译

到此,已准备好编译,然后可以运行此模型了。

选择主视窗底部的 按钮。

一旦编译过程完成,就准备重新设置并运行此模型。

第 14 步:重新设置该模型

点击主视窗左下角 按钮。对模型进行重置可以确保所有系统变量被设置回初始值,并将模

型中所有临时实体清除。

第 15 步:运行此模型

选择主视窗底部 按钮。

现在模型应该开始运行了。临时实体应该从第一个暂存区开始移动,进入 3 个处理器中的一个,然后到

第二个暂存区,再进入检验站,并从这里进入吸收器,也有一些被重新发送回第一个暂存区。被发回的

实体将变成黑色。

44

Page 49: Flexsim handbook

Flexsim 与仿真起步知识

要停止模型运行,可随时按 按钮。后面你将学到如何按特定时间长度和特定重复次数来运

行模型。当模型定义中用到随机分布时,多次运行模型是很重要的。

要加快或减慢模型运行速度,可左右移动视窗底部的运行速度滑动条。

移动此滑动条能改变仿真时间与真实时间的比率,它完全不会影响模型运行的结果。

现在已经完成了建模过程。来看一看这个模型产生的一些统计数字。

模型实验

发现瓶颈

在描述系统时通常希望知道系统的瓶颈在那里。这里有几种途径。首先,你可以简单地观察暂存区的长

度。如果模型中的一个暂存区一直有很多的产品堆积,这是一个有用的迹象,表明流程在该位置造成了

系统的瓶颈。运行该模型时,将注意到第二个暂存区会经常有些产品等待加工,而第一个暂存区的容量

通常是 20或更少,正如下图所看到的。

45

Page 50: Flexsim handbook

Flexsim3.0 用户手册

另一种发现瓶颈的方法是查看每个过程的统计报表。如果上游的三个处理器总是繁忙,而检验位常

常空闲时,瓶颈很可能在三个处理器上。反之,如果检验站总是很忙,上游的处理器总是空闲,则

瓶颈可能是在检验站上。

运行此模型至少 50000秒。然后停止模型,右键点击并选择属性来打开 3 个处理器中第 1 个的属性

视窗。

46

Page 51: Flexsim handbook

Flexsim 与仿真起步知识

选择统计分页。然后选状态分页。这将显示出实体的时间处于每个状态的百分率的饼图。

47

Page 52: Flexsim handbook

Flexsim3.0 用户手册

饼图表明这一工序的空闲时间占仿真时间的 17. 3% ,而处理时间占 82.7%。关闭这一视窗,然后

右键点击另两个处理器中的一个,再次进入它们的属性视窗,它们将有类似的结果。

在检验站点击右键,打开它的属性视窗。检验站的状态饼图如下。

48

Page 53: Flexsim handbook

Flexsim 与仿真起步知识

可以注意到,在仿真运行过程中,98.8%的时间检测器是在工作。由这些不同状态的图可以得知,

很明显瓶颈为检验站,而不是这 3 个处理站。

现在已经图示出瓶颈的位置了,问题是下一步应该怎么办呢?这取决于一些有关成本与获利的对

比因素,还有设施的未来目标。在将来,是否这些设备需要具备以更快的速度处理更多产品的能力

在模型中,平均每 5秒制造一个产品。检测器平均每 5秒送一个成品到吸收器。这个平均 5秒的值,

是可以通过 4秒的检验周期和 80/20 的发送策略来计算得到的。这样,在全部时间中,模型的总能

力下降。如果工厂要开始在这部分设备中处理更多的产品,也就是说发生器有更高的到达速率(更

低到达时间间隔)。那么如果不改变检测器,模型将持续积聚更多的部件,暂存区的容量将持续增

加,直到没有剩余空间。所以要修改这里,必须增加第二个检验站,因为它是模型的瓶颈。

如果检验站的暂存区大小很重要,这成为另一个再增加一个检验站的原因。如果检验站暂存区积聚

很高的数量意味着成本很大,那么增加第 2 个检验站将是明智的,这将确保暂存区大小,以及每个

产品在该暂存区中的等待时间不会太高。来看一下该暂存区的统计数据。

右键点击该检验站暂存区,并选择属性。点击统计分页,并查看常规页。如下所示。

49

Page 54: Flexsim handbook

Flexsim3.0 用户手册

继续运行此模型,将会注意到这些数值随着仿真运行而改变。查看平均当前数量和平均逗留时间数

值。逗留时间指临时实体在暂存区中停留的时间。在此仿真的前期,暂存区的平均数量通常较低,

但随着仿真继续,它将达到较高的数值如 200或 300。如果 200或 300 的平均暂存区大小是无法承

受的,那么就有必要增加第 2 个检验站。

随机性在决定增加另一个检验站之前,先来做一些测试。既然一个来自发生器的产品平均每 5秒到达,而

且平均每 5秒一个产品到达吸收器,那么为什么暂存区会有的产品积聚呢?产品以其到达的速度离

开,这样在系统中似乎不应该有任何积聚。

50

Page 55: Flexsim handbook

Flexsim 与仿真起步知识

暂存区堆积的原因是系统的随机性。是的,平均每 5秒到达一个产品,但这个到达率是基于指数分

布的。指数分布中 5为平均值,在多数时间里产品实际将以比每 5秒更快的速度到达。但每隔一会都

会有一段较长的时间没有产品到达。最后平均计算的到达率为 5秒,但通常产品到达得更快,这样

将会堆积在检验站的暂存区中,因为检验站为瓶颈。

假如,在设备中,产品实际不是以指数分布,而是以更加平稳的速度到达?暂存区大小是否将会

停留在一个较低的级别?让我们来测试一下。

双击发生器打开它的参数视窗。在到达时间间隔时间下拉菜单中,选择正态分布。

点击模板 键打开一个视窗来编辑此功能。输入一个平均为 5、标准偏差为 0.5 的正态分布

在模板视窗中按确定,并在参数视窗中按确定。现在按 键来再次编译此模型。重置并再

次运行该模型。

如果仍未打开暂存区的属性视窗,右键点击暂存区来再次打开它并选择属性。继续运行此模型。你

将注意到暂存区的平均容量和平均逗留时间不会很高。现在通常它们不会高过 50或 60,而以前它

们有时候会高至 200或 300。这是一个显著的改进,而且它只是由改变模型的随机性而引起的。

51

Page 56: Flexsim handbook

Flexsim3.0 用户手册

更高的吞吐量现在如果设施的确需要增加 15%的系统产出率。这相当于改变一个发生器的平均到达时间间隔从 5

秒到 4.25秒。由于检测器被 100%利用,我们明显需要在系统中增加第 2 个检测器让我们来进行改

变。

再次双击发生器来打开它的参数视窗。点击模板 键选择到达时间间隔。改变正态分布的平均值

从 5到 4.25。在模板视窗中点击确定。在发生器参数视窗中点击确定。

现在我们将生成第 2 个检测器。拖拽另一个处理器实体进入模型,放在第一个检测器下面。双击它并

设置它的处理时间为持续 4秒,就象原先的检测器一样。然后用”A”拖拽连接检测器暂存区的输出端

口至新的检测器,然后连接新检测器输出端口至吸收器,和上游暂存区。

在新检测器的临时实体流页中,在发送至端口选项中选择百分率(输入),然后用 键打开模

板视窗。输入 80%至端口 1,20%至端口 2。

现在我们已经完成所做的改变,我们可以编辑,重置,并再次运行模型。

评估新的配置现在运行此模型至少 50,000秒。首先注意到检验站暂存区现在几乎总是空着,而 3 个处理器的暂

存区却经常堆积。现在让我们看看原检测器的饼形图。右键点击原检测器并选择属性。进入统计分页,

然后进入状态分页。这应该显示出原先的检测器现在仅仅在 67%的时间中为繁忙,因为现在这里有

第 2 个检测器。

52

Page 57: Flexsim handbook

Flexsim 与仿真起步知识

点击确定来关闭属性视窗。现在点击新检测器并进入它的状态饼形图。它仅在 50%的时间内繁忙,

比原检测器少。

53

Page 58: Flexsim handbook

Flexsim3.0 用户手册

区别的原因是检验站暂存区发送至第一个空闲的检测器。无论何时两个检测器均为空闲,产品将总

是进入原先的检测器,因为它是首先空闲的。产品只在原先检测器已经繁忙时才进入第 2 个检测器。

这样,原先的检测器的利用率比第 2 个更高。

在第 2 个检测器的属性视窗中点击确定。现在进入 3 个上游处理器中的一个 ,右键点击它并选择属

性。进入它的状态饼图。注意到该处理器的利用率现在已经几乎达到 100%。

54

Page 59: Flexsim handbook

Flexsim 与仿真起步知识

现在已经有效地把系统的瓶颈从检测器移动到 3 个处理器。并且,通过利用增加 15%的产量,和加

入第 2 个检测器,已经显著地降低了每个检测器的利用率。此决策是否是一个合理的决策,很大程

度取决于增加第 2 个检测器的花费。现在,由于瓶颈在 3 个处理器中,为了将来增加产量,并由此

增加每个检测器的利用率,可能需要增加更多的处理器。当然,这再一次取决于花费和获益的分析

结果通过生成一个模型来仿真系统,已经明确如何对系统做何有效的决定。现在可以使用从仿真中收集

的这些信息来对工厂的将来作出更好的决定。

对于这个简单模型,从数学模型和公式中也可以作出许多相同的结论。然而,真实的模型经常会比

我们建立的模型复杂得多,并超出数学模型的范围。使用 Flexsim 仿真,我们可以和上面的例子一

样模拟这些实际生活中的复杂性问题,并测试结果。

Flexsim还给予仿真更多的视觉魅力。它有效帮助管理团队作出明智的决策,因为管理团队可以在

实际的 3D世界里看到决定的影响。这个 3D世界将随着建立 Flexsim 模型而自动产生。

下一步是什么?

55

Page 60: Flexsim handbook

Flexsim3.0 用户手册

现在已经熟悉了 Flexsim 和仿真的应用,建议用户完成 Flexsim 帮助中包含的其他教程。

56

Page 61: Flexsim handbook

教程

本基础教程将带你一起完成建立过程流、创建模型、输入数据、查看动画、以及分析输出结果的各个步骤。

每一节课都是基于上一节内容的,所以学完一节课要消化它,才能进入下一节课。每节课大约需要至少

45 分钟的时间。在第二课的最后还包括一个提高环节,可以为你的模型增色。本教程包括下列课程;

第一课:建立一个处理 3 种不同临时实体类型的简单模型。每种临时实体的路径都不同。本模型中使用

的实体包括发生器、暂存区、处理器、输送机和吸收器。对模型表现的基本统计做了介绍,也介绍了每一

实体的参数选项。

第二课:使用第一课中建立的模型。用户添加操作员和运输机。介绍实体的属性界面,进一步讨论附加

统计分析。

第二课提高内容:完成第二课之后,介绍如何使用记录器实体向模型添加 3D 图表和图形。同时也介

绍了如何使用可视化工具添加 3D 文本。

第三课:使用第二课中的模型,用户将要添加货架和网络路径。将会添加高级统计功能和模型逻辑编

程功能。同时也将使用表来读取和写入数据。

每一课将会按照下列格式:

1. 介绍

2. 本课学习内容

3. 估计完成时间

4. 模型描述

5. 模型数据

6. Flexsim 软件概念学习

7. 逐步模型构建

如果学习此课程有任何问题,请联系我们的技术团队。Flexsim技术支持的电话是 801-224-6914

(美国),或者发邮件到 [email protected]. 希望你在学习如何使用 flexsim 来优化你们的流程的

过程中感到愉快。

重要提示:你必须在电脑上安装 Visual C++.NET 编译程序,否则此 Flexsim 软件将不会正确工作 。

flexsim评估版本附带的编译器并不具备与 Microsoft Visual C++零售版本同样的能力。如果你没有

Visual C++ .NET,在购买 Flexsim 软件时,你可以选择捆绑购买 Visual C++和 Flexsim 软件。

57

Page 62: Flexsim handbook

Flexsim3.0 用户手册

第 1 课

简介

第 1 课介绍了图示与建立简单模型的基本概念。在 Flexsim 中开始建立每个模型的好方法是先画一个图

示。如果不能建立一个图示、流程图,甚至不能至少在脑子中勾画出处理过程是如何工作的画面,那么

使用 Flexsim 建立模型将会遇到重重困难。

注释:如果你已经学习完了起步部分的指导内容,那么本课中学到的很多概念对你来说就不是新

的。然而,因为后面的课程将建立在本课的基础上,所以最好还是复习一遍。

本课学习内容

• 如何建立一个简单布局

• 如何连接端口来安排临时实体的路径

• 如何在 Flexsim 实体中输入数据和细节

• 如何编译模型

• 如何操纵动画演示

• 如何查看每个 Flexsim 实体的简单统计数据

新实体

在本课中将学习发生器、暂存区、处理器、输送机和吸收器实体。

预计完成时间

完成本课大约需要 30-45 分钟。

58

Page 63: Flexsim handbook

Flexsim3.0 教程

Flexsim 软件概念学习

Flexsim 术语在开始建立此模型前,先来理解一些本软件的基本术语将会有帮助。

Flexsim 实体:Flexsim 实体模拟仿真中不同类型的资源。暂存区实体就是一个例子,它扮演储存

和缓冲区的角色。暂存区可以代表一队人、CPU 上一个空闲过程的队列、工厂中地面上的一个储存区

或客户服务中心的一队等待的呼叫等等。另一个 Flexsim 实体例子是处理器实体,它模拟一段延迟

或一个处理过程的时间。这个实体可以代表工厂中的一台机器、一个正在给客户服务的银行出纳员、

一个邮政分检员,等等。

Flexsim 实体放在对象库栅格中。对栅格进行了分组管理,默认显示最常用的实体。

临时实体:临时实体是流经模型的实体。临时实体可以表示工件、托盘、装配件、文件、集装箱、电话

呼叫、订单或任何移动通过仿真过程的对象。临时实体可以被加工处理,也可以由物料处理设备传

输通过模型。在 Flexsim 中,临时实体由发生器产生,在流经模型之后被送到吸收器中。

临时实体类型:临时实体类型是一个放在临时实体上的标志,它可以代表条形码号、产品类型

或工件号等等。在临时实体寻径中,Flexsim 使用实体类型作为引用。

端口:每个 Flexsim 实体的端口数没有限制,通过端口它们可以与其它的实体通信。有三种端口类

型:输入端口、输出端口和中间端口。

输入和输出端口用于临时实体的寻径。例如,一个邮件分拣员依靠包裹上的目的地把包裹分放到几

个输送机中的一个上面。为了在 Flexsim 中进行仿真,连接处理器实体上的输出端口到几个输送机

实体的输入端口,这意味着当一个处理器(或邮件分拣员)完成临时实体(包裹)的处理后,就

通过它的一个输出端口将其发送到一个特定的输送机上。

中间端口用来建立从一个实体到另一个实体的引用。中间端口的一个惯常用法是引用可移动实体,

如从设备、暂存区或输送机等引用操作员、叉车、或者起重机。

端口的建立和连接是通过按住键盘上的不同字母键,并用鼠标点击一个实体,并拖曳到另一个实

体上完成的。当按住左键并拖曳鼠标时,如果同时按住“A”键,就可以在第一个实体上建立输出端口

并在另一个实体上建立输入端口。这样两个新端口就自动连接起来。如果按住“S”键,将在两个实体

59

Page 64: Flexsim handbook

Flexsim3.0 用户手册

上都建立一个中间端口,并把这两个新端口连接起来。拖曳鼠标并同时按下“Q”键可以删除输入输出

的端口和连接,按下“W”键可以删除中间端口和连接。下表说明了用于连接和断开两种端口连接的

键盘字母。教程的第 1 课示范了如何正确建立端口连接。

输入-输出 中间

断开 Q W

连接 A S

模型视图:: Flexsim 应用 3D 建模环境。建模时默认的模型视图叫做正投影视图。你也可以在一个

更真实的透视视图中查看模型。尽管透视视图表达的更真实,但是通常在正投影视图中更容易建立

模型布局。当然,任一视图都可以用来建立和运行模型。Flexsim允许根据需要打开多个视图视窗。

不过请记住,当打开多个视窗时会增加对计算机资源的需求。

60

Page 65: Flexsim handbook

Flexsim3.0 教程

模型 1 描述

在第一个模型中,我们将研究三种产品离开一个生产线进行检验的过程。有三种不同类型的临时实

体将按照正态分布间隔到达。临时实体的类型在类型 1、2、3三个类型之间均匀分布。当临时实体到

达时,它们将进入暂存区并等待检验。有三个检验台用来检验。一个用于检验类型 1,另一个检验

类型 2,第三个检验类型 3。检验后的临时实体放到输送机上。在输送机终端再被送到吸收器中,从

而退出模型。图 1-1 是流程的框图。

图 1-1 模型 1 流程框图

模型 1 数据

发生器到达速率:normal(20, 2)秒

暂存区最大容量:25 个临时实体

检验时间:exponential(0, 30)秒

输送机速度:1米/秒

61

Page 66: Flexsim handbook

Flexsim3.0 用户手册

临时实体路径:类型 1到检验台 1,类型 2 到检验台 2,类型 3到检验台 3。

建模步骤

建立第一个模型

为了检验 Flexsim 软件安装是否正确,在计算机桌面上双击 Flexsim3.0 图标打开应用程序。软件装载后

将看到 Flexsim 菜单和工具按钮、库、以及正投影视图的视窗。

步骤 1:从库里拖出一个发生器放到正投影视图中,如图 1-2 所示:

图 1-2

步骤 2:把其余的实体拖到正投影视图视窗中,如图 1-3 所示:

62

Page 67: Flexsim handbook

Flexsim3.0 教程

图 1-3 完成后,将看到这样的一个模型。模型中有 1 个发生器、1 个暂存区、3 个处理器、3 个输送机

和 1 个吸收器。

步骤 3:连接端口

下一步是根据临时实体的路径连接端口。连接过程是:按住“A” 键,然后用鼠标左键点击发生器并拖曳

到暂存区,再释放鼠标键。拖曳时你将看到一条黄线(图 1-4),释放时变为黑线。(图 1-5)。

63

Page 68: Flexsim handbook

Flexsim3.0 用户手册

图 1-4 拖曳时出现的黄线

图 1-5 释放后得到的黑线

连接每个处理器到暂存区,连接每个处理器到输送机,连接每个输送机到吸收器,这样就完成了连接

过程。完成连接后,所得到的模型布局应如图 1-6 所示。

图 1-6 完成端口连接

下一步是根据对实体行为特性的要求改变不同实体的参数。我们首先从发生器开始设置,最后到吸收器

结束。

64

Page 69: Flexsim handbook

Flexsim3.0 教程

详细定义模型

每个实体都有其特有的图形用户界面(GUI),通过此界面可将数据与逻辑加入模型中。双击实体可打

开叫做参数视窗的 GUI。

对于这一模型,我们想要有三种不同的产品类型进入系统。为此,将应用发生器的“离开触发器”为每个

临时实体指定一个 1到 3 之间的均匀分布的整数值,来作为实体类型。

步骤 4:指定到达速率

双击发生器键打开其参数视窗(见图 1-7)。

图 1-7 发生器参数视窗

所有的 Flexsim 实体都有一些分页或标签页,提供一些变量和信息,建模人员可根据模型的需求来进

行修改。在这个模型中我们需要改变到达时间间隔和实体类型来产生 3 种实体。根据模型描述,我们要

设定到达时间间隔为 normal(10,2)。现在,按下到达时间间隔下拉菜单中的箭头,选择“正态分布”选

项(图 1-8)

65

Page 70: Flexsim handbook

Flexsim3.0 用户手册

图 1-8

该选项将出现在视窗里。如果要改变分布的参数,则选择模板 按钮,之后可以改变模板中任何灰褐

色的值。

选择模板 按钮

将看到这一视窗(图 1-9):

图 1-9

可以使用模板改变数值来调整分布,甚至可以插入一个表达式。在本模型中改变 10为 20。按确定键返

回到参数视窗。

下面我们需要为临时实体指定一个实体类型,使进入系统临时实体的类型服从以 1到 3之间的均匀分

布。最好的做法是在发生器的“离开触发器”中改变实体类型 。

66

Page 71: Flexsim handbook

Flexsim3.0 教程

步骤 5:设定临时实体类型和颜色

选择发生器触发器分页(图 1-10)。在“离开触发器”框中,选择“Set Itemtype and Color(设定临时实

体类型和颜色) ”以改变临时实体类型和颜色。

图 1-10

在选定改变临时实体类型和颜色的选项后,按模板键 ,可以看到下列信息(图 1-11):

图 1-11

离散均匀分布与均匀分布相似,但返回的不是给定的参数之间的任意实数值,而是离散整数值。

点击本视窗和发生器参数视窗的确定键。

下一步是详细设定暂存区参数。由于暂存区是在临时实体被处理器处理前存放临时实体的场所,因此需

要做两件事。首先,需要设定暂存区最多可容纳 25 个临时实体的容量。其次,设定临时实体流选项,将

类型 1 的实体发送到处理器 1,类型 2 的实体发送到处理器 2,依此类推。

步骤 6:设定暂存区容量

双击暂存区打开暂存区参数视窗(图 1-12)

67

Page 72: Flexsim handbook

Flexsim3.0 用户手册

图 1-12

改变最大的容量为 25。选择 按钮。

步骤 7:为暂存区指定临时实体流选项

在参数视窗选择临时实体流分页来为暂存区指定流程

在“发送到端口”下拉菜单中选择“By Itemtype (direct)(按实体类型(直接))”(图 1-13)。

图 1-13

由于我们已经分配实体类型号为 1、2、3,我们就可以用实体类型号来指定临时实体通过的端口号。处理

器 1 应连接到端口 1,处理器 2 应连接到端口 2,依此类推。

选定了“By Itemtype (direct)”之后,点击确定按钮关闭暂存区的参数视窗。

下一步是设定处理器的时间参数。

68

Page 73: Flexsim handbook

Flexsim3.0 教程

步骤 8:为处理器指定操作时间

双击处理器 1,打开处理器 1 的参数视窗(图 1-14)。

图 1-14

在“ 处理时间”下拉菜单中,选“Exponential Distribution(指数分布)”。其默认的时间是 10秒,因此,

这里需要改变,改变的方法是选择模板按钮 (见图 1-15).

图 1-15

将形状参数(scale value)改为 30。这里指数分布的形状参数恰好是均值。按确定按钮关闭视窗。这仅

仅是这一次对处理器所做的改变,今后的课程中还要考察一些其它的操作。按确定按钮关闭处理器参数

视窗。

69

Page 74: Flexsim handbook

Flexsim3.0 用户手册

对其它的处理器重复上述过程。

因为输送机的默认速度已经设为每时间单位为 1,所以这次不需要修改输送机的速度。

现在可以编译和运行模型了。

步骤 9:编译

图 1-16 主视窗上的运行控制按钮

按主视窗的 按钮。完成编译过程后就可以运行模型了。

步骤 10:重置模型

为了在运行模型前设置系统和模型参数的初始状态,总是要先点击主视窗底部的 键。

步骤 11:运行模型

按 按钮使模型运行起来。

可以看到临时实体进入暂存区,并且移动到处理器。从处理器出来,实体将移动到输送机,然后进入吸

收器。你可以通过主视窗的速度滑动条改变模型运行的速度。

步骤 12:模型导航

当前,我们是从正投影视图视窗中观察模型的。让我们从透视视图中来观察它。选择正投影视图视窗视

窗右上角的 X 来关闭它。选择工具条上的 按钮打开透视视图(图 1-17)。

鼠标导航

鼠标左键:在 X-Y平面内移动模型。在一个实体上按住左键,然后移动鼠标可以在 X-Y平面内移动该

实体。

鼠标右键:X,Y,Z轴旋转。在实体上按右键,然后移动鼠标则可以旋转此实体。

鼠标左右键(或鼠标滚轮):通过向前和向后旋转鼠标轮可以轻松地调整镜头的远近。如果有一个实

体被当前选中,则将会改变它的 Z向高度。如果鼠标有滚轮,则可以转动鼠标滚轮代替鼠标左右键同时

点击。

F7键: F7键可启动飞行俯瞰模式。在飞行俯瞰模式下,鼠标指针在视窗中心线上方时图形向上移动,

鼠标在中心线下方时图形向下移动,鼠标在中心线左边时,图形向左旋转,鼠标在中心线右边时图形

向右旋转,欲退出飞行俯瞰模式时按 F7键。这种方式需要通过一些练习才能掌握。如果模型丢失,可以

按 F7键停止飞行俯瞰模式,并按右键选择下拉菜单中的 Reset View键重新找到要观察的模型。

70

Page 75: Flexsim handbook

Flexsim3.0 教程

图 1-17

步骤 13:查看简单统计数据

图 1-18

为了观察每个实体的简单统计数据,选择视窗上的设置菜单,取消对“隐藏名称”选项的选择。正投影视

图的默认状态是显示名称的,而透视视图在默认状态下是隐藏名称的。

71

Page 76: Flexsim handbook

Flexsim3.0 用户手册

步骤 14:保存模型

可使用“文件 >模型另存为...”来保存模型。

现在已经完成了第一课。在模型运行的时候,花些时间来回顾一下各个步骤并观察一下模型。恭喜你!

如要继续学习本教程,请进入第二课。

72

Page 77: Flexsim handbook

Flexsim3.0 教程

第 2 课

简介第 2 课介绍了向一个模型中加入操作员和输送机的概念,并更详细、深入地介绍了实体属性与参数。

另外第 2 课还介绍了图形化统计结果输出功能。请在已完成第 1 课的基础上开始第 2 课,因为第 2

课将以第 1 课中的模型作为起点。

你将学到

• 如何访问实体参数和属性;

• 如何向模型中加入一组操作员;

• 如何向模型中加入叉车运输机;

• 如何选择一个实体进行统计;

• 如何打开统计数据收集;

• 如何在模型运行中观察实体统计数据;

新实体

本课将介绍分配器、操作员和运输机实体。

预计完成时间

完成本课大约需要 30-45 分钟。

73

Page 78: Flexsim handbook

Flexsim3.0 用户手册

Flexsim 软件概念学习

实体属性和参数现在更系统地介绍实体属性和参数视窗。每个 Flexsim 实体都有一个属性视窗和一个参数视窗。作为

一个建模人员,你需要彻底理解实体属性和实体参数的不同。要访问属性,右键点击模型视窗中的

一个实体并选择属性(见图 2-2)。

图 2-2 右键点击模型视图中的一个实体时出现的菜单

实体属性每个 Flexsim 实体的属性都是相同的。在属性中有 4 个分页:视景、常规、标签和统计。每个分页包含

所选的 Flexsim 实体的附属信息。

常规属性:常规属性分页包含实体的常用信息,如名称、类型、位置、端口连接、显示标记和使用者

描述(见图 2-3)。

74

Page 79: Flexsim handbook

Flexsim3.0 教程

图 2-3 常规属性

视景属性:视景分页允许建模人员指定视觉特性,如 3D 形状、2D 形状、3D纹理、颜色、位置、尺寸、

转角和用户绘图代码。位置、尺寸和转角反映实体的当前属性(见图 2-4)。建模人员可在相关字段

中修改这些属性值,也可以在模型界面视窗中用鼠标来改变这些属性。

75

Page 80: Flexsim handbook

Flexsim3.0 用户手册

图 2-4 视景属性

标签属性:标签分页显示用户定义的给实体指定的标签。标签是建模人员用来存放临时数据的一种

机制。一个标签有两部分,名称和标签值。名称可以任意命名,标签值可以是数字或文字数字(包

含文字和数字的字符串)。如需添加一个纯数字标签,点击底部的 “添加数字标签”按钮。同样地,如

果需要一个标签保存数字和字母,则点击“添加字符串标签”按钮。然后可用该表修改此标签的名称

和标签值。

也可以在模型运行中动态地更新、创建或删除标签。此分页将显示所有标签和它们的当前值。所有信

息在模型运行中实时显示。这些信息对建模人员测试逻辑、调试模型很有帮助。

76

Page 81: Flexsim handbook

Flexsim3.0 教程

图 2-5 标签属性

统计属性:统计分页显示实体上收集到的默认统计信息。此信息在模型运行中动态地更新显示。当

选择此分页时,将出现 4 个附属分页(见图 2-6)。

77

Page 82: Flexsim handbook

Flexsim3.0 用户手册

图 2-6 统计属性

统计常规属性:显示实体的当前数量、停留时间、状态和吞吐量等基于时间的统计结果。“设置”选项

允许用户确定显示在当前数量和停留时间图表中的数据个数。

统计状态属性:状态属性图表显示实体的各种状态占总时间的百分比(见图 2-7)。

78

Page 83: Flexsim handbook

Flexsim3.0 教程

图 2-7 状态图表

状态图表在模型运行中动态地更新。也可选择常规属性统计分页中的图表按钮,即可显示带有图表

视图的独立视窗。

统计当前数量属性:当前数量属性图表显示实体当前数量随时间的变化(见图 2-8)。要生成此图

表需打开 “统计收集”。

79

Page 84: Flexsim handbook

Flexsim3.0 用户手册

图 2-8 当前容量图表

当前容量图表在模型运行中被动态更新。从常规属性统计分页中选择图表按钮,将显示带有此图表

视图的独立视窗。

统计停留时间属性:停留时间属性图表显示一个临时实体停留时间的柱状图(见图 2-9)。要生成

此柱状图需打开 “统计收集”。

80

Page 85: Flexsim handbook

Flexsim3.0 教程

图 2-9 停留时间柱状图

在模型运行中停留时间柱状图动态更新。在常规统计分页中选择图表按钮,将显示一个带有图表视

图的独立视窗。

注释:要查看仿真报告、当前数量图表和停留时间柱状图,建模人员必须打开该实体的统计收集选

项。由于历史数据储存需要大量硬盘空间,因此历史记录统计是默认关闭的。需要按照下列步骤打

开 “统计收集”.

第 1 步:选择实体进行统计

81

Page 86: Flexsim handbook

Flexsim3.0 用户手册

需在模型视窗中选择你想要进行统计记录的实体。按住键盘“Shift”键,拖动鼠标框选要进行统计的

实体实现此步骤(见图 2-10)。按住“Ctrl”键,然后点击一个实体,可以添加到选定集合中,或者从

集合中删除。

图 2-10 按“Shift”或“Ctrl”键拖动鼠标来选择

一旦一个实体被选中,会有一个红色方框将其框住(图 2-11)。

82

Page 87: Flexsim handbook

Flexsim3.0 教程

图 2-11 选中的实体

第 2 步:开始统计

要收集所选实体的历史统计记录,点击统计 > 统计收集 > 选定对象打开,并确认已选中“全局打

开”(图 2-12)。

图 2-12 “所选实体打开” 和“全局打开”

打开“统计收集”后,将有一个绿色方框框住正在被记录历史统计的实体(见图 2-13)。可以选择“统

计>统计收集>隐藏绿色指示框”来关闭绿色方框的显示(见图 2-14)。

图 2-13 打开历史记录统计的选定实体

83

Page 88: Flexsim handbook

Flexsim3.0 用户手册

图 2-14 隐藏绿色指示框

现在可以运行此模型,并可收集已选定实体的历史统计记录了。

实体参数实体的参数根据所选的实体不同将稍有区别。由于每个实体在模型中都有特定的功能,因此必须使

参数个性化以允许建模人员能够尽可能灵活地应用这些实体。所有实体的有些分页是相似的,而另

一些分页对该实体则是非常特殊的。关于每个实体所有参数的特定定义可参见 Flexsim 实体库。双击

一个实体可访问该实体的参数。参数的版面如图 2-15 所举示例。

84

Page 89: Flexsim handbook

Flexsim3.0 教程

图 2-15 参数

到此为止,Flexsim 软件相关概念部分的学习结束了,下面开始建立模型 2。

85

Page 90: Flexsim handbook

Flexsim3.0 用户手册

模型 2 描述

模型 2 中将采用一组操作员来为模型中的临时实体的检验流程进行预置操作。检验工作需要两个操

作员之一来进行预置。预置完成以后,就可以进行检验了,无需操作员在场操作。操作员还必须在

预置开始前将临时实体搬运到检验地点。检验完成后,临时实体转移到输送机上,无需操作员协助

当临时实体到达输送机末端时,将被放置到一个暂存区内,叉车从这里将其拣取并送到吸收器。观

察模型的运行,可能会发现有必要使用多辆叉车。当模型完成后,查看默认图表和曲线图并指出关

注的瓶颈或效率问题。图 2-1 是模型 2 的流程图。

图 2-1 模型 2 图示

模型 2 数据检测器的预置时间:常数值为 10秒

产品搬运:操作员从暂存区到检测器。叉车从输送机末端的暂存区到吸收器。

输送机暂存区:容量=10

86

Page 91: Flexsim handbook

Flexsim3.0 教程

建模步骤

建立模型 2

请首先装载前一课建立的模型 1 ,然后开始建立模型 2。

步骤 1:装载模型 1并编译

选用工具条上的打开 按钮来装载模型 1。选择第 1 课中存储的模型 1 的文件(.fsm file)。装

载后,按下工具条上的编译按钮。切记,在运行模型前必须进行编译。

步骤 2:向模型中添加一个分配器和两个操作员

分配器用来为一组操作员或运输机进行任务序列排队。在该例中,它将与两个操作员同时使用,这

两个操作员负责将临时实体从暂存区搬运到检测器。从库中点击相应图标并拖放到模型中,即可添

加分配器和两个操作员,如图 2-16 所示。

87

Page 92: Flexsim handbook

Flexsim3.0 用户手册

图 2-16 添加分配器和操作员

步骤 3:连接中间和输入 /输出端口

暂存区将要求一个操作员来拣取临时实体并送至某个检测器。临时实体的流动逻辑已经在第 1 课中

的暂存区设置好了,无需改变。只需请求一个操作员来完成该任务。由于我们使用两个操作员,我

们将采用一个分配器来对请求进行排队,然后选择一个空闲的操作员来进行这项工作。如果我们只

有一个操作员,就不需要分配器了,可以直接将操作员和暂存区连接在一起。

为了使用分配器指挥一组操作员进行工作,必须将分配器连接需要操作员的实体的中间端口上。若

要将分配器的中间端口连接到暂存区,则按住键盘上的“S”键然后点击分配器拖动到暂存区(见图

2-17)。

图 2-17 按“S”键并点击拖动

释放鼠标,就建立了一个从分配器中间端口到暂存区中间端口的连接(见图 2-18)。

88

Page 93: Flexsim handbook

Flexsim3.0 教程

图 2-18 中间端口连接

中间端口位于实体底部中间位置。很明显它并非输入或输出端口。

为了让分配器将任务发送给操作员,须将分配器的输出端口与操作员的输入端口连接。实现方法是

按住键盘“A”键并点击分配器拖动到操作员,如图 2-19 所示。必须对每个操作员进行此操作。连接如

图 2-20 所示。

89

Page 94: Flexsim handbook

Flexsim3.0 用户手册

图 2-19 “A”键点击拖动

90

Page 95: Flexsim handbook

Flexsim3.0 教程

图 2-20 分配器输出端口连接到操作员输入端口

步骤 4:编辑暂存区临时实体流设置使用操作员

下一步是修改暂存区临时实体流属性来使用操作员完成搬运任务。可以双击暂存区打开参数视窗完

成上述修改。视窗打开后,选择“临时实体流”分页。选择 “送往端口”下拉菜单下面的“使用运输机”复

选框(图 2-21)。

图 2-21 选中“使用运输机 ”复选框

当选择了“使用运输机”后将激活一个“按下列请求运输工具”的新下拉菜单。这个下拉菜单将根据端口

号来选择运输机或操作员去搬运临时实体。在本例中,它被连接到分配器,由分配器将任务分配给

操作员。选择“确认 ”按钮关闭视窗。

步骤 5: 编译、保存模型,和测试运行

现在运行模型来确认我们所做的改变是否生效。在开始运行前首先要进行 。编译完成后,

重置模型,然后按 按钮保存此模型。

运行模型来验证操作员正在从暂存区搬运临时实体到检测器。

步骤 6:为检测器的预置时刻配置操作员

为了使检测器在预置时使用操作员,必须连接每个检测器的中间端口和分配器的中间端口。操作是

按住键盘“S”键点击分配器拖到检测器释放。完成后,端口将如图 2-22 所示。

91

Page 96: Flexsim handbook

Flexsim3.0 用户手册

图 2-22 分配器与每个检测器中间端口的连接

现在我们需要为检测器定义预置时间。双击第一个检测器打开其参数视窗(图 2-23)。

92

Page 97: Flexsim handbook

Flexsim3.0 教程

图 2-23

在“预置时间” 下拉菜单中选择“Constant Value(常数值)” 选项,然后按 键来打开代码模板

视窗,将时间改为 10(见图 2-24)。

图 2-24

点击“确认”按钮关闭代码模板视窗。点击主页中的 “应用” 保存此改变。然后打开“操作员”分页。

选择“使用操作员进行预置”旁的复选框。选择后,将会看到“操作员数量”编辑区和“选取操作员”下拉

菜单可用。预置所需的操作员数量为 1,“ 选取操作员”的被选内容应设置为中间端口 1,如图 2-25

所示。

93

Page 98: Flexsim handbook

Flexsim3.0 用户手册

图 2-25

点击“确认”按钮保存此改变并关闭视窗。对模型中的每个检测器重复此步骤。然后编译、重置,并运

行模型以确认在预置时间期间确实使用了操作员。

模型的下一步是添加输送机暂存区,并重新连接输入和输出端口。

步骤 7:断开输送机到吸收器的端口间连接

应在添加输送机暂存区前断开输送机和吸收器之间的输入输出端口连接。操作是:按住键盘“Q” 键

点击输送机拖动至吸收器。

端口被断开后,从库中拖一个暂存区放置在中间那个输送机的末端。然后连接输送机的输出端口至

暂存区的输入端口,操作为:按住“A”键点击每个输送机拖动至暂存区。然后用同样的操作连接暂存

区的输出端口至吸收器。完成后,模型的布局应如图 2-26 所示。

94

Page 99: Flexsim handbook

Flexsim3.0 教程

图 2-26 连接完成

现在已修改了模型布局,并创建了端口连接,可以添加叉车了。

步骤 8:添加运输机

在模型中添加叉车,来将临时实体从输送机暂存区搬运到吸收器,这和添加操作员来完成输入暂

存区到检测器之间的临时实体搬运是一样的。由于此模型中只有一辆叉车,所以不需要使用分配器

直接将叉车连接到暂存器的一个中间端口。

从库中拖出一个叉车输送机放置到模型视窗中(图 2-27)。

95

Page 100: Flexsim handbook

Flexsim3.0 用户手册

图 2-27

添加叉车后,将暂存区的中间端口连接到此叉车。按住键盘“S”键点击暂存区拖动到叉车。

完成后,模型应如图 2-28 所示。

图 2-28

步骤 9: 调整暂存区的临时实体流参数来使用叉车

下一步是调整暂存区的临时实体流参数来使用此叉车。双击暂存区打开其参数视窗(图 2-29)。

图 2-29 暂存区的“使用运输机”复选框

选择“临时实体流”分页并选中“使用运输机 ”复选框。暂存区的中间端口 1 已经被连接上,因此无须

其它调整。点击“确认”按钮关闭视窗。

点击 。模型编译完成后,重置并保存模型。

步骤 10:运行模型

这一步是建立本模型的收获部分,现在可以检验此模型是否如你所愿地运行。在模型运行中,可使

用动画显示来直观地检查模型,看各部分是否运行正常(图 2-30)。

96

Page 101: Flexsim handbook

Flexsim3.0 教程

图 2-30 运行模型

应能看到操作员来回走动,叉车在暂存区和吸收器之间搬运临时实体。

可注意到当一个检测器在等待操作员进行预置时,一个黄色的方框显示在检测器下。

步骤 11:输出分析

使用在前面课程中讲到的如何打开统计收集的说明,在属性视窗中查看实体的统计数据。通过观察

动画显示和图表(图 2-31),判断此模型是否有瓶颈?

97

Page 102: Flexsim handbook

Flexsim3.0 用户手册

图 2-31 仿真运行时的各种图表

运行表明如果添加一个或更多操作员,模型运行更好。当添加第三个操作员时,尽管临时实体仍然

会在输入处的暂存区中堆积,但却可能是系统的最佳配置。

从库中拖出一个图标即可再添加一个操作员。按住“A”键点击拖动,连接分配器与操作员。编译、重置、

保存,然后运行。第 2 课到此结束。祝贺你!你要进入本课进阶部分的学习吗?太好了!更上一层楼!

要继续学习教程,请参看第 2 课 进阶。

98

Page 103: Flexsim handbook

Flexsim3.0 教程

第 2 课 进阶

简介本部分用来指导建模人员如何添加一些额外的东西来在模型运行中显示数据和信息。在本课中,将

学习如何添加 3D 图表和图形,如何显示在第 2 课中完成的模型中的 3D 文本。

本课学习内容• 如何添加一个 3D曲线图来显示暂存区的当前数量

• 如何添加一个 3D柱状图来显示暂存区的等待时间

• 如何添加一个 3D饼图来显示每个操作员的状态分布

• 如何添加一个 3D 可视化文本来显示输送机暂存区的平均等待时间

• 如何安排曲线图、图表、文本的位置以取得最好视觉效果

新实体在本课中,将介绍可视化工具和记录器实体。

预计完成时间完成本课大约需要 20-30 分钟。

99

Page 104: Flexsim handbook

Flexsim3.0 用户手册

建模步骤

建立模型 2 进阶要开始建立进阶模型 2,需要从上一课中装载模型 2。

步骤 1:装载模型 2并编译

步骤 2:将模型另存为“Model 2 Extra Mile”,并打开统计收集选项

找到菜单选项“文件>另存为”将模型用一个新名称保存。在开始进行修改前,确保已经采用菜单选项

“统计 >统计收集>所有实体打开”为所有的实体打开了统计收集选项。要显示柱状图和当前数量图

(见第 2 课,Flexsim 相关概念一节)就必须打开统计收集选项。

步骤 3:添加一个记录器来显示暂存区的当前数量

从库中拖出一个记录器放到发生器实体的左上方,如图 2-32 所示。

图 2-32

步骤 4:调整记录器的参数来显示暂存区的满意的曲线图

在记录器实体上双击打开它的参数视窗,如图 2-33 所示。

100

Page 105: Flexsim handbook

Flexsim3.0 教程

图 2-33 记录器参数

按下数据捕捉设置按钮。在数据类型域段中,选择“标准数据”选项。然后在实体名称域段的下拉菜单

中选择那个暂存区。在 “选择捕捉数据”域段中,选择“当前数量”(见图 2- 34)。

图 2-34 捕捉数据选项

点击“向前”按钮。

步骤 5:设定记录器的显示选项

现在,在记录器视窗上选择显示选项按钮(见图 2-33)。在“图形名称”域段中,键入名称“Queue

Content Graph(暂存区当前数量曲线图)”(见图 2-35)。这是一个用户定义的域段,用来定义图

形的标题。可以在这里键入任意想要的名称。完成后按完成按钮。

101

Page 106: Flexsim handbook

Flexsim3.0 用户手册

图 2-35 标准显示选项

步骤 6:调整图形的视景属性

图形的视景属性可以在属性视窗中进行编辑,右键点击记录器并选择属性选项可以打开属性视窗

(见图 2-36)。

图 2-36 选择属性视窗

在默认情况下,图形是平放在模型地板上的。如果将图表旋转 90度直立起来视觉效果将会很好。改

变记录器的旋转和高度参数就可以实现(见图 2- 37)。

102

Page 107: Flexsim handbook

Flexsim3.0 教程

图 2-37 记录器属性

将“Z”(位置)改为 7.80,将“RX”(X转角)改为 90。这将会把图表旋转直立起来,而设定的高度

将图表的底部处于地板上(见图 2-38)。

103

Page 108: Flexsim handbook

Flexsim3.0 用户手册

图 2-38 调整当前数量图形

编译模型后,进行重置,并运行,现在应该看到图形显示了暂存区的当前数量随时间变化的情况。

如果没有显示,可能需要从“统计>统计收集>所有实体打开”菜单中打开统计历史数据选项。

步骤 7:添加一个记录器来显示暂存区的停留时间柱状图

按照和添加当前数量曲线图一样的步骤,往模型中添加一个记录器作为停留时间柱状图。唯一的区

别是,在记录器参数的“选择捕捉数据 ”中应该选择“停留时间”选项(见图 2-39)。

图 2-39 选择“停留时间”选项

将记录器放在紧挨着当前数量曲线图的右边。像步骤 6 中那样选择属性,旋转图形,改变高度位置。

然后编译、重置并运行,应该看到像图 2-40 一样的图形。

104

Page 109: Flexsim handbook

Flexsim3.0 教程

图 2-40 当前数量和停留时间图形

步骤 8:为每个操作员添加一个状态饼图

按照步骤 3-5 的同样的程序为每个操作员添加一个状态饼图。唯一的不同是在选择捕捉数据域段中

选择“状态”选项(见图 2- 41)。

图 2-41 选择“状态”选项

从属性视窗中将两个图形都调整为 5×5 的大小(见图 2-42)。

105

Page 110: Flexsim handbook

Flexsim3.0 用户手册

图 2-42 将图形的尺寸设定为 "SX" 5 和 "SY" 5

让两个饼图平放在地板上。不需要改变它们的转角值。然后编译、重置并运行,应该看到像图 2-43 所

示的那样的饼图。

106

Page 111: Flexsim handbook

Flexsim3.0 教程

图 2-43 操作员 1 和操作员 2 的状态饼图

步骤 9:给模型添加 3D 文本

另一种往模型中添加信息来在模型运行中显示绩效指标的方式是,在模型布局的某些战略点上放

置 3D 文本。采用可视化实体,在视景显示中选择 “文本”选项就可以实现此操作。在这个模型中,将

要添加一个 3D 文本来显示“Conveyor Queue”中的临时实体的平均等待时间。

拖出一个可视化工具实体到模型中,并放置到输送机暂存区旁边(见图 2-44)。

107

Page 112: Flexsim handbook

Flexsim3.0 用户手册

图 2-44 可视化工具实体

可视化工具的默认显示是一个 Flexsim 标志图案的平面。在可视化工具上双击打开其参数视窗(见

图 2-45)。

图 2-45 可视化工具参数

在视景显示中选择“文本”选项。现在可以定义文本参数了。在文本显示下拉菜单中选择“Display Avg

StayTime”选项(见图 2-46)。

108

Page 113: Flexsim handbook

Flexsim3.0 教程

图 2-46 文本显示下拉菜单

然后选择代表模板按钮来改变显示的文本,改为“The average staytime of the Conveyor Queue is:

(输送机的暂存区的平均等待时间是:)”,如图 2-47 所示。

图 2-47 定义 3D 文本的显示

将会注意到,在显示字符串的末尾由一个指向“centerobject(current,1)”表述的引用(见图 2- 47)。

这个引用用来告诉可视化工具查找要显示的数据。centerobject(current,1)的意思是显示连接到可视

109

Page 114: Flexsim handbook

Flexsim3.0 用户手册

化工具的第一个中间端口的实体的平均等待时间。这就意味着必须在输送机暂存区和可视化工具实

体之间建立一个中间端口连接。这可以通过按住键盘上的“S”键并点击可视化工具拖动到输送机暂存

区的操作来实现(键图 2-48)。要点击可视化工具,可直接点击所显示的 3D 文本。如果点击到字母

之间的空白上可能不能正确建立连接。

图 2-48 连接可视化工具和输送机暂存区

编译了模型后,将会在模型视图中看到文本(见图 2-49)。

110

Page 115: Flexsim handbook

Flexsim3.0 教程

图 2-49 模型视图中的 3D 文本

到此,用户可能想要调整文本的显示。文本的尺寸默认设置为 1,可能想要让它变小点。也可能想要

文本悬在暂存区上空。

要想把文本尺寸变小,在可视化工具的文本参数中键入想要的尺寸,这里为 0.5(见图 2-50)。同

时,将厚度调整到 0.1,这样给文本一个 3D 的外观。

图 2-50 调整文本的尺寸和厚度

在可视化工具视窗的左下角,选择属性按钮打开属性视窗(见图 2-51)。

图 2-51 属性按钮

在属性视窗中,用“RX”域段将文本旋转 90度(见图 2-52)。

111

Page 116: Flexsim handbook

Flexsim3.0 用户手册

图 2-52 将文本旋转 90度

在参数和属性视窗中按“确认”按钮。现在模型中的文本就被旋转了。用鼠标按照意愿来选择和放置文

本。记住,可以通过并用鼠标左右键选择文本并前后移动鼠标来控制文本的高度,或者选择文本然

后滚动鼠标轮来上下移动文本(见图 2-53)。

112

Page 117: Flexsim handbook

Flexsim3.0 教程

图 2-53 放置 3D 文本

步骤 10:编译、重置、保存和运行

在模型中放置文本,并编译、重置、保存该模型。然后就准备好可以运行模型并查看刚刚添加的图形、

图表和 3D 文本了(见图 2-53)。

图 2-54 完成的模型

要继续学习本教程,请看第 3 课。

113

Page 118: Flexsim handbook

Flexsim3.0 用户手册

第 3 课

简介

第 3 课介绍货架和网络节点实体。将在样条线节点、输送机、高级统计和全局表的使用上有所改变。第 3

课将介绍试验控制器,用来对模型进行多次运行和多场景分析。第 3 课将以第 2 课建立的模型为起点。

请在开始第 3 课之前,务必完成第 1 课和第 2 课的学习。

第 3 课的前提假设是已经完成了第 1 课和第 2 课,并已经熟悉了在参数和属性视窗中工作。在前面的课

程中,几乎每个步骤都用插图进行了说明,以使用户能够完全理解建模的步骤。在第 3 课中,一些简单

的操作,如给模型添加一个新的实体并输入基本参数,仍将给出单步操作的描述,但是将不再给出插

图。

关于使用 Flexsim评估版本的注释:如果采用的是 Flexsim 的评估版本,将不能完成本课的模型。

Flexsim评估版本建立的模型对实体数目有限制,本课的模型超过了评估版本的最大数目限制。

本课学习内容

• 如何使用全局表定义路径

• 如何为一个运输机设定行进路径网络

• 如何在一个行进路径网络中创建样条线

• 如何建立一个定制的输出报告

• 如何执行模型的多次运行

本课将介绍货架、网络节点和样条线节点实体。

预计完成时间

完成本课大约需要 45-60 分钟。

114

Page 119: Flexsim handbook

Flexsim3.0 教程

Flexsim 软件概念学习

样条线节点在 Flexsim 中,在布置行进路径网络的时候使用样条线节点。Flexsim采用样条线技术提供了一种

方便地添加转弯、上升、下降网络路径的方法。

当在模型视图中放置两个网络节点,并采用“A”点击拖动方式建立连接,将显示一条绿色的路径

(见图 3-2)。

图 3-2 连接网络节点

如果将视景推进样条线节点并在样条线节点上点击保持鼠标键,将显示相关信息(见图 3-3)。

115

Page 120: Flexsim handbook

Flexsim3.0 用户手册

图 3-3 “样条线节点”信息视图

样条线节点参数Deltax: 从上一个样条线节点或者网络节点到此节点的 X方向的差值。

Deltay: 从上一个样条线节点或者网络节点到此节点的 Y方向的差值。

Deltaz: 从上一个样条线节点或者网络节点到此节点的 Z方向的差值。

XYangle: 从上一个样条线节点或者网络节点到此节点的 XY角度。角度从 0到正负 90度。

Length: 这是两个网络节点范围之间的样条线的总长。

如要移动样条线节点,用鼠标选中节点球体。将在样条线节点球体周围显示一个黄色的方框。

图 3-4 选中样条线节点球体

要移动改变样条线节点的 XY角度,或者给路径添加一个转弯,只要在模型视图视窗中用鼠标左键

点击拖动球体就可以了。如要改变样条线节点的 Z向高度,选中球体并同时用鼠标左右键点击拖动

它即可。向前移动鼠标可以升高样条线节点,向后移动鼠标可以降低样条线节点。也可以用鼠标滚

轮来改变样条线节点的 Z向高度(见图 3-5)。

116

Page 121: Flexsim handbook

Flexsim3.0 教程

图 3-5 改变样条线节点的 Z向高度

添加附加的样条线节点可以按住“X”键然后点击一个已存在的样条线节点来给路径添加附加的样条线节点(见图 3-6)。新

的样条线节点将添加到所点击的样条线节点与相邻的下一个样条线节点或者网络节点之间的中心

点位置上(见图 3-7)。

图 3-6 给路径添加一个样条线节点

117

Page 122: Flexsim handbook

Flexsim3.0 用户手册

图 3-7 在两个样条线节点之间添加一个样条线节点

一旦给路径添加了样条线节点,这些节点可以单独移动来构造样条线的形状(见图 3-8)。样条线

和样条线节点之间的张力可以通过编辑 | 设定样条线张力菜单选项来进行调解。张力默认设定为 1。

如果将张力改为 0,则样条线路径将从样条线节点的正中心穿过。

图 3-8 移动样条线节点来构造路径的形状

可以配置网络节点来指定路径的方向。按住“Q”键然后从一个网络节点到另一个相连的网络节点点击

拖动鼠标,将禁止那个方向的通行。这会将不再允许通行的路径的侧边用一条红色的线标示出来

(见图 3-9)。

118

Page 123: Flexsim handbook

Flexsim3.0 教程

图 3-9 单行线路径

当路径采用了样条线节点进行配置后,使用此路径的行进物将自动沿着所定义的样条线行进。样条

线节点球体的显示可以在打开和关闭选项之间切换,操作方法是按住“X”键并点击路径网络中的一

个网络节点(见图 3-10)。

图 3-10 “X”点击网络节点来关闭显示样条线节点

注释:当模型中使用多个样条线节点时,很有必要在“编辑”菜单中选择“锁定样条线”选项。这将吧

样条线节点锁定而不能再进行编辑,从而大大提高运行速度。编译模型将会取消对样条线的锁定,

因此,每次编译后都需要再将它们都锁定。

模型的树视图

在 Flexsim 中使用模型树视图来详细地展开模型结构和实体。选择工具栏中的 按钮可以访

问模型树视图。模型树视图将会显示如下(见图 3-11)。

119

Page 124: Flexsim handbook

Flexsim3.0 用户手册

图 3-11 模型树视图

模型树视图是一个具有许多独特特点的视图视窗。在此视图中可以:

用 C++或者 Flexsim 脚本语言来定制 Flexsim 实体

查看所有实体数据

访问参数和属性视窗

编辑模型、删除实体和修改所有数据

如果遵循几条简单的导航规则,将会发现树视图是最 Flexsim 中通用的视图之一。Flexsim 的底层

数据结构包含在一个树中。Flexsim 中的许多编辑视窗只不过是从树中过滤的数据的一些图形用户

界面(GUI)。由于 Flexsim 中所有树视图的工作方式相同,只要理解了树视图如何工作,就可以

理解和导航任意可访问的树的结构。

树视图基础Flexsim 的设计将所有数据和信息都包含在一个树结构中。这个树结构是面向 Flexsim 实体设计的

核心数据结构。熟悉C++面向实体编程的人员将会立即把 Flexsim 的树视图认作面向实体数据管理

的 C++标准。

在树视图中有几个符号能够在导航过程中帮助理解树的结构。

120

Page 125: Flexsim handbook

Flexsim3.0 教程

整个主树被称为一个项目。一个项目包含库和实体。一个视图树包含所有的视图和 GUI 定义。当保存

一个 session(整体)时,就是将主树和视图树一起保存。

文件夹图标标示了一个完整项目的主要组件。模型是一个主项目的一个组件。库是主项目的另一个

组件。

在树视图中,实体图标用来代表 Flexsim 实体。

节点图标用来指定一个实体内的节点数据。数据节点可以在它们内部包含附加的节点数据。如果一

个数据节点的图标左侧有一个“+ ”,表示它有一个或更多的附加数据节点。数据节点可以包含数字

的或者字母数字的值。

一些特定的数据节点被指定为C++数据节点,它们包含C++代码。可以从一个 C++数据节点直接键

入 C++代码。当按下编译按钮时,此代码将被编译。

数据节点也可以被指定为“Flexscript(Flexsim 脚本)”节点。这样的节点可以包含 Flexsim 脚本语言

代码,并在运行模型时自动编译。Flexsim 脚本语言命令是预编译的 C++函数。Flexsim 脚本语言命

令可以在工具栏中选择相应按钮加以查看(见图 3-12)。大多数 Flexsim 脚本语言命令也可以在

C++代码中使用。

图 3-12 Flexsim 脚本语言命令

当在树视图中用鼠标点击一个图标从而选择一个实体时,树视图将显示实体如下:

121

Page 126: Flexsim handbook

Flexsim3.0 用户手册

将在实体图标周围显示一个高亮方框,并且在实体图标左边放一个展开树符号。如果选择了这个展

开树符号,那个实体的数据节点将显示如图 3-13 所示。

图 3-13 展开的视图树视图

随着实体和数据节点的展开,树视图将很快增长到此树视图视窗的查看限制之外。Flexsim允许使

用鼠标在视窗中随意移动树。如要在视窗中随意移动树,只要在树的左边点击拖动鼠标,或者使用

鼠标滚轮来上下滚动即可。

点击节点图标左边的“+”,可以展开数据节点。由于数据节点可以包含数值或者文本,可以在节点右

边看到这些文本信息或者数据的值(见图 3-14)。

如果你选中了某个实体或者数据节点,可能就不能移动树。点击视图中的空白区域,然后拖动鼠标

就可以移动树了。也可以使用鼠标滚轮或者 PageUp/PageDown 按钮来上下移动树。

122

Page 127: Flexsim handbook

Flexsim3.0 教程

图 3-14 文本和数值数据节点

选择想要编辑的节点可以直接编辑数据。如果是一个数字数据节点,可以在这个域段中编辑这个数

字(图 3-15)。如果是一个文本数据节点,将会在视窗的右边看到一个文本编辑域段,用来编辑文

本(见图 3-16)。

123

Page 128: Flexsim handbook

Flexsim3.0 用户手册

图 3-15 编辑一个数字数据节点

图 3-16 编辑一个文本数据节点

可见,树是模型所有数据的贮藏室。参数和属性视窗用来提供一个更友好的方式来操作树中的数据

虽然从树中完成模型的编辑是可能的,但还是建议用户使用参数和属性视窗,这样可以避免不小

心删除模型数据。像在正投影视窗中那样,右键点击或者双击实体图标,可以在树视图中访问参数

和属性视窗。

124

Page 129: Flexsim handbook

Flexsim3.0 教程

模型 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

为叉车设定一个路径网络,沿此网络在输送机暂存区和货架之间行进。

为漫游式模型展示生成一个漫游路径。

125

Page 130: Flexsim handbook

Flexsim3.0 用户手册

建模步骤

建立模型 3

在开始建立模型 3之前,需要从上一课中装载模型 2。

步骤 1:装载模型 2并编译

装载模型后,在工具栏上按编译按钮。

步骤 2:重新配置输送机 1 和 3 的布局

使用输送机 1 和 3 的参数视窗中的布局分页,改变其布局,使输送机在末端有一个弧段,将临时实

体输送到离输送机暂存区更近的位置去(见图 3-17a 和图 3-17b)。至少需要添加一个附加的弧段

来实现此目的。注意,第 2 个分段的“类型”的值是 2,表示它是一个弧形分段。对于类型 1 的分段,

可以使用长度、上升高度和支柱数目等参数。对于类型 2 的分段,可以使用上升高度、弯曲角度、半径

和支柱数目等参数。假如有兴趣在此布局分页中实验创建一些复杂的弯曲和倾斜上升的布局,将很

有意思!

图 3-17a 添加分段来重新配置输送机 1 和 3

126

Page 131: Flexsim handbook

Flexsim3.0 教程

图 3-17b 配置好输送机后安排布局

步骤 3:删除吸收器

为模型添加货架做准备,先要把模型 2 中的最后的吸收器删除。选中吸收器,使它成为黄色高亮显

示,并按键盘上的“ Delete” 键即可将其删除。当删除一个实体后,所有从此实体连接出和连接入的

连接都同时将被删除。当心,这可能会影响到与被删除实体相连的实体的端口编号。

步骤 4:给模型添加 3 个货架

在库中选择货架实体,往模型中拖放 3 个货架。模型中放入货架后,创建从输送机暂存区到每个货

架的端口连接,方法是按住“ A”键然后从这个暂存区到每个货架进行点击拖动操作(见图 3-18)。

127

Page 132: Flexsim handbook

Flexsim3.0 用户手册

图 3-18 添加到模型中的货架

将货架放置得离暂存区有足够的距离,以便让叉车在到达货架时需要行进一定的距离。

步骤 5:设定用来安排临时实体从暂存区到货架的路径的全局表

下一步是设定一个全局表,用来查找每个临时实体将被送到哪个货架(或者,更确切的表述为,

临时实体将从输送机暂存区的哪个输出端口发送出去)。这里假设条件是,输出端口 1连接到货架

1,输出端口 2连接到货架 2,输出端口 3连接到货架 3。本模型将把所有实体类型为 1 的临时实体

送到货架 2,所有实体类型为 2 的临时实体送到货架 3,所有实体类型为 3 的临时实体送到货架 1。

下面是设定一个全局表的步骤:

1. 在工具栏中选择全局表按钮。

2. 打开全局建模工具视窗后,按全局表旁边的按钮。全局表的下拉菜单中将会出现默认的表名称。

3. 选择按钮来设定此表。

4. 在全局表参数视窗中,将表的名称改为“rout”。

5. 设定此表有 3 行 1 列,然后点击应用按钮。

6. 将 3 行分别命名为 item1、item2 和 item3,然后填入相应的临时实体要被送到的输出端口号

(货架号)。

7. 选择视窗底部的确认按钮。选择全局建模工具视窗底部的关闭按钮。

现在,已定义了全局表,可以调整暂存区上的“送往端口”选项。

128

Page 133: Flexsim handbook

Flexsim3.0 教程

步骤 6:调整输送机暂存区上的“送往端口”选项

在输送机暂存区上双击打开其产生视窗。选择临时实体流分页。在“送往端口”下拉菜单中,选择“By

Lookup Table(通过查表)”选项。选择了查表选项后,选择代码模板按钮。编辑模板来使用叫做

“rout” 的表(见图 3-19)。

图 3-19 编辑代码模板来使用名为“rout”的表

选择确认按钮关闭模板视窗,然后再选择确认按钮来关闭参数视窗。

步骤 7:编译、重置、保存和运行

到现在为止,最好编译、重置、保存一下模型,然后运行模型来验证对模型的改动。模型应该显示用

叉车往货架中搬运临时实体,送往的货架的选择基于在全局表中定义的实体类型。

步骤 8:为叉车添加网络节点来为叉车开发一条路径

网络节点用来为任何任务执行器实体,如运输工具、操作员、堆垛机、起重机等,开发一个路径网络。

在前面几课中,已经采用过操作员和运输工具来在模型中任意运输临时实体。到此为止,任务执行

器可以在模型中在实体之间的直线上自由地移动。现在,当叉车在从输送机暂存区到货架之间运输

临时实体时,想将叉车的行进限制在一个特定的路径上。下面的步骤用来设定简单的路径。

1. 在输送机暂存区和每个货架旁边拖放添加网络节点。这些节点将在模型中成为捡取点和放下点

(见图 3-20)。可以在这些节点之间添加附加节点,但是并没有必要这样做。

129

Page 134: Flexsim handbook

Flexsim3.0 用户手册

图 3-20 拖放网络节点(黄色点)到模型中

2. 按住“A”键在每个网络节点之间点击拖动一条连线,可以将这些网络节点彼此连接起来(见图 3-

21)。建立连接后将会显示一条绿色的连线,表示这两个节点之间的路径在两个方向上都是可以通

行的。

图 3-21 网络节点之间的连接

3. 现在,给输送机暂存区连接一个节点,并给 3 个货架的每一个都连接一个节点。必须这样做,叉

车才能知道与模型中每个捡取和放下地点相连的是哪一个网络节点。此连接也是用按住键盘“A”键然

后在网络节点和实体之间点击拖动一条连线的方式来实现。正确建立了连接后将显示一条细蓝线

(见图 3-22)。

130

Page 135: Flexsim handbook

Flexsim3.0 教程

图 3-22 从网络节点到实体的连接

4. 最后一步是将叉车连接到节点网络上。为了让叉车知道它必须采用路径行进,必须把它连接到路

径网络中的某个节点上。按住键盘“A”键然后在叉车到一个网络节点之间进行点击拖动操作可以实现

连接。建立连接后将显示一条红色的连线(见图 3-23)。所选择的连接到叉车的那个节点将成为每

次重置和运行模型时叉车的起始位置。

图 3-23 将叉车连接到网络节点

步骤 9:编译、重置、保存并运行模型

131

Page 136: Flexsim handbook

Flexsim3.0 用户手册

现在,可以编译、重置、保存,然后允许模型来查看叉车是否在使用路径网络。

关于偏移的一点说明在模型运行的时候,可以注意到,在捡取和放下临时实体时,叉车会行进离开网络节点。这是选择

了叉车参数中的“装卸时采用行进偏移 ”选项的结果(见图 3-24)。

图 3-24 选择了装卸时采用行进偏移选项

偏移被叉车用来进行定位到模型中需要捡取或者放下临时实体的位置。这可以使叉车行进到暂存区

内来捡取一个临时实体,并行进到特定的货架单元并放下临时实体。如要强制叉车呆在网络节点而

不离开路径网络,只要不选中行进偏移复选框就可以了。

路径样条线节点注意,当连接了两个网络节点时,显示一条绿色连接线。在连线的中间有一个样条线节点。可以添

加附加的样条线节点,并随意移动这些节点来形成路径上的复杂的弯曲、转弯和斜坡(见图 3-

25)。

132

Page 137: Flexsim handbook

Flexsim3.0 教程

图 3-25 路径样条线节点

路径样条线节点带来了极大的灵活性,同时也减少了建立复杂路径所需要的网络节点数。路径网络

自动采用 Dyjkstra算法来确定网络中任意两个节点之间的最短路径。

步骤 10:使用报告来查看输出结果

如要在 Flexsim 中获得相应的特征报告,就必须在模型中选中想要包含在报告中的实体。在运行结

束后可以获得报告。要选中实体,可以按住键盘 “Shift”键然后用鼠标拖动一个选择框包围要报告的

实体。当一个实体被选中时,在它周围将显示一个红色方框(见图 3- 26)。也可以使用“Ctrl”键并点

击实体来实现向选中的集合中添加和移除实体。

133

Page 138: Flexsim handbook

Flexsim3.0 用户手册

图 3-26 选择实体使它包含在报告中

选择了想要进行报告的实体后,选择菜单选项“统计>标准报告”。

选择了此选项后,将会看到 Standard Report Setup(标准报告设置)视窗(见图 3-27)。

134

Page 139: Flexsim handbook

Flexsim3.0 教程

图 3-27 Standard Report Setup 视窗

按生成报告可以生成一个基本报告(见图 3-28,3-29)。如果只需要生成关于所选实体的报告,就

不要选择“整个模型的信息报告 ”复选框。如果需要向报告中添加其它的属性,可以在此界面中添加。

报告将输出到一个 csv 文档,并自动用 Excel显示,或者用用户机器上所默认的用来显示 csv 文档

的应用程序来显示。

图 3-28 基本报告(Micrsoft Excel)

选择菜单选项“统计>统计报告”可以创建统计报告。这将生成一个包括模型中所有选定实体的状态报

告。

135

Page 140: Flexsim handbook

Flexsim3.0 用户手册

图 3-29 状态报告(Microsoft Excel)

步骤 11:使用实验控制器进行多次允许

要获取 Flexsim 的实验控制器,可以选择主视窗右底部的实验控制器按钮(见图 3-30)。

图 3-30

按下按钮后,将出现 Simulation Experiment Control(仿真实验控制)视窗(见图 3-31)。

136

Page 141: Flexsim handbook

Flexsim3.0 教程

图 3-31 Simulation Experiment Control 视窗

Simulation Experiment Control 视窗用来设定一个特定模型的多次重复运行,和一个模型的多个场

景运行。当运行多场景时,可以声明几个实验变量,然后每个场景下想要运行的各个变量的取值。

将会计算并显示在绩效指标分页中定义的每个绩效指标的置信区间。参见帮助文档的实验控制器部

分,可以获得更多关于实验控制器的信息。

第 3 课到此结束。祝贺!

137

Page 142: Flexsim handbook

Flexsim3.0 用户手册

Flexsim 使用介绍

Flexsim 使用介绍

本部分介绍如何使用 Flexsim 来创建用户仿真模型。本部分可分为如下五个小节:

主菜单和工具条 - 本节介绍 Flexsim 的主菜单、 Flexsim 主面板顶部的工具条、以及 Flexsim 视窗

底部的仿真运行控制面板等。

模型视图 - 本节介绍如何在 Flexsim 中查看和编辑仿真模型。

视窗和对话框 - 本节介绍首次创建仿真模型时将用到的视窗和对话框。

Flexsim 相关概念 - 本节讨论软件 Flexsim 是如何构建的,在 Flexsim 中如何编写程序代码,以及

在什么时候编译等。

3D 媒体 - 本节介绍在 Flexsim 中如何使用 3D 媒体。

138

Page 143: Flexsim handbook

Flexsim3.0 用户手册

主菜单和工具条

文件菜单

新建模型-此选项清除软件中的当前模型以便创建一个新的仿真模型。此选项不影响视图布局或库

选择它的时候 Flexsim会发出警告:此操作将丢失当前模型中的所有实体。

打开模型...-此选项用来选择一个 Flexsim 模型文件(扩展名为.fsm)来编辑。如果没有存盘,在

当前模型中所进行的所有改变都将丢失。

保存...-此选项将保存当前模型文件(扩展名为.fsm),对当前模型所做的改变都会被保存。

模型另存为...-此选项用来将仿真模型保存为文件。保存所创建的文件扩展名为.fsm。此模型树的

全部内容都将被保存。

状态存取-此选项用来保存模型的状态(模型当前运行),或者导入已保存的模型状态文件,然

后接着运行模型。当模型处于仿真运行期间,需要保存它的当前状态(所有临时实体保持在它们所

处的位置,所有的资源保持它们当前的操作状态),且以后再重新载入模型状态时能够接着所保

存状态的那一状态点继续运行时,保存状态很有用。

140

Page 144: Flexsim handbook

Flexsim 使用介绍

保存状态-此选项保存模型的当前状态。

导入状态-此选项载入并重新编译先前保存的状态模型。

编辑器属性-此选项打开字体视窗,用来为在任意一个 Flexsim 代码视窗中显示的文字选择字体

类型和字体大小。也可以在此配置文字的高亮属性。

安装服务包-此选项安装 Flexsim 的补丁。点击此菜单项,将打开文件浏览器,必须指定要安装的

补丁文件(*.fpk)。Flexsim 软件公司有时会以这种方式发布补丁供用户安装。公司也非常欢迎用户

开发自己的补丁并发布。补丁是一个简单的树文件,它的第一个子节点包含带有代码的字符串数据

补丁安装后,这些代码将自动执行。典型的补丁将用补丁树中的节点替代掉 Flexsim 主树和视图树

中的相关节点。

应用文件-此选项用来载入或保存视图布局、项目或者整体文件(视图布局和项目)。

141

Page 145: Flexsim handbook

Flexsim3.0 用户手册

打开视图布局-此选项用来选择并打开一个 Flexsim 视图布局文件(扩展名为.fsv)。此操作将会

改变软件视窗的布局,但不会影响模型,或者库。

保存视图布局-此选项用来保存一个 Flexsim 视图布局文件(扩展名为.fsv)。视图布局将保存视

图树。

打开项目或整体文件-此选项用来选择并打开一个 Flexsim 项目文件或整体文件(扩展名为.fsp

或 .fss)。无论打开项目还是全局文件,都不能点击默认的编译按钮进行编译,而需要从视图菜单

中对文件进行整体编译。默认编译按钮只对模型的代码进行编译,而菜单“视图|系统维护”下的“整体

编译 ”选项将对模型和库进行整体编译。

项目另存为 ... - 此选项用来保存项目文件(扩展名为.fsp)。项目文件将会保存主树,主树包含系

统、库以及模型。

整体文件另存为 ... - 此选项用来选一个 Flexsim整体文件(扩展名为.fss)保存,或打开。此操作

将会替换当前视图布局、模型、库以及其它全局信息。整体文件将项目和视图都保存到一个文件中。

XML 文件 - 此子菜单用来打开和保存 XML格式的文件,而不是标准的 Flexsim二进制格式。可以

使用此选项打开模型、项目、视图布局或者整体文件。

退出 - 此选项在不进行任何保存的情况下关闭 Flexsim。如果需要保存所做的改变,在点击此选项

之前应该保存相应的文件。

142

Page 146: Flexsim handbook

Flexsim 使用介绍

编辑菜单

撤销 - 如果激活撤消功能,并且模型有一个先前状态,此选项将会撤销对模型做的最后一次改变。

当模型中的实体被创建、移动或者删除时,当端口连接或断开时,程序都将会自动保存模型状态。

打开实体的参数或属性视窗不会引起状态保存。但是在脚本编辑器中键入代码时,右键单击选项或

者Ctrl-Z 可以实现撤销操作。

允许撤销 - 这是一个激活或者关闭模型操作撤销功能的切换开关。在仿真运行时,撤销功能被自动

取消,但是点击了停止按钮被后,将会自动地恢复。

锁定样条线 - 此选项将锁定当前模型中所有网络路径的样条线。锁定样条线能明显加快仿真运行速

度,但此时不能改变网络的路径。编译模型时将会解除锁定。

143

Page 147: Flexsim handbook

Flexsim3.0 用户手册

撤销锁定样条线 - 此选项解除对网络路径的锁定。一旦撤销了对样条线的锁定,就可以使用鼠标

编辑图形。

设定样条线张力 - 此选项打开一个对话框来设定模型中的样条线张力。张力必须在 0-1之间。取值

为 0,则所有的样条线都是直线,直接经过节点;取值为 1 时样条线的曲率最大。

设定数值精确度 - 此选项打开一个对话框来设定数值精确度。此数值将是当前 Flexsim整体文件中

数据所显示的小数点位数。

查找替换 - 此选项打开查找替换对话框。

视图菜单

144

Page 148: Flexsim handbook

Flexsim 使用介绍

输出控制台-此选项打开一个显示输出信息的视窗。可以使用 pt()、 pr()、pd()、pf()等命令在输出

控制台里打印自己的信息。参见命令集以获取更多有关这些命令的信息。

跟踪调试器

此子菜单包含调整跟踪“设定”、“打开跟踪 ”以及打开“跟踪控制台”方面的信息。

设定 - 此选项打开一个 跟踪调试器, 用来选择要显示在跟踪视窗里的事件类型。

打开跟踪 - 此选项打开或关闭跟踪。跟踪信息在跟踪控制台里显示。同时,如果跟踪打开着,系

统控制台将打印关于例外情况的更多详细信息。

跟踪控制台 - 此选项打开一个视窗,此视窗中将会打印模型中所选实体发生事件的相关信息。

要想打印这些信息,必须选中“打开跟踪”。

145

Page 149: Flexsim handbook

Flexsim3.0 用户手册

命令提示 - 此选项打开 command hints(命令提示)视窗,列出可用的命令以及其参数。此列表没

有可从工具条打开的 命令集 中的列表详细。

属性提示 - 此选项打开 attribute hints(属性提示)视窗,列出可用的实体属性以及这些属性的概要

性描述。

完成提示 - 此选项打开 completion hints(完成提示)视窗列出当前情况下可以使用的命令。此列

表随编写代码而更新。

库图标栅格 - 此选项打开 Library (库图标栅格)视窗,栅格中有实体图标,实体图标可以被拖

动进入模型。

用户库图标栅格 - 此选项打开 User Library (用户库图标栅格)视窗。

模型树 - 此选项打开一个 tree(树)视窗 显示模型的文件夹。这将显示出模型中所有实体。模型树

可以在此视窗中操作。

模型视图(平面) - 此选项打开 planar model view(平面模型视图) 以 2D 方式显示模型。在此

视图中不显示模型的 3D外形。此视图不能旋转,实体也不会显示旋转。如果用正投视图影和透视视

图会造成模型仿真运行变慢,则运用平面视图,会使模型的运行速度加快。

模型视图(正投影) - 此选项打开模型的一个新的 orthographic view(正投影视图)。

模型视图(透视) - 此选项打开模型的一个新的 perspective view(透视视图)。

正投影编辑器 - 此选项打开高级正投影编辑器。

树编辑器 - 此选项打开高级 树编辑器。

数据库表 - 此选项打开一个视窗,显示 当前激活的数据表, 这些表可由命令

dbopen()、dbchangetable()、dbsqlquery()打开或者查询。参见命令集 可获得更多有关这些命令的

信息。

系统信息

此子菜单用来打开库树、主树以及视图树视图。

编译器控制台 - 此选项打开一个视窗,模型编译时,相关信息在此视窗里被打印。这些信息显

示模型编译过程中的每一步状态。

146

Page 150: Flexsim handbook

Flexsim 使用介绍

系统控制台 - 此选项打开一个视窗打印出程序引擎状态的相关信息。此视窗打开时,模型的运

行将会减慢。

库树 - 此选项打开显示库树的 tree(树)视窗。视窗中显示库中所有可用实体类。其中很多实体

不能拖入到模型中。不能拖入模型的可能是其它实体的基类,或者它们是通过工具条创建的实体

库树可以在此视窗中操作。

主树 - 此选项打开显示项目树的 tree(树)视窗 。可以在此视窗中对树进行操作。项目树包括模

型、库以及其它全局信息。

视图树 - 此选项打开显示视图布局树的 tree(树)视窗可以在此视窗中对视图布局树进行操作。

视图布局包括当前所有打开的视窗和程序中可用的 GUI(图形用户界面)。

系统维护

此子菜单在边编辑模型边想要清理碎片时采用。此选项包括生成和清理 Flexsim 脚本和重载媒体。

生成 Flexscript - 此选项读取树中的所有节点,并为所有被标志为 Flexscript 节点的节点生成

Flexscript 树,允许它们被 Flexsim 引擎执行。模型编译时此过程自动发生。提供此菜单为开发者

使用。

编译整体 - 此选项编译所有定义在主树或视图树中的代码节点,而“执行”菜单里的 “编译应用”

和主视窗底部的仿真运行控制面板里的“编译”按钮都只能编译模型。在装载项目或整体文件之后,

必须使用此选项。在先前装载或者编译了用户自己的项目或整体文件之后,为了找回标准的

Flexsim整体文件,必须重新启动 Flexsim,并且选择此菜单选项,以恢复所有的默认设置。

清除 Flexscript - 此选项读取树中的所有节点,并且从那些被标为 Flexscript 节点中删除

Flexscript 树。当 Flexscript 树有错的时候使用此选项。下次运行模型之前必须选择“生成全部

Flexscript”。此选项给开发者使用。

重新导入媒体 - 此选项重新导入所设置的所有实体要显示的图像形状。媒体文件经常在需要的

时候自动导入。当你发现模型中的某一实体不能正确显示指定的媒体文件所代表的图像时,你可

以用此选项解决这个问题。

147

Page 151: Flexsim handbook

Flexsim3.0 用户手册

执行菜单

编译应用 - 此选项编译模型。当模型中增加了新实体,或者改变了包含代码实体参数(包括大多数

带有下拉菜单的编辑域段)后,应使用此选项编译模型。此菜单选项与工具条中的“编译”按钮的功

能相同。修改实体库的开发者需要进行整体编译(参见视图|系统维护|编译整体)。

打开 Visual Studio... - 此选项打开 Microsoft Visual Studio(如果可用),里面含有 Flexsim 生成

的 C++项目。

重置模型 - 此选项重置当前模型文件,并准备好仿真运行。与选择仿真运行控制面板上的“运行”按

钮相同。

148

Page 152: Flexsim handbook

Flexsim 使用介绍

运行模型 - 此选项运行当前的模型文件。与选择仿真运行控制面板上的“运行”按钮相同。

暂停模型 - 此选项暂停运行当前的模型。与选择仿真运行控制面板上的“暂停”按钮相同。

停止模型 - 此选项停止运行当前的模型。与选择仿真运行控制面板上的“停止”按钮相同。

步进一个事件 - 此选项将模型运行到下一个事件。在下一个事件时,模型将停止运行。与选择仿真

运行控制面板上的“逐步”按钮相同。

设定运行速度 - 选项打开一个对话框,可以在此对话框中设定模型的仿真运行速度。

设定停止时间 - 此选项打开一个对话框,可以在此对话框中设定模型仿真运行的停止时间。模型将

在超过所设目标时间之后的第一个事件停止。

统计菜单

149

Page 153: Flexsim handbook

Flexsim3.0 用户手册

标准报告 - 此选项打开创建标准输出报告的对话框。标准输出报告采用 CSV(逗号分隔值)文件

格式输出,将会自动地被微软 Excel 软件或者其它任何本机上的 CSV 文件默认打开程序打开并查

看。

状态报告 - 此选项创建并打开模型中所有选定实体的状态报告。状态报告采用 CSV(逗号分隔

值)文件格式输出,将会自动地被微软 Excel 软件或者其它任何本机上的 CSV 文件默认打开程序

打开并查看。

模型文档 - 此选项打开模型文档对话框,用来在一个外部文本文件中保存模型相关信息。

ExpertFit - 此选项打开由 Averill Law 和 Associates 开发的 ExpertFit 软件。在 ExpertFit 软件的在

线文档中有完全版的用户手册。ExpertFit 是一个用来确定输入数据的最佳匹配的统计概率分布的程

序。

实验控制器 ... - 此选项打开仿真实验控制导入视窗,与点击主视窗右下的实验控制器按钮的功能

一样。实验控制器用来执行模型的多次多场景运行。

重复随机数流 - 此选项在每次重置和运行模型的时候重复随机数流。要想使模型每次运行的随机数

流不同,不选择选项即可。

统计收集 - 此选项在 Flexsim 中打开一个子菜单来打开和关闭统计收集功能。

全局打开 - 如果此选项被选中,那些本地统计被切换锁定的实体将开始在其不断更新过程中记录

它们的临时实体数和停留时间信息。打开了本地统计的实体在模型中被一个绿色指示框框住(除非

“隐藏绿色指示框”菜单被选中)。

所有实体打开 - 此选项将打开模型中所有实体的本地统计。

所有实体关闭 - 此选项将关闭模型中所有实体的本地统计。

选定实体打开 - 此选项打开所有选定实体(用红色方框框住指示)的本地统计。

选定实体关闭 - 此选项关闭所有选定实体(用红色方框框住指示)的本地统计。

隐藏绿色指示框 - 如果此选项被选中,实体周围用来指示统计收集的绿色方框将被隐藏。

OptQuest - 此选项打开优化编辑器。OptQuest 用来在用户设定的限制条件之下,为用户定义的一

系列决策变量寻找最优值,以最大或最小化用户定义的目标函数。OptQuest 程序是 OptTeKSystem

150

Page 154: Flexsim handbook

Flexsim 使用介绍

公司开发的,完全集成于 Flexsim 中,但是需要序列号,这些序列号是附加在 Flexsim 基本版本上

的。请联系 Flexsim公司以获得序列号。

工具菜单

151

Page 155: Flexsim handbook

Flexsim3.0 用户手册

编写脚本 ... - 此选项打开脚本编辑视窗。脚本编辑视窗是一个手动执行 Flexscript命令的交互式视

窗。

工具箱... - 此视窗打开工具箱视窗,里面包含全局性建模工具。此选项功能与点击工具条中的“工具

箱”按钮相同。所有工具箱中定义的信息都将与模型一同保存。

临时实体箱 - 此选项打开临时实体箱,可以编辑模型主要的临时实体列表。此选项功能与点击工具

条中的“ 临时实体”按钮相同。

Excel... - 此选项打开 Excel 界面视窗,可在这里定义 Excel 导入和导出的参数。此选项功能与点击

工具条中的 “Excel”按钮相同。

Visio... - 此选项打开 Visio 导入视窗。

152

Page 156: Flexsim handbook

Flexsim 使用介绍

演示菜单

背景设计箱 - 此选项为模型增加一个背景设计箱,并且打开背景设计箱编辑器。背景渲染在透视视

窗里效果最好。

AVI 制作器 - 此选项打开 AVI 制作器。

演示生成器 - 此选项打开一个叫演示生成器的特定透视视图,用来进行演示过程的视角推移。

153

Page 157: Flexsim handbook

Flexsim3.0 用户手册

窗口菜单

Cascade(重叠视窗) - 此选项将重叠当前打开的视窗以便容易选择。

Close All(全部关闭) - 此选项关闭 Flexsim 中当前所有的激活视窗。在打开了太多视窗以至于

影响有效工作时,可使用此选项。

其它选项 - 其它选项是 Flexsim 中当前打开的视窗。当选择其中的一个选项,那个选中的视窗就会

变为活动视窗并呈现到屏幕顶层。

154

Page 158: Flexsim handbook

Flexsim 使用介绍

帮助菜单

开始起步 - 此选项打开 Flexsim 的帮助文档的“ 开始”部分。

用户手册 - 此选项打开 Flexsim 的用户手册。

命令集 - 此选项打开命令集。

模型例库 - 此选项打开模型例库对话框。

关于 Flexsim - 此选项打开一个有关 Flexsim 的信息。显示当前运行的 Flexsim 版本信息、此

Flexsim 的注册用户信息、显卡信息以及联系信息。

155

Page 159: Flexsim handbook

Flexsim3.0 用户手册

工具条

新建:此按钮关闭当前模型,可用来开始建立一个新的模型。此按钮不影响当前项目或者视图

布局。如想使用一个不同项目,选用主菜单中的“打开项目或整体”选项。如想使用不同的视图布局,

选用“打开视图布局”选项。

打开:此按钮用来打开一个先前保存的模型(文件扩展名为.fsm)。此选项将 Flexsim 中的当

前模型丢弃,载入用户选择的模型。此选项不影响当前项目或视图布局。如想打开不同的项目,选

用主菜单中的“打开项目或整体文件”菜单选项。如想打开不同的视图布局,选用“打开视图布局”选项

保存:此按钮用来保存当前模型。将会出现一个对话框确认当前正在编辑的文件将被保存。

撤销:如果允许撤销,点击此按钮可撤销所做的最后一步操作。对库或者视图布局所做的改变

没有被记录,所以不能用此按钮找回。当你编译或重置模型时,撤销功能被取消,如果想要重新允

许撤销,需要通过编辑菜单重新激活撤销功能。

156

Page 160: Flexsim handbook

Flexsim 使用介绍

Excel:此按钮打开 Excel 界面对话框。

工具箱:此按钮打开工具箱。工具箱用来创建和编辑若干全局可用的建模工具。

临时实体:此按钮打开临时实体箱。在此视窗中,用户可以编辑临时实体箱中可用的当前临时

实体的类型。可以改变临时实体的属性,如大小或形状。也能创建新的临时实体类,删除无用的类。

命令:此按钮打开命令集视窗,可以在这里查看 Flexscript命令的语法和用法。可以查看某个

特定的命令,也可以查看选中的一类命令的全部。

提示:此按钮打开命令提示视窗,提供 Flexscript/C++命令提示。

树:点击此按钮打开模型的树视图。可以用来查看当前在模型中的所有实体,包括那些在正投

影和透视视图视窗里不能看见的实体。这里也可以编辑实体的属性。但是建议使用实体的参数对话

框改变实体的参数,而不要在此树视图中改动。此按钮一般仅供高级用户使用。

正投影:此按钮打开正投影视图视窗。在这种类型的视窗中,实体不会随用户观察视点变远而

变小。此视图经常在开始建立模型时使用,所有实体可以很容易地放置到正确的位置上。

透视:此按钮打开透视或者虚拟现实视图视窗。在这种类型的视窗中,实体将随着用户观察视

点变远而变小。此视图经常在模型布局完成后使用,用户可以看见模型在现实中看起来是怎么样的

脚本:此按钮打开脚本编辑器。在这里可以执行 flexscript命令以修改模型或获得相关的信息。

仿真运行控制面板

此面板用来控制模型的运行。大多数功能都可以通过主菜单中的执行菜单获得。此面板在 Flexsim 主

视窗的底部。

157

Page 161: Flexsim handbook

Flexsim3.0 用户手册

仿真时间 - 显示模型运行的当前时间。显示的值没有时间单位,可以视之为任何时间单位(秒、天

等)。

仿真时间 /真实时间 - 此滑块定义实际一秒钟代表 Flexsim 中多少个时间单位。如果模型的每个事

件都要处理太多的过程,实际结果可能达不到这个值。

按钮

此选项使模型重置。模型中的每一个实体都调用重置触发器函数。在模型仿真运行之前

应该总是先进行重置。

此选项使模型开始运行。模型时钟将连续推进直到模型停止,或者直到不再需要产生

任何事件时。

此选择使模型运行暂停,但是不调整模型中所有实体的状态,此时仍然可以查询每个

实体处于当前状态的时间长度。模型不被重置,可以接着它被暂停的那一时刻继续运行下去。

此选项停止模型的运行,同时更新模型中所有实体的状态。模型不被重置,可以接着

它被停止的那一时刻运行下去。

此选项将模型仿真钟设定到下一需要发生事件将要发生的时刻。然后那个事件发生。此

功能可以一个事件一个事件地单步执行模型。当许多事件预定将在同一时刻发生时,选择此选项时

可能看不到模型变化。

此选项重置并编译模型。

此选项打开 Simulation Experiment control(仿真实验控制)对话视窗。实验控制

器用来进行一个场景的多次重复运行,或者用户定义的多个场景运行。

158

Page 162: Flexsim handbook

Flexsim 使用介绍

模型视图

正投影 /透视视图正投影和透视视图视窗用来在 3D环境中查看和编辑仿真模型。正投影视图使用正投影平行投射,

一般在设计和建模阶段采用。透视视图视窗使用透视法投射,使得模型有更好的 3D 立体感,一般

在模型建立之后需要查看效果时采用。

159

Page 163: Flexsim handbook

Flexsim3.0 用户手册

在视图中随意移动

要在视图中随意移动,可点击模型中地板不放,然后在视图中四处拖动鼠标。此操作可以移动照相

机。要旋转视图,可点击模型地板不放,然后沿不同方向拖动鼠标。同时按住鼠标左右键,上下移

动鼠标,可以放大和缩小视图。也可以用鼠标滚轮放大和缩小视图。

160

Page 164: Flexsim handbook

Flexsim 使用介绍

在透视投影视图里工作时,可以用 F7键进行鼠标导引的视角推移。确定鼠标在视窗的中心位置,

然后按 F7键,上下移动鼠标就可以使得视角前后推移。左右移动鼠标就可以左右转向。结束后再按

F7键可退出模型视角推移。如果视图作为第一视角配置(设定视窗),则很容易进行导航。

移动实体

如要在 X/Y平面内移动实体,可点击实体不放,并拖动到目标位置。要沿 Z方向移动实体,则点击

实体然后滚动鼠标滚轮即可。也可以同时按住左右键来实现这一功能。要旋转实体,用鼠标左键单

击它并沿不同方向拖动鼠标。

要改变实体 x 和 y方向的大小,点击黄色方框底部右角的小球,拖动鼠标。要改变实体 z方向尺寸,

在这个小球上同时按住左右键,并上下移动鼠标。

161

Page 165: Flexsim handbook

Flexsim3.0 用户手册

连接实体

要连接模型中的两个实体,按住“A”键不放,点击某一实体不放,拖动鼠标到另一个实体,然后

在另一实体上释放鼠标。“A”键连接方法常用来连接输出端口到导入端口。也可以使用其它键连接。在

键盘交互章节里有详细描述

162

Page 166: Flexsim handbook

Flexsim 使用介绍

创建和编辑选择集

可以创建选择集来对整个实体集合进行多种操作。要将实体加入集合,可按住 Shift或Ctrl键,框住

想要选中的实体。按下 Shift 重置选择集,按下 Ctrl键将实体加入选择集。也可以按住 Shift或Ctrl键

用鼠标点击实体代替方框框选方式将实体加入选择集。

163

Page 167: Flexsim handbook

Flexsim3.0 用户手册

选择集中的实体被一个红色方框框住。

164

Page 168: Flexsim handbook

Flexsim 使用介绍

一旦建立了一个选择集,当对其中一个实体移动、转动和改变大小,都会引起选择集中其它实体的

移动、转动及改变大小。也可以通过编辑所选实体菜单对选择集执行若干操作。

菜单

正投影/透视视图视窗有三个主要的菜单。

• 设定菜单用来配置视图的绘制参数。

• 编辑所选实体菜单用来对选择集中的实体进行若干操作。

• 视图菜单用来存储先前的视图位置,以便在需要时快速找回那个位置。

• 视图还有弹出菜单,在视图中右键单击某一实体即呈现。

编辑实体的参数和属性

要编辑某实体参数,可左键双击实体,或右键单击实体然后在弹出菜单里选择“参数”。右键单击实

体,然后在弹出菜单里选择“属性”,可以编辑实体的属性。

165

Page 169: Flexsim handbook

Flexsim3.0 用户手册

平面视图平面视图用来在一个 2D 视图里编辑模型。它操作起来与正投影和透视视图很相似,只是不能转动

视点。另外,视图中的实体没有 3D 形状,只有 2D 图形。

166

Page 170: Flexsim handbook

Flexsim 使用介绍

正投影编辑器

正投影编辑器用来在同一个的视窗中执行大多数(如果不是所有的)建模工作。主 3D 视图和常规

正投影视图工作起来相似。视窗左边有一个小的图标栅格,可以从库里将实体拖动到模型中。视窗

底部是运行面板,与主运行面板相似。在视图右下方是模型的一个缩小视图。白色区域显示出主正

投影视图中看见的区域。在两个视图中的任一个中移动,另一个也会跟着改变。右下的视图可以快

速的移动到模型的不同部分。右边的面板有若干编辑小部件,说明如下。

数值 - 当实体一开始被选中时,此面板显示它的名称与位置、转角以及尺寸大小。如果在视图中移

动了这个实体,但是又需要撤销对其的改变,可以点击“应用”按钮,实体就会回到开始选中时的初

始位置。也可以直接导入数值来设定实体的位置、转角和大小。点击“参数”或 “属性”按钮打开实体的

参数或属性视窗,点击“更新”按钮重置这些域段来反映视图中所做的任何改变。

高亮实体 - 此面板显示所有在视图中被点击的实体的历史记录。当前活动实体四周有一个<>符号。

使用方向键“向上”和“向下”可以上下移动当前的活动实体,同时此实体在视图中被高亮显示。点击

“清除此记录”将实体从历史记录中去除。点击“清除所有”按钮来清除所有历史记录。点击“聚焦到高

亮”按钮到高亮实体可将视图的视点聚焦于实体。输入实体的名称并点击“高亮”按钮可以按名称高亮

实体。

167

Page 171: Flexsim handbook

Flexsim3.0 用户手册

编辑所选实体 - 此面板与正投影视图中的编辑所选实体菜单的功能相同。选中顶部的某类实体,然

后点击相应选项按钮。

键盘交互

在正投影或透视视图中工作时,可以使用若干快捷键来建立、定制和获取模型信息。下图显示了键

盘布局,图中用黄色高亮显示的键在与 Flexsim 交互中具有特定的含义。

关于快捷键的注释:必须在正投影或透视视图是激活视窗情况下,快捷键才能正常工作。在按下任

何键之前,应首先点击视窗的标题栏使得视窗激活。否则,快捷键只有在试第二次时才会生效。

A、J键:情景敏感连接

A键用来连接某些类型的两个实体。按住 A键点击此实体,按住鼠标键不放,拖动到另一个实体,

在那个实体上释放鼠标按钮。通常 A键连接是一个实体的输出端口到另一实体的输入端口。对于网

络节点,A键将其连接到作为移动物的任务执行器,或连接到作为移动路径关口的固定资源,或者

连接到作为移动路径的其它网络节点上。如果你习惯使用左手,也可以用 J键。如果你用 A键连接

两个实体,但是没有看见任何变化,首先去查看确认视图设定没有隐藏连接。如果仍没有变化,则

可能是那些实体不支持 A键连接。

Q、U键:断开情景敏感连接

Q键用来断开某些类型的两个实体的连接。按住Q键点击实体,按下并保持鼠标左键,拖动到另一

个实体,在其上释放鼠标按钮。通常使用 Q 来断开一个实体的输出端口到另一个实体的输入端口之

间的连接。对于网络节点来说,Q键断开一个网络节点与作为移动物的任务执行器,或者与作为移

动网关的固定资源之间的连接,并设定一条移动路径的单行线连接为“无连接”(红色)。如果习惯

使用左手,也可以用 U键。

168

Page 172: Flexsim handbook

Flexsim 使用介绍

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键,则会持续显示相关信息。

169

Page 173: Flexsim handbook

Flexsim3.0 用户手册

菜单与设定

查看正投影 /透视视图的视窗设定

170

Page 174: Flexsim handbook

Flexsim 使用介绍

此对话框可以通过在正投影或透视视图视窗中选择“设定菜单 ”选项打开。这些设定只适用于那些打

开了此对话框的视窗。它不会改变其它视图.

外观

这些参数影响视图视窗的外观。

背景颜色 - 此选项用来从标准Windows颜色方案选择对话框中选择视图视窗的背景颜色。

近切割面 - 此值设定视图中将要绘制的最近实体的值。

远切割面 - 此值设定视图中将要绘制的最远实体的值。

网格尺寸 - 此值设定视图视窗中网格线之间的距离。如果此数值太小,这些网格线将会太近以至

于将会降慢一些计算机上模型的速度。

连接端尺寸 - 此数值设定实体上端口连接端的大小。

连接端风格 - 此拾取列表用来设定增加/删除端口按钮是否都绘制在实体上,或者是否绘制在模型

不同的边上。

171

Page 175: Flexsim handbook

Flexsim3.0 用户手册

名称尺寸 - 此数值定义在视图视窗中绘制的实体名称的尺寸大小。写在实体下边的基本统计量也

会受到同样的影响。

名称风格 - 此拾取列表用来选择在何处绘制实体的名称,在实体下面还是在实体中央。

设置

这些参数值影响视图视窗的不同视景设定。

显示网格 - 如果此方框被选中,将在视图视窗中显示绘制网格。

向网格对齐 - 如果此方框被选中,当移动模型中实体时,将自动地与最近的网格线对齐。这有助

于精确布置实体位置。改变实体尺寸时也会捕捉网格对齐。

同步更新 - 如果此方框被选中,所有打开的视图视窗都会在同一时刻被更新。如果没有被选中,

一些视窗可能要等到另一个视窗中的某项动作完成之后才会被更新。选择此方框可能引起程序变得

慢一些。

第一视角 - 如果此方框被选中,视图视窗中的鼠标控制将会呈现第一视角模式。这意味着视图将

会随着视点转动,而不是围绕平面中心点。此模式在视角推进的导航中极为有用。

隐藏连接 - 如果此方框被选中,端口及端口连接线都不会在视图视窗中显示。这使得能够更容易

观看模型发生了什么。如果模型变慢了,选择此方框通常可以加快速度。

隐藏名称 - 如果此方框被选中,实体的名称和基本统计不会在视图视窗中绘制。这使得在模型运

行时,能够更容易观看发生了什么。

隐藏基面 - 如果此方框被选中,实体的 2D 基面将不在视图视窗中显示。通常这能使 3D 视图的效

果更好。

隐藏 3D 形状 - 如果此方框被选中,视图视窗将不显示所有实体的 3D 形状(.3ds 文件或.wrl 文

件)。有些实体没有相应的 3D 文件,他们一般是用 OpenGL绘制的。这些实体仍能看到。

忽略实体 - 如果此方框被选中,将无法点击视图视窗中的任何实体。这对于模型建好之后进行视

角导航很有用,可以避免不小心而移动了实体。

光源

这些控件用来为视图视窗添加、编辑和创建光源。

光源 - 此拾取列表包含视图视窗中所有的光源。

172

Page 176: Flexsim handbook

Flexsim 使用介绍

编辑 - 此按钮为当前显示拾取列表的光源打开光源编辑器对话框。

添加 - 此按钮将在视图视窗中创建一个新的光源。

删除 - 此按钮将删除拾取列表中列出的当前光源。模型中必须总是至少有一个光源。

查看平面视图的视窗设定

此对话框可通过在“平面视图”视窗中选择“ 设定菜单”选项打开。这些设定只影响打开此对话框的视

窗,而不会改变其它视图。

外观

这些参数影响视图视窗的外观。

网格尺寸-此值设定视图视窗中网格线之间的距离。如果此数值太小,这些网格线将会太近以至于

将会降慢一些计算机上模型的速度。

连接端尺寸-此数值设定实体上端口连接端的大小。

连接端风格-此拾取列表用来设定增加/删除端口按钮是否都绘制在实体上,或是否绘制在实体的

不同侧面。

173

Page 177: Flexsim handbook

Flexsim3.0 用户手册

名称尺寸-此数值定义在视图视窗中绘制的实体名称的尺寸。写在实体下边的基本统计量也会受到

同样的影响.

名称风格-此拾取列表用来选择在何处绘制实体的名称,可选择在实体下面,或在实体中央。

设置

这些参数影响视图视窗中的不同视景设定。

显示网格-如果此方框被选中,将在视图视窗中显示绘制网格。

向网格对齐-如果此方框被选中,当在模型中移动实体时,它会自动与最近的网格线对齐。这有

助于精确地布置实体位置。改变实体大小时也会捕捉网格对齐。

同步更新-如果此方框被选中,所有打开的视图视窗都会在同一时刻被更新。如果没有被选中,一

些视窗可能要等到另一个视窗中的某项动作完成之后才会被更新。选择此方框可能引起程序变得慢

一些。

隐藏连接-如果此方框被选中,端口及端口连接线都不会在视图视窗中显示。这使得能够更容易观

看模型发生了什么。如果模型变慢了,选择此方框通常可以加快速度。

隐藏名称-如果此方框被选中,实体的名称和基本统计不会在视图视窗中绘制。这使得在模型运行

时,能够更容易观看发生了什么。

隐藏基面-如果此方框被选中,实体的 2D 基面将不在视图视窗中显示。通常这能使 3D 视图的效

果更好。

忽略对象-如果此方框被选中,将无法点击视图视窗中的任何实体。这对于模型建好之后进行视角

导航很有用,可以避免不小心而移动了实体。

视图菜单

视图菜单用来捕获视图的当前镜头位置,并将其加入到一个视图列表中。

174

Page 178: Flexsim handbook

Flexsim 使用介绍

当一个视图位置被捕获后,它就被添加到视图的菜单中的一个列表中,如下图所示。选择其中一个

视图,该视图就会回到保存的镜头位置。

选择“删除一个选取的视图”,一个对话框就会出现,问你是否删除所选的视图。

注释:在模型中有两个全局保存的捕获视图列表,正投影视图列表和透视视图列表。所有正投影视

图与透视视图的列表不一样。

编辑所选实体菜单

“编辑所选实体”菜单可以在所有视图视窗的菜单条里找到(平面、正投影或透视)。它提供若干选项

可对视图视窗中当前选中的实体集进行操作。要选定一组实体,按住 shift 或 control键点击实体。被

选定的实体将被一个红色的方框框住。当前高亮实体(最后一个被点击的实体)周围被一个黄色方

框框住。

切换 - 此选项用来打开和关闭所选实体的不同设定。对于选定的集合中的所有实体,所选择的设定

将翻转(切换锁定)。也就是,当打开时选择此选项将关闭,反之,关闭的将打开。可用的拨动锁

定设定有:

•显示实体的名称和标签。

175

Page 179: Flexsim handbook

Flexsim3.0 用户手册

•显示实体的端口和端口连接。

•显示实体的 3D 形状。注意,直接用 OpenGL绘制的实体不会被隐藏。

•显示实体的 2D 形状(底面)。

•显示实体包含的内容。如果此选项关闭,在主实体里面的实体就看不见。

•激活实体的统计收集功能。

•保护实体。此选项锁定实体的位置、大小和转角。

从选定实体复制 - 这些选项复制高亮实体(黄色方框框住的实体)的信息到所有选择集中的实体

(红色方框框住的实体)。如果C++函数(如变量)被复制,模型运行前需要重新编译。可以复制

的数据包括:

• 单变量或标签:将会打开一个对话框,来指定需要从高亮实体中复制的变量或标签名称。

• 所有的变量:包括所有的 C++函数(例如触发器函数)。

• 所有标签

•空间属性值:此子菜单用来从高亮实体中复制空间属性值。可以一次复制整个 x/y/z向尺寸、位

置和转角,或者单独复制 x、y、z向的属性。

• 形状因素:此选项用来用复制空间属性值的方式从高亮实体中复制形状要素。

• 3D 形状、2D维形状及颜色等可视化信息。

连接 - 此子菜单用来在高亮实体与选择集之间建立拖动连接。

176

Page 180: Flexsim handbook

Flexsim 使用介绍

• A连接选中实体-到:此选项建立从选择集里所有实体到高亮实体的 A拖动连接。

• A连接选中实体-从:此选项建立从高亮实体到选择集里所有实体的 A拖动连接。

• S连接选中实体-与:此选项建立从选择集里所有实体到高亮实体的 S拖动连接。

• Q断开连接选中实体-从:此选项建立从高亮实体到选择集里所有实体的 Q拖动连接。

• Q断开连接选中实体-到:此选项建立从选择集里的所有实体到高亮实体的 Q拖动连接。

• W断开连接选中实体-与:此选项建立从高亮实体到选择集里所有实体的 W拖动连接。

• 复制高亮实体的连接:此选项将高亮实体的输入、输出和中间端口连接复制到选择 集里所有的

实体中。

设定名称 - 此选项打开一个对话框来设定选定集合的名称。输入想要的名称,然后如果想在名称后

面附加数字,就选中此选项复选框。

移入选中实体 - 此选项将选择集里的实体(红色方框框住的)移入高亮实体(黄色方框框住)中。

这使得高亮实体可以用作容器.

保存到文件 - 此选项将选中的实体保存到一个以.t为扩展名的文件中,以后可以用 Flexsim 重新打

开此文件。这项功能可以根据用户需要保存和导入模型的一部分。

从文件导入 - 此选项将一个.t 文件载入到当前高亮实体。高亮实体成为导入实体的容器。

复制 - 此选项建立一个选定集合的相同复本。所有的端口连接都保留。

全选 - 此选项将模型中的所有实体加入选定集合。

撤销全选 - 此选项将模型中的所有实体从选定集合中剔除。

正投影 /透视视图的弹出菜单

177

Page 181: Flexsim handbook

Flexsim3.0 用户手册

展开树 - 此选项打开一个树视窗,在里面可以用树的形式管理实体。如果没有实体被选中,树视窗

将显示管理整个模型。

展开结构 - 此选项打开一个树视窗来查看正视图视窗本身的树结构。

在正投影中查看 - 此选项打开一个新的正投影视窗,在里面显示所选实体的内容。通常只对可视

化工具实体使用此选项,它作为其它实体的容器使用。如果没有实体被选中,则打开一个新的模型

的正投影视图。

设为被选实体 so() - 此选项指定实体作为 so()。通常在脚本视窗中写代码时使用此项功能。

设为被选视图 sv() - 此选项指定正投影视图作为选中视图。通常在脚本视窗中写代码时使用此项功

能。

添加到用户库 - 此选项将所选实体添加到当前激活的用户库。

捕获屏幕 - 此选项捕获当前的屏幕,将其保存为一个位图文件到 flexsim 的打印文件夹。也可通过

选中激活视图并按 P键的方式来实现。

重置实体 - 此选项重置选中实体的 x/y/z旋转角度和 z方向位置到 0。

重置视图 - 此选项将视图的镜头退回到起始位置。

178

Page 182: Flexsim handbook

Flexsim 使用介绍

参数 - 此选项打开实体的参数视窗。

属性 - 此选项打开实体的属性视窗。

光源编辑器

X坐标位置-此数值是光源在模型的 X轴方向的坐标位置。这个数值与每个实体的位置相关。

Y坐标位置-此数值是光源在模型的 Y轴方向的坐标位置。这个数值是相对于每个实体的位置

Z坐标位置-此数值是光源在模型的 Z轴方向的坐标位置。这个数值与每个实体的位置相关。

颜色-用来在标准Windows颜色选择对话框中改变光源发出的灯光颜色。

作为点光源-如果被选中,光源发出的灯光相对镜头看上去就是从一个特定的点发出的。如果没有

被选中,光源发出的光就从同一方向射来的平行光。

视窗与对话框

属性提示属性提示视窗显示 Flexsim 的特殊属性以及其含义的列表。进入此视窗,键入想要了解的属性名称,

视窗就会滚动到那个属性位置。

179

Page 183: Flexsim handbook

Flexsim3.0 用户手册

命令提示在此视窗中,可以快速获得命令提示以及他们所用的参数。进入视窗,键入想要了解的命令名称,

视窗将会滚动到那个命令。如果在其它视窗敲入代码时,此视窗是打开的,此视窗也会自动滚动到

所键入的命令。

180

Page 184: Flexsim handbook

Flexsim 使用介绍

命令集可通过帮助|命令集菜单选项访问命令集视窗。此视窗用来查找 flexscript/c++的命令、其参数列表、功

能解释及其用法举例。视图顶部的组合框用来从所有可能的命令中选择某个命令。视窗中央的主面

板按照类型选择给出命令列表。点击“显示所有”按钮可以在主面板中显示所有类型。在底部的组合框

181

Page 185: Flexsim handbook

Flexsim3.0 用户手册

中选择一类别,主面板就只显示这一类的命令。键入某命令名称然后点击“细节”按钮,有关此命令

的描述就显示出来。也可以在顶部点击组合框,然后键入命令名称,视窗将自动滚动到此命令处。

双击主视图中的一个词,该词就会自动进入底部的文本输入框中。

完成提示

182

Page 186: Flexsim handbook

Flexsim 使用介绍

完成提示视窗用来在键入代码时获得命令提示。当在脚本编辑器或者代码视窗中键入代码时,完成

提示视窗将为正在键入的命令提供相关提示。

183

Page 187: Flexsim handbook

Flexsim3.0 用户手册

查找替换查找/替换对话框用来在项目中搜索和替换文本或数字。键入想要的文本或数字。

查找内容 - 在这里键入想要查找的文本或数字,然后点击“查找”按钮。

替换为 - 键入想用来替换的文本,然后点击“替换”按钮。

开始于对象 - 这是一个到达某节点的路径参考,从这里开始搜索。可以直接键入路径,或者选用右

侧提供的三个浏览按钮中的一个,浏览找到该节点。浏览按钮将打开一个浏览树对话框。

字符串数据 /数值数据/节点名称 - 选择三个单选按钮中的一个来选择要在树中搜索的数据类型。

输出

点击了查找或者替换按钮后,就会出现输出控制台,并报告那些已被找到,或已被替换的数据的

位置信息。

184

Page 188: Flexsim handbook

Flexsim 使用介绍

字体视窗字体视窗用来设定被编辑文本的字体和大小。

字体风格 - 指定字体、文本尺寸等。点击右边的“…”按钮选择一种字体和大小。

颜色 - 此面板显示高亮显示代码时的颜色。点击右边一种颜色按钮可以改变某给定代码类型的颜色

高亮 - 可以在此面板中指定哪些类型的代码高亮显示,哪些代码不高亮显示。

185

Page 189: Flexsim handbook

Flexsim3.0 用户手册

库图标栅格

可从库图标栅格中把实体拖到模型中。用鼠标点击按住要添加到模型中的实体不放,拖动到正投影

视图、透视视图或平面视图中,在需要放置的地方释放鼠标。在视窗顶部提供了三个不同的类组供

选择:标准实体、固定资源和可移动资源,其中标准实体组用的最多。

186

Page 190: Flexsim handbook

Flexsim 使用介绍

模型例库

从模型例库对话框中可以装载示例模型及其说明。从列表中选择一个示例模型,点击“导入示例模

型”按钮。点击“察看模型描述 ”按钮可以察看此模型的说明。

187

Page 191: Flexsim handbook

Flexsim3.0 用户手册

标准报告

标准报告生成器用来创建模型的输出报告。Flexsim 以属性列表形式为用户定义的模型属性提供报

告。在建立需要报告的模型属性列表后,点击 “生成报告”按钮,就会创建报告并输出到 Excel 中。

.

标准属性 - 此列表用来选择标准属性,诸如容量、停留时间、状态变量等。按顶部的 按钮将选

中的属性添加到要生成报告的属性列表中。

用户定义属性 - 可由此键入想要输出报告的标签或变量的名称,点击底部的 按钮将选中的

属性添加到报告列表中。例如,如果一个或多个暂存区都有一个叫做“lastreditem”的标签,你需要

关于所有这些标签及其值的报告,则可以在此域段中键入“lastreditem”然后点击 按钮。

添加入报告的属性 - 这是一个将要报告的属性的列表。要从列表中移除某一项,只要选中并

按 按钮即可。

整个模型的信息报告 - 如果此复选框被选中,将对模型中所有实体进行报告。否则,只对选中对

象进行报告。

188

Page 192: Flexsim handbook

Flexsim 使用介绍

高级 - 点击此按钮为诸如 Excel 的电子表格软件指定替代路径。

生成报告 - 点击此按钮生成报告。

跟踪调试器

跟踪调试器用来获取特定事件发生时的信息以及发生的时刻。输入跟踪开始和结束时间,点击想要

跟踪事件的复选框。当某实体的创建事件执行时调用定时事件触发器。当某实体接收临时实体时调

用接受触发器。当某实体输送临时实体到下游时调用发送触发器。当一个消息送到某实体时调用消

息触发器。

189

Page 193: Flexsim handbook

Flexsim3.0 用户手册

树浏览对话框

此对话框用来浏览树中某个节点。不同的情况选择节点的目的也不同。有时使用此视窗选择开始节

点进行查找/替换操作。有时使用此视窗在实验控制器中选择实验变量。

在树视图中点击想要选择的节点,然后点击选择按钮。此视窗会关闭,回到原来的视窗中。

190

Page 194: Flexsim handbook

Flexsim 使用介绍

树视窗

树视窗用来在 Flexsim 树结构中进行导航,查看或设定实体的属性、编写代码和进行其它操作。在树

视图空白处点击鼠标,随意移动鼠标就可以在视窗中随意移动。也可以用鼠标滚轮和 page up/page

down键在树视窗中上下滚动。如需要更多信息,请参考 Flexsim 树结构。

191

Page 195: Flexsim handbook

Flexsim3.0 用户手册

树编辑器树编辑器用来对模型树进行多种操作。左边是一个常规树视窗,右边是若干用来组织模型树的编辑

部件。

192

Page 196: Flexsim handbook

Flexsim 使用介绍

选中对象 - 此面板用来编辑处于高亮状态的实体。点击参数或属性按钮,可以打开实体的参数或属

性视窗。“排序^”或 “排序 v”按钮可以在树中上下移动实体。点击“首位”按钮可将实体移到树的顶端,

点击“末位”按钮可移动到树的底部。键入排序号然后点击“设置排序”按钮可将实体排到树的指定位置

点击“获取排序”按钮,所选实体的排序序号将写入按钮右边的文本中。点击“选择”按钮添加实体到选

择集,点击“取消选择”按钮将实体从选择集中移除。

编辑所选实体 - 此面板提供绝大多数与正投影实体中的编辑选中实体菜单相同的功能。它也用来操

纵选中对象。 的排序。点击“分组 ”按钮可将所有选中实体集中成组。点击“排序^”或“排序 v”按钮可以

在树中上下移动实体。点击“首位”按钮可将实体移到树的顶端,点击“末位”按钮可移动到树的底部。

树移动 - 此面板用来随意移动树的视点。点击 “归位” 按钮可回到树的顶端,点击“树^”或“树 v”按钮

可上下翻页,点击“树^^”或“树 vv”按钮可上下翻两页。

193

Page 197: Flexsim handbook

Flexsim3.0 用户手册

数据库表视图

可从视图菜单中打开此表视图。它显示当前激活的数据库表。数据库表可用命令 dbopen()打开。参见

命令集可以获得更多信息。

194

Page 198: Flexsim handbook

Flexsim 使用介绍

表编辑器

表编辑器用来编辑 Flexsim 中的简单表格。

名称 - 表格的名称。名称应容易记忆并具有描述表的功能。读写表的命令通过名称获得它们。

行数 - 表的行数。改变此数字后,点击 “应用”按钮来更新屏幕上的表。然后就可以编辑新建立的行

了。

列数 - 表的列数。改变此数字后,点击 “应用”按钮更新屏幕上的表。然后就可以编辑新建立的列了。

高级 - 此选项打开表格配置视窗,用来定制专用的表。

编辑表

点击表中的单元,然后键入数据,就可以对表格单元进行编辑。用箭头键在单元间移动。单元默认

接受数字数据,也可以通过右键单击单元格选择“插入>添加字符串数据”来输入字符串值。

195

Page 199: Flexsim handbook

Flexsim3.0 用户手册

模型文档

模型文档对话框用来创建一个文档(.doc)以记录模型信息。选中需要记录信息的相应复选框,然

后点击“生成模型文档”按钮就可以建立文档。

196

Page 200: Flexsim handbook

Flexsim 使用介绍

应用程序路径浏览器

程序路径浏览器用来浏览文件,查找其它应用程序的位置,以查看 Flexsim 输出的数据。可能找到

一个文字处理程序如 word,或者电子表格编辑程序如 excel等等。点击“浏览”按钮,在硬盘里寻找

打开此文件的程序。

197

Page 201: Flexsim handbook

Flexsim3.0 用户手册

Flexsim 概念

何时编译 Flexsim?

只要进行了下列任一操作时,在再次运行之前都必须重新编译 Flexsim。

• 从“文件菜单”里打开模型、项目或者整体文件。

• 在模型中创建新的实体。可能是从库图标栅格中拖动一个新的实体到正投影/透视视图,或者到

平面视图,也可能是在模型中复制选中的实体,或从用户库中创建实体。

• 在工具箱里添加工具。

• 编辑下拉菜单。

• 从高亮实体复制变量到其它任意实体集。

• 编写外部的 c++代码。

只要进行了下列操作之一,就必须重置模型,但不需要重新编译模型。

• 编辑一个常规编辑域段,如实体名称或暂存区的最大容量变量。

• 建立实体之间的连接

• 编辑表格、列表、输送机分段等。

198

Page 202: Flexsim handbook

Flexsim 使用介绍

Flexsim 树结构介绍

Flexsim 是完全采用树型数据结构的概念设计的。Flexsim 的所有信息全部包含在 Flexsim 树中,包

括库实体、命令以及所有的模型信息。数的层次由相互独立的节点构成,这些节点链接在一起,并

存储信息。

节点

节点是构建 Flexsim 树的模块。所有节点都有一个包含名称的文本。节点可以包含其它节点,可以是

用来定义实体属性的关键字,或者有一个数据项。

可以附在节点上的数据项类型是:数字、字符串、实体或者指针。右键单击节点,进入“插入”菜单选

项,就可以将数据附于节点上。添加到节点的选项有四个。可以使用快捷键来添加数字、字符串(文

本)、实体和指针数据,分别是 N、T、O 和 P键。点击节点,按下相应的快捷键,就可以给节点添加

数据。节点也可以含有可执行代码。要使一个节点成为可执行节点,第一步为节点添加字符串数据

然后拨动锁定此节点为C++或 Flexscript 节点。右键单击节点,进入“生成”菜单,就可以拨动锁定此

节点为C++或 Flexscript 节点。

不同类型节点的符号如下:

标准:

实体:

属性/变量:

函数 (C++):

函数 (FlexScript):

可以在树中添加和删除节点。点击节点,按删除键就能删除节点。右键在已存在的节点上单击,然

后选择“编辑|插入”,就可以为树增加节点,这样一个新的节点即刻就会插入进来。此操作的快捷键

是在先高亮该节点之后击空格键。

199

Page 203: Flexsim handbook

Flexsim3.0 用户手册

节点也可以包含子节点列表,称为内容分支。如果节点包含子节点,可以通过点击 按钮展开它。

选择 “编辑|插入到”菜单,或者敲击快捷键“回车”键可以将一个节点插入到已存在的节点内容中。

含有实体数据的节点可能包含第二个子节点列表,此列表可能包含于树的另一个独立分支中。此子

节点列表叫做实体的属性树,里面包含描述实体属性的数据。一个包含实体数据的节点通常叫做实

体节点。当点击实体节点时,可以看见在节点左边有一个较大的 图标。点击此按钮将会打开实

体的属性树分支。

下图显示了库树中的暂存区实体的一个展开实体属性树

有实体数据的节点,属性树可以包含许多特殊的属性节点。如果一个节点在实体里面,且有一个关

键属性名称,则对这个实体来说,它将拥有特定的含义。属性的实际含义取决于属性本身和实体的

类型。例如,对实体位置属性,有:“spatialx”、“spatialy”、“spatialz”。Flexsim 中的变量属性列表可以

在属性提示中找到。

除了包含模型、库和项目信息之外,Flexsim 也存储所有的视窗和界面信息。所有打开的视窗、菜单、

工具条以及按钮都在 Flexsim 树中有相应的体现。我们称这些类型的节点为视图对象。

常规组织树

Flexsim根树的结构分成两部分,分别是项目树和视图布局树。

项目树包含可执行数据、库和模型。

视图布局树包含视窗、编辑器和其它用户界面的信息。它也管理激活视窗。

project(项目)树:

要查看项目树可点击主菜单选项:视图|系统信息|主树。项目树以最基础层次包含项目。每一个项目

都含有如下极其重要的子树:可执行、库、模型、撤销和媒体文件。

200

Page 204: Flexsim handbook

Flexsim 使用介绍

exec(执行)

此树包含仿真的可执行数据。其中有仿真时间、事件表以及其它关于模型运行的信息。

library(库)

模型中使用的实体库。

model(模型)

仿真模型。

undo(撤销)

保持撤销历史记录。此节点的数值是能够撤消的步数的限制。如果没有数值,就不能执行撤销。也可

以全局禁止撤销功能。

media 媒体文件

存储图形、3D 模型和声音。

视图布局树:

点击主菜单选项:视图|系统信息|视图树,可以查看视图布局树。视图树包含创建实体、存储实体以

及使用实体图形用户界面的信息。

201

Page 205: Flexsim handbook

Flexsim3.0 用户手册

在 Flexsim 中编写逻辑

C++的所有能力在此均可应用。但是作为一个 Flexsim 的建模人员,只需要知道一小部份命令就可

以建立非常复杂的模型。

从何处获得帮助

当想要知道用什么命令以及怎么使用而需要帮助时,可以参考命令集和命令提示视窗。在这些视窗

中可以快速获得需要的信息。

一般规则

下面是建立用户逻辑时需要知道的一般规则。

• 语言对大小写敏感(A 不同于 a)

• 不需要特殊的格式(鼓励灵活运用空格、制表位以及语句换行)

• 如果不明确说明,数值都是双精度的浮点值

• 文本字符串通常用双引号引起来,如“mytext”

• 函数之后有圆括号,用逗号分隔函数的参数,如 moveobject(object1,object2)。

• 函数或命令总是以分号结尾

• 圆括号可以在数学或逻辑表达式中自由应用生成组合

• 尖括号用来定义程序块

• 用//将一行的其余部分注释掉

202

Page 206: Flexsim handbook

Flexsim 使用介绍

• 在命名时不要使用空格或特殊字符

• 名称变量和明确的值可以在表达式中互换使用

数学运算符

下列给出了用于数值计算的各种数学运算符。

运算符 浮点数示例 (=结果) 整数示例 (=结果)

+ 1.6+4.2 (=5.8) 2+3 (=5)- 5.8-4.2 (=1.6) 5-2 (=3)* 1.2 * 2.4 (=2.88) 3*4 (=12)/ 6.0/4.0 (=1.5) 20/7 (=2)

% (整数取模) 34%7(=6)

sqrt() sqrt(5.3) (=2.3) pow() pow(3.0,2.2) (=11.2) pow(3,2) (=9)round() round(5.6) (=6) frac() frac(5.236) (=0.236)

fmod() (浮点数取模)fmod(5.3,2) (=1.3)

注意,Flexsim 中默认数值为双精度浮点数,所以编写逻辑的时候通常要把运算符当作是适用于浮

点数运算的。

变量的比较

下表给出了比较两个数值或变量的运算符。

运算符 示例 (结果)

> (大于) 1.7>1.7 (假)

< (小于) -1.7 < 1.5 (真)

>= (大于等于) 45 >= 45 (真)

<= (小于等于) 45 <= 32 (假)

== (等于) 45 == 45 (真)

!= (不等于) 45 != 35 (真)

comparetext() comparetext(getname(current), "Processor5)

关系变量

下表给出了关联几个比较的不同逻辑运算。

203

Page 207: Flexsim handbook

Flexsim3.0 用户手册

运算符 示例

&& (逻辑 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 = 175.8;string category = “groceries”;fsnode* nextobj = next(current);

命令的执行

204

Page 208: Flexsim handbook

Flexsim 使用介绍

在 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

循环一样。在每次循环的最后执行记数表达式,通常是递增某些变量,来标记一次重复的结束。

205

Page 209: Flexsim handbook

Flexsim3.0 用户手册

程序结构 示例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; }}

206

Page 210: Flexsim handbook

Flexsim 使用介绍

基本建模函数和逻辑表达式这里给出 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)

207

Page 211: Flexsim handbook

Flexsim3.0 用户手册

实体属性

命令(参数列表) 说明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轴向的旋转角度

208

Page 212: Flexsim handbook

Flexsim 使用介绍

实体统计值

命令(参数列表) 说明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 )

返回表中特定行列的值

209

Page 213: Flexsim handbook

Flexsim3.0 用户手册

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 ) 在所有停止输入请求都恢复以后,打开实体的输

入端口

210

Page 214: Flexsim handbook

Flexsim 使用介绍

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();

211

Page 215: Flexsim handbook

Flexsim3.0 用户手册

数据交换命令 - 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。

212

Page 216: Flexsim handbook

Flexsim 使用介绍

进行运动学操作的第一步是调用 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方向都前进 3.5 个单位。后一种情况,实体将依照模型的坐标空间在 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 ] )

这个参数集用来直接传递初始位置和转角,而不是传递一个引用的实体。虽然当要把实体传递给参

数时可能更经常使用其它参数,但此参数集可以使你更为灵活。当你需要直接传递实体的初始位置

和转角时,或者当模型中位置和转角不必代表实际位置和参数的时候,可以使用这个参数集。例如

213

Page 217: Flexsim handbook

Flexsim3.0 用户手册

模拟一个机器手的运动,它有多个关节,分别进行不同的移动/转动,各有不同的加/减/最大速度。

机械手运动的可视化展示不是通过直接的 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: 0endspeed: 0

214

Page 218: Flexsim handbook

Flexsim 使用介绍

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 参数。

215

Page 219: Flexsim handbook

Flexsim3.0 用户手册

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 分量。

216

Page 220: Flexsim handbook

Flexsim 使用介绍

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 参数。

217

Page 221: Flexsim handbook

Flexsim3.0 用户手册

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 是用户想要打印其相关信息的已添加运动的索引号。

状态列表下面是状态序号列表和它们各自的宏。当编写必须设定实体状态的代码时,例如采用 stopobject()命

令或者 utilize task(使用任务),可以将这些宏代替以数字。参考库实体,可获得更多关于每个实

体的每个状态含义方面的信息。

218

Page 222: Flexsim handbook

Flexsim 使用介绍

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 (使用)

219

Page 223: Flexsim handbook

Flexsim3.0 用户手册

3D 媒体

使用帧

一组帧是用一个共用名称绑定在一起的多个 3D 形状画面。

file.3ds/fileFRAME1.3ds

如果一个实体使用包含多个帧的 3D 形状,则此实体的形状的显示可以用 setframe()命令改变。

• 0 是基础帧“file.3ds”

• 1 是第一个帧“fileFRAME1.3ds”

• 2 是第二个帧“fileFRAME2.3ds”

• N 是第 N 个帧“fileFRAMEn.3ds”

帧可用来:

• 显示固定资源的不同状态

• 显示临时实体生命周期里的不同阶段

• 原材料

• 中间产品

• 成品

• 当一个实体需要显示不同 3D 形状时,可以简化形状变化过程

准备帧

要准备一组 3D 形状画面当作帧使用,可按下面做:

1. 收集两个或更多需要用于同一实体的帧的形状;

2. 将帧保存为同类型的文件(3ds, wrl);

3. 确保每个帧都使用了基本文件的.xds 文件,或者至少没有被它损坏(每一帧可以有自己的.yds

文件);

4. 给帧文件适当命名。第一个文件是“name.3ds”或“name.wrl”,每个继承文件是

“nameFRAME#.3ds”或者“nameFRAME#.wrl”,例如 Queue.3ds, QueueFRAME1.3ds,

QueueFRAME2.3ds等。

220

Page 224: Flexsim handbook

Flexsim 使用介绍

采用导入 3D 媒体部分中的步骤可以导入帧。使用基本实体作为选中文件的名称。然后,在仿真中,

使用 setframe()和 getframe()命令设定想要展示哪个帧。0 表示基本帧:file.3ds,1 表示第一个帧:

fileFRAME1.3ds等等。

导入 3D 媒体

Flexsim 可以导入几种类型的 3D 媒体,包括 3ds、wrl 和 dxf 和 stl 文件。导入方法有两种:第一种,

也是最普遍的一种,从实体的可视化属性页选中一个 3D 文件即可导入;第二种,如果有一些未被

任何模型实体默认使用的 3D 媒体文件,但需要在模型运行过程中使用这些 3D 媒体文件来动态改

变模型实体的 3D显示,那么,可以用媒体导入器明确地导入媒体文件。

下面是一些如何正确导入媒体的提示和建议。

关于导入 wrl 文件的注释:Flexsim只能导入 VRML1.0 版本的形状,2.0 版本的不可以。

关于导入 stl 文件的注释:Flexsim只能导入 stl ascii 文件, stl二进制文件不可以。

使用形状因子

每一个导入的媒体文件都有特定的缩放比例和偏移量设置,这可能导致所导入的 3D 模型与实体的

边界不符。这种情况下,从可视化属性页视窗中编辑实体的 3D 形状因子,使它在实体黄色边界框

内。

使 3D 实体显示 Flexsim 定义的颜色

当你自己设计,或者从互联网上获取 3D 文件时,它们常常可能在 3D 模型中预先定义颜色和素材。

如果导入到 Flexsim 中的 3D 实体上定义了素材,则将显示这些素材,而不是在 Flexsim 中定义的

颜色。如果需要实体的 Flexsim颜色显示在 3D 实体上,则需要改变 3D 文件的顺序。在 3D 文件中,

多边形的颜色显示必须在定义任何素材之前定义。这需要技巧来完成,并取决于所使用的 3D 建模

程序。

3D帧

221

Page 225: Flexsim handbook

Flexsim3.0 用户手册

使用 3D帧可以使实体更栩栩如生。对于任何 3D 文件均可为其指定帧,可通过创建不同的 3D 模型

然后将其存储为<原始文件名> FRAME<帧号>.3ds 来实现。例如,操作员的原始 3D 文件是

Operator.3ds。如果用命令 setframe(current, 0)设定其帧为 0,就会绘制这个图形。它的其它帧定义

在 OperatorFRAME1.3ds、OperatorFRAME2.3ds等中。如果调用 setframe(current, 3)命令,操作

员将绘制<原始文件名>FRAME3.3ds 中指定的 3D 文件。

细节层次

你可以为给定的 3D 文件指定多个层次的细节。这能够明显地增加模型绘制速度。离实体越远,绘制

的细节越少,这样可以提高速度。

导入 AutoCAD 图形下面是导入 AutoCad dxf 文件之前须准备的步骤:

1. 消除所有不必要信息。AutoCAD 文件通常包括许多不必要的信息。消除这些信息可以使得

模型更加简洁,并减少显卡的负担。结果是更容易建模和展示模型。

2. 根据 Flexsim 的单位调整缩放比例:AutoCAD 文件不必以英尺或米为单位来绘制,导

入到 Flexsim 中时可能需要重新调整缩放比例。为确定比例大小,按如下几步操作:在

AutoCAD 中测量一段已知距离(_dist),应用下面的方程式:比例因子=Flexsim距离/

AutoCAD距离。要在 AutoCAD 中调整实体比例,步骤如下:选择需要调整比例的实体;

在命令栏里键入“_scale”或者在菜单中选择比例命令;指定参考点;在命令栏中键入合适

的比例因子。

3. 将实体移动到原点:AutoCAD 图形通常使用特定的坐标系。这总是意味着实体通常不在

原点(0,0,0)附近。导入一个实体不在原点附近的 dxf 文件通常导致看不到导入的形状。在

AutoCAD 中移动实体的步骤如下:

1. 选中要移动的实体;

222

Page 226: Flexsim handbook

Flexsim 使用介绍

2. 在命令栏中键入“_move” ,或者在菜单里选择移动命令;

3. 指定参考点;

4. 在命令栏里键入所需要的位置。

4. 拆分复杂实体:Flexsim只能导入基本的形状,所以将 AutoCAD 图形中的所有复杂实体

拆成基础形状十分重要。在 AutoCAD 中拆开复杂实体的步骤如下:

1. 选中要拆分的实体;

2. 在命令栏中键入“_explode” ,或者在菜单里选择拆分命令;

3. 重复上面的步骤直到没有其它拆开了的实体。

在 Flexsim 中:

1. 拖动一个可视化工具到模型中,打开参数视窗。

2. 在“视景显示 ”中选择“导入形状”。

3. 在“文件名 ”域段中选择想要导入的 AutoCAD 文件。

4. 在想要导入媒体文件的可视化工具上设定最小放大倍数为 0。

5. 设定最大距离(通常可设 100000,除非希望当移动视图时绘制的图形不可见)

细节的层次(LOD)

LOD 文件是由一个共用名称绑定在一起的逐步简化的 3D 形状,这个名称是:

file.3ds / fileLOD1.3ds

如果一个实体使用有 LOD 的 3D 形状,则此实体显示的 3D 形状取决于实体到视图镜头位置的距离。

• 0 是基本 LOD“file.3ds”

• 1 是第一个 LOD“fileLOD1.3ds”

• 2 是第二个 LOD“fileLOD2.3ds”

223

Page 227: Flexsim handbook

Flexsim3.0 用户手册

• N 是第 N 个 LOD“fileLODn.3ds”

LOD 文件用来显示实体的不同层次,观察者近时显示较高层次的实体,观察者远时显示较低层次

的实体。LOD提高模型在视图视窗中的显示速度。LOD 通过在给定时间上仅仅显示少数几个高层次

的重要多边形形状,可以使模型采用更多的多边形增强 3D 形状。

准备 LOD 文件

要使用一个 LOD 文件,须准备一组 3D 形状,操作如下:

1. 收集两个或更多用于同一实体的 LOD 的形状;

2. 获得保存为同样类型(3ds, wrl)的 LOD 文件;

3. 确保每个 LOD 文件都使用了基本文件的.xds 文件,或者至少没有被它损坏(每一帧都可以有

自己的.yds 文件);

4. 为 LOD 文件适当命名。第一个文件为“name.3ds”或“name.wrl”,每个继承文件分别为

“nameLOD#.3ds”或者“nameLOD#.wrl”,例如 Queue.3ds, QueueLOD1.3ds,

QueueLOD2.3ds等。

导入 LOD 文件可按照导入 3D 媒体部分中所采用的步骤。使用基本实体为选中的文件命名。

LDS/LRL 文件

lds / lrl 文件用来确定不同 LOD 文件显示的距离。lds / lrl 文件必须与它们要修改的实体的名称相同,

如:

• crane.3ds – crane.lds • crane.wrl – crane.lrl

lds / lrl 文件信息

lds/lrl 文件是由行隔开的三个数字组成的文本文件:透视射程值,透视射程模式,和正投影射程值。

224

Page 228: Flexsim handbook

Flexsim 使用介绍

透视射程值是将要在透视视图视窗中改变 LOD 文件的距离值。透视射程模式值是 1或 0,0 表示线

性(稍快),1 表示逆距离(在远距离上有更多覆盖)。正投影射程是将要在正投影视图视窗中改

变 LOD 文件的距离值。

准备 3D 文件为导入而准备 3D 文件的步骤如下:

减少多边形的数量

225

Page 229: Flexsim handbook

Flexsim3.0 用户手册

3ds 和 wrl 文件通常包含许多不必要的信息。移除过多的多边形将会提高模型的视觉效果,这将使

建模和模型展示更容易。

纹理与多边形

采用制作出色的纹理可以帮助建模人员减少所需多边形的数量,而达到真实外观的效果。下面是几

张 Flexsim 中只有很少多边形的 3D 文件。

226

Page 230: Flexsim handbook

Flexsim 使用介绍

调整比例

3D 文件无需按照英尺或米的单位绘制,因此在导入 Flexsim 后可能需要调整比例才能正常工作。调

整 3D 文件比例的方法有三种:

1. 在 3D 程序里适当调整比例;

2. 调整此文件导入的可视化工具或其它实体的比例;

3. 使用 xds或 xrl 文件。

如果要想调整此文件导入的可视化工具或其它实体的比例,则需要将 3D 实体的比例设为 1,1,1。

227

Page 231: Flexsim handbook

Flexsim3.0 用户手册

将实体移动到原点

3D 图形在绘制时,有时采用特殊的坐标系。这通常意味着实体不在原点(0,0,0)附近。导入一个实

体不在原点附近的 3ds或者wrl 文件通常导致看不到导入的实体形状。因此,需要将 3D 实体移动到

原点,或者用 xds或 xrl 文件来进行适当的调整。

XDS/XRL 文件

xds / xrl 文件用来使导入的 3D 文件形状与要使用他们的实体形状相一致。xds / xrl 文件必须与它们

要修改的实体的名称相同。如:

• crane.3ds – crane.xds • crane.wrl – crane.xrl

xds / xrl 文件信息

空间属性值决定 3D 形状的最后尺寸。偏移值是使 3D 形状零出并将尺寸设定为 1,1,1 所需的值。质

心值是 1或 0,决定实体是围绕实体中心还是左上角旋转。

xds / xrl 文件组成

xds / xrl 文件是由 13 个数值组成的文本文件,数值间由回车分隔。可以使用文本编辑器或者写字板

编辑此文件,如下所示:

DS / YRL 文件

yds / yrl 文件可使导入的 3D 形状具有更好的效果。yds / yrl 文件必须与它们所调整的实体同名。如

228

Page 232: Flexsim handbook

Flexsim 使用介绍

• crane.3ds – crane.yds • crane.wrl – crane.yrl

yds / yrl 文件信息

yds /yrl 文件是由 3 个数值组成的文本文件,数值间由回车分隔。可以使用文本编辑器或者写字板来

编辑此文件,如下所示:

1. 亮度值决定 3D 形状是否会受 Flexsim灯光影响。

2. 剔除背面值决定 Flexsim 是否绘制每个多边形的两面。如果导入的形状看起来是背向的或者奇

怪的,将此值设为 1。

3. 折角值是 Flexsim 将停止光滑 3D 形状尖角的角度值。

导入 3d 文件到 Flexsim

按如下步骤将 3d 文件导入到 Flexsim 中:

1. 建立可视化工具;

2. 为视景显示选择“导入形状”;

3. 在“文件名”域段中选择想要导入的 3D 文件;

4. 设定最小放大倍数(通常为 0,除非希望在确定放大倍数下看不到图形);

5. 设定最大距离(通常 100000,除非希望在图中移动视图时看不见图形)。

按如下步骤改变已存在实体的形状:

1. 到某实体的属性页;

2. 在“3D 形状”域段中选择要导入的 3D 文件

229

Page 233: Flexsim handbook

Flexsim3.0 用户手册

透明度

可以用.tmp 和.tpg 文件类型为 3D 实体添加透明度。.tmp 和.tpg 文件是灰度比例文件,决定着相应

的.bmp或.jpg 文件的透明度。

对于.tmp或.tpg 文件来说,白色是不透明的,而黑色是透明的,所有灰度是在透明中。纹理和透明

文件的名称必须与原始的.bmp或.jpg 文件一致,且必须在同一个文件夹下。例如,如果纹理

Flexsim.bmp 文件被使用,而在同一文件夹下有一个 Flexsim.tmp 文件,则此.tmp 文件将被用来指

定纹理的透明度。

关于实体排序和透明度的注释:实体的排序直接影响那个实体的透明度看起来的效果。模型中所

有比透明实体排序高的实体,将不会显示在透明实体后面。

230

Page 234: Flexsim handbook

Flexsim 使用介绍

231

Page 235: Flexsim handbook

Flexsim3.0 用户手册

实体窗口

实体参数视窗和属性视窗

Flexsim 中有两种配置实体属性的视窗,分别称为参数视窗和属性视窗。

实体属性视窗

实体属性视窗用来配置对库中所有实体的共同属性。因此,所有实体的属性视窗看上去都是一样的

所有实体都具有的共同属性有颜色、3D 形状、位置、转角、尺寸、标签、端口连接和统计。每个属性视

窗都有四个分页,如下面所示:

常规属性页

视景属性页

标签属性页

统计属性页

右键点击实体,在弹出菜单中选择 “属性”选项,即可打开实体的属性页。

实体参数视窗

实体参数视窗用来配置与正在编辑的实体的类型相关的属性。例如,暂存区有一个最大容量的属性

而合成器有一个接收临时实体的组成列表,因此暂存区的参数视窗就与合成器的参数视窗不同。不

过,参数视窗之间也有共同的地方,例如暂存区和合成器都有一个“传递给”策略。有共性的实体其

参数视窗通常有相同的地方,这一点能使你更快学会使用这些视窗。

右键点击实体,在弹出菜单中选择 “参数”选项就可以打开实体的参数页。

参数视窗有一系列不同的分页组成,有哪些分页取决于实体的类型。有几个分页为几个实体所共有

此参考文档提供了每一个参数分页,以及与所使用此分页的实体的链接。参数分页列表如下:

堆垛机分页

BFR 高级分页

BTE 分页

碰撞分页

合成器分页

输送机分页

232

Page 236: Flexsim handbook

输送机布局分页

起重机分页

分配器分页

升降机分页

固定实体分页

临时实体流分页

流节点分页

分类输送机分页

复合处理器分页

网络节点连接分页

网络节点主页

233

Page 237: Flexsim handbook

Flexsim3.0 用户手册

实体参数和属性视窗

实体触发器函数

操作员分页

光电传感器

处理器分页

处理时间分页

暂存区分页

货架分页

货架尺寸表

记录器参数向导

储液灌分页

机器人分页

分解器分页

发生器分页

任务执行器分页

交通控制器分页

运输机分页

可视化工具分页

234

Page 238: Flexsim handbook

实体窗口

参数页

堆垛机分页

货叉升降速度-堆垛机提升叉的上下运动速度。

货叉初始高度-此数字定义了堆垛机载货台在 z方向的重置值。当模型重置时平台返回到此高度位

置。当其不在执行装/卸载任务的偏移行进时,也将返回此高度位置

使用此分页的有

堆垛机

235

Page 239: Flexsim handbook

Flexsim3.0 用户手册

碰撞分页

参见任务执行器,可以获得更多关于碰撞探测功能的信息。

碰撞检测时间间隔 - 实体碰撞检测之间经过的仿真时间。此时间不是其碰撞成员的碰撞检测之间

的时间。

显示碰撞球 - 如果要碰撞实体周围显示碰撞球,就选择此选框。

检测碰撞 - 选中此复选框打开碰撞探测。

236

Page 240: Flexsim handbook

实体窗口

碰撞球 - 此表用来在实体上定义一个或多个碰撞球。

添加碰撞球 - 选择此按钮可以给实体添加一个新的碰撞球。在表中定义球的尺寸和位置。

删除碰撞球 - 选择此按钮可删除表中的最后一个碰撞球。

高级 - 此按钮用来优化碰撞检测速度,通过配置任务执行器,在对碰撞球进行碰撞检测时用来排

除某些轴。这使得能够用较少的碰撞球来覆盖更多的检测区域。点击此按钮打开如下的视窗。不选择

X、Y或 Z轴向维度即可排除特定的轴向检查。配置的结果绘制在视图中。一个透明的圆柱体或平面

覆盖可能在所给定的配置下发生碰撞的区域。如果想要检测某个与常规轴向不平行的轴向的碰撞,

也可以输入一个旋转角度的偏移,如 45度。注意,X、Y、Z维是按照全局坐标系定义的,而不是按

照单个实体的坐标系。

碰撞成员 - 在模型实体列表的左边,可以给任务执行器添加碰撞成员。在列表的右边是实体碰撞成

员列表。点击一个任务执行器实体就可以选中它,然后点击“>>”按钮,就可以从模型列表加一个成

员到它的成员列表中。选中此实体,然后点击“<<”按钮就可以从成员列表中删除一个实体。

碰撞处理 - 此下拉菜单用来定义碰撞发生时如何处理。参见碰撞触发器下拉菜单。

237

Page 241: Flexsim handbook

Flexsim3.0 用户手册

使用此分页的有

任务执行器

运输机

操作员

起重机

堆垛机

机器人

升降机

合成器分页

装盘 /合并/分批 - 选择合成器的工作模式。

沿合成器全长传送临时实体 - 如果选中此复选框,在其处理过程中,临时实体将从一端到另一端

沿着合成器行进。

组成清单 - 此表用来定义合成器在完成收集并送往下游节点之前需要收集的每种类型临时实体的

数量。合成器把从输入端口 1 输入的临时实体作为容器,且一次合成只接收一个。表中第二行及余下

各行代表从输入端口 2 和更大输入端口号输入的临时实体。如果在打开此视窗的情况下要增加额外

的连接,需要关闭参数视窗并重新打开,以便使你的改变注册生效。

TargetQuantity(目标数量) - 每一次合成操作需要从相关输入端口接收的临时实体的数目。

238

Page 242: Flexsim handbook

实体窗口

使用此分页的有

合成器

输送机分页

操作

这些参数定义了输送机如何实现其功能.

239

Page 243: Flexsim handbook

Flexsim3.0 用户手册

进行累积 - 如果不选此复选框,输送机就是非堆积模式。在非堆积模式的输送机上,如果一个临时

实体到达了输送机末端却不能离开时,整个输送机就会停下。如果是堆积模式,则多个临时实体将

在输送机上连续前行,直到撞上一个停下的临时实体,或者到达了输送机末端。堆积的临时实体之

间的距离由间隔规则决定。

速度 - 此数值定义临时实体在输送机上移动的行进速度。

最大容量 - 此数值限制了输送机上同一时间能够容纳的临时实体数目。输送机上容纳的临时实体的

最大数目通常是由输送机的长度和临时实体的尺寸决定的,但此参数允许显示更多。

间隔长度 - 根据在“间隔规则 ”中的定义,此值有不同的用法。

间隔规则 - 此项定义输送机上的临时实体之间的间隔距离。

物品尺寸 - 当一个临时实体碰到前面的临时实体时,将会停止移动。

物品尺寸+间隔值 - 当一个临时实体到达距前面的临时实体后边界一定距离时,就停下。此距离定

义为间隔值。

间隔值 - 当一个临时实体的前边界距它前面的临时实体的前边界有一定距离时,就停止。此距离定

义为间隔值。

间隔方向 - 如果间隔规则包含临时实体的尺寸,则此域段决定由它的哪一维来定义其在输送机上

的尺寸。可选的是 x、y、z轴尺寸.

Z 方向,Y方向 - 这些域段仅为视觉目的而设,不影响输送机的操作。这些项与 “间隔方向”域段一

起确定临时实体的正确方向定位。它们分别为临时实体定义了围绕输送机的 z轴和 y轴的旋转角度

数。例如,如果在 “间隔方向”域段中选择了“物品 Y尺寸”而不是默认的 “物品 X尺寸”,则要将 “Z 方

向” 指定为 90 或 270,这才能使临时实体的 y轴方向,而不是 x轴方向,与输送机的长度方向一致。

如果选择的“物品 Z尺寸”,则要将 “Y 方向” 设定为 90 或 270。

虚拟长度 - 此域段用来为输送机定义一个与实际布局长度不一样的指定值。如果输入 0(默认),

则模型采用输送机的实际布局长度。否则,此域段的值将作为输送机长度。当需要仿真很长的输送

机,而不想在模型中横跨一大段距离,或者需要定义一个精确的距离时,就可以使用此域段。

用虚拟长度调整产品尺寸 - 此项仅为视觉目的,不影响输送机的操作。如果定义了非常巨大的虚

拟长度,此域段可以调整要沿着输送机传送的产品的大小比例,以避免它们重叠。例如,如果输送

机的布局长度是 10,但指定了虚拟长度为 100,这样,尺寸为 1 的临时实体只应占据输送机虚拟

长度的 1/100。这是模型的布局中的输送机长度的 0.1 单位,但由于临时实体的大小是 1 单位,它将

240

Page 244: Flexsim handbook

实体窗口

与其它临时实体发生重叠。如果选上此复选框,则临时实体的尺寸就会缩短为 0.1 单位。

显示

这些参数定义输送机在模型中的外观,不影响输送机的操作功能。这些参数的联合应用可以给输送

机的外观带来无限灵活性。对这些设置的配置常常是采用试错法进行的,但这里可以帮助用户快速

学习每个参数如何影响输送机的外观。

纹理 - 此文件将绘制在输送机上,用以改变其基本外观。纹理分为三部分。纹理左边第三部分绘制

在左侧,中间部分绘制在顶部,右边部分绘制在右侧。

纹理长度 - 此数值定义在沿输送机平面上,在重复使用纹理之前伸展的一个纹理的长度。

产品 Z偏移 - 改变此数值将改变临时实体在输送机上方或下方多远的位置上绘制。0值表示临时实

体刚好在输送机上。负值将使临时实体绘制在输送机平面的下方。

侧围沿输送机轮廓(非地面) - 如果选上此复选框,输送机侧围将在距输送机有一段特定的距

离的地方开始绘制。如果没有选上,则在距地面有一定距离的地方开始绘制。不管哪一种方式,侧

围都与输送机周线相连。

围边尺寸 - 此值决定侧围的长度。

支柱基面相对于输送机定位(非地面) - 如果选上此复选框,输送机的支柱将在距输送机一段

特定距离的位置开始绘制。如果没有选上,则在距地面一定距离的地方开始绘制。不管哪一种方法

侧围都与输送机周线相连。

支柱基面位置 - 此值决定输送机支柱从哪里开始。

显示示例

下面是一些不同外观的输送机示例。这些可能并不完全符合实际,但这里只是显示其灵活性并给你

一些启发。每张图片上附加了一小段说明,解释此外观中改变了哪些输送机默认外观。

241

Page 245: Flexsim handbook

Flexsim3.0 用户手册

有侧轨的带状输送机

围边尺寸 = - 0.2

纹理 = fs3d/BeltConveyor.bmp

有大尺寸侧围的蓝色悬挂输送机

纹理 = <blank>

未选中 “侧围沿输送机轮廓(非地面)”复选

围边尺寸 = 0

支柱基面位置 = 2.5

颜色变为蓝色

有 Flexsim纹理的悬挂带输送机

纹理 = flexsim.bmp

产品 Z偏移 = - 0.5

围边尺寸 = 0

“侧围沿输送机轮廓(非地面)机”项被选上

支柱基面位置 = 0

纹理长度 = 1

只有围边的输送机

用户纹理:同一目录下的 myflexsim.jpg 和 myflexsim.tpg

产品 z偏移 = - 0.5

使用此分页的有

输送机

242

Page 246: Flexsim handbook

实体窗口

分类输送机

输送机布局分页

初始 Z转角 - 此值设定输送机的转角,或者输送机第一段的方向。这与编辑属性视窗中的 Z转角一

样。注意,当你同时打开参数视窗和属性视窗时,编辑此值可能会出现问题,在其中一个视窗点击

应用/确定按钮可能会覆盖你在另一个视窗所做的改变。

分段数 - 这里定义输送机的段数。每一段对应表中的一行。一段的所有信息都存储在表中与这一段

相应的行中。如需改变段数,输入想要的数字,点击应用按钮即可。此表将自动做相应的更新。

输送机段编辑表

此表存储输送机各段的所有信息。每一行代表一段。通过编辑此表来定制输送机。有若干域段的项是

自动计算的,不能够编辑。用户可以安全地进行编辑的域段如下:

类型(type) - 此数值定义此行所代表的段的类型,有效的值是:1 表示直段,2 表示弧段。

长度( length) - 如果是直段,则此数值定义其长度;如果是弧段,则忽略此值。

提升(rise) - 此数值定义输送机段始端到末端之间的高度差。例如,如果此值是 3,则这段输送机末

端比始端高 3 单位。

角度(angle) - 如果是弧段,则此数值定义这段输送机转过的角度度数。可以为正,也可以为负,也

243

Page 247: Flexsim handbook

Flexsim3.0 用户手册

可以大于 360度。如果是直段,则忽略此值。

半径(radius) - 此数值定义弧段的弯曲半径。半径是从旋转中心到输送机中心线的距离。如果是直段

则忽略此值。

NrofLegs - 此数定义要给这段输送机绘制的支柱的数目。这将根据输送机分页上的设定进行不同的

绘制。

表中的其它域段是不能编辑的。不过它们可以给你关于这段输送机的反馈。例如,如果在其它域段

内给定了这些参数,则 seclength这一列将显示此分段的总长。

在参数的情况下, Startlength这一列显示输送机到此段为止不包括此段的总长。

使用此分页的有

输送机

分类输送机

244

Page 248: Flexsim handbook

实体窗口

起重机分页

起重机 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向高度。

使用此分页的有

起重机

245

Page 249: Flexsim handbook

Flexsim3.0 用户手册

分配器分页

传递给 - 此下拉菜单返回任务序列应通过它进行分配的输出端口号。如果返回 0,则任务序列将采

用下面提到的排队策略进行排队,然后分配到第一个可用的移动资源。参见传递给下拉菜单

排队策略 - 此下拉菜单返回一个“优先级 ”数值,这被任务序列用来对其在实体的任务序列排队中

进行排序。默认情况下,将返回任务序列创建时所赋予的优先级,但用户可以在这里定制任务序列

的优先级。参见排队策略下拉菜单。

使用此分页的有

分配器

任务执行器

运输器

操作员

起重机

堆垛机

246

Page 250: Flexsim handbook

实体窗口

机器人

升降机

升降机分页

Z轴尺寸 - 此值设定升降机框架的 z方向尺寸,或它的垂直立柱的尺寸。注意,这与升降机实体的

z方向实际尺寸不同。这些支柱仅为视觉效果。如果升降机必须行进到超过此范围高度,升降机载货

台将会绘制在支柱之外。

Z轴坐标位置 - 此值设定升降机框架的 z方向位置,或垂直立柱的位置。注意,此值与升降机实体

的 z方向实际位置不同,只是框架的位置。

使用此分页的有

升降机

247

Page 251: Flexsim handbook

Flexsim3.0 用户手册

固定实体分页

此页用来为固定实体添加标签。它与常规属性页中的标签页完全相同。

248

Page 252: Flexsim handbook

实体窗口

临时实体流分页

249

Page 253: Flexsim handbook

Flexsim3.0 用户手册

参见固定实体,可以获得此功能的详细信息。

输出

这些参数决定实体如何将临时实体送到下游。

连续判断送往端口 - 如果此复选框被选上,则 “送往端口”将在每次下游实体可以变为可以接收临

时实体时都被重新判断。非常值得注意的是,此操作只在下游实体变为可用(可接收实体)时才执

行。当下游实体已经可用,就不再进行连续判断。如果需要强制在某些时候进行重新判断,而不仅

仅是在下游实体变为可用时才判断,则可以在此实体中调用 openoutput()命令。

送往端口 - 此下拉菜单返回与临时实体将要进入的实体连接的输出端口号。如果返回 0,则打开所

有的输出端口,临时实体将移动到第一个可以接收它的下游实体。参见送往端口下拉菜单。

使用运输工具 - 如果此复选框被选上,此实体将要求一个运输机将临时实体移动到下游去。如果没

有选上,临时实体将自动移动。

优先级 - 此参数只有在选用了 “使用运输机”的情况下才可用。此值对将要送往运输机或者分配器的

任务序列进行优先级的设定。运输机和分配器通常对任务序列进行排序,优先级高的首先被执行。

具有相同优先级的任务序列将按照它们被接收的顺序执行。

先占 - 此参数只有在选用了 “使用运输机”的情况下才可用。如果被选上,送往运输机的任务序列将

会自动地抢占运输机此时正在执行的任何操作。这有可能导致运输机执行在正常情况下不被允许的

250

Page 254: Flexsim handbook

实体窗口

任务,如超载运送临时实体。

按下列请求运输工具 - 此下拉菜单只有在选用“使用运输工具”的情况下才可用。此函数返回一个指

向分配器或者运输机的引用,临时实体将输出到此引用实体中。参见运输机分配器下拉菜单。

输入

这些参数定义如何从上游实体中拉取临时实体。

拉动 - 如果此复选框被选上,此实体将要从上游实体中拉取临时实体。上游实体应该打开其所有输

出端口,以允许此实体拉取它需要的临时实体。

连续判断拉入条件 - 此参数只有在选择了 “拉动”的情况下才可用。如果此复选框被选上,该实体

将在每次释放一个新的临时实体时,对上游所有已释放的临时实体进行重新判断。这和“连续判断送

往端口” 复选框很相似,在这种情况下,如果需要手工地触发拉式请求的再判断,则需要外在地调

用 openinput()命令。

从端口拉动 - 此参数只有在选中了 “拉动”的情况下才可用。此下拉菜单返回一个输入端口号,此端

口与正在从中拉取临时实体的实体相连接。参见选取从端口拉动的下拉菜单。

拉动条件 - 此参数只有在选中了 “拉动”的情况下才可用。如果实体正在查看的临时实体是需要拉取的

则此下拉菜单返回“真 ”。参见拉动条件下拉菜单。

使用此分页的有

发生器

暂存区

处理器

合成器

分解器

复合处理器

输送机

货架

储液罐

流节点

分类输送机

251

Page 255: Flexsim handbook

Flexsim3.0 用户手册

临时实体分页

此参数页用来查看和改变临时实体的类型,也可以用来查看临时实体的跟踪列表。只有通过进入或

离开触发器告诉那些临时实体所进入的每一个实体去向跟踪列表中写信息,跟踪列表才会进行记

录。

252

Page 256: Flexsim handbook

实体窗口

流节点分页

最大容量 - 这里指定此流节点中允许同时容纳的临时实体的最大数量,其中包括正在从此流节点

向其它实体中去的所有临时实体。

速度 - 此下拉菜单为每个进入此流节点的临时实体指定速度。此下拉菜单的存取变量和选取选项与

循环时间下拉菜单完全一样,只不过其返回值是速度,而不是时间。

侧偏移 - 此值指定行进临时实体的偏移距离。此项仅为视觉效果,不会改变流节点的操作。

使用此分页的有

流节点

253

Page 257: Flexsim handbook

Flexsim3.0 用户手册

分类输送机分页

发送条件 - 此下拉菜单替换了其它固定实体的临时实体流分页中的 送往端口下拉菜单。当有临时

实体通过输送机上的一个输出位置时,它将被触发。这是一个真假(1或 0)值函数,判断是否将

临时实体从那个输出端口送出。

拉入条件 - 此下拉菜单与其它固定实体的临时实体流分页中的“拉式请求 ”相同。参见拉入条件下拉

254

Page 258: Flexsim handbook

实体窗口

菜单。

输入 /输出端口表 - 这些表用来定义输送机上的传输点的位置和阻塞逻辑。分类输送机的每个输入

端口都有一个关联的入口位置,它沿着输送机长度方向分布;而每个输出端口都有一个关联的出

口位置和一个阻塞参数。如果连接输送机的输入/输出端口时此参数视窗是打开的,则需要重新打开

参数视窗来使所作的改变被注册生效。在正投影 /透视视图中,入口/出口点的位置将会用红色或绿

色箭头绘制标出。入口位置的箭头指向输送机内,出口位置的箭头指向输送机外。如要隐藏这些箭

头,可在属性视窗或编辑选中实体菜单中设置不显示实体端口。如果入口/出口点显示的位置不对,

重置一下模型,它们将重新配置到正确的位置上。

关于入口 /出口位置的注释:如果已经改变了分类输送机的入口/出口位置,则需要重置模型才能

够正确放置这些位置。

入口点(Entry Point) - 这是入口/出口点的位置,从输送机的起点开始算起。

阻塞(blocking) - 此项只存在于出口位置表中。如果此值为 1,则无论何时有临时实体经过那个

出口点,且“传送请求”返回 1 时,输送机将停下,直到临时实体离开。如果此值为 0,输送机将

会“企图”将此临时实体送出到出口点外,但是,如果下游实体没有准备接收此临时实体,临时实

体将会简单地到下一个出口点去。建议将输送机上的最后一个出口点设置为可阻塞模式,否则到

达输送机末端的临时实体如果不能离开,就会简单地返回到输送机起始端重新开始。

使用此分页的有

分类输送机

255

Page 259: Flexsim handbook

Flexsim3.0 用户手册

复合处理器分页

处理工序数 - 此数值定义了此复合处理器中的处理过程的数目。一个处理过程是步骤序列中的一步

输入需要的数目,点击“应用处理过程”按钮,即可建立相应数目的处理过程。

256

Page 260: Flexsim handbook

实体窗口

处理工序分页

每个处理工序都有一个处理过程分页来定义它。处理过程分页用如下信息定义处理过程:

处理工序名称 - 在处理过程名称编辑框里用来定义每个处理过程的名称。此名称将会在复合处理器

的状态报告中使用。

处理时间 - 此下拉菜单决定处理器花费多长时间来处理一个临时实体。参见周期时间下拉菜单。

需操作员数 - 此数值决定处理器在处理过程中要使用多少个操作员。

优先级 - 此值为将要送给操作员的任务序列设定优先级。操作员通常都会对任务序列排序,优先级

高的任务最先被执行。优先级相同的任务按照接收到的先后顺序执行。

先占 - 如果此复选框被选上,则送给操作员的任务序列将会自动地抢占操作员,不管此时操作员

在进行什么工作。

选取操作员 - 此下拉菜单返回一个指向操作员或分配器的引用,该引用是此实体在给定的处理过

程中正在使用的。参见选取操作员下拉菜单。

使用该分页的有

复合处理器

网络节点连接分页

257

Page 261: Flexsim handbook

Flexsim3.0 用户手册

参见网络节点文档,可获得关于网络节点连接的详细信息。

关于网络节点连接的注释:两个网络节点之间的每条路径都包含两个单行线连接。此分页只定义

从此网络节点到另一网络节点的连接行为。如需要编辑从其它节点到此节点的连接行为,则打开那

些其它节点的参数视窗。

名称 - 此域段用来命名网络中的各连接。这些名称应该反映模型中此连接的特殊目的。

连接类型 - 此下拉列表用来定义此连接如何行为。有三个选项。

无连接 - 运输机不能在此连接上行进。这类连接在视图视窗中用红色绘制。

允许超车 - 允许运输机在此连接上彼此超车。这类连接在视图视窗中用绿色画出。

禁止超车 - 运输机不能在这类连接上彼此超车。此路径上运输机之间的最小距离可以在“间隔”域段

中设定。这类连接在视图视窗中用黄色画出。

间隔 - 此数值决定被指定为“禁止超车& rdquo;的连接上的运输机之间的最小间隔距离。此距离是从

一个行进物的后端到它后面的行进物的前端的距离。

速度限制 - 此值决定行进物可以沿此连接行进的最大速度。

当前距离 - 此数值显示正在仿真的那个连接的当前距离。如果其虚拟距离被指定为 0,当前距离为

此路径的实际距离,否则,就是在虚拟距离域段中指定的距离。

258

Page 262: Flexsim handbook

实体窗口

虚拟距离 - 此数值用来指定连接的精确距离。

使用此分页的有

网络节点

259

Page 263: Flexsim handbook

Flexsim3.0 用户手册

网络节点分页

参见网络节点文档,可获得更多关于这些域段的详细信息。

尺寸 - 此数值定义网络节点的尺寸,也是网络节点绘制的路径的宽度。

节点最大行进物容量 - 此数值定义允许多少不在网络上行进的运输机停留在节点中。这可以代表

不在执行行进任务的运输机,它们在此节点中进行其它的活动。

侧偏移 - 此数字定义行进物向路径右侧外偏出的偏移距离。此参数不影响行进物行进的距离,仅为

了视觉效果设置,可以使相向行驶的两个行进物不会辗过彼此。

使用此分页的有

网络节点

260

Page 264: Flexsim handbook

实体窗口

操作员分页

工作

预置时使用操作员 - 如果此复选框被选中,则此实体将在预置时间内调用一个或多个操作员。预

置时间结束后,操作员被释放。

处理时使用操作员 - 如果此复选框被选中,则此实体将在处理时间内调用一个或多个操作员。处

理时间结束后,操作员被释放。

预置操作员人数 - 此参数只有在选择“预置时使用操作员”复选框被选中后才可用。此数值决定在预

置时间内实体需要使用多少各操作员。

处理操作员人数 - 此参数只有在“处理时使用操作员”复选框被选中,且 “预置和处理采用相同的操

作员”复选框未被选中时才可用。此数值决定实体在处理时期将会使用多少个操作员。

261

Page 265: Flexsim handbook

Flexsim3.0 用户手册

优先级 - 此参数只有在两个“使用操作员”复选框中任一个被选中后才可用。此值为将要送给操作员

的任务序列设定优先级。操作员通常要对任务进行排序,使优先级高的任务最先被执行。优先级相

同的任务序列按照接收的先后顺序执行。

先占 - 此参数只有在两个“使用操作员”复选框中任一个被选中后才可用。如果此复选框被选中,则

送给操作员的任务序列将自动地抢占操作员,不管当时操作员在进行什么操作。这可能引起操作员

执行某些正常情况下不允许的任务。

预置和处理采用相同的操作员 - 此参数只有在两个“使用操作员”复选框都被选中后才可用。如果

此复选框被选中,则在预置过程中被调用的操作员将被用来完成处理过程。如果此复选框没有被选

中,预置过程调用的操作员将会被释放,处理时调用新的操作员。采用“选取操作员”这一特殊选取

选项,可以调用不同的操作员。

选取操作员 - 此域段在选择了“使用操作员”复选项后才可用。此下拉菜单返回指向操作员或者分配

器的引用,此引用被实体在预置和处理过程中使用。参见选取操作员下拉菜单。

维修

这些参数定义实体在 MTBF(平均故障间隔时间)后在维修时间内如何使用操作员。

使用操作员 - 如果此复选框被选中,则实体将在维修时间调用一个或多个操作员。MTTR(平均修

复时间)之后,这些操作员将会被释放。

需操作员数 - 此参数只有在“使用操作员”复选框都选中后才可用。此数值决定维修操作需要多少个

操作员。

优先级 - 此参数只有在 “使用操作员 ”复选框被选中后才可用。此值为将要送给操作员的任务序列设

定优先级。操作员通常要对任务进行排序,优先级高的任务最先被执行。优先级相同的任务序列按

照接收的先后顺序执行。

先占 - 此参数只有在“使用操作员”复选框被选中后才可用。如果此复选框被选中,则送给操作员的

任务序列将会自动地抢占操作员,不管当时操作员在进行什么操作。这可能导致操作员执行某些在

正常情况下不被允许的任务。

选取操作员 - 此域段在选择了“使用操作员”复选项后才可用。此下拉菜单返回指向操作员或者分配

器的引用,此引用被实体在预置和处理过程中使用。参见选取操作员下拉菜单。

使用此分页的有

262

Page 266: Flexsim handbook

实体窗口

处理器

合成器

分解器

光电传感器分页

263

Page 267: Flexsim handbook

Flexsim3.0 用户手册

参见输送机或者光电传感器逻辑小节,可以获得更多详细信息。

覆盖触发 - 此下拉菜单在临时实体遮挡光电传感器,且跳转时间结束后光电传感器还没有变为未

遮挡状态的情况下被触发。参见覆盖/覆盖解除触发器。

覆盖解除触发 - 此下拉菜单在临时实体经过光电传感器而没有临时实体随后跟随的情况下触发,

使得光电传感器变为未遮挡。参见覆盖/覆盖解除触发器

光电传感器个数 - 这里指定沿着输送机长度方向上放置的光电传感器个数。输入一个数字,点击

“刷新”按钮,指定数目的行数就会显示在光电传感器表中。

光电传感器表 - 此表指定光电传感器位置和每个摄像头的跳转时间。位置的度量从输送机起始端

开始算起。

显示光电传感器 - 如果需要显示输送机的光电传感器,就选中此复选框。

使用此分页的有

输送机

处理器分页

最大容量 - 此数值定义处理器能够同时容纳的最大临时实体数目。

264

Page 268: Flexsim handbook

实体窗口

输送物品通过处理器 - 如果此复选框被选中,则在处理时间流逝的过程中,将会看见临时实体从

处理器的一端移动到另一端。这只是为了视觉效果。如果不选它,则进入的临时实体将被放置处理

器的中部,并保持不动直到离开处理器。

使用此分页的有

处理器

处理时间分页

265

Page 269: Flexsim handbook

Flexsim3.0 用户手册

预置时间 - 此下拉菜单定义处理器在接收到一个临时实体之后到开始处理此临时实体之前所要等

待的时间。改变此参数之后必须重新编译模型。参见预置时间下拉菜单。

处理时间 - 此下拉菜单决定处理器处理一个临时实体要花费多长的时间。改变此参数之后必须重新

编译模型。

MTBF(平均故障间隔时间) - 此下拉菜单定义此实体两次故障之间的平均时间。此时间被定义

为从实体上一次故障恢复到下一次故障之间流逝的时间。换句话说,它返回实体在故障之前的工作

时间。如果此函数返回 0,则次实体不出现故障。参见时间下拉菜单。

MTTR(平均维修时间) - 此下拉菜单定义实体在 MTBF之后保持故障状态的时间。在此段时间

末尾,此实体接着它出现故障时的地方开始工作。参见时间下拉菜单。

MTBF 中包括的状态 - 这里可以定义处理器的 MTBF 中需要应用什么样的状态。添加状态列表的

操作是,在“状态数 ”域段中输入 2,点击刷新按钮,并在表中新的输入域段中键入“setup(预置)”。

点击 “状态列表”按钮可以查看被选的输入状态的列表。

使用此分页的有

266

Page 270: Flexsim handbook

实体窗口

处理器

合成器

分解器

暂存区分页

最大容量 - 这是暂存区能够容纳的最大临时实体数。

成批

这些域段定义暂存区的成批操作能力

成批操作 - 如果选中此复选框,则暂存区将积累多个临时实体打包为一批后,才释放它们到下游

去。临时实体的积累将持续进行,直到达到了打包的目标量,或者到达了最大等待时间。如未被选

中,将不进行打包,临时实体一发现下游的实体可用就立即离开。

批量规格 - 此数字定义暂存区在将临时实体送往下游之前,将要积累的每个批次所包含的临时实

体的数目。临时实体是被单独地送往下游的。

最大等待时间 - 此数字是暂存区在将临时实体送往下游之前要等待的最长时间。如果此时间已经结

束,但批量尺寸尚未达到,当前已经收集的本批次将被释放。如果指定为 0,就没有最大等待时间,

换句话说,暂存区将无限等待下去。

267

Page 271: Flexsim handbook

Flexsim3.0 用户手册

清空后接受下批 - 如果选中此复选框,则暂存区在当前批次离开之前,将不允许新的临时实体进

入。

显示

这些参数定义暂存区在临时实体进入时如何放置他们。

物品堆放 - 定义临时实体如何在暂存区内进行视觉上的放置。

• 垂直堆放 - 临时实体向彼此的顶上堆放。堆放在实体底部的临时实体在暂存区中的时间最长。

• 水平直线堆放 - 临时实体将会水平地排成线。最靠近暂存区输出端口的那一个在暂存区中时间

最长。

• 在暂存区内堆放 - 临时实体在暂存区内堆放成行。临时实体将随着排在其前面的产品离开暂存

区而移动自己的位置。如果需要使产品在进入暂存区后保持位置不变,则应将暂存区选为

LIFO(后入先出)模式,使下游实体拉取暂存区中的最后一个产品。

• 无操作 - 所有临时实体放置在暂存区的同一个位置。这会使暂存区看上去只有一个临时实体。

Z 的基础堆放高度 - 此数字定义暂存区从什么高度开始堆放临时实体,这些实体将被垂直堆放,

或者在暂存区内堆放。

268

Page 272: Flexsim handbook

实体窗口

货架分页

地面堆存 - 如果选中此复选框,货架将模拟在地面存储空间,而不是一个垂直存储货架。俯视之,

则排是垂直的列,层是水平的行。

货架倾斜量 - 此数值定义临时实体放在货架某给定货格上的倾斜度,因为有些货架是要让从后端

向前端滑动的。

最大容量 - 此数值定义货架允许的同一时间的最大临时实体数。

标记已呼叫运输机的架子 - 选择此项,则当某货架调用运输机来进行选取时,将会用红色将此架

子高亮显示。

269

Page 273: Flexsim handbook

Flexsim3.0 用户手册

捡取 /放置时 Y 轴偏移量 - 此数值用来配置运输机从货架选取或者放下临时实体到货架时,运输

机与货架之间的距离。此参数在使用操作员从货架选取或者放下临时实体时尤为有用,因为通常操

作员会走到货架中间去获得一个临时实体。例如,指定偏移值为 1,操作员在货架上选取或者放下

临时实体时,将会与货架保持更适合的举例。

不透明性 - 此项允许将货架绘制为半透明性的,这样,由于每排前面的货架都是半透明的,就可

以看到同一区域中的多排货架。0值表示全透明,1 表示完全不透明。

放置到列 - 当有临时实体进入货架时,调用此下拉菜单。它返回临时实体将要放置进去的那一列。

参见放置到列下拉菜单。

放置到层 - 当有临时实体进入货架时,调用此下拉菜单。它返回临时实体将要放置进去的那一层。

参见放置到层下拉菜单。

最小停留时间 - 此下拉菜单返回临时实体被释放到下游之前必须在货架里停留的时间。也可以从此

函数返回-1值,这样货架就根本不释放临时实体,然后可以用 releaseitem()命令来按照用户的策

略来释放。参见最小停留时间下拉菜单。

使用此分页的有

货架

270

Page 274: Flexsim handbook

实体窗口

货架尺寸表分页

此分页用来配置货架的排与层的布局。如果只需要配置一个简单的列与层的货格,可以从左边基础

面板进行设置。如果需要制定不同参数的不同列与层,可以使用右边的高级面板对每列进行单独配

置。

271

Page 275: Flexsim handbook

Flexsim3.0 用户手册

基本面板

如果货架是简单的完全一致的货格,就使用基础面板。在进入高级面板中进行单独编辑之前,也可

以使用基础面板进行基础设置。设定了货架的基本尺寸后,然后点击“应用基本设定 ”按钮,这些设

定就会应用到货架。

货架列数 - 是货架的列数。

货架列宽 - 默认列宽。

货架层数 - 是货架的层数。

货架层高 - 各层的默认层高。在高级编辑中可以为每一列的各层进行编辑。

高级面板

使用此面板单独地配置货架的列与层。此面板左边是货架所有列的列表。选择一列,用面板右边的

选项和按钮对其进行配置。在正投影/透视视图中,这些改变将立即现实在货架上。如没有立即显示

点击应用按钮,就会显示。

复制列 - 此按钮复制当前选中的列并且添加到货架末尾。

删除列 - 此按钮删除货架中当前选中的列。

添加层 - 此按钮在当前选中的列末尾添加一层。

272

Page 276: Flexsim handbook

实体窗口

删除层 - 此按钮从当前选中的列中删除末尾的层。

货架列宽 - 在这里指定当前选中的列的宽度。

货架层高表 - 这里可以指定当前选中列中每一层的高度。

使用此分页的有

货架

273

Page 277: Flexsim handbook

Flexsim3.0 用户手册

记录器参数

记录器不使用标准的分页对话框,而采用自己定制的对话框。模型中放置了记录器时,双击记录器

就可以打开此视窗。

数据捕捉设置

数据捕获设定用来定义需要显示或捕获的数据类型。在点击“显示选项 ”按钮之前点击此按钮。3 种数

据类型是:表数据、标准数据和用户定义数据。

表数据

表数据指的是包含在当前 Flexsim 表中的信息。

选择一个下拉菜单选取选项,并选择代码模板按钮,就可以定义想要显示的表和数据。表中数据必

须是先前就用触发器选项或其它方式写入到表中的。若选择此选项,记录器将根据下拉菜单中的输

274

Page 278: Flexsim handbook

实体窗口

入产生一系列的 x/y 点。然后,根据在显示选项视窗指定的图形类型来绘制这些点构成的图示。参见

表中 X 下拉菜单和表中 Y 下拉菜单可以得到更多关于此下拉菜单的信息。

标准数据

标准数据是指对每个实体自动收集的数据。标准数据包括停留时间、当前数量和状态信息。这与统计

分页中的属性对话框中的信息相同。需要在模型中显示 3D 容量图形、3D停留时间柱壮图或者 3D状

态饼图时,可使用此选项。选择了标准数据,就必须选择需要显示信息的实体,然后选择标准数据

的类型。

用户定义数据

用户定义数据指建模者需要用图形显示或者记录到表中的特定数据。记录器 “监视”模型中某节点的

值,如实体状态或者实体容量等。选择了用户定义数据,可以看见三个选项。你可以选择图形、最小/

最大/平均、或表格。

275

Page 279: Flexsim handbook

Flexsim3.0 用户手册

按设定间隔查看值-如果选中此复选框,则按设定的时间间隔记录数据点。如未选中,只在节点

的值发生变化时才会进行记录。

时间间隔长度-此域段只有在选择了“以设定的间隔检查数值”后才可用。它是两次记录数据点之间

的时间间隔。

通过时间 /出现权重平均值-这些单选按钮只有在为“输出类型”选择了“最小/最大/平均”选项时才

有用。从统计意义上讲,有两种计算一个变量动态运行中的均值的方法:1)按时间和 2)按发生事

件。如果选择“根据时间计算平均值”,则被监视的节点具有某特定值的时间将按照权重计入平均值。

如果选择“ 根据发生计算平均值”,则某值每出现一次与其它值出现一次都具有相同的权重,而节点

在某给定值状态保持的时间长短则不影响结果。

图形

图形选项用来绘制模型中某实体的一个节点的不断变化的值。模型中任何实体的任何数字数据节点

都可以采用图形表示。点击与“记录节点”相邻的帮助按钮,可看到可以使用的节点名称列表。从下拉

菜单中选择模型中的实体,并键入需要绘图的节点名称。

从模型实体的下拉菜单中选择实体。需记录的节点是实体上某节点的名称。点击帮助按钮,将显示

所有可能节点的列表。

276

Page 280: Flexsim handbook

实体窗口

必须在“记录节点”域段内键入节点名称。点击下一个按钮时,必须定义图形的标题并且从下拉菜单

中选择图形的类型。

注释:要警惕,所要求的数据类型不一定与图形类型相符。例如,stats_staytimemax最好在线图

中显示,而不是用饼图。选择了图形类型后,可以设定图形参数来获得较好的显示效果。双击记录

器然后选择“查看获取的数据”就可查看图形。

选择图形类型后,就会看见特为那种类型图形所附加的编辑域段。条形图和曲线图需要指定记录器

要记录和在图中显示的数据点的最大数目。例如,如果键入 100 作为某曲线图记录的数据点数,则

277

Page 281: Flexsim handbook

Flexsim3.0 用户手册

可以看到先前声明的节点的最后 100 个记录数据。对于饼图和柱状图来说,记录器将自动记录对图

形指定的每组或“桶”中所落进的节点值的次数。

最小 /最大/平均

最小/最大/平均选项用来以表格形式查看特定节点或节点列表的最小、最大和平均值。

点击下一步可以定义需要记录的最小、最大和平均值的节点。指定需要记录的节点总数,然后点击

刷新表按钮。这时,必须明确给出实体名称和实体上需要记录的节点名称。点击帮助按钮可得到可

能存在的节点列表,可从中选择需要记录的节点。

要用表来查看指定节点的记录数据,可点击记录器主参数视窗中的“查看获取的数据”按钮。

278

Page 282: Flexsim handbook

实体窗口

数据表看起来如下。在模型运行时,可以打开此视窗来查看数据值的动态更新。

为输出类型定义的“表”选项在每次用户定义的节点的值发生改变,或者在用户设定的间隔时间点上,

都会向表中写入其值。“最小/最大/平均”选项只记录节点的点统计数据,与此不同,“表”选项记录每

个节点的连续数据流。用户应定义哪些节点需要像“最小/最大/平均”选项那样捕获数据。下面给出一

个例子,是当点击“查看获取的数据”时可看见的数据表。注意,每次此表显示一个节点的情况。用下

拉选取列表选择其它预先定义了的节点。另外,可以用输出按钮将这些数据输出到一个外部文件中

279

Page 283: Flexsim handbook

Flexsim3.0 用户手册

记录器的用户定义选项是软件的高级特性。随着对 Flexsim 的熟习,这些选项的使用会越来越多。

储液灌分页

280

Page 284: Flexsim handbook

实体窗口

最大容量 - 此数值是储液灌能够容纳的最大体积单位数。默认情况下,每个临时实体代表一个体积

单位。使用“流入速率”选项可以改变此默认设置。

高位标记 - 当储液灌的液体体积上升或下降至此值时,储液灌调用触发函数。

中位标记 - 当储液灌的液体体积上升或下降至此数值时,储液灌调用触发函数。

低位标记 - 当储液灌的液体体积上升或下降至此数值时,储液灌调用触发函数。

关于液体容量的注释:液体容量不必代表储液灌中的临时实体数。在进入流量速率函数中,可以

指定每一个临时实体代表多少体积。默认情况下,每一临时实体代表 1 体积单位。但是可以用下拉菜

单引用标签、实体类型等来定义每个临时实体代表的体积。最大容量和标记值是基于单位体积计算

的,而不是基于储液灌中的临时实体数。

流入速率 - 此下拉菜单返回储液灌在一个临时实体进入之后,到允许下一个临时实体进入之前所

要等待的秒数。在此函数中,还可以设定进入的一个临时实体代表多少“体积”。默认情况下,此体积

为 1,但是可设置替代值,这些替代值被用来作为最大容量、高位标记、中位标记、低位标记值使用。

参见流量速率下拉菜单。

流出速率 - 此下拉菜单返回储液灌在一个临时实体离开之后,到允许下一个临时实体离开之前,

要等待的秒数。参见流量速率下拉菜单。

机器人分页

281

Page 285: Flexsim handbook

Flexsim3.0 用户手册

Z轴旋转速度-此值设定当机器人需要移动时围绕 z轴的旋转速度。 用单位时间转过的度数来指定

如果机器人需要每秒转半圈,则它的旋转速度要设定为 180。

Y轴旋转速度-此值设定机器人需要移动时围绕 y轴的旋转速度。用单位时间转过的度数来指定。

这是机器人用来旋转到它上面/下面的实体的旋转速度。

伸臂速度-此值设定机器人的机械臂伸展去拿一个临时实体或者到其目的地的速度。用单位时间的

距离来指定。

最大伸展-此值是机械臂完全伸出时能够到达的距离。机械臂的每段通常都是此长度的一半。

使用此分页的有

机器人

分解器分页

282

Page 286: Flexsim handbook

实体窗口

去托盘 - 如果选中此复选框,分解器将认为进入的临时实体包含了其它需要被移走的临时实体。

一般分解 - 如果选中此复选框,则分解器将会复制进入的临时实体。

沿分解器全长传送实体 - 如果选中,临时实体将会在处理时间内走过分解器的全长。

分解包数量 - 此 下拉菜单返回分解器要解包或复制出多少个临时实体。参见数量下拉菜单。

发生器分页

283

Page 287: Flexsim handbook

Flexsim3.0 用户手册

到达方式

此选项用来指定发生器创建临时实体的方法。

按时间间隔到达 - 在一段设定的时间之后,生成器就创建一个临时实体,如此重复下去直到模型

停止。

按时间表到达 - 生成器依照一个表定义临时实体的生成,此表定义何时创建临时实体,创建多少,

为何种类型。

按顺序到达 - 生成器依照一个表工作,此表定义创建临时实体的顺序。生成器以向下游移动临时实

体的最快速度创建临时实体。

临时实体种类

用来定义生成器要创建的临时实体的类。使用工具条中临时实体按钮,可以编辑和查看临时实体类

到达间隔时间的用法

这些域段用来定义选择了到达间隔时间为到达类型时,生成器如何创建临时实体。

在 0 时刻到达 - 如果选中此复选框,则在 0 时刻有一个临时实体被创建。下一个临时实体将在第一

个间隔时间末尾被创建。

物品类型 - 所创建的临时实体将被分配以这里所定义的临时实体类型。

到达时间间隔 - 是一个函数,返回生成器在创建下一个临时实体以前要等待的时间。改变此值后必

须编译模型。

284

Page 288: Flexsim handbook

实体窗口

到达时间表的用法

这些域段定义当选择了到达时间表或者到达序列作为到达方式时,生成器如何创建临时实体。

到达次数 - 指定到达时间表的行数。

刷新到达 - 在改变了到达数之后,点击此按钮将更新屏幕上的表。

重复时间表 /序列表(Repeat Schedule/Sequence ) - 如果选中此复选框,则时间表或序列将会连

续的自我重复,直到模型停止。如果是时间表,则定义在第一行中的到达将会在最后一行到达时间

之后 0秒重复执行。这意味着表中的第一行所给的到达时间只在仿真中使用一次。如果需要指定在重

复时最后一行与第一行之间的间隔时间,则可以在末尾添加一行,设定该行为 0到达数量。

刷新标签 - 表中的每一行代表了生成器中一次临时实体的到达。表中的列定义了每次到达的细节

(时间、名称、类型、数量)。

ArrivalTime(到达时间) - 到达发生的时刻。

ProductName(产品名称) - 生成器创建的所有临时实体在此到达过程中都要给定产品名称。

ItemType(临时实体类型) - 生成器创建的所有临时实体在到达过程中都要给定临时实体类型。

Quantity(数量) - 此值指定在这次到达中应创建的临时实体数。

使用此分页的有

发生器

285

Page 289: Flexsim handbook

Flexsim3.0 用户手册

任务执行器分页

容量 - 此值是操作员或运输机一次能运送的临时实体的最大数量。

最大速度 - 这是操作员或运输机行进的最快速度。

加速度 - 此值表示操作员或运输机速度改变的快慢,它们需要逐渐增加速度直到达到最大速度,

或者减小速度到达目标节点。

减速度 - 此值表示当操作员或运输机减小速度的快慢。

装卸时采用行进偏移 - 如果选中此复选框,则运输机/操作员将会被显示移动到选取或放下临时

286

Page 290: Flexsim handbook

实体窗口

实体的准确位置。如果不选中它,运输机/操作员将移动到目标实体的原点去选取或放下临时实体。

在运输机/操作员使用网络节点来到达目的地的情况下,如果没有选中此复选框,运输机 /操作员将

行进到与目标实体相连的网络节点去停下。

行进时转向 - 如果选中此复选框,则运输机/操作员为了使自身定向与行进方向一致,将在行进同

时进行旋转。如果不选中它,运输机/操作员将会始终面向同一个方向。是否选择此选项不影响模型

的统计结果,仅为视觉效果。

装载时间 - 此下拉菜单返回操作员或运输机装载临时实体所花费的时间。改变此参数后必须重新编

译模型。

卸载时间 - 此下拉菜单返回操作员或运输机卸载临时实体所花费的时间。改变此参数后必须重新编

译模型。

使用此分页的有

任务执行器

运输机

操作员

起重机

堆垛机

机器人

升降机

287

Page 291: Flexsim handbook

Flexsim3.0 用户手册

交通控制器分页

参见交通控制器实体,可以获得更多关于交通控制器实体的详细信息。

交通控制器模式 - 定义实体控制交通的方法。有两种选择:互斥或非时间通行模式。

互斥模式

互斥模式用来限制允许进入交通控制器区域的行进物为某给定数量,而不考虑它们是在什么路径

上。这里只需要简单地指定最大数量。

288

Page 292: Flexsim handbook

实体窗口

区域中的最大数量 - 此值定义允许进入交通控制器区域的行进物的最大数量。

非时间交通模式

如果需要基于交通控制器区域内的每条路径来进行控制交通,则应采用非时间交通模式。在模式表

中,一行定义一个模式。对于每一个模式,均可定义交通控制器区域内的一系列节点之间的路径。

当交通控制器处于一种给定模式时,只有当行进物要进入的路径是当前模式中所定义的路径之一,

才允许进入。交通控制器将会保持当前模式,直到没有行进物在其区域中,然后,将接收一个最先

到达的行进物,并找到一个包含有此行进物所要求的进入路径的模式。这就是为什么这是一种非时

间通行模式的原因。交通控制器在同一模式下的停留时间没有限制。

模式数 - 此值是模式的数目,或者是表中的行数。输入需要的模式数目,然后点击 “应用”按钮,就

会创建相应的行。

入口数 - 是模型所需要的从/到入口(或列)的最大数目。如果某些模型不需要全部的列,可以让它

保持空白。

寻找最佳模式 - 如果选中此复选框,则无论何时只要交通控制器得到一个进入某个路径的请求,

而此路径不在当前模式中,则会搜寻所有模式来寻找是否有其它模式包含了已经输入的所有路径

289

Page 293: Flexsim handbook

Flexsim3.0 用户手册

以及新的路径。如果是,将转换为新模式,并允许此行进物进入。注意,这种方法可能降低模型速

度,因为交通控制器必须在每次有进入要求时都搜索其模式表。

进入模式表

Max_Nr - 此值指定给定模式下,交通控制器允许进入的行进物的最多数量。这与互斥模式的最大

数量很相似。

n_a - 此值是为将来开发预留的保留值,以后将实现同步通行模式。

From/To(从 /到)的输入字段 - 对于一种模式的每一条路径来说,可以指定路径的开始和目的节

点。输入节点的名称。注意,一个入口只描述一个方向的从节点到节点的连接。因此,要指定路径是

双向的,就需要指定两次“From/To”项的输入,每个方向一次。

使用此分页的有

交通控制器

290

Page 294: Flexsim handbook

实体窗口

交通控制器网络节点分页

交通控制器的网络节点分页用来编辑交通控制器与网络节点的连接。左边的面板显示所有连接到此

交通控制器的网络节点。选中其中一个节点,右边面板将会刷新显示一个新的交通控制器列表。右

边面板显示所有与在左边面板中所选的节点相连的交通控制器。正在编辑的交通控制器有一个额外

的“--此交通控制器”文本,告知此交通控制器是如何置于其它交通控制器中的。右边面板中的交通控

制器的排列可以对网络行为产生显著影响。参见交通控制器一节,可以得到关于交通控制器排列的

更多信息。如需将一个交通控制在排列中上移,可点击“上移”按钮实现。如需将一个交通控制在排列

中下移,可点击“下移”按钮实现。如需删除某网络节点与交通控制器的连接,可点击删除按钮。

使用此分页的有

交通控制器

291

Page 295: Flexsim handbook

Flexsim3.0 用户手册

运输机分页

货叉升降速度 - 此数值是运输机升降叉上下移动的速度。

使用此分页的有

运输工具

292

Page 296: Flexsim handbook

实体窗口

实体触发器函数

注释:对任何触发函数做了修改,都必须重新编译模型。

到达触发:当一个行进物到达某网络节点时,此节点调用此函数。如果此函数返回非 0值,则行进

物下一要去的路径将改变为由返回值指定的路径。返回值是下一路径的排序号。如网络节点路径分

页中所示。参见到达触发器下拉菜单。

中断触发:当一个实体的 MTBF 时间结束后,该实体调用此函数。参见故障/维修触发器下拉菜单。

继续触发:当某行进物继续往下一路径移动(此路径从该节点连出)时调用此函数。参见继续触发

器下拉菜单。

传输完毕触发:当一个临时实体到达输送机末端时,输送机调用此函数。参见处理结束触发器下

拉菜单。

创建触发:生成器创建新的临时实体时调用此函数。参见创建触发器下拉菜单。

收集结束触发:当一个暂存区容纳的临时实体到了其批次限制时调用此函数。参见处理结束触发

器下拉菜单。

停留时间结束触发:当一个临时实体的停留时间结束并且准备离开时,货架调用此函数。参见处

理结束触发器下拉菜单。

进入触发:当一个临时实体进入某实体时,该实体调用此函数。参见进入/离开触发器下拉菜单。

离开触发:当一个临时实体离开某实体时,该实体调用此函数。参进入/离开触发器下拉菜单。

低于高位标记触发:当液体体积下降到设计的高位标记之下时,储液灌调用此函数。参见液位上

升/下降经过高度标记触发器下拉菜单。

低于低位标记触发:当液体体积下降到设计的低位标记之下时,储液灌调用此函数。参见液位上

升/下降经过高度标记触发器下拉菜单。

低于中位标记触发:当液体体积下降到设计的中位标记之下时,储液灌调用此函数。参见液位上

升/下降经过高度标记触发器下拉菜单。

装载触发:当装载临时实体完成时,操作员或行进物调用此函数。参见装/卸载触发器下拉菜单。

消息触发:当其它实体使用 sendmessage()或 senddelayedmessage()命令给某实体发送一个消

293

Page 297: Flexsim handbook

Flexsim3.0 用户手册

息时,该实体调用此函数。参见消息触发器下拉菜单。

处理结束触发:当某实体的处理时间完成时,该实体调用此函数。参见处理完成触发器下拉菜单。

维修触发:当某实体的 MTTR 时间结束时调用此函数。参见中断/维修触发器下拉菜单。

资源可用触发:当分配器的下游资源变为可用时调用此函数。

高于高位标记触发:当液体体积上升到设计的高位标记之上时,储液灌调用此函数。参见液位上

升/下降经过高度标记触发器下拉菜单。

高于低位标记触发:当液体体积上升到设计的低位标记之上时,储液灌调用此函数。参见液位上

升/下降经过高度标记触发器下拉菜单。

高于中位标记触发:当液体体积上升到设计的中位标记之上时,储液灌调用此函数。参见液位上

升/下降经过高度标记触发器下拉菜单。

预置触发:当实体的预置时间结束时调用此函数。参见处理完成触发器下拉菜单。

卸载触发:当卸载临时实体完成时,操作员或行进物调用此函数。参见装/卸载触发器下拉菜单。

294

Page 298: Flexsim handbook

实体窗口

BFR 高级分页

发现欲载离物品- 完成装载将离开:此下拉菜单可在两个不同的时刻触发。第一,是在发现一个

临时实体将要使用一个运输机离开实体时触发,此函数称为“发现欲载离物品”。第二,是在运输机

到达后完成了装载时间,将要把临时实体运出时,被称为“完成装载将离开”。有一个变量传递给此

函数,来告诉用户适合用哪个操作。在这里可以进行管理,如对变量 nroftransportsout,还有如何

进一步显示实体的输入/输出等。

“发现欲载离物品 - 完成装载将离开” 函数参数的存取变量如下:

current:当前实体

notifyoperation:此变量值为 1或 0,1 表示运输输出通知操作,0 表示运输输出完成操作。

295

Page 299: Flexsim handbook

Flexsim3.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()来通知所有停止的运输机它们可以恢复操作了。

捡取偏移-放置偏移:此下拉菜单可在两个不同的时刻触发。第一是当运输机视图放置或卸载一个

临时实体到此实体上时,这称为放置偏移,将返回运输机在放置临时实体之前要进行偏移的偏移

296

Page 300: Flexsim handbook

实体窗口

位置。第二个时刻是当运输机将要从此实体捡取或装载一个临时实体时,这称为捡取偏移,将返回

运输机在捡取临时实体之前要进行偏移的偏移位置。

“捡取偏移-放置偏移”函数的存取变量如下所示:

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,则认为什么也没有做,并将执行其本身

默认的逻辑。

297

Page 301: Flexsim handbook

Flexsim3.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 分页

298

Page 302: Flexsim handbook

实体窗口

注释:参见任务执行器的偏移行进文档,可以获得更多关于偏移行进的信息。

开始偏移触发 - 此下拉菜单在偏移行进操作开始时被触发。一个 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,规定实体在行进过程

中能否旋转。

更新偏移触发 - 视图刷新之前触发此下拉菜单。表示实体是否在当前偏移操作的基础上调整其位置

299

Page 303: Flexsim handbook

Flexsim3.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:是三个引用,指向应在此函数中赋值,并将代表此函数返回的

300

Page 304: Flexsim handbook

实体窗口

偏移位置的那些节点。例如,如果需要选取/放置实体进行 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传递进去的。此参数可以是下面这些值之一:

301

Page 305: Flexsim handbook

Flexsim3.0 用户手册

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 (基本任务执行器)

属性页

视景属性分页

此属性页用来配置实体的外观和方向。

302

Page 306: Flexsim handbook

实体窗口

三维形状 - 此选项指定实体的 3D 形状,定义一个到.3ds、.wrl、.dxf或.stl 文件的路径。

编辑三维形状因子 - 点击此按钮打开编辑实体 3D 形状因子的视窗。3d 形状因子用来改变实体的

3d 形状。

303

Page 307: Flexsim handbook

Flexsim3.0 用户手册

上面视窗显示某暂存区 3d 形状的默认形状因子。下面的图片显示了另一个暂存区,其 x 形状因子从

0.5改为 1.0,其 sy 形状因子从 0.63变为 1.0。注意,黄色线框仍然反映暂存区的真实位置和尺寸,

但是 3d 形状已经在 x方向进行了平移,在 y方向进行了比例调整。

二维形状 - 此选择指定实体的 2D 形状,或者是在底部绘制的纹理。通常 2D纹理不在正投影视图

中显示,但是在平面视图中显示。

三维纹理 - 这里指定实体的 3D纹理。如果 3D 形状没有在一个 3d 文件中定义纹理,则此纹理将会

绘制在 3d 形状的表面。注意,如果已经定义了实体的 3d 形状的纹理,则此纹理不会被使用。

颜色 - 这里指定实体的颜色。注意,如果此实体已经在其 3d 形状文件里定义了素材,则此颜色不

会显示。此颜色只有在 3d 文件里没有定义素材的情况下才会显示。

位置、转角和尺寸 - 此选项用来定义实体的位置、转角和尺寸。

用户绘图代码 - 此下拉菜单用来定义用户自己的实体绘图代码。如果此域段的返回值为 1,则实体

的默认绘图代码不会被执行。注意,实体的绘图代码与它的 3d 形状不一样。大多数实体都没有任何

绘图代码,显示其 3d 形状,而有些实体,如输送机和货架,需要更多的动态绘制能力,而不是静

态的 3d 形状。返回 1则覆盖此专用绘图代码,而不是绘制实体的 3d 形状。要隐藏 3d 形状,在常规

属性页中不选显示 3d 形状的复选框即可。

常规属性分页

此分页提供关于实体的大部分信息,但是也可以设定实体的名称,也可设定如何绘制实体的标志。

304

Page 308: Flexsim handbook

实体窗口

名称 - 在此分页的顶部,可以输入实体的名称。当同时打开参数和属性视窗时要十分小心,因为一

个视窗中的“应用”可能覆盖掉另一个视窗中的改变。还有,在命名实体时,不要使用特殊的字符,

如>、<、*、-、(、)等,这将导致 Flexsim 不能正确地编译。空格和下划线是可用的仅有非阿拉伯数字字

符。此外,不要用数字开头命名。

类型 - 这里显示实体是什么类型。

位置 - 这里显示包含此分页描述的实体的上一层次的实体的名称。

输入/中间 /输出端口 - 此区域用来编辑实体的连接。从左边的组合框中选择输入端口、中间端口或

输出端口之一,右边的列表将显示相应的连接。点击一个连接,通过“上移 ”和“下移”按钮在列表中

上下移动它。使用删除按钮来删除连接。完成实体连接的编辑后,需要在模型运行前重置模型。

305

Page 309: Flexsim handbook

Flexsim3.0 用户手册

标志 - 可以在这里选择不同的选项从而显示/隐藏实体的不同部分,如实体中的物品、名称、端口等

用户描述 - 这里用来对实体进行描述,实体做什么用,包括在实体上添加的任何特殊逻辑。

标签属性分页

306

Page 310: Flexsim handbook

实体窗口

标签是自定义变量,可以在实体上指定。例如,如果需要跟踪知道进入某实体的类型 3 的临时实体

的数量,可以使用一个标签来记录这个值。使用 setlabelnum()、getlabelnum()和 label()命令来与所

创建的标签进行交互。可在命令集中找到更多关于这些命令的信息。

主面板显示实体的所有标签列表。点击视窗底部的添加数值/文本标签按钮可以添加数字和文本标签

也可以右键点击标签来编辑它,将有一个弹出菜单出现,给出如下图所示的选项。确保只是右键点

击此标签来得到此弹出菜单。如果是点击标签,然后右键点击,得到的将是一个文本编辑菜单。

关于删除标签的注释:只有右键单击某标签然后选择“删除标签”选项才可以删除它。你可能需要

从表格中退出(单击面板上的空白区域),然后右键点击标签。不要先击左键再右键点击标签,否

则出现的是一个不同的弹出菜单。

307

Page 311: Flexsim handbook

Flexsim3.0 用户手册

添加数值标签-此选项给实体添加一个数字标签,功能与底部的添加数字标签按钮相同。

添加文字标签-此选项给实体添加一个文字标签,功能与底部的添加文字标签按钮相同。

删除标签-此选项删除选中的标签。

复制标签-此选项复制选中的标签。

创建 /编辑标签表-使用此选项可以将标签当作一个二维表使用。它打开表编辑视窗以表格形式编

辑此标签。在模型运行过程中可以获取或设定此表中的值,方法是,使用 gettablenum()或

settablenum()命令,作为 label()命令第一个参数传递一个引用给标签。参见命令集可以获得更多关

于这些命令的信息。例如 gettablenum(label(current, "curitemtype"), 4, 5);。

按树结构展开-此选项用来在一个树视图中查看选中的标签。

308

Page 312: Flexsim handbook

实体窗口

统计属性分页

统计分页用来查看实体的状态、容量、停留时间信息。此界面被分成四个部分。第一个部分显示常规

信息,如容量、停留时间和状态。其它三个部分显示这些信息的图形。

内容 - 此框内显示实体当前、最小、最大和平均物品数。平均容量是根据时间计算的,而不是根据某

给定容量出现的次数来计算的。右边的图表按钮用来打开一个视窗显示此实体容量-时间图表。此图

与容量分页中的一样。此图表显示在下面。

309

Page 313: Flexsim handbook

Flexsim3.0 用户手册

关于容量图表的注释:为了记录一个实体的容量图形,必须打开该实体的“统计收集”选项。参见

统计菜单,可以获得更多关于“统计收集”的信息。

停留时间 - 此线框显示实体的最小、最大和平均停留时间。右边的图形按钮打开一个显示此实体停

留时间柱状图的视窗。图形与停留时间页中的一样,图形显示在下方。

关于停留时间柱状图的注释:为了记录一个实体的停留时间柱状图,实体的统计收集必须打开。

参见统计菜单,可以获得更多的统计收集信息。

状态 - 此框内显示实体当前状态值。每一状态的意义取决于所涉及的实体的类型。参见库实体以获

得关于每一状态的含义的更多信息。参见状态列表可以快速得到每一个状态的数字和宏定义。右边

的图表按钮打开视窗显示此实体的停留时间柱状图。此图与状态分页中显示的图一样。图形显示在

下方。

吞吐量 - 吞吐量线框内显示实体当前输入输出统计结果。

设置 - 可在这里定义如何进行统计记录,例如,在容量历史记录中存储的记录点的数量限制,停

留时间柱状图的上下界,停留时间柱状图的分组或“桶 ”的数量,以及是否显示平均停留时间的置信

区间。置信度的选择一般是 90%、95%或 99%。如果改变了这些设定,需要在模型重新运行之前进行

重置。

310

Page 314: Flexsim handbook

实体窗口

311

Page 315: Flexsim handbook

Flexsim 实体库

Flexsim 实体库

简介

Flexsim 库由实体组成,这些实体之间可进行方便易懂的交互。这些实体是采用面向对象的方法构

建的,具有父类/子类的层次结构。子类实体继承父类实体的属性和默认行为,同时又特别指定了适

用于特定情形的行为。在 Flexsim 中,库中的大多数实体都是由两个通用实体类,或者说是父类,

之一创建的。这里所说的两个通用类是固定实体(FixedResources)和任务执行器

(TaskExecuters)。

固定实体

固定实体是模型中固定不动的实体,可以代表处理流程的步骤,如处理站或存储区域。临时实体中

从头到尾穿过模型,经历进入、被处理、完成各个处理步骤的过程。当一个临时实体在模型中某一步

被处理完成,就被发送到下一步,或者说是发送到下一个固定实体。

任务执行器

任务执行器是模型中共享的可移动的资源。它们可以是操作员,被用来在某给定步骤中处理一个临

时实体时使用。或者,可以在步骤之间运输临时实体。它们还可以执行许多其它仿真功能。

随着 Flexsim 的应用经验积累,将会发现,固定实体和任务执行器之间的差别有时会变得非常模糊。

在模型中,任务执行器能够仿真类似固定实体的处理步骤,而固定实体也能配置用来像共享资源

一样行进和操作。唯一差别在于看待问题的角度。

学习建议

要学习 Flexsim 的实体库,我们建议首先阅读固定实体的帮助文档,然后阅读任务执行器的帮助文

档,同时还要看任务序列帮助。一旦熟习了这两种通用类型实体如何工作,就可以掌握它们的子类

的特定功能了。这些子类列出如下:

固定实体

发生器

暂存区

处理器

吸收器

输送机

313

Page 316: Flexsim handbook

Flexsim3.0 用户手册

合成器

分解器

流节点

分类输送机

复合处理器

货架

储液罐

基本固定实体(BFR)

任务执行器

操作员

运输机

314

Page 317: Flexsim handbook

Flexsim 实体库

堆跺机

起重机

升降机

机器人

基本任务执行器(BTE)

其它

实体库中也有一些实体,既不是任务执行器,也不是固定实体。这些实体列出如下。

分配器

网络节点

记录器

交通控制器

可视化工具

315

Page 318: Flexsim handbook

Flexsim3.0 用户手册

堆垛机

概述

堆垛机是一种特殊类型的运输机,专门设计用来与货架一起工作。堆垛机在两排货架间的巷道中往

复滑行,提取和存入临时实体。堆垛机可以充分展示伸叉、提升和行进动作。提升和行进运动是同时

进行的,但伸叉运动只在堆垛机完全停车后才进行。

详细说明

堆垛机是任务执行器的一个子类。它通过沿着自身 x轴方向行进的方式来实现偏移行进。它一直行进

直到与目的地位置正交,并抬升其载货平台。如果偏移行进是要执行装载或卸载任务,那么一完成

偏移,它就会执行用户定义的装载/卸载时间,将临时实体搬运到其载货平台,或者从其载货平台

搬运到目的位置。

默认情况下,堆垛机不与导航器相连。这意味着不执行行进任务。取尔代之的是所有行进都采用偏

移行进的方式完成。

关于将临时实体搬运到堆垛机上的注释:对于一个装载任务,如果临时实体处于一个不断刷新

临时实体位置的实体中,如输送机时,不能将临时实体搬运到载货平台上。这种情况下,如果想要

显示将临时实体搬运到载货平台的过程,则确保在模型树中,堆垛机排在它要提取的那个实体的

后面(在模型树中,堆垛机必须排在此实体下面)。

除了标准任务执行器所具有的属性外,堆垛机具有建模人员定义的载货平台提升速度和初始提升

位置。当堆垛机空闲或者没有执行偏移行进任务时,载货平台将回到此初始位置的高度。

应用背景

由于堆垛机的主要特性是它只沿着它的 x 和 z轴运动且不转动,所以此实体可用来模拟任何不做旋

转,只前后和上下往复运动的情形。在一些模型中,它被当作一辆简单的中转车使用,或者当作两

个或多个运输机之间的中转运输机使用。

状态

316

Page 319: Flexsim handbook

Flexsim 实体库

此实体的状态与任务执行器状态一样。

参数分页

任务执行器

碰撞

分配器

任务执行器触发器

堆垛机

相关主题

任务执行器

任务序列

基本固定实体(BFR)

概述

基本固定实体(BFR)是为开发人员提供的用来建立用户库的固定实体。它把固定实体的几乎所有

可继承逻辑传递给拾取列表函数,这样,用户库开发人员就能够切实地指定固定实体的所有功能。

详细说明

BFR 是固定实体的一个子类。它用来指定重置、进入、离开以及消息触发器的逻辑,同时也包括停止

/恢复实体、捡取/放置偏移、运输输入通知/完成、运输输出通知/完成、及其它高级功能。

在此实体的进入、离开、重置及消息触发器中,需要用 receiveitem()和 releaseitem()命令来实现接

收和释放临时实体的逻辑。还有一些命令可在处理临时实体时使用,如 setstate()和

senddelayedmessage()命令,和命令列表中固定实体类的所有命令。此实体是固定实体的基本要素

实现,而全部逻辑则由建模人员来完成。

进入/离开触发器的特有参数

BFR传递两个特有的参数给进入和离开触发器。参数 parval(3)传递变量 nroftransportsin 的当前值。

参数 parval(4)传递变量 nroftransportsout 的当前值。

参数分页

临时实体流

固定实体触发器

317

Page 320: Flexsim handbook

Flexsim3.0 用户手册

标签

BFR 高级

基本任务执行器(BTE)

概述

基本任务执行器(BTE)是为开发人员提供的用来创建用户库的任务执行器。它把任务执行器的几

乎所有可继承逻辑传递给拾取列表函数,这样用户库开发人员就可以切实地指定任务执行器的

所有功能。

详细说明

BTE 是任务执行器的一个子类。它用来指定偏移行进功能的逻辑,同时也包括停止/恢复实体、捡取

/放置偏移和其它高级功能。参见 BTE 页可以获得更多信息。

参数分页BTE

任务执行器

碰撞

318

Page 321: Flexsim handbook

Flexsim 实体库

分配器

任务执行器触发器

合成器

概述

合成器用来把模型中行进通过的多个临时实体组合在一起。它可以将临时实体永久地合成在一起,

也可以将它们打包,在以后某个时间点上还可以再将它们分离出来。合成器首先从输入端口 1 接收

一个临时实体,然后才会从其它输入端口接收后续的临时实体。用户指定从输入端口 2及更大序号

的端口接收的临时实体的数量。只有当用户要求的后续临时实体全部到达后,才开始对预置/处理时

间计时。可以把合成器设置为在其预置、处理和维修时间期间需要操作员。

详细说明

合成器是处理器的一个子类,而处理器又是固定实体的一个子类。在操作中,合成器首先从它的第

319

Page 322: Flexsim handbook

Flexsim3.0 用户手册

一个输入端口接收一个临时实体。合成器将一直等待直到从输入端口 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。

320

Page 323: Flexsim handbook

Flexsim 实体库

关于手工将临时实体移出合成器的注释:如果要使用一个任务序列或者 moveobject(移动实

体)命令手工地将临时实体移出合成器,则要确保为临时实体移出指定一个非 0端口。当合成器装

盘时,它将临时实体从它自身移动到容器中。这将触发离开触发器,而区别组件离开到容器中和容

器离开此合成器这两个事件的方法是根据离开触发器端口号进行判断。如果端口号为 0,则认为是

一个组件被移到容器中,则无操作。如果用户明确指定将容器临时实体移出合成器,而端口号指定

为 0,则会认为是一个打包了的临时实体,就不会接收下一个容器临时实体。

状态

空闲 – 合成器没有从输入端口 1 接收第一个临时实体。

收集 -合成器已经从输入端口 1 接收到了第一个临时实体,正在收集余下的临时实体。

预置 -合成器处于用户定义的预置时间内。

处理 -合成器处于用户定义的处理时间内。

阻塞 -合成器已释放临时实体,但是下游实体还没有准备好接收它们。

等待操作员 -合成器在等待操作员的到达,从而进行中断维修或是对某批次进行操作。

等待运输机 -合成器已释放一个临时实体,下游实体也准备好接收它,但是运输机还没将它捡取。

停机 –合成器中断停机。.

参数分页

处理时间

合成器

临时实体流

处理触发器

操作员

321

Page 324: Flexsim handbook

Flexsim3.0 用户手册

输送机

概述

输送机用来在模型中沿一系列路径移动临时实体。通过创建输送机的不同分段来定义路径。每个分

段可以是直段,也可以是弧段。弧段用转过的角度和半径定义。直段由长度定义。这样可以使输送机

具有其所需要的弯曲度。输送机可以是可积聚的,也可以是非积聚的。

详细说明

输送机是固定实体的一个子类。它有两种操作模式,可积聚模式与非积聚模式。在可积聚模式下,

输送机像辊道输送机一样运作,即使输送机末端被阻塞,临时实体也可以在上面积聚。在非积聚模

式下,输送机像皮带传送机一样运作,如果输送机被阻塞,则输送机上的所有临时实体都会停下。

接收 /释放逻辑

当临时实体到达输送机时,先是它的前端到达输送机的起始端。然后开始沿着输送机的长度方向向

下输送。一旦临时实体的全长被输送通过了输送机的起始端,输送机就重新打开其输入,可以接收

另一个产品了。当临时实体的前端碰到输送机的末端时输送机就释放掉此临时实体。

关于第一个分段是弧段的注释:如果输送机的第一段是弧段,则正在进入的临时实体将会像先

前的输送机的最后一个分段也是弧段一样被输送到此输送机上。这样,临时实体实际上是沿着弧度

被输送到此输送机上的。这可能不符合用户的期望。用户可能想要让临时实体直着放到输送机上。要

做到这点,不要让输送机的第一个分段为弧段,插入一个长度为 0 的直段作为第一段。这样,临时

实体就能直着放到输送机上了。

输送机一次只接收一个临时实体,且一次只释放一个临时实体。意思是说,如果使用一个任务执行

器将临时实体运入或运出输送机,一次只能有一个临时实体被运进来,一次也只能有一个临时实

体等待一个输送机来从输送机上将其捡取。当同时有多个操作员捡取临时实体并将其运送到输送机

上时,这一点很重要。为了实现同时操作,需要在输送机前端设置一个暂存区,因为暂存区可以同

时接收多个临时实体。

速度限制

输送机不执行临时实体的加速或减速。在仿真过程中,输送机的速度也不能动态地改变。没有设计

输送机的这种功能。

322

Page 325: Flexsim handbook

Flexsim 实体库

排列输送机

输送机还有一种简单的能力可以排列后面的输送机。按下 X键,然后点击输送机,则连接到其第一

个输出端口的输送机将被重新排列,与此输送机的末端齐平。同样,连接到那个输送机输出端口 1

的输送机也会被执行此操作,依次类推。这只适用于成系列的输送机,且只适用于输出端口 1。

输送机 X向尺寸

注意,输送机实体的实际尺寸(被选中时的黄色方框的尺寸)和输送机的长度是不同的。改变输送

机的 y向尺寸将改变其宽度。另一方面,改变输送机的 x向尺寸将改变其支柱的宽度。

状态

空 - 输送机上没有临时实体。

输送 - 输送机上的所有临时实体都在向下移动。

阻塞 - 前面的临时实体到达了输送机的末端,且已被释放,但是还没有被一个下游实体接收。注意

这并不意味着所有的临时实体都停下来了,如在可积聚输送机上就不是。

等待运输机 - 前面的临时实体到达了输送机的末端,且已被释放,也已被下游实体接收,但是运

输机还没有来捡取它。

光电传感器

输送机允许在它上面指定的位置安装光电传感器。光电传感器注视输送机上的一些位置,当光电传

感器被遮挡时,触发输送机的遮挡触发器和未遮挡触发器。除非在遮挡触发器和未遮挡触发器中明

确指定了改变输送机行为,它们并不影响输送机的其它逻辑。每个光电传感器都有两个用户定义的

域段:一个沿着输送机长度方向的从输送机起始端开始算起的位置,和跳转时间。

在任意给定时间,每个光电传感器都处于三种状态之一,描述如下:

未遮挡 /绿色 – 此状态表示没有临时实体遮挡光电传感器。

部分遮挡/黄色 - 此状态表示临时实体正遮挡着光电传感器,但是还未遮挡到其全部跳转时间。

遮挡/红色 - 此状态表示临时实体正遮挡着光电传感器,而且至少已经被遮挡了全部跳转时间。

可能发生下列状态转移。每次状态转移都触发一个触发器。

绿到黄 - 此状态转移发生的条件是,光电传感器没有被遮挡,一个临时实体经过并遮挡它。这时触

发输送机的遮挡触发器,向此触发器的遮挡模式参数中传递一个值 1。输送机也开始光电传感器跳

转时间的计时。

黄到红 - 此状态转移发生的条件是,一个光电传感器被部分遮挡(黄色状态),其跳转时间计时

期满。这将再次触发输送机的遮挡触发器,向触发器的遮挡模式参数中传递一个值 2。注意,在触发

器逻辑中,需要区分绿到黄转变和黄到红转变的不同触发器。还要注意,如果指定光电传感器的跳

323

Page 326: Flexsim handbook

Flexsim3.0 用户手册

转时间为 0,则遮挡触发器将会同时触发两次:一次是状态由绿变黄时,然后又是由黄变红时。

黄到绿 - 此状态转移发生的条件是,光电传感器被遮挡且处于黄色状态时,一个临时实体,后面

跟随一段空隙,完成经过光电传感器的过程,使它变为未遮挡。这时触发输送机的未遮挡触发器,

并向遮挡模式参数传递 1。

红到绿 - 此状态转移发生的条件是,光电传感器被遮挡处于红色状态,一个临时实体,后面跟随

一段空隙,完成经过光电传感器的过程,使它变为未遮挡状态。这将触发输送机的未遮挡触发器,

并向遮挡模式参数传递 2。

关于 0跳转时间的注释:如果将光电传感器的跳转时间设为 0,则遮挡触发器将同时触发两次:

一次是状态由绿变黄,然后是从黄变红。

关于使光电传感器变为未遮挡的注释:不是每次临时实体完全经过光电传感器时都会触发未遮

挡触发器。如果在此临时实体后面紧跟着一个临时实体,则此临时实体经过光电传感器之后,光电

传感器仍然保持遮挡状态。不过,如果用户指定一个大于产品实际长度的产品间隔长度,则在两个

产品之间就会有空隙,这将会使得在每个临时实体经过光电传感器之后都会触发未遮挡触发器。

光电传感器可视化

输送机的光电传感器显示为横跨输送机的直线。要隐藏输送机的光电传感器,可以按住 B键,然后

点击输送机,或者可以在输送机参数视窗的光电传感器分页中隐藏光电传感器。

参数分页

输送机

布局

光电传感器

临时实体流

输送机触发器

324

Page 327: Flexsim handbook

Flexsim 实体库

起重机

概述

起重机与运输机的功能类似,但它的图形经过了修改。起重机在固定的空间内工作,沿着互相垂直

的 x、y 和 z三个方向运动。它用来模拟有轨梁导引的起重机,如门式、桥式和悬臂式起重机。在默认

情况下,起重机吊具在捡取或放下临时实体,移动到下一个位置前,会上升到某一个高度。要想更

进一步地控制吊具从一次捡取到下一次捡取的运动,可以使用网络节点来定义所需要的路径。

详细说明

起重机是任务执行器的一个子类。它实现偏移行进的方式非常类似任务执行器。它行进到使它的 x/y

中心和 z 基面到达目的地位置。如果此偏移行进任务有一个涉及的临时实体,则起重机行进使其 x/y

325

Page 328: Flexsim handbook

Flexsim3.0 用户手册

中心和 z 基面到达临时实体的顶部,换句话说,它通过增加临时实体的 z尺寸来提高到达 z 的位置。

起重机使用一个起重机导航器。对于行进任务,起重机导航器使用一个简单的机制让起重机到达正

确的位置。起重机直线加速到其起重提升高度。一旦到达起重机提升高度,就以最高速度运动到目

标实体的 x/y位置。它一旦到达目标实体的 x/y位置,行进操作就完成了。余下的操作是下降到适当

的 z位置,由一个后续的装载/卸载任务的偏移行进来完成。

应用背景

默认的起重机导航器采用一种简单的方式执行行进,它只使用一组加速度、最大速度、减速度来使

得起重机到达正确的位置。许多起重机使用多个马达,每个都有自己的加速度、减速度和最大速度

属性。更灵活的起重机功能未来将发布,目前可以使用协同任务序列和层次结构组织的任务执行器

进行组合使用,以达到设定复合实体内部的多个加速度、减速度和最大速度的目的。

状态

起重机遵循任务执行器状态。

参数分页

起重机

任务执行器

碰撞

分配器

任务执行器触发器

分配器

概述

分配器用来控制一组运输机或操作员。任务序列从一个实体送到分配器,分配器将它们委派给与其

326

Page 329: Flexsim handbook

Flexsim 实体库

输出端口相连的运输机或操作员。最终接收到请求的可移动资源将执行此任务序列。

详细说明

分配器实体对任务序列实施排队和寻径逻辑。根据建模人员的逻辑,任务序列一旦传递给一个分配

器,则可能进行排队,也可能被立即分配。

当分配器接收到一个任务序列时,被 dispatchtasksequence()命令触发,首先调用其 “Pass

To(传递给)”函数。此函数返回一个端口号,它是要把此任务序列发送给的端口号。分配器将立即

把任务序列传送给与那个端口相连的实体。如果函数返回 0 而不是一个端口号,则任务序列在分配

器任务序列队列中进行排队。这是通过调用任务序列的排队策略函数完成的。排队策略返回一个与

此任务序列相关联的值,代表在队列中对此任务序列进行排序的优先级。高的优先级值排在队列的

前面,低的排在后面。通常会简单地返回任务序列的优先级值,但是如果需要,排队策略函数允许

动态地改变任务序列的优先级。在对队列中的任务序列进行排序时,实际上分配器多次调用排队策

略函数,队列中的每个任务序列都调用一次,从而将每个优先级的值与新的任务序列的优先级值

进行比较。一旦发现可放置新的任务序列的正确位置,就对它进行相应的排序。

分配器是所有任务执行器的父类,换句话说,所有任务执行器都是分配器。这意味着所有的操作员

或者运输机都可以扮演分配器或者团队指挥的角色,给组中其它成员安排任务序列,同时自己也

执行任务。

状态

分配器没有任何状态

参数分页

分配器

分配器触发器

升降机

327

Page 330: Flexsim handbook

Flexsim3.0 用户手册

概述

升降机是一种特殊的运输机,上下运输移动临时实体。它自动移动到需要捡取或放下临时实体的高

度。可以动画显示临时实体在进入或离开升降机的过程。这使得升降机的装载和卸载时间感觉更逼

真。

详细说明

该垂直起重设备是任务执行器的一个子类。它只执行偏移位置的 z轴方向的偏移量来实现偏移行进。

如果偏移行进是为了一个装载或卸载任务进行的,则偏移一完成,它就采用用户定义的装载/卸载

时间将临时实体移到载货平台上,或者从载货平台移到目的地位置。在移出或移入升降机时,临时

实体沿升降机的 x轴向运动。

关于将临时实体移上升降机的注释:对于一个装载任务,如果实体包含在一个不断刷新临时实

体位置的实体中,例如是一个输送机,则可能不能正常地将临时实体移动到升降机上。在这种情况

下,如果需要显示出临时实体被移到载货平台上的过程,则必须确保在模型树中升降机排在捡取

位置的实体的后面(在树中,升降机必须比此实体更低)。

默认情况下,升降机不与导航器相连。这意味着不会执行行进任务。所有行进都是采用偏移行进来

完成的。

应用背景

由于升降机主要特性是只沿 z轴运动,它可用来完成让实体只沿着一个轴向运动的目的。

状态

升降机遵循任务执行器状态。

参数分页

升降机

任务执行器

碰撞

分配器

任务执行器触发器

328

Page 331: Flexsim handbook

Flexsim 实体库

固定实体

概述固定实体是生成器、暂存区、处理器、吸收器、合成器、分解器、货架、流节点、复合处理器和储液罐的

父类。它定义将临时实体拉入到站点并继续发送实体的逻辑。用户不能将固定实体拖入模型中,而

是使用固定实体子类实体的临时实体流分页来编辑固定实体的逻辑。

详细说明

固定实体描述了一类用特定方式处理临时实体的实体。它们通过其输入端口 “接收”临时实体,对这

些临时实体执行一些操作,然后通过其输出端口“释放”临时实体将其传送下去。虽然不同类型的固

定实体在不同的时间接收和释放临时实体,但所有固定实体接收和释放临时实体的过程都是相同

的。例如,暂存区可以同时接收多个临时实体。在每个临时实体进入暂存区后,暂存区立即释放它

们。而另一方面,处理器只接收一个临时实体,处理它,然后释放它,并一直等待直到此临时实体

离开后才接收下一个临时实体。虽然暂存区和处理器在不同的时间接收临时实体,但它们接收和释

放临时实体的过程是相同的。它们在接收和释放每个临时实体时都经历一系列特定的步骤。其中一

些步骤是固定实体自动处理的,另外一些允许建模人员来定义接收和释放临时实体的方式。所有这

些建模人员定义的输入都可以在实体参数视窗的“临时实体流”分页中编辑。下图显示了一个固定实

体接收和释放临时实体的步骤。此图描述了一个没有选择“ 连续判断送往端口” 复选框的固定实体。

329

Page 332: Flexsim handbook

Flexsim3.0 用户手册

330

Page 333: Flexsim handbook

Flexsim 实体库

1.打开输入端口并寻找一个要接收的临时实体

当固定实体准备好接收一个临时实体时,它首先查看是否在使用拉动模式。如果是,调用从端口接

收函数。此函数返回将要打开的输入端口的序号值。如果返回 0,则打开所有输入端口。当上游的一

个临时实体被释放时,它调用拉入条件域段的函数来拉动那个临时实体。此域段将返回一个真

(1)或假(0)值。如果为真,就接收此临时实体。如果为假,就尝试为下一个已释放的临时实体

再次调用拉入条件函数,或者等待,直到上游固定实体又释放另一个临时实体。继续此循环直到拉

入条件函数对某个特定临时实体返回真(1),然后就接收此临时实体。然而,如果实体没有采用

拉动模式,则固定实体跳过所有拉动逻辑,只是等待第一个变为可用的临时实体。

拉动逻辑示例

上图显示了两个固定实体。这里设定,采用拉动模式的固定实体从上游固定实体拉入临时实体。上

游固定实体释放了 3 个临时实体(绿色的),还有 2 个正在处理(红色的)中。当拉动式固定实体

准备好接收上游固定实体的一个临时实体时,它对这 3 个临时实体依次调用拉入条件函数,直到

拉入条件函数返回一个真(1)值。一旦返回一个真值,拉动式固定实体就立即接收那个临时实体

并完成拉动逻辑,直到准备好接收下一个临时实体。如果 3次调用都返回假(0),则拉动式固定

实体将等待。此后,在仿真中,当临时实体 4被释放时,拉动式固定实体对它调用拉入条件函数。如

果返回真,就接收它。如果返回假,将重复这个过程,直到找到一个满足拉入条件的临时实体。

关于固定实体等待释放一个上游临时实体的注释:当一个上游临时实体被释放时,拉动式固定

实体将为那个特定的临时实体调用拉入条件函数。它将不会为先前释放的、且拉入条件函数已返回

假(0)值的那些临时实体再次调用拉入条件函数。如果需要对所有释放了的临时实体都重新进行

拉入条件的判断,则要选中“连续判断拉入条件” 复选框,这样,拉动式固定实体将在每释放一个临

时实体时,都会对所有已释放的临时实体重新进行拉入条件判断。

关于被一个实体从中进行拉动的上游实体的送往选项的注释:如果一个实体被配置为从上游

实体拉入临时实体,则那些上游实体的送往选项是无效的,意思是,不要为那些实体指定送往逻

辑,用默认的“第一个可用”选项就可以了。

2. 处理临时实体

331

Page 334: Flexsim handbook

Flexsim3.0 用户手册

临时实体一进入固定实体,就按照固定实体的类型被进行相应的“处理 ”,然后被释放。例如,如果

是一个处理器,则临时实体就会被处理一定的时间。如果是一个暂存区实体,则临时实体立即被释

放。如果是输送机实体,则临时实体沿着输送机长度方向输送,并在到达末端时被释放。

3. 释放临时实体并决定打开哪一个输出端口

当释放一个临时实体时,固定实体调用送往函数。与“从端口拉入”函数相似,此函数返回一个端口

号。然后,固定实体打开那个端口。如果返回 0,则打开所有端口。一旦打开端口,固定实体就等待

直到一个下游实体准备好接收此临时实体。如果配置固定实体为连续判断送往端口,则每当一个下

游固定实体变为可用能接收一个新的临时实体时,上游固定实体都会为此临时实体重新判断送往

端口条件。强调指出,这只在下游实体变为可用时执行。它不会为已经是可用的下游实体进行连续

判断。如果需要在其它某时刻,而不是当一个下游实体变为可用的时刻,手工强制进行再判断,则

可以在上游实体上掉用 openoutput()命令来实现。

关于送往返回值的注释:如果返回的端口号大于 0,则打开那个端口。如果返回端口号为 0,则打

开所有端口。如果返回的端口号为-1,则不释放此临时实体,而是在以后明确地使用 releaseitem()

命令来释放它,或者使用 moveobject命令将它移出。当它再次被释放时,将再次调用 sendtoport

函数。-1 的返回值是为高级用户所设计的更多功能。

4. 将临时实体传递给下一站点

一旦释放了临时实体,且下游实体已准备好接收它,如果没有选中“使用运输机”复选框,则此临时

实体将会被立即发送到下游实体中。如果选中了“使用运输机”复选框,则固定实体将会调用请求运

输机函数。此函数将返回一个任务执行器或分配器的引用。如果返回一个有效引用,则将自动创建

一个默认的任务序列,最终将有一个任务执行器来捡取此临时实体并将其送到目的地。也可以从“从

下列请求运输机”域段中返回一个 0值。如果返回 0值,则固定实体认为用户已建立了一个任务序列

它自己将不再创建默认的任务序列。如果用户返回 0,则需要创建用户的任务序列。实现此想法的易

行方式是,在“请求运输机”域段的下拉菜单中选取“手工创建任务序列”选项,然后在这里手工编辑

代码。

使用运输机

如果一个实体需要使用一个运输机将临时实体运送到下游实体,则当下游实体拉动临时实体,或

变为准备好接收临时实体状态时,就不再立即将此临时实体移入到下一站点,而是由实体创建一

个任务序列给一个任务执行器,以行进到此实体,捡取临时实体,行进到下游实体,并在那儿放

下临时实体。此操作包含若干重要步骤。第一,当这种情况发生时,实体调用按下列请求运输工具

函数,得到要接收此任务序列的实体的引用。然后,临时实体变为“等待运输机” 状态。这意味着此临

时实体的目的地已经确定,不能改变。发送到和拉入所要通过的端口也已经确定,不会改变。每个

固定实体跟踪两个数字:要进入此实体的临时实体数目,和要运输出此实体但还没有被捡取的临

时实体数目。这两个变量分别叫做 nroftransportsin 和 nroftransportsout。一旦此实体调用了按下列

332

Page 335: Flexsim handbook

Flexsim 实体库

请求运输工具域段的函数,它将递增自身的 nroftransportsout变量,并通知下游实体,下游实体

将随后递增它的 nroftransportsin变量。这样,实体就创建一个任务序列:

1. 行进到上游实体: travel task(行进任务)。

2. 装载临时实体:Frload task(固定实体装载任务)。

3. 在适当情况下则暂停转向其它任务序列: break task(暂停任务)。

4. 行进到下游实体:travel task(行进任务)。

5. 将临时实体卸载到下游实体: Frunload task(卸载任务).

注意,固定实体采用固定实体装载/卸载任务类型代替装载/卸载任务类型。这两个任务与常规的装

载和卸载任务相似,区别只在于,在任务执行器移动临时实体之前,它向固定实体通报操作要进

行,这样固定实体就可以适当地递增其 nroftransportsin/nroftransportsout变量的值。总之,上游实

体的 nroftransportsout变量和下游实体的 nroftransportsin变量在调用按下列请求运输工具函数时,

同时进行递增。然后,在任务执行器完成固定实体装载任务,并将临时实体从上游实体中移出之前

变量Nroftransportsout被递减。在任务执行器完成固定实体卸载任务,并将临时实体移入下游实体

之前,变量Nroftransportsin被递减。

变量 nroftransportsin 和 nroftransportsout 的统一对所涉及实体的正确操作是必要的,因为每个实

体都可能根据这些变量屏蔽进一步的输入/输出。例如,来看一个容量为 10 的暂存区。如果暂存区当

前数量为 5,还有 5 个产品没有到达,但是正在向此暂存区转移,那么暂存区必须关闭其输入端口,

因为尽管在当前时间点只有 5 个产品,却可能会装满。一个错误的 nroftransportsin变量可能致使暂

存区容纳临时实体数量出现严重问题。这意味着什么呢?意味着两点。第一,如果一个实体已选择

了运输一个临时实体到指定的下游实体,就不能将此临时实体返回或者改变其目的地,因为这样

将会使 nroftransportsin/out变量的递减陷入混乱。第二,相对于常规的装载/卸载,使用固定实体装

载/卸载任务要非常小心,因为可能影响此实体的输入输出功能。简单地说,每次执行一个按下列请

求运输工具函数都将最终(如果不是立即)导致创建一个从上游实体装载临时实体的固定实体装

载任务,和一个将临时实体卸载到下游实体的固定实体卸载任务。在其它情况下,应使用常规的装

载和卸载任务。

333

Page 336: Flexsim handbook

Flexsim3.0 用户手册

流节点

概述

流节点用于将临时实体从一个位置移动到另一个位置,其移动过程伴随时间的消耗。使用“A”键点击

拖动的简单连接方式,就可以使用流节点引导临时实体流。例如,如果需要产品花费一定时间从一

个暂存区移动到一个处理器,则在两者之间放置一个流节点,并连接暂存区的输出端口与流节点

的输入端口,然后连接流节点的输出端口与处理器的输入端口。

334

Page 337: Flexsim handbook

Flexsim 实体库

详细说明

流节点是固定实体的一个子类。它将持续接收临时实体直到达到其最大容量。临时实体一进入流节

点,流节点就对它执行送往函数。接着执行速度域段会找到临时实体的速度。然后将临时实体的位

置设为自身的位置,并开始向送往函数返回的下游实体移动临时实体。临时实体一到达目标实体的

位置,流节点就释放它。

注意,只要到达一个临时实体,流节点就执行送往函数。这与固定实体在释放临时实体时执行的常

用送往功能不同。此区别具有重要的含义。首先,不能从送往函数返回 0值,因为流节点需要立即

决定要送到哪一个下游实体。如果送往函数返回 0,则流节点将总是送到输出端口 1。第二,尽管可

以自由使用,但对流节点进行连续送往条件判断并没有多大意义。由于临时实体在进入时必须交付

一个输出端口,连续判断送往条件可能会导致这样的情形,即,临时实体到达一个目标实体,但

到达后其送往条件可能会改变,于是从一个与它所到达的端口不同的端口送出。

应用背景

流节点用来对临时实体的行进网络进行仿真。也可以用输送机来仿真行进网络。用输送机建模是从

创建和连接行进网络路径的角度来进行描述,而使用流节点是从创建和连接行进网络的节点的角

度来进行描述,在某些情况下能使建模相对更容易。然而,与输送机不同,流节点模式不提供沿路

径积聚临时实体的功能,只允许用一个最大容量值来限制网络上的交通。因此,如果有一块行进区

域需要定义更灵活的交通控制,则采用输送机而不要用流节点。还可以使用网络节点行进网络来代

替流节点来实现,方法是:使用任务执行器临时实体,选中一个上游固定实体的“使用运输机”复选

框,这个上游固定实体是用户想要临时实体从那里开始行进的实体,并在从下列请求运输机下拉

菜单中选中“Flow Item as TaskExecuter(临时实体作为任务执行器) ”。

状态

流节点不执行任何状态。可以使用其当前数量-时间图来得到流节点的统计数据。

参数分页

流节点

临时实体流

流节点触发器

分类输送机

335

Page 338: Flexsim handbook

Flexsim3.0 用户手册

概述

分类输送机是一种非积聚式输送机,允许沿着输送机有多个输入位置,同时也有多个输出位置。每

个输入/输出端口都有一个用户定义的输入/输出位置。

详细说明

分类输送机是输送机的一个子类,而输送机又是固定实体的一个子类。分类输送机的每个输入端口

都在沿着输送机长度方向上有一个关联入口位置。每个输出端口都有一个关联离开位置和一个阻塞

参数。

接收 /释放逻辑

对于每个进入点,只要进入点没有临时实体占据,且它前面有足够空间容纳进入的临时实体,分

类输送机将会在那个进入点接收临时实体。进入的临时实体的前边界对齐进入点放置,然后开始沿

输送机长度方向向下游传送。

关于进入 /离开位置的注释:如果已经改变了分类输送机的进入/离开位置,则为了正确布置那些

位置,需要重置模型。

每当一个临时实体到达输送机上的一个离开点时,分类输送机在那个端口检查发送条件。如果发送

请求返回真,则输送机将释放它从而“尝试”从那个端口将临时实体送出。如果下游实体准备好了接

收此临时实体,则尝试成功,临时实体将会从那个输出端口送出。如果尝试失败,将发生两种情况

之一。如果那个输出端口的阻塞参数为 0,则临时实体将成为“未释放的”并继续沿输送机的长度方向

向下输送。如阻塞参数是 1,整个输送机都会停止,直到下游实体准备好接收此产品。

到达输送机末端但没有离开的临时实体将循环回到输送机的起始端,并再次沿输送机长度方向向

下游移动。这就是为什么建议每个分类输送机的最后一个离开点要设定为阻塞的原因,除非想要它

们再次沿着输送机输送。当一个临时实体循环到输送机起始端时,触发进入触发器,所涉及的端口

号为 0。

关于阻塞的注释:分类输送机是非积聚式输送机,这意味着如果输送机上有一个产品停下,则输

送机上的所有产品都停下。在堵塞时,产品不会积聚。在模型中使用分类输送机之前,要清楚这一

点。因为,否则,用户可能不再对其分类输送机重新做许多逻辑,而使用常规输送机作为替代。

固定实体逻辑编程

分类输送机的固定实体执行方式与标准方式有几点不同,了解这些不同很重要。首先,分类输送机

总是用拉动模式。然而,与其它拉动模式的固定实体不同,它一定检查上游流动实体送往函数的值

336

Page 339: Flexsim handbook

Flexsim 实体库

以确保可以把临时实体送给分类输送机。第二点不同于常规固定实体的地方是,用户没有权利访问

“从下列端口拉入”域段。分类输送机自己处理这些逻辑,因为每个端口接收临时实体的能力取决于

进入点的位置和输送机上其它临时实体的尺寸和位置。还有,这里没有送往端口参数域段来返回端

口号。同样,临时实体离开要通过的端口取决于临时实体的位置和输出点的位置。相反,分类输送

机提供一个“发送条件”域段,每当有一个临时实体经过离开位置时就触发该域段的函数。此域段将

返回一个真或假值(1或 0),表示是否允许临时实体离开那个离开点。

关于使用运输机的注释:使用任务执行器将临时实体搬运到输送机上时要特别小心。分类输送机

通过某给定端口接收临时实体的能力取决于仿真中任意给定时间的输送机上其它临时实体的位置。

如果分类输送机变为准备好接收临时实体的状态的时刻,与其实际接收到临时实体的时刻之间存

在时间延迟,则在临时实体到达时,接收临时实体的机会可能已经错过了。这将导致分类输送机不

能正确的输送临时实体。如果需要将临时实体运输到分类输送机上,则只能将它们运输到输送机上

第一个进入点。或者,将临时实体运输到常规输送机上,由它喂入分类输送机。还有,离开分类输

送机时使用运输机的权利被取消。再次采用常规输送机,将临时实体从分类输送机喂入到这些常规

输送机中,并使用运输机使临时实体离开常规输送机。

进入/离开点可视化

进入/离开点在正投影/透视视图中用红色或绿色箭头绘出。输入位置用箭头指向输送机内部。离开位

置用箭头指向输送机外部。绿色箭头表示分类输送机可以通过那个进入点接收临时实体,或者正在

等待着通过那个离开点送出临时实体。红色箭头表示分类输送机那个进入点不可用,或者当前正有

临时实体等待着通过那个离开点。如要隐藏箭头,从它的属性视窗,或者从编辑选中实体菜单中设

置实体不显示端口。

状态

空:输送机上没有临时实体。

输送:输送机上的临时实体在向下游输送。

阻塞:输送机上的一个临时实体到达了离开点,且它的阻塞参数是 1,但是它还没有离开输送机,

所以输送机上的所有临时实体都停下来了。

参数分页

分类输送机

输送机

布局

输送机触发器

337

Page 340: Flexsim handbook

Flexsim3.0 用户手册

复合处理器

概述

复合处理器用来模拟对临时实体的顺序地有序操作过程。用户对每个复合处理器实体定义一系列的

处理过程。每个进入复合处理器的临时实体都将按顺序经历这些处理过程。复合处理器可能在处理

过程中调用操作员。

详细说明

复合处理器是固定实体的一个子类。它接收一个临时实体,将此临时实体放入其处理过程序列中逐

个经过,然后释放此临时实体。一旦临时实体离开此复合处理器,它又接收一个临时实体,再经过

这样的处理过程。复合处理器中同一时刻只能有一个临时实体。

对于用户定义的每一个处理过程,可以指定处理过程的名称、处理时间、那个处理过程需要的操作

员数目、送给那些操作员的任务的优先级和先占值,以及接收操作任务的操作员或分配器。在每个

过程的开始,复合处理器调用处理时间域段,将其状态设定为处理过程的名称,并且调用操作员

(如果操作员数目大于 0)。当处理完成之后,复合处理器释放此过程调用的所有操作员,并调用

处理结束触发器。它还用 parval(2)将处理过程序号传递给处理完成触发器。

应用背景

如果有一个站点,涉及多个操作,各有不同的处理时间,并且/或者有不同的资源,则应该使用复

合处理器。也可以将复合处理器当作不同类型操作的共享站点使用。例如,临时实体 1 需要经过操作

338

Page 341: Flexsim handbook

Flexsim 实体库

A、B、C、D,临时实体 2 需要操作 E、F、G、H,但是两种类型必须共享一个站点来进行处理。给复合

处理器设定 8 个处理过程:A-H,对于临时实体类型 1,将 E – H 的处理过程的处理时间设定为

0,对临时实体类型 2,将 A - D 的处理过程的处理时间设定为 0。

注意,复合处理器不提供管道处理过程。管道就是当一个临时实体完成了过程 1并移动到过程 2,

另一个临时实体可以进行过程 1 的处理。这样,在任意给定时刻,可以有几个临时实体“沿管道向下

流动”。如果需要模拟这种情况,可以使用顺序连接的多个处理器。

状态

空闲 - 没有临时实体在处理。

用户定义状态 - 用户自定义的状态,每个过程对应一个。

阻塞 - 复合处理器已完成对一个临时实体的所有处理并已释放,但没有下游实体准备好接收此临

时实体。

等待操作员 - 复合处理器等待操作员的到来以便开始某个处理过程。

等待运输机 - 复合处理器已完成对某个临时实体的所有处理,并释放了它,且一个下游实体已准

备好接收此临时实体,但是临时实体还没有被一个任务执行器捡取。

参数分页

复合处理器

临时实体流

复合处理器触发器

网络节点

概述

网络节点用来定义运输机和操作员遵循的路径网络。通过使用样条线节点来增加路径弯曲部分从而

修改路径。在默认情况下,在网络上行进的实体将沿着起始位置和目标位置之间的最短路径行进。

学习如何使用网络节点,可参考 Flexsim 教程的第 3 课。

详细说明

连接行进网络有如下三个步骤:

339

Page 342: Flexsim handbook

Flexsim3.0 用户手册

1. 将网络节点相互连接。

2. 将网络节点连接到扮演网关的实体上。

3. 将任务执行器连接到某些网络节点,在仿真开始时,任务执行器将呆在那些网络节点上。

相互连接网络节点

每个网络节点都可以有多条路径与其它网络节点相连。每条路径代表两条单行线路径。每条单行线

都可以单独配置。

在正投影 /透视视图中配置路径

要在两个网络节点之间创建一条路径,可以按住“A”键点击一个网络节点,然后拖动到另一个节点。

这将会创建两条经由两个网络节点间连接的单行线路径。路径用两节点之间的绿色带子画出。带子

被分为两个侧边。每个侧边描述路径的一个方向。随后的“A” 键拖动连接将会在一个单行线上进行允

许超车和禁止超车两种模式之间切换(黄色和绿色)。切换的方向取决于操作是从哪个节点拖到哪

个节点。下图显示了两条路径。第一条是两个方向都允许超车的。第二条是一条从右向左允许超车,

从左向右禁止超车的路径。路径带的两个侧边和它们所描述的方向的确定规则与美国公路系统的规

则相同:沿路的右边行驶。

一个“Q”键拖动连接将会把路径的一个单行方向切换锁定为“无连接 ”,它意味着不允许行进物沿那

个方向行进。这种类型的连接用红色绘制。下图显示了一个从左到右禁止超车而从右向左为无连接

的路径。如果在两个方向上都进行“Q” 连接,则整个连接将被删除。

340

Page 343: Flexsim handbook

Flexsim 实体库

通过网络节点的路径属性页配置路径

打开网络节点的参数视窗,路径属性页可用来配置从此节点向外延伸的所有单行线路径。如果需要

配置连接进入此节点的路径,则去编辑连接到此节点的那个节点的参数视窗。对于网络节点的每条

向外连接的路径,可以进行命名,指定其行进连接类型、间隔、速度限制以及“虚拟”用户距离。

• 名称 - 连接的名称仅为语义表达,对模型逻辑没有影响。

• 连接类型 - 有三种连接类型:无连接、允许超车和禁止超车。无连接意味着这条路径上不允许

有行进物沿着某个给定方向行进。如果选择无连接,则这条路径将会用红色表示相应的侧边。允

许超车意味着行进物不会沿着路径聚集,如果速度不同,只简单地相互超过就可以了。禁止超

车意味着此路径上的行进物将会聚集,采用间隔值作为它们之间的缓冲距离。

• 间隔 - 只适用于禁止超车的路径。这是在一个行进物后边界与另一个行进物前边界之间需要保

持的距离。

• 速度限制 - 这是路径的速度限制。行进物将会用它们自身的最小速度以及路径的限制速度行驶

如果路径是允许超车的连接,则一旦行进物上路就会加速或减速到适当的速度。但如果是禁止

超车的连接,则行进物将会立即将其速度改变为合适的速度,而不使用加速或减速。

• 虚拟距离 - 这里你可以输入一个用户定义的路径距离。如果想要设定一个特定的距离来覆盖路

径的(在三维模型中的)实际距离,或者,如果距离很大,而不想让另一个网络节点显示在模

型中一个相距极远的位置上,则可以使用虚拟距离。如果输入 0,则会使用路径的实际距离。否

则,将使用输入的距离。

每个节点的连接都有一个相应的号码。这和在路径属性页上的各连接的列表顺序相同。列表中的第

一个连接是连接 1,第二个是连接 2, 依次类推。如要得到通过给定连接号与此节点相连的网络节

点的引用,根据指定的连接号,使用 outobject()命令即可。

动态关闭侧边

在仿真过程中,可以使用 closenodeedge 和 opennodeedge命令动态地关闭路径。在这两个命令中

要指定网络节点,以及侧边的排序号或者名称。一个关闭的侧边将不再允许更多的行进物进入到此

侧边中,直到它再次被打开。不过,关闭时已经在侧边上的行进物可以继续行进并能离开此侧边。

关闭的侧边用橙色绘制,如下图所示。当模型重置时,所有先前被关闭的侧边都将重新打开。

341

Page 344: Flexsim handbook

Flexsim3.0 用户手册

侧边上的加速/减速

加速和减速应用在允许超车的侧边上,而不适用于禁止超车的侧边。实体在网络上行进时,将会逐

渐加速到它们的最大速度。当接近目的地时,它们也会进行减速。同样,以最大速度行驶的行进物

在到达一条限制速度小于其最大速度的侧边时,它将减速到限制的速度。行进物从开始沿着那条具

有较小限制速度的侧边行驶时开始减速,而不是在到达此侧边之前进行减速。

样条线控制点

在两个节点之间建立连接时,在两个节点之间默认放置一个样条线节点。它用橙色圆球绘制。在模

型中拖动此顶点就可以调整路径的曲率。也可以按住“X”键,点击样条线节点,就可以添加一个相邻

的节点。选中样条线节点,点击删除键,即可删除此节点。可以删除侧边的所有样条线节点,这将

使一条侧边变成直线路径。注意,如果一条侧边有太多节点,在那条路径上行驶的行进物可能会出

现急动现象。急动现象是样条线立方弯曲属性所固有的。减少样条线节点可以减轻急动现象。

连接网络节点到实体

要连接一个网络节点到模型中的某个实体,相对此实体,该网络节点扮演行进网关的角色,可以

在这个网络节点和此实体之间创建一个“A”拖动连接。这将在网络节点和实体左上角之间绘制一条蓝

色连线。这种类型连接意味着任何在网络上行进并想到达那个实体的任务执行器,都将行进到它所

连接的网络节点。

你可以将多个网络节点连接到一个实体上。这将导致一个想要到达那个实体的任务执行器行进到与

那个实体相连的、离它自己最近的网络节点。也可以将多个实体与同一个网络节点相连。这些功能如

下所示。左边的处理器连接到左右两个网络节点上。右边的网络节点也同时连接到左右两个处理器

上。

342

Page 345: Flexsim handbook

Flexsim 实体库

如果将一个节点连接到某站点,却没有看见蓝色连线,可试着四处移动网络节点来查看,也许蓝

色连线被网格线遮住了。

将连接网络节点连接到任务执行器要将一个网络节点连接到一个任务执行器上,使它在网络中行进,可以在网络节点与任务执行器

之间建立一个“A”键拖动连接。这将在网络节点与实体左上角之间绘制一条红色连线。建立这种类型

的连接意味着任何一个给定了行进任务的任务执行器都将沿着此网络到达其目的地。它还意味着,

当任务执行器需要穿过网络行进时,它第一个到达的节点是与它相连的那个节点。每当一个任务执

行器完成一次行进操作到达与行进操作的目的实体相连的网络节点时,任务执行器将会在那个节

点变为“非激活”当它在那个节点区域内进行某些操作时,将会绘制出连接此任务执行器的红色连线。

这意味着,任务执行器下一次再接到行进任务时,它必须首先返回到它以非激活态所在的那个网

络节点去,才能回到网络中。

可以将多个任务执行器连接到同一个网络节点。当模型重置时,连接到同一个网络节点的所有任务

执行器都会把它们的位置重置为最初把它们分配给的网络节点的位置。

如果连接了一个节点和一个任务执行器,却看不到红色连线,可试着移动网络节点来查看一下,

可能红色连线被网络线遮住了。

使用“D”键可将一个网络节点连接到一个任务执行器,并作为一个行进网关;使用“E”键来断开连接。

用这种方式连接,将会绘制一条连接到任务执行器的蓝色连线,标示着向着那个任务执行器行进

的其它任务执行器将行进到与它用蓝色线连接的网络节点去。

343

Page 346: Flexsim handbook

Flexsim3.0 用户手册

查看连接

建立了行进网络后,即可在正投影/透视视图中配置需要绘制的连接的类型。网络有一系列的绘制模

式,从显示最多信息到显示最少信息等方式各异。这些模式列出如下:

模式 1:显示节点、路径、实体/任务执行器连接、样条线节点。

模式 2:显示节点、路径、实体/任务执行器连接。

模式 3:显示节点、路径。

模式 4:显示节点。

模式 5:只显示一个节点。

按住“X”键并重复点击网络节点,整个网络将会在这些模式之间进行切换,每进行一次 “X” 点击,

就显示更少的信息。按住“B”键并重复点击网络节点,整个网络将会在这些模式之间进行逆向轮流切

换。也可以选中一系列网络节点(按住Ctrl键然后点击几个节点),然后在其中的某一个节点上做

“X”点击操作,则显示模式切换就应用到所选中的那些节点上。如果选中一系列网络节点,但却在一

个未被选中的节点上做“X”点击操作,则显示模式的切换将应用到那些没有选中的节点上。当模型很

大,而不需要显示所有的样条线连接时,此操作功能将很有用。

最大行进物数目

可以指定节点上允许的非激活或者静止的行进物的最大数目。一个非激活行进物就是连接到此网络

节点,且不在执行行进任务,而是在做其它任务或者空闲的行进物。如果在行进物和网络节点之间

有一条红色连线,可以凭这一点断定这个行进物是非激活的。

如果将网络节点的静止行进物的最大数目设为 1,且已经有一个行进物停在那个节点,则当其它行

进物到达此节点时就必须等待,直到第一个行进物在这个行进物完成行进任务之前离开此节点。注

意,这只适用于第二个行进物的目的地是此节点的情况。如果第二个行进物只是想通过此节点到其

它节点去,则它不必等待。

虚拟出口

网络节点还可以有虚拟出口。上面提到,当一个任务执行器完成行进任务时,它就在目标网络节点

处变为非激活态。一旦它接到另一个行进任务,就必须返回它所在的原来的网络节点从而回到网络

中。虚拟出口用来指定一个替代节点让任务执行器返回网络。虚拟出口创建在网络节点之间。按住“D”

键点击一个网络节点拖动到另一个节点,可以建立虚拟出口。示例如下:

344

Page 347: Flexsim handbook

Flexsim 实体库

上图显示了两个货架和两个网络节点。这两个网络节点是货架的行进网关(在货架与节点间绘制了

蓝色连线)。已经建了两个网络节点之间的双向虚拟出口连接(指向两个节点的橙色箭头)。这意

味着,如果一个任务执行器通过节点之一到达货架,而后需要返回网络,则它可以通过两个节点

中的总距离较短的那一个节点“离开”此区域。指向给定网络节点外部的橙色箭头表示,如果那个节

点上有一个非激活的任务执行器,它可以从那个节点所连接的网络节点中的任意一个“离开”。

按住“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”拖动操作,那么下一次重置模型时,距离/路径表将

会重新计算。

345

Page 348: Flexsim handbook

Flexsim3.0 用户手册

复制网络节点

复制网络节点要小心。如果复制了网络节点,在编辑这些新的网络节点之前,需要重置模型。

状态

网络节点没有任何状态。

参数分页

网络节点

连接

网络节点触发器

相关主题

教程:第 3 课

交通控制器

操作员

346

Page 349: Flexsim handbook

Flexsim 实体库

概述

实体可以调用操作员在预置、处理或者维修过程中使用他。他们将与调用他们的实体呆在一起直到

被释放。一旦被释放,如果又被调用,它们就可以去为另一个实体工作。他们也可以用来在实体之

间搬运临时实体。如果要操作员沿着特定的路径行走,可以将它们置于一个网络中。

详细说明

操作员是任务执行器的一个子类。他根据是否有一个相关临时实体需要执行偏移操作来决定如何执

行偏移行进。如果没有临时实体,他将和任务执行器完全一样执行偏移。他行走到使得其 x/y 中心与

z 基面到达目的地位置上。如果存在一个相关的临时实体,则操作员只沿 x/y平面行走。他只行走到

使他的前边界到达临时实体边界的位置点上,而不是 x/y 中心。这通过将总行进距离减去(x尺寸(操

作员) / 2 + x尺寸(临时实体) / 2)来得到。

使用 setframe 和 getframe命令,还可以动画显示操作员的走动。对于任何 3ds或wrl 文件,都可以

通过创建不同的 3d 模型来作为那个 3d 文件的帧,并将它们保存为<原始文件名> FRAME<帧编号

>.3ds。例如,操作员的原始 3d 文件是 Operator.3ds。当它的帧设为 0 时将绘制它的这个文件所表示

的图形。它的其它帧定义在 OperatorFRAME1.3ds,OperatorFRAME2.3ds,等等中。也可以指定

用户自己的 3d 文件和帧。但是,如果需要使用操作员,则应该知道操作员将自动地更新帧。如果想

要使用操作员,却还想定义用户帧,则它们必须于操作员的帧编号一致。这些编号描述如下:

帧 0 - 站立,手臂在身侧。

帧 1-6 - 行走,手臂在身侧。

帧 7-12 - 行走,手臂伸开去握住一个临时实体。

帧 13 - 站立,手臂伸开去握住一个临时实体。

帧 14 - 坐着,手臂在身侧。

帧 15 - 坐着,手臂伸开去握住一个临时实体。

如果操作员正在行走(在执行一个行进任务或者在进行偏移行进),则其图形的帧将在 1-12之间

自动更新。否则,根本不更新帧。当操作员不行走的时候,可以按照需要设定它的帧。如果想使操作

员即使在行走中也不更新帧,则可在操作员的绘图触发器中返回一个 1值,那么操作员就不会进行

任何帧的更新了。

应用背景

上面已经提到,需要查询临时实体的 x尺寸以减少总偏移距离。但如果临时实体的 x 与 y尺寸差得

太大,此功能可能就不能正常工作了,操作员会从临时实体的 y方向一侧接近临时实体。如果是这

347

Page 350: Flexsim handbook

Flexsim3.0 用户手册

种情况,要想看起来更逼真些,可以在操作员捡取它之前,交换临时实体的 x 和 y尺寸,并将其右

旋 90度,然后从操作员的装载/卸载触发器中取消这些改变。

状态

此实体遵循任务执行器状态。

参数分页

任务执行器

碰撞

分配器

任务执行器触发器

348

Page 351: Flexsim handbook

Flexsim 实体库

处理器

概述

处理器用来在模型中模拟对临时实体的处理过程。处理过程仅被简单地模拟为一段强制的时间延迟

总延迟时间被分成预置时间和处理时间。处理器一次可以处理多个临时实体。处理器可以设置中断

停机,并且经过随机或定期的时间间隔之后恢复在线状态。处理器可在其预置、处理及维修时间内

调用操作员。当处理器中断停机时,所有正在处理的临时实体都会被延迟。

详细说明

处理器是固定实体的一个子类。它还是合成器和分解器的父类。它持续地接收临时实体直到达到其

最大容量。每个进入处理器的临时实体都将经过一段预置时间和随后的处理时间。这两个过程结束

后,释放临时实体。如果最大容量大于 1,则并行处理多个临时实体。

关于最大容量值的注释:设置大于 1 的最大容量值时要非常小心。如果一次处理多个临时实体,

处理器将不能正确地请求操作员。如果最大容量大于 1,也将不能正确计算MTBF/MTTR 时间。还有

状态统计也不能正确记录。最大容量只是用来创建多个并行的简单的处理器,而不用往模型中拖入

那么多个图标。如果需要编辑除预置、处理时间和临时实体流分页参数之外的任何其它参数,则需

要拖出多个处理器图标,并设定每个每次只接收一个临时实体。

预置/处理操作员

如果设定处理器在预置或处理期间使用操作员,则在每个操作开始时,它都将使用

requestoperators命令调用用户定义的几个操作员,在此函数中,处理器作为站点,临时实体作为

相关实体。这将导致处理器停下来等待,直到操作员到达。请留意一个 requestoperators 任务序列

是如何构建的,如 requestoperators命令的文档中所描述。还要了解 stopobject命令是如何工作的,

可以参见命令集中的解释。一旦所有的操作员到达,处理器就恢复其操作。一旦操作完成,处理器

349

Page 352: Flexsim handbook

Flexsim3.0 用户手册

就释放它所调用的操作员。如果处理器被设定为使用相同的操作员来完成预置和处理过程,则处理

器要等到预置和处理操作都完成后才会释放操作员。

MTBF/MTTR(平均故障间隔时间/平均修复时间)

如果MTBF函数返回一个非零值,则处理器会模拟停机和维修时间。可以指定在 MTBF 时间里应用

哪种状态。尽管可以指定不是预置和处理状态的 MTBF状态,但是处理器却只有在预置或处理操作

中才可能中断停机。这意味着,虽然停留在其它状态的时间将会正确地累计,但即使累计的时间到

达处理器要中断的适当时间,处理器实际上并不会中断停机,直到它又接收到一个产品并开始计

时其预置时间。处理器在一次预置和一次处理过程中,最多只执行一次停机。对于处理时间很长的

情况,了解这点很重要。

如果将处理器配置为使用操作员进行维修,则处理器将使用 requestoperators命令调用用户定义

的几个操作员来对站点进行维修。在命令中,处理器既作站点,也作涉及实体。维修操作一结束,

就用 freeoperators命令释放操作员。

关于使用预置/处理操作员进行维修的注释:因为处理器不到整个预置和/或处理操作完成,不

会释放预置/处理操作员,所以不应将处理器配置为在维修期间使用相同的操作员。模型可能会形成

死锁,因为操作员正忙于预置/处理,并且不等到操作完成不会被释放,但是,此操作不等到用同

样的操作员完成处理器维修就不能完成。如果简单地处理,不把处理器配置为维修期间使用操作员

则在停机时,预置/处理操作员将会呆在站点,这和让它们实际进行停机操作是一样的。另一种选择

是在停机触发器中使用 freeoperators命令释放预置/处理操作员,然后在维修触发器中使用

requestoperators命令将它们调用回预置/处理操作。

状态

空闲 - 实体是空的。

设置 - 实体处于建模人员定义的预置时间内。

处理 - 处于建模人员定义的处理时间内。

阻塞 - 实体已释放临时实体,但是下游实体没有准备好接收。

等待操作员 - 实体在等待操作员到达,来进行维修或者处理。

等待运输机 - 实体已释放了临时实体,且下游实体也已准备好接收,但是运输机还没有捡取临时

实体。

停机 - 实体停机。

参数分页

处理时间

处理器

临时实体流

350

Page 353: Flexsim handbook

Flexsim 实体库

处理器触发器

操作员

暂存区

概述

暂存区用来在下游实体尚不能接收临时实体时暂时存储它们。暂存区的默认工作方式是先进先出式

意思是,当下游实体变为可用时,已经等待那个实体的等待时间最长的那个临时实体首先离开暂

存区。暂存区设有分批选项,可以积累临时实体到一个批次再释放它们。

Details详细说明

351

Page 354: Flexsim handbook

Flexsim3.0 用户手册

暂存区是固定实体的一个子类。它将持续接收临时实体直到达到其最大容量。如果设定不分批,暂

存区将会在临时实体到达之后立即释放它,并在释放每个临时实体之前调用收集结束触发器。

分批

如果激活了分批功能,则暂存区将会等待直到接收到的临时实体个数达到目标数量,然后作为一

批同时释放所有的临时实体。最大等待时间默认值为 0。最大等待时间为 0意味着没有最大等待时间

或者暂存区将无限等待下去以收集一批临时实体。如果最大等待时间是非零值,则当第一个临时实

体到达,暂存区就开始计时。如果计时已经到达最大限制而一个批次还未收集到,则暂存区停止收

集,并全部释放已经收集的临时实体。在释放临时实体前调用收集结束触发器,一个指向本批次中

第一个临时实体的引用作为函数的 item 参数传递,收集到的临时实体的数量作为 parval(2)传递。如

果将暂存区设置为“清空后接受下一批”,则当它一结束收集一个批次就立即关闭其输入端口,并一

直等到整个批次离开才再次打开输入端口。如果暂存区不“清空后接受下一批”,则它在结束收集每

个批次后立即就开始收集下一个批次。这意味着,在任何给定时间,暂存区中都可以有几个完成的

批次在等待离开。

关于批量目标大小的注释:设置一个批量的目标大小必须考虑不能使暂存区最大容量值无效。这

意味着如果设定目标批量值大于最大容量,则此暂存区将永远都不能达到其批量值,因为其最大

容量太小。

状态

空 - 暂存区是空的。

收集 - 暂存区在收集批量临时实体。

释放 - 暂存区已完成批量的收集,正在释放这些临时实体。同样,如果暂存区不分批,而在其队列

中有临时实体,则它将是处于此状态。

等待运输机 - 暂存区中有已经释放并准备好向下游移动的临时实体,但是正在等待一个运输机到

达来捡取临时实体

参数分页

暂存区

临时实体流

暂存区触发器

货架

352

Page 355: Flexsim handbook

Flexsim 实体库

概述

货架用来像在仓库货架上一样存储临时实体。货架的列数和层数可以由用户定义。用户可以指定位

置来放置进入货架的临时实体。如果使用一个运输机实体来从一个货架捡取或传递临时实体,运输

机将行进到货架中分配给那个临时实体放置的特定货格。货架也可以用来当作一个仓库的地面堆存

使用列号来指定在地面上放置临时实体的 x位置,用层来指定放置临时实体的 y位置。

详细说明

货架是固定实体的一个子类。它将持续接收临时实体直到达到其最大容量。每当一个临时实体进入

货架时,则对那个临时实体执行最小停留时间函数。此函数返回此临时实体的最小停留时间。货架

为那段时间启动一个计时器。当计时到时,货架就释放此临时实体。

进入/离开触发器中的附加参数

货架将附加的参数传递给进入和离开触发器。在这些函数中,parval(3)是临时实体所在的列,

parval(4)是临时实体所在的层。

放入列、放入层函数

调用放入列和放入层函数的时间取决于模型中货架的配置。这取决于临时实体是被运输到货架的,

还是直接从上游实体移动进来的。如果它们是被移动进来的,则在接收它们的时候(接收事件中)

调用放置函数。如果是被运输机运送到货架中的,则在运输机完成行进任务并开始卸载任务的偏移

行进时调用放置函数。参见任务序列可以获得更多关于任务序列的信息。在此时间点上,运输机向

货架询问将临时实体放在哪儿。货架调用放置函数来告诉运输机让它行进到正确的列和层。如果在

当运输机请求放置的时候调用放置函数,则当临时实体实际已经进入货架时就不再再次调用。这个

新的功能与 Flexsim2.6及更早版本中的功能不一样,它将在运输机请求和临时实体进入两个时刻

都调用放入列与放入层函数。

放置临时实体

如果货架是垂直存储货架,则进入货架的临时实体将放置在给定的列与层,靠着货架的 y边缘

(yloc(rack)- ysize(rack)。它们将会从那一点开始往货架里向后堆积。如果货架被用作地面堆存,则

临时实体将放置在地面上给定的列和层,并从那一点开始垂直堆积。

可视化

货架有几种显示模式以更好地观察货架中的产品。除了不透明属性值,可按住 “X” 键重复点击货架,

则货架将回在不同的显示模式之间切换。这些模式列出如下。

353

Page 356: Flexsim handbook

Flexsim3.0 用户手册

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]) 此命令返回货架给定列的层数。

状态

货架没有任何状态。使用当前数量曲线图可以获得统计数据。

参数分页

货架

尺寸表

临时实体流

货架触发器

354

Page 357: Flexsim handbook

Flexsim 实体库

记录器

概述

记录器用来在模型中以图形的形式记录和/或显示信息。更特殊一些的用法是用记录器来捕获表数据

标准数据和用户定义的数据。模型中所有数据类型都可用图形显示,并在 Flexsim 中写入表中,导

出到 Excel、Access或任何ODBC 数据库中。由于记录器实体是一个强大的数据表达工具,在此手

册的教程部分中提供了一个如何使用记录器的例子。

详细说明

参见记录器参数页可以获得更多关于记录器的信息。

355

Page 358: Flexsim handbook

Flexsim3.0 用户手册

储液罐

概述

储液罐用来存储临时实体,而使模拟效果仿佛是在一个液体灌或池槽中存储一样。用户可以定义储

液罐的流入流出速率。当液面上升或下降到用户定义的特定值时,可以触发某些事件。

详细说明

储液罐是固定实体的一个子类。它将持续接收临时实体直到达到其最大容量。每当进入一个临时实

体,它首先执行进入流速函数,改函数设定临时实体的体积,同时返回接收下一个临时实体之前

所需的时间。如果还有空间再接收一个临时实体,储液罐将在上述函数返回的时间点创建一个事件

来接收下一个临时实体。然后,如果此临时实体是储液罐的第一个临时实体,它将调用流出流速函

数,并将在返回的时间点创建一个事件释放临时实体。

每当一个临时实体离开时,储液罐首先检查先前是否是满的。如果先前是满的,现在有空间接收另

一个临时实体,它就调用流入流速函数,储液罐将在上述函数返回的时间点创建一个事件来接收

下一个临时实体。然后,如果储液罐中还有另一个临时实体,它就调用流出流速函数,并将在返回

的时间点创建一个事件释放临时实体。

状态

356

Page 359: Flexsim handbook

Flexsim 实体库

根据储液罐最后一次发生的事件来定义储液罐的状态。

空:在储液罐中没有临时实体。

收集:储液罐发生的最后一个事件是进入事件,储液罐中还有空间接收更多的临时实体。

阻塞:储液罐发生的最后一个事件是进入事件,但储液罐已经满了。

释放:储液罐发生的最后一个事件是离开事件,仍然有临时实体等待释放。

参数分页

储液灌

临时实体流

储液灌触发器

机器人

概述

机器人是一种特殊的运输工具,它从起始位置提升临时实体并将其放到终止位置。通常,机器人的

基面不会移动,而机器人的手臂在搬动临时实体时进行转动。机器人的手臂有两段组成,伸出向着

要移动的临时实体或是目的地运动。用户可以设定手臂的长度。也可以设定机器人手臂转动和伸展

的速度。

详细说明

机器人是任务执行器的一个子类。它通过伸展其手臂到目的位置来实现偏移行进。注意,在偏移行

进时,机器人的 x/y/z位置根本不会改变。在它向目的地行进的过程中,只是其 y、z方向的旋转和手

臂伸展发生改变。如果目的地位置超出了机器人手臂的最大伸展范围,那么机器人只将伸展手臂到

357

Page 360: Flexsim handbook

Flexsim3.0 用户手册

最大伸展长度。机器人使用 y/z旋转速度和手臂伸展来执行偏移行进以到达目的地。偏移行进时间就

是伸展手臂、绕 z轴转动和绕 y轴转动的时间的最大值。它不使用标准的任务执行器最大速度、加速

度和减速度值。

在默认情况下,机器人不与导航器相连。这意味着除非用户明确地将其连接到网络上,否则它不执

行行进任务。

状态

机器人遵循任务执行器状态。

参数分页

机器人

任务执行器

碰撞

分配器

任务执行器触发器

分解器

概述

分解器用来将一个临时实体分成几个部分。分离可以通过拆分一个由合成器装盘的临时实体,或者

复制原始实体的多个复本来实现。在处理时间完成后进行分解/拆盘。可以设置分解器在其预置、处理

和维修时间内需要操作员。

358

Page 361: Flexsim handbook

Flexsim 实体库

详细说明

分解器是处理器的一个子类,而处理器是固定实体的一个子类。它接收一个临时实体,然后执行预

置和处理时间。如果分解器是去托盘模式,则当预置和处理时间一结束,分解器就把去托盘数量的

临时实体从临时实体移入到自身内部。然后释放拆出的所有临时实体。当所有拆盘分离出的临时实

体全部离开分解器时,就释放容器实体。如果分解器是分解模式,则当预置和处理时间一结束,分

解器就复制此临时实体,得到总数等于分隔数量的临时实体。然后释放所有的临时实体。对于去托

盘和分解两种模式,一旦所有的临时实体离开分解器,分解器将立即接收下一个临时实体。

关于分解/去托盘数量的注释:去托盘与分解数量对于这两种方式存在细微的差别。在去托盘模式

中,分解器精确地拆出此参数指定数量的临时实体。这意味着,结果得到的总的临时实体数比拆盘

数量多 1(拆盘数量+容器临时实体)。然而,在分解模式中,分解器进行分解数量-1次复制。这意

味着,结果得到的临时实体总数与分解数量精确相等。

关于去托盘次序的注释:当分解器为去托盘模式时,它从后往前拆盘容器中的临时实体,就是说,

它首先将最后一个临时实体从容器中拉出,然后拉出倒数第二个,依次类推。如果需要临时实体按

特定次序拆盘,则在进入触发器中设定它们的排序号。

状态

空闲:实体是空的。

设置:实体在用户定义的预置时间内。

处理:实体在用户定义的处理时间内。

阻塞:实体已释放临时实体,但是下游实体还没有准备好接收。

等待操作员:实体在等待操作员的到来,以进行维修或者操作。

等待运输机:实体已释放临时实体,下游实体也已准备好接收,但是运输机还没有捡取此临时实

体。

停机:实体停机。

参数分页

处理时间

分解器

临时实体流

处理器触发器

操作员

359

Page 362: Flexsim handbook

Flexsim3.0 用户手册

吸收器

概述

吸收器用来消除模型中已经完成全部处理的临时实体。一旦一个临时实体进入吸收器,就不能再恢

复。任何涉及即将离开模型的临时实体的数据收集,都应在它进入吸收器之前或在吸收器的进入触

发器中进行。

详细说明

吸收器是固定实体的一个子类。它将持续接收临时实体,并在它们进入之后立即消除这些临时实体

由于它消除所有接收到的临时实体,所以吸收器在临时实体流分页里就没有任何送往逻辑。

应用背景

有时需要循环利用临时实体而不是消除掉。这样可以提高模型的性能。要实现这点,不要使用吸收

器,而代之为一个暂存区。进入暂存区的临时实体可以被移进模型中的其它部分而实现重新进入。

状态

吸收器无任何状态。请参见其输入统计。

参数分页

临时实体流

吸收器触发器

360

Page 363: Flexsim handbook

Flexsim 实体库

发生器

概述

生成器用来创建在模型中行进通过的临时实体。每个生成器创建一类临时实体,并能够为它所创建

的临时实体分配属性,如实体类型或颜色。模型中至少有一个生成器。生成器可以按照每个到达时

间间隔、每个到达时间表或一个定义的到达序中创建临时实体。

详细说明

尽管生成器不接收临时实体,它也是固定实体的一个子类。相反,它创建并释放临时实体。因此,

在其临时实体流参数页中没有输入部分。生成器可以按下面三种模式之一进行操作:

• 到达时间间隔模式:在按时间间隔到达模式中,生成器使用到达时间间隔函数。此函数的返

回值是直到下一个临时实体到达需要等待的时间。生成器等待这么长的时间,然后创建一个临

时实体并释放。临时实体一离开,它再次调用间隔到达时间函数,并重复这过程期。注意,到达

间隔时间定义为一个临时实体离开与下一个临时实体到达之间的时间,而不是一个临时实体到

达与下一个临时实体到达之间的时间。如果想要将到达间隔时间定义为两次到达之间的真实时

间,则在下游使用一个容量很大的暂存区,确保生成器在生成临时实体时立即将其释放。还可

以指定间隔到达时间是否在第一个到达事件上使用,或者说,第一个临时实体是否在 0 时刻创

建。

• 到达时间表模式:在到达时间表模式中,生成器遵循一个用户定义的时间表来创建临时实体。

此表的每一行指定了在仿真中某给定时间的一次临时实体的到达。对每个到达进入,可以指定

到达时间、名称、类型、要创建的临时实体数目,以及这次到达附加的临时实体标签。到达时间应

在时间表中正确排序,意思是每个进入时间应大于或等于先前进入的到达时间。如果将发生器

设定为重复时间表,则在完成最后一个到达时立即循环回到第一个到达,导致第一个进入到达

与最后一个进入到达发生在完全相同的时刻。这里提醒一下,当重复时间表时,第一个进入到

达时间适用于第一次的时间表循环。这使得一个初始到达时间只执行一次,而不被重复。如果需

要生成器在最后一次到达后和重复的第一次到达之间等待一段给定的时间,则在表的末尾添加

一个进入,给他指定一个大于先前进入到达时间的到达时间,但是将那个新的进入的到达临时

实体数量设为 0。

361

Page 364: Flexsim handbook

Flexsim3.0 用户手册

• 到达序列模式:到达序列模式与到达时间表模式项类似,只不过这里没有相关联的时间。生成

器将创建给定表格行的临时实体,然后当那个进入的最后一个临时实体一离开,就立即转到表

的下一行。也可以重复使用到达序列。

状态

生成:在生成器中没有临时实体。它正在等待直到下一次创建事件发生以创建临时实体。

阻塞:已创建了临时实体,且临时实体正等待离开生成器。

参数分页

生成器

临时实体流

生成器触发器

任务执行器

概述

在库中,任务执行器是几种实体的顶层类。操作员、运输机、堆垛机、起重机和其它可移动资源都是

从任务执行器类派生出来的。所有这些实体都可以行进,装载、卸载临时实体、充当处理站点的共享

资源,和执行其它仿真任务。

参见教程的第 2 课可以学习更多关于如何使用任务执行器的内容。

详细说明

任务执行器及其子类实体能执行任务序列,进行碰撞检测和执行偏移行进。

任务执行器也是分配器的一个子类,因此,一个任务执行器实际上可以扮演团队指挥的角色来将

任务序列分配给团队成员。然而,其处理和分配逻辑与分配器有细微的差别。当任务执行器接收到

一个任务序列时,它首先查看它是否已经有一个激活的任务序列。如果没有激活的任务序列,或者

如果新接收的到的任务序列是先占的并且比当前激活任务序列的优先级高,则它将开始执行新的

任务序列,则根据需要先占当前的激活任务。否则,它就执行常规的分配逻辑。如果没有立即传递

任务序列,它将在执行器的任务序列队列中进行排队。如果当任务执行器完成其激活任务序列时那

个任务序列还在队列中,则任务执行器将执行那个任务序列。

362

Page 365: Flexsim handbook

Flexsim 实体库

用户定义的参数

所有的任务执行器都包含有下列用户可以定义的参数。

容量:此参数为实体的最大容量定义一个值。在默认的操作中,实体从来不会装载超过此值指定数

量的临时实体。

关于高级用户使用容量值的注释:如果创建用户自己的任务序列,则此值可能具有欺骗性。由于

任务执行器首要的和最重要的职责就是执行任务序列,所以,如果给实体一个任务序列让它装载

比它的最大容量还多的临时实体,则它也仍将装载这些临时实体。真正使用最大容量值的例子是

TASKTYPE_BREAK 任务。如果一个任务执行器执行进入一个中断任务,且已达到其最大容量,则

它将不会执行中断,而将继续执行其当前任务序列,而不是中断转而进行另一个任务序列。在默认

情况下,当自动创建任务序列时就会这样,因为每个任务序列负责装载一个临时实体。

最大速度、加速度、减速度:这几个值定义任务执行器的最大速度、加速度和减速度。最大速度用

每单位时间的长度单位数来定义,而加速度和减速度用每时间单位的平方的长度单位数来定义。例

如,模型用米和秒来定义,则速度值的单位是米/秒,等。这些值用来定义实体的峰值速度,和在执

行诸如 TASKTYPE_TRAVEL 和 TASKTYPE_TRAVELTOLOC 的任务类型时的速度变化。

装载 /卸载任务的行进偏移:此值决定任务执行器在装载/卸载一个临时实体时是否执行偏移行进

以到达装载/卸载位置。例如,如果不选中此项,且任务执行器在一个网络上行进,则它将只行进到

装载/卸载站的网络节点去。在执行装载过程中将停留在那个节点上。

行进时转向:如果想要实体在行进过程中旋转调整方向,可用此选项指定。这对模型的输出没有

影响,只是为了视觉效果目的。

装载时间:此域段在每个装载任务的开始时执行。它的返回值是任务执行器在装载临时实体并转到

下一个任务之前要等待的时间。注意,如果将任务执行器配置为“装卸时采用行进偏移”,则它将首

先行进正确的偏移量,然后开始装载时间计时。这样,装载时间被添加到偏移行进时间的末尾;而

不是偏移行进时间的一部分。

卸载时间:此域段在每个卸载任务开始时执行。它的返回值是任务执行器在卸载临时实体并转到下

一个任务之前要等待的时间。注意,如果将任务执行器配置为装卸时采用行进偏移,则它首先行进

正确的偏移量,然后开始卸载时间计时。这样卸载时间就添加到偏移行进时间的末尾;而不是作为

偏移行进时间的一部分。

中断条件:此域段在任务执行器执行到一个暂停任务时执行。其返回值是一个任务序列的引用。此

域段中的逻辑将搜索任务执行器的任务序列队列,并找到一个适当的任务序列作为中断当前任务

序列后要转到的任务序列。

363

Page 366: Flexsim handbook

Flexsim3.0 用户手册

参数分页

任务执行器

碰撞

分配器

任务执行器触发器

状态

任务执行器的状态只取决于任务执行器所执行的任务类型。许多任务处于特定的不可变的状态,用

户无法改变。但是一些任务允许用户为任务执行器指定状态,使它在执行那个任务时处于这个状态

下列是一些可以经常看到的任务执行器的状态。参见任务序列可以获得更多关于任务和任务序列的

信息。

空载行 进:实体正在向目的地实体行进,且没有装载任何临时实体。此状态只专有关联

TASKTYPE_TRAVEL 任务。

装载行 进:实体正在向目的地实体行进,且装载着一个或多个临时实体。此状态只专有关联

TASKTYPE_TRAVEL 任务。

空载偏移行进:实体正在执行偏移行进,且没有装载临时实体。

装载偏移行进:实体正在执行偏移行进,且装载着一个或多个临时实体。

装载:实体正在装载一个临时实体。此状态与 TASKTYPE_LOAD 任务关联,且仅适用于实体已完

成偏移行进、正在执行用户定义的装载时间而在装载临时实体之前的那段时间。

卸载:实体正在卸载一个临时实体。此状态与 TASKTYPE_UNLOAD 任务关联,且仅适用于实体

已完成偏移行进、正在执行用户定义的卸载时间而在卸载临时实体之前的那段时间。

使用:实体正在一个站点被使用。此状态常用于操作员,当操作员达到站点并被预置、处理或维修

过程使用时,即为使用状态。使用状态通常与一个 TASKTYPE_UTILIZE 任务关联,但是那个任务

也可以指定一个不同的状态。同样,其它任务类型,如 TASKTYPE_DELAY,也可以采用使用状态

偏移行进

偏移行进是一种机制,可以采用同样的行进界面,让不同类型的实体按不同的方式行进。例如,一

个实体要把一个临时实体放到货架中指定的列和层。实体行进到放下临时实体的正确位置的方式取

决于实体的类型。一个操作员会走到货架那个列的位置并将临时实体放置到相应的层。一个运输机

行进到那个列,但必须将起货叉提升到相应层的正确高度。它可以在 x 和 y两个方向行进,但只有

它的货叉可以在 z方向行进。一个堆垛机只会沿着它的 x方向行进,提升其载货平台到相应的层高,

然后从货架中取出临时实体。因此说,每个实体实现行进的方式是不同的,但是表现是相同的:行

进到正确的地点,把临时实体放到货架中。偏移行进是本质上区别任务执行器子类的唯一凭据。参

见实体的帮助页中的“详细说明”部分,可以获得每个子类如何实现偏移行进的相关信息。偏移行进

用于 load/unload(装载/卸载)任务,traveltoloc(行进到位置)和 travelrelative(相对行进任务),以

及 pickoffset(捡取偏移)和 pickoffset(放下偏移)任务中。

364

Page 367: Flexsim handbook

Flexsim 实体库

偏移行进的表现很简单。每种类型的偏移要求都转化为 x、y、z方向的偏移距离,有时是一个临时实

体的引用。例如,如果一个实体得到一个 traveltoloc(行进到位置)的任务,目的地是(5,0,0),

而其当前位置是(4,0,0),则它自动将偏移任务转化成一个偏移请求(1,0,0),意思是需要在 x

方向上行进 1 个单位。 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

365

Page 368: Flexsim handbook

Flexsim3.0 用户手册

个球对球碰撞。如果共有 6 个任务执行器在执行碰撞检测,则模型在每次间隔时碰撞检测要检测

750 个球对球碰撞。这将会大大降低模型速度,尤其是当碰撞检测间隔很小时。

使用 setcollisioncheck()命令可以打开或关闭给定任务执行器的碰撞检测选项。参见命令集可以获得

更多关于此命令的信息。

交通控制器

概述

交通控制器用来控制一个交通网络上给定区域的交通。连接网络节点与交通控制器可以建立一个交

通控制区域。这些网络节点就变成交通控制区域的成员。同一个交通控制器实体中的任意两个网络

节点之间的路径都是交通控制路径。行进物只有在获得交通控制器许可的情况下才能到那条路径上

去,这条路径在给定时间只允许一定数目的行进物进入区域,或者可以使用非时间模式,只允许

行进物立即到给定的路径段上去。

详细说明

按住“A”键并从交通控制器拖动到节点即可连接网络节点和交通控制器。这将这将会在节点和交通控

制器之间绘制一条红色连线。如果两个节点之间有路径,且两个节点都是同一个交通控制实体的成

员,则那条路径就被指派为交通控制路径,或者叫成员路径。

所有进入交通控制区域的行进物都必须获得交通控制器的许可。一个交通控制器的区域由所有交通

控制路径和网络节点成员自身组成。这就是说,“进入”交通控制区域定义为进入一条属于交通控制

区域成员的路径,或者到达一个其网络节点是交通控制区域成员之一的最终目的地节点。然而,如

果行进物经过的网络节点是交通控制区域的成员,而继续行进进入的路径不是此交通控制区域的

成员,则此行进物不被认定为进入此交通控制区域。在这种情况下,行进物不需要获得许可。行进

物 “离开”交通控制区域的方式有两种。一种是行进物从交通控制区域的一条成员路径到一条非成员

路径,或者是行进物从一个成员网络节点的“非激活”状态继续到一个不是此交通控制区域的成员的

路径上去。每当一个行进物离开一个饱和区域时,就为其它行进物进入此区域创建空间。也可以通

366

Page 369: Flexsim handbook

Flexsim 实体库

过调用 reassignnetnode()命令,将行进物指派给一个非此区域成员的网络节点,来让一个非激活

行进物离开此交通控制区域。下表显示了进入/离开定义。

交通控制区域进入 /离开标准 从…来 到…去

进入区域 非成员路径 1.成员路径或

2. 成员最终目的地节点

离开区域 1.成员路径或

2.在成员节点的非激活态

非成员路径

交通控制器实体用两种模式屏蔽向其区域的进入:互斥模式或非时间模式。

互斥

当交通控制采用互斥模式时,在给定时刻,它只允许给定数量的行进物进入其控制区域。一旦区域

处于饱和状态,要求进入的行进物就必须在交通控制区域边界等待,直到另一个行进物离开此区

域释放相应的空间。

非时间交通模式

当交通控制采用非时间模式时,它根据它的模式表和要求进入此区域的行进物的进入路径来屏蔽

向此交通控制区域的进入。模式表的每一行代表一种模式。每种模式包括一系列的交通控制器允许

的进入路径。

交通控制根据进入要求来选择模式。如果区域内没有行进物,交通控制器就只是等待。当第一个行

进物要求进入区域的某给定成员路径时,交通控制器搜寻它的模式表,以找到包含这条路径的模

式。如果找到,交通控制器就进入这种模式,允许行进物进入此区域。交通控制器一旦处于某给定

模式,它将会保持这种模式直到所有行进物都离开此区域。然后它会等待下一个“第一个行进物 ”的

请求,并将重复此循环过程。

动态改变模式

如果将交通控制器设定为搜寻最佳模式,则它可能在没有清空区域的情况下动态地改变模式。交通

控制器对在当前模式下有通行历史的路径进行记录。当一个行进物进入一条路径时,交通控制器将

此路径标记为诸如“有通行”或 “脏”等状态。即使后来行进物离开了此区域,标记记录仍然保留。只有

在彻底清空交通控制区域时才会将记录重置。当一个行进物请求进入一条路径,而此路径不是当前

模式的成员,则交通控制器搜寻表中的剩余部分来查看是否有其它的模式包含有当前记录为“脏”的

所有路径和行进物要求的路径。如果找到一个,就改变为那种模式,并允许行进物进入那个区域。

否则,行进物必须等待。

367

Page 370: Flexsim handbook

Flexsim3.0 用户手册

使用多个交通控制器

每个网络节点都可以同时与 50 个交通控制器相连。下图显示了一个与两个交通控制器相连的网络

节点。

注意,从节点到左边交通控制器之间的连线是橙色的,而到右边交通控制器之间的连线是红色的。

这些颜色显示了交通控制器在节点成员列表中的顺序。颜色排序以 ROYGBIV方式(红、橙、黄、绿、

篮、靛、紫)完成。网络节点的第一个交通控制器用红色线条画出,第二个是橙色,依次类推。此排

序对模型的功能来说非常重要,也可以避免死锁。当一个行进物到达一个网络节点,而在此网络节

点它必须进入两个及以上的交通控制区域,那么它将按照节点上的区域列表顺序请求进入那些交

通控制区域。每次只请求一个交通控制器。一旦一个交通控制器许可进入,那个行进物技术上就已

进入相应的交通控制区域了,尽管它可能仍然请求许可进入其它的交通控制区域。当在两条路径之

间转移时,一个行进物将在离开与原来的路径相对应的交通控制区域之前,首先进入与新路径相

对应的所有交通控制区域。

关于使用多个交通控制器时死锁的注释:虽然在模型中使用多个交通控制器可以提高行进网络

的灵活性和交通容量,但是也非常容易导致死锁。交通控制器死锁通常是由循环等待导致的。当一

个饱和的交通控制区域内的一个行进物等待进入另一个交通控制区域,但是另一个交通控制区域

也是饱和的并也在等待第二个行进物离开,但是第二个行进物不能离开,因为它必须首先进入第

一个行进物所在的区域,这时就发生了死锁。这是循环等待的一个简单例子。循环等待可以涉及多

个行进物和交通控制器,并且非常难以调试。因此,使用多个交通控制器时一定要非常小心。经验

表明使用层次结构的交通控制器排序,一些交通控制器控制大区域,一些控制器控制小区域,大

有益处。强烈推荐不要让交通控制区域出现部分重合。一个交通控制器要么完全包含在一个大区域

里,要么成为它的区域中唯一的一个。行进物将在请求进入小区域之前请求进入大区域。即使遵循

这些规则也仍然不能保证模型不出现死锁。多数这种类型的模型建模是用试错法完成的。下图显示

了一个非常简单却仍然导致死锁的模型。请留意,左边的绿色交通控制器是饱和的,这可以从其区

域中有手持临时实体的操作员等待获得允许进入右边的蓝色交通控制区域的事实推断出。但是,蓝

色区域也是饱和的,因为此区域中不携带临时实体的操作员正在等待进入左边的绿色交通控制区

域。

368

Page 371: Flexsim handbook

Flexsim 实体库

与交通控制器交互

可以在正投影/透视视图中进行几项操作来编辑交通控制器实体。按住“X”键并重复点击交通控制器

实体,模型中所有的交通控制器实体将会在显示和隐藏其节点连接两种方式之间切换。如果只想隐

藏一个交通控制器的连接,用 shift键选中此交通控制器,然后按 “X” 键点击此实体,它将隐藏其

连接。在运行模型时,可以按住“V” 键点击实体,按住鼠标键不放。按住“V”键的操作与键盘交互部分

中所描述的相同。这将会绘制一条连线到所有正在请求进入此交通控制区域但是还没有被许可的行

进物上。如果交通控制器的颜色不是白色,那么将会用它的颜色绘制这些线,以更好地区分不同的

交通控制区域进入请求。

重置含交通控制器的模型

到目前为止,还不能将交通控制器正确地配置来处理在模型重置时已放在交通控制区域内的行进

物。需要将所有行进物都重置到一个不属于任何交通控制区域的网络节点去。通常,这意味着在模

型的旁边添加一个网络节点,并用“A”连接将所有任务执行器连接到此网络节点,然后使它们在每

次仿真运行开始时进入模型。

状态

交通控制器在此时尚没有任何状态。

参数分页

交通控制器

运输机

369

Page 372: Flexsim handbook

Flexsim3.0 用户手册

概述

运输机主要用来从一个实体到另一个实体搬运临时实体。它有一个货叉,可以在向货架中捡取或放

下临时实体时抬升到相应的高度。如果需要,它可以一次搬运多个临时实体。

详细说明

运输机是任务执行器的一个子类。它实现偏移行进的方式有两种。第一,如果此行进操作有一个涉

及的临时实体,则它自身将行进到使其货叉前沿位于 x/y目的位置,并抬升其货叉到 z目标高度的

位置。第二,如果此偏移行操作没有涉及临时实体,则它行进到使其 x/y 中心和 z 基面到达目的地

的位置。

状态

运输机遵循任务执行器状态。

参数分页

任务执行器

碰撞

分配器

运输机

任务执行器触发器

370

Page 373: Flexsim handbook

Flexsim 实体库

可视化工具

概述

可视化工具采用道具、风景、文字和展示幻灯片来装饰模型空间,目的是给模型更逼真的外观。它们

可以是简单如彩色方框、背景之类的东西,或者是精细如 3D 图形模型、展示幻灯片之类的东西。可

视化工具的另一种用法是用做模型中其它实体的容器实体。当用作容器时,可视化工具就成为一个

分级组织模型的便利工具。容器也可以保存在用户库中,作为将来开发模型的基本建模模块。

详细说明

可视化工具在模型中的使用方式有多种。

• 作为一个容器或子模型

• 作为平面、立方体、柱形或球形

• 作为导入形状

• 作为文本

• 作为展示幻灯片

• 其它设置

371

Page 374: Flexsim handbook

Flexsim3.0 用户手册

现在用可视化工具代替了 Flexsim 以前版本中的可视化实体、可视化文本。可视化工具扮演一个比可

视化实体和可视化文本更广泛的角色。现在,可视化工具作为一个容器在层次建模结构中用来囊括

子模型。由于可视化工具与其它 Flexsim 实体工作方式不同,现在解释一下如何使用它的详细情况。

将可视化工具用作容器

可视化工具默认设置是平面。当放置在模型中时,可视化工具显示为一个带有 Flexsim GP位图纹

理的平面。平面的尺寸和位置可以在正投影或 VR(虚拟现实)模型视图视窗中进行图形化地设置,

或者用可视化工具的参数分页来设置(参数分页的使用在“将可视化工具用作平面、立方体、柱形或

球形”部分中进行解释)。当把可视化工具用作容器时,建议在开始时使用默认视图(一个平面)设

372

Page 375: Flexsim handbook

Flexsim 实体库

置,可以以后再改变其视觉表达。在此例中,我们要建立一个容器,里面有 1 个暂存区、2 个处理器

临时实体将会从容器外面的一个发生器进入容器。处理器将会把临时实体送到容器外面的一个吸收

器。

步骤 1:在模型视图中放置一个可视化工具

可视化工具与 Flexsim GP位图纹理一起显示。要往容器中添加实体,只要从库中将它们拖出并放

置到可视化工具上就可以了。

步骤 2:拖放 1 个暂存区和 2 个处理器到可视化工具中

373

Page 376: Flexsim handbook

Flexsim3.0 用户手册

当把一个实体放置到可视化工具上时,它将自动地放置到可视化工具中去。可以通过选择可视化工

具并用鼠标移动它来测试这一点。当移动可视化工具时,它里面的实体也跟着移动。

步骤 3:拖放 1 个生成器和 1 个吸收器到模型视图中

往模型中放置生成器和吸收器时,确保不要放到可视化工具上,需要保证它们是在外面的。

374

Page 377: Flexsim handbook

Flexsim 实体库

在为此例建立端口连接之前,先放大端口连接的图形显示,这对于理解用容器工作的 2 种方式可

能会有帮助。

步骤 4:放大端口连接图形

这可以通过选中模型视图视窗中的设置菜单来完成,这将打开如下的输入页面。

将连接器的尺寸设定为 0.30,然后点击确定按钮。

步骤 5:连接生成器到可视化工具,连接可视化工具到吸收器

375

Page 378: Flexsim handbook

Flexsim3.0 用户手册

按住键盘上的“A”键,点击并拖动一个从生成器到可视化工具(不是暂存区)的连接。当释放鼠标左

键时,就可看到在生成器与可视化工具之生成到一个连接,如下所示。

现在,建立一个从可视化工具到吸收器之间的连接,如下所示。

376

Page 379: Flexsim handbook

Flexsim 实体库

此时,生成器和吸收器都连接在容器上(可视化工具)。现在,来连接容器与内部的模型。

步骤 6:连接容器和暂存区

建立一个从容器到暂存区的连接。

当释放鼠标左键时,将会看见一条从容器的内部端口(蓝色)到暂存区的连接。

377

Page 380: Flexsim handbook

Flexsim3.0 用户手册

步骤 7:连接暂存区到处理器

按同样的程序将暂存区连接到两个处理器。

步骤 8:连接处理器到容器或直接到吸收器

有两种方式“连接入”或“连接出”一个容器。 第一种方式如步骤 5 中所示,建立一个从生成器连接到

容器的连接,然后是从容器到暂存区的联机。然而,也可以通过点击拖动一个连接直接将处理器连

接到吸收器。对于此例,第一个处理器将被连接到容器,然后容器连到吸收器,第二个处理器直接

连接到吸收器。

378

Page 381: Flexsim handbook

Flexsim 实体库

步骤 9:设定容器的显示选项

到此时,已经有了一个包含子模型的功能容器。如何显示此容器由用户来决定。如果想要在仿真运

行期间隐藏容器的内容,可以切换关闭掉内容显示选项,操作方法是不选择“显示内容 ”复选框。

也可以使用任何视景显示选项来展现容器的显示,如方框、建筑物或文本。在正投影视图视窗中右

键点击并选择“在正投影中查看”选项,可以在任何时间查看容器的内容。

容器的统计数据和其它实体的统计数据一样,可以通过属性对话框中的统计属性页查看。

将可视化工具用作平面、立方体、柱形或球形

将可视化工具在模型中用作可视化道具是一个简单的过程。只要选择所需要的道具类型然后定义参

数就可以了。

平面

平面可以定义为背景,如 Autocad布局、纹理或图片,或者要在模型中特定部位贴补的颜色。平面

是可视化工具的默认显示。只需要设定平面的尺寸然后选择纹理就可以了。纹理可以在在垂直和水

平方向上重复。

立方体、柱形或球形

立方体、柱形或球形是简单的形状,可以象平面一样被指定纹理。

379

Page 382: Flexsim handbook

Flexsim3.0 用户手册

将可视化工具用作导入形状

使用可视化工具来导入形状时,需要有一个要导入到模型的 3D 模型或者实体。Flexsim支持多种

3D 形状的文件格式,如 3D Studio Max (.3ds,.max)、VRML (.wrl) 1.0、 3D DXF (.dxf)和 Stereo

Lithography (.stl)。

将可视化工具用作可视化文本

3D 可视化文本可以添加到模型中来显示标签、统计数据或其它模型信息。当视景显示设置为可视化

文本时,将会呈现一个下拉菜单提供想要显示的可视化文本选项。

选取选项包括仿真时间、内容、状态、输出、输入及其它。如果在下拉菜单中选择了任何统计项,则必

须将可视化工具的中间端口连接到想要显示其相关信息的实体。选择代码模板按钮 可以对文本

进行编辑。

将可视化工具用作展示幻灯片

可视化工具也被用作展示幻灯片,与使用幻灯片制作 PowerPoint 演示文稿很相似。展示幻灯片放

置在模型中,用以展示数据、模型结果等等。可以使用演示菜单中的演示生成器开发一个“漫游”序列

关于如何建立一个模型演示的教程可以在此手册的教程部分中找到。

当视景显示设置为“演示幻灯片”时,可以拖动附加的可视化工具实体到幻灯片上来创建幻灯片的文

本。每个放置在展示幻灯片上的可视化工具都将切换到可视化文本,并将在幻灯片上被格式化。添

加的第一个可视化工具是幻灯片标题,第二个是项目 1,依次类推。例如,如果将 4 个可视化工具

拖到展示幻灯片上,将会看到如下所示的情景:

380

Page 383: Flexsim handbook

Flexsim 实体库

如图所示,每个文本在幻灯片上都被给定一个默认的位置。当双击展示幻灯片查看参数视图时,将

会看见左上角的一个新标签叫做“文本”。选择此标签,就可以编辑想要显示的文本。

381

Page 384: Flexsim handbook

Flexsim3.0 用户手册

可以在可视化工具分页上选择一个纹理来应用任何想要的边侧背景,或者通过在纹理域段中删除

默认的 Flexsim 标志来移除背景。

382

Page 385: Flexsim handbook

Flexsim 实体库

可视化工具的其它视景设置

视景显示 - 在这里选择可视化实体要显示的类型。可用的类型有:平面、立方体、柱形、球形、导入形

状、文本或展示幻灯片。

显示内容 - 如果选中此复选框,则显示可视化工具的内容。内容是指实体内部的文本或者实体。

禁止鼠标选择 - 如果选中此复选框,则在正投影或 VR(虚拟现实)视图中将不能用鼠标选择实

体。

383

Page 386: Flexsim handbook

Flexsim3.0 用户手册

照明 - 如果选中此复选框,实体将发出自身的光线。

最小可视放大倍数 - 这是实体能够被看见的最小放大倍数。

最大可视距离 - 这是实体能被看见的最大距离。如果视图在远过这个距离上查看,就不显示此实体

位置、转角和尺寸 - 此区域用来定义实体的位置、尺寸和转角参数。与属性页上的界面相同。

纹理 - 这些参数用来定义如何在实体上绘制纹理。

文件名 - 这是要绘制到实体上的纹理的位图文件。

布告板 - 此选项将纹理显示为一个布告板(平面)。布告板将总是面对查看者。

分隔 - 如果实体是柱形,此数值用来定义它的边数,如果是球形,则用来定义它的曲率。如

果实体是球,此数值应该定义得相对大一些(~20)。

水平重复次数 - 此数值定义纹理图案在水平方向上重复的次数。

垂直重复次数 - 此数值定义纹理图案在垂直方向上重复的次数。

模型 - 这些参数只在道具类型设定为导入模型时才显示(导入形状必须被选中到本模型中来显

示)。

文件名 - 这是要在此实体上绘制的.3ds或 .wrl 文件。

在正投影中查看 - 此按钮打开一个正投影视图,显示作为容器的可视化工具中的内容。

在透视视图中查看 - 此按钮打开一个透视视图,显示作为容器的可视化工具中的内容。

调整可视化文本

文本大小-此数值定义实体中文本的高度。文本的宽度将会将会自动调整使文本清晰易读。

384

Page 387: Flexsim handbook

Flexsim 实体库

文本厚度-此数值定义实体中文本的厚度。

385

Page 388: Flexsim handbook

Flexsim3.0 用户手册

386

Page 389: Flexsim handbook

下拉菜单

工具

建模工具

本节主要介绍不同的建模工具,用来模型的建立、配置以及结果的获得。这些建模工具列出如下。

AVI 制作器

Excel 界面

临时实体箱

全局 C++代码

全局对象指针

全局表

全局时间表

全局用户事件

导入媒体

模型开始时代码MTBF/MTTR

多 Excel 表导入

优化器

演示生成器

脚本编辑器

仿真实验控制

单表导出

单表导入

背景设计编辑器

表配置器

工具箱

用户库

Visio 导入

监视列表

387

Page 390: Flexsim handbook

Flexsim3.0 用户手册

AVI 制作器

从展示菜单中选定“AVI 制作器”选项即可创建 AVI 制作器。AVI 制作器是模型中的一种特殊对象,能

调用命令来生成模型运行的 AVI 文件。只要它存在于模型中,就会生成此文件。如果不需要生成 AVI

文件,则需要在模型中删除此实体。在模型运行之前,必须指定一个记录视图。方法是:在所要记

录的视图上击右键,选择“视图>设为被选视图(sv)”。在记录 AVI 文件过程中,模型运行可能十分

缓慢,在此期间,模型将无法响应运行控制视窗中的速度滑动条命令。

AVI 名称 - 这是 AVI 制作器进行制作时写入的文件的名称。它必须以.Avi为扩展名。

开始时间 - 这是指 AVI 制作器开始记录 AVI 文件的时刻。

终止时间 - 这是 AVI 制作器停止记录 AVI 文件的时刻。建议在此终止时间前不要停止运行模型,否

则可能破坏正在写入的文件。

帧间隔时间 - 模型中记录的帧与帧之间经历的仿真时间的长度。

每秒帧数 - 此数字定义了 AVI 文件每秒播放多少帧。

删除 AVI 制作器 - 点击此按钮可将 AVI 制作器从模型中删除。模型将恢复正常速度运行,而不再生

成 AVI 文件。

如何使 AVI 制作器正常工作

388

Page 391: Flexsim handbook

工具

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 制作器。

389

Page 392: Flexsim handbook

Flexsim3.0 用户手册

Excel 界面

单表导入 - 点击单表导入按钮将配置好的表导入到 Flexsim 中。要配置此表,点击编辑按钮,可打

开单表导入编辑。

单表导出 - 点击单表导出按钮将配置好的表从 Flexsim 导出到Microsoft Excel 中。要配置此表,点

击编辑按钮,可打开单表导出编辑。

390

Page 393: Flexsim handbook

工具

多表导入 - 点击多表导入按钮将多个表导入 Flexsim 中。要配置这些表,点击编辑按钮,可打开多

表导入编辑。

用户导入 - 点击用户导入按钮,采用用户自己的代码从 Excel 导入。若要编写和编辑此用户代码,

可点击编辑按钮打开一个代码编辑器。一旦编辑了此代码,则需要进行编译后,才能够从 Excel 导

入。

用户导出 - 点击用户导出按钮,采用用户自己的代码导出至 Excel。若要编写和编辑此用户代码,

点击编辑按钮,打开一个代码编辑器。一旦编辑了此代码,在其能输出至Excel前,需要进行编译。

全局设定 - 点击全局设定按钮,来设定导入/导出参数,包括 Excel 的安装地址等等。

临时实体箱

临时实体

临时实体是创建的一些简单物体,从模型中移动通过。它们可以代表真实的物体,也可以代表一个

更为抽象的概念。在此视窗中创建不同类别的临时实体,并保存在临时实体箱中。点击工具条或工

具菜单上的临时实体按钮,可以打开编辑器。

391

Page 394: Flexsim handbook

Flexsim3.0 用户手册

临时实体列表 - 这个列表包含了所有可用的临时实体类型。当某个临时实体类型被选中,它将显示

在主视窗中。从此列表中选择临时实体,随后点击属性按钮,可以编辑临时实体的属性,诸如名称

形状、尺寸等。

新建物品 - 此按钮用来向临时实体箱中添加一个新的临时实体。此新的临时实体是当前选中的列表

中的某项的复制。

删除物品 - 此按钮用来从临时实体箱内删除当前选定的实体。被删除实体将不能再在模型中被创建

属性 - 此按钮用来打开当前选定实体的属性视窗。

全局 C++代码

在全局 C++代码编辑器中,可以定义用户的全局可用 c++ 函数和变量。此代码写入到编译时创建的

全局范围 c++文件中。这样,一旦创建了这些函数,可以从模型的触发器以及其他代码中进行访问。

392

Page 395: Flexsim handbook

工具

关于从 Visual C++导入的注释: 在 Visual C++中改动的全局代码,将无法正确地导入到全局 C++

代码编辑器中。需要在 Visual C++中进行改动,然后将那些改动复制并粘贴到 Flexsim 中,而无法

导入它们。

关于编写大量代码的注释: 如果在此视窗中完成了大量代码的编写,我们建议用户采用另一个方

式,使用预编译#include 直接包括另一个.cpp,并采用一个第三方文本编辑器,例如 Visual C++,

来分别编辑这些 c++文件。由于第三方编辑器经常具有 Flexsim 所不具备的多种代码编辑功能,因

此能够大大提高编程效率。注意,c++文件的当前目录时 Flexsim 的程序目录。

全局实体指针

393

Page 396: Flexsim handbook

Flexsim3.0 用户手册

全局实体指针编辑器用来定义指向模型中的实体的全局指针。输入想要使用的实体指针数,然后点

击应用按钮。然后输入模型中实体的名称。如果此实体包含在一个容器实体内,需要指定到此实体

的路径。这将创建一个与此实体同名的全局 fsnode* 类型变量。注意,添加这些变量之后,必须对模

型进行编译才能使用。

上例给出了两个变量。第一个变量是处理器实体 Processor1 的。第二个变量是暂存区 Queue 5 的,

此暂存区在容器可视化工具 VisualTool 5 内。一旦创建了这些引用,就可以在模型代码中简单地写

Processor1或Queue5 来访问这些实体,而不必采用 centerobject(), outobject(), inobject(), rank(),

node(),或其他命令。

394

Page 397: Flexsim handbook

工具

全局表

这些实体不是被拖出到模型中的。它们的创建是通过特殊对话框实现的,这些对话框可在具条上找

到。

通过工具条或“工具”菜单上的“工具箱”按钮可以访问全局表。全局表可以存储数字型或字符串型数据

模型中任何一个实体都可以用 gettablenum()、gettablestr()、settablenum()、settablestr()、reftable()

命令来访问这些数据。参考命令集可以获得更多关于这些命令的信息。一个模型可以有多个全局表。

名称 - 这是表的名称。名称应便于记忆,并能描述表的功能。各种函数通过表的名称访问它们,进

行读写。

行数 - 这是表的行数。如果改变了此值,点击“应用”按钮来更新屏幕上的表,此时,创建的新行均

可进行编辑了。

列数 - 这是表的列数。如果改变了此值,点击“应用”按钮来更新屏幕上的表,此时,创建的新列均

可进行编辑了。

重置时清零 - 如果此按钮被选中,当模型被重置时,表中所有数值类型单元将被清零。

高级 - 此选项打开一个表配置器视窗,用来根据特殊需要对表进行定制。

编辑表

395

Page 398: Flexsim handbook

Flexsim3.0 用户手册

如需编辑表中的某个单元,点击此单元,并在单元中填写数据。可使用箭头键在单元之间导航。单

元默认的是数值型数据,但可设定为字符串型数据,方法是右击单元,并选择“插入>添加字符串数

据”。

全局时间表

点击工具栏上的“工具箱”按钮,或者选择“工具”菜单的“工具箱”选项,均可访问时间表。时间表用来

进行模型中指定实体的状态更改的设定,如设定停机时间。每一个时间表可以控制多个实体,每个

实体又能被多个时间表所控制。一个模型可以包含多个时间表。

396

Page 399: Flexsim handbook

工具

名称 - 这是时间表名称。名称应能描述此时间表在模型中的功能,例如, “Weekend(周末)”或者

“Shift Change(轮班)”。

添加与移除时间表成员 - 在视窗的顶部,左侧面板显示的是模型中的实体。右侧面板显示的是时

间表成员列表。在左侧面板中选择一个成员,并点击 按钮,可以将此实体添加到成员列表中。

从右侧面板的成员列表中选择一个实体,并点击 按钮,则可以将此实体从成员列表中移除。

397

Page 400: Flexsim handbook

Flexsim3.0 用户手册

行数 - 这是表的行数。改变后需要点击“应用”按钮来更新屏幕上的表。每一行记录状态更改的时间,

要变成的状态,在那个状态下要维系的时间。

重复时间 - 此数值指定从第一状态开始改变起,到时间表被重复执行时止所经历的时间。如果第一

行包含时间 60,重复时间为 300,那么第一次停机时间将发生在时刻 60,而时间表将在时刻

360,660,960等时刻被重复执行。

时间表 - 可在此查看和编辑时间表。

Time(时间) - 这是自开始执行表以后,将要发生状态变化的时间。

State(状态) - 这是受此时间表所控制的实体根据时间表上对它的安排,将要变成的状态。如

果点击此列,将在顶部出现一个下拉对话框,给出一个可能状态的列表。参见库实体可获得更多

关于每个实体的每个状态的含义的信息。参见状态列表以获得关于每个状态的编号和宏定义的快

捷索引。

Duration(持续时间) - 这是实体在重新恢复最初状态之前,保持在新状态的时间长度。

停机函数 - 当成员列表中的实体停机时,此下拉菜单被执行。此函数对于成员列表中每个实体执行

一次操作。从这里指定要进行什么操作来使实体停止运行。

恢复函数 - 当成员列表中实体恢复其操作时,此下拉菜单被执行。此函数对成员列表中每个实体执

行一次操作。从这里指定要进行什么操作来使实体恢复运行。

停机触发器 - 此下拉菜单与停机函数同时被触发执行,但此函数只运行一次,而不是对成员列表

中每个实体执行一次操作。参见停机/恢复触发器。

恢复触发器 - 此下拉菜单与恢复函数同时被触发执行,但此函数只运行一次,而不是对成员列表

中每个实体执行一次操作。参见停机/恢复触发器。

关于对同一实体使用多个停机计划的注释:如果一个实体具有若干个停机计划,每个计划都具

有自身的停机状态,就会遇到使用实体状态图表的问题。这是由于 stopobject()命令和

resumeobject()命令的特性所导致的。如果有两个实体要求同一实体停止运行,此实体不会记住每

个停止请求所要求的停机状态。参见命令集可获得更多关于 stopobject()命令的信息。

398

Page 401: Flexsim handbook

工具

全局用户事件

选择工具条上的“工具箱”按钮,或者从“工具”菜单里的“工具箱”选项,均可访问用户事件。用户事件

是在模型运行中在设定的时间上执行的 C++函数,但并不与任何特定的可见的实体关联。用户事件

是由模型中一类称为“工具”的特殊节点,在一个称为“用户事件”的子节点中创建的。一个模型可有多

个用户事件。

名称 - 这是用户事件的名称。此名称应该能描述用户事件做些什么。

只在重置时执行事件 - 如果此选项被选中,事件将只在重置键被点击时被执行。

第一事件时间 - 这是指用户事件发生的时间。

399

Page 402: Flexsim handbook

Flexsim3.0 用户手册

重复事件 - 如果此选项被选中,用户事件一停止,就重新开始进行执行时间计时。根据定义的执行

时间,用户事件总是按照规律性间隔重复执行。

事件代码 - 在这里编写事件的 C++代码。任何有效的 C++ 语句均可在此域段中使用。如果编辑过此

代码,在仿真运行前必须对模型进行编译。

导入媒体

此编辑器用来添加模型需预装载的 3D 形状及图形,并获得已装载的路径的字符串。如果需要在仿

真过程中动态改变实体的形状,通常就需要使用此编辑器。此外,也可以从一个实体的属性视窗选

择一个形状。

要使用此编辑器,可从顶部的下拉框中选择形状或图形,然后从第二个下拉框中选择一个形状。当

选定一个形状后,文本框将根据当前选定实体更新其文本,来显示具体路径。若要添加一个新实体

请点击浏览按钮,寻找到.3ds, .wrl, .dxf, or .stl 等形状文件, 或者一个.bmp 或.jpg 的图形文件,然

400

Page 403: Flexsim handbook

工具

后点击打开,再点击添加按钮,即可将 3d 实体或者图形添加到预装载列表中。点击删除按钮,则

可以从列表中删除已添加的形状。

如果在代码中引用了一个纹理或形状的索引,则也同样可以使用在下拉列表中与每个选项相邻的

数字。

模型开始时代码

模型开始时代码编辑器用来编写代码,这些代码将在模型编译后被立即执行。注意,每编译一次,

启动代码只执行一次,而不是每次模型重置后都执行。

401

Page 404: Flexsim handbook

Flexsim3.0 用户手册

MTBF/MTTR

MTBF MTTR 实体的访问方法是,点击工具条上“工具箱”按钮,或者选用“工具”菜单里的“工具箱”

选项。它们用来设定模型中实体群的随机中断和修复时间。每个 MTBF MTTR 实体均可以和模型中

402

Page 405: Flexsim handbook

工具

多个实体相联,每个实体也可以被多个 MTBF MTTR 实体所控制。MTBF MTTR 实体还用来指定当

实体停机时所要进入的状态。一个模型可以包含多个 MTBF MTTR 实体。MTBF MTTR 视窗被分割

为两个分页。

名称 - 是 MTBF MTTR 实体的名称。 名称应该富以解释、方便记忆,例如“Forklift(叉车控制)”或

“Random Inspection(随机检查)”。

成员分页

在此分页中,可以为此 MTBF MTTR 实体设定成员实体列表。左侧面板是一个模型实体列表。右侧

面板的是此 MTBF MTTR 实体的成员列表。从左侧面板中选择一个实体,点击 按钮将实体添

加至成员列表中。从右侧面板中选择一个实体,点击 按钮可将其从列表中移除。

单个中断各成员 - 如果此选项被选中,MTBF MTTR 实体将为每个成员实体创建一个单独的停机

和恢复事件线程。如果此选项没有被选中,则所有成员实体将在同一时间停机和恢复。

403

Page 406: Flexsim handbook

Flexsim3.0 用户手册

停机状态 - 指定实体停机时要进入的状态。

函数页在此分页中,可以设定停机和恢复的时间,停机和恢复的触发器, 以及停机和恢复函数。

第一故障时间 - 此下拉菜单将返回首次故障时间。参见时间下拉菜单。

MTBF - 此下拉菜单返回MTBF MTTR 实体所控制的实体的平均故障间隔时间。此函数决定了这些

实体在进入中断状态前的时间长度。MTBF 时间专门用来定义从实体最后一次停机期恢复到开始下

一次停机期之间的时间跨度。参见时间下拉菜单。

MTTR - 此下拉菜单返回MTBF MTTR 实体所控制的实体的平均修复时间。此函数决定了这些实体

在恢复正常运行前停留在中断状态的时间。所有被控制的实体将同时恢复到其初始状态。参见时间

下拉菜单。

404

Page 407: Flexsim handbook

工具

停机函数 - 此下拉菜单在成员列表中的实体停机时被执行。此函数将对成员列表中的每个实体执行

一次。从这里指定用什么操作停止实体。

恢复函数 - 此下拉菜单在成员列表中的实体恢复其操作时被执行。此函数将对成员列表中的每个实

体执行一次。从这里指定用什么操作恢复实体。

中断触发器 - 此下拉菜单将与停机函数同时被触发执行,但它只被执行一次,而不是对成员列表

中的每个实体执行一次。参见停机/恢复触发器。

维修触发器 - 此下拉菜单将与恢复函数同时被触发执行,但它只被执行一次,而不是对成员列表

中的每个实体执行一次。参见停机/恢复触发器。

关于同一实体使用多个停机线程的注释:如果一个实体是若干个 mtbf/mttr 实体成员,每个

mtbf/mttr 实体都有各自的停机状态,这时可能会遇到使用实体状态图表的问题。这是由于

stopobject() 命令和 resumeobject() 命令的特性所决定的。如果两个实体要求同一个实体停止,此

实体不会记住每个停止请求的状态。参见命令集中的 stopobject()命令可获得更多信息。

405

Page 408: Flexsim handbook

Flexsim3.0 用户手册

多 Excel 表导入

概述

多 Excel 表导入 (MTEI) 用来快速便捷地实现从多个文件中导入多个工作表。按照一定的表尺寸和

单元数据类型,MTEI 能够自动完成大部分导入过程。如果允许MTEI 在其处理过程中有更大的自动

程度,将极大地有助于导入随时间变化的数据。

导入表的填写

编辑 MTEI 时将会注意到每个导入行有 10 列需要填写。这些列定义了数据来源和用处,也包括如何

编译和这些数据的格式。

Excel_Book_Name(Excel 工作簿名称)

Excel 文件名一栏用来定义 Excel 文件的名称,此文件包含着你所需要导入的信息。根据使用的电

子数据表格形式,主要有四种方式向此栏中填写信息。

工作簿名称或路径未知(“NEW”)

如果要使用的工作簿的名称或路径都未知,或者将随时间变化,则可在所有工作簿名称表项中键

入“New”(新)。在此栏中键入 “New”将打开浏览视窗,提示用户去寻找所需要的 Excel 文件。当输

入数据在多次运行中或者多个用户使用时有所改变时,此功能可带来极大的方便。

与前一个位置相同(BLANK)

如需继续使用前一行使用的工作簿,则可将此栏留为空白。当从同一个工作簿中导入多个工作表时

建议使用此选项。注释:不要将此栏的第一行设为空白。

绝对路径(ABSOLUTE)

406

Page 409: Flexsim handbook

工具

如果在模型的整个应用中,工作簿的位置和名称都不发生改变,可以输入此 Excel 工作簿的绝对路

径。例如,“c:/tempdirectory/myfile.xls”。 注释:为了让 Flexsim寻找到正确的 Excel电子数据表,

必须采用".xls"扩展名。

相对路径(RELATIVE)

如果在整个模型生命时间内,工作簿的名称将不发生改变,工作簿的相对地址目录也将不会改变,

则可以输入此 Excel 工作簿的相对路径。所输入的路径必须是相对于 Flexsim安装目录的,并且必

须有两个斜线“//”,而不同于路径名称中用一条斜线。例如,“userprojects//myproject//myfile.xls”。

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(数据辨别)

407

Page 410: Flexsim handbook

Flexsim3.0 用户手册

数据辨别是 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 表的尺寸,使它与正在导入的表

尺寸相一致。

408

Page 411: Flexsim handbook

工具

关于 MTEI 的注释:如果允许MTEI 自动计算行列数,那么行数和列数的值必须大于 Excel 表中的

行数和列数。

相关主题

单 Excel 表导入

单 Excel 表导出

Excel 界面

OptQuest 优化器

OptQuest 优化器用来优化模型中的变量,以最大化某些特定的输出变量。

409

Page 412: Flexsim handbook

Flexsim3.0 用户手册

决策变量

最优化设计的第一步是定义模型的决策变量。一个最优化的主要决策变量的选择,通常可以通过对

待解决问题的重述获得。例如,一个问题可能是:此区域需要多少台机器可获得最佳生产量?此问

题陈述定义了模型的决策变量:处理器容量的最大值,和模型的产量。注意,这两个变量有不同的

用途,容量最大值是要对其进行改变而进行仿真实验的,而产量作为结果反馈来体现改变的效果。

若要增加一个决策变量,可点击变量面板上的添加按钮,这将为变量表添加一个新的变量。从新变

量行中选择任一单元格均可选中此变量,然后点击修改按钮。这将打开一个视窗用以编辑此新变量

410

Page 413: Flexsim handbook

工具

每个决策变量具有一个关联名称,可被OptQuest 使用。同样,每个变量都有一个关联类型,如

Continous(连续型)、Integer(整数型)或User-controlled(用户控制型)。用户控制变量是“反馈”变量,

他们不会被OptQuest 的实验改变,但被当作输出变量使用,来得到关于不同场景的效果如何的反

馈。所有其他变量类型在最优化过程中都将被改变和进行实验。参见<<link>> OptQuest 文件可获得

更多信息。

指定了变量的名称和类型后,点击浏览按钮,将此变量与模型中某节点关联起来。这将打开一个树

浏览视窗,可从中选择持有此最大容量值的节点。必须选择具有数值数据的节点,否则最优化将不

能正常进行。

约束

定义了决策变量后,需要定义最优化的约束条件。在最优化过程中,优化器将根据决策变量对若干

种场景进行实验。约束用来将不能满足约束条件的某些场景剔除出去,这样,优化器就不会将一个

无效场景选作最优化方案。每个约束具有一个表达式,例如“MaxNrofProcessors <

NrofProcessorsUsed + 5”。若要添加一个约束,可按添加按钮,然后在公式栏进行填写。

411

Page 414: Flexsim handbook

Flexsim3.0 用户手册

目标函数

目标函数是想要最大化或最小化的一个表达式。目标函数可以是一个简单的表达式,如,假设你有

一个决策变量为“Throughput(产量) ”,则表达式可以是“Throughput”。目标函数也可以是收入相

对成本的评价。例如,如果每个产品产出$5.00,每台机器成本(根据仿真运行长度进行加权)是

$50,则目标函数可以是“(Throughput*5.00) - (MaxNrofProcessors*50.00)”。

停止条件

优化运行最长时间 - 这是优化器进行优化计算所花费真实时间的最大值。

自动停止 - 如果此框被选中,当目标函数的值停止改进时优化停止。Flexsim 的当前设置是:当发

现优化方案的目标函数值经过 100次循环后,其改变小于 0.0001 时,停止优化。

场景

最大场景数 - 这是优化器将采用的不同场景个数的最大值。一个场景是优化器搜索的一个配置。

当前场景 - 这是正进行实验的当前场景编号。

当前解答 - 这是当前场景的目标函数的值。

最佳解答 - 这是迄今为止最佳场景的目标函数的值。

每个场景的仿真时间 /每个场景真实时间 - 这是优化器在每个场景上花费的最大仿真时间。当这

个时间一到达,优化器将立即停止这个场景的演算。

重复运行

如果需要对一个给定的场景进行多次仿真来提高目标函数的均值的可信度,可用 “重复运行”面板来

指定重复运行次数。

412

Page 415: Flexsim handbook

工具

各场景中执行多次运行- 如果此框被选中,优化器将对每个场景进行大于一次的运行。

重复运行的最少次数 - 这是每个场景需要运行的最少次数。如果没有提前退出寻优判据,则优化

器将总是重复运行“最少重复运行次数”次。

重复运行的最多次数 - 这是每个场景重复运行的最多次数。如果有提前退出寻优判据,优化器将

运行到此判据被满足,最多到此最多重复次数,到达此最多次,优化器将停止此场景的重复运行。

提前退出准则 - 此命令使优化器根据用户选择的判据,停止对同一场景的继续重复运行。如果选择

了“满足置信区间 ”,则当优化器能够确定此场景在给定的置信水平和误差百分数下的目标函数的真

实平均值时,即立即停止重复运行。例如,如果指定 80%的置信水平和 5%的误差,则一旦目标函

数在 80%的置信水平下,真实平均值的落在均值样本的 5%区间内时,优化器就停止重复运行。如

果选择了“最佳解答在置信区间外”,则优化器如果确定在给定的置信水平和允许的误差率范围内,

此场景无法获得最优方案,它将停止对此场景的重复运行。

优化

配置了上述参数后,选择应用按钮来应用所做的配置,然后点击最优化按钮,然后等待,会有一

条消息告知优化过程结束。

注释:确保在点击优化按钮前,模型已经编译,否则 Flexsim 可能出现死机。

注释:点击了优化按钮后,在优化结束前,不要进行任何操作。

413

Page 416: Flexsim handbook

Flexsim3.0 用户手册

演示生成器

演示生成器是一种特殊的透视视图,可以用来制作模型的漫游效果的展示。当与可视化工具的展示

幻灯片功能一起使用时,演示生成器可以生成 PowerPoint™ 格式的 3D 演示。在展示菜单中选择演

示生成器选项,演示生成器将显示出来。它由两个视窗组成:上面是一个 3D 透视视图,与常规的

正投影/透视视图相同;下面是演示编辑面板,用来创建和编辑漫游路径。

414

Page 417: Flexsim handbook

工具

一个 Flexsim 演示就是一组漫游路径。每个漫游路径由一个观察点或者漫游点组成。沿给定的漫游路

径进行漫游,也就是透视视图顺序地漫游通过漫游路径上的每个漫游点。一个演示是一系列有序的

漫游路径。

演示编辑面板

演示编辑面板用来创建、编辑和运行漫游路径。它由若干个控制面板组成,用来设定要制作的演示。

路径面板

路径面板用来编辑所有的漫游路径。点击“新漫游路径”按钮来创键一个新的漫游路径。演示视图的当

前观察点将被设置为漫游路径的第一个观察点。点击“删除漫游路径”可以删除当前选定的漫游路径。

415

Page 418: Flexsim handbook

Flexsim3.0 用户手册

若要选择一个漫游路径进行编辑,可以点击前进、后退按钮,或者从下拉列表中选择相应的漫游路

径。

观察点面板

此观察点面板用来编辑漫游路径中的单个观察点。点击新观察点按钮,将演示视图的当前观察点添

加至漫游路径中。点击更新按钮,将当前选定观察点改为演示视图的当前观察点。点击删除观察点

按钮可以删除选定的观察点。若要选择一个视角点,可点击向前、后退按钮,或者从下拉列表中选

择观察点。

运行控制面板

运行控制面板用来测试创建的漫游路径。点击运行按钮,可以重复地播放沿当前选定的漫游路径所

进行的漫游。点击单步按钮可以单步漫游到漫游路径的一个观察点。点击测试按钮,可以沿着当前

选定漫游路径漫游一次。点击停止按钮,可以停止当前的漫游。选中“以仿真时间运行镜头路径”复选

框,可以使漫游路径的漫游时间依据于仿真时间,而不是真实时间。

音效面板

可以在这里设定要播放的声音,并设定漫游路径漫游的起点和终点。点击 “...”按钮,找到要在漫游

路径漫游过程中播放的.wav 文件。“开始 ”文件将在漫游路径运行的刚一开始被播放,而“结束”文件

则在漫游路径完成时立即开始播放。

漫游路径数据表

漫游路径数据表用来给当前漫游路径的观察点进行明确的赋值。通常只需要编辑时间栏,但也可以

编辑其他值。

时间(Time) - 这里指定漫游到观察点所需的时间。如果没有选中“以仿真时间运行漫游路径”复选

框,则时间参数将按照真实时间秒数进行赋值。如果选中,则需要以千秒计地来指定时间。例如,

需要在 2秒仿真时间内漫游到此位置。

PosX – 在这里指定照相机焦点的 x位置。

PosY - 在这里指定照相机焦点的 y位置。

PosZ – 在这里指定照相机距其焦点的距离。

RotX – 在这里指定照相机的俯仰角。

RotY – 在这里指定照相机的偏转角。

RotZ – 在这里指定照相机的转动角。

416

Page 419: Flexsim handbook

工具

声音 – 是一个.wav 文件路径,此文件将在照相机开始向那个观察点漫游时播放。只有漫游路径的

起始点和终点可以播放此声音文件。

开始触发器 - 可以在这里编写 flexscript 代码,将在漫游路径开始时被触发。开始触发器只在路径

的第一个观察点执行。

结束触发器 - 可以在这里编写 flexscript 代码,将在漫游路径结束时被触发。结束触发器只在路径

的末一个观察点执行。

在透视视图中沿漫游路径导航

在透视视图中使用演示生成器工作时,可以采用键盘按键进行漫游路径的漫游操作。可以运行相关

联的漫游路径。按空格键或者“N”键,视图将运行行下一个漫游路径。按“B”键,视图将后退到先前的

视角漫游路径。

417

Page 420: Flexsim handbook

Flexsim3.0 用户手册

脚本编辑器

脚本编辑器用来执行 flexscript命令以获得信息,同时也进行模型配置。点击执行按钮来执行代码。

代码的返回值显示在底部方框中。

如果执行的脚本有多行,可以使用双斜杠“//”来注释掉某些行。

注释:所执行的脚本返回值只有在最后一个命令后面没有跟随分号(;)的情况下才会显示。

418

Page 421: Flexsim handbook

工具

仿真实验控制器

实验控制器工具可以从统计菜单中获得。此对话框用来进行实验运行,包括多场景运行,在多次模

型运行之间改变某些变量,从每个场景中收集输出数据等。每个场景都代表某一特定的模型配置。

对于每个场景,模型都重复运行若干次。

重复运行

这些域段决定需要运行多少个不同场景,每个场景重复运行几次,以及其他模型运行信息。

仿真停止时间 – 当模型运行了这里定义的时间后即停止,下一个重复运行或者场景(如果有的

话)开始运行。

419

Page 422: Flexsim handbook

Flexsim3.0 用户手册

预热停止时间 – 当模型运行了这里定义的时间后,统计结果将被重置, 但模型不重置。

每个场景的运行次数 – 此值定义每个场景需要重复运行多少次。

场景数目 – 此值定义要运行多少个场景。每个场景可能包含着多次重复运行。场景个数在“场景数目

”域段中定义。在每个场景结束时都调用一个特殊事件。

当前运行 – 此数字是当前正在运行的一次重复运行的序号。每个场景的重复运行都重新开始编号。

当前场景 – 此数字是当前正在运行的场景的序号。

每次运行后保存状态 – 如果选中此选项,模型将会在每次重复运行结束时保存其状态。状态以.fsp

文件形式保存于实验文件夹。用文件菜单中的“装载状态”选项可以打开这些文件,查看每次重复运

行的结果。

实验变量

此表用来定义实验中每个场景的配置。一个实验变量是模型中的某个节点,需要对此节点的值进行

实验。例如,实验变量可以是暂存区最大容量值,或者可以是某表中的一个值。可以为实验定义多

个实验变量。每个实验变量都与表中某一列相关联。输入需要采用的实验变量的个数,按应用按钮

即可创建相应数目的列。

实验变量的说明

若要将一个实验变量与适当的节点相关联,可点击表中的路径行。

点击浏览路径按钮,打开一个树浏览视窗,可在此查看变量树。

420

Page 423: Flexsim handbook

工具

在上面的例子中,暂存区中的 maxcontent变量被选择实验变量。

关于实验变量数据的注释:要确保为实验变量所选择的节点具有数字数据,否则实验将不能正

常运行。若要对不具有数字数据的变量进行实验,则需要用一个数字来当作对想要进行实验的某种

情况的解释。例如,若要对不同类型的“送往端口”策略进行实验,可以在实体或者表中保存一个数

字标签,然后在送往端口策略中,查询标签,并根据标签的值来执行不同的策略。

选择一个实验变量后,填入需要让每个场景都设置相同的值。每个场景都与表中某一行相关联。

绩效指标

绩效指标分页用来指定用来对每个场景的绩效指标输出进行评价。

421

Page 424: Flexsim handbook

Flexsim3.0 用户手册

可以定义多达 10 个绩效指标。输入绩效指标个数,然后按应用按钮即可创建相应个数的绩效指标。

每个绩效指标都是用一个下拉菜单来定义的。参见绩效指标下拉菜单。在每次重复运行结束时,执

行绩效指标函数并记录结果。整个实验一结束,即可点击结果按钮打开一个视窗来显示某给定绩效

指标的结果。

422

Page 425: Flexsim handbook

工具

上述绩效指标结果显示了一个吸收器的输入的不同场景,这些场景将暂存区最大容量设为 2、 4、6、

8 和 10。注意,最大容量为 10 的场景很自然产量最高。点击查看表按钮可看到表中所有的值。

高级

高级选项分页中的各项定义了所有重复运行过程中不同点的行为。

实验开始 - 此下拉菜单在实验开始运行时被调用,用来在开始运行任何场景之前先来设定某些变

量值。此函数只在第一个场景运行前被调用一次。参见实验开始下拉菜单。

场景开始 - 此下拉菜单在一个场景的第一个重复运行开始之前被调用。每个场景仅调用一次。参见

开始场景下拉菜单。

重复运行开始 - 此下拉菜单在每次重复运行的开始时间被调用。每次重复运行只执行一次。参见开

始运行下拉菜单。

423

Page 426: Flexsim handbook

Flexsim3.0 用户手册

预热期结束 - 此下拉菜单在重复运行的预热期结束时被调用。参见预热期结束下拉菜单。

重复运行结束 - 此下拉菜单在重复运行期满结束时被调用。参见重复运行结束下拉菜单。

场景结束 - 此下拉菜单在每个场景结束时被调用。每个场景仅调用一次。参见场景结束下拉菜单。

实验结束 - 此下拉菜单在实验结束时被调用,用来在实验运行结束时编写模型数据。此函数仅在最

后一个场景运行完毕后被调用一次。参见实验结束下拉菜单。

424

Page 427: Flexsim handbook

工具

单表导出

单表导出工具用来从 Flexsim向Microsoft Excel 进行表的导出。配置了此编辑器后,点击 Excel 界

面视窗中的单表导出按钮,可导出此表。

Excel 工作簿 - 在此指定表要导出所至的 Excel 工作簿。点击浏览按钮查找此工作簿。

Excel 工作表 - 在此定义表要导出所至的工作表名称。

Flexsim 全局表 - 在此定义要从中导出数据的全局表。从下拉列表中选择此表。

使用行标题 - 如果选中此选项,全局表的行标题将成为被导出的首行。

起始行 - 在此定义 Excel电子数据表格中的起始行号。

使用列标题 - 如果选中此选项,全局表的列标题将成为导出的首列。

起始列 - 在此定义 Excel电子数据表格中起始列号。

425

Page 428: Flexsim handbook

Flexsim3.0 用户手册

单表导入

单表导入工具用来从Microsoft Excel向 Flexsim 进行表导入。配置了编辑器后,点击 Excel 界面视

窗中的单表导入按钮,即可导入此表。

Excel 工作簿 - 在此指定要从中导入表(到 Flexsim 中)的 Excel 工作簿。点击浏览按钮查找工作

簿。

Excel 工作表 - 在此定义从中进行导入的工作表名称。

Flexsim 全局表 - 在此定义接受导入数据的全局表。在下拉列表中选择此表。

使用行标题 - 如果选中此选项,Excel电子数据表格中的首行将导入成为全局表的行标题。

起始行 - 在此定义 Excel电子数据表格中要导入的第一行的行号。

使用列标题 - 如果选中此选项,Excel电子数据表格中的起始列将作为全局表列标题导入。

426

Page 429: Flexsim handbook

工具

起始列 - 在此定义 Excel电子数据表格中被导入的第一列序号。

背景设计编辑器

背景渲染是指在“展示”菜单中选择“背景设计箱”选项所创建的背景。这是一个围绕模型的盒子,每面

都有一个不同的图片。用户可以定义盒子的尺寸和所显示的图片。

注释:只有在透视视图中才能正确显示背景设计,在正投影视图中则不行。

删除背景 - 按下此按钮,即把背景实体从模型中删除。

前面 - 此文件是背景盒前面的图形。

后面 - 此文件是背景盒后面的图形。

左面 - 此文件是背景盒左面的图形。

右面- 此文件是背景盒右面的图形。

427

Page 430: Flexsim handbook

Flexsim3.0 用户手册

顶面 -此文件是背景盒顶面的图形。

底面 -此文件是背景盒底面的图形。

表配置器

表配置器用来配置表、导入数据、导出数据,并为给定的行或列指定类型。

导入表数据 - 此按钮打开一个文件浏览器,选择一个.csv 文件导入至表中。

导出表数据 - 此按钮打开一个文件浏览器,选择一个.csv 文件,将表导出至其中。

428

Page 431: Flexsim handbook

工具

使用行表头 - 此选项仅当从.csv 文件导入表数据时采用。如果选择此选项,csv 文件的第一行将导

入成为表的行标题。

使用列表头 - 此选项仅当从.csv 文件导入表数据时采用。如果选择此选项,csv 文件的第一列将导

入成为表的列标题。

列宽 - 此值指定表默认的列宽。注意,可以通过左右拖动列边界来设定每列宽度。点击重置宽度按

钮,可将所有列置为默认列宽。

行高 - 此值指定表默认的行高。点击重置高度按钮,可将所有行置为默认行高。

行数据类型 - 在此为表中任意行指定数据类型。键入一个行数,从下拉列表中选择一个数据类型,

然后点击指定按钮。

列数据类型 - 在此为表中任意列指定数据类型。键入一个列数,从下拉列表中选择一个数据类

型,然后点击赋值按钮。

429

Page 432: Flexsim handbook

Flexsim3.0 用户手册

工具箱

工具箱用来创建和编辑几个模型工具。

全局表

全局表面板用来添加、删除和编辑全局表。根据需要,用添加和删除按钮来添加和删除表。点击编辑

按钮可打开全局表编辑器视窗。

时间表

时间表面板用来添加、删除和编辑时间表。根据需要,用添加和删除按钮来添加和删除表。点击编辑

按钮可打开时间表编辑器视窗。

用户事件

用户事件面板用来添加、删除和编辑用户事件。根据需要,用添加和删除按钮来添加和删除用户事

件。点击编辑按钮可打开用户事件编辑器视窗。

MTBF MTTR

430

Page 433: Flexsim handbook

工具

Mtbf mttr 面板用来添加、删除和编辑 MTBF MTTR 实体。根据需要,用添加和删除按钮来添加和删

除MTBF MTTR 实体。点击编辑按钮可打开 MTBF MTTR 编辑器视窗。

监视列表

监视列表面板用来添加、删除和编辑监视列表。根据需要,用添加和删除按钮来添加和删除监视列

表。点击编辑按钮可打开监视列表编辑器视窗。

全局 C++代码

点击全局 C++代码按钮可打开全局 C++代码编辑器。

全局对象指针

点击全局实体指针按钮可打开全局实体指针编辑器。

导入媒体文件

点击导入媒体文件按钮来打开导入媒体文件编辑器。

模型开始时代码

点击模型启动代码按钮可打开模型开始时代码编辑器。

刷新列表

如果更改了全局表、mtbf mttr、时间表、监视列表或者用户事件的名称,并想要组合框显示这些更改

可按更新列表按钮。

431

Page 434: Flexsim handbook

Flexsim3.0 用户手册

用户库

用户库用来创建和配置实体的特殊功能,并将这些实体保存为模板以便在其他模型中的其它部分

使用。每个用户库包含一组实体。可以保存用户库,以后可以将它们装载到其它项目中。

用户库视窗可同时打开若干个用户库。视窗顶部的菜单用来创建、清除和编辑用户库。

文件菜单

新建用户对象库 - 此选项用来创建一个新用户库,并将它添加到当前打开的用户库列表中。

导入用户对象库 - 此选项用来装载一个保存过的用户库, 将它添加到当前打开的用户库列表中。

432

Page 435: Flexsim handbook

工具

另存为 ... - 此选项用来将当前选定的用户库保存为文件。

关闭用户对象库 - 此选项用来从用户库列表中移除当前选定的用户库。

关闭所有用户对象库 - 此选项用来关闭全部用户库。

编辑菜单

编辑菜单用来更改当前装载的用户库。

重命名用户对象库 - 此选项用来重命名当前选定的用户库。

添加实体到一个用户库

若要向用户库添加一个实体,在正投影或透视视图中右击此实体,并选择“添加到用户库”选项。

这样将把实体添加到当前选定的用户库。如果用户库视窗中没有库,那么将创建一个新用户库里,

实体将被添加到此新用户库中。

433

Page 436: Flexsim handbook

Flexsim3.0 用户手册

关于添加一个实体到一个用户库的注释:当一个实体被添加到一个用户库中时, 是创建了一个

此实体的复制品,并纳入此库中。这意味着,一旦实体被添加至用户库中,它就不再和原来的实体

相关联了。它是一个复制品,可以独立于原始实体而进行更改。

一旦向用户库中添加了实体,就可在用户库视窗中右键单击这些实体来编辑或清除它们。点击后将

出现如下的菜单。

浏览实体树 - 此选项用来在一个树视窗中浏览实体。

浏览用户实体树 - 此选项用来在一个树视窗中浏览整个用户库。

从用户库中删除实体 - 此选项可以从用户库中移除实体。

参数 - 此选项可以打开实体的参数视窗。

属性 - 此选项可以打开实体的属性视窗。

模型添加用户库实体

若要向模型中添加一个用户库实体,点击此实体并保持,拖动鼠标到模型中需要创建此实体的位

置,然后在此点释放鼠标键。

434

Page 437: Flexsim handbook

工具

Microsoft Visio™导入

Visio 导入工具用来在 Microsoft Visio™中创建模型,并将它们导入 Flexsim。操作如下:

启动 Visio

打开 FlexsimTemplate.vst

435

Page 438: Flexsim handbook

Flexsim3.0 用户手册

Visio 如下所示。

436

Page 439: Flexsim handbook

工具

从模板中拖出一些实体到模型空间中进行布局安排。

437

Page 440: Flexsim handbook

Flexsim3.0 用户手册

将 A端口连接实体拖到模型中来创建一个连接。

连接始于左上点,终止于右下点。如果向后反向连接,则在 Flexsim 中连接将是向后的。

这是一个连接到上游实体的连接。

438

Page 441: Flexsim handbook

工具

注释:不要直接连接实体。必须连接到蓝色的点上。

拖出一条连接线时,其两端应该都连接蓝色连接点,才能创建正确的连接。同样,在 Visio 中所连

接的连接点不是问题关键。Flexsim 的连接将根据它们在 Visio 中被拖出的顺序进行排序。下面的例

子将暂存区连接到处理器的第一个输入端口,无涉于被连接到 Visio 中的实体的第二个连接端口。

439

Page 442: Flexsim handbook

Flexsim3.0 用户手册

S端口连接 (中间端口) 的创建与 A端口连接的创建一样。在 Visio 中它们所连接的连接点在顺序上

并不存在差异。允许将 S端口连接到蓝色连接点。

440

Page 443: Flexsim handbook

工具

实体可在 Visio 中旋转和调整大小,这样可以在 Flexsim 中进行旋转和尺寸调整。

Visio 中旋转工具外观如此:

在调整尺寸时不要移动实体的质心点。质心点表示为一个中间有黑点的绿色圆形,用来定义实体的

旋转中心。如果在 Visio 中移动了质心点,此实体将无法正确地在 Flexsim 中定位。

通过点击和拖动旋转工具 ,此处理器围绕它的某个角点进行旋转。

441

Page 444: Flexsim handbook

Flexsim3.0 用户手册

使用选择工具 ,向下拖动暂存区的侧点,此暂存区尺寸被改变。

每个通过双击实体和键入新名称可为实体重新命名。

442

Page 445: Flexsim handbook

工具

模型中的每个实体都必须有一个唯一的名称,这样才能正确地导入到 Flexsim 中。如果在 Visio 中为

实体进行同样的命名,则在 Flexsim 中不能正常创建它们的连接。在下面的例子中,运输机具有相

同的名称,因此分配器两次都被连接到第一个运输机。

443

Page 446: Flexsim handbook

Flexsim3.0 用户手册

这里是一个快要完成的 Visio 页,内容是一个 Flexsim 的布局图。

444

Page 447: Flexsim handbook

工具

还有几项,必须要在导出到 Excel从而导入到 Flexsim 中之前进行检查,以确保正确无误。

确保每个实体有一个唯一的名称。

445

Page 448: Flexsim handbook

Flexsim3.0 用户手册

必须在此菜单中对每个实体正确格式化。

446

Page 449: Flexsim handbook

工具

在名称域段中包含实体的类和一个被句点分开的数字,或者只有实体的类。如果有数字,它必须和

ID号相对应,否则实体将不能正常导出。通常实体会自然进行这些操作,但有时 Visio会在此域段

中生成不正确的名称。如果模型不能正确导入到 Flexsim 中,可能就是这样的原因。下面的例子给出

了如果名称保留为“Dispatcher.14” 而不改为“Dispatcher.17”将会发生的情况。

447

Page 450: Flexsim handbook

Flexsim3.0 用户手册

现在,实体都具有一个唯一的名称,且根据特定格式进行了正确赋值,导出准备已经完成。

从 Tools > Macros > Visio Extras > Database Export 导出文件

448

Page 451: Flexsim handbook

工具

将出现此屏幕。点击下一步。

449

Page 452: Flexsim handbook

Flexsim3.0 用户手册

下一步。

选择“All shapes on the page(页中所有形状)”,点击下一步。

点击“添加所有>>”按钮,来得到导出的所有正确信息。

450

Page 453: Flexsim handbook

工具

然后,点击下一步。

选择 Excel Files 并点击下一步.

451

Page 454: Flexsim handbook

Flexsim3.0 用户手册

选择要接收导出的 Excel 文件。路径通常为:C:/Program Files/Flexsim3/program/FlexsimVisioImport.xls.

在表名称栏中键入名称。在 Flexsim 中再次键入此名称,以便使 Flexsim确定从哪个工作表导入。记

住所键入的名字,并点击下一步。

452

Page 455: Flexsim handbook

工具

不要改变此屏幕中任何数据的值,点击下一步。

下一步。

453

Page 456: Flexsim handbook

Flexsim3.0 用户手册

完成。

现在,在 Flexsim 中,进入工具 > Visio…

454

Page 457: Flexsim handbook

工具

将出现此对话框。

在行数和列数两栏中分别输入一个数值,应大于 Visio 数据库输出创建的 Excel 工作表中的行数和

列数。通常,50 已经足够大。如果模型不能正常导入,可去查看 Excel 工作表的大小,如果需要则

要增大这些值。

455

Page 458: Flexsim handbook

Flexsim3.0 用户手册

点击“…” 按钮浏览要打开的 Excel 文件。

在工作表名称一栏中键入先前定义的表名称。

确保指定的 Excel路径是正确的。

点击导入模型按钮。将会出现如下信息框。

456

Page 459: Flexsim handbook

工具

请等待,直到 Excel 已完全打开正确的工作表,随后点击确定。

这样模型将被导入。这需要几分钟的时间。等待Visio 模型导入视窗的关闭。这时,模型就被导入到

Flexsim 中了。

457

Page 460: Flexsim handbook

Flexsim3.0 用户手册

监视列表

选择工具条中“工具箱”按钮,或者从工具菜单的“工具箱”选项,都可以访问监视列表。一个监视列表

是这样一组变量,建模人员想要对其进行监控。不同的变量被添加到表中接受监视,并在它们的值

发生变化时进行记录。

名称 - 监视列表实体的名称。 此名称应该具有描述性且便于记忆。例如,“Watching Servers(监视

服务器)”或者“Watching Label WIP(监视 WIP 标签)”。

需监视变量数 - 需要监视的变量数。必须将每个变量都添加到列表中。

监视列表表格

编辑监视列表来指定需要监视的实体和变量。

ObjectName(实体名称) - 在这里键入模型中的实体名称。

WatchVariable(监视变量) - 在这里键入需要监视的变量名称或实体的属性。

OldValue(上次记录值) - 这是上次对实体所作的记录值。不要更改这个值。

ObjectAddr(实体地址) - 是个实体指针。不要更改这个值。

变更触发器 - 此下拉菜单指定某个监视变量发生改变时要进行的活动。参见变更触发器下拉菜单。

458

Page 461: Flexsim handbook

工具

459

Page 462: Flexsim handbook

下拉菜单

下拉菜单

不难发现,下拉菜单视窗贯穿整个 Flexsim。这些视窗提供了在 Flexsim 中方便地实现功能的界面。

在视窗背后,每一个视窗都指向一个节点。这些下拉菜单的优点在于,可以用做编写功能却无需编

写代码。它们提供了常用的功能列表,点击下拉框时就会出现。

一旦进行了一个选择,可以通过点击代码模板按钮 来对此选项进行定制。首先会打开一个视窗

解释此选项的作用。同时,也可以对用棕色高亮显示的指定参数进行输入,改为用户自己的信息。

461

Page 463: Flexsim handbook

Flexsim3.0 用户手册

在上例中,从下拉框中选择“按标签(直接)”选项。代码模板视窗中显示,此临时实体的标签“标签

名”的值将被用来作为处理器 1 的预置时间使用。

当再次选择一个下拉菜单选项,并在代码模板视窗进行编辑时,实际上是在创建用户自己的代码

段。其优势在于,只需要设定极少量的信息,而不用真正进行代码编写。

关于下拉菜单编译的注释: 鉴于下拉菜单引用了一段代码,如果对这些域段中之一做了更改,就

必须在运行前对 Flexsim 进行编译。参见何时编译 Flexsim 可获得更多关于 Flexsim何时需要编译

的信息。

462

Page 464: Flexsim handbook

Flexsim3.0 用户手册

在需要时,高级用户也可以明确地编写代码。点击代码编辑按钮 可以打开代码编辑视窗,可在

此视窗中看到此域段中所实施的所有代码。注意,所看到的很多代码事实上是用来设计代码模板视

窗的。根据代码模板的格式代码的颜色来译解这些真实代码。代码模板的设计代码被标示为灰色。

参见在 Flexsim 中编写逻辑可获得更多关于如何在 Flexsim 中编写代码的信息。

464

Page 465: Flexsim handbook

下拉菜单

触发器

装载 /卸载触发器

综述:装载触发器:任务执行器一完成装载时间,但在它将临时实体移动到任务执行器中之前,此触

发器就被触发。

卸载触发器: 任务执行器一完成卸载时间,但在它将临时实体移动到其目的地之前,此触发

器就被触发。

存取变量:item: 将被装载/些载的临时实体

current: 当前实体

Do Nothing (无操作)

默认模板Do nothing

无操作

详细说明

调用此触发器时不执行任何命令。

应用背景

在此触发器执行期间没有附加逻辑要求时采用此函数。

Set Location (位置设定)

默认模板Set the location of item to: X= 0.5Y= 0.5Z= 0.5

设定临时实体 item 位置如下:X= 0.5Y= 0.5Z= 0.5

465

Page 466: Flexsim handbook

Flexsim3.0 用户手册

详细说明

将指定实体的全局坐标设置为这三个指定值。

其他参数示例currentgettablenum("mytable",2,3)getlabelnum(item,"mylabel")6

应用背景

用来设定一个实体的位置。

如果此指定实体是临时实体,则其指定位置是相对所涉及的任务执行器的。

Set Rotation (设定转角)

默认模板Set the rotation of item to: X= 0Y= 0Z= 0

设定临时实体 item 的转角如下:X= 0Y= 0Z= 0

详细说明

为指定实体设定旋转角为三个指定值。

其他参数示例currentgettablenum("mytable",4,4)getlabelnum(item,"mylabel")get(spatialrz(current))+907

应用背景

用来设定一个实体的转角。

Set Size (设定尺寸)

默认模板Set the size of item to: X= 0.5

466

Page 467: Flexsim handbook

下拉菜单

Y= 0.5Z= 0.5

设定临时实体 item 的尺寸如下:X= 0.5Y= 0.5Z= 0.5

详细说明

设定指定实体的尺寸为三个指定值。

其他参数示例gettablenum("mytable",5,6)get(spatialsx(item))+44

应用背景

用来设定一个实体的尺寸。

通常,在一个实体的尺寸进行动态变化,以使得仿真的视觉效果更真实时,采用此功能。

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”。

467

Page 468: Flexsim handbook

Flexsim3.0 用户手册

详细说明

将指定实体的名称设定为指定值。

其他参数示例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)。

详细说明

给指定实体添加一个新的指定名称的数值标签,且将其设置为指定值。

如果此标签已经存在,则此函数将把此标签设定为指定值。

其他参数示例12getlabelnum(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)。

(此功能的前提假设条件是标签已被创建。)

详细说明

将指定实体上某指定名称的标签设定为指定值。

468

Page 469: Flexsim handbook

下拉菜单

如果此标签名不存在,则此函数不做任何操作。

其他参数示例5gettablenum("mytable",2,3)content(current)time()

应用背景

用来更新已在某实体上创建的标签。

Set Color(设置颜色)

默认模板Assign item the color: colorrandomNote: 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 文件中的那部分必须没有被指定素

材。

469

Page 470: Flexsim handbook

Flexsim3.0 用户手册

如果是 3DS 文件,则没有素材的那部分还必须在有指定素材的其它部分之前,为的是改变它

们的颜色。

其他参数示例

参见默认模板。

应用背景

用来在仿真运行期间动态地改变实体颜色。

常用来从列表中指定一个随机颜色或某指定颜色,而无须找到所需颜色的三原色量值。

Set Color (rgb) (设定颜色(rgb))

默认模板Assign item a color using red, green, blue (rgb) inputs:Red=255Green=0Blue=0Note: use an index number between 0 and 255 for each color.

采用红、绿、蓝(rgb)输入方式为临时实体 item 指定一种颜色:

红=255

绿=0

蓝=0

注释: 每种颜色指数均在 0~255之间。

详细说明

在某指定实体上调用设置颜色函数,使用 0~255之内的红、绿、蓝原色值,来改变其颜色。

为了在 Flexsim 中改变一个实体的颜色,要改变颜色的 3d 文件中的那部分必须没有被指定素

材。

如果是 3DS 文件,则没有素材的那部分还必须在有指定素材的其它部分之前,为的是改变它

们的颜色。

其他参数示例currentcenterobject(current,1)30*getitemtype(item)duniform(0,255)getlabelnum(item,"mylabel")50

应用背景

用来在仿真运行期间动态地改变实体颜色。

470

Page 471: Flexsim handbook

下拉菜单

常用来根据特定颜色的已知三原色输入来设定某一指定颜色。

也常用来显示阴影差异程度,较低的指数比较高的指数颜色更暗。

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(根据标签设定颜色)

471

Page 472: Flexsim handbook

Flexsim3.0 用户手册

默认模板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)".

472

Page 473: Flexsim handbook

下拉菜单

从现在算起在 0 时间内发送一条消息给 centerobject(current,1)。用“msgsendingobject”传递

当前实体的引用,用“msgparam(1)”传递 tonum(item) 的值,“msgparam(2)”传递

tonum(station) 的值,并用“msgparam(3)”传递值“3”。

详细说明

在运行任何其它代码之前,立即执行指定实体的消息触发器中的代码。

这三个指定的值可以从消息触发器中引用。当需要了解某些特定的数字时,如端口号、实体类型

或容量,就需要用到此命令。

其他参数示例currentoutobject(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”。

详细说明

在指定长度的仿真时间过去后,执行指定实体的消息触发器中的代码。

其他参数示例currentoutobject(current,2)inobject(current,1)node("/Processor1",model())content(current)

应用背景

用来在一段给定的时间延迟期后运行一段代码。

473

Page 474: Flexsim handbook

Flexsim3.0 用户手册

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,则在执行其它任何代码之前,立即执行消息触发器的代码。

这三个指定的值可以从消息触发器中引用。当需要了解某些特定的数字时,如端口号、实体类型

或容量,就需要用到此命令。

其他参数示例currentoutobject(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。

详细说明

将全局表中某特定单元格设定为指定值。

确保指定的表的名称正确无误。

确保表中指定单元格包含数值数据。

474

Page 475: Flexsim handbook

下拉菜单

其他参数示例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”的量值。

详细说明

创建一个量值表,每当此函数被调用时,向表中添加另一行。

每添加一行,都运行此命令,而将变量行作为一个指向正在添加的当前行的引用。

在为特定临时实体添加的行中,将给定的信息填入相应的各列中。

确定指定的表的名称正确无误。

475

Page 476: Flexsim handbook

Flexsim3.0 用户手册

确定表中指定单元格包含数值数据。

其他参数示例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=0.5Y=0.5Z=0.5

行进到全局坐标系:X=0.5Y=0.5Z=0.5

476

Page 477: Flexsim handbook

下拉菜单

详细说明

在当前实体上创建一个 TravelToLoc 任务,来行进到一特定的全局坐标位置。

其他参数示例08

应用背景

用来告知实体在继续其任务前,行进到一个指定位置。

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 相连接的网络节点。

注释:

只有当任务执行器不在执行行进任务时,才能将任务执行器重新分配给一个新节点。

在让一个运输工具从一个节点将物品卸载到一个货架,再从另一个节点离开的情况下,重新分

配节点是有用的。

477

Page 478: Flexsim handbook

Flexsim3.0 用户手册

详细说明

重新分配网络节点的功能,会告知任务执行器它当前是在一个节点上,而不是它上次所在的那

个节点。

注释:从一个任务执行器到一个网络节点的中间端口连接并不是可视的。若要查看这些连接,

则需要打开任务执行器的属性菜单。

其他参数示例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”命令创建。)

详细说明

将指定实体上具有指定名称的标签递增指定的值。

如果此标签名不存在,此功能不执行任何操作。

使用负数可实现标签递减。

其他参数示例currentcenterobject(current,3)5gettablenum(“mytable”,2,3)content(current)time()-12

应用背景

用来更新已在某实体上创建的标签。

Close and Open Ports (关闭和开放端口)

478

Page 479: Flexsim handbook

下拉菜单

默认模板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 所代表的形状。

479

Page 480: Flexsim handbook

Flexsim3.0 用户手册

详细说明

改变指定实体的 3D 形状。

在导入媒体文件工具箱中可以找到形状索引号。每个导入的形状或图形都有一个号码,代表其

形状索引号。

如果需要用此函数来将一个实体的形状改变为某 3D 形状,而此 3D 形状不在“预先导入图形图

像” 中,则必须首先添加此 3D 形状。

其他参数示例inobject(current,1)outobject(current,2)getshapeindex(“fs3d//Transporter.3ds”)getshapeindex(“C://Program Files//Flexsim//fs3d//chairs.3DS”)

应用背景

用来动态地改变一个实体的形状。

480

Page 481: Flexsim handbook

下拉菜单

进入 /离开触发器

综述:进入触发器:每当一个临时实体进入此实体时,就执行此函数。

离开触发器:每当一个临时实体离开此实体时,就执行此函数。

关于进入/离开触发器应用背景的注释:通常,在一实体的接收/发送事件刚开始时,进入和离开触发

器先于其它任何逻辑而执行。这意味可以在事件逻辑内改变实体的变量、标签等,并正确地应用这些修

改。然而,那些可能影响实体今后某些事件的可执行命令不能在进入和离开触发器中执行,因为那些事

件还没有在实体的事件逻辑中创建,而影响实体事件的函数必须等待,直到那些事件被创建后才能执

行。在这种情况下,应该在 0 时间内向实体发送一个延迟消息(使用 senddelayedmessage()命令),

然后用消息触发器执行此函数的功能。这样,就使得实体在执行命令前能完成剩余部分的事件逻辑。可

在此部分应用的命令是 stopobject(),requestoperators(),openoutput(), openinput(),

resumeinput(), resumeoutput(),有些情况下是根据它们当中的任务类型而创建或分配的任务序列。

存取变量:current(当前):当前实体。

item(临时实体):涉及的刚进入/离开的实体。

port(端口):实体进入/离开的端口号。

Do Nothing (无操作)

默认模板Do nothing

无操作

详细说明

当调用此触发器时不执行任何命令。

481

Page 482: Flexsim handbook

Flexsim3.0 用户手册

应用背景

在此触发器执行期间没有附加逻辑时采用。

Set Location(设定位置)

默认模板Set the location of item to:

X= 0Y= 0Z= 0

设定临时实体 item位置如下:X= 0Y= 0Z= 0

详细说明

将指定实体的全局坐标设定为三个指定的值。

其他参数示例currentgettablenum("mytable",2,3)getlabelnum(item,"mylabel")6

应用背景

用来设定一个实体的位置。

如果此指定实体是临时实体,该指定位置是相对当前实体的。

Set Rotation(设定转角)

默认模板Set the rotation of item to:

X= 0Y= 0Z= 0

设定临时实体 item 的旋转角度如下:X= 0Y= 0Z= 0

详细说明

将特定实体的旋转角度设定为三个指定的值。

482

Page 483: Flexsim handbook

下拉菜单

其他参数示例currentgettablenum("mytable",4,4)getlabelnum(item,"mylabel")get(spatialrz(current))+907

应用背景

用来设定一个实体的转角。

Set Size (设定尺寸)

默认模板Set the size of item to:

X= 0.5Y= 0.5Z= 0.5

设定临时实体 item 的尺寸如下:X= 0.5Y= 0.5Z= 0.5

详细说明

将特定实体的尺寸设定为三个指定的值。

其他参数示例gettablenum("mytable",5,6)get(spatialsx(item))+44

应用背景

用来设定一个实体的尺寸。

通常,在动态变化一个实体的尺寸以使仿真的视觉效果更真实时采用。

Set Itemtype (设置临时实体类型)

默认模板Assign item the following itemtype number: duniform(1,3).

将临时实体 item 指定为如下实体类型号:duniform(1,3)。

详细说明

将指定实体的实体类型设定为指定值。

483

Page 484: Flexsim handbook

Flexsim3.0 用户手册

其他参数示例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)。

详细说明

给指定实体添加一个新的指定名称的数值标签,且将其设置为指定值。

如果此标签已经存在,则此函数将把此标签设定为指定值。

其他参数示例12getlabelnum(current,"mylabel")content(current)time()

484

Page 485: Flexsim handbook

下拉菜单

应用背景

用来给一个实体添加一个数值标签并进行初始化,而不是在属性菜单中添加标签,以后再给它

赋值。

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)。

(此功能的前提假设条件是标签已被创建。)

详细说明

将指定实体上某指定名称的标签设定为指定值。

如果此标签名不存在,则此函数不做任何操作。

其他参数示例5gettablenum("mytable",2,3)content(current)time()

应用背景

用来更新已在某实体上创建的标签。

Set Color (设置颜色)

默认模板Assign item the color:colorrandomNote: To assign a random color use colorrandom, otherwiseuse one of the standard color commands below:colorred colorpinkcolorgray colorgreencolorblue colorblackcoloryellow colorwhitecolororange colortealcolorpurple coloraquacolorbrown colorsilvercolorlime colorlightblue

为临时实体 item 指定颜色:

colorrandom(设定随即颜色)

注释:如需指定随机颜色,采用 colorrandom,否则,采用如下所示的标准颜色命令。

485

Page 486: Flexsim handbook

Flexsim3.0 用户手册

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=255Green=0Blue=0Note: use an index number between 0 and 255 for each color.

采用红、绿、蓝(rgb)输入方式为临时实体 item 指定一种颜色:

红=255

绿=0

蓝=0

注释: 每种颜色指数均在 0~255之间。

详细说明

采用 0~255 的红、绿、蓝三原色方式,在特定实体上调用设定颜色函数来改变其颜色。

486

Page 487: Flexsim handbook

下拉菜单

为了在 Flexsim 中改变一个实体的颜色,要改变颜色的 3d 文件中的那部分必须没有被指定素

材。

如果是 3DS 文件,无素材的部分必须在有指定素材的其它部分之前,目的是为了改变它们的

颜色。

其他参数示例currentcenterobject(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 的实体调用改变颜色函数。

487

Page 488: Flexsim handbook

Flexsim3.0 用户手册

如果涉及的实体的类型在切换语句中没有对应的情况条件,将运行默认的声明,这将把此种情

况的临时实体指定为黑色。

采用正确的表述语句可以添加或者移除 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。

488

Page 489: Flexsim handbook

下拉菜单

其他参数示例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。

详细说明

将全局表中某特定单元格设定为指定值。

确保指定的表名正确无误。

确保表中指定的单元格包含数值数据。

489

Page 490: Flexsim handbook

Flexsim3.0 用户手册

其他参数示例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”的量值。

详细说明

490

Page 491: Flexsim handbook

下拉菜单

创建一个表,每次调用此函数时都向表中添加一行。

每添加一行,都运行此命令,而将变量行作为一个指向正在添加的当前行的引用。

将添加给特定临时实体的给定信息添加到每行的各列中。

确保指定的表名正确无误。

确保表中指定单元格包含数字数据。

其他参数示例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”。

详细说明

在运行任何其它代码之前,立即执行指定实体的消息触发器中的代码。

这三个指定的值可以从消息触发器中引用。当需要了解某些特定的数字时,如端口号、实体类型

或容量,就需要用到此命令。

其他参数示例currentoutobject(current,2)inobject(current,1)node("/Processor1",model())content(current)

应用背景

用来立即执行特定实体中的一段代码。

常用来按一定顺序执行命令以产生期望的结果。

高级功能:由于这些触发器被触发有一定的顺序,有些命令需要从消息触发器,而不是从其它

域段中调用,如请求操作员的命令。

491

Page 492: Flexsim handbook

Flexsim3.0 用户手册

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”。

详细说明

在经过一段指定的仿真时间长度后,执行指定实体的消息触发器中的代码。

其他参数示例currentoutobject(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,则在执行其它任何代码之前,立即执行消息触发器的代码。

492

Page 493: Flexsim handbook

下拉菜单

这三个指定的值可以从消息触发器中引用。当需要了解某些特定的数字时,如端口号、实体类型

或容量,就需要用到此命令。

其他参数示例currentoutobject(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.

对进入的临时实体,按照实体类型的降序(高数值在暂存区前部)进行排序。

493

Page 494: Flexsim handbook

Flexsim3.0 用户手册

注释:如果需要让临时实体按照它们在队列中的位置逐个离开,必须由下游实体用 “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 == 3up(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.

494

Page 495: Flexsim handbook

下拉菜单

如果为 true(真),则通知视化工具实体 up(current) 临时实体 item 已经退出。

详细说明

所引用的实体必须是一个可视化工具类的实体。表达式为“真 ”意味着允许显示通告,这取决于

临时实体从哪个输出端口离开。例如,如果正在从输出端口 1 发送的临时实体还未“离开”可视化

工具,而那些从端口 2 和 3 发送的临时实体将要离开,则 “真”表达式应该为“port == 2 || port

== 3”。

其他参数示例port == 2 || port == 3up(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()

应用背景

用来将一个临时实体的流动历史记录以表的格式输出到其参数视窗中。

495

Page 496: Flexsim handbook

Flexsim3.0 用户手册

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”命令创建。)

详细说明

将指定实体上具有指定名称的标签递增指定的值。

如果此标签名不存在,此功能不执行任何操作。

使用负数可实现标签递减。

其它参数示例Currentcenterobject(current,3)5gettablenum("mytable",2,3)content(current)time()-12

496

Page 497: Flexsim handbook

下拉菜单

应用背景

用来更新已在某实体上创建的标签。

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)

应用背景

497

Page 498: Flexsim handbook

Flexsim3.0 用户手册

用来根据特定条件控制实体中的临时实体流。

常用来关闭一个实体的输入端口,然后在另一个下游实体中重新打开那些输入端口。

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号的输入端口在表中都

有对应的行。

其它参数示例

498

Page 499: Flexsim handbook

下拉菜单

499

Page 500: Flexsim handbook

Flexsim3.0 用户手册

应用背景

用来动态地改变某个合成器中不同的容器所需要的临时实体数目。

通常用于装配生产线上,不同的部件需要不同数量的各种特定装配组件。

Change 3D Shape (改变 3D 形状)

默认模板Change the 3D shape of item object to shape index number 1.

将临时实体 item 的 3D 形状改变为形状序号 1 所代表的形状。

详细说明

改变特定实体的 3D 形状。

500

Page 501: Flexsim handbook

下拉菜单

形状序号可以在导入媒体文件下的工具箱中找到。每个导入的形状或图像都有一个数字来代表

其形状序号。

如果需要用此函数改变实体的形状,而要改变成的 3D 形状还没有在“预先导入 3D 图形图像”中,

就必须首先添加这些形状或图像。

其它参数示例inobject(current,1)outobject(current,2)getshapeindex("fs3d//Transporter.3ds")getshapeindex("C://Program Files//Flexsim//fs3d//chairs.3DS")

应用背景

用来动态地改变实体的形状。

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 (更新处理器最大容量)

501

Page 502: Flexsim handbook

Flexsim3.0 用户手册

默认模板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 shapeindexsetnodenum(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);

502

Page 503: Flexsim handbook

下拉菜单

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 shapeindexsetnodenum(shapeindex(item),22);

详细说明

设定位置

设定方向

设定尺寸

设定颜色

设定名称

设定数值标签

设定字符串标签

递增数值标签

发送消息

发送延迟消息

设定数值型表单元格

设定字符串型表单元格

递增表的数值单元格

改变 3D 形状

其它参数示例

查看使用这些命令的其它触发器

应用背景

用来在一个选取选项中执行多个命令。

503

Page 504: Flexsim handbook

Flexsim3.0 用户手册

消息触发器

概述:当 sendmessage 或 senddelayedmessage命令将一条消息发送到该实体时,执行此函数。每

个命令可以传递三个用户定义的参数。

存取变量:

current :当前实体

msgsendingobject :发送此消息的实体

msgparam(1) :消息的第一个参数

msgparam(2) :消息的第二个参数

msgparam(3) :消息的第三个参数

Do Nothing (无操作)

默认模板Do nothing

无操作

504

Page 505: Flexsim handbook

下拉菜单

详细说明

当调用这个触发器的时候,不会执行任何命令。

应用背景

在此触发器执行期间没有附加逻辑要求时采用此函数。

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(关闭输入)端口操作。

注释:

505

Page 506: Flexsim handbook

Flexsim3.0 用户手册

可以打开或关闭一个实体的输入端口,也可以打开或关闭其输出端口。

详细说明

打开或关闭一个实体的输入或输出端口。如果一个实体的输出端口被关闭,在这些端口被重新

打开前,不再发送任何临时实体。如果一个实体的输入端口被关闭,在这些端口被重新打开前,

不再接收任何临时实体。

如果条件为真,则打开或关闭输入或输出端口。

用诸如 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)

506

Page 507: Flexsim handbook

下拉菜单

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//Transporter.3ds”)getshapeindex(“C://Program Files//Flexsim//fs3d//chairs.3DS”)

应用背景

用来动态地改变一个实体的形状。

处理结束触发器

507

Page 508: Flexsim handbook

Flexsim3.0 用户手册

概述:每当一个临时实体完成它的处理时间,就执行此代码。

变量操作:current :当前实体

item :完成处理时间的实体

Do Nothing (无操作)

默认模板Do nothing

无操作

详细说明

调用这个触发器时不执行任何命令。

应用背景

在此触发器执行期间没有附加逻辑要求时采用此函数。

Set Location(设定位置)

默认模板Set the location of item to:X= 0.5Y= 0.5Z= 0.5

将临时实体 item 的位置设定为:X= 0.5Y= 0.5Z= 0.5

详细说明

将指定实体的全局坐标设定为三个指定值。

其它参数示例currentgettablenum(“mytable”,2,3)getlabelnum(item,“mylabel”)6

508

Page 509: Flexsim handbook

下拉菜单

应用背景

用来设定一个实体的位置。

如果指定实体是临时实体,则指定位置是相对当前实体而言的。

Set Rotation (设定转角)

默认模板Set the rotation of item to:X= 0Y= 0Z= 0

设定临时实体 item 的转角为:X= 0Y= 0Z= 0

详细说明

将指定实体的旋转角度设定为三个指定值。

其它参数示例currentgettablenum(“mytable”,4,4)getlabelnum(item,“mylabel”)get(spatialrz(current))+907

应用背景

用来设定一个实体的方位角度。

Set Size(设定尺寸)

默认模板Set the size of item to:X= 0.5Y= 0.5Z= 0.5

将临时实体 item 的尺寸设定为:X= 0.5Y= 0.5Z= 0.5

详细说明

将指定实体的尺寸设定为三个指定值。

509

Page 510: Flexsim handbook

Flexsim3.0 用户手册

其它参数示例gettablenum(“mytable”,5,6)get(spatialsx(item))+44

应用背景

用来设定实体的尺寸。

通常,在一个实体的尺寸进行动态变化,以使得仿真的视觉效果更真实时,采用此功能。

Set Color(设定颜色)

默认模板Assign item the color:colorrandomNote: 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 文件中的那部分必须没有被指定素

材。

510

Page 511: Flexsim handbook

下拉菜单

如果是 3DS 文件,则没有素材的那部分还必须在有指定素材的所有其它部分之前,为的是改

变它们的颜色。

其它参数示例

参见默认模板

应用背景

用来在仿真运行期间动态地改变实体的颜色。

常用来从列表中指定一个随机颜色或某特定颜色,而无须找到所需颜色的三原色量值。

Set Color (rgb)(设定颜色(rgb))

默认模板Assign item a color using red, green, blue (rgb) inputs:Red=255Green=0Blue=0Note: use an index number between 0 and 255 for each color.

使用红、绿、蓝(rgb)输入方式来指定临时实体 item 的颜色:Red=255Green=0Blue=0

注释:每种颜色指数均在 0~255之间。

详细说明

采用 0~255 的红、绿、蓝三原色方式,在特定实体上调用设定颜色函数来改变其颜色。

为了在 Flexsim 中改变一个实体的颜色,要改变颜色的 3d 文件中的那部分必须没有被指定素

材。

如果是 3DS 文件,则没有素材的那部分还必须在有指定素材的其它部分之前,为的是改变它

们的颜色。

其它参数示例currentcenterobject(current,1)30*getitemtype(item)duniform(0,255)getlabelnum(item,“mylabel”)50

应用背景

用来在仿真运行期间动态地改变实体的颜色。

511

Page 512: Flexsim handbook

Flexsim3.0 用户手册

常用来根据特定颜色的已知三原色输入设定某一特定颜色。

也常用来显示阴影差异程度,较低的指数比较高的指数颜色更暗。

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(创建和初始化标签)

默认模板

512

Page 513: Flexsim handbook

下拉菜单

Create a label called “labelname” on item and initialize it with a value of duniform(1,3).

在临时实体 item 上创建一个名为 “labelname”的标签,并初始化其值为 duniform(1,3)。

详细说明

给指定实体添加一个新的指定名称的数值标签,且将其设定为指定值。

如果此标签已经存在,则此函数将把此标签设定为指定值。

其它参数示例12getlabelnum(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)。

(此功能的前提假设条件是标签已被创建。)

详细说明

将指定实体上某指定名称的标签设定为指定值。

如果此标签名不存在,则此函数不做任何操作。

其它参数示例5gettablenum(“mytable”,2,3)content(current)time()

应用背景

用来更新已在某实体上创建的标签。

Write to Table (1) (写入表中(1))

默认模板

513

Page 514: Flexsim handbook

Flexsim3.0 用户手册

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 。

详细说明

在运行任何其它代码之前,立即执行指定实体的消息触发器中的代码。

这三个指定的值可以从消息触发器中引用。当需要了解某些特定的数字时,如端口号、实体类型

或容量,就需要用到此命令。

其它参数示例currentoutobject(current,2)inobject(current,1)node(“/Processor1”,model())content(current)

应用背景

用来立即执行特定实体中的一段代码。

常用来按一定顺序执行命令以产生期望的结果。

514

Page 515: Flexsim handbook

下拉菜单

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 。

详细说明

在指定的仿真时间长度之后,在指定实体的消息触发器中执行此代码。

其它参数示例currentoutobject(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,则在执行其它任何代码之前,立即执行消息触发器的代码。

515

Page 516: Flexsim handbook

Flexsim3.0 用户手册

这三个指定的值可以从消息触发器中引用。当需要了解某些特定的数字时,如端口号、实体类型

或容量,就需要用到此命令。

其它参数示例currentoutobject(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”命令创建。)

详细说明

将指定实体上具有指定名称的标签递增指定的值。

如果此标签名不存在,此功能不执行任何操作。

使用负数可实现标签递减。

其它参数示例currentcenterobject(current,3)5gettablenum(“mytable”,2,3)content(current)time()-12

应用背景

用来更新已在某实体上创建的标签。

Close and Open Ports(打开与关闭端口)

默认模板If true then closeinput ports of the current object.

516

Page 517: Flexsim handbook

下拉菜单

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 形状。

517

Page 518: Flexsim handbook

Flexsim3.0 用户手册

形状序号可以在导入媒体文件下的工具箱中找到。每个导入的形状或图像都有一个号码来代表

其形状序号。

如果需要用此函数改变实体的形状,而要改变成的 3D 形状还没有在“预先导入 3D 图形图像 ”

中,就必须首先添加这些形状或图像。

其它参数示例inobject(current,1)outobject(current,2)getshapeindex(“fs3d//Transporter.3ds”)getshapeindex(“C://Program Files//Flexsim//fs3d//chairs.3DS”)

应用背景

用来动态地改变一个实体的形状。

创建触发器

概述:第一次创建一个临时实体时执行此代码。

存取变量:current :当前实体

item :被创建的实体

rownumber :一次到达对应的行数(如果有一次申请)

Do Nothing(无操作)

默认模板

518

Page 519: Flexsim handbook

下拉菜单

Do nothing

无操作

详细说明

当调用此触发器时,不会执行任何命令。

应用背景

在此触发器执行期间没有附加逻辑要求时采用此函数。

Set Location (设定位置)

默认模板Set the location of item to:X= 0.5Y= 0.5Z= 0.5

将临时实体 item 的位置设定为:X= 0.5Y= 0.5Z= 0.5

详细说明

将指定实体的全局坐标设定为三个指定值。

其它参数示例currentgettablenum("mytable",2,3)getlabelnum(item,"mylabel")6

应用背景

用来设定一个实体的位置。

如果指定实体是临时实体,则指定位置是相对当前实体而言。

Set Rotation(设定转角)

默认模板Set the rotation of item to:X= 0Y= 0Z= 0

设定临时实体 item 的转角为:X= 0

519

Page 520: Flexsim handbook

Flexsim3.0 用户手册

Y= 0Z= 0

详细说明

将指定实体的转角设定为三个指定值。

其它参数示例currentgettablenum("mytable",4,4)getlabelnum(item,"mylabel")get(spatialrz(current))+907

应用背景

用来设定一个实体的旋转角度。

Set Size(设定尺寸)

默认模板Set the size of item to:X= 0.5Y= 0.5Z= 0.5

将临时实体 item 的尺寸设定为:X= 0.5Y= 0.5Z= 0.5

详细说明

将指定实体的尺寸设定为三个指定值。

其它参数示例gettablenum("mytable",5,6)get(spatialsx(item))+44

应用背景

用来设定一个实体的尺寸。

通常,在一个实体的尺寸进行动态变化,以使得仿真的视觉效果更真实时,采用此功能。

Set Itemtype(设定实体类型)

默认模板

520

Page 521: Flexsim handbook

下拉菜单

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)。

详细说明。

给指定实体添加一个新的指定名称的数值标签,且将其设定为指定值。

如果此标签已经存在,则此函数将把此标签设定为指定值。

521

Page 522: Flexsim handbook

Flexsim3.0 用户手册

其它参数示例12getlabelnum(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)。

(此功能的前提假设条件是标签已被创建。)

详细说明

设定指定实体上某指定名称的标签为指定值。

如果此标签名不存在,则此函数不做任何操作。

其它参数示例5gettablenum("mytable",2,3)content(current)time()

应用背景

用来更新已在某实体上创建的标签。

Set Color(设定颜色)

默认模板Assign item the color:Colorrandom

指定临时实体 item 的颜色:

Colorrandom (赋随即色)

注释:使用 colorrandom命令指定一种随机颜色,否则,使用下列的标准颜色命令:

colorred(颜色红) colorpink(颜色粉红)

522

Page 523: Flexsim handbook

下拉菜单

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=255Green=0Blue=0Note: use an index number between 0 and 255 for each color.

使用红、绿、蓝(rgb)输入方式来指定临时实体 item 的颜色:Red=255Green=0Blue=0

注释:每种颜色指数均在 0~255之间。

详细说明

采用 0~255 的红、绿、蓝三原色方式,在特定实体上调用设定颜色函数来改变其颜色。

523

Page 524: Flexsim handbook

Flexsim3.0 用户手册

为了在 Flexsim 中改变一个实体的颜色,要改变颜色的 3d 文件中的那部分必须没有被指定素

材。

如果是 3DS 文件,则没有素材的那部分还必须在有指定素材的其它部分之前,为的是改变它

们的颜色。

其它参数示例currentcenterobject(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 节点指针)来获取所涉及的临时实体。

详细说明

524

Page 525: Flexsim handbook

下拉菜单

每种情况代表一种特定的实体类型。采用所示的语句为那种情况的实体调用改变颜色函数。

如果所涉及的实体的类型在切换语句中没有对应的 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 代表所涉及的临时实体上指定标签的值。采用所示语句为那种情况的临时实体调用颜

色改变函数。

如果标签不包含任何指定值,将运行默认的声明,这将把此种情况的临时实体指定为黑色。

525

Page 526: Flexsim handbook

Flexsim3.0 用户手册

采用正确的表述语句可以添加或移除 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))

默认模板

526

Page 527: Flexsim handbook

下拉菜单

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。

详细说明

在运行任何其它代码之前,立即执行指定实体的消息触发器中的代码。

这三个指定的值均可从消息触发器中引用。需要了解某些特定的数字时,如端口号、实体类型或

容量,就需要用到此命令。

其它参数示例currentoutobject(current,2)inobject(current,1)node("/Processor1",model())content(current)

应用背景

用来立即执行特定实体中的一段代码。

常用来按一定顺序执行命令以产生期望的结果。

527

Page 528: Flexsim handbook

Flexsim3.0 用户手册

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。

详细说明

在指定的仿真时间之后,执行指定实体的消息触发器中的代码。

其它参数示例currentoutobject(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(假)。

如果条件表达式为真,在指定的仿真时间过去后,执行指定实体的消息触发器里的代码。

528

Page 529: Flexsim handbook

下拉菜单

如果指定仿真时间为 0,则在执行其它任何代码之前,立即执行消息触发器的代码。

这三个指定的值可以从消息触发器中引用。当需要了解某些特定的数字时,如端口号、实体类型

或容量,就需要用到此命令。

其它参数示例currentoutobject(current,2)inobject(current,1)node("/Processor1",model())content(current)

应用背景

仅在条件表达式为真的情况下,用来在一段给定的时间延迟期后运行一段代码。

Close and Open Ports(打开与关闭端口)

默认模板If true then closeinput ports of the current objectNotes: 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。

如果没有用条件表达式代替真,则每当此函数被调用时都会打开或关闭输入/输出端口。

529

Page 530: Flexsim handbook

Flexsim3.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//Transporter.3ds")getshapeindex("C://Program Files//Flexsim//fs3d//chairs.3DS")

应用背景Used to dynamically change the shape of an object.

用来动态地改变一个实体的形状。

530

Page 531: Flexsim handbook

下拉菜单

碰撞触发器(碰撞处理)

概述:每当一个实体执行其碰撞检测并发现已经与它的一个碰撞成员发生碰撞时,就触发碰撞触发器。

参见任务执行器碰撞探测,可获得更多关于碰撞探测的信息。

存取变量:thisobject :当前实体

otherobject :与当前实体碰撞的那个实体

thissphere :涉及的当前实体的碰撞球

othersphere :涉及的与当前实体碰撞的实体的碰撞球。

Do Nothing(无操作)

默认模板Do nothing

无操作

详细说明

531

Page 532: Flexsim handbook

Flexsim3.0 用户手册

调用这个触发器时,不执行任何命令。

应用背景

在此触发器执行期间没有附加逻辑要求时采用此函数。

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.

将实体从碰撞位置移开。

详细说明

532

Page 533: Flexsim handbook

下拉菜单

给任务执行器一个先占的任务序列,让它从碰撞位置转开 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 个单位时间,再重试。

详细说明

先占支配起重机从其它起重机的路线上移开,以使它们不相互穿过或重叠。

指定轴是起重机相对彼此移开的方向。

确保将指定标签添加到涉及的起重机上。

确保指定的标签是一个数字标签。

应用背景

用于起重机逻辑,以使它们相互之间不穿过或重叠。

进入节点触发器(继续 /到达时)

533

Page 534: Flexsim handbook

Flexsim3.0 用户手册

概述:当一个行进物从任意方向进入该节点时,执行此函数。当有行进物到达此节点时,就触发到达

触发器。当行进物继续向下一路径行进时,就触发继续触发器。

存取变量: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。

详细说明

在运行任何其它代码之前,立即执行指定实体的消息触发器中的代码。

这三个指定的值可以从消息触发器中引用。当需要了解某些特定的数字时,如端口号、实体类型

或容量,就需要用到此命令。

其它参数示例currentoutobject(current,2)

534

Page 535: Flexsim handbook

下拉菜单

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。

详细说明

在经过指定的仿真时间后,在指定实体的消息触发器中执行此代码。

其它参数示例currentoutobject(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。

详细说明

535

Page 536: Flexsim handbook

Flexsim3.0 用户手册

“真”被一个诸如 getitemtype(item) > 5,或 getlabelnum(current,"mylabel")的条件表达式所替代。

如果临时实体的实体类型号大于 5,getitemtype(item) > 5 将返回“真”。

getlabelnum(current,"mylabel")将检查当前实体上的标签“mylabel”是否不等于(真)或等于

(假)0。

如果条件表达式为真,在指定的仿真时间过去后,执行指定实体的消息触发器里的代码。

如果指定仿真时间为 0,则在执行其它任何代码之前,立即执行消息触发器的代码。

这三个指定的值可以从消息触发器中引用。当需要了解某些特定的数字时,如端口号、实体类型

或容量,就需要用到此命令。

其它参数示例currentoutobject(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 : 行进物通过的路径侧边编号。

536

Page 537: Flexsim handbook

下拉菜单

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 所代表的形状。

详细说明

537

Page 538: Flexsim handbook

Flexsim3.0 用户手册

改变指定实体的 3D 形状。

形状序号可以在“导入媒体文件”下的工具箱中找到。每个导入的形状或图像都有一个号码来代

表其形状序号。

如果需要用此函数改变实体的形状,而要改变成的 3D 形状还没有在“预先导入 3D 图形图像”中,

就必须首先添加这些形状或图像。

其它参数示例inobject(current,1)outobject(current,2)getshapeindex(“fs3d//Transporter.3ds”)getshapeindex(“C://Program Files//Flexsim//fs3d//chairs.3DS”)

应用背景

用来动态地改变一个实体的形状。

覆盖与覆盖解除触发器下拉菜单

概述:此函数在光电传感器状态改变的时候执行。

变量操作:current :当前实体

item :此时正好在光电传感器前的临时实体.

photoeye :光电传感器的序号(表中的行)

538

Page 539: Flexsim handbook

下拉菜单

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 ;

539

Page 540: Flexsim handbook

Flexsim3.0 用户手册

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(打开与关闭端口)

默认模板

540

Page 541: Flexsim handbook

下拉菜单

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.

在输出控制台中显示光电传感器的序号和状态消息。

详细说明

此选项向输出控制台打印一条消息。

541

Page 542: Flexsim handbook

Flexsim3.0 用户手册

变更触发器

概述:每当监视列表中的任何变量发生变化时,就执行此函数。站点将检查模型中的每一事件的变量,

以确保能在其发生变化时捕获此变化。

存取变量:

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()/60oldvalgetitemtype(changeditem)

542

Page 543: Flexsim handbook

下拉菜单

应用背景

用来以表的形式显示变量的变化。

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 (关闭输入)端口的操作。

详细说明

打开或关闭一个实体的输入或输出端口。如果一个实体的输出端口被关闭,在这些端口被重新

打开前,不再发送任何临时实体。如果一个实体的输入端口被关闭,在这些端口被重新打开前,

不再接收任何临时实体。

其他参数示例openoutputcloseoutputcloseinputoutobject(changedobject,1)centerobject(changedobject,2)

应用背景

用来在一个变量变化时打开或关闭输入或输出端口。

543

Page 544: Flexsim handbook

Flexsim3.0 用户手册

绘图触发器(用户绘图代码)

概述:此函数在实体的“绘图事件”之前执行。它用来执行用户定义的绘图命令和动画。如果此函数返回

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)

544

Page 545: Flexsim handbook

下拉菜单

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 分支。

其它参数示例4setname(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(绘制球)

默认模板

545

Page 546: Flexsim handbook

Flexsim3.0 用户手册

Draw a Sphere.Location (x,y,z) : (0,0,0)Radius : 1Red : 255Green : 0Blue : 0Opacity (0 = clear; 1 = opaque) : 1Texture Index : 0

绘制一个球:Location (x,y,z) : (0,0,0)Radius : 1Red : 255Green : 0Blue : 0Opacity (0 = clear; 1 = opaque) : 1Texture Index : 0

详细说明

给实体添加一个纹理包围的 3D球形。

纹理序号可以在导入媒体文件下的工具箱中找到。每个导入的图形都有一个数字代表其纹理序

号。

如果需要使用此函数将一个实体的纹理改变为尚未导入到“预先导入 3D 图形图像”中的图形,

则必须首先添加它。

其它参数示例3,4.25,2302552550.652

应用背景

用来给一个实体添加额外的可视化效果。

Draw Column(绘制柱形)

默认模板Draw a Column.Location (x,y,z) : (0,0,0)Sides : 5Base Radius : 1Top Radius : 1Height : 1Rotation (x,y,z) : (0,0,0)Red : 255Green : 0

546

Page 547: Flexsim handbook

下拉菜单

Blue : 0Opacity (0 = clear; 1 = opaque) : 1Texture Index : 0Repeat Texture X : 1Repeat Texture Y : 1

绘制一个柱状图形:Draw a Column.Location (x,y,z) : (0,0,0)Sides : 5Base Radius : 1Top Radius : 1Height : 1Rotation (x,y,z) : (0,0,0)Red : 255Green : 0Blue : 0Opacity (0 = clear; 1 = opaque) : 1Texture Index : 0Repeat Texture X : 1Repeat Texture Y : 1

详细说明

给实体添加一个纹理包围的 3D柱状图形。X、Y 的纹理重复次数用来定义围绕柱形这两个方向

上的纹理重复次数。

纹理序号可以在“导入媒体文件”下的工具箱中找到。每个导入的图形都有一个数字代表其纹理

序号。

如果需要使用此函数将一个实体的纹理改变为尚未导入到“预先导入 3D 图形图像” 中的图形,

则必须首先添加它。

其它参数示例3,4.25,2122350,90,002552550.65224

应用背景

用来给一个实体添加额外的可视化效果。

547

Page 548: Flexsim handbook

Flexsim3.0 用户手册

Draw Cube(绘制立方体)

默认模板Draw a Cube.Location (x,y,z) : (0,0,0)Size : (1,1,1)Rotation (x,y,z) : (0,0,0)Red : 255Green : 0Blue : 0Opacity (0 = clear; 1 = opaque) : 1Texture Index : 0Repeat Texture X : 1Repeat 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 : 255Green : 0Blue : 0Opacity (0 = clear; 1 = opaque) : 1Texture Index : 0Repeat Texture X : 1Repeat Texture Y : 1

详细说明

给实体添加一个纹理包围的 3D 立方体图形。X、Y纹理重复次数定义了在立方体的两个方向上

纹理重复的次数。

纹理序号可以在“导入媒体文件”下的工具箱中找到。每个导入的图形都有一个数字代表其纹理

序号。

如果需要使用此函数将一个实体的纹理改变为尚未导入到“预先导入 3D 图形图像” 中的图形,

则必须首先添加它。

其它参数示例3,4.25,22,3,40,90,002552550.65224

548

Page 549: Flexsim handbook

下拉菜单

应用背景

用来给一个实体添加额外的可视化效果。

Draw Cylinder(绘制圆柱)

默认模板Draw a Column.Location (x,y,z) : (0,0,0)Base Radius : 1Top Radius : 1Height : 1Rotation (x,y,z) : (0,0,0)Red : 255Green : 0Blue : 0Opacity (0 = clear; 1 = opaque) : 1Texture Index : 0

绘制一个圆柱图形Location (x,y,z) : (0,0,0)Base Radius : 1Top Radius : 1Height : 1Rotation (x,y,z) : (0,0,0)Red : 255Green : 0Blue : 0Opacity (0 = clear; 1 = opaque) : 1Texture Index : 0

详细说明

给实体添加一个纹理包围的 3D圆柱图形。

纹理序号可以在“导入媒体文件”下的工具箱中找到。每个导入的图形都有一个数字代表其纹理

序号。

如果需要使用此函数将一个实体的纹理改变为尚未导入到“预先导入 3D 图形图像”中的图形,

则必须首先添加它。

其它参数示例3,4.25,22350,90,002552550.652

549

Page 550: Flexsim handbook

Flexsim3.0 用户手册

应用背景

用来给一个实体添加额外的可视化效果。

Draw Disk(绘制圆盘)

默认模板Draw a Disk.Location (x,y,z) : (0,0,0)Inner Radius : 1Outer Radius : 2Start Angle : 0Sweep Angle : 360Rotation (x,y,z) : (0,0,0)Red : 255Green : 0Blue : 0Opacity (0 = clear; 1 = opaque) : 1Texture Index : 0

绘制一个圆盘。Location (x,y,z) : (0,0,0)Inner Radius : 1Outer Radius : 2Start Angle : 0Sweep Angle : 360Rotation (x,y,z) : (0,0,0)Red : 255Green : 0Blue : 0Opacity (0 = clear; 1 = opaque) : 1Texture Index : 0

详细说明

给实体添加一个有纹理的圆盘。

纹理序号可以在导入媒体文件下的工具箱中找到。每个导入的图形都有一个数字代表其纹理序

号。

如果需要使用此函数将一个实体的纹理改变为尚未导入到“预先导入 3D 图形图像”中的图形,

则必须首先添加它。

其它参数示例3,4.25,2034527002552550.6

550

Page 551: Flexsim handbook

下拉菜单

52

应用背景

用来给一个实体添加额外的可视化效果。

Draw Rectangle(绘制长方体)

默认模板Draw a Rectangle.Location (x,y,z) : (0,0,0)Length : 1Width : 1Rotation (x,y,z) : (0,0,0)Red : 255Green : 0Blue : 0Opacity (0 = clear; 1 = opaque) : 1Texture Index : 0Repeat Texture X : 1Repeat Texture Y : 1

绘制一个长方体:Location (x,y,z) : (0,0,0)Length : 1Width : 1Rotation (x,y,z) : (0,0,0)Red : 255Green : 0Blue : 0Opacity (0 = clear; 1 = opaque) : 1Texture Index : 0Repeat Texture X : 1Repeat Texture Y : 1

详细说明

给实体添加一个有纹理的长方体。X、Y纹理重复次数定义了长方体的两个方向上纹理的重复次

数。

纹理序号可以在“导入媒体文件”下的工具箱中找到。每个导入的图形都有一个数字代表其纹理

序号。

如果需要使用此函数将一个实体的纹理改变为尚未导入到“预先导入 3D 图形图像”中的图形,

则必须首先添加它。

其它参数示例3,4.25,24345 , 90, 00

551

Page 552: Flexsim handbook

Flexsim3.0 用户手册

2552550.65232.5

应用背景

用来给一个实体添加额外的可视化效果。

Draw Object(绘制实体)

默认模板Draw a 3D Object.Object Index : 0Texture Index : 0

绘制一个 3D 实体:Object Index : 0Texture Index : 0

详细说明

给实体添加一个有纹理的 3D 形状。

形状和纹理序号可以在“ 导入媒体文件”下的工具箱中找到。每个导入的形状或图形都有一个数

字代表其形状或纹理序号。

如果需要使用此函数将一个实体的形状或纹理改变为尚未导入到“预先导入 3D 图形图像”中的

图形,则必须首先添加它。

其它参数示例12getshapeindex(“fs3d//Transporter.3ds”)getshapeindex(“C://Program Files//Flexsim//fs3d//chairs.3DS”)getshapeindex(“bitmaps//flowitempicture.bmp”)

应用背景

用来给一个实体添加额外的可视化效果。

Draw Rotating Object(绘制转动实体)

默认模板Draw an object rotating about the z axis.Object Index : 0Texture Index : 0Rotation Amount : time()Location : (0,0,0)

552

Page 553: Flexsim handbook

下拉菜单

绘制一个绕 z轴转动的实体:Object Index : 0Texture Index : 0Rotation Amount : time()Location : (0,0,0)

详细说明

给实体添加转动的有纹理的 3D 形状。

形状和纹理序号可以在“ 导入媒体文件”下的工具箱中找到。每个导入的形状或图形都有一个数

字代表其形状或纹理序号。

如果需要使用此函数将一个实体的形状或纹理改变为尚未导入到“预先导入 3D 图形图像”中的

图形,则必须首先添加它。

其他参数示例12getshapeindex(“fs3d//Transporter.3ds”)getshapeindex(“C://Program Files//Flexsim//fs3d//chairs.3DS”)getshapeindex(“bitmaps//flowitempicture.bmp”)04*time()3.65,4.24,2.2

应用背景

用来给一个实体添加额外的可视化效果。

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 Over.3DS” shape applied to it.

绘制移动临时实体的动态臂。

注释:此选项用来与具有 “fs3d/处理器/处理器-输送机.3DS”形状的处理器一起使用。

详细说明

给实体添加一个可动作手臂,可以捡取临时实体并沿处理器移动它,而不是让处理器接收实体

并沿着其长度方向传送过去。

应用背景

用来给一个实体添加额外的可视化效果。

Follow an Object(跟随实体)

553

Page 554: Flexsim handbook

Flexsim3.0 用户手册

默认模板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())

应用背景

用来让观察点镜头跟随特定的实体。

重置触发器

概述:当模型重置的时候执行这个函数。

存取变量:current :当前实体

Do Nothing(无操作)

默认模板Do nothing

无操作

详细说明

调用此触发器时不执行任何命令。

应用背景

在此触发器执行期间没有附加逻辑要求时采用。

554

Page 555: Flexsim handbook

下拉菜单

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(其它参数示例)12getlabelnum(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)。

(此功能的前提假设条件是标签已被创建。)

详细说明

将指定实体上某指定名称的标签设定为指定值。

如果此标签名不存在,则此函数不做任何操作。

其它参数示例5gettablenum(“mytable”,2,3)content(current)time()

应用背景

用来更新已在某实体上创建的标签。

555

Page 556: Flexsim handbook

Flexsim3.0 用户手册

Set Location(设定位置)

默认模板Set the location of current to:X= 0Y= 0Z= 0

将 current (当前)实体的位置设定为:X= 0Y= 0Z= 0

详细说明

将指定实体的全局坐标设定为三个指定值。

其它参数示例gettablenum(“mytable”,2,3)6

应用背景

用来设定一个实体的位置。

常与任务执行器(操作员和运输机)的重置触发器一起使用,来将它们移动到起始位置。

Set Rotation(设定转角)

默认模板Set the rotation of current to:X= 0Y= 0Z= 0

设定当前实体的转角为:X= 0Y= 0Z= 0

详细说明

将指定实体的方位设定为三个指定值。

其它参数示例gettablenum(“mytable”,4,4)7

应用背景

556

Page 557: Flexsim handbook

下拉菜单

用来设定一个实体的转角

常与任务执行器(操作员和运输机)的重置触发器一起使用,来将它们转到特定的方向。

Set Size(设定尺寸)

默认模板Set the size of current to:X= 0.5Y= 0.5Z= 0.5

将 current (当前)实体的尺寸设定为:X= 0.5Y= 0.5Z= 0.5

详细说明

将指定实体的尺寸设定为三个指定值。

其它参数示例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”)

应用背景

557

Page 558: Flexsim handbook

Flexsim3.0 用户手册

用来将信息存储倒表中以备以后使用。

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)”.

558

Page 559: Flexsim handbook

下拉菜单

发送一条消息给 centerobject(current,1)。用参数 “msgsendingobject” 传递当前实体的引用,

用参数“msgparam(1)”传递值 1,用参数 “msgparam(2)”传递值 2 ,用参数 “msgparam(3)”传

递值 3 。

详细说明

在运行任何其它代码之前,立即执行指定实体的消息触发器中的代码。

这三个指定的值可以从消息触发器中引用。当需要了解某些特定的数字时,如端口号、实体类型

或容量,就需要用到此命令。

其它参数示例currentoutobject(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 。

详细说明

在经过指定的仿真时间后,执行指定实体的消息触发器中的代码。

其它参数示例currentoutobject(current,2)inobject(current,1)node(“/Processor1”,model())content(current)

559

Page 560: Flexsim handbook

Flexsim3.0 用户手册

应用背景

用来在一段给定的时间延迟期后运行一段代码。

常用来重复地从一个实体发送延迟消息给它自身,目的是每隔 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 图形图像”中,

就必须首先添加这些形状或图像。

560

Page 561: Flexsim handbook

下拉菜单

其它参数示例inobject(current,1)outobject(current,2)getshapeindex(“fs3d//Transporter.3ds”)getshapeindex(“C://Program Files//Flexsim//fs3d//chairs.3DS”)

应用背景

用来动态地改变实体的形状。

停机 /启用触发器

概述:停机触发器:当MTBFMTTR 实体告知其成员中断运行时执行此函数。

启用触发器:当MTBFMTTR 实体告知其成员重新启动的时候执行这个函数。

存取变量:current:MTBFMTTR 实体

members :MTBFMTTR 实体的成员列表

involved :要么是 1)MTBFMTTR 实体,或者 2)所涉及成员

curmember :当前成员(将在所有成员之间循环)——不是所有选项都可用

index:当前成员在成员列表中的序号

Do Nothing(无操作)

默认模板Do nothing

无操作

561

Page 562: Flexsim handbook

Flexsim3.0 用户手册

详细说明

当调用此触发器时不执行任何命令。

应用背景

在此触发器执行期间没有附加逻辑要求时采用此函数。

Set Location (group) (设定位置(组))

默认模板Set the location of all members of the group to ( 0 , 0 , 0 ).

将一组内的所有成员的位置都设定为( 0 , 0 , 0 )。

详细说明

遍历组里的每个成员,将其位置设为指定值。

其它参数示例67 , 54 , 23getlabelnum(curmember,"myxlabel") , getlabelnum(curmember,"myylabel") , 0

应用背景

用来设定所有停机或维修的相关成员的位置。

Set Location (individual)(设定位置(单独地))

默认模板Set the location of the individual to ( 0 , 0 , 0 ).

将某个单独个体的位置设为( 0 , 0 , 0 )。

详细说明

将所涉及实体的位置设定为指定值。

其它参数示例67 , 54 , 23getlabelnum(curmember,"myxlabel") , getlabelnum(curmember,"myylabel") , 0

应用背景

在各成员单独中断时,用来设定中断或维修的每个成员的位置。

Set Color (group)(设定颜色(组))

562

Page 563: Flexsim handbook

下拉菜单

默认模板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 文件,则没有素材的那部分还必须在有指定素材的其它部分之前,为的是改变它

们的颜色。

563

Page 564: Flexsim handbook

Flexsim3.0 用户手册

其它参数示例

使用 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)12time()

引用背景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。

564

Page 565: Flexsim handbook

下拉菜单

详细说明

设定相关实体上指定标签为指定值。

确保指定的标签名称正确无误。

确保指定的标签是一个数值标签。

其它参数示例gettablenum("MyTable",1,1)12time()

应用背景Used to set a label on each of the involved members on break down or repair when members break down individually.

在各成员单独中断时,用来在中断或维修的每个成员上设定一个标签。

565

Page 566: Flexsim handbook

Flexsim3.0 用户手册

中断 /维修触发器

概述:中断触发器:每次该实体中断停机时都执行这段代码。

维修触发器:每次该实体完成其维修时间时都执行这段代码。

存取变量:

current:当前实体

Do Nothing(无操作)

默认模板Do nothing

无操作

详细说明

调用此触发器时不执行任何命令。

应用背景

在此触发器执行期间没有附加逻辑要求时采用。

Set Color (rgb)(设定颜色(rgb))

默认模板Assign current a color using red, green, blue (rgb) inputs:Red=255Green=0Blue=0Note: use an index number between 0 and 255 for each color.

采用红、绿、蓝(三原色)输入方式为 current(当前)实体指定一种颜色:

红=255

绿=0

蓝=0

566

Page 567: Flexsim handbook

下拉菜单

注释:每种颜色指数均在 0~255之间。

详细说明

采用 0~255 的红、绿、蓝三原色方式,在特定实体上调用设定颜色函数来改变其颜色。

为了在 Flexsim 中改变一个实体的颜色,要改变颜色的 3D 文件中的那部分必须没有被指定素

材。

如果是 3DS 文件,则没有素材的那部分还必须在有指定素材的其它部分之前,为的是改变它

们的颜色。

其它参数示例currentcenterobject(current,1)30*getitemtype(item)duniform(0,255)getlabelnum(item,“mylabel”)50

应用背景

用来在仿真运行期间动态地改变实体的颜色。

常用来根据特定颜色的已知三原色输入来设定某一特定颜色。

也常用来显示阴影差异程度,较低的指数比较高的指数颜色更暗。

Set Size(设定尺寸)

默认模板Set the size of current to:X= 0.5Y= 0.5Z= 0.5

将 current(当前)实体的尺寸设定为:X= 0.5Y= 0.5Z= 0.5

详细说明

将指定实体的尺寸设定为三个指定的值。

其它参数示例gettablenum(“mytable”,5,6)get(spatialsx(item))+44

应用背景

567

Page 568: Flexsim handbook

Flexsim3.0 用户手册

用来设定一个实体的尺寸。

常在动态改变一个实体的尺寸以使仿真的视觉效果更真实时采用。

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(增加标签)”命令创

建。)

详细说明

将指定实体上具有指定名称的标签递增指定的值。

如果此标签名不存在,此功能不执行任何操作。

使用负数可实现标签递减。

其它参数示例currentcenterobject(current,3)5gettablenum(“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 形状

形状序号可以在“导入媒体文件”下的工具箱中找到。每个导入的形状或图像都有一个号码来代

表其形状序号。

568

Page 569: Flexsim handbook

下拉菜单

如果需要用此函数改变实体的形状,而要改变成的 3D 形状还没有在“预先导入 3D 图形图像 ”

中,就必须首先添加这些形状或图像。

其它参数示例inobject(current,1)outobject(current,2)getshapeindex(“fs3d//Transporter.3ds”)getshapeindex(“C://Program Files//Flexsim//fs3d//chairs.3DS”)

应用背景

用来动态地改变一个实体的形状。

资源变为可用

概述:在一个分配器的下游资源变为可用时触发此触发器。如果函数返回一个 0值,分配器将执行其

自身的分配逻辑。如果此函数返回一个 1值,分配器将不进行任何操作,并认为所有的分配逻

辑已经被此触发器采用 movetasksequence()和 dispatchtasksequence()命令完成了。

存取变量:current: 当前实体

port:分配器的输出端口

resource:变成可用状态的下游资源

569

Page 570: Flexsim handbook

Flexsim3.0 用户手册

Do Nothing(无操作):此选取选项不执行任何逻辑,返回 0。

时间下拉菜单

时间下拉菜单注释:下面给出的下拉菜单选项用在多个下拉菜单中,包括:周期时间、预置时间、MTBF、MTTR、装

载/卸载、最小停留时间和时间下拉菜单。由于不同的上下文背景,下面给出的一些选项并没有全部包含

在所有上面提及的下拉菜单中。

570

Page 571: Flexsim handbook

下拉菜单

关于随机分布下拉菜单选项的注释:这些下拉菜单中的许多选取选项是随机分布,这里不做具体说

明。参见 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 节点指针)来获取所涉及的临时实体。

571

Page 572: Flexsim handbook

Flexsim3.0 用户手册

详细说明

每种 case 代表一种指定的临时实类型,其返回值代表返回时间。采用正确的表述语句可以添加

或移除附加分支。

其它参数示例

返回值可以是基于表或标签的。对于那种临时实体类型,不必每次都是某个特定端口。

返回值可以使用随机分布,如均匀分布。

应用背景

用来根据临时实体类型,将不同类型的临时实体发送到不同的端口。

By Label (direct)(按标签(直接))

默认模板Return a constant time matching the number assigned to the label on item called “labelname”.

返回一个常值时间,该值与临时实体上的叫做“labelname”标签上的数字相吻合。

详细说明

返回指定实体上的标签的值。

确保指定的标签名称正确无误。

确保指定的标签是一个数字标签。

其它参数示例currentinobject(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;

572

Page 573: Flexsim handbook

下拉菜单

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(临时实体)”来获取所涉及的临时实体。

详细说明

根据标签上存储的数字的情况返回不同的值。

采用正确的表述语句可以添加或移除附加分支。

确保指定的标签名称正确无误。

确保指定的标签是一个数字标签。

其它参数示例currentinobject(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。

573

Page 574: Flexsim handbook

Flexsim3.0 用户手册

详细说明

根据一个表中存储的数值返回一个时间。

确保指定的表的名称正确无误。

确保表中指定的单元格包含数值数据。

其它参数示例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.

574

Page 575: Flexsim handbook

下拉菜单

使用全局表“defaulttable”中指定的时间。行号根据先前的临时实体类型指定,列号根据当前临

时实体类型指定。

详细说明

在一个指定了从/到预置时间矩阵的表中进行查询,此表取决于先前的和当前的临时实体类型。

确保表的名称正确无误。

应用背景

在预置时间取决于当前临时实体和先前临时实体的类型时,用来设定预置时间。

By Percentage (inputs)(按百分比(输入))

默认模板Time is defined by the following discrete percentages:Percent Time--------- -----10 155 235 30 40 50 60 70 80 90 10Times 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 155 235 30 40 50 60 70 80 90 10

时间基于上述的百分比随机确定。

使用此选项可以只定义到 10%。

用不到的值定义为 0%,最好不要删除行。

所有百分比的和必须是 100%。

575

Page 576: Flexsim handbook

Flexsim3.0 用户手册

详细说明

创建一个 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);

576

Page 577: Flexsim handbook

下拉菜单

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”)

参数可以是标签、随机分布和表查询等。

应用背景

577

Page 578: Flexsim handbook

Flexsim3.0 用户手册

如果数据不能和任一随机分布很好地拟合,但有些时候数据看似某种随机分布,有些时候数据

又看似另一种随机分布,这时,就使用此选项。

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.

如果希望实现用户自定义的货架释放临时实体的策略,就使用此选项。

578

Page 579: Flexsim handbook

下拉菜单

装载 /卸载时间

概述:装载时间:返回装载时间的值。在装载时间结束时,临时实体被移动到任务执行器中。

卸载时间:返回卸载时间的值。在卸载时间结束时,临时实体被移入站点中。

存取变量:current:当前实体

tem:所涉及的临时实体

station :装载或卸载临时实体的处所

参见时间下拉菜单,可获得选取选项的列表。

579

Page 580: Flexsim handbook

Flexsim3.0 用户手册

最小停留时间

概述:此函数返回每个临时实体必须在货架里停留的最小时间。当临时实体进入货架时,就执行此函

数,并返回创建一个事件。当所要求的时间结束后,货架就释放掉此临时实体。如果此函数返

回-1值,那么货架就不会创建事件来释放临时实体,则必须明确地采用 releaseitem()命令来释

放此临时实体。如果需要执行用户自己的货架释放策略,就可以使用这个函数。

存取变量:current :当前实体

tem:所涉及的临时实体

port:临时实体进入通过的端口

参见时间下拉菜单,可获得选取选项的列表。

580

Page 581: Flexsim handbook

下拉菜单

预置时间

概述:此函数返回执行处理的实体的预置时间。

存取变量:current :当前实体

tem:涉及的临时实体

port:临时实体进入通过的端口

参见时 时间下拉菜单 ,可获得选取选项的列表。

581

Page 582: Flexsim handbook

Flexsim3.0 用户手册

时间下拉菜单(时间间隔达到用法)

概述:返回创建临时实体之间的秒数。

存取变量:current :当前实体

参见时间下拉菜单,可获得选取选项的列表。

582

Page 583: Flexsim handbook

下拉菜单

周期时间(处理时间)

概述:此函数返回执行处理的实体的处理时间。

存取变量:current :当前实体

tem:涉及的临时实体

参见时间下拉菜单,可获得选取选项的列表。

583

Page 584: Flexsim handbook

Flexsim3.0 用户手册

固定资源

停机分配器(选取操作员)

概述:此函数返回一个分配器(或操作员)的引用,停下操作员的请求需求将发送给它。返回值必须

为双精度型,因为此函数强制返回一个双精度值。

存取变量:current:当前实体

Specific Port(指定端口)

默认模板The object connected to center port number 1.

连接到中间端口 1 的实体。

详细说明

返回一个数字引用给以特定端口号相连的分配器(或操作员)。这将把一个操作员请求发送给

那个分配器(或操作员)。

其它参数示例

584

Page 585: Flexsim handbook

下拉菜单

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:当前实体

585

Page 586: Flexsim handbook

Flexsim3.0 用户手册

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 单位流量。

详细说明

使用触发器可以让每个临时实体代表多个单位流量。这将影响储液灌触发其液面上升/下降经过

位高标记的触发器。在流入和流出速率中使用同样的临时实体比率来处理流量单位。

在下一次打开端口允许临时实体进入/离开之前返回的时间,由这样的计算确定,每个临时实

体所代表的单位数量除以指定的允许进入或离开的流量单位数,乘以指定的时间长度。

586

Page 587: Flexsim handbook

下拉菜单

其它参数示例3uniform(4,7)50getlabelnum(item, "volume")

应用背景

用来使得一个临时实体代表一定容量的体积(流量单位)。

放置到列

概述:

587

Page 588: Flexsim handbook

Flexsim3.0 用户手册

此函数返回要放置进入的临时实体的货架列号。列从离货架原点最近的列开始为 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 标签的确存在,且最初的随机列中没有满(列中的容量小于该列的货格数乘以

每个货格允许放置的临时实 体个数),将销毁它并返回它存储的值,这样此代码将会在两次

调用时返回一个相同的值。

588

Page 589: Flexsim handbook

下拉菜单

如果初始的随机列已满,则将查看每个序号较高的列,然后查看每个序号较低的列,直到发现

一个未满的列。

如果所有列都已满,则放置在第 1 列。

其它参数示例3gettablenum(“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。

其它参数示例3gettablenum(“mytable”,3,4)

应用背景

用来将临时实体放置到第一个可用列,其中每个货格只能容纳给定数量的临时实体。

By Itemtype(按实体类型)

默认模板Place it in the bay corresponding to the itemtype of the flowitem.

放置临时实体到与其类型相对应的列中。

详细说明

返回实体类型作为放置临时实体的列号。

589

Page 590: Flexsim handbook

Flexsim3.0 用户手册

如果实体类型大于列数,就放在最后一列。

如果实体类型小于列数,就放置在第一列。

应用背景

当需要将特定类型的临时实体放置到特定列,并且是类型号和列号直接对应时,使用此选项。

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”

应用背景

用来根据每个临时实体的标签指定要放置到的列。

590

Page 591: Flexsim handbook

下拉菜单

放置到层

概述:此函数返回将临时实体放置到的货架层数。层从离货架原点最近的层开始编为 1号,沿着远离

原点的方向递增层号。

存取变量:current:当前实体

item:所涉及的临时实体

Random(随机放置)

默认模板Place it in a random level (cells are assumed to have unlimited capacity).

随机地放置到某层(假设货格容量无限)

详细说明

此代码要被判断两次,一次是在任务执行器需要知道偏移量时,另一次是当临时实体实际进入

时。

创建一个叫做 curbay 的标签如果它不存在,并将它设定为 1到列数之间的一个随机数。

591

Page 592: Flexsim handbook

Flexsim3.0 用户手册

如果 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层。

其它参数示例3gettablenum(“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.

592

Page 593: Flexsim handbook

下拉菜单

放置到第一个可用的层。每个货格一次最多可以容纳 1 个临时实体。所有的货格都已满,就放置

在第一层。

详细说明

此代码要被判断两次,一次是在任务执行器需要知道偏移量时,另一次是当临时实体实际进入

时。

返回第一个未满的层(层的容量小于层中货格数乘以每个货格允许的临时实体的容量)。

如果所有层都已满,就返回 1。

其它参数示例3gettablenum(“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 个临时实体。

593

Page 594: Flexsim handbook

Flexsim3.0 用户手册

详细说明

根据指定临时实体上的标签的值,将临时实体放置到相应的层中。

如果初始的随机层已满,则它将查看每个较高序号的层,然后是每个较低序号的层,直到找到

一个未满的层。

如果每层都已满,则放置到第一层。

确保指定的标签名称正确无误。

确保指定的标签是数值标签。

其它参数示例“mylabel”

应用背景

用来根据每个临时实体上的标签的值,放置到相应的层中。

594

Page 595: Flexsim handbook

下拉菜单

处理分配器(选取操作员)

概述:此函数返回一个引用,是操作员请求要发送给的分配器(操作员)。返回值必须是双精度型,

因为此函数强制返回双精度型。

存取变量: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 发送,等等。

595

Page 596: Flexsim handbook

Flexsim3.0 用户手册

应用背景

用来从与每个临时实体类型的值相吻合的序号的端口发送操作员请求。

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;

可以根据一个表或标签来分配端口号。并不需每次都为那种临时实体类型指定同一个特定的端

口。

分配的端口号也可以使用随机分布,如均匀分布。

应用背景

用来根据临时实体的不同类型将操作员请求发送到相应端口。

596

Page 597: Flexsim handbook

下拉菜单

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”

的标签的值来确定。

详细说明

根据指定实体上标签的数值,将运输机请求发送至相应的端口。

确保指定的标签名称正确无误。

确保指定的标签是数值标签。

其它参数示例currentinobject(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;

注释:

597

Page 598: Flexsim handbook

Flexsim3.0 用户手册

每种 case都必须是一个有效的临时实体类型编号。

可根据需要添加其他 case 分支。

用“current(当前)”来获取当前涉及的实体。

用“item(临时实体)”来获取所涉及的临时实体。

详细说明

每种 case 代表那个标签上的一个值,用所示的语句来指定端口号。

如果标签不包含指定的值,则运行默认的表述声明,这将把此种情况分配为 1号端口。

使用正确的表述语句可以添加或移除附加的 case 分支。

确保指定的标签名称正确无误。

确保指定的标签是数值标签。

其它参数示例currentinobject(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

598

Page 599: Flexsim handbook

下拉菜单

应用背景

在请求预置操作员和处理操作员的请求所通过的端口不同的情况下使用。

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(指定端口)

599

Page 600: Flexsim handbook

Flexsim3.0 用户手册

默认模板Pull from port number 1.

从端口 1 拉入。

详细说明

返回一个要从中拉入临时实体的指定的端口号。如果那个端口不可用,将一直等待直到可用。

其它参数示例3nrip(current)

应用背景

用来从某指定端口拉入临时实体,或者用 nrip(current)从最后一个端口拉入。

Any Port(任意端口)

默认模板Pull from any port.

从任意端口拉入。

详细说明

返回 0,这使得从第一个可用的端口拉入。

应用背景

用来在所连接的端口可用的情况下,按顺序从端口拉入。如果没有可用的端口,则从第一个成

为可用状态的端口拉入。

Round Robin(轮循模式)

默认模板Pull from ports in round robin fashion (numerical succession).

按轮循模式(数字轮序)从各端口拉入。

详细说明

从第一个输入端口开始,等待端口变为可用状态,从此端口拉入临时实体,然后等待下一个端

口。当它从最后一个端口拉入临时实体后,又开始等待第一个端口变为可用状态,如此继续轮

循。

应用背景

600

Page 601: Flexsim handbook

下拉菜单

用来从每个端口拉入一个临时实体,所有拉入请求在上游实体之间均匀分配。

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.

从准备好的、排队最长的端口拉入。

详细说明

检查每个相连的可用的上游实体(其与当前实体输入端口相连的输出端口是打开的),并从等

待排队最长的实体中拉入。

601

Page 602: Flexsim handbook

Flexsim3.0 用户手册

应用背景

用来从相对其它可用的上游实体,临时实体排队等待最多的、可用的上游实体中拉入。

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

602

Page 603: Flexsim handbook

下拉菜单

55 235 30 40 50 60 70 80 90 10Port 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 155 235 30 40 50 60 70 80 90 10

端口基于上述定义的百分比随机选择。

使用此选项可以只定义到 10%。

用不到的端口定义为 0%,最好不要删除行。

所有百分比的和必须是 100%。

详细说明

创建一个 0~100之间的随机数。如果此数在前面的百分比(如果是第一种情况就是 0)与指定

的百分比之间,就从指定的端口拉入。

如果百分比加起来不等于 100%,就得不到期望的结果,也可能导致模型停止运行。

其它参数示例gettablenum(“tablename”,2,3)getlabelnum(current,“labelname”)getitemtype(item)

应用背景

用来定义从给定的端口拉入给定的百分比数量的临时实体。

此选项可用来根据表、标签和实体类型来从给定的端口拉入给定百分比数量的临时实体。

By Percentage (table)(按百分比(表))

603

Page 604: Flexsim handbook

Flexsim3.0 用户手册

默认模板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 拉入。

详细说明

如果条件为真,就从某给定端口拉入,否则就从另一端口拉入。

604

Page 605: Flexsim handbook

下拉菜单

“真”被一个诸如 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”)

应用背景

用来查看一个表,以确定从哪个输出端口拉入给定数量的临时实体。

605

Page 606: Flexsim handbook

Flexsim3.0 用户手册

拉入条件

概述:这是一个布尔逻辑表达式,返回真(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 的临时实体。

详细说明

将每个临时实体的类型与指定类型比较,如果相同就返回真,否则返回假。

606

Page 607: Flexsim handbook

下拉菜单

其它参数示例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.

607

Page 608: Flexsim handbook

Flexsim3.0 用户手册

-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之外的其它端口拉入。

一定要记住调用拉入条件的时间。如果试图使用此功能动态地改变表或标签,除非仔细计划什

么时候改变它们、什么时候触发函数,否则很可能得到预想不到的结果。

608

Page 609: Flexsim handbook

下拉菜单

应用背景

在拉入逻辑取决于正在被拉动的上游实体时使用。各种 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之间的临时实体。

详细说明

比较每个临时实体的类型,如果临时实体类型比下限大而必上限小,就返回真。

如果先指定一个很大的数值,将总是返回假,且永远不会拉入。

其它参数示例8getlabelnum(current,“mylabel”)gettablenum(“mytable”,1,3)

一定要记住调用拉入条件的时间。如果试图使用此功能动态地改变表或标签,除非仔细计划什

么时候改变它们,什么时候触发函数,否则很可能得到预想不到的结果。

应用背景

在只拉入某实体类型范围限制内的临时实体的情况下使用。

609

Page 610: Flexsim handbook

Flexsim3.0 用户手册

Array of Itemtypes(类型数组)

默认模板Only pull flowitems with itemtypes numbers listed in the following array {2,4,8}.

只拉入数组{2,4,8}所列出的实体类型的临时实体。

详细说明

将临时实体的类型与数组中的每个实体类型比较,如果与数组中的某一个相符,就返回真,并

将此临时实体拉入。

其它参数示例32, 42, 54, 89

应用背景

用来拉入特定类型的临时实体

上升 /下降通过位高标记触发器

概述:当储液灌中的液面上升或者下降通过用户定义的高、中、低液位标记的时候,执行此代码。

存取变量:current:当前实体

item :涉及的临时实体

Do Nothing(无操作)

610

Page 611: Flexsim handbook

下拉菜单

默认模板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)

应用背景

611

Page 612: Flexsim handbook

Flexsim3.0 用户手册

用来根据特定条件控制实体之间的临时实体流。

常用来关闭一个实体的输入端口,然后在另一个下游实体中重新打开这些端口。

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)”.

612

Page 613: Flexsim handbook

下拉菜单

发送一条消息给实体 centerobject(current,1)。用参数“msgsendingobject”传递当前实体的引

用,用参数“msgparam(1)”传递 tonum(item) 的值,用参数“msgparam(2)”传递值 2 ,用参数

“msgparam(3)”传递值 3 。

详细说明

在运行任何其它代码之前,立即执行指定实体的消息触发器中的代码。这三个指定的值可以从

消息触发器中引用。当需要了解某些特定的数字时,如端口号、 实体类型或容量,就需要用

到此命令。

其它参数示例currentoutobject(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 。

详细说明

在消息触发函数中,在指定的仿真时间之后执行这些代码。

其它参数示例currentoutobject(current,2)inobject(current,1)node(“/Processor1”,model())content(current)

应用背景

613

Page 614: Flexsim handbook

Flexsim3.0 用户手册

用来在一定延迟之后执行一段代码

经常用来重复地从实体到自身发送延迟消息,以在每个 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,则在执行其它任何代码之前,立即执行消息触发器的代码。这三个指

定的值可以从消息触发器中引用。当需要了解某些特定的数字时,如端口号、实体类型或容量,

就需要用到此命令。

其它参数示例currentoutobject(current,2)inobject(current,1)node(“/Processor1”,model())content(current)

应用背景

仅在条件表达式为真的情况下,用来在一段给定的时间延迟期后运行一段代码。

614

Page 615: Flexsim handbook

下拉菜单

发送请求

概述:当一个临时实体到达输送机的一个输出位置时,分类输送机将对此域段进行判断。它将返回一

个真或假的结果,以确定临时实体是否要从各自的端口释放掉。

存取变量:Current:当前实体

item :已准备好被发送的实体

port :临时实体所到达的输出端口

Always Send(总是发送)

默认模板Always send.

总是发送

详细说明

总是返回 1,意味着将会把临时实体从所要送到的输出端口释放。

应用背景

如果不关心是哪一种类型的临时实体及从哪个输出端口离开,可使用此选项。如刚好希望从第

一个可用的端口离开,这就和送往端口下拉菜单中的第一个可用端口选项相类似了。

615

Page 616: Flexsim handbook

Flexsim3.0 用户手册

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;

此例子中,如果一个临时实体是两类之中的一种,就将发送它到一个给定的端口。

应用背景

此选项可以像“按临时实体类型”选项一样使用,只是这里还可以为一个端口将若干类临时实体

分批。它还可用来将在那点之前尚未离开的所有临时实体从最后一个输出端口发送出去。

616

Page 617: Flexsim handbook

下拉菜单

送往端口

概述:在每个临时实体准备好往下一个实体发送的时候,都要对此域段进行一次判断。在一个处理器

实体中,临时实体在它的处理时间结束时准备好被发送。在一个暂存区中,临时实体在批量累

积完成并已被释放后准备好被发送。

送往端口表达式必须返回一个有效的输出端口号。会打开输出端口,并把此端口号分 配给此临

时实体。然后,当端口连接变为准备好可用(输出端口和相连的下游实体的输入端口打开)时,

将临时实体推进或拉入。在特定的情况下,当送往端口表达 式返回 0 时,所有 的输出端口都被

打开,临时实体可能从第一个准备好的端口离开。如果此实体配置了“连续判断送往端口”,则

会在每次一个下游实体变为准备好接收临时实体的时候对此域段进行判断。如果此函数返回一

个-1值,则根本不会释放此临时实体,将会在以后采用 releaseitem()命令释放它,或者用

moveobject命令将它移出。

617

Page 618: Flexsim handbook

Flexsim3.0 用户手册

变量操作: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(指定端口)

默认模板

618

Page 619: Flexsim handbook

下拉菜单

Send to port 1.

发送到端口 1。

详细说明

返回将要把临时实体发送到的特定的端口号。如果那个端口阻塞,则一直等待,直到它变为可

用。

其它参数示例3nrop(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.

发送到可用的、与等待队列最短的下游实体相对应的端口。

详细说明

查看每个相连的可用下游实体(它的输入端口连接到当前实体相应的输出端口,且是打开的),

并发送到包含的当前数量最少的那个实体。

应用背景

用来将临时实体发送到可用的、与其它可用下游实体相比临时实体排队最短的那个下游实体中。

619

Page 620: Flexsim handbook

Flexsim3.0 用户手册

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.

将临时实体发送到一个随机的可用端口。如果没有端口可用,则发送到第一个变为可用的端口。

详细说明

在可用的输出端口中,它随机地选择一个作为返回。

应用背景

用来发送到一个随机的、可用的输出端口。

620

Page 621: Flexsim handbook

下拉菜单

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 155 235 30 4

621

Page 622: Flexsim handbook

Flexsim3.0 用户手册

0 50 60 70 80 90 10Port 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 155 235 30 40 50 60 70 80 90 10

端口基于上述定义的百分比随机选择。

使用此选项可以只定义到 10%。

用不到的端口定义为 0%,最好不要删除行。

所有百分比的和必须是 100%。

详细说明

创建一个 0~100之间的随机数。如果此数在前一个百分数(如果是第一种情况,就是 0)和指

定的百分数之间,就发送到指定的端口。

如果百分比加起来不等于 100%,就得不到期望的结果,也可能导致模型停止运行。

其它参数示例gettablenum(“tablename”,2,3)getlabelnum(current,“labelname”)getitemtype(item)

应用背景

用来定义将一定百分比的临时实体发送到一定序号的端口。

此选项可用来根据表、标签和实体类型将一定百分比的临时实体发送到特定的端口。

By Percentage (table)(按百分比(表))

默认模板

622

Page 623: Flexsim handbook

下拉菜单

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,等等。

应用背景

用来将特定类型的临时实体发送到与类型号相同的各个输出端口。

623

Page 624: Flexsim handbook

Flexsim3.0 用户手册

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)(通过标签(直接))

默认模板

624

Page 625: Flexsim handbook

下拉菜单

Send the flowitem to a port number matching the number assigned to the label on item called “labelname”.

发送临时实体到一个端口,此端口号与临时实体 item 上名为“labelname” 的标签所赋的数值

相同。

详细说明

返回指定实体上的标签的值。如果那个端口阻塞,就等待直到可用时发送临时实体。

确保指定的标签名称正确无误。

确保指定的标签是数值标签。

其它参数示例currentinobject(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(当前)”来获取当前实体。

625

Page 626: Flexsim handbook

Flexsim3.0 用户手册

使用“item(临时实体)”获得相关临时实体。

详细说明

根据存储在一个数值标签中的不同情况返回不同的值。

使用正确的表述语句可以添加或移除附加的情况。

确保指定的标签名称正确无误。

确保指定的标签是数值标签

其它参数示例currentinobject(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 将返回“真”。

626

Page 627: Flexsim handbook

下拉菜单

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.

627

Page 628: Flexsim handbook

Flexsim3.0 用户手册

将临时实体发送到特定的端口,此端口与一个实体相连,而那个实体包含有与涉及的临时实体

类型相同的临时实体。

详细说明

如果某下游临时实体包含一个临时实体,它与所涉及的临时实体类型相同,则将返回与那个实

体相连的端口号,并将临时实体发送到那个端口。如果那个端口阻塞,将等待直到它变为可用

再发送临时实体。如果找不到与之相同的临时实体类型,将把临时实体发送到第一个可用的实

体,即使那个实体中已经有一个不同类型的临时实体。

应用背景

下游的机器重复处理同一类型的临时实体时效率会很高,在此情况下,用来将具有与那种实体

类型相同的临时实体发送给此下游实体。

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.

用来按照循环轮回的逻辑在给定的多个输出端口之间分配给定数量的临时实体。

628

Page 629: Flexsim handbook

下拉菜单

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.

不释放任何一个临时实体。

如果已经在实体上编写了其它代码来明确地规定如何将临时实体移动到下一站,则可选择此选

项。

详细说明

629

Page 630: Flexsim handbook

Flexsim3.0 用户手册

返回-1值,将导致固定实体不释放临时实体。

应用背景

如果在此实体上有明确地处理临时实体移动到下一站的逻辑,就使用此选项。

630

Page 631: Flexsim handbook

下拉菜单

分解数量(分解 /拆盘数量)

概述:此函数返回从当前实体分解或拆盘出的临时实体的数量。

存取变量:current :当前实体

item :涉及的临时实体,这是将要被分割或的临时实体。

Specific Number(指定数量)

默认模板Split (or UnPack) quantity of 1.

分解(或拆盘)数量为 1。

详细说明

如果采用分解模式,且指定的数量大于 1,将创建多个临时实体的复制品。例如,如果分解数

量为 5,则会创建 4 个原始临时实体的复制品,然后将它们和原始临时实体发送到指定的输出

端口。

如果采用分解模式,且指定的数量是 1,则分解器完全像是一个包含有一个临时实体的处理器

一样。不会生成复制品。

如果拆盘一定数量,则从容器实体中拆盘出指定数量的临时实体。拆盘操作从最后一个装盘进

去的临时实体开始。

如果要拆盘的数量大于或等于装盘的临时实体数量,将会从最后一个装盘进去的临时实体开始,

拆盘出所有临时实体。

其它参数示例8getlabelnum(current,“mylabel”)gettablenum(“mytable”,1,3)duniform(1,3,1)

应用背景

用来从装盘的临时实体中拆盘出某个变量定义的数量的临时实体,或者用来将一个临时实体分

解为多个临时实体。

Entire Contents(全部容量)

631

Page 632: Flexsim handbook

Flexsim3.0 用户手册

默认模板UnPack the entire content of the flowitem.

拆盘出全部的临时实体。

详细说明

返回 content(item),它是装盘到此容器中的临时实体的数量。

如果查看到是分解方式,而不是去托盘模式,将根据装盘到此容器中的临时实体的数量,创建

此临时实体的复本及其包含的实体。

此下拉菜单选项如同“指定数量”一样,它返回 content(item)(所涉及的临时实体的容量)

应用背景

用来拆盘出全部数量的临时实体。

632

Page 633: Flexsim handbook

下拉菜单

运输分配器(按下列请求运输工具)

概述:此函数返回一个分配器(或运输工具)的引用,运输工具请求将发送给它。返回值必须换算成

一个数字,因为此函数强制返回一个双精度值。

存取变量:current:当前实体

item:将要被运输的临时实体

Specific Port(指定端口)

默认模板The object connected to center port number 1.

连接到中间端口 1 的实体。

详细说明

返回一个连接到指定端口号的分配器(或运输工具)的数字引用。这将发送一个运输工具请求

给那个分配器(或运输工具)。

其它参数示例

duniform(1,nrcp(current)) :返回一个随机中间端口号3

应用背景

在需要通过特定或随机的端口发送请求的情况下使用。更多用于实体上只有一个中间端口连接

的情况。

633

Page 634: Flexsim handbook

Flexsim3.0 用户手册

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 分支。

634

Page 635: Flexsim handbook

下拉菜单

其它参数示例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”的标签的值,调用连接到相应端口上的运输工具。

详细说明

根据指定实体上的一个标签的值,将运输工具请求发送到相应的端口。

确保指定的标签名称正确无误。

确保指定的标签是数值标签。

其它参数示例currentinobject(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.

635

Page 636: Flexsim handbook

Flexsim3.0 用户手册

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。

使用正确的表述语句可以添加或移除附加的情况。

确保指定的标签名称正确无误。

确保指定的标签是数值标签。

其它参数示例currentinobject(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 列中存储的中间端口号所连接的实体。

详细说明

636

Page 637: Flexsim handbook

下拉菜单

根据一个表中存储的端口号来请求一个运输工具。

确保指定的表名称正确无误。

确保那个表中指定的单元格包含数值数据。

其它参数示例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.

允许临时实体在实体间的网络节点路径上行进。

应用背景

637

Page 638: Flexsim handbook

Flexsim3.0 用户手册

用来模拟特定类型的临时实体沿路径的运动,如车道交通、AGV,或者在游乐园中被处理的人。

638

Page 639: Flexsim handbook

下拉菜单

临时实体速度(速度)

概述:当每个临时实体进入时,对此参数进行一次判断。返回临时实体的速度。

存取变量:current:当前实体

item:准备要发送的临时实体

临时实体速度下拉菜单采用与 时间下拉菜单一样的选项,只不过返回值被解释为速度而不是

时间。

639

Page 640: Flexsim handbook

Flexsim3.0 用户手册

可移动资源

中断(条件中断响应)

概述:定义此实体在“中断”当前激活任务序列的过程中可以接受哪种类型的任务序列。一个标准的任

务序列由行进 - 装载 - 条件中断响应 - 行进 - 卸载任务序列组成。只有当任务执行器执行 “中断”

任务时才对此域段进行判断。

当任务执行器接收到一个“中断”任务时,这就是一个通知,让它把当前激活的任务序列放到它

的任务队列中,去查看一下是否有其它任务序列需要在完成当前任务序列之前先来执行。这样

可以实现一些功能,如,可以在卸载之前装载多个临时实体。在这种情况下,任务执行器首先

要进行检查以确定它在当前可以执行“多任务”。这是通过询问 “我的当前数量是否小于我的容量”

来完成的。如果检查结果是真,则它将会执行这段代码,找到要在中断后转向新的任务序列。如

果此代码返回空,它就不中断。如果返回一个有效的任务序列数字指针,则它将中断并转向新

的任务序列而开始执行它。完成新任务之后,它将会返回到原来的任务序列。

存取变量:tasksequence:正在检查的任务序列的引用

current:当前实体

New Tasksequences Only (只执行新任务)

默认模板Take only new tasksequences (no partially completed sequences)

只执行新任务(不执行已部分完成的任务序列)

详细说明

在当前实体的任务序列的队列中,第一个包含未完成任务的任务序列将变为激活任务序列,而

当前激活任务序列将被推回到任务序列队列中。

如果此实体的任务序列队列中没有包含有任何未完成任务的任务序列,则返回空,并且在中断

任务期间不做任何操作。

应用背景

与具有装载容量大于 1 的任务执行器一起使用来装载多个临时实体。

640

Page 641: Flexsim handbook

下拉菜单

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

应用背景

641

Page 642: Flexsim handbook

Flexsim3.0 用户手册

如果其它临时实体都包含一个特定标签,设定为特定值,则使用此选项来装载多个临时实体。

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. (i.e. Travel/Load/Break/Travel/Unload)

只执行这样的任务序列,这些任务序列运输与此实体第一个捡取的临时实体类型相同的临时实

体。此选项假设前提条件是任务序列是标准的任务序列(行进/装载/中断/行进/卸载)

详细说明

在当前实体的任务序列队列中,第一个既包含未完成任务,又涉及一个与当前实体的第一个临

时实体的类型相同的临时实体的任务序列,将成为激活任务序列,而当前激活任务序列将被推

回到任务序列队列中。

如果此实体的任务序列队列中,不存在既没有包含有未完成任务,所涉及的临时实体又不同于

当前实体中的第一个临时实体的类型的任务序列,则返回空,那么在中断任务期间不做任何操

作。

应用背景

用来装载与第一个装载的临时实体类型相同的多个临时实体。

642

Page 643: Flexsim handbook

下拉菜单

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. (i.e. Travel/Load/Break/Travel/Unload)

只执行满足这样条件的任务序列,该任务序列用来运输那些目的地与此实体所捡取的第一个临

时实体的目的地相同的临时实体。此选项假设任务序列是标准的任务序列(行进/装载/中断/行

进/卸载)

详细说明

在当前实体的任务序列队列中,第一个包含未完成任务,且涉及的一个卸载站点与当前涉及的

卸载站点相同的任务序列,将会成为激活任务序列,而当前激活任务序列将被推回到任务序列

队列中。

如果此实体的任务序列队列中没有包含有未完成任务且其相关临时实体类型与当前实体中的第

一个临时实体目的地不相同的任务序列,则返回空,在中断期间无任何操作。

应用背景

用来装载具有相同目的地(一个下游实体)的多个临时实体。

传递给

概述:此函数在分配器接收到一个任务序列时被触发,它将返回一个输出端口,分配器将通过此端口

传递该任务序列。如果返回 0,则此任务序列将依照排队策略自动排队,直到它可以被传递给

一个可用的分配器或任务执行器。如果此返回值大于 0,则此任务序列将会立即被传递到返回

的端口。如果返回-1值,则分配器会认为,所有的分配逻辑都已经在“传递给”函数中采用

movetasksequence()和 dispatchtasksequence()命令完成,因此无操作。

存取变量:

643

Page 644: Flexsim handbook

Flexsim3.0 用户手册

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。

详细说明

返回一个与一个任务执行器相连的指定端口号,任务序列将被送往此端口。如果那个任务执行

器不可用,则等待直到它变为可用。

其它参数示例3nrop(current)

应用背景

用来将任务序列发送到一个特定端口,或者在采用 nrop(current) 的情况下发送到最后一个端

口。

Shortest Distance(最短距离)

644

Page 645: Flexsim handbook

下拉菜单

默认模板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”) == 3gettablenum(“mytable”,1,1) != 0

应用背景

用来将任务序列传递给离序列中第一个任务的目的地最近的任务执行器。

Shortest Queue(排队最短)

默认模板Pass to the object whose tasksequence queue is the shortest.

传递给任务序列排队最短的实体。

详细说明

对当前实体的每个输出端口,检查每个下游实体的任务序列队列的长度,并传递给排队等待的

任务序列最少的那个任务执行器。

应用背景

当需要在任务执行器中让任务序列排队时使用,将任务序列传递给目前队列中任务序列累积最

少的那个任务执行器。

645

Page 646: Flexsim handbook

Flexsim3.0 用户手册

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,并返回标签中存储的输出端口号。

分配给忙或闲的任务执行器。

应用背景

用来将任务序列均匀地分配给所有连接到当前实体的输出端口的任务执行器。

646

Page 647: Flexsim handbook

下拉菜单

排队策略

概述:当分配器接收到一个任务序列,且“传递给”函数返回 0,然后,当这个新的任务序列进入分配

器的任务序列队列时,分配器会遍历它的任务序列队列,在每个任务序列上执行同一个函数,

并将其返回值与刚接收到的任务序列的返回值相比较。新的任务序列将按照此函数所返回的值

从高到低进行排列(返回值最高的将被排到任务序列的前面)。

存取变量:tasksequence:任务序列节点的引用

current:当前实体

Sort by Priority(按优先级排序)

默认模板Sort by the priority of the tasksequence.

按任务序列的优先级排序。

详细说明

返回任务序列的优先级。首先传递较高优先级的任务序列。

应用背景

用来确保任务序列按照优先级顺序被分配和执行。

647

Page 648: Flexsim handbook

Flexsim3.0 用户手册

实验

实验结束

概述: 此函数在最后一个场景的最后一次运行结束时执行一次。

存取变量:replication:当前所进行的重复运行的序号

scenario:当前场景的序号

Do Nothing(无操作)

默认模板Do nothing

无操作

详细说明

此函数被调用时不执行任何命令。

应用背景

在此触发器执行期间没有附加逻辑要求时采用此函数。

Display Message(显示消息)

默认模板Display message at end of experiment.

在实验结束的时候显示消息。

详细说明

向输出控制台(视图/输出控制台)写入实验状态的相关信息。

648

Page 649: Flexsim handbook

下拉菜单

应用背景

用来在实验运行过程中观看和跟踪模型状态。

运行结束(每次重复运行结束)

概述: 此函数在每次用户为重复运行定义的仿真时间结束时执行。

存取变量:replication:当前重复运行的序号

scenario:当前场景的序号

Do Nothing无操作

默认模板Do nothing

无操作

详细说明

此函数被调用时不执行任何命令。

应用背景

在此触发器执行期间没有附加逻辑要求时采用此函数。

Display Message(显示消息)

默认模板Display message at the end of each simulation run.

649

Page 650: Flexsim handbook

Flexsim3.0 用户手册

在每次仿真运行结束的时候显示消息。

详细说明

向输出控制台(视图/输出控制台)写入实验状态的相关信息。

应用背景

用来在实验运行过程中观看和跟踪模型状态。

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"));

650

Page 651: Flexsim handbook

下拉菜单

settablenum("IdleTime",replication,scenario,getnodenum(rank(state_profile(Processor1),STATE_IDLE)));

应用背景

用来向表中写入输出条件

场景结束

概述: 此函数在每个场景最后一次重复运行结束时执行。

存取变量:replication:当前重复运行的序号

scenario:当前场景的序号

Do Nothing(无操作)

默认模板Do nothing

无操作

651

Page 652: Flexsim handbook

Flexsim3.0 用户手册

详细说明

此函数被调用时不执行任何命令。

应用背景

在此触发器执行期间没有附加逻辑要求时采用此函数。

Display Message(显示消息)

默认模板Display message at the end of each scenario.

在每个场景结束的时候显示消息。

详细说明

向输出控制台(视图/输出控制台)写入试验状态的相关信息。

应用背景

用来在实验运行过程中观看和跟踪模型状态。

预热结束(预热时间段结束)

概述:此函数在用户为每次重复运行定义的预热时间结束时执行。时间和系统变量都被重置,但是临

时实体仍然待在所在的地方。

存取变量:replication:当前重复运行的序号

scenario:当前场景的序号

652

Page 653: Flexsim handbook

下拉菜单

Do Nothing(无操作)

默认模板Do nothing

无操作

详细说明

此函数被调用时不执行任何命令。

应用背景

在此触发器执行期间没有附加逻辑要求时采用此函数。

Display Message(显示消息)

默认模板Display message at end of warmup period for each run.

在每次仿真运行的预热期结束的时候显示消息。

详细说明

向输出控制台(视图/输出控制台)写入实验状态的相关信息。

应用背景

用来在实验运行过程中观看和跟踪模型状态。

绩效指标

概述:在一个场景的每次重复运行结束时调用此函数,并返回一个绩效指标值作为当前运行的记录。

653

Page 654: Flexsim handbook

Flexsim3.0 用户手册

存取变量:绩效指标函数没有(默认的)存取变量,使用 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” 的实体的最小数量。

654

Page 655: Flexsim handbook

下拉菜单

详细说明

返回模型中给定实体的最小容量统计结果。

其它参数示例"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"

应用背景

655

Page 656: Flexsim handbook

Flexsim3.0 用户手册

用来根据模型中特定实体的最短停留时间进行绩效评价。

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_IDLESTATE_PROCESSING

656

Page 657: Flexsim handbook

下拉菜单

STATE_BUSYSTATE_BLOCKEDSTATE_GENERATINGSTATE_EMPTYSTATE_COLLECTINGSTATE_RELEASINGSTATE_WAITING_FOR_OPERATORSTATE_WAITING_FOR_TRANSPORTSTATE_BREAKDOWNSTATE_SCHEDULEDDOWNSTATE_CONVEYINGSTATE_TRAVEL_EMPTYSTATE_TRAVEL_LOADEDSTATE_OFFSET_TRAVEL_EMPTYSTATE_OFFSET_TRAVEL_LOADEDSTATE_LOADINGSTATE_UNLOADINGSTATE_DOWNSTATE_SETUPSTATE_UTILIZE

实体“Operator1” 处于状态 STATE_IDLE 的总时间。

可用下列的选项:STATE_IDLESTATE_PROCESSINGSTATE_BUSYSTATE_BLOCKEDSTATE_GENERATINGSTATE_EMPTYSTATE_COLLECTINGSTATE_RELEASINGSTATE_WAITING_FOR_OPERATORSTATE_WAITING_FOR_TRANSPORTSTATE_BREAKDOWNSTATE_SCHEDULEDDOWNSTATE_CONVEYINGSTATE_TRAVEL_EMPTYSTATE_TRAVEL_LOADEDSTATE_OFFSET_TRAVEL_EMPTYSTATE_OFFSET_TRAVEL_LOADEDSTATE_LOADINGSTATE_UNLOADINGSTATE_DOWNSTATE_SETUPSTATE_UTILIZE

详细说明

返回实体处于给定状态的时间点总时间百分比。

其它参数示例"Queue6""Processor5"

657

Page 658: Flexsim handbook

Flexsim3.0 用户手册

STATE_LOADINGSTATE_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_IDLESTATE_PROCESSINGSTATE_BUSYSTATE_BLOCKEDSTATE_GENERATINGSTATE_EMPTYSTATE_COLLECTINGSTATE_RELEASINGSTATE_WAITING_FOR_OPERATORSTATE_WAITING_FOR_TRANSPORTSTATE_BREAKDOWNSTATE_SCHEDULEDDOWNSTATE_CONVEYINGSTATE_TRAVEL_EMPTYSTATE_TRAVEL_LOADEDSTATE_OFFSET_TRAVEL_EMPTYSTATE_OFFSET_TRAVEL_LOADEDSTATE_LOADINGSTATE_UNLOADINGSTATE_DOWNSTATE_SETUPSTATE_UTILIZE

实体“Operator1” 处于状态 STATE_IDLE 的时间占总时间的百分比。

可用下列选项:STATE_IDLESTATE_PROCESSINGSTATE_BUSYSTATE_BLOCKEDSTATE_GENERATINGSTATE_EMPTYSTATE_COLLECTINGSTATE_RELEASINGSTATE_WAITING_FOR_OPERATORSTATE_WAITING_FOR_TRANSPORTSTATE_BREAKDOWNSTATE_SCHEDULEDDOWNSTATE_CONVEYINGSTATE_TRAVEL_EMPTYSTATE_TRAVEL_LOADEDSTATE_OFFSET_TRAVEL_EMPTYSTATE_OFFSET_TRAVEL_LOADED

658

Page 659: Flexsim handbook

下拉菜单

STATE_LOADINGSTATE_UNLOADINGSTATE_DOWNSTATE_SETUPSTATE_UTILIZE

详细说明:

返回实体处于给定状态的时间点总时间的百分比。

其它参数示例"Queue6""Processor5"STATE_LOADINGSTATE_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"

应用背景

用来根据模型中指定实体的标签进行绩效评价。

659

Page 660: Flexsim handbook

Flexsim3.0 用户手册

实验开始触发

概述:此函数在实验开始运行时(模型重置之前)执行一次。

存取变量:replication:当前重复运行的序号

scenario:当前场景的序号

Do Nothing(无操作)

默认模板Do nothing

无操作

详细说明

调用此函数时不执行任何命令。

应用背景

660

Page 661: Flexsim handbook

下拉菜单

在此触发器执行期间没有附加逻辑要求时采用此函数。

Display Message(显示消息)

默认模板Display message at start of experiment.

在实验开始的时候显示消息。

详细说明

向输出控制台(视图/输出控制台)写入试验状态的相关信息。

应用背景

用来在实验运行过程中观看和跟踪模型状态。

场景开始触发

概述:此函数在每个新的场景的第一次重复运行开始时执行。

存取变量:replication:当前重复运行的序号

scenario:当前场景的序号

Do Nothing(无操作)

默认模板Do nothing

661

Page 662: Flexsim handbook

Flexsim3.0 用户手册

无操作

详细说明

此函数被调用时不执行任何命令。

应用背景

在此触发器执行期间没有附加逻辑要求时采用此函数。

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)。

详细说明

根据从表中取得的值来设定实体的不同变量的值。

662

Page 663: Flexsim handbook

下拉菜单

其它参数示例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:

663

Page 664: Flexsim handbook

Flexsim3.0 用户手册

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”的全局表中的每一列相一致。

每一列的第一行都有时间表名称,行中每个成员的名称从第二行开始。

在每列的资源名称里,不允许有空格,否则不能正确地加入时间表。

确保指定的已存在的时间表和任务执行器的名称正确无误。

其它参数示例

664

Page 665: Flexsim handbook

下拉菜单

665

Page 666: Flexsim handbook

Flexsim3.0 用户手册

应用背景

用来在不同场景内实验不同的班次。

666

Page 667: Flexsim handbook

下拉菜单

显示效果

表 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值。

667

Page 668: Flexsim handbook

Flexsim3.0 用户手册

其它参数示例curcount + 2 and column number 3 of the table named "ContentTimeTable"

(curcount + 2 和名为“ContentTimeTable”的表的第 3 列)

上面的例子使用第 3 列,也从表“ContentTimeTabl” 的第 3 行开始。

应用背景

如果图形的 x值不是均匀分布,而是代表类似时间这样的值,就使用此选项。

表 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 行开始。

668

Page 669: Flexsim handbook

下拉菜单

文本(文本显示)

概述:此函数与可视化文本实体一起使用,但是现在已经不重要了。现在可视化工具实体可用来显示

文本。

669

Page 670: Flexsim handbook

Flexsim3.0 用户手册

文本代码(文本显示)

概述:可视化工具每次在模型视图视窗中重画显示 3d 文本时,都执行此函数。必须成功地编译后,才

能看到此域段中所作的修改。

存取变量:current:当前实体

Display Text(显示文本)

默认模板Display the following text: “Hello” .

显示后面的文本:“Hello”。

详细说明

显示静态文本。

其它参数示例“Start”

应用背景

用来标注模型片断。

670

Page 671: Flexsim handbook

下拉菜单

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) .

671

Page 672: Flexsim handbook

Flexsim3.0 用户手册

连接文本“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) 的实际输入。

详细说明

显示指定字符串和通过特定实体输入端口接收的临时实体的数量(实体的输入)。

其它参数示例

672

Page 673: Flexsim handbook

下拉菜单

“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 文本显示一个实体的最大数量。

673

Page 674: Flexsim handbook

Flexsim3.0 用户手册

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(显示最长停留时间)

默认模板

674

Page 675: Flexsim handbook

下拉菜单

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_IDLESTATE_PROCESSINGSTATE_BUSY

675

Page 676: Flexsim handbook

Flexsim3.0 用户手册

STATE_BLOCKEDSTATE_GENERATINGSTATE_EMPTYSTATE_COLLECTINGSTATE_RELEASINGSTATE_WAITING_FOR_OPERATORSTATE_WAITING_FOR_TRANSPORTSTATE_BREAKDOWNSTATE_SCHEDULEDDOWNSTATE_CONVEYINGSTATE_TRAVEL_EMPTYSTATE_TRAVEL_LOADEDSTATE_OFFSET_TRAVEL_EMPTYSTATE_OFFSET_TRAVEL_LOADEDSTATE_LOADINGSTATE_UNLOADINGSTATE_DOWNSTATE_SETUPSTATE_UTILIZE

连接文本“Idle percentage for the object is:”和实体 centerobject(current,1) 处于

STATE_IDLE 状态的时间占总时间的百分比。

可以使用下面的选项:STATE_IDLESTATE_PROCESSINGSTATE_BUSYSTATE_BLOCKEDSTATE_GENERATINGSTATE_EMPTYSTATE_COLLECTINGSTATE_RELEASINGSTATE_WAITING_FOR_OPERATORSTATE_WAITING_FOR_TRANSPORTSTATE_BREAKDOWNSTATE_SCHEDULEDDOWNSTATE_CONVEYINGSTATE_TRAVEL_EMPTYSTATE_TRAVEL_LOADEDSTATE_OFFSET_TRAVEL_EMPTYSTATE_OFFSET_TRAVEL_LOADEDSTATE_LOADINGSTATE_UNLOADINGSTATE_DOWNSTATE_SETUPSTATE_UTILIZE

详细说明

显示特定字符串和指定实体处于某给定状态的时间占总时间的百分比。

其它参数示例“Percent processing: ”node(“/Combiner8”,model())See .

676

Page 677: Flexsim handbook

下拉菜单

应用背景

用 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 文本方式显示一个实体的数值标签的值。

677

Page 678: Flexsim handbook

Flexsim3.0 用户手册

678

Page 679: Flexsim handbook

任务序列

Flexsim 任务序列

什么是任务序列?

一个任务序列就是需要一个任务执行器按一定顺序执行的一系列任务,如下图所显示。任务执行器

是指从任务执行器类派生出来的实体,包括操作员、运输机、起重机、堆垛机、机器人、升降机和其它

可移动资源。如果一个实体的参数视窗中包含任务执行器属性分页,那它就是一个任务执行器。

除了是一系列任务之外,每个任务序列还有一个优先级值。优先级定义了相对其它任务序列而言,

执行此任务序列的重要程度。每个任务序列还都有一个先占值,用来定义那个任务序列是否要使其

它正在执行的任务序列中断转而执行它。

自动创建任务序列

固定实体有一种默认机制来创建任务序列,把临时实体移到下一站点。选择固定实体参数的“临时实

体流”分页中的“使用运输机”复选框,就可以使用此默认的功能。处理器也同样有默认的机制来创建

任务序列,用来为预置时间、处理时间和维修时间调用操作员。这可以通过修改处理器、合成器或分

解器的“操作员”分页来完成。每个默认机制都会触发自动创建一个任务序列。

任务序列如何工作

当选择了临时实体流分页中的“使用运输机”复选框后,将创建如下的任务序列。

1. 行进到当前临时实体所在的实体

2. 从那个实体装载临时实体

679

Page 680: Flexsim handbook

Flexsim3.0 用户手册

3. 中断

4. 行进到目的地实体

5. 卸载临时实体到目的地实体

当一个任务执行器执行此任务序列时,将按顺序执行每个任务。上面所示的每个任务都与一种特定

的任务类型相对应。请注意,在上面例子中有两个“行进”类型的任务、一个“装载”类型任务、一个“卸

载”类型任务和一个“中断”类型任务。

行进任务(Travel Task)

“行进”类型任务告诉任务执行器行进到模型中的某个实体。这可以由多种方式完成,取决于模型的

设定。如果任务执行器连接到一个网络,那么此“行进”任务将使其沿着网络行进,到达与目的实体

相连的那个网络节点。如果任务执行器是一个起重机实体,那么它将会升高到一个用户定义的高度

然后行进到目标实体的 x/y位置处。这样,一个行进任务可以代表多个类型的事件,这取决于模型

的设定,也取决于使用此任务的实体的类型。然而有一点请注意,所有行进任务的相同之处就是它

们在模型中都有某个它们试图到达的目的地实体。

装载和卸载任务(Load and Unload Tasks)

“装载”和“卸载”类型任务告诉任务执行器从一个站点装载一个临时实体,或将一个临时实体卸载到

一个站点。这通常会涉及到需要行进一段偏移距离,目的是在正确的位置捡取或放下临时实体,同

时在移动临时实体之前完成用户定义的装载/卸载时间。装载/卸载时间的处理对于所有任务执行器

都是一样的,而偏移行进则因任务执行器的类型不同而不同。例如,一个运输机,将会在将货叉抬

升到捡取/放下的高度同时行进到捡取/放下的位置;而一个机器人将转动到需要捡取/放下临时实体

的位置。参见偏移行进可获得更多详细信息。

中断任务(Break Task)

“中断”类型任务告诉任务执行器去查看是否有它可以 “中断”转而进入的其它任务序列。例如,如果

在同一个位置范围内有两个临时实体等待被运输机装载,而运输机确实可以装载两个或更多临时

实体,那么它有两个任务序列要执行它。这两个任务序列都和上面提到的任务序列相同。其中一个

是捡取第一个临时实体的激活任务序列,另一个任务序列放在它的任务序列队列中,等待运输机

一旦完成激活任务就来执行。中断任务允许运输机在完成装载第一个临时实体后停下第一个任务序

列,并开始执行第二个任务序列,这就要行进到第二个临时实体的站点并装载第二个临时实体。如

果任务序列中不包含中断任务,则任务执行器必须全部完成第一个任务序列,先卸载第一个临时

实体后才能去装载第二个临时实体。

680

Page 681: Flexsim handbook

操作员任务序列(Operator Task Sequences)这里是自动创建任务序列的又一个示例。处理器实体创建此任务序列用来请求一个操作员来处理站

点工作。任务序列描述如下:

1. 行进到处理站点

2. 被使用,直到处理站点释放它

和前面的例子一样,第一个任务告诉任务执行器行进到站点。第二个任务是一个新的任务类型,在

前面的例子中没有提到。这是一个“使用(Utilize)”任务类型,它告诉任务执行器进入给定的状态,

如“Utilized(被使用)” 或“Processing(处理中)”,然后等待直到从此站点被释放。调用

freeoperators()命令可释放操作员。由于处理器自动创建此任务序列,它也自动地处理释放操作员

事件。

注释:创建一个操作员任务序列并不是完全如上面所描述的那样。在实际中,会添加更多的任务。

但为了简化起见,只给出上面的示例。参见命令集中的请求操作员命令的相关文档,可以获得更多

有关操作员任务序列的信息。

在仿真运行中的任意给定时刻,一个任务执行器只能有一个激活任务序列和一个等待的任务序列。

而另一方面,一个分配器可以有一个等待的任务序列队列,但是不能够主动地执行其中的任意任

务序列。实际上,它将其任务序列队列分配给连接到它的输出端口的任务执行器。这是区别分配器

实体和任务执行器及其子类的方法。

Active Task Sequence

Queue of Waiting Task Sequences

如果没有任务序列是先占的,则任务执行器将会执行它的激活任务序列直到完成它。然后,它将把

队列中的第一个任务序列变为激活任务序列并开始执行它。如此重复,直到队列中的所有任务序列

都被执行完。

681

Page 682: Flexsim handbook

Flexsim3.0 用户手册

更多任务类型到现在为止,已经介绍了 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);

682

Page 683: Flexsim handbook

如果对“fsnode” 语句感到困惑,可查阅 Flexsim 树型结构帮助。用简短的术语来说,“fsnode*

newtasksequence” 创建一个引用或者指针,指向作为一个 Flexsim 节点的任务序列,这样,以后

就可以在向任务序列中添加任务时使用。

createemptytasksequence命令有三个参数。第一个参数是要处理此任务序列的实体,它应当是一

个分配器或任务执行器。第二个和第三个参数是数字,分别指定任务序列的优先级和先占值。命令

返回一个所创建的任务序列的引用。

inserttask命令将一个任务插入到任务序列的末尾。每一个插入的任务都有几个相关的值。第一,是

任务类型值,用来定义此任务是什么类型。它还有两个此任务序列涉及的实体的引用,分别是

involved1 和 involved2。所涉及的这些实体以及它们代表什么都取决于任务类型。对于一些类型的任

务,这两个涉及的参数都需要,并有其含义,而对于另外一些类型的任务,就不使用这些参数。有

些任务类型只使用一个相关的实体,有些任务类型则具有一些可选择的相关实体。参见任务类型的

有关文档,可以获得指定任务类型所包含的相关实体的含义方面的信息。任务可以有四个数值,它

们是任务变量,用 var1、var2、var3、和 var4 来引用。同样,它们的含义也取决于任务类型。对于下面

所示的装载任务,注意,var1 指定为 1。对于装载任务来说,它指定临时实体要通过站点的哪个输

出端口离开。

683

Page 684: Flexsim handbook

Flexsim3.0 用户手册

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)

684

Page 685: Flexsim handbook

此命令返回一个指向任务序列中某给定任务的涉及实体的引用。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_A

BORT_ALL 进行比较。参见任务序列先占可以获得更多关于先占的信息。

685

Page 686: Flexsim handbook

Flexsim3.0 用户手册

void setpreempt(fsnode* tasksequence, int newpreempt)

设定任务序列的先占值。需要将前面提到的宏指令之一传递到 newpreempt 中。参见任务序列先

占可以获得更多关于先占的信息。

任务序列先占

每个任务序列都有一个先占值。先占用来中断一个任务执行器执行其当前操作,转而去执行一个更

重要的操作。例如操作员 A最重要的责任是维修机器。然而,当没有机器要维修的时候,他也得运

输原料。如果在操作员 A 正在某处运输原料的过程中,有一个机器中断停机,则此操作员不会先完

成运输操作,而是停下他正在做的事情去维修机器。要做到这点,需要使用先占任务序列,使操作

员从当前操作里中断并被释放出来。

要创建一个先占任务序列,在 createemptytasksequence()命令中给先占参数指定一个非零值。

createemptytasksequence(operator, 0, PREEMPT_ONLY);

有四种可能的先占值。这些值告诉任务执行器,在原始任务序列被先占之后要做什么。

686

Page 687: Flexsim handbook

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()命令来查询或修改先占和/或优先

级的值。参见命令集,可以获得更多有关这些命令的信息。

687

Page 688: Flexsim handbook

Flexsim3.0 用户手册

协同任务序列

688

Page 689: Flexsim handbook

协同任务序列用来完成需要两个或多个任务执行器进行复杂协同的操作。这些任务序列用来实现这

样一些概念,如任务执行器的分派和取消分派,又如使多个并行进行的操作同步处理等。

示例一个由三个操作员组成的小组共用两辆叉车。一项操作需要一个操作员和一辆叉车。操作员要前往

叉车位置,叉车将操作员移入其内。然后叉车行进到装载地点,捡取临时实体行进到卸载地点,放

下此临时实体。然后叉车再回到停车位置,放下操作员。要采用任务序列完成这个过程将是很困难

的,这是因为它同时处理两种不同的资源,而这两种资源以协同方式工作。协同任务序列使得此例

子变得较为容易。下图阐明了叉车和操作员需要完成的两个任务序列。注意,在两个协同任务序列

中,存在一些这样的部分,其中一个资源需要等待而不进行操作,而另一个资源则进行各种操作。

命令协同任务序列用一系列的命令建立和分配,这些命令与默认的任务序列命令相互排斥。适用于协同

任务序列的命令如下:

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);

689

Page 690: Flexsim handbook

Flexsim3.0 用户手册

insertdeallocatetask(myts, opkey);dispatchcoordinatedtasksequence(myts);

关于上面示例的注释:这里面涉及一些模型维护问题。例如,如果恰好在操作员在叉车上的时候,

停止或者重置了模型,就需要从一个重置触发器中将操作员从叉车上移回到模型中。同样,每当将

操作员移回模型中的时候,都需要适当地设置它的位置,因为它在两个不同的协同空间里转移。

Createcoordinatedtasksequence (创建协同任务序列)createcoordinatedtasksequence命令有一个参数,是一个实体的引用。此实体被指定为“ 任务协调

器”,它持有任务序列,并同时协调这些任务。任务协调器也可以是在任务序列中进行分派的实体之

一。任务协调器可以是任意分配器或任务执行器。注意,选择一个任务协调器并不意味着分派那个

任务协调器。一个任务协调器可以在任意时刻协调任意数量的协同任务序列。同时,与常规任务序

列不同,协同任务序列不进行排队。当用户分配了任务协调器后,它将立即开始执行协同任务序列

无论它正在协调多少其它的协同任务序列。

Insertallocatetask (插入分派任务)insertallocatetask命令有四个参数。第一个参数是任务序列。第二个参数是任务执行器或分配器,将

给它一个“分派(allocated)” 任务。当任务协调器执行到一个分派任务时,它实际上创建一个单独

的任务序列,里面有一个“分派(allocated)” 任务,并将那个任务序列传递给指定的任务执行器或

分配器。如果它是一个分配器,则意味着用户需要分派几个任务执行器中的任何一个,这时可以使

用此命令的返回值作为一个关键词,来引用被分派的几个任务执行器中特定的那个,这是由于在

创建任务序列时还不能确切地知道是哪一个。第二和第三个参数是将要创建那个单独任务序列的优

先级和先占值。第三个参数是可选的,它指定任务是否被阻塞。默认情况(0)下,任务是阻塞的。

如果传递 1,则任务不阻塞。

Insertproxytask(插入代理任务)

insertproxytask命令与 inserttask命令类似,有一个参数,另外又添加了第二个参数。第二个参数

用来指定想要分派哪个实体去执行此任务。由于任务协调器实际上是“执行 ”此任务序列的那个实体,

所以,一旦它获得一个代理任务,它将通知所分派的实体来“通过代理”执行此任务。注意,对于

involved1 和 involved2,可以传递一个关键字,也可以传递一个实体的引用。

insertsynctask(插入同步任务)insertsync命令中断任务序列的执行,直到一个用关键字引用的特定任务被完成。它有两个参数:

任务序列和一个给定的代理任务的关键值。重点指出,在默认情况下,为不同的任务执行器指定的

代理任务将并行完成,除非指定了一个同步任务,而将代理任务分给了同一个任务执行器,代理

任务将自动地按顺序执行,而不需要同步任务。

insertdeallocatetask(插入取消分派任务)

690

Page 691: Flexsim handbook

insertdeallocatetask命令取消一个用关键字引用的指定的任务执行器。第一个参数引用协同任务序

列。第二个参数是想要取消分派的资源的分派关键字。第三个参数是可选的,指定任务是否阻塞。默

认情况(0)下,任务是阻塞的。如果传递 1,则任务不阻塞。

上面的代码创建一个协同任务序列,它组织了两个任务序列,如下图所示:

Coordinated Task Sequence

谨记• 在给任何资源分配代理任务之前,必须做的第一件事是分派那个资源。

• 必须从每个分派任务中返回关键字,因为以后要使用它。insertproxytask命令为代理任务

的执行器获得一个关键字。这是分派任务返回的关键字。在取消分派此实体时也要使用此关

键字。

• 同一个分派资源的所有代理任务是顺序执行的,而不同的分派资源的代理任务,除非明确

地在协同任务序列中加入阻塞任务,都是并行执行的。

• 阻塞任务是用来阻塞协同任务序列并行执行的任务类型。任务协调器直接遍历任务序列,

并将代理任务分给适当的分派资源,直到遇到一个阻塞任务。它将一直等待,直到那个任

务的阻塞请求被满足,然后继续此任务序列。换句话说,在那个阻塞任务(不管它们应用

于哪一个资源)之后发生的所有任务的执行都将被停止,直到阻塞任务请求被满足。阻塞

任务以及其阻塞条件如下所示。

691

Page 692: Flexsim handbook

Flexsim3.0 用户手册

1. 分派任务(Allocation Task):默认情况下,此任务将一直阻塞,直到指定的资

源被分派。不过,如果 insertallocatetask 的第五个参数是 1,分派任务就不会阻塞

2. 同步任务(Sync Task):此任务将一直阻塞,直到由它的关键字指定的代理任

务完成。

3. 取消分派任务(De-allocation Task):默认情况下,此任务将一直阻塞,直到指

定的资源完成了所有代理任务且被取消分派。不过,如果 insertallocatetask 的第五

个参数是 1,取消分派任务就不会阻塞。

• 插入任务的顺序有着细微但却重要的含义,尤其是在把代理任务放到与阻塞任务的相互关

系中进行考虑时,更是如此。放在特定阻塞任务后面的代理任务与把这些代理任务插入到

阻塞任务之前相比,执行起来相差甚大。

• 确保取消分派所有已分派的实体,否则,任务序列将不能正确地释放它分派的实体。

• 一旦取消分派了一个资源,就不要再给它任何代理任务。

关于无阻塞取消分派和分派任务的注释:此项允许这些任务无阻塞的功能还处于测试阶段。虽然

我们鼓励用户使用此功能,且到目前为止还没有发现程序缺陷,但使用中还是可能遇到一些问题,

因为还未广泛使用此功能。

692

Page 693: Flexsim handbook

任务类型快捷查询

任务类型 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 状态 重复 已执行

693

Page 694: Flexsim handbook

Flexsim3.0 用户手册

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)*

694

Page 695: Flexsim handbook

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_MOVEOBJECTobject 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

任务类型

可以参考任务序列快捷查询指南。 任务类型如下所示。

TASKTYPE_TRAVEL(任务类型_行进)

任务执行器行进到指定实体的位置。此任务通过向任务执行器连接的一个导航器发出一个行进请求来完

成。如果任务执行器连接到一个网络,那么它将从网络导航器发出一个请求。

关于任务执行器和导航器的注释:有些实体在默认情况下根本不和任何导航器相连。如果不将任务

执行器连接到导航器,那么它将不会执行任何操作来完成行进任务。下列实体在默认情况下不与任何导

695

Page 696: Flexsim handbook

Flexsim3.0 用户手册

航器相连道堆垛机、升降机和机器人

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

696

Page 697: Flexsim handbook

任务序列

TASKTYPE_UNLOAD, TASKTYPE_FRUNLOAD(任务类型_卸载,任务类型_固定实体卸载)

此任务使任务执行器将一个临时实体卸载到一个站点。如果选中了任务执行器的“装卸时采用行进偏移”

复选框,那么它将通过向此站点询问位置,并采用行进偏移行进到卸货位置。然后,任务执行器执行卸

载时间。在卸载时间的结束时刻,任务执行器将临时实体移入此站点。对于 Frload 任务类型,任务执行

器将在移动临时实体之前通报固定实体,这样固定实体就可以更新其自身的跟踪数据。参见固定实体,

可以获得更多关于什么时候使用 Frunload 和什么时候使用 unload 任务类型的信息。involved1 要卸载的实体(通常是一个临时实体)involved2 接收卸载实体的实体(如果任务类型指定的是 FRLOAD,就意味着是固定实体)var1 此参数是临时实体进入站点所要经过的输入端口。除非是要卸载到合成器,它需要知道临

时实体是从哪个端口进来,用以更新其输入表,而通常情况下是 0就可以了。var2 - var4

N/A

TASKTYPE_BREAK(任务类型_中断)

此任务使任务执行器“中断”其当前激活任务序列,转到一个新的任务序列,图示说明如下:

涉及的实体和变量用来指定如何找到中断后要转向的任务序列。在默认情况下,任务执行器调用它的“条

件中断响应”函数。此函数将返回一个任务序列的引用,它指向用户想要任务执行器中断转而去执行的任

务序列。在中断逻辑中,可以使用任务序列查询命令来对任务执行器的任务序列队列进行搜索,或者,

可以明确地采用 createemptytasksequence(创建空任务序列)命令以明确地创建任务序列。如果根本

不需要任务执行器中断,则返回NULL。

697

Page 698: Flexsim handbook

Flexsim3.0 用户手册

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)传递到消息中。

698

Page 699: Flexsim handbook

任务序列

TASKTYPE_CALLSUBTASKS(任务类型_调用子任务)

此任务和中断任务相似,只是它保证第二个任务一结束,就立即返回到原来那个任务序列的下一个任。

下图说明了其工作方式。

如上图所示,任务序列 A 执行到一个调用子任务类型的任务,它在这里中断转入任务序列 B。任务序列

B 一完成,立即返回任务序列 A 中的下一个任务。通常,只有当 A 实际调用子任务的时候,才会创建任

务序列 B。这是因为,当创建任务序列 A 时,还不能确切地知道,当执行到调用子任务的时候,需要让

任务执行器做什么,或者是因为没有所需要的实体的预先引用。例如,如果需要让任务执行器行进到模

型的某个部分,然后装载那个临时实体,再行进到模型中的另一个部分,并卸下临时实体,但是,你

却无法得到想要装载的临时实体的引用,这时就是这种情况,那怎么办呢?用户会想要任务执行器到

达模型中相应的那部分,并计算出要装载哪个任务。这里将要在任务执行器到达装载位置的时候采用调

用子任务函数,来解决临时实体的引用问题。

调用子任务也可以是多层次的。意思是,任务序列 B 也可以再调用一个子任务。

如果决定在任务执行器执行到调用子任务的时候才来创建任务序列,则需要用

createemptytasksequence()命令来创建任务序列,用 inserttask()命令插入任务,但是不要用

dispatchtasksequence()命令分配此任务序列。只返回任务序列的引用就可以了。

关于“条件中断响应”函数的注释:在默认情况下,当任务执行器执行到此类型的任务时,它会调用

其“ 条件中断响应”函数。它将用 parval(2) 给函数传递值 1,这样可以告知函数,这是一个调用子任务而

不是一个普通的中断任务。

关于协同任务序列的注释:如上图中,如果任务序列 B 是一个协同任务序列,则从任务序列 A 中执

行调用子任务的任务执行器,必须是任务序列 B 中第一个被分派的实体。

699

Page 700: Flexsim handbook

Flexsim3.0 用户手册

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)传递给消息

700

Page 701: Flexsim handbook

任务序列

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()来停止实体,在大多数情况下,这样将会使实体停止调用

701

Page 702: Flexsim handbook

Flexsim3.0 用户手册

freeoperators命令。当操作员一回到使用(Utilize)任务,他将在站点上调用

resumeobject()命令,情况将恢复正常,并将最终释放该操作员。参见相应的帮助章节

可以获得更多关于先占的信息。

var1 这是操作员在执行使用(Utilize)任务类型过程中将进入的状态。如果是 0,则任务执行

器将会进入 STATE_UTILIZE(状态_使用) 。var2 - var4

N/A

TASKTYPE_STOPREQUESTBEGIN(任务类型_“停止请求”开始)

此任务使任务执行器在参数 involved1传递的实体上调用 stopobject()命令。

involved1 此参数指定要调用 stopobject()的实体。如果为空,则任务执行器将在自身上调用

stopobject()。involved2 不使用此参数,赋值为NULL。

702

Page 703: Flexsim handbook

任务序列

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。

703

Page 704: Flexsim handbook

Flexsim3.0 用户手册

involved1 Involved1 是要接收消息的实体。此参数如果为NULL,则消息将发送给任务执行器自身involved2 Involved2 在消息触发器中指定 msgsendingobject(消息发送实体)。如果此参数为

NULL,则msgsendingobject 是任务执行器自身。通常此参数为NULL,因为这是消息

触发器中获取任务执行器自身的唯一方法。不过,可能需要从一个不同的实体来发送消

息,所以就有了这里的选项。var1 在消息触发函数中,此参数作为msgparam(1)传递。var2 在消息触发函数中,此参数作为msgparam(2)传递。

var3 在消息触发函数中,此参数作为msgparam(3)传递

var4 此参数用来判断发送的消息是否是一个延迟消息。如果为 0,则立即发送此消息;如果为-

1,则会延迟 0 时间发送此消息;否则,将延迟指定的秒数后发送此消息。

用户可能认为延迟消息有些多余,因为,如果想要发送一条延迟消息,为什么不在一个规

范的发送消息任务后面插入一个延迟任务呢?这里有些细微的差别。例如,假设想要让任

务执行器在满足给定数目的几个条件之前一直等待,而能够检查那些条件的唯一方法是靠

执行代码。做到这一点的方法是,当任务执行器执行到应该停下等待条件被满足的地方,

它发送一条消息给某个实体,然后,执行一个使用(utilize)任务,或者执行一个

Stoprequestbegin(“停止请求”开始)任务。当其它实体得到这条消息时,它负责查看是否

满足那些条件。如果已经满足,则它立即在任务执行器上调用 resumeobject()或者

freeoperators()。否则,它必须一直等到条件被满足,然后调用 resumeobject()或者

freeoperators()。然而,当条件已经满足并且它可以允许任务执行器立即继续执行时,就

带来一个问题。如果消息被立即发送出去,而任务执行器还没有开始使用

Stoprequestbegin(“ 停止请求”开始)任务,它还在发送消息任务中工作,因此,其它的

实体就不能立即调用 resumeobject()或者 freeoperators()。这是由于它必须等待任务执行

器完成发送消息的任务,并且到了使用(Utilize)任务或者 Stoprequestbegin(“ 停止请

求”开始)任务上。“在 0 时间发送一个延迟消息完全能够让任务执行器做到如此,这样就

能够在条件满足时,让其它实体立即将它释放。

704

Page 705: Flexsim handbook

任务序列

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.

705

Page 706: Flexsim handbook

Flexsim3.0 用户手册

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 想要的结束速度

706

Page 707: Flexsim handbook

任务序列

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之间的值,0.9意味着任务执行器将行进 90%的相应偏移量。

var4 想要的结束速度

TASKTYPE_PLACEOFFSET(任务类型_放置偏移)

此任务与捡取偏移任务相似,只是在这里,任务执行器就像要去执行卸载操作一样,去进行行进偏移。

involved1 与卸载任务类似,这是装载的临时实体的引用。involved2 与卸载任务类似,这是要卸载临时实体的站点的引用。

var1-var4 与捡取偏移任务相同。

TASKTYPE_TAG(任务类型_标记)

此任务用来“标记”任务序列。例如,在模型中创建 5 个普通类型的任务序列。在仿真过程中的不同给定

点,需要知道某特定任务序列是哪种类型。向已创建的所有任务序列中插入“标记”任务,作为每个任务

序列的第一个任务,这样,可以使用 gettaskinvolved()命令和 gettaskvariable()命令查询这个任务,从

而判断其任务类型。involved1 给用户使用involved2 给用户使用

var1-var4 给用户使用

707

Page 708: Flexsim handbook

Flexsim3.0 用户手册

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

708

Page 709: Flexsim handbook

任务序列

注释:下面的任务类型只是为了参考目的,用户不能够将其中任何一个任务明确地插入到任务序

列中。

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 任务的常规任务序列,并把它分配给一个特定的实体。此任务将阻塞任

务序列的连续执行,直到分派了一个实体。

709

Page 710: Flexsim handbook

Flexsim3.0 用户手册

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

710

Page 711: Flexsim handbook

任务序列

711

Page 712: Flexsim handbook

Flexsim3.0 用户手册

索引

2D....................................................................1663D............................................................221, 225

3ds 文件..........................................................221

3D 图形...........................................................274

3D 媒体...........................................................221

3D 形状...........................................................225

3D 文件...........................................221, 225, 302

3D纹理...........................................................302AutoCAD................................................222, 371

AutoCAD 图形...............................................222

AVI 制作器.....................................................388

Bmp 文件........................................................230Cellrc...............................................................207Covermode......................................................538

Csv 文件..........................................................428Dbopen....................................................194, 207Dfx..................................................221, 222, 431Dispatchtasksequence.....................................246Drawcube........................................................207Drawdisk.........................................................207Drawline..........................................................207Excel.......................................390, 406, 425, 426Excelclose.......................................................207

Excel 界面.......................................................390

Flexsim 术语.....................................................28

Flexsim 树.......................................................191

Flexsim 树结构...............................................199for....................................................................202Freeoperators..................................................695Getcreationtime...............................................207Getlabelnum....................................................306getpreempt.......................................................686Getrank............................................................207Holditem.........................................................248

Jpg 文件..................................................230, 431

Lds 文件..........................................................223Moveobject.....................................................207Msgparam.......................................................504MTBF MTTR.................................................430

MTTR...............................................19, 261, 265Ncols...............................................................207NrofLegs.........................................................243Numtostring....................................................207Object-oriented...............................................313OnReceive.......................................................189OptQuest.................................................149, 409OR...................................................................202Otherobject......................................................531Photoeye..........................................................538PREEMPT_AND_ABORT_ALL..................686Reassignnetnode.............................................288Releaseitem.....................................................248Resetmodel......................................................207Resumeobject....................................19, 207, 396Rise..................................................................243ROYGBIV......................................................288Senddelayedmessage......................................504Sendmessage...................................................207Setlabelnum.....................................................306Setpreempt......................................................686Setrank............................................................207Settablestr........................................................207Spacescale.......................................................207STATE_BLOCKED........................................218STATE_UTILIZE...........................................695Statenum.........................................................207

Stl 文件...........................................................431Stopobject.........................................19, 218, 396Stopoutput.......................................................207switch..............................................................202TargetQuantity................................................238TASKTYPE_BREAK.....................................695TASKTYPE_CT_SYNC................................695Thisobject........................................................531

Tmp 文件........................................................230Utilize..............................................................679

Wav 文件........................................................414while................................................................202

Wrl 文件.................................221, 225, 371, 431XE...................................................................207Xloc.................................................................207Xrot.................................................................207

上升/下降通过位高标记触发器...................610

712

Page 713: Flexsim handbook

索引

下拉菜单.........................................................461

不透明性...........................................................26

中位标记.........................................................280

中断触发器......................................19, 293, 566

中间端口.........................................................304

临时实体存档编辑器....................................391

主.....................................................................199

主树.................................................................144

事件代码.........................................................399

交通控制.........................................................366

从用户库移除实体........................................432

代码.................................................................392

任务执行器.....................................................313

任务类型.........................................................695

仿真...................................................................28

仿真运行控制面板........................................157

优先级.....................................................249, 261

传递给.............................................................643

减速度.............................................................286

分段.................................................................243

分类输送机....................................254, 335, 615

分解.................................................................282

分解器.............................................................358

分解数量........................................326, 631, 647

分配器.............................................................679

分配器分页.....................................................246

切换.................................................................175

列...............................................................26, 271

创建.................................................................361

创建/编辑标签表...........................................306

创建触发器.....................................................518

删除标签.........................................................306

到达类型.........................................................283

到达触发器............................................293, 533

加速度.............................................................286

动态改变模型................................................366

升降机.............................................................327

升降机分页.....................................................247

半径.................................................................243

协同任务类型................................................695

单元...................................................................26

单表导入.........................................................426

单表导出.........................................................425

卸载.................................................................695

卸载时间.........................................................579

卸载触发.........................................................293

卸载触发器.....................................................465

去托盘............................................282, 358, 631

发生器.............................................................361

变更触发器.....................................................542

可视化工具............................................371, 670

合并.................................................................319

合成器.............................................................238

名称尺寸.........................................................170

名称风格.........................................................170

向.....................................................................239

吞吐量.............................................................309

吸收器.............................................................360

周期时间.........................................................583

命令.................................................................202

命令提示................................................144, 180

命令集.............................................................181

响应请求中断................................................695

固定资源...................................................12, 313

图像.................................................................431

地面堆存.........................................................269

场景................................................419, 651, 661

垂直堆叠.........................................................267

基本建模函数................................................207

堆积.................................................................351

713

Page 714: Flexsim handbook

Flexsim3.0 用户手册

处理分配器.....................................................595

处理器.............................................................319

处理器分页.....................................................264

处理完成触发................................................293

处理完成触发器............................................507

处理操作员.....................................................261

处理时间.........................................................583

处理时间分页................................................265

处理过程分页................................................256

复制.................................................................358

复制标签.........................................................306

复合处理器.....................................................338

多 Excel 表导入..............................................406

字体视窗.........................................................185

完成提示................................................143, 182

实体变量.........................................................207

实验................149, 419, 643, 649, 651, 660, 661

实验控制器.......................................................20

容器.................................................................371

容量.................................................................286

导入........................................221, 222, 225, 426

导入/导出.......................................................390

导入媒体文件................................................431

导入表.............................................................406

导入表数据.....................................................428

尺寸.................................................................302

层..............................................26, 269, 271, 591

展示幻灯片............................................371, 427

属性.................................................................159

属性提示.........................................................179

工具菜单.........................................................151

巷道堆垛机.....................................................316

巷道堆垛机页................................................235

布局.................................................................243

帧.....................................................................346

帮助菜单.........................................................155

常规属性页.....................................................304

平面视图.........................................................166

库.....................................................................199

库树.................................................................144

建模工具.........................................................387

建立...................................................................32

开始.................................................................661

开始起步...................................................28, 155

形状.................................................................431

形状因子.........................................................302

微软 Excel......................................390, 425, 426

总是发送.........................................................615

恢复函数...................................................19, 396

成员页...............................................................19

打印输出.........................................................207

打开连线侧边................................................533

执行命令.........................................................202

批量规格................................................267, 351

报告.................................................................188

持续时间.........................................................396

按下列请求运输机................................249, 329

按序列表到达模式........................................361

按时间表到达................................................283

按时间表到达模式........................................361

捡取/放置时...................................................269

排队.................................................................326

排队策略........................................246, 643, 647

描述...................................................................31

撤销.................................................................143

操作员.....................................................346, 679

操作员分页.....................................................261

收集结束触发器....................................293, 351

放置...........................................................26, 591

教程...................................................................28

714

Page 715: Flexsim handbook

索引

数学操作符.....................................................207

数据库表.........................................................144

数据库表视图................................................194

数据捕获设定................................................274

数据点编号.....................................................667

文字厚度.........................................................371

文本代码.........................................................670

文本显示.........................................................669

断开连接.........................................................168

新增功能.............................................................3

新建用户库.....................................................432

无先占.............................................................686

时间.................................................................570

时间下拉菜单................................................582

时间表.....................................................396, 430

显示网格.........................................................170

显示选项.........................................................274

最大容量................................................239, 264

最大等待时间................................................267

最小停留时间................................................580

最短距离.........................................................643

机器人.....................................................281, 357

查找替换................................................143, 184

标准报告................................................149, 188

标签.................................................................306

标记架子.........................................................269

树.....................................................................192

树浏览器对话框............................................190

树视窗.............................................................191

样条线.............................................................257

检修触发器..............................................19, 293

模型.................................................................199

模型例库.........................................................155

模型文档................................................149, 196

正投影编辑器........................................144, 167

每秒帧数.........................................................388

比较.................................................................202

流节点.............................................................253

流量速率.........................................................280

浏览用户库树................................................432

消息触发器....................................189, 293, 504

添加数字标签................................................306

激活任务序列................................................679

状态.................................................................309

状态列表.........................................................218

状态报告.........................................................149

生成器分页.....................................................283

生成报告.........................................................188

用户事件.........................................................399

用户定义状态................................................338

用户库.............................................................432

用户库图标栅格............................................144

用户手册.........................................................155

用户描述.........................................................304

用户长度................................................238, 239

监视列表................................................430, 458

破坏.................................................................360

碰撞处理................................................236, 531

碰撞触发器.....................................................531

离开区域.........................................................366

离开触发器............................................293, 481

第一视角.........................................................170

等待运输.........................................................329

纹理.................................................................371

细节的层次.....................................................223

结束.................................................................649

绘制球.............................................................236

统计.................................................................309

统计收集.........................................................149

继续触发器............................................293, 533

715

Page 716: Flexsim handbook

Flexsim3.0 用户手册

绩效指标.........................................................643

绩效评估.........................................................419

维修触发器.....................................................566

编写.................................................................202

编译................................................148, 198, 461

编辑 3D 形状因子..........................................302

编辑所选实体................................................167

编辑所选实体菜单........................................175

编辑菜单.........................................................143

编辑选择集.....................................................159

网络节点................................................366, 533

网络节点页.....................................................339

背景设计.........................................................427

自动创建任务序列........................................679

虚拟距离.........................................................257

虚拟长度.........................................................239

行进偏移.........................................................695

表.....................................................................426

表 X值(X值)............................................667

表 Y值(Y值)............................................668

表编辑器.........................................................195

表配置器.........................................................428

装盘/合并/分批..............................................238

装载.................................................................695

装载/卸载...............................................679, 695

装载时间.........................................................579

装载用户库.....................................................432

装载触发器............................................293, 465

覆盖与覆盖解除触发器................................538

覆盖解除.........................................................322

覆盖解除触发................................263, 322, 323

覆盖触发器.....................................................323

视图树.............................................................144

视景文本.........................................................371

视角推移路径................................................414

记录.................................................................388

记录器............................................274, 355, 668

设定变量.........................................................207

设定数值精确度............................................143

设定菜单.........................................................170

货架..........................................26, 271, 580, 591

货架页.............................................................269

起重机.............................................................325

起重机提升高度............................................245

跟踪列表.........................................................252

跟踪调试器............................................144, 189

路径浏览器.....................................................197

跳转.................................................................323

转角.................................................................243

输送机.....................................................322, 335

输送机分页.....................................................239

运行模型.........................................................148

运输机.....................................................292, 369

近切割面.........................................................170

进入区域.........................................................366

进入节点触发器............................................533

进入触发器............................................293, 481

连接................................................168, 257, 304

连接端尺寸.....................................................170

选取操作员.....................................................595

速度................................................253, 334, 639

逻辑.................................................................202

配置器.............................................................428

释放.................................................................351

重复时间表/序列...........................................283

重复运行.........................................................409

重复随机数流................................................149

重置模型.........................................................148

重置触发.........................................................554

锁定样条线.....................................................143

716

Page 717: Flexsim handbook

索引

键盘交互.........................................................168

长度.................................................................243

间隔.................................................................257

间隔值.............................................................239

隐藏三维形状................................................170

非时间交通模式............................................366

非累积模式.....................................................335

项目树.............................................................199

预置操作员.....................................................261

预置时间.........................................................581

首个可用列.....................................................329

首次事件时间................................................399

高于中位标记触发器....................................293

高亮实体.........................................................166

高位标记.........................................................280

高级函数.........................................................207

717