2022年Flexsim中的重要概念及开发技术.pdf
《2022年Flexsim中的重要概念及开发技术.pdf》由会员分享,可在线阅读,更多相关《2022年Flexsim中的重要概念及开发技术.pdf(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Flexsim 中的重要概念及开发技术第五章Flexsim 相关的概念及关键技术研究5、1 Flexsim 软件介绍Flexsim 就是由美国的Flexsim Software Production 公司出品的 ,就是一款 商业化离散事件系统仿真软件。Flexsim 采用面向对象技术,并具有三维显示功能。建模快捷方便与显示能力强大就是该软件的重要特点。该软件体供 了原始数据拟合、 输入建模、 图形化的模型构建、虚拟现实显示、运行模型进行仿真试验、对结果进行优化、生成3D 动画影像文件等功能,也提供了与其她工具软件的接口。图5-1 就是 Flexsim 软件及其构成模块的结构图7。图 5-1 F
2、lexsim 功能结构图Flexsim 提供了仿真模型与ExpertFit 与 Excel 的接口 ,用户可以同过ExperFit 对输入数据进行分布拟合 ,同时可以在Excel 中方面地实现与仿真模型之间的数据交换,包括输出与运行模型过程中动态修改运行参数等。另外该软件还提供了优化模块Optquest,增加了帮助迅速建模的 Microsoft Visio的接口 。5、1、1 Flexsim 软件的主要特点Flexsim 仿真软件的特点主要体现在采用面向对象技术,突出 3D 显示效果 ,建模与调试简单开放方便 ,模型的扩展性强,易于与其她软件配合使用等方面。(1)基于面向对象技术建模Flexs
3、im 中所有用来建立模型的资源都就是对象,包括模型、 表格、记录、 GUI 等。同时 ,用户可以根据自己行业与领域特点,扩展对象 ,构建自己的对象库。面向对象的建模技术使得Flexsim 的建模过程生产线化,对象可以重复利用,从而减少了建模人员的重复劳动。(2)突出的 3D 图形显示功能Flexsim 支持 OpenGL 技术 ,也支持 3ds、wrl 、dxf 与 stl 等文件格式。因此用户可以建立逼真的模型 ,从而可以帮助用户对模型有一个直观的认识,并帮助模型的验证。用户可以在仿真环境下很容易地操控3D 模型 ,从不同角度、放大或缩小来观测。ExpertFit 等拟与分布工具Excel
4、等可以用作统计分析的工具模型建立与调试模型有效性确认运行仿真试验3D的可视化结果动态显示生成影像文件Flexsim 仿真软件Microsoft Visual C+ 、 NET 输入建模系统仿真运行仿真试验结果统计分析精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 21 页 - - - - - - - - - - Flexsim 中的重要概念及开发技术(3)建模与调试的方便建模过程中用户只需要从模型库中拖入已有的模型,根据模型的逻辑关系进行连接,然后设定不同对象的属性。建模的工作简单快捷,不需要
5、编写程序。(4)建模的扩展性强Flexsim 支持建立用户定制对象,融合了 C+编程。用户完全可以将其当作一个 C+的开发平台来开发一定的仿真应用程序。(5)开放性好提供了与外部软件的接口,可以通过 ODBC 与外部数据库相连,通过 socket接口与外部硬件设备相连 ,与 Excel、Visio 等软件配合使用。5、2 Flexsim 的一些重要概念Flexsim 就是目前国内最新的仿真软件,关于该软件的资料与使用经验还很少。作者就是在不断的摸索中学习的,所以希望本文能对其她人有一定的借鉴。要完全掌握好Flexsim,并将其用到我们的工作、学习与研究当中,理解该软件的一些重要概念与思想就是很
6、重要的,本节针对集装箱码头建模仿真中用到的技术做一个梳理。5、2、1 面向对象的思想相对于目前的一些仿真软件(如 Witness, eM-Plant 等),Flexsim 就是采用面向对象思想与技术开发的 ,其本身更就是用C+语言实现。严格地说该仿真软件包括了两部分,仿真软件与后台支持环境VC+ 、NET 。 由于 C+就是一种面向对象的语言,所以使用Flexsim 软件 ,从用户用于系统建模,或就是做一些二次开发,这些工作都有面向对象思想的体现。可以这样说,没有领会面向对象的思想,就不能完全发挥Flexsim 软件本身的特点,也就不能用其实现用户的目的。使用Flexsim 软件的用户需要对C
7、+语言有一定程度的熟悉。本节主要就是解释Flexsim 中所特有的一些面向对象思想,而不涉及面向对象语言的解释(关于 C+语言的知识请查瞧相关书籍)。对象 (Object)的概念在Flexsim 软件中无处不在,我们先直观的感受一下。软件的运行界面左边就是一个常用的对象库(如图 5-1)。库中的各种部件就就是有特定功能的对象,这些对象就是软件本身自带的,使用这些基本的部件对象用户可以完成大多数的仿真工作。我们使用 Processor 来解释一下对象的概念:我们 日常所见的任何具体事物都可瞧作就是对象,这里Processor 就就是一种设备,它的作用就就是对经过她的物件进行一些加工,即改变物件的
8、状态。这里我们可以将其当作现实中的设备,如机床等。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 21 页 - - - - - - - - - - Flexsim 中的重要概念及开发技术图 5-1 这里我们借用C+程序设计语言中的对象的概念。对象就是类的实例,类就是对现实对象的抽象。类中包含了对象的数据(相当于现实对象的状态),以及对象的方法(相当于现实对象用来处理外界所给信息的方法)。对象封装了属性与方法,进一步到Flexsim 中 ,对于软件中可用的库对象 ,她们本身有 自己的属性 (如颜
9、色 ,尺寸 ,位置等 ),还有处理物件的方法。在使用软件的过程中 ,我们完全可以以人们平时的思维方式来思考,而无须过多的抽象化,这也就就是面向对象方法的优点。5、2、2 Flexsim 的对象层次结构面向对象方法的一个优点就是类与类之间可以有继承关系,对象的继承性给我们提供了更大的柔性来扩展我们自己的对象,即衍生出新的对象。 在 Flexsim 中我们可以充分利用继承性来开发我们自己的对象,而软件本身也给用户提供了这样的机制。Flexsim 本身的库对象就是高度抽象化的,具有很强的通用性,几乎涵盖了仿真中可能遇到的所有对象。这些对象之间有一定的继承关系,她们之间存在着逻辑关系。下图 (图 5-
10、2)就是 Flexsim 中对象的层次结构。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 3 页,共 21 页 - - - - - - - - - - Flexsim 中的重要概念及开发技术从类的派生关系图中我们可以对Flexsim 中各种对象的逻辑关系一目了然。对象库中的对象分为两种 ,一种就是从 FixedResource 中派生下来的,另一种就是TaskExecuter中派生下来的。 通过分析我们不难发现,从 FixedResource 中派生来的对象有一个共同的特点,其本身就是不会运动的 ,她们
11、的作用只就是产生或消除物件、存储物件、加工物件等等;从 TaskExecuter中派生的对象 ,其本身就是可以运动的,其作用 就是将物件从一个地点运送到另一个地点。当现有的库对象不能满足用户的需要时,用户就需要创建自己的对象。Flexsim 为用户提供了这样一种机制用户可以定制自己的库对象。在对象层次图中,我们瞧到有两个虚线框,这表示用户可以从FixedResource 与 TaskExecuter 中派生出自己的对象。Flexsim 的早期版本中从这两个类中派生新的对象比较复杂,最新的 3、06 版中增加了BasicFR 与 BasicTE类,使用户的开发工作更容易。后面的章节中将具体介绍怎
12、样来实现一个新对象的定制。5、2、3 节点与树在介绍树结构之前,我们先来了解Flexsim 中节点 (node)的概念。节点就是树结构的最基本的组成单元,她们组成了链接的层次。所有的节点都有一个文本缓冲区 ,用来保存节点的名字。节点可以就是其她节点的容器,可以就是用来定义一个对象属性的关键字 ,或就是拥有一个数据项。属于一个节点的数据项类型可能就是:数值 (number),FlexsimObject FixedResource Dispatcher Navigator NetworkNode Source Queue Sink Conveyor Rack Reservoir FixedSour
13、ceTemplate Processor TaskExecuter Combiner Separator Operator Transpoter Crane ASRSvehicle NetworkNavigator CraneNavigator BasicTE BasicRF 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 21 页 - - - - - - - - - - Flexsim 中的重要概念及开发技术字符串 (string),对象 (object),或指针 (pointer) 。下面
14、列出 FLexsim中不同类型的节点标志: 标准 (Standard): 对象 (Object): 属性 / 变量 (Attribute/Varibale): 函数 (Function(C+): 函数 (Function(FlexScript): 用户可以在对象的树结构中任意地操作节点,例如增加节点,删除节点 ,改变节点所包含的值等。含有对象数据(Object) 的节点可能包含有节点的子列表。含有对象数据的节点称之为对象节点。当您单击一个对象节点时,您会瞧到在节点的左边有一个大于号() 。单击 将打开对象数据的树分支。如果一个节点包含子节点,可以按下 +按钮来展开。 如果一个节点包含对象数据
15、,可以按下 来展开。下图 ( 图 5-3)展示了一个队列(Queue)展开的对象数据树。图 5-3树结构 (tree)就是一种很常用的数据结构。Flexsim 仿真模型中的对象,或对象中的属性与方法节点等都就是树结构;用户甚至可以直接在树结构中操作对象。在 Flexsim 中有两个主要的对象类型 :模型 (Model) 或仿真对象 (Simulation Object)与视图对象 (View Object)。两种类型都有对象数据树,包含了属性与行为控件。一个对象节点的对象数据树中的节点可以作为属性、变量或成员函数。也有只就是作为简单的容器来包含节点以达到组织的目的。5、2、4 任务序列任务序列
16、 (Task Sequences)就是 Flexsim 仿真软件中的核心机制。各种复杂仿真的实现很大程度取决于怎样实现任务序列。前面介绍了Flexsim中有两种对象,一种就是派生至FixedResource 的静态对象 (即对象本身不运动);另一种就是派生至TaskExecuter 的动态对象(即对象本身可运动)。 如果用户建立的系统模型全部使用了静态对象,那么就不需要任务序列的机制 ,但就是这种情况几乎没有。使用动态对象搬运物件,对象怎样运动,实现什么样的功能等,这就需要。任务序列就是由TaskExecuter 执行的一组命令序列。这里 TaskExecuter 涵盖了所有派生自她的动态对象
17、,如 Operators,Transpoters,Crane,ASRSvehicle,Robots,Elevators以及其她可运动的对象。图1-4 表示一个任务序列,该任务序列有多个任务组成。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 5 页,共 21 页 - - - - - - - - - - Flexsim 中的重要概念及开发技术图 1-4 Flexsim中 为 用 户 提 供 了 功 能 齐 备 的 任 务 类 型 。 常 用 的 任 务 序 列有:TASKTYPE_TRA VEL、TASKT
18、YPE_LOAD、TASKTYPE_UNLOAD、TASKTYPE_TRA VELTOLOC等。不同的任务序列有不同的设置参数,用户可以根据需要在使用的时候查询帮助文档。5、2、4、1 默认任务序列FixedResource 为了将物件 (item) 移至下一个站点(station),有一个创建任务序列的默认机制。 FixedResource 对象的参数对话框中一个通用的“Flow ”选项页,选择其中的“Use Transport”复选框 ,这样就可创建默认的任务序列。对于Processor 对象 ,还可以自动创建对Setup time/Process time/Repair operatio
19、n 的任务序列。当仿真运行时 ,这些自动创建的任务序列就会传递给与其中心端口相连的动态对象来执行。这里给个简单的例子说明。假设用户选择了Queue 对象参数对话框的“Flow”选项页中的“ Use Transport”复选框 ,当系统运行时 ,产生了如下任务序列: 当 Operator 收到该任务序列时,顺序地执行任务序列中的每个任务,执行过程如下 :Operator 先移动到Queue 处 (Travel); 接着拿起物件(Load); 然后移动到下一个站点处(Travel); 最后放下物件 (Unload)。在仿真运行的任意时刻,一个 TaskExecuter 只能执行一个任务序列,而此时
20、 FixedResource可能创建了许多任务序列,这些未执行的任务序列被放置在缓存队列中等待执行。5、2、4、2 定制任务序列一般情况下 ,默认的任务序列就可以满足仿真要求。有时候用户需要为某些特定的工艺、多个设备的组合操控灯定制任务序列。这里分三种介绍定制任务序列,第一种就是创建最简单的、只分配给一个对象执行的任务序列;第二种就是由多个对象协同作业的任务序列。定制简单任务序列使用 3 条命令来创立任务序列,命令执行的顺序如下: createemptytasksequence( ); inserttask(); dispatchtasksequence(); 从函数名就可以瞧出创建任务序列的
21、过程。首先创立一个空的任务序列,然后在此任务序列中插入具体的任务,最后发布该任务序列。我们举个简单的例子,叉车运动到集装箱旁边,然后装载集装箱。在这个过程中,涉及了两个任务:运动 (TASKTYPE_TRA VEL) 与装载P1 P2 Travel Load Break Travel Unload P1 P2 Task1 Task2 Task3 Task4 Simulation Time P1: Priority Value P2: Preempt Value 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -
22、第 6 页,共 21 页 - - - - - - - - - - Flexsim 中的重要概念及开发技术(TASKTYPE_LOAD)。具体实现如下: fsnode* new_ts = createemptytasksequence(forklift, 0, 0); inserttask(new_ts, TASKTYPE_TRA VEL, station); inserttask(new_ts, TASKTYPE_LOAD, item, station, 2); dispatchtasksequence(new_ts); 这里叉车 (forklift) 就是任务序列的执行者,我们为其创建了一个
23、新任务序列(new_ts),在此任务序列中插入具体的任务(TRAVEL/LOAD),最后发布任务序列。我们在创建新任务序列时,createemptytaskseqence函数的第一个参数forklift可以就是该任务序列的执行者,或者就是 Dispatcher 对象。关于 Dispatcher 对象的作用下一小节有具体的介绍。后两者参数决定了该任务序列的优先级别,我们可以根据任务的紧急程度来定义任务序列的执行顺序。Inserttask 函数插入具体的任务类型。第一个参数表示该任务所属的任务序列。前面提过不 同的任务类型有着不同的代码 ,以及不同的参数选择。这些参数分别就是 :Task Type
24、/involved1/involved2/var1/var2/var3,有些参数就是选择性的,这要根据任务类型来决定。这里以 TASKTYPE_LOAD为例,图 1-5 表示了不同参数的意义。用户可以根据所示规则查询具体的任务的参数选项。图 1-5 任务 Load 的参数含义协同作业的任务序列协同作业的情况有很多,比如叉车作业需要一个司机来操控,或者一件物品需要两个人来同时搬运等。 在 Flexsim 中叉车、 人都就是可运动对象,要实现协同作业的任务序列相对于只对一个对象创建任务序列要复杂许多。我们以叉车与司机的协同工作为例来说明怎样实现协同作业的任务序列。我们先来分解任务的执行过程:1)人
25、运动到叉车上(Travel);2) 人进入驾驶室(这里就是叉车的动作 )(Load);3) 叉车运动到指定地点(Travel);4) 叉车装载货物(Load);5) 叉车运动到卸载点(Travel);6) 卸载货物 (Unload) 。图 1-6 就是叉车与人的任务序列。P1 P2 TRAVEL LOAD Task Type: LOAD Involoved1: bject to load item Involoved2 : object to load from station Var1 : output port 2 Var2 : 0 (默认值 ) Var3 : 0 (默认值 ) 精品资料
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022 Flexsim 中的 重要 概念 开发 技术
限制150内