全球FlexSim系统仿真中文论坛

搜索
查看: 5523|回复: 1
打印 上一主题 下一主题

【讨论】flexsim发生器生成临时实体的机制分析

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2016-3-22 11:18:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zorsite 于 2016-3-22 12:19 编辑 8 p& h0 ]9 t7 E5 e' A

* P+ T/ Y  v' w( W* o4 X$ Z1 O目标:
3 ^% s, y4 W$ z$ m! u3 K1.首先要搞清楚Source的工作原理+ ?% j! @9 M9 z% R5 \
2.根据原理编写代码,让Source成批次的生成某个数量的临时实体。9 I) w* U' F+ a% X9 h
试验模型如下图所示:' |2 R$ @1 i1 J# l' i% G4 g

) O% }6 T+ }% ?9 W1 Z5 r6 H使用Event Log工具,分析Source的工作原理。' Q4 v) M% C% _" L
* u( _1 D; v  _1 Z
由日志文件可以看出,Source遵循以下工作原理:! D5 T6 P  |( c! x, h/ q3 Q+ _! i* K
模型重置时:激发Inter-Arrival Time触发,获取第一次生成临时实体的时间t1' y; b( \& }- r
当模型时间到达t1时,激发Engine事件Timed Event: CREATEPART,生成一个临时实体,在被创建的临时实体离开Source之前,再一次激发Inter-Arrival Time触发,获取下一次生成临时实体的时间t2- M6 y( E) r) D8 \" i; @
当模型时间到达(t1+t2)时,重复上一步骤1 n( \. s  n$ U; F2 {- j$ Q1 K& A
循环执行以上步骤,直到某些条件得到满足(比如下游暂存区达到最大容量无法接收临时实体)
& M  H4 A( H  N  D$ z如何让Source一次性生成多个临时实体?2 m4 o& u  [4 l# M' [' j6 l- G
经过分析我们知道了Source的触发机制:
, _+ M& P# U7 F- `0时刻获取t1
3 q' O1 M) J; \& ?; kt1时刻获取t2
5 n$ B- Z, [$ D/ }$ u  }4 V(t1+t2)时刻获取t3
9 d2 S5 e) y" T6 W7 s8 c0 \6 }- j(t1+t2+t3)时刻获取t4
0 b+ b4 k& ]1 O  z# v9 w……# S4 r$ ]* [, J1 `9 j/ l
# k* n  l2 I! e
以本模型为例:每2个时间单位生成一个临时实体。" n) ?' b  w2 H' f
第0时刻返回t1=2) X4 v9 m7 I( R; v/ ~4 K2 U" {
第(t1时刻)生成1个临时实体,同时返回t2=27 H- X% A) H7 m! g+ Q8 J
第(t1+t2时刻)生成1个临时实体,同时返回t3=2
: e+ t: [0 r$ D( p6 ~/ K" Y' Z第(t1+t2+t3时刻)……, Y! r1 ?) ?2 @0 n% J& m
如果第(t1时刻)时返回t2=0呢?
. r, Q: r) I# g9 ]第0时刻返回t1=2
7 f6 v+ l. p& z: t' o第t1时刻返回t2=0
( N; a7 @5 }  l8 b0 f3 L6 X9 E; x第(t1+t2)时刻返回t3=2
, _/ p; A9 n2 W9 B. }& O% Q8 V7 K你会发现在第2时间单位的时候生成了2个临时实体
& J: p4 a. @* g9 W2 k% x, ?
/ t% Y3 o! w* I( b思路
6 b; J4 S# [6 Y* M引入一个计数器,让计数器来控制返回时间=0的次数,就可以控制批次数量。假设批次数量为5:
/ M) E! X' \/ |% E$ F, n; O6 p, _4 p5 I* I8 u
代码
  1. int batchnumber = 5;
    9 M/ R* J% \' c8 [7 T* G! M
  2. double cycletime = exponential(0,10);
    1 Z) D9 f+ x& q/ M* }
  3. string labelName = "批次数量";
    ' j% S2 x/ r; w. H# [  R# y9 s1 l
  4. treenode curlabel = assertlabel(current, labelName, DATATYPE_NUMBER);
    + o1 j: H+ Q# T4 A8 A" S9 V) k
  5.   F  O& b4 \6 l7 i; a
  6. if (time()==0 || getnodenum(curlabel)==1) 2 O. m7 A0 N+ |  s0 B2 y1 V. Q( P
  7. {  setnodenum(curlabel,batchnumber);* G6 L( O& k( ]! y3 {. d: ]
  8.   return cycletime;}
    ) I; |& C+ s% j0 R* J) G2 R  }
  9. else 7 L8 {: x" A6 B! t+ G4 u. d5 T8 e! e
  10. {  inc(curlabel,-1);
    9 _! G5 R  Q/ D# u+ `% N- C
  11.   return 0;}
    ! [1 \+ r# J& ^/ q  z# o
复制代码
PS:
. W6 M0 {. S  _, x. J- ]3 p1.本段代码有不完善之处。
1 x- k: Z0 T& f9 @* N; x2.发生器产生临时实体的三种方式,其内部逻辑有一些差别。3 i! f* f  R$ K7 [' ?2 A9 T
3.请参考我的另一篇帖子:如何手动控制临时实体的产生http://flexsim.asia/viewthread.php?tid=6171&

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

评分

参与人数 1威望 +20 收起 理由
大摸鱼 + 20

查看全部评分

2#
慧娴亚伦 发表于 2016-3-22 12:20:51 | 只看该作者
加老师对于发生器产生临时实体的机制研究比较深入。
2 B9 U4 q. ^, x6 _- |我个人觉得对于正式版用户而言,如果只是让发生器产生一个间隔的话,直接下面搭配一个分解器,就可以了在一个间隔产生多个产品了,这是一个更简单的建模思路。

评分

参与人数 1威望 +10 收起 理由
大摸鱼 + 10

查看全部评分

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|全球FlexSim系统仿真中文论坛 ( 京ICP备14043114号-2 )

GMT+8, 2025-9-6 10:14 , Processed in 0.078327 second(s), 15 queries .

Powered by Discuz! X3.3© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表