09-Flowmaster自定义元件.ppt
- 文档编号:18671489
- 上传时间:2023-08-27
- 格式:PPT
- 页数:47
- 大小:1.51MB
09-Flowmaster自定义元件.ppt
《09-Flowmaster自定义元件.ppt》由会员分享,可在线阅读,更多相关《09-Flowmaster自定义元件.ppt(47页珍藏版)》请在冰点文库上搜索。
Hi-keyTechnology专业工程软件和服务提供商FlowmasterFlowmaster自定义元件自定义元件北京海基科技发展有限责任公司Flowmaster工程师:
黄宏艳2代码通信模块的创建与定义代码通信模块的创建与定义控制方程的线性化控制方程的线性化CAM介绍及创建介绍及创建代码编译及元件生成代码编译及元件生成报告内容报告内容3什么是什么是CAM什么是什么是CAM?
CAM(ComponentAnalyticalModel)CAM(ComponentAnalyticalModel)是是FlowmasterFlowmaster分析的基石,是流体元件的分析的基石,是流体元件的核心,包括用来解算流量、压力、流速、温度等系统参数的所有控制方程都被核心,包括用来解算流量、压力、流速、温度等系统参数的所有控制方程都被编译成代码并存储于编译成代码并存储于CAMCAM的代码通信模块中。
任何新元件的创建都以的代码通信模块中。
任何新元件的创建都以CAMCAM为基为基础,而每一个础,而每一个CAMCAM创建的时候都会被指向唯一的一个创建的时候都会被指向唯一的一个GUID(GUID(全局唯一标识符全局唯一标识符),在计算过程中,通过该标识符识别,在计算过程中,通过该标识符识别CAMCAM代码,进而对流体的流动与换热进行代码,进而对流体的流动与换热进行解算。
解算。
CAM描述些什么?
描述些什么?
元件的接口数量以及类型元件的信号端口数量以及类型元件的接口数量以及类型元件的信号端口数量以及类型元件的特征参数及必要性元件的控制方程代码元件的特征参数及必要性元件的控制方程代码元件图标元件图标4创建创建CAM1.CAM名称名称2.接口数量以接口数量以及类型,位置及类型,位置设置设置3.信号发生端信号发生端口数量,参数口数量,参数类型以及位置类型以及位置设置设置4.对该组件分对该组件分析模型的描述析模型的描述5.元件的特征元件的特征参数,输入和参数,输入和输出输出6.参数的必要参数的必要性设置性设置特征参数的种类:
特征参数的种类:
实数、曲线或方程、曲面、实数、曲线或方程、曲面、整数、下拉选项、脚本、工整数、下拉选项、脚本、工质选择以及下拉表格质选择以及下拉表格特征参数的必要性:
特征参数的必要性:
必须输入、可选输入、文必须输入、可选输入、文字说明、不需输入字说明、不需输入端口类型:
端口类型:
信号输入、信号输出信号输入、信号输出、测量输入、测量输出测量输入、测量输出生成代码通信模生成代码通信模块块5代码通信模块的创建与定义代码通信模块的创建与定义控制方程的线性化控制方程的线性化CAM介绍及创建介绍及创建代码编译及元件生成代码编译及元件生成报告内容报告内容6线性化系数线性化系数获取线性化系数获取线性化系数FlowmasterFlowmaster并不是在流体元件中直接求解流动方程,而是首先将这些流动方程并不是在流体元件中直接求解流动方程,而是首先将这些流动方程做线性化处理,得到一个线性方程组,通过求解该线性方程组来求解该元件的做线性化处理,得到一个线性方程组,通过求解该线性方程组来求解该元件的压力、流量、流速等参数。
如对于一个只有两个接口的元件,它的线性方程组压力、流量、流速等参数。
如对于一个只有两个接口的元件,它的线性方程组包含有两个方程,分别是进出口质量流量随进出口压力变化的等效方程。
包含有两个方程,分别是进出口质量流量随进出口压力变化的等效方程。
7系数矩阵系数矩阵系数矩阵系数矩阵该线性方程组中的系数矩阵为该线性方程组中的系数矩阵为其中,其中,B1B1与与B2B2是用来描述非压力变化引起的那部分流量的,如果没有外部功是用来描述非压力变化引起的那部分流量的,如果没有外部功的输入,那质量流量只与压力相关,没有压差就没有流量,的输入,那质量流量只与压力相关,没有压差就没有流量,B1=B2=0B1=B2=0,但如果,但如果有功输入,如泵,那么质量流量除了由压差引起之外,还与外部功有关,有功输入,如泵,那么质量流量除了由压差引起之外,还与外部功有关,B1B1与与B2B2不为零。
不为零。
8控制方程线性化控制方程线性化离散损失元件离散损失元件以离散损失元件为例,流体流经它之后的压力损失与损失系数、流体密度、流以离散损失元件为例,流体流经它之后的压力损失与损失系数、流体密度、流体流速相关。
体流速相关。
此处,为流体流经该元件的压力损失此处,为流体流经该元件的压力损失KK为元件的损失系数为元件的损失系数VV为流体流速为流体流速为流体密度为流体密度那么,对于该损失元件,必须输入的参数有损失系数以及流动面积。
那么,对于该损失元件,必须输入的参数有损失系数以及流动面积。
9控制方程线性化控制方程线性化离散损失元件离散损失元件现在,我们要把该方程转换为质量流量跟进出口压力的函数组。
根据现在,我们要把该方程转换为质量流量跟进出口压力的函数组。
根据与与可得,可得,与与进一步可得,进一步可得,与与10控制方程线性化控制方程线性化离散损失元件离散损失元件最终,得到系数矩阵:
最终,得到系数矩阵:
因为进出口质量流量绝对值相等,所以,该系数矩阵也等于因为进出口质量流量绝对值相等,所以,该系数矩阵也等于11控制方程线性化控制方程线性化对于其他非二接口元件,线性化方程组格式如下:
对于其他非二接口元件,线性化方程组格式如下:
12代码通信模块的创建与定义代码通信模块的创建与定义控制方程的线性化控制方程的线性化CAM介绍及创建介绍及创建代码编译及元件生成代码编译及元件生成报告内容报告内容13什么是代码通信模块什么是代码通信模块代码通信模块代码通信模块代码通信模块是代码通信模块是CAM的基本模板,通过它读取元件的输入参数,在自动生的基本模板,通过它读取元件的输入参数,在自动生成的分析代码模板中进行分析代码的编辑,然后进行运算,并输出计算结果。
成的分析代码模板中进行分析代码的编辑,然后进行运算,并输出计算结果。
14创建代码通信模块创建代码通信模块代码通信模块的创建代码通信模块的创建1.命名空间,定义命名空间,定义了一组相关的类。
了一组相关的类。
2.类名,用来对自类名,用来对自定义的组件分析模定义的组件分析模型进行分类,包含型进行分类,包含具有通用属性的对具有通用属性的对象。
象。
3.接口选择,用来接口选择,用来定义在定义在Flowmaster分析过程中用到的分析过程中用到的功能和方法。
如读功能和方法。
如读取元件的输入参数取元件的输入参数,获取流体属性,获取流体属性,输出计算结果等等输出计算结果等等。
4.模块保存路径。
模块保存路径。
5.存储代码通信模存储代码通信模块块.CS格式的格式的C#文件名文件名15选择继承接口选择继承接口继承接口继承接口在程序设计中,继承纯粹是为了分类服务的,它是类在程序设计中,继承纯粹是为了分类服务的,它是类/接口之间的一种关系接口之间的一种关系。
在。
在Flowmaster数据库中,为了对自定义元件创建通信代码模块,共提供了数据库中,为了对自定义元件创建通信代码模块,共提供了几十种接口,不同的接口有不同的功能,如元件的输入参数需要通过几十种接口,不同的接口有不同的功能,如元件的输入参数需要通过IcFormDataConsumer来体现,计算结果通过来体现,计算结果通过IResultProvider读取,如果读取,如果需要考虑换热,那么则需添加需要考虑换热,那么则需添加IHeatTransfer接口。
接口。
有些接口是有共性的,如有些接口是有共性的,如IcAnalysisPlugInConsumer与与ILinearCoeffs都都是从是从MandatoryInterfaces中继承,都是必须选择的接口,这是它们共同的中继承,都是必须选择的接口,这是它们共同的属性。
而包括属性。
而包括MandatoryInterfaces,AdvisableInterfaces,ControllerInterfaces等在内的接口都是从等在内的接口都是从Flowmaster接口类的动态链接库(即接口类的动态链接库(即Flowmaster.Interfaces.dll)中继承。
)中继承。
根据模拟类型和要求的不同,可以选择不同的继承接口组合。
在生成的代码通根据模拟类型和要求的不同,可以选择不同的继承接口组合。
在生成的代码通信模块中会自动产生分析代码的模板,该模板中包含了已选择的所有接口功能信模块中会自动产生分析代码的模板,该模板中包含了已选择的所有接口功能。
16代码通信模块的创建与定义代码通信模块的创建与定义控制方程的线性化控制方程的线性化CAM介绍及创建介绍及创建代码编译及元件生成代码编译及元件生成报告内容报告内容17创建创建C#项目文件项目文件必须是必须是XXX.FlowmasterModels.XXX的的格式格式选择“类库”选择“类库”18导入代码通信模块导入代码通信模块导入已创建的代码通信模块导入已创建的代码通信模块对该项目文件导入已创建的对该项目文件导入已创建的Codestub(代码通信模块),代码通信模块已经被保存在代码通信模块),代码通信模块已经被保存在了一个了一个.CS格式的文件中,并查看已创建的代格式的文件中,并查看已创建的代码模板。
码模板。
添加添加Flowmaster引用引用因为代码通信模块中选择的所有接口均从因为代码通信模块中选择的所有接口均从Flowmaster接口库中继承,此处应该引用接口库中继承,此处应该引用Flowmaster接口的动态链接库。
接口的动态链接库。
19实现接口实现接口实现接口实现接口通过创建通信代码模块时建立的类来实现所选择的所有接口,这通过创建通信代码模块时建立的类来实现所选择的所有接口,这些接口中引用的所有非些接口中引用的所有非System.Object类和方法都来自类和方法都来自Flowmaster.Interface.dll文件,并且这些类和方法中包含的代码都是封装好文件,并且这些类和方法中包含的代码都是封装好的,无法看到,我们只需了解这些类和方法的功能。
代码的主体结构就是一个的,无法看到,我们只需了解这些类和方法的功能。
代码的主体结构就是一个类,这个类就是我们所创建的元件。
类,这个类就是我们所创建的元件。
所有接口中都包含有元件识别代码:
所有接口中都包含有元件识别代码:
privateintm_nComponentNumber=0;publicclassname(intnComponentNumber)m_nComponentNumber=nComponentNumber;该代码块包含两部分内容:
字段声明以及类的重载构造函数,是通该代码块包含两部分内容:
字段声明以及类的重载构造函数,是通过读取自定义元件在网络中的编号来识别该元件,进而调用该元件的方法的。
过读取自定义元件在网络中的编号来识别该元件,进而调用该元件的方法的。
该代码段不需要修改。
该代码段不需要修改。
20实现接口实现接口实现接口实现接口所有接口中还包含有元件全特征参数识别代码:
所有接口中还包含有元件全特征参数识别代码:
privateFeatureIDFF(Keyk)returnm_Features.FindFullFeatureID(short)k);privateKeyFK(FeatureIDfullID)return(Key)m_Features.FindShortFeatureID(fullID);该代码段完成了对所有接口都包含的两个方法的实现,通过两个该代码段完成了对所有接口都包含的两个方法的实现,通过两个return语句可以识别枚举类型或者短整型的特征参数。
此代码段也不需要修改语句可以识别枚举类型或者短整型的特征参数。
此代码段也不需要修改。
21IcAnalysisPlugInConsumerIcAnalysisPlugInConsumer接口的实现接口的实现该接口中除了包含之前提到的两个代码段之外,还包含两个属性以及一个方法:
该接口中除了包含之前提到的两个代码段之外,还包含两个属性以及一个方法:
publicstringPlugInNamegetreturn“MyModelName”;该代码段声明了一个属性,取值时返回的“该代码段声明了一个属性,取值时返回的“MyModelName”应该改为元件的名应该改为元件的名称,该名称字符串将出现在计算错误或警告报告之中。
称,该名称字符串将出现在计算错误或警告报告之中。
publicPlugInTypePlugInClassTypegetreturnPlugInType.Component;该代码段也声明了一个只读属性,用来读取元件的类型,此处不必修改。
该代码段也声明了一个只读属性,用来读取元件的类型,此处不必修改。
22IcAnalysisPlugInConsumerIcAnalysisPlugInConsumer接口的实现接口的实现该代码段需要修改,首先,需要把成员变量添加到方法的主体当中,其次,该代码段需要修改,首先,需要把成员变量添加到方法的主体当中,其次,需要初始化它们。
需要初始化它们。
该接口中还包含了一个方法,是为了初始化计算服务端的,通过引用指定的该接口中还包含了一个方法,是为了初始化计算服务端的,通过引用指定的静态变量,可以获取计算状态、是否收敛等信息。
静态变量,可以获取计算状态、是否收敛等信息。
publicvoidInitialisePlugInConsumer(IAnalysisGlblServicesservices)/staticprivateIAnalysisGlblServicesm_Services=null;/staticprivateIgAnalysisStatusProviderm_AnalysisStatus=null;/staticprivateIgConvergenceCriteriaProviderm_ConvergenceCriteria=null;/staticprivateIgErrorHandlerProviderm_ErrHandler=null;/privateIFluidPropertyProviderm_FluidProps=null;/m_Services=services;/m_AnalysisStatus=services.AnalysisStatus;/m_ConvergenceCriteria=services.ConvergenceCriteria;/m_ErrHandler=services.ErrorHandler;23IcAnalysisPlugInConsumerIcAnalysisPlugInConsumer接口的实现接口的实现此处需要在方法主体中添加需要的“服务”,并在调用方法之前初始化它们此处需要在方法主体中添加需要的“服务”,并在调用方法之前初始化它们为“为“null”。
如下所示:
。
如下所示:
staticprivateIAnalysisGlblServicesm_Services=null;staticprivateIgAnalysisStatusProviderm_AnalysisStatus=null;staticprivateIgConvergenceCriteriaProviderm_ConvergenceCriteria=null;staticprivateIgErrorHandlerProviderm_ErrHandler=null;publicvoidInitialisePlugInConsumer(IAnalysisGlblServicesservices)m_Services=services;/推荐推荐m_AnalysisStatus=services.AnalysisStatus;/推荐推荐m_ConvergenceCriteria=services.ConvergenceCriteria;m_ErrHandler=services.ErrorHandler;/推荐推荐24IcFormDataConsumerIcFormDataConsumer接口的实现接口的实现该接口定义了一个该接口定义了一个Guid(全局唯一标识符),该值是系统自动生成的(全局唯一标识符),该值是系统自动生成的privatestaticGuidm_guidModel=newGuid(“”)紧接着,声明了一个只读属性,将该标识符声明为元件的识别代码紧接着,声明了一个只读属性,将该标识符声明为元件的识别代码publicGuidClassReferencegetreturnm_guidModel;此外,该接口中还声明了一个此外,该接口中还声明了一个FeatureLookup类型的变量类型的变量m_Features,以,以及及IFormDataProvider类型的变量类型的变量m_DP,并把它们初始化为“,并把它们初始化为“null”。
并声。
并声明了一个主体方法明了一个主体方法InitialiseFormDataConsumer,因为元件的特征参数也会,因为元件的特征参数也会有与之相对应的全局标识符,通过在该方法中创建一个类似于数组的类型的实有与之相对应的全局标识符,通过在该方法中创建一个类似于数组的类型的实例,将元件的特征参数输入框与全局标识符关联起来,从而实现参数查找。
例,将元件的特征参数输入框与全局标识符关联起来,从而实现参数查找。
以上代码均采用系统生成的代码,不需要修改。
以上代码均采用系统生成的代码,不需要修改。
接下来,声明一个公开的枚举类型,直接量类型为短整型,该枚举类型包含的接下来,声明一个公开的枚举类型,直接量类型为短整型,该枚举类型包含的直接量为元件的特征参数,此处需要将代码段中各直接量的名称修改,以方便直接量为元件的特征参数,此处需要将代码段中各直接量的名称修改,以方便理解。
理解。
25IcFormDataConsumerIcFormDataConsumer接口的实现接口的实现publicenumKey:
shortL1_1=1,/Cross-sectionalAreaReal;Input;Repeats=1L1_2=2,/LossCoefficientReal;Input;Repeats=1L1_3=3,/PressureDropReal;Output;Repeats=1L1_4=4,/LossCoefficientResultReal;Output;Repeats=1LastItem=32767更新这段代码为:
更新这段代码为:
publicenumKey:
shortArea=1,/Cross-sectionalAreaReal;Input;Repeats=1K=2,/LossCoefficientReal;Input;Repeats=1DeltaP=3,/PressureDropReal;Output;Repeats=1Calc_K=4,/LossCoefficientResultReal;Output;Repeats=1LastItem=26该接口中包含有四个专有方法,首先,为了允许用户从元件进出口获取压力、该接口中包含有四个专有方法,首先,为了允许用户从元件进出口获取压力、流量、密度、温度等参数,需要引用流量、密度、温度等参数,需要引用InitialiseBranchResultConsumer方法方法。
该方法声明了用来获取元件进出口参数的成员变量。
该方法声明了用来获取元件进出口参数的成员变量IiBranchResultProvider,并初始化它为“,并初始化它为“null”。
此处,需要将下列代码段升级,。
此处,需要将下列代码段升级,publicvoidInitialiseBranchResultConsumer(IiBranchResultProviderbrProvider)/TODO:
Typicallydefineamembervariabletoprovideaccesstothebranchprovider./privateIiBranchResultProviderm_BrP=null;/m_BrP=brProvider;升级为下列代码段,升级为下列代码段,privateIiBranchResultProviderm_BrP=null;publicvoidInitialiseBranchResultConsumer(IiBranchResultProviderbrProvider)m_BrP=brProvider;IcBranchResultConsumerIcBranchResultConsumer接口的实现接口的实现27第二个方法是第二个方法是HasFlowArea,用来判定元件的指定进出口是否设置了流通面,用来判定元件的指定进出口是否设置了流通面积。
积。
publicboolHasFlowArea(intnArmNo)returntrue;/TODO:
Amendtofalseifareaisnotknown.此段代码不需修改。
此段代码不需修改。
IcBranchResultConsumerIcBranchResultConsumer接口的实现接口的实现28第三个方法是第三个方法是GetFlowArea,用来获取元件进出口的流通面积,系统生成的代,用来获取元件进出口的流通面积,系统生成的代码中,返回值是码中,返回值是0,publicdoubleGetFlowArea(intnArmNo)return0.0;/TODO:
Returnbranchareasifknown.实际上该值应该从元件的参数表中获取,实际上该值应该从元件的参数表中获取,publicdoubleGetFlowArea(intnArmNo)boolbIsSet;returnm_DP.GetReal(short)Key.Area,outbIsSet);首先,声明一个首先,声明一个bool变量变量bIsSet,然后引用之前声明的,然后引用之前声明的IFormDataProvider类型的对象类型的对象m_DP,并对该对象引用,并对该对象引用GetReal方法,目的是为了从元件的参数方法,目的是为了从元件的参数表中获取参数值,此处也可用索引表中获取参数值,此处也可用索引1来表示流通面积,来表示流通面积,outbIsSet是用来测试是用来测试流通面积是否已设置。
流通面积是否已设置。
IcBranchResultConsumerIcBranchResultConsumer接口的实现接口的实现29最后一个方法是最后一个方法是GetFlowHydraulicDiameter,用来设置元件进出口的水力直,用来设置元件进出口的水力直径。
径。
publicDeferStatusGetFlowHydraulicDiameter(intnArmNo,outdoubledHydDiam)/TODO:
Updateifnon-circularbranchandhydraulicdiameterisknown.dHydDiam=0.0;returnDeferStatus.NotImplemented;如果元件的进出口是圆形的,那么此段代码不需修改。
如果元件的进出口是圆形的,那么此段代码不需修改。
IcBranchResultConsumerIcBranchResultConsumer接口的实现接口的实现30该接口中也包含有该接口中也包含有四个专有方法,首先使用四个专有方法,首先使用IsPressur
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 09 Flowmaster 自定义 元件