全球FlexSim系统仿真中文论坛

标题: 【TFT 2014.03.31 FlexSim仿真模型题(3)】 [打印本页]

作者: 慧娴亚伦    时间: 2014-4-8 11:24
标题: 【TFT 2014.03.31 FlexSim仿真模型题(3)】
问题描述:本题体现的是通过代码控制产生新的固定实体。对于叉车数量等任务执行器的数量,我们可以很容易的通过实验器连接任务分配器的方法,在GUI或实验器中进行更改。然而对于机台数量等固定实体数量的更改就没有那么方便了。本次题目要实现的就是通过代码增加固定实体。


模型要求:
1 附件中有本题7.0的原始布局(本题中仅有一张全局表和一个暂存区),使用其他版本请也按照附件中的模型进行布局,以方便审核和对比;
2 通过修改全局表的值,来修改模型中暂存区的数量;
3 新产生的暂存区如下图所示进行有规律的排列;
4 允许添加您认为需要的任意实体或其他工具来实现效果。


提示:
1 可能用到的代码:createcopy,createinstance
2 由于本题可能对没有正式版的朋友和初学者比较困难,仅能够实现模型要求2并在前3名回复也可获得积分2分。
作者: missman    时间: 2014-4-8 12:51
[i=s] 本帖最后由 missman 于 2014-4-8 12:58 编辑 [/i]

我是用试用版做的。供参考。
我是按一列一列的排序,根据名字可以看出来。
刷新周期10s。
[attach]1781[/attach]
唯一少一个函数没有找到,如果第一行为0时,隐藏初始模型。

传完了,才看到老板要求横向排列,我修改了一些数据再传了一个。其他一样的。
[attach]1782[/attach]
作者: yushaozheng1990    时间: 2014-4-8 14:51
[b] [url=http://www.flexsim.asia/redirect.php?goto=findpost&pid=12058&ptid=4400]1#[/url] [i]慧娴亚伦[/i] [/b]用试用版做的,做的不太好,望楼主批评指正[attach]1783[/attach]
作者: 大摸鱼    时间: 2014-4-8 22:58
这两天在学习GUI所以就用GUI做了一个,版本为5.0
作者: 大摸鱼    时间: 2014-4-8 22:59
这两天在学习GUI所以就用GUI做了一个,版本为5.0,代码还可以精简。。
作者: heh518    时间: 2014-4-8 23:09
[b] [url=http://www.flexsim.asia/redirect.php?goto=findpost&pid=12060&ptid=4400]2#[/url] [i]missman[/i] [/b]看了你的模型后修改的,我觉得写在模型重置触发里会比较好一些,还有你里面有些没有实现楼主的要求!7.1版本做的。
作者: heh518    时间: 2014-4-8 23:11
这是在2#基础上修改的!
作者: 慧娴亚伦    时间: 2014-4-9 09:16
回复2楼:
您的模型还是有不少细节的问题,首先重置触发写了发送延迟消息到消息触发实际上是有很大问题的。延迟的时间实际上是指仿真时间,当此重置触发触发的时候模型还未开始运行,导致一打开您的模型就有报错。此外还有无法自由拖动生成的实体(因为模型运行每10秒会归位)

恭喜您!您完成了部分模型要求。
论坛ID为missman 的朋友在第二层的回复,获得积分2分。
作者: 慧娴亚伦    时间: 2014-4-9 09:27
回复3楼:
您模型的主要问题在于,每次修改全局表的值时,没有删去上一次产生的实体,导致实体重叠出现。此外,按照您的模型,实际上可以直接将代码写在暂存区的重置触发,不需要另外再用一个发生器进行连接。由于连接了发生器,因为复制生成的新的实体都有一个无效的上游端口连接。但基本上已经实现了主要的要求。

恭喜您!您是第一个完成模型要求的活动参与者。
论坛ID为yushaozheng1990 的朋友在第三层的回复是第一个有效回复。获得积分5分。
24小时后本题结束(即2014年4月10日09时27分),其后的回复不计为有效回复。
作者: 慧娴亚伦    时间: 2014-4-9 09:56
回复5楼:
使用GUI来生成实体是很好的想法,在实际运用中,我们通常也是通过GUI来进行控制。看了一下GUI里面的代码,还是比较繁琐的,还有较大的改进空间。另外每次修改生成的实体数量,还必须先点击删除原有实体。

恭喜您!您是第二个完成模型要求的活动参与者。
获得积分4分。
作者: 慧娴亚伦    时间: 2014-4-9 10:05
回复6楼:
改进了2楼的模型,但是还有一个问题在于会多复制一个第一行的一个实体。

恭喜您!您是第三个完成模型要求的活动参与者。
获得积分1分。
作者: heh518    时间: 2014-4-9 10:19
对于楼主提出的模型中存在的问题,思考了下做了如下修改,应该可以达到要求,且能实现全局表第一行为0的情况。
作者: yushaozheng1990    时间: 2014-4-9 13:18
[b] [url=http://www.flexsim.asia/redirect.php?goto=findpost&pid=12067&ptid=4400]9#[/url] [i]慧娴亚伦[/i] [/b]谢谢楼主的指正,开始的时候在主代码之前也写了destroyobject的语句,但是不知道哪里出错了,没能把现有暂存区删除,我再研究研究改进一下
作者: 慧娴亚伦    时间: 2014-4-10 09:08
回复12楼:

模型很好的解决了之前出现的一些问题,同时还实现了将各行实体清零的情况,很有借鉴意义。
因此特再奖励积分2分。
作者: 慧娴亚伦    时间: 2014-4-10 09:27
[i=s] 本帖最后由 慧娴亚伦 于 2014-4-10 09:32 编辑 [/i]

本次TFT活动已经截止。
     这是TFT活动的第三次正式活动,本次试题涉及到结合全局表利用代码创建实体,相对于之前题目,该题的题目难度较大,需要比较熟悉for循环的原理以及FlexSim实体创建的方式才能比较好的完成,因此在本次评判过程中也适当放宽了标准。在实际项目中,要改变模型内部分实体的布局,或是某些单元性质较强的实体数量的增减,如果仍然使用鼠标键盘拖入的操作方式显然很不方便。此外对于不懂得FlexSim软件操作的项目或企业决策层而言,建模工程师最好能够通过GUI控制来帮助他们完成此类操作。GUI控制界面使用上非常方便,但是内部的联系控制就需要建模工程师比较精巧的代码编写。本次题目实际上就属于GUI控制的一种初步练习(虽然我们将代码写在重置触发里)。
     本次题目一共有3位朋友得到了有效回复。他们的论坛ID分别是:
    missman、 yushaozheng1990、大摸鱼、heh518
     他们将获得指定积分,没有获得积分的朋友期待您的下次参与。

     下面放上我个人制作的参考模型(非最佳模型),模型代码相对简单,但是必须基于模型中一开始给定的这个暂存区,如果删除该暂存区将会使代码失效。
延伸思考:除了利用代码创建实体之外,大家还可以想想如何用代码来完成连线,以及断开连接的操作。
     本次活动结束之后,将会发放第一次试用号奖励。再次感谢大家的参与和支持,没有参与者活动将无法开展,希望各位还能继续支持TFT的接下来的活动,再次感谢!
作者: missman    时间: 2014-4-10 09:44
[quote]回复2楼:
您的模型还是有不少细节的问题,首先重置触发写了发送延迟消息到消息触发实际上是有很大问题的。延迟的时间实际上是指仿真时间,当此重置触发触发的时候模型还未开始运行,导致一打开您的模型就有报错。此 ...
[size=2][color=#999999]慧娴亚伦 发表于 2014-4-9 09:16[/color] [url=http://www.flexsim.asia/redirect.php?goto=findpost&pid=12066&ptid=4400]http://www.flexsim.asia/images/common/back.gif[/url][/size][/quote]

谢谢版主指教。
单纯完成动作而已。所以没有考虑太多细节。如果不刷新,我想可以加一个判断,刷新时比较表格数据是否变化,无变化的不刷新。
作者: yangkaichong    时间: 2014-4-16 18:17
多谢楼主!!!
作者: yangkaichong    时间: 2014-4-16 18:20
下载来看看!
作者: CPF2000    时间: 2014-7-25 23:34
:)
作者: CPF2000    时间: 2014-7-25 23:37
:)
作者: carol    时间: 2014-8-5 15:50
下载了12楼的模型来看,似懂非懂的。漫漫学习路啊~
比如说while循环语句就不太懂:
treenode mod=up(node("Queue0", model()));
treenode las=last(mod);
while(las!=node("Queue0", model()))
{
        destroyobject(las);
        las=last(mod);
}
作者: 慧娴亚伦    时间: 2014-8-5 19:29
while是当()里面的条件不成立的时候则跳出循环,否则则不停触发下面的代码。
作者: CPF2001    时间: 2014-8-26 11:00
[quote]本次TFT活动已经截止。
     这是TFT活动的第三次正式活动,本次试题涉及到结合全局表利用代码创建实体,相对于之前题目,该题的题目难度较大,需要比较熟悉for循环的原理以及FlexSim实体创建的方式才能比较好的完成 ...
[size=2][color=#999999]慧娴亚伦 发表于 2014-4-10 09:27[/color] [url=http://www.flexsim.asia/redirect.php?goto=findpost&pid=12081&ptid=4400]http://www.flexsim.asia/images/common/back.gif[/url][/size][/quote]
我认为你的答案有个小小不足之处,倘若settings表格的第一行第一列为0,则模型中还是存在queue0,如果把它隐藏就很完美。
作者: 丫头盖    时间: 2014-10-9 11:04
学习了
作者: 蓬莱仙    时间: 2014-10-16 18:53
学习学习,谢谢楼主提供这么多好题
作者: xinglei    时间: 2014-11-18 16:34

作者: yuzhu    时间: 2015-11-3 19:14
很好的学习资料
作者: yuzhu    时间: 2015-11-4 19:45
请教一下,15楼里面的模型代码有一句看不懂,删除原有的暂存区是:
for(int i=3;i<=con;i++)
{
        destroyobject(rank(model,3));
}
这个怎么就能删除原有的暂存区了呢?rank(model,3)指的是模型的第三个树节点吗?请赐教~谢谢
作者: 慧娴亚伦    时间: 2015-11-5 09:46
这个就是删除模型的第三个节点,由于模型树下面第一个节点是tools,第二个节点要作为被复制的实体,因此从第三个节点开始删除。
作者: 慧娴亚伦    时间: 2015-11-5 09:46
这个就是删除模型的第三个节点,由于模型树下面第一个节点是tools,第二个节点要作为被复制的实体,因此从第三个节点开始删除。
作者: 会笑的风    时间: 2017-9-7 21:10
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=12070&ptid=4400][color=#999999]heh518 发表于 2014-4-9 10:19[/color][/url][/size]
对于楼主提出的模型中存在的问题,思考了下做了如下修改,应该可以达到要求,且能实现全局表第一行为0的情 ...[/quote]

大神厉害!

作者: sandflow    时间: 2017-9-8 22:47
案例3
作者: yan8288314    时间: 2021-2-20 17:16
学习了,赞一个




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