Flexsim消息机制

合集下载

资料:5 仿真软件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教案

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教程基础知识

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中常用命令的快捷参考。

参见命令集可获取更多有关这些命令的详细信息。

实体参量下列的命令和存取变量在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中级培训

flexsim中级培训
21
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资料-触发器 (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系统仿真软件概况

Flexsim系统仿真软件概况1 Flexsim系统仿真软件概况Flexsim 是PC Base的数字虚拟企业的仿真系统,来建立各种经营、管理、制造等模型,并且可在微软公司的Windows 2000、Windows XP、及Vista 等不同作业平台上执行的全窗口化3D专业仿真软件。

Flexsim是新一代的面向对象的仿真建模工具,它是迄今为止世界上唯一一个在图形建模环境中集成了C++IDE和编译器的仿真软件。

在这个软件环境,C++不但能够直接用来定义模型,而且不会在编译中出现任何问题。

这样就不再需要传统的动态链接库和用户定义变量的复杂链接。

它能使决策者轻易地在个人电脑中建构及监控任何工业及企业的分散式流程。

透过Flexsim我们可以率先找出未来工业及企业流程的模式。

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模型,从不同角度、放大或缩小来观测。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)。

在以往分享的案列中,很多都使用了消息的功能。

有兴趣的朋友不妨去参考学习!。

相关文档
最新文档