全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2016-3-22 11:18:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zorsite 于 2016-3-22 12:19 编辑
2 z4 J. _( v7 T; ~1 r
2 Y6 n7 b! x+ X4 Z1 j5 E目标:6 y  d1 K1 i- l) v! [2 Q: W
1.首先要搞清楚Source的工作原理" B* O6 `% s9 x* r; A# N
2.根据原理编写代码,让Source成批次的生成某个数量的临时实体。2 L" k7 H4 a9 a( l0 t& `7 k
试验模型如下图所示:
8 _) v' s0 S5 i3 p& q* z; a$ _1 v
; w* [8 U5 u8 u8 c" W( h使用Event Log工具,分析Source的工作原理。. v# k! @8 m* n1 R7 N/ _" q

  \3 P) O% a; j9 G$ ?' U  V8 n' h由日志文件可以看出,Source遵循以下工作原理:
9 n  I$ i6 j, ^* g3 [; s+ \  I模型重置时:激发Inter-Arrival Time触发,获取第一次生成临时实体的时间t1
1 d: o9 O1 z; E: l  c- U$ b当模型时间到达t1时,激发Engine事件Timed Event: CREATEPART,生成一个临时实体,在被创建的临时实体离开Source之前,再一次激发Inter-Arrival Time触发,获取下一次生成临时实体的时间t25 D( C% e9 W- q# {( p: P; ?
当模型时间到达(t1+t2)时,重复上一步骤
7 _0 [( t! g5 A- r$ _- S7 D/ I+ \) _循环执行以上步骤,直到某些条件得到满足(比如下游暂存区达到最大容量无法接收临时实体)
5 w. x! r- `. L* s! D0 b; c如何让Source一次性生成多个临时实体?8 Z, A( D; \/ t: K
经过分析我们知道了Source的触发机制:) m2 ~* q$ q5 l) s$ h
0时刻获取t1
0 |5 x& @8 J- `# |t1时刻获取t2
' P* y3 |* ~9 c(t1+t2)时刻获取t3
/ W: m* r8 o# Z4 C% F' V( {# z( g(t1+t2+t3)时刻获取t4
7 q# f9 L% v* u9 @% t……  h$ z7 `. U$ [3 X' N% D
% Q( [% ]7 f' o8 e- \
以本模型为例:每2个时间单位生成一个临时实体。2 i# j3 L+ {2 ~% j$ v3 W
第0时刻返回t1=2
; @, t+ \; Z( w2 y' p$ w# V第(t1时刻)生成1个临时实体,同时返回t2=2, a+ ?8 K' H# Y2 Q
第(t1+t2时刻)生成1个临时实体,同时返回t3=2  m. H" }; R5 }0 N; @
第(t1+t2+t3时刻)……/ Y9 |  a* J) s5 X
如果第(t1时刻)时返回t2=0呢?
: K8 z# G, C, k  l' e4 A, U8 P第0时刻返回t1=2
5 F/ M% O" N' ]2 R1 m% q" }第t1时刻返回t2=0
) l) |2 n. o" a& _( p% x" u第(t1+t2)时刻返回t3=2
+ r* H- }1 f  d( F  b( I你会发现在第2时间单位的时候生成了2个临时实体
; Y& O. s+ p2 a
9 f- b7 ?* W1 s5 B( s思路
' ]1 P. f/ J) S7 f5 u2 f$ \6 S引入一个计数器,让计数器来控制返回时间=0的次数,就可以控制批次数量。假设批次数量为5:+ V. Y8 F, Z! X- o$ j0 P) n

* @& |! W" T1 v) E6 E) w, S' O代码
  1. int batchnumber = 5;0 |0 \3 j/ X: g8 ~8 q# Z  G
  2. double cycletime = exponential(0,10);
    + X8 D# {& a0 g0 H( a* ?' y
  3. string labelName = "批次数量";
    6 |! ]$ k: B& u7 f
  4. treenode curlabel = assertlabel(current, labelName, DATATYPE_NUMBER);" C4 }6 q; ~$ A1 J

  5. ! M) @) m& r/ I
  6. if (time()==0 || getnodenum(curlabel)==1)   Z' d4 Y& S1 F6 p: i% I( Q; Z3 R
  7. {  setnodenum(curlabel,batchnumber);, ~1 C: D( x. Q) m
  8.   return cycletime;}
    3 ^# F9 {$ n/ R5 f2 g
  9. else - Z' `& J6 L1 k: [8 B
  10. {  inc(curlabel,-1);: S% v& x7 N3 O
  11.   return 0;}' J& j8 ~! T$ N( q0 ?3 P
复制代码
PS:
0 s4 ~' U) r. f' K* `1.本段代码有不完善之处。
6 D; C' z$ ?! u% A3 A7 S2.发生器产生临时实体的三种方式,其内部逻辑有一些差别。  ~. M9 ?4 h) z
3.请参考我的另一篇帖子:如何手动控制临时实体的产生http://flexsim.asia/viewthread.php?tid=6171&

本帖子中包含更多资源

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

x

评分

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

查看全部评分

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

评分

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

查看全部评分

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

本版积分规则

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

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

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

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