《Flowmaster自定义元件》由会员分享,可在线阅读,更多相关《Flowmaster自定义元件(49页珍藏版)》请在金锄头文库上搜索。
1、Hi-key Technology专业工程软件和服务提供商专业工程软件和服务提供商FlowmasterFlowmaster自定义元件自定义元件北京海基科技发展有限责任公司2代码通信模块的创建与定义代码通信模块的创建与定义控制方程的线性化控制方程的线性化CAM介绍及创建介绍及创建代码编译及元件生成代码编译及元件生成报告内容报告内容3什么是什么是CAM什么是什么是CAM? CAM(Component CAM(Component Analytical Analytical Model)Model)是是FlowmasterFlowmaster分分析析的的基基石石,是是流流体体元元件件的的核核心心,包包
2、括括用用来来解解算算流流量量、压压力力、流流速速、温温度度等等系系统统参参数数的的所所有有控控制制方方程程都都被被编编译译成成代代码码并并存存储储于于CAMCAM的的代代码码通通信信模模块块中中。任任何何新新元元件件的的创创建建都都以以CAMCAM为为基基础础,而而每每一一个个CAMCAM创创建建的的时时候候都都会会被被指指向向唯唯一一的的一一个个GUID(GUID(全全局局唯唯一一标标识识符符) ),在在计计算算过程中,通过该标识符识别过程中,通过该标识符识别CAMCAM代码,进而对流体的流动与换热进行解算。代码,进而对流体的流动与换热进行解算。CAM描述些什么?描述些什么? 元件的接口数量
3、以及类型元件的接口数量以及类型 元件的信号端口数量以及类型元件的信号端口数量以及类型 元件的特征参数及必要性元件的特征参数及必要性 元件的控制方程代码元件的控制方程代码 元件图标元件图标 4创建创建CAM1.CAM名称名称2.接接口口数数量量以以及及类类型型,位位置置设设置置3.信信号号发发生生端端口口数数量量,参参数数类类型型以以及及位位置置设设置置4.对对该该组组件件分分析析模型的描述模型的描述5.元元件件的的特特征征参参数数,输输入入和和输输出出6.参参数数的的必必要要性性设置设置特征参数的种类:特征参数的种类:实数、曲线或方程、曲面、整实数、曲线或方程、曲面、整数、下拉选项、脚本、工质
4、选数、下拉选项、脚本、工质选择以及下拉表格择以及下拉表格特征参数的必要性:特征参数的必要性:必须输入、可选输入、文字必须输入、可选输入、文字说明、不需输入说明、不需输入端口类型:端口类型:信号输入、信号输出、信号输入、信号输出、测量输入、测量输出测量输入、测量输出 生成代码通信模块生成代码通信模块5代码通信模块的创建与定义代码通信模块的创建与定义控制方程的线性化控制方程的线性化CAM介绍及创建介绍及创建代码编译及元件生成代码编译及元件生成报告内容报告内容6线性化系数线性化系数获取线性化系数获取线性化系数 FlowmasterFlowmaster并并不不是是在在流流体体元元件件中中直直接接求求解
5、解流流动动方方程程,而而是是首首先先将将这这些些流流动动方方程程做做线线性性化化处处理理,得得到到一一个个线线性性方方程程组组,通通过过求求解解该该线线性性方方程程组组来来求求解解该该元元件件的的压压力力、流流量量、流流速速等等参参数数。如如对对于于一一个个只只有有两两个个接接口口的的元元件件,它它的的线线性性方方程程组组包含有两个方程,分别是进出口质量流量随进出口压力变化的等效方程。包含有两个方程,分别是进出口质量流量随进出口压力变化的等效方程。7系数矩阵系数矩阵系数矩阵系数矩阵 该线性方程组中的系数矩阵为该线性方程组中的系数矩阵为 其其中中,B1B1与与B2B2是是用用来来描描述述非非压压
6、力力变变化化引引起起的的那那部部分分流流量量的的,如如果果没没有有外外部部功功的的输输入入,那那质质量量流流量量只只与与压压力力相相关关,没没有有压压差差就就没没有有流流量量,B1=B2=0B1=B2=0,但但如如果果有有功功输输入入,如如泵泵,那那么么质质量量流流量量除除了了由由压压差差引引起起之之外外,还还与与外外部部功功有有关关,B1B1与与B2B2不不为零。为零。 8控制方程线性化控制方程线性化离散损失元件离散损失元件 以离散损失元件为例,流体流经它之后的压力损失与损失系数、流体密度、流以离散损失元件为例,流体流经它之后的压力损失与损失系数、流体密度、流体流速相关。体流速相关。 此处,
7、此处, 为流体流经该元件的压力损失为流体流经该元件的压力损失 K K 为元件的损失系数为元件的损失系数 V V 为流体流速为流体流速 为流体密度为流体密度 那么,对于该损失元件,必须输入的参数有损失系数以及流动面积。那么,对于该损失元件,必须输入的参数有损失系数以及流动面积。9控制方程线性化控制方程线性化离散损失元件离散损失元件 现在,我们要把该方程转换为质量流量跟进出口压力的函数组。根据现在,我们要把该方程转换为质量流量跟进出口压力的函数组。根据 与与可得,可得, 与与 进一步可得,进一步可得, 与与 10控制方程线性化控制方程线性化离散损失元件离散损失元件 最终,得到系数矩阵:最终,得到系
8、数矩阵: 因为进出口质量流量绝对值相等,所以,该系数矩阵也等于因为进出口质量流量绝对值相等,所以,该系数矩阵也等于11控制方程线性化控制方程线性化对于其他非二接口元件,线性化方程组格式如下:对于其他非二接口元件,线性化方程组格式如下:12代码通信模块的创建与定义代码通信模块的创建与定义控制方程的线性化控制方程的线性化CAM介绍及创建介绍及创建代码编译及元件生成代码编译及元件生成报告内容报告内容13什么是代码通信模块什么是代码通信模块代码通信模块代码通信模块 代代码码通通信信模模块块是是CAM的的基基本本模模板板,通通过过它它读读取取元元件件的的输输入入参参数数,在在自自动动生生成成的的分析代码
9、模板中进行分析代码的编辑,然后进行运算,并输出计算结果。分析代码模板中进行分析代码的编辑,然后进行运算,并输出计算结果。 14创建代码通信模块创建代码通信模块代码通信模块的创建代码通信模块的创建 1.命命名名空空间间,定定义义了了一组相关的类。一组相关的类。2. 类类名名,用用来来对对自自定定义义的的组组件件分分析析模模型型进进行行分分类类,包包含含具具有有通通用用属属性性的的对对象。象。3.接接口口选选择择,用用来来定定义义在在Flowmaster 分分析析过过程程中中用用到到的的功功能能和和方方法法。如如读读取取元元件件的的输输入入参参数数,获获取取流流体体属属性性,输输出计算结果等等。出
10、计算结果等等。4.模块保存路径。模块保存路径。5.存存储储代代码码通通信信模模块块.CS格格式式的的C#文文件件名名15选择继承接口选择继承接口继承接口继承接口l 在在程程序序设设计计中中,继继承承纯纯粹粹是是为为了了分分类类服服务务的的,它它是是类类/接接口口之之间间的的一一种种关关系系。在在Flowmaster数数据据库库中中,为为了了对对自自定定义义元元件件创创建建通通信信代代码码模模块块,共共提提供供了了几几十十种种接接 口口 , 不不 同同 的的 接接 口口 有有 不不 同同 的的 功功 能能 , 如如 元元 件件 的的 输输 入入 参参 数数 需需 要要 通通 过过IcFormDa
11、taConsumer 来来体体现现,计计算算结结果果通通过过IResultProvider读读取取,如如果果需需要考虑换热,那么则需添加要考虑换热,那么则需添加IHeatTransfer接口。接口。l有有些些接接口口是是有有共共性性的的,如如IcAnalysisPlugInConsumer 与与 ILinearCoeffs都都是是从从Mandatory Interfaces中中继继承承,都都是是必必须须选选择择的的接接口口,这这是是它它们们共共同同的的属属性性。而而包包括括Mandatory Interfaces, Advisable Interfaces, Controller Interf
12、aces等等在在 内内 的的 接接 口口 都都 是是 从从 Flowmaster接接 口口 类类 的的 动动 态态 链链 接接 库库 ( 即即Flowmaster.Interfaces.dll)中继承。)中继承。l根根据据模模拟拟类类型型和和要要求求的的不不同同,可可以以选选择择不不同同的的继继承承接接口口组组合合。在在生生成成的的代代码码通通信模块中会自动产生分析代码的模板,该模板中包含了已选择的所有接口功能。信模块中会自动产生分析代码的模板,该模板中包含了已选择的所有接口功能。16代码通信模块的创建与定义代码通信模块的创建与定义控制方程的线性化控制方程的线性化CAM介绍及创建介绍及创建代码
13、编译及元件生成代码编译及元件生成报告内容报告内容17创建创建C#项目文件项目文件必须是必须是XXX.FlowmasterModels.XXX的格式的格式选择选择“类库类库”18导入代码通信模块导入代码通信模块导入已创建的代码通信模块导入已创建的代码通信模块 对对该该项项目目文文件件导导入入已已创创建建的的Code stub(代代码码通通信信模模块块),代代码码通通信信模模块块已已经经被被保保存存在在了了一一个个.CS格格式式的的文文件件中中,并并查查看看已已创创建建的的代代码码模模板。板。 添加添加Flowmaster引用引用 因因为为代代码码通通信信模模块块中中选选择择的的所所有有接接口口均
14、均从从Flowmaster接接口口库库中中继继承承,此此处处应应该该引引用用Flowmaster接口的动态链接库。接口的动态链接库。19实现接口实现接口实现接口实现接口 通通过过创创建建通通信信代代码码模模块块时时建建立立的的类类来来实实现现所所选选择择的的所所有有接接口口,这这些些接接口口中中引引用用的的所所有有非非System.Object类类和和方方法法都都来来自自Flowmaster.Interface.dll文文件件,并并且且这这些些类类和和方方法法中中包包含含的的代代码码都都是是封封装装好好的的,无无法法看看到到,我我们们只只需需了了解解这这些些类和方法的功能。代码的主体结构就是一
15、个类,这个类就是我们所创建的元件。类和方法的功能。代码的主体结构就是一个类,这个类就是我们所创建的元件。 所有接口中都包含有元件识别代码:所有接口中都包含有元件识别代码: private int m_nComponentNumber = 0; public classname(int nComponentNumber) m_nComponentNumber = nComponentNumber; 该该代代码码块块包包含含两两部部分分内内容容:字字段段声声明明以以及及类类的的重重载载构构造造函函数数,是是通通过过读读取取自自定定义义元元件件在在网网络络中中的的编编号号来来识识别别该该元元件件,进
16、进而而调调用用该该元元件件的的方方法法的的。该该代代码码段不需要修改。段不需要修改。 20实现接口实现接口实现接口实现接口 所有接口中还包含有元件全特征参数识别代码:所有接口中还包含有元件全特征参数识别代码: private FeatureID FF(Key k) return m_Features.FindFullFeatureID(short)k); private Key FK(Feature ID fullID) return (Key)m_Features.FindShortFeatureID(fullID); 该代码段完成了对所有接口都包含的两个方法的实现,通过两个该代码段完成了对
17、所有接口都包含的两个方法的实现,通过两个return语语句可以识别枚举类型或者短整型的特征参数。此代码段也不需要修改。句可以识别枚举类型或者短整型的特征参数。此代码段也不需要修改。21IcAnalysisPlugInConsumerIcAnalysisPlugInConsumer接口的实现接口的实现该接口中除了包含之前提到的两个代码段之外,还包含两个属性以及一个方法:该接口中除了包含之前提到的两个代码段之外,还包含两个属性以及一个方法: public string PlugInName getreturn “MyModelName”; 该代码段声明了一个属性,取值时返回的该代码段声明了一个属性
18、,取值时返回的“MyModelName”应该改为元件的名称,应该改为元件的名称,该名称字符串将出现在计算错误或警告报告之中。该名称字符串将出现在计算错误或警告报告之中。 public PlugInType PlugInClassType getreturn PlugInType.Component; 该代码段也声明了一个只读属性,用来读取元件的类型,此处不必修改。该代码段也声明了一个只读属性,用来读取元件的类型,此处不必修改。22IcAnalysisPlugInConsumerIcAnalysisPlugInConsumer接口的实现接口的实现该该代代码码段段需需要要修修改改,首首先先,需需要
19、要把把成成员员变变量量添添加加到到方方法法的的主主体体当当中中,其其次次,需需要初始化它们。要初始化它们。该该接接口口中中还还包包含含了了一一个个方方法法,是是为为了了初初始始化化计计算算服服务务端端的的,通通过过引引用用指指定定的的静静态变量,可以获取计算状态、是否收敛等信息。态变量,可以获取计算状态、是否收敛等信息。public void InitialisePlugInConsumer(IAnalysisGlblServices services)/static private IAnalysisGlblServices m_ Services = null;/static privat
20、e IgAnalysisStatusProvider m_ AnalysisStatus = null;/static private IgConvergenceCriteriaProvider m_ConvergenceCriteria = null;/static private IgErrorHandlerProvider m_ErrHandler = null;/ private IFluidPropertyProvider m_FluidProps = null;/m_Services = services;/m_AnalysisStatus = services.AnalysisS
21、tatus;/m_ConvergenceCriteria = services.ConvergenceCriteria;/m_ErrHandler = services.ErrorHandler;23IcAnalysisPlugInConsumerIcAnalysisPlugInConsumer接口的实现接口的实现此处需要在方法主体中添加需要的此处需要在方法主体中添加需要的“服务服务”,并在调用方法之前初始化它们为,并在调用方法之前初始化它们为“null”。如下所示:。如下所示:static private IAnalysisGlblServices m_ Services = null;st
22、atic private IgAnalysisStatusProvider m_ AnalysisStatus = null;static private IgConvergenceCriteriaProvider m_ConvergenceCriteria = null;static private IgErrorHandlerProvider m_ErrHandler = null;public void InitialisePlugInConsumer(IAnalysisGlblServices services) m_Services = services; / 推荐推荐 m_Anal
23、ysisStatus = services.AnalysisStatus; /推荐推荐 m_ConvergenceCriteria = services.ConvergenceCriteria; m_ErrHandler = services.ErrorHandler; /推荐推荐 24IcFormDataConsumerIcFormDataConsumer接口的实现接口的实现该接口定义了一个该接口定义了一个Guid(全局唯一标识符),该值是系统自动生成的(全局唯一标识符),该值是系统自动生成的 private static Guid m_guidModel = new Guid(“”)紧接着
24、,声明了一个只读属性,将该标识符声明为元件的识别代码紧接着,声明了一个只读属性,将该标识符声明为元件的识别代码 public Guid ClassReference getreturn m_guidModel;此此外外,该该接接口口中中还还声声明明了了一一个个FeatureLookup类类型型的的变变量量m_Features,以以及及IFormDataProvider类类型型的的变变量量m_DP,并并把把它它们们初初始始化化为为“null”。并并声声明明了了一一个个主主体体方方法法InitialiseFormDataConsumer,因因为为元元件件的的特特征征参参数数也也会会有有与与之之相相
25、对对应应的的全全局局标标识识符符,通通过过在在该该方方法法中中创创建建一一个个类类似似于于数数组组的的类类型型的的实实例例,将元件的特征参数输入框与全局标识符关联起来,从而实现参数查找。将元件的特征参数输入框与全局标识符关联起来,从而实现参数查找。以上代码均采用系统生成的代码,不需要修改。以上代码均采用系统生成的代码,不需要修改。接接下下来来,声声明明一一个个公公开开的的枚枚举举类类型型,直直接接量量类类型型为为短短整整型型,该该枚枚举举类类型型包包含含的的直直接接量量为为元元件件的的特特征征参参数数,此此处处需需要要将将代代码码段段中中各各直直接接量量的的名名称称修修改改,以以方方便便理解。
26、理解。25IcFormDataConsumerIcFormDataConsumer接口的实现接口的实现public enum Key : short L1_1 = 1, / Cross-sectional Area Real;Input;Repeats=1 L1_2 = 2, / Loss Coefficient Real;Input;Repeats=1 L1_3 = 3, / Pressure Drop Real;Output;Repeats=1 L1_4 = 4, / Loss Coefficient Result Real;Output;Repeats=1 LastItem = 3276
27、7 更新这段代码为:更新这段代码为:public enum Key : short Area = 1, / Cross-sectional Area Real;Input;Repeats=1 K = 2, / Loss Coefficient Real;Input;Repeats=1 DeltaP = 3, / Pressure Drop Real;Output;Repeats=1 Calc_K = 4, / Loss Coefficient Result Real;Output;Repeats=1 LastItem = 26该该接接口口中中包包含含有有四四个个专专有有方方法法,首首先先,为为
28、了了允允许许用用户户从从元元件件进进出出口口获获取取压压力力、流流量量、密密度度、温温度度等等参参数数,需需要要引引用用InitialiseBranchResultConsumer方方法法。该该方方法法声声明明了了用用来来获获取取元元件件进进出出口口参参数数的的成成员员变变量量IiBranchResultProvider,并初始化它为并初始化它为“null”。此处,需要将下列代码段升级,。此处,需要将下列代码段升级,public void InitialiseBranchResultConsumer(IiBranchResultProviderbrProvider)/TODO: Typical
29、ly define a member variable to provide access to the branch provider./private IiBranchResultProvider m_BrP = null;/m_BrP = brProvider;升级为下列代码段,升级为下列代码段,private IiBranchResultProvider m_BrP = null;public void InitialiseBranchResultConsumer(IiBranchResultProvider brProvider) m_BrP = brProvider;IcBranc
30、hResultConsumerIcBranchResultConsumer接口的实现接口的实现27第二个方法是第二个方法是HasFlowArea,用来判定元件的指定进出口是否设置了流通面,用来判定元件的指定进出口是否设置了流通面积。积。public bool HasFlowArea(int nArmNo) return true; / TODO: Amend to false if area is not known. 此段代码不需修改。此段代码不需修改。 IcBranchResultConsumerIcBranchResultConsumer接口的实现接口的实现28第第三三个个方方法法是是G
31、etFlowArea,用用来来获获取取元元件件进进出出口口的的流流通通面面积积,系系统统生生成成的的代代码中,返回值是码中,返回值是0,public double GetFlowArea(int nArmNo) return 0.0; / TODO: Return branch areas if known.实际上该值应该从元件的参数表中获取,实际上该值应该从元件的参数表中获取,public double GetFlowArea(int nArmNo) bool bIsSet; return m_DP.GetReal(short)Key.Area,out bIsSet);首首先先,声声明明一一
32、个个bool变变量量bIsSet,然然后后引引用用之之前前声声明明的的IFormDataProvider类类型型的的对对象象m_DP,并并对对该该对对象象引引用用GetReal方方法法,目目的的是是为为了了从从元元件件的的参参数数表表中中获获取取参参数数值值,此此处处也也可可用用索索引引1来来表表示示流流通通面面积积,out bIsSet是是用用来来测测试试流流通通面面积是否已设置。积是否已设置。IcBranchResultConsumerIcBranchResultConsumer接口的实现接口的实现29最后一个方法是最后一个方法是GetFlowHydraulicDiameter,用来设置元
33、件进出口的水力直径。,用来设置元件进出口的水力直径。public DeferStatus GetFlowHydraulicDiameter(int nArmNo, out double dHydDiam) / TODO: Update if non-circular branch and hydraulic diameter is known. dHydDiam = 0.0; return DeferStatus.NotImplemented; 如果元件的进出口是圆形的,那么此段代码不需修改。如果元件的进出口是圆形的,那么此段代码不需修改。 IcBranchResultConsumerIcBr
34、anchResultConsumer接口的实现接口的实现30该该接接口口中中也也包包含含有有 四四个个专专有有方方法法,首首先先使使用用IsPressureSpecifier来来判判断断元元件件的的进进出出口口是是否否指指定定了了压压力力,一一般般情情况况下下,进进出出口口压压力力是是要要计计算算得得到到的的,不不是是指指定定的,所以,此处默认为的,所以,此处默认为false,不需要修改。,不需要修改。public bool IsPressureSpecifier(int nArm) return false; / TODO: Update as appropriate 同同理理,使使用用Is
35、FlowSpecifier来来判判断断元元件件的的进进出出口口是是否否指指定定了了流流量量,一一般般情情况况下下,进出口压力也是求解值,此处默认也是进出口压力也是求解值,此处默认也是false,不需要修改。,不需要修改。 public bool IsFlowSpecifier(int nArm) return false; / TODO: Update as appropriate ILinearCoeffsILinearCoeffs接口的实现接口的实现31ILinearCoeffs接接口口最最重重要要的的一一个个功功能能便便是是生生成成控控制制方方程程的的线线性性化化系系数数矩矩阵阵,此此处
36、处调调用用的的方方法法是是PopulateMatrixSteady以以及及PopulateMatrixTransient,分分别别用用来来在在进进行行稳稳态态和和瞬瞬态态分分析析时时调调用用。以以之之前前提提到到的的离离散散损损失失元元件件为为例例,PopulateMatrixSteady方法升级后的代码为:方法升级后的代码为:ILinearCoeffsILinearCoeffs接口的实现接口的实现32public void PopulateMatrixSteady(ref IMatrix matrix, ref IVector vector)bool bIsSet;double dArea
37、= m_DP.GetReal(short)Key.Area, out bIsSet);double dK = m_DP.GetReal(short)Key.K, out bIsSet);double dMdot = m_BrP.GetBranchResult(1,BranchResultType.MassFlowrate).Value;double dDensity = m_BrP.GetBranchResult(1,BranchResultType.Density).Value;double A1 = dK * dMdot / (2 * dDensity * dArea * dArea);A
38、1 = -1.0 / A1;matrix.Set_Element(0, 0, A1);matrix.Set_Element(0, 1, -A1);matrix.Set_Element(1, 0, -A1);matrix.Set_Element(1, 1, A1);vector.Set_Element(0, 0);vector.Set_Element(1, 0);ILinearCoeffsILinearCoeffs接口的实现接口的实现33在在以以上上代代码码中中,首首先先对对m_DP引引用用GetReal方方法法,即即从从参参数数表表格格中中获获取取输输入入的的参参数数 , 包包 括括 截截 面
39、面 面面 积积 Area, 以以 及及 损损 失失 系系 数数 K。 然然 后后 , 对对 m_BrP引引 用用GetBranchResult方方法法,即即从从元元件件的的进进出出口口读读取取参参数数值值,此此处处,读读取取的的参参数数值值包包括括质质量量流流量量以以及及密密度度。GetBranchResult方方法法中中的的索索引引是是基基于于0的的,即即0代代表表arm1,1代代表表arm2。之之后后根根据据已已知知计计算算公公式式定定义义A1,最最后后确确定定系系数数矩矩阵阵,A系系数数用用matrix.Set_Element方方法法给给定定,索索引引是是基基于于(0,0)的的,(0,0
40、)代代表表A1,(0,1)代代表表A2,(1,0)代代表表A3,(1,1)代代表表A4,方方法法中中的的第第三三个个参参数数就就是是系系数数A。B系系数数是是用用vector.Set_Element方方法法给给定定的的,索索引引是是基基于于0的的,0代表代表B1,1代表代表B2,方法中的第二个参数就是系数,方法中的第二个参数就是系数B。由由于于在在瞬瞬态态的的模模拟拟中中,损损失失元元件件具具有有稳稳态态模模拟拟中中相相同同的的特特性性,因因此此,PopulateMatrixTransient的主体引用的主体引用PopulateMatrixSteady方法即可。方法即可。public void
41、 PopulateMatrixTransient(ref IMatrix matrix, ref IVector vector) PopulateMatrixSteady( ref matrix, ref vector);ILinearCoeffsILinearCoeffs接口的实现接口的实现34IResultProvider接接口口是是在在结结果果后后处处理理中中实实现现的的,首首先先声声明明了了一一个个名名为为AreResultsSuppressed的的只只读读属属性性,用用来来检检查查自自定定义义元元件件中中是是否否包包含含计计算算结结果,此段代码不必修改。果,此段代码不必修改。publ
42、ic bool AreResultsSuppressed / TODO: Update as appropriate get return false; 然然后后,需需要要将将参参数数列列表表中中的的Pressure drop-DeltaP,以以及及Loss coefficient result- Calc_K作作为为结结果果输输出出。此此处处,通通过过方方法法WriteResults来来实实现现,代代码码更更新新为:为:IResultProviderIResultProvider接口的实现接口的实现35public void WriteResults(IComponentResultWrit
43、er writer)/calculation and output of pressure drop resultdouble dP1 = m_BrP.GetBranchResult(0, BranchResultType.TotalPressure).Value;double dP2 = m_BrP.GetBranchResult(1, BranchResultType.TotalPressure).Value;double dDP = dP2 - dP1;writer.WriteResult(FF(Key.DeltaP), m_nComponentNumber, new double dD
44、P , false);/ calculate Kdouble dVelocity = m_BrP.GetBranchResult(1, BranchResultType.Velocity).Value;double dDensity = m_BrP.GetBranchResult(1, BranchResultType.Density).Value;double dK = (2*dDP)/(dDensity*Math.Pow(dVelocity,2);writer.WriteResult(FF(Key.Calc_K),m_nComponentNumber,new double dK,false
45、);IResultProviderIResultProvider接口的实现接口的实现36首首先先,对对m_BrP引引用用GetBranchResult方方法法读读取取元元件件进进出出口口的的总总压压,出出口口的的流流速速以以及及密密度度,并并计计算算相相应应的的压压力力损损失失以以及及损损失失系系数数,最最后后引引用用WriteResult方方法法输输出出结结果果,方方法法中中包包含含有有四四个个参参数数,第第一一个个为为参参数数索索引引值值,第第二二个个是是系系统统中中元元件件的的编号,第三个是包含有输出参数的一元数组,最后是以个编号,第三个是包含有输出参数的一元数组,最后是以个bool值值
46、false。需需要要注注意意的的是是,输输出出结结果果是是采采用用的的是是new double dK的的结结构构,这这是是因因为为Flowmaster将将结结果果输输出出为为数数组组格格式式的的(如如管管道道内内部部节节点点的的结结果果),所所以以需需要要将将结果由结果由double转换为转换为double array。IResultProviderIResultProvider接口的实现接口的实现37如如果果元元件件含含有有信信号号接接口口,那那么么可可以以通通过过应应用用GetResultForSinal方方法法来来获获取取相相应应的信号值。的信号值。该该 接接 口口 还还 有有 一一 个
47、个 功功 能能 , 就就 是是 动动 态态 色色 显显 指指 定定 参参 数数 的的 计计 算算 结结 果果 , 通通 过过HasDynamicColourationResult方方法法来来实实现现,该该方方法法返返回回值值为为bool类类型型,如如果果返返回回true,就就说说明明元元件件的的输输出出参参数数包包含含该该色色显显参参数数,那那么么在在计计算算中中动动态态色色显显对对该该元件有效,该段代码不需要编译。元件有效,该段代码不需要编译。 IResultProviderIResultProvider接口的实现接口的实现38该接口中包含有如下方法该接口中包含有如下方法Initialise
48、AnalysisSteadyInitialiseAnalysisTransientInitialiseAfterSteadyStateInitialiseBeforeTimeStepTimestepChangeNotification这这些些方方法法是是用用来来做做初初始始化化的的,包包括括在在稳稳态态计计算算之之前前、瞬瞬态态计计算算之之前前、稳稳态态计计算算之之后后、每每个个时时间间步步计计算算之之前前以以及及时时间间步步改改变变之之后后等等情情况况下下,对对参参数数的的初初始始化化。此此处处可以不做更改。可以不做更改。IInitialiseModelIInitialiseModel接口的
49、实现接口的实现39该该接接口口中中包包含含有有七七个个专专有有方方法法,只只需需更更新新其其中中的的三三个个,IsTemperatureSpecifier,SpecifiedBranchTemperature,以及,以及UpdateBranchTemperature。其其中中,IsTemperatureSpecifier 与与SpecifiedBranchTemperature是是同同时时实实现现的的,IsTemperautreSpecifier返返回回的的是是一一个个bool变变量量,默默认认为为 false,如如果果一一个个元元件件的的出出口口的的温温度度需需要要定定义义(如如压压力力或或
50、者者流流量量边边界界条条件件),则则需需要要将将该该代代码码段段返返回回值值更改为更改为true。public bool IsTemperatureSpecifier(int nArm) return false; / TODO: Update as appropriate 更新为更新为public bool IsTemperatureSpecifier(int nArm) return true; / IsTemperature Specifier enabled IHeatTransferIHeatTransfer接口的实现接口的实现40当当IsTemperatureSpecifier返返
51、回回值值为为True时时,SpecifiedBranchTemperature方方法法可可以以实实现现。它它用用来来覆覆盖盖与与指指定定出出口口温温度度的的元元件件相相连连接接的的节节点点的的温温度度,并并把把该该温温度值更新为用户给定的温度。度值更新为用户给定的温度。 例如,例如,public DeferStatus SpecifiedBranchTemperature(int nArm, out double dTemperature) / TODO: Update as appropriate dTemperature = 0.0; return DeferStatus.NotImple
52、mented; 更新为更新为public DeferStatus SpecifiedBranchTemperature(int nArm, out double dTemperature) / set arm temperature to 50 Deg C dTemperature = 323.15; return DeferStatus. Implemented;/若此处不改为若此处不改为Implemented,该方法不会执行,该方法不会执行 IHeatTransferIHeatTransfer接口的实现接口的实现41UpdateBranchTemperature方法用来计算元件出口的温度。
53、方法用来计算元件出口的温度。该方法适用于元件的进口温度给定并且内部达到热平衡。同时也需要将代码该方法适用于元件的进口温度给定并且内部达到热平衡。同时也需要将代码 return DeferStatus.NotImplemented 更新为更新为 return DeferStatus. Implemented否则方法不会执行。否则方法不会执行。u下页代码计算的是给定热负荷下页代码计算的是给定热负荷IHeatTransferIHeatTransfer接口的实现接口的实现42IHeatTransferIHeatTransfer接口的实现接口的实现public DeferStatus UpdateBra
54、nchTemperature(int nArms, out double dTemperatures) dTemperatures = new doublenArms.Length; for (int i=0; i=0) inletTemp = m_BrP.GetBranchResult(short)ArmNo.Arm1,BranchResultType.TotalTemperature).Value; inletCp = m_BrP.GetBranchResult(short)ArmNo.Arm1,BranchResultType.Cp).Value; else inletTemp = m_
55、BrP.GetBranchResult(short)ArmNo.Arm2,BranchResultType.TotalTemperature).Value; inletCp = m_BrP.GetBranchResult(short)ArmNo.Arm2,BranchResultType.Cp).Value; double outletTemp = (duty/(Math.Abs(massFlow)*inletCp)+inletTemp; dTemperature i= outletTemp; return DeferStatus.Implemented; 43编译生成编译生成dlldll文件
56、文件Build solution项项目目子子文文件件夹夹“Releases”之之下下,会会自自动生成一个与项目同名的动生成一个与项目同名的dll文件文件将将该该文文件件拷拷贝贝到到Flowmaster安安装装目目录录之之下下44生成新元件生成新元件在在Catalogues/Components/User defined文文件件夹夹下下创创建建一一个个新新的的元元件件选选择择自自己己创创建建的的CAM作作为为元元件件的的数数学模型学模型添加元件图标添加元件图标重新命名自定义元件重新命名自定义元件45生成新元件生成新元件46新元件的使用新元件的使用47Thank you for your attention!Welcome to visit : 部分资料从网络收集整理而来,供大家参考,感谢您的关注!