以梦为马,不负韶华

搜索
查看: 3202|回复: 2
收起左侧

[分享] 初步认识gPROMS的入门例子(超简单缓冲罐动态模拟)

[复制链接]
发表于 2014-10-7 17:26:30 显示全部楼层 |阅读模式
似乎和上次我们的gproms培训的内容有点像。转自:http://blog.sina.com.cn/s/blog_49ac86e2010003g7.html
A认识gPROMS界面在本例中用到的几个TreeMen(VaribleType,Models,Processes)
图 1
1 了解缓冲罐数学模型
质量守恒方程
dM/dt=Fin-Fout                                          (1.1)
Fin---进罐的物料量
Fout--出罐的物料量

容器里物料量与液面高度之间的关系
pAh =M                                                  (1.2)
p--物料密度
A--容器的截面积
h--液面高度  

出罐物料关系式
Fout =a*(ph)^2                                           (1.3)

a--阀门参数

2 新建一个gPROMS工程并且换名另存为Tank。
3 建立一个Model:在图 1中Models文件夹图标下点右键->NewEntity / 点中Models文件夹图标 Ctrl+E /Models文件夹图标->工具栏->Entity->New Entity,
Modelname:BuffterTank(中间不能有空格但是可以有下划线“_”)将会生成一个带模版的Models。现在开始学习这个模版的内容(目前我知道到一部分)在gPROMSLanguage标签页中可以看到这些灰颜色的东西都用#,可想而知这是注释符号就和C++中//意思一样。下面的代码是模版里的代码,红颜色是我对其的理解,可能有错的地方要是谁看到这篇文章希望您能指出。

# PARAMETER
  PARAMETER(常数参数)
# ParameterName AS INTEGER || REAL|| LOGICAL < DEFAULT Value >

ParameterName(常数参数名) AS (定义为)INTEGER(整数) || REAL(实数)||LOGICAL(逻辑值) < DEFAULTValue >(缺省值) 其中 ||表示“或者”
例如: R  As realdefault 8.314。
表示为,定义一个实数类型的常数变量,其缺省值为8.314。
# ParameterName AS ARRAY ( Size < , ... > ) OF INTEGER|| REAL || LOGICAL < DEFAULT Value >

  这个表示为数组常数参数
例如:
PARAMETER
# Number ofcomponents
  NoComp AS INTEGER


# Number of reactions
  NoReact AS INTEGER


# Component molar densities
  Rho AS ARRAY(NoComp) OF REAL

# Stoichiometric coefficient of component i in reaction j
  Nu AS ARRAY(NoComp,NoReact) OF REAL DEFAULT0

# Order of component i in reaction j
  Order AS ARRAY(NoComp,NoReact) OF REAL DEFAULT0


# ParameterName AS FOREIGN_OBJECT < "ForeignObjectClass" >< DEFAULT "ForeignObjectValue" >


# DISTRIBUTION_DOMAIN
# DomainName AS ( LowerBound : UpperBound )
# DomainName AS ARRAY ( Size < , ... > ) OF (LowerBound :UpperBound )


# UNIT
# UnitName AS UnitModelName
# UnitName AS ARRAY ( Size < , ... > ) OFUnitModelName


# PORT
# PortName AS ConnectionType
# PortName AS ARRAY ( Size < , ... > ) OFConnectionType


上面这些本例子没有用到所以不知道什么作用以后再补充

# VARIABLE
  VARIABLE(变量)
# VariableName AS VariableType

  VariableName(变量名) ASVariableType(变量类型)
在这里VariableType可以自己随便写一个名字,但是这些必须在图1  VariableType  Entity中去声明一下。
例如:
VARIABLE
HoldUp         AS Mass
FlowIn, FlowOut AS MassFlowrate
Height         AS Length

# VariableNameAS ARRAY ( Size < , ... > ) OF VariableType
同上有 数组变量
VARIABLE
# Input and output molar flowrates
Flow_In, Flow_Out AS MolarFlowrate

[size=+0]
# Liquid phase volume
V AS Volume


# Component molar holdups
HoldUp AS ARRAY(NoComp) OF Moles


# Input and output component molefractions
X_In, X_Out AS ARRAY(NoComp) OF MoleFraction


# Component concentrations
C AS ARRAY(NoComp) OF Concentration


# Reaction rates
Rate AS ARRAY(NoReact) OF ReactionRate


# VariableName AS DISTRIBUTION ( DomainName< , ... > ) OF VariableType



# STREAM
# StreamName : VariablePath < , ... > AS StreamType ||CONNECTION
# StreamName : VariablePath < , ... > AS ARRAY ( Size < ,... > OF StreamType || CONNECTION
# StreamName IS StreamPath


这个暂且不知具体用途以后学习碰到在补上

# SELECTOR
# SelectorName AS ( Flag < , ... > ) < DEFAULT Flag>
# SelectorName AS ARRAY ( Size < , ... > ) OF ( Flag < ,... > ) < DEFAULT Flag >
# SelectorName AS DISTRIBUTION ( DomainName < , ... > ) OF (Flag < , ... > ) < DEFAULT Flag >

这个放到下一个例子再介绍吧

# SET
  SET(常数变量赋值)
# ParameterPath := Expression ;

例如:
这个缓冲罐名字为V101(名字设定在Processes中的Unit中设置稍后可以看到)他的赋值方法为:
V101.Rho:=1000;
意义与C++的指针一样。注意:gPROMSLanguage赋值方法表示“:=”。
# ParameterPath := [ Expression < , ... > ];
# ParameterPath :="<ForeignObjectClass::>ForeignObjectValue";
# DomainPath := [ BFDM || CFDM || FFDM || OCFEM , Order ,NumOfElements ];


# BOUNDARY
# Boundary Equations


# TOPOLOGY
# Unit Connection Equations


# EQUATION
  EQUATION(模型数学方程)
# Model Equations

好了有关的预备知识介绍到这里接下来就是把1中数学语言转化为gPROMSLanguage了。



图 3
   上面这个代码就是Molders-BuffterTank里的数学模型了,按F4语法检查,要是有错误gPROMS会有相应的提示。
   4建立一个Processes命名为SimulateTank,点OK后也会有个模版生成。

# UNIT
UNIT(单元)
# UnitName AS ModelName
  UnitName(单元名称)AS ModelName(模型名称)
例如 :
T101 AS BuffterTank
# UnitName AS ARRAY ( Size < , ... > ) OF ModelName

# MONITOR
# SYNTAX: VariablePathPattern ;

目前不知用途

# SET
# ParameterPath := Expression ;
# ParameterPath := [ Expression < , ... > ];
# ParameterPath :="<ForeignObjectClass::>ForeignObjectValue";
# DomainPath := [ BFDM || CFDM || FFDM || OCFEM , Order ,NumOfElements ];

前面介绍过了

# EQUATION
# Equations

# ASSIGN <-这个指的是自由度
#VariablePath := Expression ;
我的理解为是初始的已知变量值
定义方法:T101.FolwIn :=10;
# VariablePath := [ Expression < , ... > ];

# PRESET <-作用未知
# <RESTORE " >
# VariablePath := InitialValue ;
# VariablePath := InitialValue : LowerBound : UpperBound ;

# SELECTOR <-下列再介绍
#SelectorPath := FlagPath ;
# SelectorPath := [ FlagPath < , ... > ];

# INITIAL <-初始化
初始化某个变量
方法为:T101.Heigth=2.1; #m
注意这个地方是等号哟“=”
# Equations
# STEADY_STATE

# SOLUTIONPARAMETERS
目前我碰到的是报告间隔的作用
ReportingInterval :=5;

# SCHEDULE
定义运行的时间/定义某个变量收敛的程度如:
SCHEDULE
CONTINUE FOR1800;

SEQUENCE
     CONTINUE FOR 360 OR UNTIL Fermenter.Batch_Fermenter.s <=1E-9
   END

# OperationSchedule


OKProcesses的基本作用知道了,好久没有碰过E问了现在看英文帮助有点费劲了

                               
登录/注册后可看大图





图 4
之前好像没有定义VariableType哟好了县在补上方法就不介绍了超简单的 如图5




图 5
5所有的工作做完了剩下的就是RUN和查看结果了。选中SimulateTank按F5运行(当然还有其它方法)/查看结果可以看到多了个蓝色的文件夹标签如图6中可以查看到你定义的变量的结果


图 6
好了这个例子就写到这里,文采不好另外也是刚刚学习gPROMS。所以文章写得有点乱望各位谅解。请gPROMS高手能指点一下。




                               
登录/注册后可看大图
该贴已经同步到 Horse的微博
发表于 2014-10-7 17:26:30 显示全部楼层
你这是个源程序吗?

点评

发布个源程序吧,上次gproms在线培训的源程序。  详情 回复 发表于 2014-10-7 18:32
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-7 17:26:30 显示全部楼层
bkqcycyqm 发表于 2014-10-7 17:31
你这是个源程序吗?

发布个源程序吧,上次gproms在线培训的源程序。
程序似乎可以直接用记事本打开。但是具体的东西还是需要软件


gproms traing _20140925.gPJ

16.54 KB, 下载次数: 41

回复 支持 反对

使用道具 举报

发表于 2025-3-23 22:57:54 显示全部楼层
(拍大腿)这不巧了嘛,咱培训里那个缓冲罐案例跟这例子简直一个模子刻出来的!老哥我直接给你划重点,保证比说明书好使:

一、建模核心三步走
1. 参数和变量定义
- 密度p、截面积A这种固定值用PARAMETER声明(相当于常数)
- 液位h、流量Fin/Fout这种变化量用VARIABLE声明(随时间变化的量)
举个栗子:
PARAMETER
   A AS REAL DEFAULT 1.0   # 罐子截面积默认1㎡
   a AS REAL DEFAULT 0.1   # 阀门系数默认0.1

VARIABLE
   h AS Height             # 液位高度变量
   Fin, Fout AS Flowrate   # 进出流量变量

2. 方程编写要点
质量守恒方程直接上微分方程写法:
$M := p*A*h               # 物料量计算式
$M_dot = Fin - Fout       # 质量守恒微分形式

出料方程按平方关系写:
Fout = a*(p*h)^2          # 这里注意平方符号别漏

3. 单位校验骚操作
在DECLARATION块里加单位声明防翻车:
UNIT
   Flowrate = kg/s
   Height = m
   Density = kg/m^3

二、新手必踩的坑
1. 变量类型混用会报错(比如把该用PARAMETER的写成VARIABLE)
2. 微分方程写法要带$符号前缀
3. 单位不统一直接算崩(比如密度单位用kg/m但流量用吨/小时)

三、模拟前检查清单
1. 初始液位h0别忘了在INITIAL里设置
2. 进料Fin最好设置成阶跃信号测试动态响应
3. 时间步长别太野,0.1秒起步慢慢调

(递烟)这玩意儿跟咱厂里DCS画面联调一个道理,先把静设备模型搭明白了,后面上反应器、换热器啥的才有底气不是?搞完这个案例建议直接上手调阀门开度参数a,看液位震荡曲线特带劲!   

消除零回复-来自AI Deepseek机器人自动回复 回复内容仅作参考,请甄别回复内容准确与否
回复 支持 反对

使用道具 举报

不想打字就选择快捷回复吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|以梦为马,不负韶华

GMT+8, 2025-4-2 03:51

Powered by 以梦为马,不负韶华

© 2024-2099 Meng.Horse

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