|
|
本帖最后由 zorsite 于 2017-5-26 11:57 编辑
# m+ Y [- ?0 H# Q, k( N+ M) u5 {% s3 ]4 A4 g( e
原谅我的小学数学是体育老师教的,不知道这个标题的表达是否正确。举个简单的小例子:我们希望把上游发生器生成的临时实体均匀的发往下游5个端口,因此我们希望得到重复的、连续的1,2,3,4,5;1,2,3,4,5;1,2,3,4,5;……(一组重复连续自然数)。
# U; B% O6 c0 F% u! m$ y
* {) Z% r) S1 z6 R% r' f, o: y/ g通常我们会根据发生器生成的临时实体的个数来生成这组重复连续自然数。
* p- T/ R: R2 @/ Y; m% P: R# ~& ]发生器的工作机制如下:
& [" k& A# G" @; o0 v5 @; s生成临时实体--确定发送端口--离开。, u; H5 ^% C' V2 T
需要注意的是,在离开触发被激活时,临时实体仍处于发生器内,并未真正离开发生器。也就是说,第一次离开触发被激活时,使用getoutput统计发生器的输出数量,得到的值为0。. ~. m/ Y( A; y4 Q: l/ u0 ?
而当进入触发被激活时,临时实体已经进入。也就是说,第一次进入触发被激活时,使用getinput统计输入数量,得到的值为1。 r- v3 ^3 g. [& R3 R
所以我们在进入触发中用getinput命令得到的数值序列为1,2,3,4,5,6,7,8.....;而我们在离开触发中用getoutput得到的数据序列为0,1,2,3,4,5,6,7,......。$ `' O; z* w. ^: Y
如何将这组连续的自然数序列转换成重复的、连续自然组序列呢?使用“求余数”的函数可以实现实种重复。
" o9 c2 _6 m3 E6 K2 V: u; h" H5 O9 S/ y4 s
如图,B列是用5除以A列得到的余数,是一组0~4的重复数,再加上1,就能得到1~5的重复数了。/ _& X# c P4 h! o
小结:
" p! }" _; K2 M$ D1 M) {5 A/ Q: m对于getoutput:- return getoutput(current)%5+1;
复制代码 对于getinput:- return (getinput(current)-1)%5+1;
复制代码 附上Flexsim对fmod命令的解释。: X* y; Z1 c. i6 y
[size=13.3333px][size=1.1em]fmod [size=1.1em](num value1, num value2)
: c$ s/ e% X- V% @Remainder of value1/value2 as a double# v q x3 D1 d1 i7 Z. k; J8 g. L
Description) r2 Y7 D' t9 a2 |
Remainder of value1/value2. fmod returns the floating-point remainder of value1 / value2. If the value of b is 0.0, fmod returns a quiet NaN. This command is great for getting a repeating set of numbers because no matter what value1 is, so long as value2 is unchanged, fmod will return a set of numbers that keeps repeating itself. |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|