Flexsim消息机制
资料:5 仿真软件Flexsim简介
第五章仿真软件Flexsim简介5.1 什么是Flexsim?Flexsim是一个强有力的分析工具,可帮助工程师和设计人员在系统设计和运作中做出正确地决策。
使用Flexsim可以建立一个真实系统的3D计算机模型,然后用更短的时间或者更低的成本来研究该系统。
作为一个“what-if”分析工具,Flexsim就多个备选方案提供大量反馈信息,来帮助用户迅速从多个方案中找到最优方案。
在Flexsim的逼真图形动画显示和完整的运作绩效报告支持下,用户可以在短时间内识别问题并对可选方案做出评估。
在系统建立之前,使用Flexsim来建立系统的模型,或在系统真正实施前试验其运作策略,可以避免在启动新系统时经常会遇到的很多问题。
以前需要花费几个月甚至几年时间来进行查错试验以对系统进行改进,现在使用Flexsim可以在几天甚至几小时内取得相同的成绩。
Flexsim是一款离散事件仿真软件程序。
这意味着它被用来对这样一类系统建模,这类系统根据特定事件发生的结果在离散时间点改变系统状态。
一般而言,系统状态可分为空闲、繁忙、阻塞或停机等,事件则有用户订单到达、产品移动、机器停机等。
离散仿真模型中被加工的实体通常是物理产品,但也可能是用户、文书工作、绘图、任务、、电子信息等等。
这些实体需要经过一系列的加工、等待和运输步骤,即所谓的工艺流。
加工过程中的每一步都可能需要占用一个或多个资源,例如机器、输送机、操作员、车辆或某种工具。
这些资源有些是固定的,有些是可移动的。
一些资源是专门用于特定任务的,另一些则可以用于多个任务。
Flexsim是一个通用工具,已被用来对若干不同行业中的不同系统进行建模。
Flexsim已被大小不同的企业成功地运用。
粗略估计, 500家《财富》企业中大约一半是Flexsim的客户,包括一些著名的企业如General Mills, Daimler Chrysler, Northrop Grumman, Discover Card, DHL, Bechtel, Bose, Michelin, FedEx, Seagate Technologies, Pratt & Whitney, TRW 和 NASA。
Flexsim教程基础知识PPT教案
FlowItem:临时实体库 Tree:打开模型树 Ortho:打开模型正投影视图 Persp:打开模型透视图
8
8
离散事件仿真
只考虑在离散的时间点瞬间发生的改变状态的重 要事件
事件包括:
订单到达 零件加工完成 库存量下降到下限
状态包括
机器:空闲、加工、故障 车辆:行进、装货、卸货
易于捕捉问题的随机本 质
难以捕捉复杂因果关系
能够详细描述模型中的
难以建立与时间相关的约
行为
束
可以测量各种量
不能随时间运行模型
建立模型需要更多的时
间和技巧
6
Flexsim软件主窗口布局
Flexsim软件主窗口由下面五部分构成
菜单 工具栏 对象库 模型视图 仿真控制栏
7
7
工具栏
9
统计分布函数
指数分布
正态分布
Lognormal分布
Gamma分布
10
Flexsim仿真模型的基本组成
对象(Objects)
Flexsim采用对象对实际过程中的各元素建模
连接(Connections)
Flexsim中通过对象之间的连接定义模型的流程
方法(Methods)
对象中的方法定义了模型中各对象所需要完成的作业
仿真是工程师、经理和决策人对有关操作、流程、或是动态系统的方案进行试 验、评估、以及视觉化的工具。
3
什么是模型
为解决特定问题,对真实系统进行抽象和 简化的产物
只包含真实系统中,解决问题所必需的元 素
4
系统仿真技术的必要性
现实系统
模型化
仿真模型
成本高 业计划务停时止的间可长能性大实 验
Flexsim教程基础知识
• Flow Method
– Determines how, where, and when to move FlowItems through the model
• Navigation Method
– Model navigation, and fly through
• FlowItem Bin Method
35
步骤2. 定义对象流程 (续1)
• 连接两个对象端口所需按键
– ―a‖键
• 用来将对象1的输出端口连接到对象2的输入端口上
– ―q‖键
• 用来取消对象1的输出端口与对象2的输入端口之间的连接
– ―s‖键
• 用来连接对象1与对象2的中心端口
– ―w‖键
• 用来取消对象1与对象2的中心端口的连接
36
平面视图和树结构视图32无论对象在模型布局中处于什么位置实体从一个对象被传递到下一个对象都无需消耗任何时间添加输送机或移动资源用于运输可以给实体流产生时间延迟对象间的运送时间取决于对象间的距离以及移动资源的速度加速度和减速度33flexsim分析仿真结果3334将仿真所需要的对象模型从对象库中拖拽到仿真视图窗口中的适当位置3435根据连接类型按下a或s键的同时用鼠标从一个对象拖拉到另一个对象上以连接二者35在452版本中也可通过鼠标选择来进行连接36用来取消对象1与对象2的中心端口的连接3637各类端口连接的显示位置输出端口显示在对象的右上角输入端口显示在对象的左上角中心端口显示在对象底部中心3738删除端口连接3839用于编辑和察看所有对象共同的一般性的信息双击对象可以打开对象的参数对话框40数据图表41属性选项中可以定义对象的位置尺寸和转角此外在模型窗口中也可以实现勾选菜单栏中editresizerotationobjects右键拖动箭头进行旋转42每个对象类有自己的参数选项参数影响实体在对象中的停留时间和在对象间流动的线路apply应用使改变生效ok确定使改变生效并关闭窗口cancel取消关闭窗口不做改变properties打开对象的属性窗口43每个固定资源对象都有flow流和triggers触发器项44代码编辑修改c代码45运行仿真45注
flexsim常用函数
Flexsim常用函数的使用方法基本建模函数和逻辑表达式这里给出Flexsim中常用命令的快捷参考。
参见命令集可获取更多有关这些命令的详细信息。
实体参量下列的命令和存取变量在Flexsim中被用作实体引用。
变量current和item∙current -变量current是当前资源实体的引用。
通常可以是下拉菜单中的一个存取变量。
∙Item -变量item是某触发器或函数所涉及的临时实体引用。
通常可以是下拉菜单中的一个存取变量。
引用命令实体属性实体空间属性实体标签表实体控制高级函数实体变量参见任务序列,可以获得更多有关控制任务执行器的信息。
提示和界面输出更多高级函数下面是可能使用到的更多高级函数。
这里没有提供参数列表,参见命令集可获得更多信息。
节点命令- node(), nodeadddata(), getdatatype(), nodetopath(), nodeinsertinto(), nodeinsertafter(), getnodename(), setnodename(), getnodenum(), getnodestr(), setnodenum(), setnodestr(), inc();数据交换命令- stringtonum(), numtostring(), tonum(), tonode(), apchar();节点表命令- setsize(), cellrc(), nrows(), ncols();模型运行命令- cmdcompile(), resetmodel(), go(), stop();3D个性化绘制代码命令- drawtomodelscale(), drawtoobjectscale(), drawsphere(), drawcube(), drawcylinder(), drawcolumn(), drawdisk(), drawobject(), drawtext(), drawrectangle(), drawline(), spacerotate(), spacetranslate(), spacescale();Excel命令- excellaunch(), excelopen(), excelsetsheet(), excelreadnum(), excelreadstr(), excelwritenum(), excelwritestr(), excelimportnode(), excelimporttable(), excelclose(), excelquit();ODBC命令- dbopen(), dbclose(), dbsqlquery(), dbchangetable(), dbgetmetrics(), dbgetfieldname(), dbgetnumrows(), dbgetnumcols(), dbgettablecell(), dbsettablecell();运动学命令- initkinematics(), addkinematic(), getkinematics(), updatekinematics(), printkinematics()。
flexsim中级培训
1、函数
functionname(argument1, argument2, etc);
首先键入函数的名称,后面跟前括号;然后键 入函数的参数,参数之间用逗号隔开,每个参 数都可以是变量、表达式或者甚至也可以是另 一个命令;用后括号结束命令,并以分号结尾。 注意:必须为英文输入法下输入。
22
• 参数可以是: – 数值型的值 – 字符串(“Text”) – 引用的一个实体或者节点
29
数组变量的声明
fillarray(weights, 3.5, 6.7, 1.4); // fillarray is a quick way of setting the array values stringarray fruits = makearray(2); fruits[1] = "Orange"; fruits[2] = "Watermelon"; treenodearray operators = makearray(4); operators[1] = centerobject(current, 1); operators[2] = centerobject(current, 2); operators[3] = centerobject(current, 3); operators[4] = centerobject(current, 4);
• 使用 查看实体属性节点 • 如果节点包含子节点,使用 展开并查看子
节点
7
• Tree视图中,在已存在的节点上单击右键,选 在“Node/Insert After”可以插入节点,或者先选 中节点单击空格键
• 分别可以用N、T、 O快捷键,在选定之 后改变节点分别为: 数字、字符串(文 本)、实体
Flexsim资料-触发器 (1)
Flexsim基础丨触发器触发器是实体对象自带的一套用于触发命令执行的机制,。
每一个实体对象都有自己的一套触发器,不同的触发器,其自身的触发机制也是不一样的。
如发生器的创建触发,暂存区的收集结束触发,处理器的加工结束触发,执行器的装卸载触发等。
触发器的种类很多【详细了解可查阅用户手册:触发器】,这里我们以处理器为例简单地介绍一下触发器的触发机制以及触发顺序。
关.注微.信丨公丨众丨号:Fx20160720,flexsim仿真了解更多flexsim仿真内容。
【构建一个简单模型】将发生器的到达时间间隔设置为10;将处理器的预置时间设置为10;处理器的加工时间设置为20;【处理器的触发器】【设置7个标签对应每个触发器】设置标签的目的是为了统计各触发器触发的时间,通过标签值的大小来判断各触发器的触发顺序。
【触发器的触发代码】重置触发:每次点击重置按钮时触发,使各标签值重置为0(注意重置触发不是在运行过程中触发的);setlabelnum(current,"重置触发",0);setlabelnum(current,"消息触发",0);setlabelnum(current,"进入触发",0);setlabelnum(current,"离开触发",0);setlabelnum(current,"预置结束触发",0);setlabelnum(current,"加工结束触发",0);setlabelnum(current,"自定义绘图代码触发",0);消息触发:当收到消息时触发(消息可由实体本身或其他实体在任何时候任何地方发送),在此模型中,在进入触发发送一条消息,“消息触发”标签值记录进入触发那一刻的时间;setlabelnum(current,"消息触发",time());进入触发:当临时实体进入处理器时触发;setlabelnum(current,"进入触发",time());senddelayedmessage(current,5,current,1,0,0);//处理器自身给自己发送一条延迟5秒的消息离开触发:当临时实体离开处理器时触发setlabelnum(current,"离开触发",time());预置结束触发:当处理器的预置时间结束触发(处理器的预置时间设置为10);setlabelnum(current,"预置结束触发",time());加工结束触发:当处理器的加工时间结束触发(处理器的加工时间设置为20);setlabelnum(current,"加工结束触发",time());自定义绘图代码触发:当模型开始运行时触发setlabelnum(current,"自动义绘图代码触发",time());【标签值的统计结果】处理器加工一个临时实体后收集的各个标签值数据;【现在来理下整个的时间顺序】1、发生器的产生时间是10,产生后马上发送到处理器;由于实体间的传输在没有执行器的情况下传输时间为0,上图中“进入触发”的标签值为10,说明“进入触发”是第一个触发;2、进入触发后发生了一条延迟5的消息,“消息触发”标签值为15,所以“消息触发”是第二个触发;3、“预置结束触发”标签值为20,预置时间为10,说明进入后处理器后马上执行预置,预置结束后触发,所以“预置结束触发”是第三个触发;4、“加工结束触发”和“离开触发”的标签值均为40,说明两者是同时触发的,也就是说当加工结束马上就离开。
Flexsim系统仿真软件概况
Flexsim系统仿真软件概况1 Flexsim系统仿真软件概况Flexsim 是PC Base的数字虚拟企业的仿真系统,来建立各种经营、管理、制造等模型,并且可在微软公司的Windows 2000、Windows XP、及Vista 等不同作业平台上执行的全窗口化3D专业仿真软件。
Flexsim是新一代的面向对象的仿真建模工具,它是迄今为止世界上唯一一个在图形建模环境中集成了C++IDE和编译器的仿真软件。
在这个软件环境,C++不但能够直接用来定义模型,而且不会在编译中出现任何问题。
这样就不再需要传统的动态链接库和用户定义变量的复杂链接。
它能使决策者轻易地在个人电脑中建构及监控任何工业及企业的分散式流程。
透过Flexsim我们可以率先找出未来工业及企业流程的模式。
Flexsim基础架构设计不只是要满足使用者现今的需求,其架构的概念更是为了企业的未来而准备。
Flexsim就是帮助工程师,经理和决策者形象化地在动态三维虚拟现实环境中检测新提议的操作,流程或是系统。
这对于创建那些可能出现崩溃,发生中断或是产生瓶颈的复杂系统是必不可少的。
通过预先创建系统模型,可以考察各种假设的场景,同时不会产生改变实际系统时所面临的中断,成本和风险。
Flexsim不仅已应用于工业自动化仿真、物流中心配送仿真、交通运输仿真、交通流量管制仿真、医疗管理研究、医院动线规划仿真等民用工程,也已经应用于先进国防战略仿真、航天制程仿真等大型研究方向。
主要的应用领域:制造业:半导体芯片制造、肉食包装工厂中的牛肉处理、钢铁制造、果酱成品的罐装,标签,包装,发货、电子器件制造、仓储和配送:港口集装箱船只的装卸、配送中心操作、订单取货、传输带系统和布局、物流货架、传送带和堆垛机。
运输:高速路交界处的交通流、火车站中人群和列车的移动、河流中驳船的往来穿梭、国际边防路口的交通堵塞其他:矿石开采和加工、快餐店中食物准备和客户服务、参观者在娱乐场所内的活动、喷气式飞机引擎的拆卸,翻新和更换、医院中病人和食物的处理、共享的网络存储器中数据的流动、银行处理中心中支票的处理。
flexsim中的重要概念及开发技术
第五章 Flexsim 相关的概念及关键技术研究5.1 Flexsim 软件介绍Flexsim 是由美国的Flexsim Software Production 公司出品的,是一款商业化离散事件系统仿真软件。
Flexsim 采用面向对象技术,并具有三维显示功能。
建模快捷方便和显示能力强大是该软件的重要特点。
该软件体供了原始数据拟合、输入建模、图形化的模型构建、虚拟现实显示、运行模型进行仿真试验、对结果进行优化、生成3D 动画影像文件等功能,也提供了与其他工具软件的接口。
图5-1是Flexsim 软件及其构成模块的结构图[7]。
图5-1 Flexsim 功能结构图Flexsim 提供了仿真模型与ExpertFit 和Excel 的接口,用户可以同过ExperFit 对输入数据进行分布拟合,同时可以在Excel 中方面地实现和仿真模型之间的数据交换,包括输出和运行模型过程中动态修改运行参数等。
另外该软件还提供了优化模块Optquest ,增加了帮助迅速建模的Microsoft Visio 的接口。
5.1.1 Flexsim 软件的主要特点Flexsim 仿真软件的特点主要体现在采用面向对象技术,突出3D 显示效果,建模和调试简单开放方便,模型的扩展性强,易于和其他软件配合使用等方面。
(1) 基于面向对象技术建模Flexsim 中所有用来建立模型的资源都是对象,包括模型、表格、记录、GUI 等。
同时,用户可以根据自己行业和领域特点,扩展对象,构建自己的对象库。
面向对象的建模技术使得Flexsim 的建模过程生产线化,对象可以重复利用,从而减少了建模人员的重复劳动。
(2) 突出的3D 图形显示功能Flexsim 支持OpenGL 技术,也支持3ds 、wrl 、dxf 和stl 等文件格式。
因此用户可以建立逼真的模型,从而可以帮助用户对模型有一个直观的认识,并帮助模型的验证。
用户可以在仿真环境下很容易地操控3D模型,从不同角度、放大或缩小来观测。
Flexsim培训2
处理器参数
以处理器对象的编辑项为例 对每个编辑项考虑下面四个问题:
它的目的是什么? 什么时候用到它? 它提供了哪些可以使用的变量? 它返回什么值?
可用的变量和返回值
编辑项 Setup Time Process Time MTBF MTTR Send To Port Pull From Port Pull Requirement Request Transport From Pick Operator 可用变量 current, item, port current, item current current current, item current current, item, port current, item, port current, item 返回值 delay time delay time delay time delay time port number port number true/false numeric pointer numeric pointer
节点符号
标准文件夹 对象 对象数据 C++函数 FlexScript(Flexsim脚本)函数
模型树样本
什么是函数?
函数名(参数1,参数2,等等) 参数可以是
数值 字符串 指向对象或节点的指针
函数举例
colorrandom(item)
许多Flexsim函数的作用都是从“树”中读 取数据和向“树”存放数据
N/A
N/A N/A N/A N/A
OnProcessFinish
OnBreakDown OnRepair
current, item
current current
Flexsim培训(续)
getname( object ) setname( object, name ) getitemtype( object ) setitemtype( object, num) setcolor( object, red, green, blue ) colorred( object ) blue,green,white... setobjectshapeindex ( object , indexnum ) setobjecttextureindex ( object , indexnum ) setobjectimageindex ( object , indexnum )
int index = 1; double weight = 175.8; string category = “groceries”; treenode nextobj = next(current);
数组的声明和赋值
以下是数组使用的一些例子 intarray indexes = makearray(5); // makes an array with 5 elements indexes[1] = 2; // in Flexsim, arrays are 1-based indexes[2] = 3; indexes[3] = 2; indexes[4] = 6; indexes[5] = 10; doublearray weights = makearray(3); fillarray(weights, 3.5, 6.7, 1.4); // fillarray is a quick way of setting the array values stringarray fruits = makearray(2); fruits[1] = "Orange"; fruits[2] = "Watermelon"; treenodearray operators = makearray(4); operators[1] = centerobject(current, 1); operators[2] = centerobject(current, 2); operators[3] = centerobject(current, 3); operators[4] = centerobject(current, 4);
Flexsim软件讲解
模型二
目的
使用资源库中的多种对象
处理器执行次序(推实体)
MultiProcessor(多功能处理器)
多功能处理器可以在其上对实体进行多步操作 每步操作可以有各自的处理时间,征用一定数目的操作员 当模型中有很多实体需要在一个地点进行多个处理步骤时用多功能 处理器是比较方便的 多功能处理器同时只能处理一个实体
参数选项卡(Parameter Tabs)
参数窗口通过选项卡对参数进行分类 所有的固定资源对象都有“Flow”和“Triggers”选项卡( 尽管某些对象的触发器数量要多于其它对象)
下拉列表框
下拉列表选择
代码模版(适合修改参数) 代码编辑(使用Flexscript或C++)
代码模版
Statistics(统计)
吞吐量、状态、队长、停 留时间 示数、图表
对象尺寸和转角
属性窗口中可以定义对 象的位置、尺寸和转角 此外,在模型窗口中也 可以实现
启用“Edit”(编辑)菜 单中的Resize and Rotate Objects(编辑对象尺寸和 转角)
左键拖动箭头改变尺寸 右键拖动箭头进行旋转
Processor(处理器)
需要对实体施加操作时用处理器 处理器可以是各种机器或是工作台,甚至 可以是任何需要花费时间处理实体的对象 实体在处理器中停留的时间包括Setup Time(预处理时间)和Process Time(处 理时间)以及各种延误产生的停留时间, 比如等待操作员的时间,等待运输工具的 时间,如果处理器故障等待其恢复的时间 等。
Flexsim仿真软件的实例应用 - 物流产业大数据平台
Flexsim仿真软件的实例应用一、Flexsim的简要介绍Flexsim 主要应用于系统建模、仿真以及实现业务流程可视化。
Flexsim 中的对象参数可以表示现实中所有存在的实物对象, 如传送带、操作人员等, 同时数据信息可以用Flexsim 丰富的模型库表示出来。
Flexsim 是面向对象的开放式软件, 由于Flexsim 的对象是开放的, 所以这些对象可以在不同的用户、模型之间进行交换, 再结合对象的高度可自定义性, 可以大大提高建模的速度。
二、实例描述生产线同时生产三种产品,然后被送到监测车间的缓存区。
检测车间有三台监测系统分别对这三种产品进行检测后,通过各自的传送带将产品运输到另一个缓存区,再由运输机按照产品的类型将产品摆放到不同的货架。
三、Flexsim仿真步骤1、打开Flexsim构建模型布局。
从对象库中拖放所需的对象到建模视图中,主要包括一个发生器,两个暂存区,三个处理器,三个传送带,两个操作人员,一个分配器,一个运输机,三个货架。
然后将对象按所需顺序排好。
2、定义物流流程,根据连接类型,按下“a”或“s”键的同时用鼠标从一个对象拖拉到另一个对象上以连接二者。
“s”连接仅用于中心端口之间的连接,用“w”取消。
“a”连接用于除中心端口之外的所有其他的连接,用“q”取消。
将步骤1中的对象按顺序连接,其中发生器与第一个缓存区的连接、第一个缓存区与三个处理器的连接、三个处理器与三个传送带的连接、三个传送带与第二个缓存区的连接、第二个缓存区与三个货架的连接、分配器与两个操作人员的连接都是采用“a”连接。
另外的第一个缓存区与分配器的连接、分配器与三个处理器的连接、第二个缓存区和运输机的连接时采用“s”连接。
如图1所示。
图13、编辑对象参数,双击对象可以打开对象的参数对话框,按照情况进行修改。
双击打开发生器对话框,修改产品流出间隔时间和不同产品产用不同的型号和颜色。
同理,打开缓存区的对话框,设置缓存区的容量;打开处理器的对话框,设置检测设备检测时间。
Flexsim基本技能
Flexsim基本技能Flexsim实体库包含的实体在Flexsim中,库中的⼤多数实体都是由两个通⽤实体类,或者说是⽗类,之⼀创建的。
这⾥所说的两个通⽤类是固定实体(FixedResources)和任务执⾏器(TaskExecuters)。
固定实体固定实体是模型中固定不动的实体,可以代表处理流程的步骤,如处理站或存储区域。
临时实体中从头到尾穿过模型,经历进⼊、被处理、完成各个处理步骤的过程。
当⼀个临时实体在模型中某⼀步被处理完成,就被发送到下⼀步,或者说是发送到下⼀个固定实体。
任务执⾏器任务执⾏器是模型中共享的可移动的资源。
它们可以是操作员,被⽤来在某给定步骤中处理⼀个临时实体时使⽤。
或者,可以在步骤之间运输临时实体。
它们还可以执⾏许多其它仿真功能。
随着Flexsim的应⽤经验积累,将会发现,固定实体和任务执⾏器之间的差别有时会变得⾮常模糊。
在模型中,任务执⾏器能够仿真类似固定实体的处理步骤,⽽固定实体也能配置⽤来像共享资源⼀样⾏进和操作。
唯⼀差别在于看待问题的⾓度。
固定实体包括:发⽣器暂存区处理器吸收器输送机合成器分解器流节点分类输送机复合处理器货架储液罐基本固定实体(BFR)任务执⾏器包括操作员运输机堆跺机起重机升降机机器⼈基本任务执⾏器(BTE)另外还有:实体库中也有⼀些实体,既不是任务执⾏器,也不是固定实体。
这些实体列出如下。
分配器⽹络节点记录器交通控制器可视化⼯具Flexsim如何导⼊AutoCAD图形下⾯是导⼊AutoCad dxf⽂件之前须准备的步骤:1 消除所有不必要信息。
AutoCAD⽂件通常包括许多不必要的信息。
消除这些信息可以使得模型更加简洁,并减少显卡的负担。
结果是更容易建模和展⽰模型。
2 根据Flexsim的单位调整缩放⽐例:AutoCAD⽂件不必以英尺或⽶为单位来绘制,导⼊到Flexsim中时可能需要重新调整缩放⽐例。
为确定⽐例⼤⼩,按如下⼏步操作:在AutoCAD中测量⼀段已知距离(_dist),应⽤下⾯的⽅程式:⽐例因⼦=Flexsim距离/ AutoCAD距离。
Flexsim仿真软件介绍
Flexsim仿真软件介绍从1993年起,Flexsim软件产品就进入了仿真软件市场并且建立了自己的咨询业务。
经过十多年在仿真行业的经验积累以及高新软件技术的应用,我们已经开发出了一个全新的面向对象的仿真建模工具Flexsim。
它是迄今为止世界上惟一一个在图形建模环境中集成了C++IDE和编译器的仿真软件。
在这个软件环境,C++不但能够直接用来定义模型,而且不会在编译中出现任何问题。
这样,就不再需要传统的动态链接库和用户定义变量的复杂链接。
Flexsim有很广阔的应用范围,还能应用在更高层次的仿真工程上。
欢迎大家使用Flexsim,它一定会令你耳目一新!Flexsim能应用于建模、仿真以及实现业务流程可视化。
下面我们简单地介绍一下Flexsim仿真软件。
一、建模Flexsim应用深层开发对象,这些对象代表着一定的活动和排序过程。
要想利用模板里的某个对象,只需要用鼠标把该对象从库里拖出来放在模型视窗即可。
每一个对象都有一个坐标(x,y,z)、速度(x,y,z),旋转以及一个动态行为(时间)。
对象可以创建、删除,而且可以彼此嵌套移动,它们都有自己的功能或继承来自其他对象的功能。
这些对象的参数可以把任何制造业、物料处理和业务流程的快速、轻易、高效建模的主要特征描述出来。
下图是一个仓库的模型:Flexsim中的对象参数可以表示几乎所有存在的实物对象。
像机器、操作员、传送带、叉车、仓库、交通灯、储罐、箱子、货盘、集装箱等等都可以用Flexsim 中的模型表示,同时数据信息也可以轻松地用Flexsim丰富的模型库表示出来。
层次结构Flexsim可以让建模者使模型构造更具有层次结构。
在组建客户对象的时候,每一组件都使用了继承的方法,在建模中使用继承结构可以节省开发时间。
Flexsim可以使用户充分利用Microsoft Visual C++的层次体系特性。
用户化目前在市场上,还没有其他任何仿真软件能像Flexsim这样有更多的用户化设定。
flexsim配送中心系统仿真设计原理
flexsim配送中心系统仿真设计原理随着经济的发展和社会的进步,物流配送中心在现代物流中的作用已显得越来越重要。
由于物流配送中心的数量不断增多,规模不断扩大,导致配送中心的作业流程变得越来越复杂,随之带来了一系列问题。
由于受到内部或外部因素的影响,配送中心可能会发生一些意外事件,导致配送中心不能正常运转,从而影响了企业的正常运作。
因此,对配送中心进行仿真设计是十分必要的。
一、FlexSim简介FlexSim是一款专业的物流仿真软件,可以用来建立和模拟复杂的生产系统和供应链系统。
通过仿真可以优化生产过程的效率,并可以帮助用户找出系统瓶颈、降低成本和提高质量。
此外,它还具有可视化界面和直观的图形用户界面,使用者无须具备特殊知识即可进行操作。
使用FlexSim进行仿真设计的一般步骤包括:确定问题、建立模型、设置参数、运行仿真、结果分析等。
1. 确定问题:在开始进行仿真设计之前,首先要明确配送中心存在的问题,如作业效率低下、成本过高、出错率高等。
明确问题有助于更好地设计和建立模型。
2. 建立模型:根据问题,建立相应的模型。
对于配送中心而言,可以包括分拣区、储存区、拣货区、打包区等。
每一个区域都对应一种或多种具体的操作流程,如订单处理、分拣、拣选、包装等。
3. 设置参数:根据实际情况,设置各种参数,如人员数量、设备数量、货物流量等。
这些参数将影响系统的性能和稳定性。
4. 运行仿真:运行仿真可以观察系统的运行情况,了解各个部分之间的相互影响,从而发现问题并进行优化。
5. 结果分析:分析仿真结果可以帮助确定系统的瓶颈和改进方向,从而为决策提供支持。
三、实例分析以某大型连锁超市配送中心为例,对其系统进行仿真设计。
首先,需要确定问题。
该配送中心面临的主要问题是订单处理速度慢,拣选错误率高。
接下来,建立模型。
该配送中心主要包括订单处理区、分拣区、拣货区、打包区等部分。
在设置参数时,需要考虑人员数量、设备数量以及货物流量等因素。
Flexsim-仿真基础培训
鼠标操作
视图窗口操作
平移——左键拖动 旋转——右键拖动 缩放——滚轮或左右键同时拖动
对象
在XY平面移动——左键拖动 在Z轴移动——滚轮或左右键同时拖动
高亮——黄色指示框:左键单击 选中——红色指示框:按下键盘上Ctrl或Shift键,
配合左键
路漫漫其修远兮, 吾将上下而求索
对象端口连接(续)
中心端口—中心端口:起指代作用,通常指向移 动资源以征用其对实体进行处理或运输
路漫漫其修远兮, 吾将上下而求索
中心端口
触发器的概念
当资源对象上发生重要事件时,触发器被 触发
用户指定当触发发生时产生的一系列动作 (触发器逻辑)
可以定义的触发器包括:当实体被生成时 ,当实体进入或离开固定资源时,当处理 过程完成时等等
需要使用鼠标定义位置、大小和转角
路漫漫其修远兮, 吾将上下而求索
实体流
无论对象在模型布局中处于什么位置,实 体从一个对象被传递到下一个对象都无需 消耗任何时间
添加输送机或移动资源用于运输,可以给 实体流产生时间延迟
输送时间取决于输送机的长度和速度 对象间的运送时间取决于对象间的距离,以及移
LOAD flowitem(装载实体)
任务序列——按一定顺序依次执行的一组 任务,如
TRAVEL to queue LOAD flowitem TRAVEL to processor UNLOAD flowitem
路漫漫其修远兮, 吾将上下而求索
资源库
资源库——用于建模的各种 类对象的集合
• 大多数模型由发生器 开始
右键单击对象并选择Edit Object Size/Rotation(编 辑对象尺寸/转角)
Flexsim库函数简介
Flexsim库函数简介Aacos(num ratio)说明:返回一个角度,ratio的取值介于-1到1之间。
activateview(obj viewnode)说明:返回一个树视图节点,供开发者使用。
Example: activateview(node(“/standardviews/objectlibrary”,views()));返回一个称为objectlibrary的标准树视图节点。
activedocumentnode()说明:返回当前活动文档窗口节点,如果活动文档窗口是一个选项卡式窗口,它会返回活动标签页节点。
activedocumentview()说明:返回当前活动文档窗口作为HWND。
activeview()说明:返回当前活动窗口作为HWND。
add(num valuel,num valuel)说明:返回valuel+valuel的值,功能同+。
addcommand(obj codenode,str commandname,str commandname,str paramet ers,strexample)说明:向当前可用命令列表添加一个Flexscript命令,新命令将在下次编译后可用。
addfullhistorymoverecord(num flowitemd,num time, obj origin, obj destination,num itemtype)说明:当全部历史记录可用时,向运动表添加一个新条目。
新条目将记录临时实体从orgin object移动至destination object的特定时间和类型。
addfullhistorystaterecord(num time,num state,obj object)说明:当全部历史记录可用时,向状态列表添加一个新条目。
新条目将记录指定对象改变至指定状态时所花时间。
addkinematic(node infonode,num x,num y, num z,num tartgetspeed,num a cc,num dec, num startspeed,num starttime,num type)说明:增加一个运动行为至一个系列运动中。
物流系统仿真flexsim仿真实验手册
实验一flexsim基本操作和简单模拟仿真(4学时)一、实验目的1.了解什么是flexsim及其主要应用2.学习flexsim软件主窗口3.学习flexsim基本概念和专有名词4.了解flexsim建模步骤5.学会把现实系统中的不同环节抽象成仿真模型中的对应实体6.初步认知flexsim模型的建立和运行7.体会发生器、暂存区、传送带、吸收器的使用8.体会A连接和S链接的作用9.学会根据现实情况对相应的实体进行参数设定二、实验内容(一)仔细阅读教材第一部分(二)按以下步骤建立第一个flexsim模型1. 模型基本描述在这个模型中,我们来看看某工厂生产三类产品的过程。
在仿真模型中,我们将为这三类产品设置itemtype值。
这三种类型的产品随机的来自于工厂的其它部门。
模型中还有三台机器,每台机器加工一种特定类型的产品。
加工完成后,在同一台检验设备中对它们进行检验。
如果没有问题,就送到工厂的另一部门,离开仿真模型。
如果发现有缺陷,则必须送回到仿真模型的起始点,被各自的机器重新处理一遍。
仿真目的是找到瓶颈。
该检验设备是否导致三台加工机器出现产品堆积,或者是否会因为三台加工机器不能跟上它的节奏而使它空闲等待?是否需要在检验站前面添加一个缓冲区域?虽然我们以制造业为例,但同类的仿真模型也可应用于其它行业。
以一个复印中心为例。
一个复印中心主要有三种服务:黑白复印、彩色复印和装订。
在工作时间内有3个雇员工作,一个负责黑白复印工作,另一个处理彩色复印,第三个负责装订。
另有一个出纳员对完成的工作进行收款。
每个进入复印中心的顾客把一项工作交给专门负责该工作的雇员。
当各自工作完成后,出纳员拿到完成的产品或服务,把它交给顾客并收取相应的费用。
但有时候顾客对完成的工作并不满意。
在这种情况下,此项工作必须被返回相应的员工进行返工。
此场景与上面描述的制造业仿真模型相同。
但是,在此例中,你可能更多关注在复印中心等待的人数,因为服务速度慢,所以复印中心的业务成本高昂。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Flexsim消息机制
消息是Flexism中一个很强大而且经常使用的逻辑功能。
消息可以使得分布在模型中的各个实体之间相互联系,可以跨越多个实体向他们发生消息执行特定的任务,而不必局限于相邻或上下级之间的实体。
message –从一个实体发送到另一个实体的信息.
当实体接收到消息时,消息触发器被触发。
消息通过命令发出。
sendmessage() 是立即发送消息,senddelayedmessage()是延迟一段时间之后才发送消息。
当使用这两个命令时,将给指定的实体发送一条消息,并执行此函数。
每个命令可以执行3个用户自定义参数。
命令的参数如下:
sendmessage(toobj,fromobj, param1,param2,param3)
senddelayedmessage(toobj,delaytime,fromobj,param1, param2, param3)
toobj:接收消息的实体
fromobj:发送消息的实体
delaytime:延迟时间(第二个命令特有)
param1:第一个用户自定义参数
param2:第二个用户自定义参数
param3:第三个用户自定义参数
其中传递的变量(即在接收消息的实体的消息触发中传递的变量):
current:当前实体(接收消息的实体)
msgsendingobject:发送消息的实体
msgparam(1):消息的第一个参数(用户自定义)
msgparam(2):消息的第二个参数(用户自定义)
msgparam(3):消息的第三个参数(用户自定义)
发送消息和接收消息实体间的消息执行机制:
有一个这样的模型(如下图):
当传送带5上进入5个item时,发送一条消息给暂存区4,让其关闭输出端口:
那么可以这样发送消息:
在传送带5的进入触发(发送消息的实体):
if(getinput(current)>=5)
senddelaymessage(inobject(current,1),0,current,1,2,3);//发送一条延迟0秒的消息,传递的三个自定义参数分别为1,2,3
在暂存区4的消息触发(接收消息的实体)
treenode cv5=msgsendingobject();//声明发送消息的实体,即传送带5
int msgtype1=msgparam(1); //声明传递的第一个用户自定义参数,此时为1
int msgtype2=msgparam(2); // 声明传递的第一个用户自定义参数,此时为2
int msgtype3=msgparam(3); // 声明传递的第一个用户自定义参数,此时为3
//此时可以分别引用三个参数作为判断条件
//引用第一个自定义参数
if(msgtype1==1)
closeoutput(current);//关闭暂存区4的输出端口;
//或者引用第二个自定义参数
if(msgtype2==2)
closeoutput(current);
//或者引用第三个自定义参数
if(msgtype3==3)
closeoutput(current);
说明:
(1)三个自定义参数的数据类型需为数值型;
(2)三个参数一次只需引用一个,如果引用多个,且条件都满足,则按引用先后顺序执行;
还有一种比较极端的情况,就是什么参数都不引用,而直接写执行语句。
比如以上的例子,在暂存区4的消息触发中,所有声明都不写,只写closeoutput(current);也能达到上述的结果。
需要说明的是,这中情况只适合执行一种任务,比如关闭输出端口,当需要执行多种任务的时候,必须使用不用的参数来定义不同任务的执行语句。
在上面的例子中,还有一个参数是没有用到的,即msgsendingobject(),因为在这个简单的案列中没有使用的必要。
发送消息的实体可以是固定实体,也可以是临时实体。
当涉及对临时实体的操作时,使用临时实体作为发送消息的实体会使逻辑更加简单。
比如下面这个例子,我们使用临时实体作为发送消息的实体,将会用到msgsendingobject()这个参数。
模型如下图:
在一个网络路径里,希望任务执行器7先到发生器8取一个托盘,再到发生器9取一个货物。
任务只执行1次,使发生器8产生托盘(pallet)1次,使用到达时间表的到达方式,到达次数为1次;使发生器9产生货物(box)1次,使用到达时间表的到达方式,到达次数为1次。
两个发生器分别与执行器S连接,并将三个实体A连接到网络节点。
(1)在发生器8的创建触发发送一条消息给任务执行器7
senddelayedmessage(centerobject(current,1),0,item,1,0,0);//延迟0s,通过item来发送消息,使用第一个自定义参数1,其余为0;
(2)在发生器9的创建触发发送一条消息给任务执行器7
senddelayedmessage(centerobject(current,1),5,item,2,0,0);//延迟5s,通过item来发送消息,使用第一个自定义参数2,其余为0;延迟5s的作用是使执行器先去发生器8
(3)在执行器的消息触发,创建2个任务序列来装载托盘和货物:
treenode item=msgsendingobject();//声明发送消息的实体,分别为托盘和货物int msgtype=msgparam(1); //声明传递的第一个用户自定义参数
if(msgtype==1){ //发生器8发送的消息
treenode ts=createemptytasksequence(current,0,0);//创建一个任务
序列
inserttask(ts,TASKTYPE_TRAVEL,centerobject(current,1),NULL);//执行器移动到发生器8
inserttask(ts,TASKTYPE_FRLOAD,item,centerobject(current,1));//装载托盘到执行器上,注意这里使用的是item;
dispatchtasksequence(ts);
}
if(msgtype==2){ //发生器9发送的消息,同理
treenode ts=createemptytasksequence(current,0,0);
inserttask(ts,TASKTYPE_TRAVEL,centerobject(current,2),NULL);
inserttask(ts,TASKTYPE_FRLOAD,item,centerobject(current,2));
dispatchtasksequence(ts);
}
在这个模型中,通过临时实体(item)来发送消息,看起来比较清晰。
也可以直接使用发生器本身发送消息,则在装载托盘和货物的时候需要分别声明他们。
上述代码做下修改:
treenode source= msgsendingobject();//声明发送消息的实体为发生器;
int msgtype=msgparam(1); //声明传递的第一个用户自定义参数
if(msgtype==1){ //发生器8发送的消息
treenode ts=createemptytasksequence(current,0,0);//创建一个任务序列
inserttask(ts,TASKTYPE_TRAVEL,source,NULL);//执行器移动到发生器8 inserttask(ts,TASKTYPE_FRLOAD,first(source),source);//装载托盘到执行器上,注意这里使用的是first(sourse)定义待装载的托盘;
dispatchtasksequence(ts);
}
//发生器9发送的消息同理设置
两种方法中:
(1)通过item发送消息,可以直接定义item为msgsendingobject(),在一些复杂的任务序列中,这个是有好处的;但是在引用发生器本身的时候,需要通过与执行器连接的中间端口来定义它,如发生器8为centerobject(current,1);
(2)通过发生器本身发送消息,可以直接定义source为msgsendingobject(),也可以通过中间端口centerobject(current,port)定义,但是引用的item需要重新定义为first(source)或者rank(source,1)。
在以往分享的案列中,很多都使用了消息的功能。
有兴趣的朋友不妨去参考学习!。