收藏 分享(赏)

Flexsim仿真软件介绍.doc

上传人:hwpkd79526 文档编号:9068284 上传时间:2019-07-22 格式:DOC 页数:33 大小:2.54MB
下载 相关 举报
Flexsim仿真软件介绍.doc_第1页
第1页 / 共33页
Flexsim仿真软件介绍.doc_第2页
第2页 / 共33页
Flexsim仿真软件介绍.doc_第3页
第3页 / 共33页
Flexsim仿真软件介绍.doc_第4页
第4页 / 共33页
Flexsim仿真软件介绍.doc_第5页
第5页 / 共33页
点击查看更多>>
资源描述

1、Flexsim 仿真软件介绍从 1993 年起,Flexsim 软件产品就进入了仿真软件市场并且建立了自己的咨询业务。经过十多年在仿真行业的经验积累以及高新软件技术的应用,我们已经开发出了一个全新的面向对象的仿真建模工具 Flexsim。它是迄今为止世界上惟一一个在图形建模环境中集成了 C+IDE 和编译器的仿真软件。在这个软件环境,C+ 不但能够直接用来定义模型,而且不会在编译中出现任何问题。这样,就不再需要传统的动态链接库和用户定义变量的复杂链接。Flexsim 有很广阔的应用范围,还能应用在更高层次的仿真工程上。欢迎大家使用Flexsim,它一定会令你耳目一新!Flexsim 能应用于建

2、模、仿真以及实现业务流程可视化。下面我们简单地介绍一下 Flexsim 仿真软件。一、建模Flexsim 应用深层开发对象,这些对象代表着一定的活动和排序过程。要想利用模板里的某个对象,只需要用鼠标把该对象从库里拖出来放在模型视窗即可。每一个对象都有一个坐标(x,y,z )、速度(x,y,z),旋转以及一个动态行为(时间)。对象可以创建、删除,而且可以彼此嵌套移动,它们都有自己的功能或继承来自其他对象的功能。这些对象的参数可以把任何制造业、物料处理和业务流程的快速、轻易、高效建模的主要特征描述出来。下图是一个仓库的模型:Flexsim 中的对象参数可以表示几乎所有存在的实物对象。像机器、操作员

3、、传送带、叉车、仓库、交通灯、储罐、箱子、货盘、集装箱等等都可以用Flexsim 中的模型表示,同时数据信息也可以轻松地用 Flexsim 丰富的模型库表示出来。层次结构Flexsim 可以让建模者使模型构造更具有层次结构。在组建客户对象的时候,每一组件都使用了继承的方法,在建模中使用继承结构可以节省开发时间。Flexsim 可以使用户充分利用 Microsoft Visual C+的层次体系特性。用户化目前在市场上,还没有其他任何仿真软件能像 Flexsim 这样有更多的用户化设定。对使用者来说,软件的每一个方面都是开放式的。对象、视窗、图形用户界面、菜单、选择列表和对象参数等都是非常直观的

4、。你可以在对象中根据自己的想法改变已经存在的代码,删除不需要的代码,甚至还可以创建全新的对象。值得一提的是,不论是你设定的还是新创建的对象都可以放入库中,而且可以应用在别的模型中。最重要的是,在 Flexsim 中可以用 C+语言创建和修改对象,同时,利用 C+可以控制对象的行为活动。 Flexsim 的界面、按钮条、菜单、图形用户界面等都是由预编译的 C+库来控制的。可移植性由于 Flexsim 中的对象都是开放的,因此这些对象可以在不同的用户、库和模型之间进行交换,同时结合对象的高度可自定义性,可以大大提高建模的速度。当用户自定义的对象加入库中时,就可以非常方便的在别的模型中使用该对象。由

5、此可见,用户化和可移植性扩展了对象和模型的生命周期。二、仿真Flexsim 中有一个效率非常高的仿真引擎,该引擎可同时运行仿真和模型视窗(可视化),但可以通过关闭模型视窗来加速仿真的运行速度。同时当仿真运行时,利用该引擎和 flexscript 语言可以改变模型的部分属性。下图是仿真原材料的传输过程:Flexsim 还可以用试验的形式来仿真假定的情节,而且它可以自动运行并把结果存在报告、图表中。这样我们可以非常方便地利用丰富的预定义和自定义的行为指示器,像用处、生产量、研制周期、费用等来分析每一个情节。而且也很容易将结果导入到别的应用程序像 Microsoft Word 和 Excel 等,利

6、用ODBC(开放式数据库连接)和 DDEC(动态数据交换连接)可以直接输入仿真数据。三、可视化如果一幅图能够表达上千的文字,那么 Flexsim 的虚拟现实动画以及模型浏览窗口就表达了无限的容量。Flexsim 把所有最新的虚拟现实博奕图形整合在个人计算机上。Flexsim 中有可以直接导入 3DS (3D Studio), VRML,3D DXF and STL 等类型文件的选项,而其他仿真软件中没有这项功能。Flexsim 内置了虚拟现实浏览窗口,可以让用户添加光源、雾以及虚拟现实立体技术。用户定义的“Fly-Throughs”可以被定义为艺术模型状态显示出来。AVI 文件可以通过 Fle

7、xsim 的 AVI 录制器快速生成。任何模型都能被录制、拷贝到 CD,以及发送到任何人的实时查看器中。七、输入和输出1)输出:Flexsim 具有强力的商务图表功能,海图(Charts)、饼图、直线图表和 3D 文书能尽情地表现模型的情报,需要的结果可以随时提出。Flexsim 的open architecture 允许用户连接 OBDC 数据源、进行读和写,可以实时的连接 Word 和 Excel。对于 Flexsim 模型,为便于在 Flexsim 系统之外观看和演示,系统提供了 AVI 转换功能:可以将模型的 3D 效果转换成 AVI 格式。2)输入:Flexsim 的模型中的 3D

8、图形可以是所有符合 OpenGL 规范的 3D 图形,比如:*.wrl; *.3ds; *.dxf; *.stl 等。八、应用领域Flexsim 是一款建模应用软件,可以用于对任何商业流程,包括制造、物流、管理等等的仿真和可视化。尤其适合于流水线(研发、生产制造、销售展示、工程规划、生产管理分析)、物流设备(研发、生产制造、销售展示、工程规划、性能分析)、物流与配送(工程布局规划、性能分析)等。Flexsim 的理念就是柔性。无论是建模对象、视图、图形用户界面,还是你能想到的许许多多其他构件,在 Flexsim 中都可以完全用户化。1 Flexsim 系统仿真软件概况Flexsim 是 PC

9、Base 的数字虚拟企业的仿真系统,来建立各种经营、管理、制造等模型,并且可在微软公司的 Windows 2000、Windows XP、及 Vista 等不同作业平台上执行的全窗口化 3D专业仿真软件。Flexsim 是新一代的面向对象的仿真建模工具,它是迄今为止世界上唯一一个在图形建模环境中集成了 C+IDE 和编译器的仿真软件。在这个软件环境,C+不但能够直接用来定义模型,而且不会在编译中出现任何问题。这样就不再需要传统的动态链接库和用户定义变量的复杂链接。它能使决策者轻易地在个人电脑中建构及监控任何工业及企业的分散式流程。透过 Flexsim 我们可以率先找出未来工业及企业流程的模式。

10、Flexsim 基础架构设计不只是要满足使用者现今的需求,其架构的概念更是为了企业的未来而准备。Flexsim 就是帮助工程师,经理和决策者形象化地在动态三维虚拟现实环境中检测新提议的操作,流程或是系统。这对于创建那些可能出现崩溃,发生中断或是产生瓶颈的复杂系统是必不可少的。通过预先创建系统模型,可以考察各种假设的场景,同时不会产生改变实际系统时所面临的中断,成本和风险。Flexsim 不仅已应用于工业自动化仿真、物流中心配送仿真、交通运输仿真、交通流量管制仿真、医疗管理研究、医院动线规划仿真等民用工程,也已经应用于先进国防战略仿真、航天制程仿真等大型研究方向。主要的应用领域:制造业:半导体芯

11、片制造、肉食包装工厂中的牛肉处理、钢铁制造、果酱成品的罐装,标签,包装,发货、电子器件制造、仓储和配送:港口集装箱船只的装卸、配送中心操作、订单取货、传输带系统和布局、物流货架、传送带和堆垛机。运输:高速路交界处的交通流、火车站中人群和列车的移动、河流中驳船的往来穿梭、国际边防路口的交通堵塞其他:矿石开采和加工、快餐店中食物准备和客户服务、参观者在娱乐场所内的活动、喷气式飞机引擎的拆卸,翻新和更换、医院中病人和食物的处理、共享的网络存储器中数据的流动、银行处理中心中支票的处理。2 Flexsim 仿真功能2.1 Flexsim 建模的功能1) Flexsim 具有离散型和连续型的混合建模功能。

12、软件本身更多的是离散型仿真方面应用,但它支持连续型生产建模,它有专门的流体部件库,有很多应用于炼钢厂、塗料生产厂及石油输送的成功案例。图-1 Flexsim 连续型生产模型之一 2) Flexsim 提供平面与三维建模窗口,可以直接将 AutoCAD的平面布置图导入建模窗口,可完全遵循平面布置图的距离关系建立平面模型,平面模型只要换一个窗口,或换一个角度就是三维模型,建立二维模型的同时,同步自动生成三维模型,不需要将二维模型转为三维模型的操作。同样,也可以直接在三维建模窗口建立模型,二维模型同步自动生成。二/三维建模完全同步关联。图-2 AutoCAD 的平面布置图上建模3) Flexsim

13、提供的部件具有相当的柔韧性,部件的参数设定可适应于不同层次的使用者,对于刚入门的使用者,Flexsim 提供了制造业和物流业常见策略,用户只需要选择和修改数据,就可以实现先进先出、先进后出、随机出入、百分比出入、统计概率出入、最长队列出入、最短队列出入、按品种出入、按标签出入等出入库策略,无需编程。对于使用熟练者,可以直接用 C+编程,实现更复杂的有特殊需求的出入库策略,每个部件都有 C+编程接口。4) Flexsim 用拖放图形方法建立模型,Flexsim 提供有固定类部件库,执行类部件库,流体类部件库,以及用户部件库。建模时将相应的部件拖放到模型窗口的指定位置。Flexsim 允许用户开发

14、自己的部件并建立自己的部件库,对于使用熟练者用户可以手工编制代码来建模。5) Flexsim 具有完全的 C+面向对象(object-oriented)性。6) Flexsim 所有模型均建立和运行于耀眼的彩色 3D 中 ,采用了与先进的视频游戏相同的虚拟现实技术。-通过简单的点击和拖动,可从任何角度观看模型。-通过“飞行漫游模块” ,用户可随镜头漫游整个模型运行状况。可以任意使用全景、局部放大、侧面、反面等漫游技巧。-多个窗口可以设置不同的视角,仿真运行时,以便同时观察系统的各部分。实现模型的规模化展现。图-3 大规模模型全景模型的第二层情景 模型的第一层情景7) Flexsim 能利用包括

15、最新的虚拟现实图形在内的所有 PC 上可用的图形。如果是扩展名为 3DS、VRML、DXF 和 STL 的3D 立体图形文件的话,可以直接导入 Flexsim 模型中,模型中的任何部件或背景都可以通过导入图片或立体图形文件的方法替换部件或背景的图片或立体图形。图-4 Flexsim 模型8) Flexsim 是世界唯一的在图形的模型环境中应用 C+ IDE和编译程序的仿真软件。定义模型逻辑时,可直接使用C+,而且可立刻编译到 Flexsim 中。因为 Flexsim 具有高度的开放性和柔韧性,所以能为几乎所有产业定制特定的模型。9) 有 Flexsim 版本 3.0 的中文版。最新版本没有中文

16、版,是英文版,但软件本身在建模环境中能输入中文字符,在仿真运行环境中能以标签或表格形式显示中文信息等。图-5 Flexsim 最新版报表中显示的中文信息10) Flexsim 尽管能同时打开多个窗口,但模型是在集成统一的开发环境中,这种开发环境具有两种表现形式,一种是 3D 或 2D 的视景环境,一种是树结构的纯文本环境。它是同一个东西,不同表现形式,方便建模和调试。Flexsim 建模环境同时支持仿真模型的运行、调试等功能。11) Flexsim 全部模块是在 Windows 系列版本的操作系统上运行,包括 Windows 2000 各版本、Windows XP 各版本、Windows 20

17、03 各版本以及 Windows Vista 各版本。软件操作风格上具备典型的 Windows 操作风格,具备菜单、工具条以及复制、粘贴等操作。12) Flexsim 提供较为详细的通用格式的技术帮助文件(文件格式为*.HTML) 。在软件中也有帮助菜单,有查询功能。13) 开放性和互联性是 Flexsim 体系架构的一个特点。Flexsim 完全与 C+ 相结合,用户可以随时修改 Flexsim满足其特定需求,而不必学习专有代码。Flexsim 能够链接到任何 ODBC 数据库(像 Oracle.or Access.)和大众数据结构文件(如 text, Excel, 或 Word)。创时能公

18、司能够提供仿真与用户异构平台的接口。2.2 Flexsim 的分析优化的功能1) Flexsim 建立模型的所有资源是对象(Objects) ,对象可以是产品,模型,图表,记录,库,GUI,甚至是应用程序本身。而 Flexsim 的对象都可以向定制的用户公开,建模人员可以自由地操作部件、图形用户界面、菜单、选择列表和部件参数,可以在部件里增加自定义的逻辑、改变或删掉既存的编码。所以当然允许用户根据实际需求来自定义统计分析报表。Flexsim 在仿真过程中,能根据仿真进度动态显示 2D 和 3D 报表数据。图-7 3D 报表实时显示报表数据2) Flexsim 仿真的统计分析数据除在仿真运行环境

19、内显示外,可以直接导出 EXCEL 和文本文件形式的报表,提供数据库以自定义表形式储存报表。3) Flexsim 在模型运行过程中记录了所有设备的所有状态(工作、等待、阻塞、故障等)的时间数值,以及设备加工产品的个数,用户可以自由组合和输出由这些数据组成的报表。当然提供包括设备利用率、单条模型生产线的加工总能力、单个设备的加工能力、设备状态的时长及时间比例、模型瓶颈分析等统计分析功能。图-8 Flexsim 提供的设备状态饼图4) Flexsim 提供平面和立体饼图、柱状图、折线图、海图、以及甘特图等多种图形图表,支持数据与图表混合的统计报表(如上图) 。5) 优化模块 Optquest 完全

20、集成于 Flexsim 中,Optquest 用于仿真优化,即找寻一组最佳的参数值(或决策变量值) ,以使得目标函数最优,在仿真模型中执行优化功能。由于在 Flexsim 中除了模型本身外、模型中的每个部件都提供了编写 VC+程序的接口,所以当然支持嵌入自定义的优化算法。2.3 Flexsim 的其它功能1)层次结构 Flexsim 可以让建模者使模型构造更具有层次结构。建立模型的时候,每一部件都使用继承的方法(即采用继承结构) ,可以节省开发时间。Flexsim 可以让用户充分利用 Microsoft Visual C+的层次体系特性。2)量身定制 软件的所有可视窗体都可以向定制的用户公开。

21、建模人员可以自由地操作部件、视窗、图形用户界面、菜单、选择列表和部件参数,可以在部件里增加自定义的逻辑、改变或删掉既存的编码,也可以从零开始完全建立一个新的部件。不论是设定的还是新创建的部件都可以保存到部件库中,而且可以应用在其它模型中。最重要的是,在 Flexsim 中可以用 C+语言创建和修改部件,同时,利用 C+可以控制部件的行为活动。Flexsim 的界面、按钮条、菜单、图形用户界面等都是由预编译的 C+库来控制的。3)可移植性 因为 Flexsim 的部件是向建模者公开的,所以部件可以在不同的用户、库和模型之间进行交换。可移植性与量身定制相结合能带来惊异的建模速度。定制的部件保存在部

22、件库中,建模时,只要从部件库中拖放相应部件,就能在新模型中再现这些部件。可移植性与量身定制延长了部件和模型双方的生命周期。4)仿真实验 Flexsim 能一次进行多套方案的仿真实验。这些方案能自动进行,其结果存放在报告、图表里,这样我们可以非常方便地利用丰富的预定义和自定义的行为指示器,像用处、生产量、研制周期、费用等来分析每一个情节。同时很容易的把结果输出到象微软的Word、Excel 等大众应用软件里,利用 ODBC(开放式数据库连接)和 DDEC(动态数据交换连接)可以直接对数据库进行读写数据。5)统计分析 自带随机变量发生器,能容易地建立近似于现实系统的数学模型。提供了 25 种以上的

23、统计分布函数,集成了 ExpertFit,具有拟合统计分布函数的功能。技术支持:Flexsim 中国唯一代理商 北京创时能科技发展有限公司第五章 Flexsim 相关的概念及关键技术研究5.1 Flexsim 软件介绍Flexsim 是由美国的 Flexsim Software Production 公司出品的,是一款商业化离散事件系统仿真软件。Flexsim 采用面向对象技术,并具有三维显示功能。建模快捷方便和显示能力强大是该软件的重要特点。该软件体供了原始数据拟合、输入建模、图形化的模型构建、虚拟现实显示、运行模型进行仿真试验、对结果进行优化、生成 3D 动画影像文件等功能,也提供了与其他

24、工具软件的接口。图 5-1 是 Flexsim 软件及其构成模块的结构图 7。ExpertFit 等拟和分布工具Excel 等可以用作统计分析的工具模型建立与调试模型有效性确认运行仿真试验3D的可视化结果动态显示生成影像文件Flexsim 仿真软件Microsoft Visual C+.NET输入建模系统仿真运行仿真试验结果统计分析图 5-1 Flexsim 功能结构图Flexsim 提供了仿真模型与 ExpertFit 和 Excel 的接口,用户可以同过 ExperFit 对输入数据进行分布拟合,同时可以在 Excel 中方面地实现和仿真模型之间的数据交换,包括输出和运行模型过程中动态修改

25、运行参数等。另外该软件还提供了优化模块 Optquest,增加了帮助迅速建模的 Microsoft Visio 的接口。5.1.1 Flexsim 软件的主要特点Flexsim 仿真软件的特点主要体现在采用面向对象技术,突出 3D 显示效果,建模和调试简单开放方便,模型的扩展性强,易于和其他软件配合使用等方面。(1) 基于面向对象技术建模Flexsim 中所有用来建立模型的资源都是对象,包括模型、表格、记录、GUI 等。同时,用户可以根据自己行业和领域特点,扩展对象,构建自己的对象库。面向对象的建模技术使得 Flexsim 的建模过程生产线化,对象可以重复利用,从而减少了建模人员的重复劳动。(

26、2) 突出的 3D 图形显示功能Flexsim 支持 OpenGL 技术,也支持 3ds、wrl、dxf 和 stl 等文件格式。因此用户可以建立逼真的模型,从而可以帮助用户对模型有一个直观的认识,并帮助模型的验证。用户可以在仿真环境下很容易地操控 3D 模型,从不同角度、放大或缩小来观测。(3) 建模和调试的方便建模过程中用户只需要从模型库中拖入已有的模型,根据模型的逻辑关系进行连接,然后设定不同对象的属性。建模的工作简单快捷,不需要编写程序。(4) 建模的扩展性强Flexsim 支持建立用户定制对象,融合了 C+编程。用户完全可以将其当作一个 C+的开发平台来开发一定的仿真应用程序。(5)

27、 开放性好提供了与外部软件的接口,可以通过 ODBC 与外部数据库相连,通过 socket 接口与外部硬件设备相连,与 Excel、 Visio 等软件配合使用。5.2 Flexsim 的一些重要概念Flexsim 是目前国内最新的仿真软件,关于该软件的资料和使用经验还很少。作者是在不断的摸索中学习的,所以希望本文能对其他人有一定的借鉴。要完全掌握好 Flexsim,并将其用到我们的工作、学习和研究当中,理解该软件的一些重要概念和思想是很重要的,本节针对集装箱码头建模仿真中用到的技术做一个梳理。5.2.1 面向对象的思想相对于目前的一些仿真软件(如 Witness, eM-Plant 等) ,

28、Flexsim 是采用面向对象思想和技术开发的,其本身更是用 C+语言实现。严格地说该仿真软件包括了两部分,仿真软件和后台支持环境 VC+.NET。由于 C+是一种面向对象的语言,所以使用 Flexsim 软件,从用户用于系统建模,或是做一些二次开发,这些工作都有面向对象思想的体现。可以这样说,没有领会面向对象的思想,就不能完全发挥 Flexsim 软件本身的特点,也就不能用其实现用户的目的。使用 Flexsim 软件的用户需要对 C+语言有一定程度的熟悉。本节主要是解释 Flexsim 中所特有的一些面向对象思想,而不涉及面向对象语言的解释(关于C+语言的知识请查看相关书籍) 。对象(Obj

29、ect)的概念在 Flexsim 软件中无处不在,我们先直观的感受一下。软件的运行界面左边是一个常用的对象库(如图 5-1) 。库中的各种部件就是有特定功能的对象,这些对象是软件本身自带的,使用这些基本的部件对象用户可以完成大多数的仿真工作。我们使用 Processor 来解释一下对象的概念:我们日常所见的任何具体事物都可看作是对象,这里 Processor 就是一种设备,它的作用就是对经过他的物件进行一些加工,即改变物件的状态。这里我们可以将其当作现实中的设备,如机床等。图 5-1这里我们借用 C+程序设计语言中的对象的概念。对象是类的实例,类是对现实对象的抽象。类中包含了对象的数据(相当于

30、现实对象的状态) ,以及对象的方法(相当于现实对象用来处理外界所给信息的方法) 。对象封装了属性和方法,进一步到 Flexsim 中,对于软件中可用的库对象,他们本身有自己的属性(如颜色,尺寸,位置等) ,还有处理物件的方法。在使用软件的过程中,我们完全可以以人们平时的思维方式来思考,而无须过多的抽象化,这也就是面向对象方法的优点。5.2.2 Flexsim 的对象层次结构面向对象方法的一个优点是类与类之间可以有继承关系,对象的继承性给我们提供了更大的柔性来扩展我们自己的对象,即衍生出新的对象。在 Flexsim 中我们可以充分利用继承性来开发我们自己的对象,而软件本身也给用户提供了这样的机制

31、。Flexsim 本身的库对象是高度抽象化的,具有很强的通用性,几乎涵盖了仿真中可能遇到的所有对象。这些对象之间有一定的继承关系,他们之间存在着逻辑关系。下图(图 5-2)是 Flexsim 中对象的层次结构。FlexsimObjectFixedResource Dispatcher Navigator NetworkNodeSourceQueueSinkConveyorRackReservoirFixedSourceTemplateProcessorTaskExecuterCombiner SeparatorOperatorTranspoterCraneASRSvehicleNetworkN

32、avigatorCraneNavigatorUserDefineUserDefine图 5-2从类的派生关系图中我们可以对 Flexsim 中各种对象的逻辑关系一目了然。对象库中的对象分为两种,一种是从 FixedResource 中派生下来的,另一种是 TaskExecuter 中派生下来的。通过分析我们不难发现,从 FixedResource 中派生来的对象有一个共同的特点,其本身是不会运动的,他们的作用只是产生或消除物件、存储物件、加工物件等等;从TaskExecuter 中派生的对象,其本身是可以运动的,其作用是将物件从一个地点运送到另一个地点。当现有的库对象不能满足用户的需要时,用户

33、就需要创建自己的对象。Flexsim 为用户提供了这样一种机制用户可以定制自己的库对象。在对象层次图中,我们看到有两个虚线框,这表示用户可以从 FixedResource 和 TaskExecuter 中派生出自己的对象。Flexsim的早期版本中从这两个类中派生新的对象比较复杂,最新的 3.06 版中增加了 BasicFR 和BasicTE 类,使用户的开发工作更容易。后面的章节中将具体介绍怎样来实现一个新对象的定制。5.2.3 节点和树在介绍树结构之前,我们先来了解 Flexsim 中节点(node)的概念。节点是树结构的最基本的组成单元,他们组成了链接的层次。所有的节点都有一个文本缓冲区

34、,用来保存节点的名字。节点可以是其他节点的容器,可以是用来定义一个对象属性的关键字,或是拥有一个数据项。属于一个节点的数据项类型可能是:数值(number) ,字符串( string) ,对象(object) ,或指针(pointer) 。下面列出 FLexsim 中不同类型的节点标志:标准(Standard ):对象(Object):属性/变量( Attribute/Varibale):函数(Function(C+)):函数(Function(FlexScript)):用户可以在对象的树结构中任意地操作节点,例如增加节点,删除节点,改变节点所包含的值等。含有对象数据(Object)的节点可能

35、包含有节点的子列表。含有对象数据的节点称之为对象节点。当你单击一个对象节点 时,你会看到在节点的左边有一个大于号( ) 。单击将打开对象数据的树分支。如果一个节点包含子节点,可以按下+按钮来展开。如果一个节点包含对象数据,可以按下来展开。下图(图 5-3)展示了一个队列(Queue)展开的对象数据树。图 5-3树结构(tree)是一种很常用的数据结构。Flexsim 仿真模型中的对象,或对象中的属性和方法节点等都是树结构;用户甚至可以直接在树结构中操作对象。在 Flexsim 中有两个主要的对象类型:模型(Model)或仿真对象(Simulation Object)和视图对象(View Obj

36、ect) 。两种类型都有对象数据树,包含了属性和行为控件。一个对象节点的对象数据树中的节点可以作为属性、变量或成员函数。也有只是作为简单的容器来包含节点以达到组织的目的。5.2.4 任务序列任务序列(Task Sequences)是 Flexsim 仿真软件中的核心机制。各种复杂仿真的实现很大程度取决于怎样实现任务序列。前面介绍了 Flexsim 中有两种对象,一种是派生至FixedResource 的静态对象(即对象本身不运动) ;另一种是派生至 TaskExecuter 的动态对象(即对象本身可运动) 。如果用户建立的系统模型全部使用了静态对象,那么就不需要任务序列的机制,但是这种情况几乎

37、没有。使用动态对象搬运物件,对象怎样运动,实现什么样的功能等,这就需要任务序列来控制。任务序列是由 TaskExecuter 执行的一组命令序列。这里 TaskExecuter 涵盖了所有派生自他的动态对象,如 Operators,Transpoters,Crane,ASRSvehicle,Robots ,Elevators 以及其他可运动的对象。图 1-4 表示一个任务序列,该任务序列有多个任务组成。P1 P2 Task1 Task2 Task3 Task4 Simulation TimeP1: Priority ValueP2: Preempt Value图 1-4Flexsim 中为用户

38、提供了功能齐备的任务类型。常用的任务序列有:TASKTYPE_TRAVEL、TASKTYPE_LOAD、TASKTYPE_UNLOAD、TASKTYPE_TRAVELTOLOC 等。不同的任务序列有不同的设置参数,用户可以根据需要在使用的时候查询帮助文档。5.2.4.1 默认任务序列FixedResource 为了将物件(item)移至下一个站点(station) ,有一个创建任务序列的默认机制。FixedResource 对象的参数对话框中一个通用的 “Flow”选项页,选择其中的“Use Transport”复选框,这样就可创建默认的任务序列。对于 Processor 对象,还可以自动创建

39、对 Setup time/Process time/Repair operation 的任务序列。当仿真运行时,这些自动创建的任务序列就会传递给与其中心端口相连的动态对象来执行。这里给个简单的例子说明。假设用户选择了 Queue 对象参数对话框的“Flow”选项页中的“Use Transport”复选框,当系统运行时,产生了如下任务序列:P1 P2 Travel Load Break Travel Unload当 Operator 收到该任务序列时,顺序地执行任务序列中的每个任务,执行过程如下:Operator 先移动到 Queue 处(Travel) ;接着拿起物件(Load) ;然后移动到

40、下一个站点处(Travel ) ;最后放下物件( Unload) 。在仿真运行的任意时刻,一个 TaskExecuter 只能执行一个任务序列,而此时FixedResource 可能创建了许多任务序列,这些未执行的任务序列被放置在缓存队列中等待执行。5.2.4.2 定制任务序列一般情况下,默认的任务序列就可以满足仿真要求。有时候用户需要为某些特定的工艺、多个设备的组合操控灯定制任务序列。这里分三种介绍定制任务序列,第一种是创建最简单的、只分配给一个对象执行的任务序列;第二种是由多个对象协同作业的任务序列。 定制简单任务序列使用 3 条命令来创立任务序列,命令执行的顺序如下:createempt

41、ytasksequence();inserttask();dispatchtasksequence();从函数名就可以看出创建任务序列的过程。首先创立一个空的任务序列,然后在此任务序列中插入具体的任务,最后发布该任务序列。我们举个简单的例子,叉车运动到集装箱旁边,然后装载集装箱。在这个过程中,涉及了两个任务:运动(TASKTYPE_TRAVEL)和装载( TASKTYPE_LOAD) 。具体实现如下:fsnode* new_ts = createemptytasksequence(forklift, 0, 0);inserttask(new_ts, TASKTYPE_TRAVEL, stati

42、on);inserttask(new_ts, TASKTYPE_LOAD, item, station, 2);dispatchtasksequence(new_ts);这里叉车(forklift)是任务序列的执行者,我们为其创建了一个新任务序列(new_ts) ,在此任务序列中插入具体的任务(TRAVEL/LOAD ) ,最后发布任务序列。我们在创建新任务序列时,createemptytaskseqence 函数的第一个参数 forklift 可以是该任务序列的执行者,或者是 Dispatcher 对象。关于 Dispatcher 对象的作用下一小节有具体的介绍。后两者参数决定了该任务序列的

43、优先级别,我们可以根据任务的紧急程度来定义任务序列的执行顺序。Inserttask 函数插入具体的任务类型。第一个参数表示该任务所属的任务序列。前面提过不同的任务类型有着不同的代码,以及不同的参数选择。这些参数分别是:Task Type/involved1/involved2/var1/var2/var3,有些参数是选择性的,这要根据任务类型来决定。这里以 TASKTYPE_LOAD 为例,图 1-5 表示了不同参数的意义。用户可以根据所示规则查询具体的任务的参数选项。P1 P2 TRAVEL LOADTask Type: LOADInvoloved1: bject to load itemI

44、nvoloved2 : object to load from stationVar1 : output port 2Var2 : 0 (默认值)Var3 : 0 (默认值)图 1-5 任务 Load 的参数含义 协同作业的任务序列协同作业的情况有很多,比如叉车作业需要一个司机来操控,或者一件物品需要两个人来同时搬运等。在 Flexsim 中叉车、人都是可运动对象,要实现协同作业的任务序列相对于只对一个对象创建任务序列要复杂许多。我们以叉车和司机的协同工作为例来说明怎样实现协同作业的任务序列。我们先来分解任务的执行过程:1)人运动到叉车上(Travel) ;2)人进入驾驶室(这里是叉车的动作)

45、 (Load) ;3 )叉车运动到指定地点(Travel ) ;4)叉车装载货物(Load) ;5)叉车运动到卸载点(Travel ) ;6)卸载货物(Unload) 。图 1-6 是叉车和人的任务序列。P P Wait Load Travel Load Travel UnloadP P Travel to forklift WaitForkliftOperatort图 1-6 协同任务序列从图中可以看出,叉车在人到达之后才执行任务,人进入叉车之后就随着叉车一起完成叉车的任务。人的任务序列中只有一个任务,其他时间不做任何事情。在 Flexsim 中实现的代码要复杂一些,调用的函数与前面所讲的函

46、数不同。涉及的函数主要有:createcoordinatedtasksequence();insertallocatetask();insertproxytask();insertsynctask();insertdeallocatetask();dispatchcoordinatedtasksequence();一个协同作业的任务序列的定制是很复杂,也是很容易出错的。在开始实现之前必须分析清楚作业的过程。对于前面人操控叉车的例子我们已经将作业流程分析清楚了,下面是具体的实现,我将每个函数的功能写在程序的注释当中。/创建协同任务序列fsnode * myts = createcoordinat

47、edtasksequence(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);/叉车的分派任务序列insert

48、proxytask(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(m

49、yts, forkliftkey, TASKTYPE_UNLOAD, item, unloadstation);/释放分派的任务序列insertdeallocatetask(myts, forkliftkey);insertdeallocatetask(myts, opkey);/发布协同任务序列dispatchcoordinatedtasksequence(myts);5.2.4.3 对象 Dispatcher 及任务序列的分配规则现在考虑一种较为复杂的情况:有两个 Queue 对象用于存放物件,三个 Operator 对象用于搬运物件;三个 Operator 是自由的,没有被分配给固定的 Queue,那么怎样来有效地调用这三个 Operator 呢?此时就要用到 Dispatcher 对象。Dispatcher 用来控制一组 Transporter 或 Operator。任务序列从一个静态对象发送到Dispatcher,然后 Dispatcher 来调配这些任务序列分配给与其输出端口相连的动态对象。动态对象接收到任务序列后执行相应的命令序列。D

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报