|
自己整理了一下思路,才发现自带的代码是多么的精简,这就是高手与新手的差别啊~~
: \9 T8 ~/ p" k/ E以下是我按照自己的思路编写的代码:- int batchnumber = 5;+ u) I" C$ \: h/ t8 {: D" g
- double cycletime = exponential(0, 4, 0);
& i8 n4 x/ O( d& o+ C" `7 w - string labelName = "批次数量";" D2 Z9 P: L' m: B
- treenode curlabel = assertlabel(current, labelName, DATATYPE_NUMBER);
2 g4 p& N: M, W) ]+ u - 6 {4 r- h Z6 l6 B
- if (time()==0)
# h4 S- W1 o/ D6 M% {7 P - {
8 p2 [& _! D S - setnodenum(curlabel,batchnumber);& z0 b! V* A/ w2 Z; Q9 q
- return cycletime;
! a- |0 \, J7 d/ ] - }& s9 h) Q( G! A- e5 A
- else
; N# L! K6 L$ Y* _5 a- H - {1 K: ^3 `! k6 W& g
- if (getnodenum(curlabel)==1)4 ~: r( p4 H+ J j9 I
- //如果等于0,似乎是正确的,但是会比预期中的批次数量大1.
" U2 F6 E9 k# g5 U - //原因在于只要激发了该触发,就一定会生成一个临时实体。1 R5 @/ o: w& r3 Z; h C. r9 |
- {. b$ t2 g0 {8 Y$ ?
- setnodenum(curlabel,batchnumber);1 I2 }# |# |/ z% A: Q) g* s
- //想要执行的语句一定要放在return前面。- F% f1 }" a) H# a4 |: z/ k5 l
- return cycletime;. r4 w+ j4 J8 g% h3 D! u
- } k* V6 n5 n/ r5 o7 X
- else
0 ^1 x% p$ e) \3 R; o - {; e# n. ]" Y8 I4 g
- inc(curlabel,-1);
9 `3 b2 P" ^9 [' D9 r3 \$ R& x - return 0;
% H1 `- N0 M# g) q" ] - 9 S F/ j0 n9 w' ]( Y% f+ U
- }1 q8 _3 b$ K( R& s2 E1 i m
- }
复制代码 以下是flexsim自带代码:- int batchnumber = 5;
" Q/ ]# b* s, M; {" E6 h( x' [ - double cycletime = exponential(0, 10, 0);% O+ \/ }2 ^& @/ ^9 N# V
- string labelName = "批次数量";/ X3 x6 s( ^. ~# \" z/ U3 w+ b
-
. _; _3 D/ D; A - treenode curlabel = assertlabel(current, labelName, DATATYPE_NUMBER);
2 g+ ^' P$ i6 q' w
) x$ q* t, }- ]' K; L6 _( a7 V5 ?- if (time()>0 && getnodenum(curlabel)>1) {
( n( t' u2 s: W1 a/ E* A8 V, F - inc(curlabel,-1);' [; D* [" P" l L6 C
- return 0;
& z1 o1 G1 }& V2 e9 c/ e$ ? - } else {( w/ N; y* |" O! a3 z5 K5 r B
- setnodenum(curlabel,batchnumber);
, j2 r& i( U/ A* D2 r" A0 ~ - return cycletime;
. o3 @. w6 K& v$ K4 m6 U! K7 P - }
复制代码 |
|