小鹿数值仿真-教程3-实现流体管网自动解算压力节点和流量(电网节点和电流也有)

小鹿数值仿真-国产冷、热、电数值模拟平台

第四章 模块端口如何并入流体管网电网解算



前言

----在前几篇教程中,第二篇编写第一个模块中给的管道实例代码,出现了通路概念以及并网函数概念。
在这一篇咱就好好说说这俩咋用能帮宝子们轻松模拟管网的压力节点和流量。(下面例子都是个位数的支路解算,仅是距离,咱平台只要你电脑性能好,可以支持上千、上万支路的自动解算都是可以的)


一、流体管网解算,有啥用?

----trnsys,很多空调和能源做模拟的宝子可能很熟悉,它模块之间的流量是自己定义的,或者可以用语法赋值,端口压力也很难做到管网联动。如果调试一个300个模块的项目,光挨个设置流量就能累死。matlab也是,并未给空调制冷还有热力等算法模块添加智能流网解算。懂这个的人是能给写进去,那做一个项目也得累个半死…(哪位宝子做过可以评论区吐槽一下多麻烦…)
----咱既能满足写模块、模块图形化搭建、数据可编辑等常用功能,更能满足智能解算流网流量、压力节点。
----有了这个管网解算,宝子们调试项目,基本就是拖拽搭建、设置源头压力和工质、调节设备参数就可以了。每次开大一点阀门,全局联动,上下游该变成啥流量、啥压力,自动变化,不用宝子们每次开大点儿阀门都要去上下游去设置流量,或者编写复杂的自动处理脚本。

二、模块中的使用

1.新建模块后,设置通路

----以第一篇教程中新建的“DIYIGEMOKUAI”为例,我们将“通用设置”中的通路0的出入口分别绑定上IM0_和EX0_:
在这里插入图片描述---- 请回到绘制模块页中,在这里我们图文解释一下这次通路绑定是啥意思:其实上面这俩端口是连在一起的。整个模块是一个“容器”,下面俩口是容器的出入口,上面的俩口,是“容器内有一根管”,是这跟管的出入口。容器底部的端口压力,等于内部压力+内部液位差产生的压力,故称之为容积型端口。管道内是有流动阻力的,这俩端口需要并网解算,故称之为阻力型端口。如下图所示:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
请注意,流体类型的入口,只能绑定流体类型的出口,属性设置就解释完啦

2.编写通路内的模块算法

我们假设这俩端口的通道,就是内部的一根管道,首先调用物性库:

/***************************************************************
//启动物性计算库
//***************************************************************	
double PI=3.1415926;
int ico,ai=0;
FUD_SETUP(FORM, ico);//初始化物性库,具体请见上一篇refprop如何调用
//***************************************************************
// 定义必备的变量
//***************************************************************
double density,dl,dv,energy,entropy,cv,cp,w,wm,dp,PD,POD;
double xliq[20], xvap[20];
double temp=0;

然后,是入口、出口端口的物性处理:

//***************************************************************
//判断流量正负,对焓值进行赋值
//***************************************************************
if( EX0_FLOW >=0 )//如流量是正的,则将入口的焓值传递给出口,计算出口的属性,这个样例暂时认为没有换热
{
	EX0_ENTHALPY = IM0_ENTHALPY;
	for(ai=0;ai<ico;ai++)
	{
		MIX[ai]=IM0_X[ai];
		EX0_X[ai]=MIX[ai];
	}
	FUD_PH(EX0_PRE, EX0_ENTHALPY, EX0_X, EX0_TEMP, EX0_VOLUME, dl, dv,
		xliq, xvap,EX0_Q,energy, entropy, cv,cp, w);
} 
else
{
	IM0_ENTHALPY = EX0_ENTHALPY;//若流量是负的,就是逆流,则将出口的流量赋值给入口
	for(ai=0;ai<ico;ai++)
	{
		MIX[ai]=EX0_X[ai];
		IM0_X[ai]=MIX[ai];
	}
	FUD_PH(IM0_PRE, IM0_ENTHALPY, IM0_X, IM0_TEMP, IM0_VOLUME, dl, dv,
		xliq, xvap,IM0_Q,energy, entropy, cv,cp, w);//计算入口的物性
}

接下来是流通能力计算的函数

//***************************************************************
//计算平均参数,密度、温度、中间压力、中间温度、体积流量等
//***************************************************************  
DENSITY = (IM0_VOLUME + EX0_VOLUME) / 2.0;//平均密度计算
if(DENSITY<=0)//最小密度保护,若小于等于零,则给一个很小的值
{
	DENSITY=0.1;
}
temp=(IM0_TEMP+EX0_TEMP)/2;//平均密度
if(PL<=0.01)//管长最小值保护
{
	PL=0.01;
}
if(DN<15)//DN通径最小值保护,最小DN15
{
	DN=15;
}
//***************************************************************
//计算阻力参数,带入并网函数
//***************************************************************
PIPECV(temp,DENSITY, MIX, EX0_FLOW, DN , PL, CV,RLS, FLOW_SPD,RE);//CV就是计算反馈的流通能力
//RLS是惯性系数

接下来是并网函数:
0代表上文中的通路0,宝子们绑定了哪个号就天界一个int值,进去,如果绑定了0、1两个,那就将下面的函数赋值为两行,函数第一个值分别填写0、1。
RLS是惯性系数,不计算水锤时默认为0.0就好,这个值其实是上面的PIPECV里面计算好输出的,也可以自己去编写更精确的。
CV是上面计算出来的流通能力
DENSITY是上面计算出来的平均密度
DHIGH是高差,可正可负
Netlink_Pipe这个函数的意思的管道的并网函数。

Netlink_Pipe(0, RLS, CV, DENSITY, DHIGH);

啥?时候不是还有阀门、泵的并网函数?嘿嘿嘿,你猜对啦。

//管道并网函数,tlnb是通路号,LS是惯性系数,CV就是流通能力,dis是密度,DHIGH是高差
void Netlink_Pipe(int tlnb, double LS, double cv, double dis, double DHIGH);
//泵的并网函数,最后DPRE代表泵的养成,单位MPa,不是米
void Netlink_Pump(int tlnb, double LS, double cv, double dis, double DPRE);
//阀门的并网函数,cvf是阀门开度0~1之间
void Netlink_Valve(int tlnb, double LS, double cv, double cvf, double dis, double DHIGH);
//压缩机并网函数flow是强制流量值,单位千克每秒
void Netlink_Cpsr(int tlnb, double LS, double cv, double dis, double flow);
//这是止逆阀的并网函数,参数和管道的一摸一样,只是作用不一样
void Netlink_Check(int tlnb, double LS, double cv, double dis, double DHIGH);

//下面是电网的并网函数,单位都是国际标准,第一个是导线,R、H、DU分别是电阻、电感、电动势
void NetPower_Wire(int tlnb, double R, double H, double DU);
//电容的并网函数,Q是当前时刻的存储电荷数,C是电容值
void NetPower_C(int tlnb, double R, double H, double Q, double C);
//可调电阻 cvf是开度,类似于上面的阀门
void NetPower_RP(int tlnb, double R, double H, double cvf);
//二极管的
void NetPower_Check(int tlnb, double R, double H);
//正在调试测试的还有三极管的(其实就是类似于流体的强制流量,依照基极电流和三极管曲线计算发射极和集电极电流,然后强制流量解算)在这里就先不放了。

那么流通能力计算函数除了管道的还有啥呢?
有好多了已经:

//输入气体温度、平均密度、组分、质量流量,圆管直径,管长,输出RCV,RLS,流速。
void CPSRCV(double& temp, double& density, double x[], double& flow, int& DN, double& length, double& RCV, double& RLS, double& DP);
//异径管的adm计算,输入气体温度、平均密度、组分、质量流量,前端直径,后端直径,输出阻力RCV,RLS
void PIPECV_RDC(double& temp, double& density, double x[], double& flow, int& DN_I, int& DN_O, double& RCV, double& RLS);
//球阀流通能力计算,输入平均温度、平均密度、组分、质量流量,圆管DN通径,输出RCV,RLS
void VALVECV_BALL(double& temp, double& density, double x[], double& flow, int& DN, double& CVF, double& RCV, double& RLS);
//标准截止阀流通能力计算,输入平均温度、平均密度、组分、质量流量,圆管DN通径,输出RCV,RLS
void VALVECV_SHUT(double& temp, double& density, double x[], double& flow, int& DN, double& CVF, double& RCV, double& RLS, double& midRe);
//Y型截止阀、直角角阀的流通能力计算,输入平均温度、平均密度、组分、质量流量,圆管DN通径,输出RCV,RLS
void VALVECV_SHUT_Y(double& temp, double& density, double x[], double& flow, int& DN, double& CVF, double& RCV, double& RLS);
//止回阀,普通的、Y型的、直角式(总之常用、讲究低阻力的止回阀都可以用这种)的流通能力计算,输入平均温度、平均密度、组分、质量流量,圆管DN通径,输出RCV,RLS
void VALVECV_CHK(double& temp, double& density, double x[], double& flow, int& DN, double& CVF, double& RCV, double& RLS);
//闸阀的流通能力计算,输入平均温度、平均密度、组分、质量流量,圆管DN通径,输出RCV,RLS
void VALVECV_GATE(double& temp, double& density, double x[], double& flow, int& DN, double& CVF, double& RCV, double& RLS);
//中心蝶阀的流通能力计算,输入平均温度、平均密度、组分、质量流量,圆管DN通径,输出ADM
void VALVECV_BFLY1(double& temp, double& density, double x[], double& flow, int& DN, double& CVF, double& RCV, double& RLS);
//双偏心蝶阀的流通能力计算,输入平均温度、平均密度、组分、质量流量,圆管DN通径,输出RCV,RLS
void VALVECV_BFLY2(double& temp, double& density, double x[], double& flow, int& DN, double& CVF, double& RCV, double& RLS);
//三偏心蝶阀的流通能力计算,输入平均温度、平均密度、组分、质量流量,圆管DN通径,输出RCV,RLS
void VALVECV_BFLY3(double& temp, double& density, double x[], double& flow, int& DN, double& CVF, double& RCV, double& RLS);
//弯管的流通能力计算,输入平均温度、平均密度、组分、质量流量,圆管DN通径,输出RCV,RLS
void PIPECV_ELBOW(double& temp, double& density, double x[], double& flow, int& DN, double& RCV, double& RLS);
void PUMPCV(double& temp, double& density, double x[], double& flow, double& PumpR, double& RCV, double& RLS);
//罐体通用核心。
void PTT_BKT(double& BKT_M, double& BKT_H, double& BKT_DL, double& BKT_DV, double& BKT_V, double& Q, double X[],
	double D_M[], double& D_ENTHALPY, double D_FTotal, double D_F[], double& D_H, int& __DT);

编译前不能忘了”变量属性“页新增变量呀:(这里添加和代码里定义double CV计算效果是一样的,但是这里添加能对外对接、能监控呀,每秒刷新30次变量值)
在这里插入图片描述

三、项目中的使用效果

咱用新写的模块拖拽进项目,连线运行,加一个阀门在支路,可以发现,已经可以自动解算流量和压力节点,并系统自动赋值到端口变量中:
在这里插入图片描述
调节阀门开度,会发现主路、俩支路始终保持流量守恒:
在这里插入图片描述


总结(下篇预告)

并网的用法写完啦,不太明白的回头下载软件试一下就能明白了,宝子们都这么聪明,肯定没问题的。接下来计划写两篇,分别是“设计函数的编写以及能实现的便捷化应用”、“平台计算精度如何?”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值