[PlantSimulation]#C005#精选案例01

一、案例描述

书籍《eM-Plant仿真技术教程》第十一章的综合应用案例

image.png

二、学习感受

因为刚刚接触Plant Simulation软件,所以以下内容必定存在理解不到位或者知识点错误的情况,请各位看官自行甄别!

刚开始接触在网上搜索了一遍,没找到什么适合入门的文章或者教程,只有一堆乱七八糟、自作高深的文章,所以决定还是以官方教程和案例为主。

练习本文案例前,我只学过官方入门案例,却意外的感觉没有任何难点,也许是因为这个案例实在一般,没太多知识点。

至于为什么选择这个案例,主要是它的介绍比较详细,后期的分析也能让我感受到这软件的价值所在。

但是仿真结果也让我百思不得其解,不知道是不是初学者理解不到位的情况,我会在文末标明。

另外,该案例有些许错误的地方,但不影响阅读。

三、建模

本文不打算把原文内容搬过来,各位可自行根据书本练习,此处仅记录个人在意的地方。因为书籍年代较早,使用的版本是V8.1版本,本文使用的是V14版本,所以代码部分需要稍稍改动下,其余的内容基本无差别。

image.png

接下来仅粘贴代码部分(simtalk 2.0)

MATLAB

--Leave方法
--OceanCoder.Cn

@.JobStep := @.Sequence[1,1]
if ?.Name = "source"
@.StartTime := EventController.SimTime
print @.name ,"--", @.StartTime
end
if ?.Name = "drain"
@.OutTime := EventController.SimTime
Sumstaytime := Sumstaytime +@.OutTime-@.StartTime;
end

MATLAB

--Distribute方法
--OceanCoder.Cn

param r : integer -> integer
if @.JobStep = 0 and ?.Name="FC3"
return 3
end
if @.JobStep = str_to_num(copy(?.Name,3,1))
@.WaitStart := eventController.simTime
return 1
else
return 2
end

MATLAB

--SetCell1方法
--OceanCoder.Cn

@.Sequence.cutrow(1)
switch @.name
case "part1"
cell1.procTime.setparam("triangle",1,8*60,6*60,10*60)
case "part2"
cell1.procTime.setparam("triangle",1,13*60,11*60,15*60)
case "part3"
cell1.procTime.setparam("triangle",1,10*60,7*60,13*60)
else
end
@.WaitEnd := eventController.simTime
SumCell1Time := SumCell1Time+@.WaitEnd-@.WaitStart;

MATLAB

--SetCell2方法
--OceanCoder.Cn

@.Sequence.cutrow(1)
switch @.name
case "part1"
cell2.procTime.setparam("triangle",1,8*60,5*60,10*60)
case "part2"
if @.SecondProc = false
cell2.procTime.setparam("triangle",1,6*60,4*60,8*60)
@.SecondProc := true
else
cell2.procTime.setparam("triangle",1,9*60,6*60,12*60)
end
case "part3"
cell2.procTime.setparam("triangle",1,9*60,7*60,11*60)
else
end
@.WaitEnd := eventController.simTime
SumCell2Time := SumCell2Time+@.WaitEnd-@.WaitStart;

MATLAB

--SetCell3方法
--OceanCoder.Cn

@.Sequence.cutrow(1)
switch @.name
case "part1"
cell3_old.procTime.setparam("triangle",1,20*60,15*60,25*60)
cell3_new.procTime.setparam("triangle",1,20*60*0.8,15*60*0.8,25*60*0.8)
case "part2"
cell3_old.procTime.setparam("triangle",1,33*60,27*60,39*60)
cell3_new.procTime.setparam("triangle",1,33*60*0.8,27*60*0.8,39*60*0.8)
case "part3"
cell3_old.procTime.setparam("triangle",1,23*60,18*60,28*60)
cell3_new.procTime.setparam("triangle",1,23*60*0.8,18*60*0.8,28*60*0.8)
else
end
@.WaitEnd := eventController.simTime
SumCell3Time := SumCell3Time+@.WaitEnd-@.WaitStart;

MATLAB

--SetCell4方法
--OceanCoder.Cn

@.Sequence.cutrow(1)
switch @.name
case "part1"
cell4.procTime.setparam("triangle",1,12*60,8*60,16*60)
case "part2"
cell4.procTime.setparam("triangle",1,18*60,15*60,21*60)
else
end
@.WaitEnd := eventController.simTime
SumCell4Time := SumCell4Time+@.WaitEnd-@.WaitStart;

MATLAB

--EndSim方法
--OceanCoder.Cn

Avgstaytime:=Sumstaytime/drain.StatNumOut
AvgCell1Time := SumCell1Time/Buffer1.StatNumOut
AvgCell2Time := SumCell1Time/Buffer2.StatNumOut
AvgCell3Time := SumCell1Time/Buffer3.StatNumOut
AvgCell4Time := SumCell1Time/Buffer4.StatNumOut

四、结果分析

书籍的后半部分都是在介绍仿真分析的方法,也是我最感兴趣的地方,可我运行仿真后,结果却和原文大不一样!

原文介绍说多次运行得出的仿真结果不一致,原因是输入数据的随机性带来了输出结果的随机性。这句话非常赞同,可我运行仿真后,却每次都能得到完全一致的仿真结果

image.png

我使用的输入源同样是时间为13的负指数分布,但调试发现每次生产的随机数据都是一致的,肯定是我哪里做错了,但目前的水平还发现不了,只能留待以后解决了!

image.png

现在把V14版本的工程文件放在结尾,如果您发现了我的错误,欢迎给我解惑~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值