1
• Flexsim软件的安装步骤
• Flexsim建模的基本概念
• Flexsim软件的使用步骤
• 开发实例训练
• Flexsim软件的高级开发
2
Flexsim软件的安装步骤(单机版)
• 单机版
–根据电脑操作系统打上相应的补丁
–安装Visual C++ .net
–安装Flexsim
–安装HASP Driver
–插入软件加密狗
–输入客户序列号
• 开始菜单 / Flexsim 3 / Flexsim License Activation
3
Flexsim软件的安装步骤(网络版)
• 网络版
– 服务器上安装:
• 加密狗
• (加密狗驱动)(HASP device driver)
• (服务器监控程序)
• (服务器序列号管理器)
***上面三个文件在网络版安装光盘的目录下可以找到
– 客户机上安装:
• Visual C++ .net
• Flexsim软件
• (加密狗驱动)
• 在Flexsim安装目录生成一个文件
4
Flexsim软件主窗口布局
• Flexsim软件主窗口由下面五部分构成
–菜单
–工具栏
–对象库
–模型视图
–仿真控制栏
5
工具栏
• 工具栏中常用到的按钮包括
– ToolBox:编辑全局表格/变量
– Commands:Flexsim命令帮助
– Tree:打开模型树
– Ortho:打开模型正投影视图
– Persp:打开模型透视图
6
培训内容
• Flexsim软件的安装步骤
• Flexsim建模的基本概念
– Flexsim软件主窗口布局
– Flexsim仿真模型的基本组成
• Flexsim软件的使用步骤
• 开发实例训练
• Flexsim软件的高级开发
7
Flexsim仿真模型的基本组成
• 对象(Objects)
– Flexsim采用对象对实际过程中的各元素建模
• 连接(Connections)
– Flexsim中通过对象之间的连接定义模型的流程
• 方法(Methods)
– 对象中的方法定义了模型中各对象所需要完成的作
业
8
• Flexsim软件的安装步骤
• Flexsim建模的基本概念
– Flexsim软件主窗口布局
– Flexsim仿真模型的基本组成
• 对象(Objects)
• 连接(Connections)
• 方法(Methods)
• Flexsim软件的使用步骤
• 开发实例训练
• Flexsim软件的高级开发
9
对象与继承
• Flexsim采用面向对象的技术
• 大部分Flexsim对象都是FixedResource
或TaskExecutor对象的子对象
–子对象拥有其父对象所有的接口和相应的功
能
–用户相对比较容易很快掌握子对象的使用
10
Flexsim家族树
11
Flexsim的对象库
12
对象分类
• 资源类(Fixed Resources)
– Source, Queue, Processor, Sink, Combiner, Separator,
MultiProcessor, Conveyor, MergeSort, FlowNode, Rack, and
Reservoir
• 执行类(TaskExecuter)
– Dispatcher, Operator, Transporter, Elevator, Robot, Crane,
ASRSvehicle
• 网络类(Node)
– NetworkNode, TrafficControl
• 图示类(Visual Object)
– VisualTool, Recorder
13
资源类对象
• Fixed Resource
类对象一般是仿
真模型中的主干
对象
• 此类对象决定了
模型的流程
14
执行类对象
• Task Executer对象可从Fixed Resource
对象中获取并执行任务,如物料搬运或
生产操作等。
• 一个Task Executer对象可以向其他Task
Executor对象指派任务,或者管理模型
中所有的Task Executers对象。
• Task Executers对象不参与模型中的流
程指派。
15
网络类对象
• NetworkNode对象一般用来设定Task
Executor对象的行动路线
16
图示类对象
• 图示类对象可用在仿真模型中显示各种
信息、标识、图片或图表等
• VisualTool和Recorder对象可用来提高仿
真模型的直观感,同时可用来实时显示
和搜集模型的输出数据
17
迁移实体(Flowitem)
• 迁移实体指模型中存在迁移的对象
• 迁移实体可用来表示生产或服务中的原
料、产品或产品集,如零件、部件、托
盘、容器等;也可以是任务执行者
• 迁移实体可点击工具栏按钮Flowitem定
义
• 可对每个迁移实体定义对象类别
(Itemtype)
18
培训内容
• Flexsim软件的安装步骤
• Flexsim建模的基本概念
– Flexsim软件主窗口布局
– Flexsim仿真模型的基本组成
• 对象(Objects)
• 连接(Connections)
• 方法(Methods)
• Flexsim软件的使用步骤
• 开发实例训练
• Flexsim软件的高级开发
19
连接与端口
• Flexsim模型中的对象之间是通过端口来连接
的
• 三种类型的端口
– 输入端口(input ports)
• Fixed Resource之间的连接
– 输出端口(output ports)
• Fixed Resource之间的连接
– 中心端口(center ports)
• 连接Task Executer和Fixed Resource
20
“s”连接
• 按下 “s”键的同时用鼠标从一个对象拖拉
到另一个对象上以连接二者
• “s”连接仅用于中心端口之间的连接(即
连接Task Executer和Fixed Resource )
• “s”连接用“w”取消(按下 “w”键的同时用
鼠标从一个对象拖拉到另一个对象上以
连接二者)
21
“a”连接
• 按下 “a”键的同时用鼠标从一个对象拖拉
到另一个对象上以连接二者
• “a”连接用于除中心端口之外的所有其他
的连接
• “a”连接用“q”取消
22
方法(Method)
• 方法是用来完成一项任务的一系列规则
集
• 好的方法应是可以重复使用的
• Flexsim采用一系列方法集来完成所建模
型的作业
23
Flexsim建模方法集
• Arrival Method
– Determines how and when FlowItems Enter the model
• Trigger Method
– Determines what, where, and when to assign information to
FlowItems
• Flow Method
– Determines how, where, and when to move FlowItems through
the model
• Navigation Method
– Model navigation, and fly through
• FlowItem Bin Method
– Defines the FlowItem Characteristics
• TaskExecuter Move Method
– Dertermins who, and how FlowItems move from one
FixedResource to another
24
应用 Flexsim建模的基本步骤
1构建模型布局
2定义物流流程
3编辑对象参数
4编译运行仿真
5分析仿真结果
25
步骤1. 构建模型布局
• 将仿真所需要的对象模型从对象库中拖拽到仿真视图
窗口中的适当位置
26
步骤2. 定义物流流程
• 根据连接类型,按下“a”或“s”键的同时用
鼠标从一个对象拖拉到另一个对象上以连接二
者
27
步骤2. 定义物流流程 (续1)
• 连接两个对象端口所需按键
– “a”键
• 用来将对象1的输出端口连接到对象2的输入端口上
– “q”键
• 用来取消对象1的输出端口与对象2的输入端口之间的连接
– “s”键
• 用来连接对象1与对象2的中心端口
– “w”键
• 用来取消对象1与对象2的中心端口的连接
28
步骤2. 定义物流流程 (续2)
• 各类端口连接的显示位置
–输出端口显示在对象的右上角
–输入端口显示在对象的左上角
–中心端口显示在对象底部中心
29
步骤2. 定义物流流程 (续3)
• 察看对象的端口连接
– 对象属性窗口
General选项卡
– 可调整端口的编号顺
序
30
步骤3. 编辑对象参数
• 双击对象可以打开对象的参数对话框
31
步骤3. 编辑对象参数 (续)
• 点击对象窗口左下角
“Properties”按钮可
调出对象属性对话框
• 对象属性对话框中包括
– 图形(Visual)
– 常规(General)
– 标签(Labels)
– 统计(Statistics)
32
步骤4. 编译运行仿真
• 编译模型
• 重置模型
• 控制动画速度
• 运行仿真
33
步骤5. 分析仿真结果
• 仿真之前通过菜单Stats
/ Stats Collecting选择统
计对象
• 仿真时在对象属性对话
框Statistics选项卡中可
实时察看相应对象的统
计数据和图表
• 点击Stats下的Standard
Report或State Report可
生成标准统计报告和状
态统计报告
34
实例1:简单仿真模型的建立
• 生产线同时生产三种产品,然后被送到监测车间的缓
存区。检测车间有三台监测系统分别对这三种产品进
行检测后,通过各自的传送带将产品运输出去
35
模型描述
• 产品到达检测车间的时间服从均值为
20,方差为2的正态分布
• 到达检测车间的产品类别(1, 2, 3)服
从均匀分布
• 缓存区容量为25件产品
• 传送带传输速度为1m/s
36
步骤1:构建模型布局
• 从对象库中拖放所需的对象到建模视图中
37
步骤2. 定义物流流程
• 按住A键,同时用鼠标左键点击
Source对象并且按住鼠标左键不放,
然后拖动鼠标至Queue对象。此时
会出现一条黄线连接Source 和
Queue对象。然后松开鼠标左键,
黄线将变成一条黑线,表示Source
对象和Queue对象的端口已经连接
上。
• 如上所述,分别连接Queue到
Processor,Processor到Conveyor
,以及Conveyor到Sink的连线。
38
步骤2. 定义物流流程(续)
39
步骤3. 编辑对象参数
• 定义产品的流出
• 设置缓存区参数
• 设置检测设备参数
40
定义产品的流出
• 双击Source对象,打开其参数对话框
41
修改产品流出间隔时间(1)
• 从Inter-Arrival time 下拉框中选择Normal
Distribution
42
修改产品流出间隔时间(2)
• 修改选项的默认参数
–点击Template按钮
–修改其中的棕褐色的参数值:将10改为20
43
指派产品不同的型号和颜色(1)
• 选择Source Triggers选项卡, 在
OnCreation下拉框中选择Set Itemtype
and Color来改变产品类型和颜色
44
指派产品不同的型号和颜色(2)
• 选中选项后,点击Template 按钮,确定
参数如图所示后,点击Apply和Ok按钮,
关闭Source对象的参数对话框。
45
设置缓存区容量
• 双击Queue,其
参数对话框将会
出现
• 将Maximum
Content 对应值
改为 25. 点击
Apply确认
46
设置缓存区产品流选项
• 转到Flow选项卡,在 “Output” 框中, 选
择 “Send To Port” 下拉框中的“By
Itemtype (direct)” 选项
• 依次点击Apply和OK按钮,关闭Queue
对象的参数对话框
47
设置检测设备检测时间
• 双击第一个Processor对象
• 在参数对话框“Process Time” 下拉框中
选择 “Exponential Distribution”选项
• 将参数由默认值10改为30
• 同样设置其他两个Processor对象
48
步骤4. 编译运行仿真
• 编译模型
• 重置模型
• 运行仿真
49
步骤5. 观察仿真结果
• 现在模型视图处于由上到下的垂直投影
图中,该投影图在建模时经常使用,若
在模型显示方面经常使用透视图。
• 选择工具栏中的Persp按钮可打开一个新
的透视图
50
仿真透视图显示
51
仿真统计结果的简单查看(1)
• 打开模型视图
窗口上的
Setting菜单
• 取消选中
“Hide Names”
52
仿真统计结果的简单查看(2)
• 鼠标右键单击对象,从弹出菜单选择property
,然后从属性对话框中选择Statistics选项卡
• Statistics选项卡中里面又包括General, State,
Content, Staytime四个子选项卡
• General和State选项卡中可以动态显示对象状
态的变化情况
• Content和Staytime选项卡缺省下不能显示对
象的动态变化情况
53
仿真模型文件的保存
• 仿真文件编写过程中要注意经常保存仿
真文件
• 第一次保存
–主窗口File菜单Save Model As …
• 保存修改
–主窗口File菜单Save …
54
培训内容
• Flexsim软件的安装步骤
• Flexsim建模的基本概念
• Flexsim软件的使用步骤
• 开发实例训练
– 实例1:简单仿真模型的建立
– 实例2:统计信息的查看与显示
– 实例3:TaskExecuter的应用
– 实例4:NetworkNode的应用
– 实例5:美化与演示
• Flexsim软件的高级开发
55
实例2:统计信息的查看与显示
• 打开已保存的例1的模型文件
• 另存为
56
选取进行统计对象(1)
• 按住Ctrl键,选中三个Processor对象,这时候
所选中的对象外面出现一红色方框
57
选取进行统计对象(2)
• 点击主窗口菜单Stats /
Stats Collecting /
Selected Objects On选
择所选中对象为统计对象
• 进行统计的对象外面出现
绿色方框
• 按住Shift键点击模型视图
的空白区域,可取消所有
对象的选定(红色方框)
58
添加Recorder对象
• 拖放3个Recorder对象至建模视图中
59
修改Recorder对象视图参数
• 打开透视图
• 依次打开Recorder的属性对话框,修改Visual选项卡
中的Z为8, SX, SY均修改为6,SX修改为90,并视情
况调整
60
修改Recorder对象图示参数
• 双击第一个Recorder对象,打开参数对话框
• 点击按钮“Data Capture Settings”,修改
– Type of Data为Standard Data
– Object Name为Processor 1
– Data to capture为Staytime
• 点击“Next”按钮返回到Recorder对象的参数对话框
61
修改Recorder对象表头
• 点击“Display Options”按
钮
• 修改Graph Title为Staytime
of Processor 1
• 修改坐标轴参数
– Lower Bound改为0
– Upper Bound改为20
– Divisions改为10
• 点击按钮“Done”退出参数
设置
• 依次修改其它两个
Recorder对象的参数
62
保存,编译,重置,运行
63
实例3:TaskExecuter的应用
• 在例1的基础上,2个检测员参与到了产品的检测中
• 检测员的任务是从缓冲区取出产品,并安装到相应的
监测系统中,安装时间为10秒
• 传送带末端的产品由叉车送出
64
修改仿真模型
• 打开例1的仿真模型文件,另存为
• 修改仿真模型如图
65
创建“s”连接
• 按住“s”将Dispatcher对象分别与第一个
Queue对象和三个Process对象连接起来
• 同样连接第二个Queue对象与叉车对象
66
连接Dispatcher与Operator
• 按住“a”连接Dispatcher对象的输出端口
和两个Operator对象的输入端口
67
修改缓冲区参数
• 打开第一个Queue的参数窗口
• 在Flow选项卡中选中“Use Transport”
• 同样修改另一个Queue的选项
68
修改检测系统的参数
• 打开Processor对象的参数窗口
• 修改Setup Time为A constant Setup time of 10
• 选中Operators选项卡中的Use Operator(s) for Setup
• 同样修改其它两个Processor对象
69
保存,编译,重置,运行
70
实例4:NetworkNode的应用
• 将例3中的Sink改成3个货架,3种产品检
测完毕后分别放入对应的三个货架中
• 叉车只能够沿着规定路线行驶
71
修改例3仿真模型
• 删除Sink对象,添加三个Rack对象
• 将第二个Queue对象与三个Rack对象分别用“a”连接
72
修改缓存区与货架参数
• 修改第二个Queue对象的Send To Port
参数为By Itemtype (direct)
• 修改货架高度为5层,点击“Apply Basic
Settings”和“OK”确定
73
保存,编译,运行
• 观察仿真运行时叉车的行驶路线
74
添加NetworkNode对象
• 在模型视图中添
加NetworkNode
对象
• “a”连接
NetworkNode到
相应的存取位置
(蓝色细线)
75
创建路网
• “a”连接相应
的
NetworkNode
对象形成路网
(绿色粗线)
• “a”连接叉车到
路网中(红色
细线)
76
路网修改方法
• 托拽路网上的SplinePoint(红色小球)可以修改路径的弯曲形状
• 按住“x”键单击SplinePoint可以在路段上添加另一个
SplinePoint
• 按住“q”键从一个NetworkNode拖到另一个NetworkNode可取
消托拽方向的连接,形成单向路径(取消路径需要按住取消双方
向的连接)
77
模型路网修改
• 设置一条单
向路径
78
保存,编译,运行
79
实例5:美化与演示
• Sky Box的应用
• Fly Path的应用
80
培训内容
• Flexsim软件的安装步骤
• Flexsim建模的基本概念
• Flexsim软件的使用步骤
• 开发实例训练
• Flexsim软件的高级开发
– C++
– ToolBox
– Experimenter
81
C++与对象
• 类、实例、接口
• 封装
–数据(属性、变量)
–函数(方法)
• 继承
• 多态
82
C++变量类型
• int
• double
• char
• char*
• string
• fsnode*
83
C++的变量声明
• int counter = 1;
• double size = xsize(current);
• char letter = ‘A’;
• char* tablename = “mytable”;
• string tablename = “mytable”;
• fsnode* nextobj = outobject(current,1);
84
C++ Constructs: if
if (expression)
{
code block
}
else
{
code block
}
if (content(item) == 2)
{
colorred(item);
}
else
{
colorblack(item);
}
85
C++ Constructs: while
while (expression)
{
code block
}
while (content(current) > 0)
{
destroyobject(last(current));
}
86
C++ Constructs: for
for (var decl; expr; increment)
{
code block
}
for (int index = 1; index <=
content(current); index++)
{
colorblue(rank(current,index)
);
}
87
C++ Constructs: switch
switch (integer/character value)
{
case casenum:
{
code block
break;
}
default:
{
code block
break;
}
}
switch ((int)(getitemtype(item)))
{
case 1:
{
coloryellow(item);
break;
}
default:
{
colorgreen(item);
break;
}
}
88
节点(Node)
• Flexsim的基本数据结构以树状形式存储
– Main(与模型相关的对象和数据)
– View(与GUI相关的对象和数据)
• Node是节点树的基本组成单元
89
Node的结构
• Node有一个节点名
• Node可以有一个数据项,类型可以是:
–数值
–字符串
–指针
–对象
• > 与 +
90
标准节点
对象节点
数据或元函数节点
方法 (C++)
方法 (FlexScript)
Node的图标
91
• 节点树中的每一个node实际上都是
“fsnode” 类的一个实例
• fsnode* 可声明指向一个fsnode类的实例
的数据类型
Node: C++ class
92
与fsnode类型相关的函数
• getnodename()
• getnodenum()
• getnodestr()
• setnodename()
• setnodenum()
• setnodestr()
• inc()
• getdatatype()
• getrank()
• setrank()
• content()
• up()
• rank()
• first() and last()
• prev() and next()
• objectexists()
93
Object的结构
• classes
• superclasses
• variables
• labels
• behaviour
– eventfunctions
– cppfunctions
– cppvariables
• spatial
• special
• visual
• connections
• events
• stats
94
• 属性(Attributes)
– getnodenum(attribute(fsnode*));
– setnodenum(attribute(fsnode*),val);
– ex: getnodenum(spatialsx(current));
• 变量(Variables)
– getnodenum(var_s(fsnode*,”varname”));
– setnodenum(var_s(fsnode*,”varname”),val);
– ex: setnodenum(var_s(current,”maxcontent”),10);
获取对象的属性与变量
95
通用属性的获取
• spatialx(yz), spatialrx(yz), spatialsx(yz)
• offsetx(yz), offsetrx(yz), offsetsx(yz)
• itemtype
• state_current
• stats_content, stats_contentmin,
stats_contentmax, stats_contentavg
• stats_input, stats_output
• stats_creationtime
• displaygroup
96
ToolBox
• ToolBox
– Global Tables
– Time Tables
– User Events (advance user)
– MTBF MTTR
– Watch Lists
– Global C++ Code
– Global Object Pointers
– Import Media Files
– Model Startup Code
97
全局表
• 全局表(Global Table)
–用于储存模型输入输出数据等
–可以是数值类型或字符串类型
98
全局表的添加
• 单击工具栏上的ToolBox按钮
• 在Global Tables一栏中单击“Add”
• 然后单击“Edit”
• 重命名表格名
• 设置行数与列数
• 点击“Advanced”设置各行或列的数据类型
99
全局表的修改
• 直接编辑表格附初值
• 借助事件的下拉列表对全局表进行修改
100
全局表的修改(2)
• 相关函数
– gettablenum(tablename, row, col);
– settablenum(tablename, row, col, value);
– gettablestr(tablename, row, col);
– settablestr(tablename, row, col, “string”);
101
Global C++ Code
• Global C++ Code 可
用来定义全局变量或
函数
102
Model Startup Code
• Model Startup Code
将在编译以后立即执
行
• 如
reset();
go();
103
培训内容
• Flexsim软件的安装步骤
• Flexsim建模的基本概念
• Flexsim软件的使用步骤
• 开发实例训练
• Flexsim软件的高级开发
– C++
– ToolBox
– Experimenter
104
Experimenter
• 可用Experimenter设置仿真模型的重复
运行
• Experimenter由两部分组成
– Replications
– Events
105
Experimenter Method Replications
• Replications
– Warmup End Time
– Simulation End Time
– Replications per Scenario
– Number of Scenarios
106
Experimenter的事件触发
• 事件触发可允许模型在
下列时候修改参数:
– Start of experiment
– Start of Scenario
– Start of Replication
– End of warmup period
– End of Replication
– End of Scenario
– End of Experiment