全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2015-11-25 11:27:59 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
随手翻译了一下,不成体系。搞清楚合成器的第一个输入端口和其他输入端口的区别可能更容易看懂。! L: s# W& f+ s2 J* Q: ]
  1. /**根据全局表更新合成清单*/; O2 I' b2 j! x9 T( D+ q1 M
  2. string tablename ="订单表";
    7 D; V, k/ u& m# [
  3. /*
    0 C0 m& I8 t+ M5 \
  4. This option should only be used on Combiners.
    2 ?3 Z$ F' n0 {1 R- R# x" r
  5. 这段代码只能用于合成器。
    0 }6 e4 s) h' l2 v: j; O
  6. Each column in the GlobalTable is the component list for a single itemtype.- z" y2 d% A: R* H# l
  7. 全局表中的每一列是被合成临时实体的清单。
    $ n8 o0 ]6 x  [, Q
  8. The itemtype of the first flowitem to enter is used to find the correct column.- P8 p$ J$ M/ u& D) Y' L3 h
  9. 从第一个输入端口进入的临时实体的类型决定了在全局表中的哪一列去查询合成清单。
    0 k& n# U% R4 A; r- K: |) T8 G
  10. It is assumed that the global table has a row for each input port number 2 and higher.  Y0 ]3 g' h! r
  11. 全局表的每一行都代表着一个编号大于等于2的输入端口。
    & c2 P2 e- n. f" K7 @
  12. */
    ' b3 F& j$ ?4 S; j

  13. . N5 i( i( N6 e( g! P/ L3 c
  14. if(port == 1)3 D4 K0 }( z1 Y& a' H. C; N
  15. {  //The trigger on entry code fires each time a flow item enters the combiner.0 k5 `$ v: s: }  {" J0 {
  16.    //For this reason we check to make sure that the port entered is equal to 1
    ( Y3 A# K  F; ^# A5 }9 j
  17.    //because only the container will enter through port 1.; O2 k2 E$ g0 N2 b
  18.         //每个临时实体进入合成器都会激活进入触发,所以必须要检查临时实体是否是从第一个端口进入的。, |* \1 F" r* n! _, t% `) b
  19.         //只有从第一个端口进入的临时实体才是托盘等容器类临时实体。
    # ]6 J! C3 F& M# \7 \
  20.         //在上文已经解释过,第一个端口进入的临时实体的类型决定了采用全局表中的哪一列来设置合成清单。
    0 y) _) c/ S9 z' U
  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
    : M, f) L9 t! o
  22.   //合成清单以表格的形式存在。我们可以使用cell命令来获取数据节点。0 D4 @' h5 p$ W
  23.   //the number of items to retrieve from each port.  Once you know what node contains the information you can use the setnodenum; o- `) V7 m8 P0 }
  24.   //command to set the component list number based on the global table.( ?- N$ P, j2 ^$ @/ H( _8 X
  25.   //当你知道数据存储于哪个节点之后,你就可以读取全局表中的数据,然后使用setnodenum命令在合成器中设置合成清单。' [- i6 N6 G+ x  _
  26.   k2 y: V' B. d
  27.   treenode thelist = getvarnode(current,"componentlist");
    9 K$ W' Z" Z7 y
  28.   treenode thesum = getvarnode(current,"targetcomponentsum");* b* q2 K. P2 X( U0 I( P* G; z/ c
  29. //更改合成清单需要对两个数据节点进行设置。一个是componentlist,这个节点有一列数据,记录了从每个端口输入多少个临时实体。
    2 I6 j, e5 P6 ^6 ]
  30. //另一个是targetcomponentsum,记录本次打包的临时实体的总数。/ v4 [4 X, x- l0 |! F4 u+ m) [
  31.   setnodenum(thesum,0);
    $ m, A0 V1 K. o$ p0 S  J( ?. i) \6 t1 t

  32.   W1 o& ]" N( L- G# S9 e3 N: N8 @7 l
  33.   for(int index=1; index<=nrows(thelist); index++). G( w. |/ W* t. s
  34.   //componentlist以表格的形式存在,只有一列。如果合成器有n个输入端口,那么就有n-1行。(第一个输入端口输入的是容器). }' w/ x2 b/ a- z0 E! S2 s: ?5 G: X
  35.   {
      \2 n8 f( b" c3 n0 r
  36.     setnodenum(cellrowcolumn(thelist,index,1),gettablenum(tablename,index,getitemtype(item)));( P2 i6 f; B7 G+ Y6 G/ y% w
  37.     //第一输入端口进入的临时实体的类型,决定了使用全局表中的哪一列数据。/ c3 }, h2 _( n4 N/ `
  38.     //把该列数据全部读取出来,依次写入componentlist。( x6 Y0 u3 y) f9 v" `
  39.     inc(thesum,gettablenum(tablename,index,getitemtype(item)));
    $ r: T! @+ o4 g0 O$ O! B1 t
  40.     //同时更新targetcomponentsum的值。$ }; i5 n0 }$ Y) m4 c
  41.   }
    ; n! ^. m4 j. |) B3 _
  42. }
复制代码
推荐
 楼主| zorsite 发表于 2020-4-1 20:39:49 | 只看该作者
河上羊 发表于 2020-1-30 16:20& G5 t$ {. m: L" y6 Z* r7 Q2 J  I
您全局表中临时实体类型1,怎么跟发生器生成的临时实体1绑定的呢?我运行的时候好像是混乱的。

& r, `  y! \% @' l: ]. b这里涉及到几个知识点:" a& Z% D6 T7 }+ K8 D
发生器产生不同类型的临时实体(box)
( q, }: N# k( P! S' E托盘发生器产生不同类型的容器(pallet); m; F$ \9 D+ H6 \: F1 M
) W0 f0 J7 P8 C; Z! X" |; c: l
暂存区的send to port选项设置为“根据类型发送”,以此让不同的box从不同的端口进入合成器。0 H. b" k* O" i0 \# H6 ~* F+ u# w  b

; {2 i  q! Y+ }( U' X3 j4 |合成器根据进入托盘的类型在全局表中查找相应的合成清单。
5 A/ A" ?4 U& A2 d
, W  U$ I+ h% I6 `2 Q6 w. R( `不要着急,多看多思考,再看再思考,又看又思考,慢慢就知道是怎么回事了。
15#
河上羊 发表于 2020-1-30 16:20:16 | 只看该作者
zorsite 发表于 2017-4-18 07:35
& L' ~- N" ^0 c更多的时候,我们使用的是这样的表格:
& l) S' G& X9 ?. _5 I. G3 P& ~5 j! D7 e' Y* K2 b
只有一个合成器,进入不同类型的托盘时,拉取不同数量的各种类型 ...
* P% c, m' z* g) h+ _
您全局表中临时实体类型1,怎么跟发生器生成的临时实体1绑定的呢?我运行的时候好像是混乱的。
14#
河上羊 发表于 2020-1-30 10:17:56 | 只看该作者
zorsite 发表于 2017-5-16 02:07& ~& [" _" G. w; D/ Q7 Z
11# lina 看六楼的案例。
+ s6 N& z: K( W& {5 Bhttp://flexsimasia.com/viewthread.php?tid=5555&page=1&fromuid=610#pid22455 ...

  Q1 H# d7 @& S# F" }* Z) ~! Q您好,最开始生成的两种货物类型,怎么跟合成器里面绑定的全局表行的货物种类标签绑定的呢?我做的时候输出种类都是混乱的。
13#
 楼主| zorsite 发表于 2017-5-16 02:07:46 | 只看该作者
11# lina 看六楼的案例。
) o/ j/ C0 I" U  E! xhttp://flexsimasia.com/viewthread.php?tid=5555&page=1&fromuid=610#pid22455
$ T7 A3 f' [8 Y* @' t' R
3 B0 r2 ?+ Y, l2 {+ O提示:
" T; ?7 \8 n! j9 H$ L5 v! a1.订单和托盘类型是对应的。有几种订单,就应该有几种托盘类型。有几种托盘类型,就应该有几种订单,反映在全局表中,就是应该有几列。# U; K+ g- ^7 q, w' x
2.“读取的顺序怎么固定”,我想你的意思应该是按照订单1、订单2、订单3依次打包吧。这个订单其实是由托盘发生器产生的托盘类型决定的,如果你想要按顺序,那就在托盘发生器中自己去定义这个顺序。比如使用Arrival Schedule。
. a- O: l4 }0 J5 c# f5 a% {& p+ C& {6 C9 C

( R8 I4 B( A- ^9 l4 O5 a% R

本帖子中包含更多资源

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

x
12#
lulu-luka 发表于 2017-5-16 01:25:26 | 只看该作者
11# lina
4 J8 n  {% d6 C( ?$ S# z3 F% o: I
. C- }8 s2 {+ O8 }
您所说的读取顺序是指订单的读取顺序还是单个订单里不同货物的拿取(读取)顺序?另外您下面描述的问题很不清晰,大家可能无法正确理解您的问题所在,建议您在问问题的时候将自己所要实现的功能描述清楚,这样大家才好帮助您。  q) e  V3 l0 B  G& Z+ {: s
读取顺序的话如果是订单的读取顺序取决于订单进入合成器的第一个端口的前后顺序,单个订单里的读取顺序是按照您的订单全局表和合成器除第一个输入端口的其他输入端口的顺序,系统是有默认规律的。这个规律取决于合成清单和合成器输入端口的排序,通过拉动模式下调用操作员进行搬运是可以看出顺序的区别的,详见附件模型。

本帖子中包含更多资源

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

x
11#
lina 发表于 2017-5-15 14:26:19 | 只看该作者
可是读取的顺序怎么固定呢?比如按照123顺次进行合成。系统默认的是没有规律的。还有就是我想了好几天也想不明白,一个合成器,两个订单(一个全局表内),两个类型托盘,怎么让一种类型特定合成某张订单?
10#
eb_sun 发表于 2017-5-7 22:58:21 | 只看该作者
再次温习合成器代码,谢谢楼主大神的模型及其详细解释!
9#
eb_sun 发表于 2017-4-23 14:04:13 | 只看该作者
谢谢分享,激发了大家的学习兴趣
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-2 10:04 , Processed in 0.083089 second(s), 16 queries .

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

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