全球FlexSim系统仿真中文论坛

标题: 为什么分拣传送带和传送带的“按临时实体类型发送”的判断机制不一样? [打印本页]

作者: zorsite    时间: 2012-12-5 16:04
标题: 为什么分拣传送带和传送带的“按临时实体类型发送”的判断机制不一样?
本帖最后由 zorsite 于 2012-12-5 16:17 编辑

如果是在传送带中,按临时实体类型发送代码如下:
  1. /***popup:ByExpression*/
  2. /**指定端口*/
  3. /** \n输出端口: */
  4. double value = /***tag:expression*//**/getitemtype(item)/**/;
  5. /** \n\n注释: 此指定值可以是一个常量,也可以是命令返回值(getitemtype(item), getlabelnum(item, "labelname"), 等)。*/

  6. return value;
复制代码
其判断机制为:
先获取当前临时实体类型
  1. double value =getitemtype(item);
复制代码
然后分配端口
  1. return value;
复制代码
----------------------------------------------------------------
而在分拣传送带中,按临时实体类型发送代码如下:
  1. int port = parval(2);
  2. /**按临时实体类型: */
  3. /**如果临时实体类型与端口匹配则发送临时实体。*/
  4. return getitemtype(item) == port;
复制代码
其判断机制为:
如果临时实体类型与端口匹配则发送临时实体。
  1. return getitemtype(item) == port;
复制代码
Flexsim并不是先获取临时实体类型,然后去寻找相应端口;而是在每一个端口判断,当前临时实体的类型值是否与当前端口值相符,如果相符,则发送,如果不相符,则传送到下一段端口继续判断。可能另外一种代码更为容易理解:

  1. int port = parval(2);
  2. switch(port)
  3. {
  4. case 1: return getitemtype(item) == 1;
  5. case 2: return getitemtype(item) == 2;
  6. case 3: return getitemtype(item) == 3;
  7. default: return 1;
  8. }
复制代码
--------------------------------------------------------------
在我看来,第一种机制显然更为直观,每到达一个临时实体,直接获取其类型值,然后指定端口。
为什么在分拣传送带中采用了另外一种判断机制?其用意何在?

我感觉分拣传送带应该也可以通过第一种判断机制来指定端口,但是目前我的水平不够,而且demo版无法查看树结构,所以不知然后实现。我隐约感觉,这可能是在分拣传送带下并没有“发送至端口”这一选项,而是“发送条件”。
作者: zorsite    时间: 2012-12-7 18:25
本帖最后由 zorsite 于 2012-12-7 20:21 编辑

传送带send to port代码返回的是端口值:
  1. double value =getitemtype(item);
  2. return value;
  3. //返回临时实体类型作为端口值。
复制代码
分拣传送带send requirement代码返回的是0或1:
  1. int port = parval(2);
  2. //声明一个名为port 的整数变量,并为该变量赋值,取值为临时实体穿越离开的输出端口号。

  3. /**按临时实体类型: */
  4. /**如果临时实体类型与端口匹配则发送临时实体。*/
  5. return getitemtype(item) == port;
  6. //返回一个值,0或1。如果当前实体类型=端口号,返回1,则发送。如果当前实体类型不等于端口号,返回0,则更换端口,直至更换的端口值=实体类型。
复制代码

作者: domcylai    时间: 2012-12-17 09:55
分拣传送带上所有货物每次到达一个端口(就是那根红线,箭头指向外)的时候,就会触发这个分拣条件,条件成立就发送,条件不成立就不发送.

double value =getitemtype(item);

则条件成立return 1,否则不成立return 0。

也就是说,这个脚本里面需要返回一个值,0和!0
希望对你有帮助!




欢迎光临 全球FlexSim系统仿真中文论坛 (http://www.flexsimasia.com/) Powered by Discuz! X3.3