设为首页收藏本站

最大的系统仿真与系统优化公益交流社区

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6445|回复: 7

[原创] Plant使用体会,若有Expert请指摘

[复制链接]
发表于 2010-4-17 12:27:26 | 显示全部楼层 |阅读模式
用的是Plant 7.5版本的,支持3D模块,刚刚完成一个较大的模型,现谈几点体会:
$ K% y1 r$ ~6 P    优点:4 X2 s+ y: a  v9 t& T) b  ^0 ^
      1.用Frame进行功能模块划分,建模结构清晰;5 s' u. S) J: G6 t  ^7 K: g
      2.SimTalk简单易用,功能强大,几乎可以用其完成所有的创建、设置、试验任务,但个别参数的修改存在问题,个人目前未找到代码实现方法,仍是手动去设,如:启用importer后的broker设置,如何用SimTalk去实现。需要说明一点,较大的模型只有用代码去做,手动很难完成。6 d9 Z! P0 b. O9 z% p8 u
      3.基本类库简易、基础,功能扩展性强;本人以前用过Flexsim,感觉定制对象的话,plant更为方便
+ b4 B0 a% M: g% V* [5 k# E      当然,还有其他很多的优点,不再一一赘述,下面将一下个人感觉不太理想的几个地方:# p" Q7 {4 L/ Q) e$ ~9 K; e
      1.仿真钟运行太慢,当然这种说法或许不正确,但反复调整后却还是这样的结果:如果事件极为密集,而且Mode设为Animate All,那么,模型运行的甚至比真实时间还要慢,很苦恼的地方!或许会说,改一下Mode,设为Fast Forward或者Step Forward怎么样?如果是Fast Forward那么3D环境里不会有Animation;Step Forward则与Animate All没有太大区别。当然了,电脑硬件限制也是一定的,毕竟不是专业的Simulation Workstation,这是下一个要谈的问题。( D% c. b& U- v
      2.Plant对线程的划分好像不够理想,不能充分利用双核的硬件,在Task Manager里可以很清楚的看到Tune.exe的利用率最多不过51%,好像只用了一个核,不能将大量的计算充分分摊到两个核上,当然,时钟已经丝毫no faster了。* j1 `6 o" i* Q8 r1 e
      3.类修改与类对象修改,有时类的属性改变之后,相应对象的参数并未随之改变,这有3d控制参数,也有Dialog中需设置的参数,解决办法要么是“激活”一下,即换个值存一下再换回原值,或者只有Deleteobject后再重建。不知这是不是软件自身的bug0 U! ^( P# i# K' Z& j0 Z
      4.3D视图控制,经常会在旋转视图时跳转到上一级,很无奈,好不容易调出的角度一下又成Z视图了。+ U6 Q' G/ P3 [/ L. A- N4 Q# k  e
      5.2d与3D是两个独立的模块,它们是连接关系,3D的地位好像略低一点,2d控制3D很方便,反过来就不行了。
# c+ W+ h3 w6 t* p3 j, F* t; B6 y7 [& j      6.3D视图有时还会意外丢失,更遭的是,如果你修改了Mus在模型里的对象硬要存回去,那会把文件毁掉,再也打不开了,当然这是操作不当,不能算是软件的问题。9 G* g% `2 o1 p4 m. B* i
      还有一些问题,先讲这么多,若有expert偶然经过可指摘不当之处,这是本人目前的一点点小的实践。

评分

参与人数 1仿真币 +30 +2 收起 理由
苘苘 + 30 + 2

查看全部评分

发表于 2010-4-17 13:24:07 | 显示全部楼层
楼主的经验总结的非常好,对新人很有帮助,再次感谢您的无私分享
发表于 2010-4-19 16:22:10 | 显示全部楼层
本帖最后由 SimChen 于 2010-4-19 16:24 编辑 - u# \9 F8 `0 g
, t* [5 m! I" m3 F. S* w
Plant的计算速度相当快,只有专业的模型才会觉得速度不够,还有三维模型不在讨论范围,因为Plant的3D还不成熟。Plant是以事件触发的,没有事件或事件很少就走得快。这里可以给几个提示
$ W' E1 P  P: h& J% n! z' i
$ @$ {; C" r+ F# @在编程中如果有循环,当达成条件后用exitLoop就可以跳出循环,加快运送速度。/ S+ l1 U1 `4 F8 m8 h" r- H# e
尽量避免写wait until语句,因为只要这个条件没有达成,以后所有进行的事件都要重新检验这个条件。用专业术语讲,这条语句是performance killer。0 d# d& \+ _3 w0 H5 q& ]( d2 P
有些模块会严重影响运算速度,如Sankey,建议不用时不要激活它。

评分

参与人数 1仿真币 +20 +1 收起 理由
苘苘 + 20 + 1

查看全部评分

 楼主| 发表于 2010-4-19 21:24:56 | 显示全部楼层
3# SimChen - y# {, `! q' B& }  y; J
非常感谢,exitloop就不用说了,只是waituntil 是必不可少的,而且用waituntil时限制较多,所监视的变量基本只能是最简单的变量,而SimTalk中所支持数据类型虽然有诸如table,queue,stack等高级形式却不支持基础的数组类型,如此以来如果所要watch的变量较多那么只有一个个写出来了,也没有找到可以用SimTalk创建变量的方法,请expert给点对策才好
发表于 2010-4-20 17:49:42 | 显示全部楼层
理论上所有的Wait until都是可以避免的。程序的技巧是每当条件可能成立时,都要重新call这个程序进行检验。举个简单的例子,如果要buffer的贮量大于五才进行buffer中物件的筛选,那么可以在每个物件进入buffer时触发一个程序,仅在if条件成立时才做筛选。
- c* k8 U; t% e& q5 j; M2 x: v
/ T& o1 I. n4 w, r  t9 r另外在精密度要求不高的情况下,再介绍一个小技巧,用一个程序,每隔几秒执行if一次,要比wait until划算很多。
  u8 Y) T9 Y4 q2 }3 F$ ?+ G
. Y6 J  l- u1 f3 |' O& Z# ?' M3 d, D还有忘了说了,Display也会严重影响运行速度。很多时候可以用全局变量代替,这个全局变量就可以用Wait until来检测。另外关于simtalk创建变量的问题,其实所有的局部变量都可以,甚至是table的形式。
发表于 2010-4-21 10:05:15 | 显示全部楼层
个人观点:7 E( Y) K+ Y) O. z" g9 N
1,其一:simtalk的计算速度是非常快的,前提是不用的对象千万不能激活,否则机器卡死都有可能,其二:代码的编写基本不会影响到机器的运行,即使不停的使用waituntil影响也不大,即使是十W条代码,以现在电脑的运行速度可以忽略不计,在我所做的大模型中,不开3D,不会影响速度的。其三,切记,分层不能太多、同种对象最好能通用。比如说你mu有50种之多,然后在目录树中将这些对象分到第三层或更多层下面。而你的frame的根地址默认在最外层。这个时候你调用资源的时候寻地址那就相当的慢了,这是新人最容易犯的毛病,即使你的模型非常小,也会很慢,本人认为这是主因。其四:在调试的时候,把MU的显示关掉会快一些,当然这些只能起微调的作用,最重要的是第三点。8 U, q! J3 }% G; K8 C2 G
2.waituntil有些时候确实非常有效,实现起来非常容易,但在复杂模型中多处使用的时候容易出错,在大模型中本人也不常用。至于说理论上所有的waituntil都可以被替换,理论上确实如此,但实际应用过程中要想取代你需要付出昂贵的代价(大量的代码和变量以及复杂的逻辑纠葛)才能够实现,所以,我使用waituntil是看情况的
! G" ]# X% w9 u  I% W& y2 a3.用simtalk好像不能创建全局变量,否则不会有variable这个对象了。局部变量的创建那就无所不能了。
 楼主| 发表于 2010-4-21 19:39:16 | 显示全部楼层
7# jgc ' u8 S" S, t5 @5 _1 k5 `) T

% y: a( y& z9 s, s+ s1 B9 B1.正如所说,waituntil确实可以完全避免的,其引入也正是为了避免拐弯抹角的逻辑但其对运行速度的影响有多大值得怀疑,最坏的情况下只要每个事件后加一个对它的检测即可,影响应该不大,因此,个人觉得没必要回避。
" _: u5 r, J" w! k! v2.但要说嵌套层次不可过多就觉得比较可惜,因为一直认为这是Plant进行模块化的优势,可以构建极大极复杂的模型(个人也不喜欢一层层的嵌套)。而对于MU,可以是只用三种的,即系统有的三种。
- e" M: J0 D4 D: X1 d3.对不用的对象不激活,否则甚至会卡死,这一点也同意,所谓激活即其制造了事件,密集的事件会严重降低速度,最简单的验证,放一个source,一个Drain,然后连接运行,看一下CPU是不是满的,或是50%以上(双核哈)。
. |7 @8 N* o( W6 L     个人也用曾认为性能极优的Flexsim试验过,事件密集之后同样吃不消,所以,如果造了太多的事件先应考虑优化模型,减少事件。软件本身的因素较小,因为软件的设计理念是大同小异的,实在没有办法就只好搞一个超高配置的station任他跑了,当然,如果高版本软件对双核利用的充分同样会有好的效果。
发表于 2014-11-18 11:05:12 | 显示全部楼层
这些应该是高水平应用才会遇到的问题了。楼主经验的总结和后续的讨论,对新人很有帮助,再次感谢无私分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|SimulWay 道于仿真   

GMT+8, 2025-10-26 00:15 , Processed in 0.017936 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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