全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2016-3-22 11:18:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zorsite 于 2016-3-22 12:19 编辑 $ Q/ @, \4 I1 a/ d
1 s3 Y: u9 `% X% a. D6 @9 m
目标:
' `% B( v& T6 k& d1.首先要搞清楚Source的工作原理) W2 E9 v. z$ b  R. m& S! n  y
2.根据原理编写代码,让Source成批次的生成某个数量的临时实体。5 S6 S8 E1 A2 V% f2 }/ O7 o: k
试验模型如下图所示:3 x8 }3 }7 G2 z% ^! X

# o. ~* G4 R+ O( L3 D3 k使用Event Log工具,分析Source的工作原理。
+ C! j# s. ]* L/ f
% }9 G+ }5 t: D$ q* ^2 x6 ?由日志文件可以看出,Source遵循以下工作原理:
, E- Y1 L. \" O6 l4 Y, r6 V9 H模型重置时:激发Inter-Arrival Time触发,获取第一次生成临时实体的时间t1
, }! A3 s! x1 Y6 {9 B3 A( T7 U" K0 m当模型时间到达t1时,激发Engine事件Timed Event: CREATEPART,生成一个临时实体,在被创建的临时实体离开Source之前,再一次激发Inter-Arrival Time触发,获取下一次生成临时实体的时间t2
9 ?# ], |, z) r/ c  Q& c* n当模型时间到达(t1+t2)时,重复上一步骤
" X9 L% Y3 b/ C. J, q循环执行以上步骤,直到某些条件得到满足(比如下游暂存区达到最大容量无法接收临时实体)* ]2 @# k. V+ X
如何让Source一次性生成多个临时实体?
$ J% a* X6 I* h+ K经过分析我们知道了Source的触发机制:
5 }! {. J- V6 c2 C5 h0 X0时刻获取t16 d, i9 T" ?3 P: z3 o' ~
t1时刻获取t2: p/ f8 G1 w" |1 V! {
(t1+t2)时刻获取t3. H6 t% e2 c/ A/ y6 M) n
(t1+t2+t3)时刻获取t4
& t3 W+ q* F& `! `/ R9 F9 o……
) s: F# M) g7 Y# s3 m: ]  m1 ?# L# i4 v# t" D
以本模型为例:每2个时间单位生成一个临时实体。9 ?4 O" P5 H0 o) O
第0时刻返回t1=2* \0 j2 Y1 N, }" y3 a
第(t1时刻)生成1个临时实体,同时返回t2=2
. m3 {, o& u# G5 l( L* N; _第(t1+t2时刻)生成1个临时实体,同时返回t3=2
9 S* S# c: U  e' ~" @- |' B第(t1+t2+t3时刻)……
! Z; `0 F! V% Z( t6 w7 T5 p- S6 ]如果第(t1时刻)时返回t2=0呢?
5 J3 c; |( J" J9 ^2 r, B+ ^* H第0时刻返回t1=2
6 b+ e, I, D" }( J$ N第t1时刻返回t2=0- O+ K% \- L- ~- b* d1 u
第(t1+t2)时刻返回t3=2
( S) X" W; ~2 l- I! Y$ k& r( H. P( i你会发现在第2时间单位的时候生成了2个临时实体
! I4 G) ]% M  Y) U% @# U2 _$ J0 c! r0 z- p
思路
! |4 R' ^3 u5 ?9 m" Y  A. Y, f) A, `引入一个计数器,让计数器来控制返回时间=0的次数,就可以控制批次数量。假设批次数量为5:# Q1 G) j# |4 a' y

0 D" v9 l/ [' \8 _4 @3 @- x代码
  1. int batchnumber = 5;- L% c5 a2 z' h. `, ]# e6 y
  2. double cycletime = exponential(0,10);
    3 n" X% Q( C) P1 Q) M
  3. string labelName = "批次数量";
    3 o5 a% u) E- Q* P" g1 G8 C) `
  4. treenode curlabel = assertlabel(current, labelName, DATATYPE_NUMBER);
    ; v- g1 Z' N; B! P7 V+ b; W

  5. ) p1 t) b' _) Y# T2 A- M
  6. if (time()==0 || getnodenum(curlabel)==1) + g4 g) e* O; I3 m$ S' q  a
  7. {  setnodenum(curlabel,batchnumber);
    6 Y5 i0 g( D( ]+ ?0 d& S
  8.   return cycletime;}% }4 R# X# `, X, |* h7 B
  9. else # i4 o3 f, S! [( _
  10. {  inc(curlabel,-1);% T) _  g8 g" u+ C  e( |9 n0 D1 k
  11.   return 0;}2 f0 g. |1 `& R, k8 a
复制代码
PS:
+ C  {: W5 ?" v% _1.本段代码有不完善之处。
# O# J. M& V/ j8 j  }  `2.发生器产生临时实体的三种方式,其内部逻辑有一些差别。8 g9 a& W: {+ I1 ~  m; l
3.请参考我的另一篇帖子:如何手动控制临时实体的产生http://flexsim.asia/viewthread.php?tid=6171&

本帖子中包含更多资源

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

x

评分

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

查看全部评分

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

评分

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

查看全部评分

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

本版积分规则

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

GMT+8, 2025-10-24 02:44 , Processed in 0.065543 second(s), 15 queries .

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

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