全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2016-3-22 11:18:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zorsite 于 2016-3-22 12:19 编辑
1 `3 ?% a, O. y) [6 @7 C: i
/ o& I3 `% x/ i1 U/ @# }目标:
/ w! k- A3 e0 q$ G: g1.首先要搞清楚Source的工作原理) n# {( p" Z; c. ?% E% z
2.根据原理编写代码,让Source成批次的生成某个数量的临时实体。) h' a5 j4 g5 [
试验模型如下图所示:
2 s9 o5 ^# p/ c1 W% l% h
3 |- y0 R% k1 I3 g使用Event Log工具,分析Source的工作原理。
6 H& J6 B/ `; [( e' R6 y
6 p- j9 @3 Y. z由日志文件可以看出,Source遵循以下工作原理:
# b# S% F" ~! Q1 d1 e+ i5 z% l# G( [7 R模型重置时:激发Inter-Arrival Time触发,获取第一次生成临时实体的时间t1
( p. [& e) a8 D" @5 Q) S" W! t当模型时间到达t1时,激发Engine事件Timed Event: CREATEPART,生成一个临时实体,在被创建的临时实体离开Source之前,再一次激发Inter-Arrival Time触发,获取下一次生成临时实体的时间t2
5 ^( l2 \# L7 x* E' J3 c* c+ C当模型时间到达(t1+t2)时,重复上一步骤) [( q: B/ W! f4 {/ s8 G
循环执行以上步骤,直到某些条件得到满足(比如下游暂存区达到最大容量无法接收临时实体)
! C" w8 v% |- a; ~& z( Q如何让Source一次性生成多个临时实体?  n/ U% i3 {4 }4 R# f1 H: K
经过分析我们知道了Source的触发机制:
3 h. A- I+ x0 Q! _0 q  G$ ?/ p2 A& G0时刻获取t16 P9 Q0 G1 k; L4 N
t1时刻获取t2- ^' S' U( @; J0 j6 ~( X7 W  T
(t1+t2)时刻获取t3
# Y0 @1 T9 v. S+ S$ f0 C5 u  d(t1+t2+t3)时刻获取t4( L( m/ G9 C! x, |, h# |' R& x/ q
……  @  E% B' x# t2 g, D" g

+ H) E# S' W8 U, g4 z6 A以本模型为例:每2个时间单位生成一个临时实体。
$ W2 \% A0 N3 m" x4 j第0时刻返回t1=2* t! k# B; v. @& M6 |) c1 `
第(t1时刻)生成1个临时实体,同时返回t2=2
. Q$ b6 d7 o( G; R  I# Z; V第(t1+t2时刻)生成1个临时实体,同时返回t3=2" C% P: s) Z1 O$ g
第(t1+t2+t3时刻)……9 U4 @# |# Q# P6 u# |
如果第(t1时刻)时返回t2=0呢?$ j( M+ l" x/ M7 ?9 N
第0时刻返回t1=2
, p$ O# M1 r7 r; e3 t第t1时刻返回t2=02 h; G, n7 g3 [. u" C0 m- r
第(t1+t2)时刻返回t3=2- t, s& r" D& q  }: d
你会发现在第2时间单位的时候生成了2个临时实体& z' T) a/ M( h1 `5 G- `3 J) g- x

! O% S4 U/ ]* X2 a* @思路
" h" H5 A) c0 N# `3 L+ M引入一个计数器,让计数器来控制返回时间=0的次数,就可以控制批次数量。假设批次数量为5:0 h/ c, w5 V1 f! J+ [  S" s) n

2 x" ?. K$ N) d代码
  1. int batchnumber = 5;- [# [- \9 q! c  y& w
  2. double cycletime = exponential(0,10);% m0 @" P8 S9 |3 u+ ^4 h
  3. string labelName = "批次数量";* T& F  U) F3 B: f
  4. treenode curlabel = assertlabel(current, labelName, DATATYPE_NUMBER);' i: Q3 C0 W7 D3 F( h+ |

  5. 0 A# h# n2 Y! w
  6. if (time()==0 || getnodenum(curlabel)==1) ; t  ]: `7 R: v" b0 z
  7. {  setnodenum(curlabel,batchnumber);3 f3 v+ B/ W- k: a7 p6 c
  8.   return cycletime;}
    % R- I3 N; O3 k  o3 s0 h
  9. else
    / d' W: T  p6 M; e: k) s
  10. {  inc(curlabel,-1);
    * P( O1 [. r, e" J& J0 @
  11.   return 0;}
    & G: i/ i! a* T8 A' ~+ C
复制代码
PS:% T1 j3 O& j9 Z7 c3 d) S. @
1.本段代码有不完善之处。
/ O- |+ {# u  c8 _1 n: e* r2.发生器产生临时实体的三种方式,其内部逻辑有一些差别。
( J  f$ E* e" x7 X/ Z+ t3.请参考我的另一篇帖子:如何手动控制临时实体的产生http://flexsim.asia/viewthread.php?tid=6171&

本帖子中包含更多资源

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

x

评分

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

查看全部评分

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

评分

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

查看全部评分

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

本版积分规则

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

GMT+8, 2025-10-23 22:55 , Processed in 0.076872 second(s), 16 queries .

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

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