全球FlexSim系统仿真中文论坛

搜索
查看: 20344|回复: 16
打印 上一主题 下一主题

根据全局表更新合成器的合成清单

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2015-11-25 11:27:59 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
随手翻译了一下,不成体系。搞清楚合成器的第一个输入端口和其他输入端口的区别可能更容易看懂。, c% J9 r8 f1 v/ v" P) t
  1. /**根据全局表更新合成清单*/
    0 J8 T) X2 @: d; ^- |( O
  2. string tablename ="订单表";. ~* a+ A7 L8 m' s/ h
  3. /*( D7 }3 f+ x8 R; e" z: j
  4. This option should only be used on Combiners.
    " u! m4 {. @& }2 B0 l0 t; r7 u9 O
  5. 这段代码只能用于合成器。' }3 I* G  J* h" E( j! d7 u8 w; H
  6. Each column in the GlobalTable is the component list for a single itemtype.$ \8 k0 z) r- o( v, p2 y3 _
  7. 全局表中的每一列是被合成临时实体的清单。
    , R5 l: Y8 M- S  {8 Q2 U# N, J
  8. The itemtype of the first flowitem to enter is used to find the correct column.
    8 X/ X" `3 R6 d/ u6 ?
  9. 从第一个输入端口进入的临时实体的类型决定了在全局表中的哪一列去查询合成清单。7 p; g8 D1 ]$ e9 R
  10. It is assumed that the global table has a row for each input port number 2 and higher.: N; s# B. x% s* x. T1 y6 X5 s" {& @
  11. 全局表的每一行都代表着一个编号大于等于2的输入端口。! ~: A9 Q/ T1 Q; |, F
  12. */
    ' }( |, `4 D3 ?% ]  c# ]2 k4 b9 v
  13. 7 q( @0 U. R9 A
  14. if(port == 1); z6 S) s6 n% w4 K! D9 M7 ^
  15. {  //The trigger on entry code fires each time a flow item enters the combiner.
    1 d$ H0 }0 r" H+ t& p
  16.    //For this reason we check to make sure that the port entered is equal to 1# d4 J, s9 a% S5 W7 i0 `$ ~
  17.    //because only the container will enter through port 1.7 z. J" e* e1 Q7 k8 {; S5 w
  18.         //每个临时实体进入合成器都会激活进入触发,所以必须要检查临时实体是否是从第一个端口进入的。$ c+ @. x" T6 Y7 a. @- ~1 W
  19.         //只有从第一个端口进入的临时实体才是托盘等容器类临时实体。
    . _: U# a& q9 X7 ]* f% v% F9 B9 t
  20.         //在上文已经解释过,第一个端口进入的临时实体的类型决定了采用全局表中的哪一列来设置合成清单。
    + a8 h1 W; t& s6 ]
  21.   //The component list in a combiner is set up as a table.  This allows us to use the cell commands to obtain the node that contains# S" B* Y! Q4 Y3 J" E
  22.   //合成清单以表格的形式存在。我们可以使用cell命令来获取数据节点。
    0 i9 [% {+ d& p' S. S( `) P) E
  23.   //the number of items to retrieve from each port.  Once you know what node contains the information you can use the setnodenum
    6 k) }5 v! f8 r! a% [
  24.   //command to set the component list number based on the global table.
    5 F/ j  `+ k7 B& l7 _
  25.   //当你知道数据存储于哪个节点之后,你就可以读取全局表中的数据,然后使用setnodenum命令在合成器中设置合成清单。7 B8 }/ O, ]/ c; d8 ]' V! }* @

  26. - ?: {" G, j' k! a2 q7 v3 {& `* e
  27.   treenode thelist = getvarnode(current,"componentlist");1 Z9 K* `2 ?, U' |
  28.   treenode thesum = getvarnode(current,"targetcomponentsum");% L, T7 ]' i! U; T
  29. //更改合成清单需要对两个数据节点进行设置。一个是componentlist,这个节点有一列数据,记录了从每个端口输入多少个临时实体。
    0 N3 f* _3 w1 J/ {6 o
  30. //另一个是targetcomponentsum,记录本次打包的临时实体的总数。
    5 m6 b0 W! ?$ l, Q; F
  31.   setnodenum(thesum,0);& l4 T3 @- R& w$ F( A: N4 t
  32. 9 P, O# u1 l9 Y& n, N
  33.   for(int index=1; index<=nrows(thelist); index++)
    ! k( e* g: O: i' I! ?& B
  34.   //componentlist以表格的形式存在,只有一列。如果合成器有n个输入端口,那么就有n-1行。(第一个输入端口输入的是容器)
    6 @! n7 q, Q( v" F9 d& |
  35.   {
    7 M$ i* [5 b6 |5 W7 [# w0 Z* D
  36.     setnodenum(cellrowcolumn(thelist,index,1),gettablenum(tablename,index,getitemtype(item)));
    ) h4 d4 ^7 y2 a) l
  37.     //第一输入端口进入的临时实体的类型,决定了使用全局表中的哪一列数据。
      M3 ~; O% X8 U: s6 J7 t
  38.     //把该列数据全部读取出来,依次写入componentlist。
    8 q$ H% {. ?2 C
  39.     inc(thesum,gettablenum(tablename,index,getitemtype(item)));7 t' A' d+ I# [" |
  40.     //同时更新targetcomponentsum的值。1 S. \, y" O: M0 G
  41.   }
    8 y# ~  w8 i8 |1 g
  42. }
复制代码
2#
 楼主| zorsite 发表于 2017-4-18 07:24:37 | 显示全部楼层
本帖最后由 zorsite 于 2017-4-18 07:40 编辑 % |+ A; E* a& s! a  C/ N# t
9 L  I! `2 Q/ Q2 [, W- a! b
3# 草色青青 . q3 z: r' ~) |( q8 r+ c  W
假设你有3个合成器,分别只接受类型为1、2、3的临时实体进行合成。; g% `1 q& E+ Y* P4 F
托盘类型1托盘类型2托盘类型3
合成器1321
合成器2123
合成器3251
9 b$ R: h  q" g4 j
- e4 d" t9 f1 @# w
以第3行,第2列为例解释一下这个表格的含义:
. d4 u# o: T( `- w6 T) F当第3个合成器(第三行)接收到类型为2(第二列)的托盘时,从上游拉取5个(第三行第二列的值为5)类型为3(合成器3只合成类型为3的临时实体)的临时实体进行加工。
3 I: ^  y% p, ^
" b/ u; E$ D8 q3 i( b; m, M6 L' b仍然是根据全局表更新组件列表,代码如下:
  1. string tablename = "GlobalTable1";
    ' Q' v8 ~2 C3 p" _5 ]
  2. if(port == 1)
    8 d6 x- |3 r" j8 X* b. l
  3. {& L0 A: D* j, ]5 {+ k; ?6 u) f
  4. int row=ipopno(current,2);5 E# F4 Z$ ?; T0 I; w. {8 K  |
  5. int col=getitemtype(item);/ n$ l: |/ Z  s4 H% L
  6. double num=gettablenum(tablename,row,col);) E, z9 r6 {9 A
  7. treenode thelist = getvarnode(current,"componentlist");1 h1 \/ {$ c6 {+ e$ L( M0 T
  8. treenode thesum = getvarnode(current,"targetcomponentsum");
    ) a  |9 G# S. H
  9. setnodenum(cellrowcolumn(thelist,1,1),num);% U5 G& x: B0 D# u: P1 T- J$ [
  10. setnodenum(thesum,num);9 v& b+ t# C2 F! y" S8 w
  11. }
复制代码

本帖子中包含更多资源

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

x
3#
 楼主| zorsite 发表于 2017-4-18 07:35:09 | 显示全部楼层
本帖最后由 zorsite 于 2017-4-18 07:39 编辑
2 e' b9 p/ A8 i* m' l) Z4 s- Q  E  M! o' j+ n
更多的时候,我们使用的是这样的表格:
托盘类型1托盘类型2托盘类型3
临时实体类型1123
临时实体类型2121
临时实体类型3121
% Y4 K9 [5 R% b* n4 h  b' P; f

6 ^# P1 I! g1 V只有一个合成器,进入不同类型的托盘时,拉取不同数量的各种类型的临时实体来进行打包。

本帖子中包含更多资源

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

x
4#
 楼主| zorsite 发表于 2017-5-16 02:07:46 | 显示全部楼层
11# lina 看六楼的案例。
5 q' L  g, |* i% d9 D4 ~" Rhttp://flexsimasia.com/viewthread.php?tid=5555&page=1&fromuid=610#pid22455
8 J- Y: a& H# v* N7 U
: p& `" B4 {4 @+ {提示:
2 C; s7 ]2 a: A- o( r1.订单和托盘类型是对应的。有几种订单,就应该有几种托盘类型。有几种托盘类型,就应该有几种订单,反映在全局表中,就是应该有几列。; K+ W  d+ P" A7 e& B' [2 y
2.“读取的顺序怎么固定”,我想你的意思应该是按照订单1、订单2、订单3依次打包吧。这个订单其实是由托盘发生器产生的托盘类型决定的,如果你想要按顺序,那就在托盘发生器中自己去定义这个顺序。比如使用Arrival Schedule。
  W' }/ q, o/ U0 W, n6 B) |* w% `6 K) D( w5 d

4 r$ U' X/ d. |8 y! L

本帖子中包含更多资源

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

x
5#
 楼主| zorsite 发表于 2020-4-1 20:39:49 | 显示全部楼层
河上羊 发表于 2020-1-30 16:20
- I5 K* j0 Z+ i* k7 w/ E您全局表中临时实体类型1,怎么跟发生器生成的临时实体1绑定的呢?我运行的时候好像是混乱的。

# ?* }: V8 a1 i+ J  k& n这里涉及到几个知识点:
  x3 r0 N" T) q" G9 n. P发生器产生不同类型的临时实体(box)5 ?# H* t  X7 P/ U- q8 P' @% P( @
托盘发生器产生不同类型的容器(pallet)
; ~7 I" q4 P" g# z" _, B" C! n7 b
暂存区的send to port选项设置为“根据类型发送”,以此让不同的box从不同的端口进入合成器。
: k1 p* M7 O) i) b
; b" c0 Y4 c  D* X/ B* \合成器根据进入托盘的类型在全局表中查找相应的合成清单。1 f1 y- `" S5 ?' }

3 C. Z) x+ d) ?$ {( r# t: I8 u3 W不要着急,多看多思考,再看再思考,又看又思考,慢慢就知道是怎么回事了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-2 15:44 , Processed in 0.061993 second(s), 14 queries .

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

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