Smartplant3D基于PCF二次开发报表的解析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SmartPlant 3D基于PCF二次开发报表的实现
风中飘
摘要:PCF是ISOGEN生成的中间过程文件,文档内容几乎涵盖单线图图面上的所有信息,用户通过简单的ISOGEN定制,可以随意输出SmartPlant 3D模型中的数据。
二次开发报表功能就是通过解析PCF 文档内容,实现了一次性输出“单线图目录”、“管道综合材料表”、“油漆保温材料表”成品文件。
涉及鹰图的PP&M产品:SmartPlant 3D
1.引言
PCF是Piping Component File的简称,SmartPlant 3D单线图生成引擎ISOGEN 在抽图的过程会同时生成中间过程文件PCF。
在开始介绍PCF二次开发报表功能前,先简要阐述下PCF文档的内部结构。
PCF文档主要包含如下5部分:
Basic header information
基本表头信息,如管径、螺栓直径、螺栓长度、坐标等的使用单位;
Pipeline identifier and related header information
管线信息,通常会包含单线图图号,管道等级、保温等级等内容;
Pipeline components information
管件信息,如商品编码,材料描述,坐标等信息;
Connection information
单线图上相关管道之间的链接信息;
Material item codes and descriptions
商品编码与材料描述的对应信息。
典型的PCF文档内容及其结构,如图1所示。
图1 典型的PCF文档内容及其结构
2.SmartPlant 3D中PCF内容的定制
2.1Pipeline identifier and related header information
单线图样式配置bels.DrawingFrame中设置对应Label内容的输出,如图2所示,定制PCF文件中管线信息的输出:Hyec Drawing No(图号)、Hyec Pipe Line No(管线号)、Extraction Date(日期)等。
图2 定制PCF文件的管线信息
2.2Pipeline components information
单线图样式配置ponentAtts中设置对应Label内容的输出,如图3所示,定制PCF文件中元件信息的输出:管件保温厚度。
图3 定制PCF文件的管件信息
3二次开发实现PCF报表
3.1程序主界面
PCF报表二次开发编程语言采用C#,应用Linq编程技巧汇总数据,使用开源组件NPOI 实现Excel报表的快速输出。
程序主界面如图4所示:
图4 程序主界面
3.2PCF文件数据解析及报表生成
3.2.1.提取Basic header information数据
提取UNITS-BORE(管径单位)用于公英制换算;
提取UNITS-BOLT-DIA(螺栓直径单位)用于切换公英制螺栓规格的不同表示方式,如公制螺栓,螺栓规格表示为M24x100。
3.2.2.提取Pipeline identifier and related header information数据生成“轴侧图
索引表”
提取PIPELINE-REFERENCE块下的所有属性信息,这部分数据通过字段映射,用来生成单线图目录。
如本公司的单线图目录格式里有“管线号”、“单线图图号”两列内容,在PCF 中“管线号”对应“ATTRIBUTE11”字段,“图号”对应“ATTRIBUTE14”字段。
通过程序选择对应的属性字段进行匹配,如图5所示。
图5 单线图目录属性字段匹配
应用公司模板生成的“管道轴侧图索引表”,如图6所示。
图6 Hyec管道轴侧图索引表
(附注,“管道轴侧图索引表”中“页数”数据是通过抓取对应的“*-mes.mes”获取。
)
3.2.3.提取Pipeline components information数据
Pipeline components information下有很多字段,有些数据可以直接获取,有些数据需要利用现有数据进行二次加工获取。
比如,管件SIZE和管件中心线长度,是通过端点数据END-POINT、BRANCH-POINT和CENTRE-POIN加工获得。
END-POINT字段前4列值的含义如下所示:
END-POINT 500424.000 489000.000 3500.000 50
X坐标值 Y坐标值 Z坐标值端部管件公称直径50 管件中心长度就是求和各点间(X,Y,Z)坐标之间的距离。
在如附属件(ADDITIONAL-ITEM)的材料描述,在components information不体现,需要通过ITEM-CODE在“Material item codes and descriptions”中获取材料描述。
3.2.
4.设置PCF中Components类型与报表中分类的对应关系
程序初始化11种大类元件:1.管子、2.阀门、3.管件、4.法兰、5.垫片、6.紧固件、7.仪表件、8.特殊件、9.其它、10.支吊架、11.焊缝。
通过PcfComponentType.xml文件自定义Components在报告中的分类。
比如,报表中阀门归类在XML中的定义:
<Valves Name="阀门" Unit="个">
<Valve Type="VALVE"/>
<Valve Type="VALVE-MULTIWAY"/>
<Valve Type="VALVE-3WAY"/>
<Valve Type="VALVE-4WAY"/>
<Valve Type="VALVE-ANGLE"/>
</Valves>
其含义是PCF中Components类型为VALVE、VALVE-MULTIWAY、VALVE-3WAY、VALVE-4WAY、VALVE-ANGLE这5种类型的管件在报表中被归到“阀门”类别下。
3.2.5.单管材料报表的生成
抓取了PCF中Components information并经过深加工后,即可生成单管材料报表,如图7所示:
图7 单管材料报表
其中Category字段为PCF的Components类型,MtoCategory字段为报表中的分类;
Qty字段为数量,值为0的表明其“MATERIAL-LIST”内容为“EXCLUDE”。
3.2.6.应用Linq编程技巧汇总单管材料数据生成综合材料报表
Linq是语言集成查询技术,编程人员可以方便的写出通用的查询语句。
汇总单管材料数据使用Linq to Object技术,可以很方便的根据需求选择用哪几个字段来进行数据汇总,比如代码:
var items = PcfMtoItemsList
.Where(a => a.MtoCategory == cate)
.GroupBy(g => new { g.Npd, g.Descripiton, g.ItemCode })
.Select(p => new MtoModel()
{
Categry = cate,
Npd = p.Key.Npd,
Description = p.Key.Descripiton,
ItemCode = p.Key.ItemCode,
Unit = unit,
Qty = p.Sum(s => Convert.ToDouble(s.Qty)) })
.OrderBy(p => p.Description).ThenBy(p => p.Npd).ToList();
GroupBy就是选择根据哪些字段来进行汇总,如上面代码根据单管材料的Npd、Descripiton和ItemCode字段汇总数据,生成的综合材料报表如图8所示。
图8 综合材料报表
图8中显示的管子数据行中有ItemCode值,而阀门数据行中无ItemCode值,表明管子数据汇总有选择ItemCode,而阀门数据汇总没有选择ItemCode,程序可通过“材料编码”界面进行设置,如图9所示:
图9 综材材料编码设置
3.2.7.生成油漆保温报表
在生成油漆保温报表前,需要根据具体项目的“油漆保温项目统一规定”编写程序便于识别的油漆保温等级表。
如下,图10加工后的保温等级表:
图10 加工后的保温等级表
图11加工后的油漆等级表:
图11 加工后的油漆等级表
如图12 程序中设置对应的项目代号和油漆保温等级参数的数据来源:
图12 油漆保温设置
图13 根据油漆保温等级表生成的油漆保温报表:
图13 油漆保温报表
3.2.8.生成公司模板的综合材料报表
基础数据生成完后,根据公司模板的格式填入相应的数据。
如图14 Hyec综合材料报表:
图14 Hyec综合材料报表
4.小结
本文讨论了PCF文档数据结构、通过ISOGEN定制所需数据到PCF的方法、提取及二次加工PCF中相关数据、Linq编程技巧汇总数据、根据“油漆保温项目统一规定”
编写程序容易识别的保温油漆等级表等技术,可以很方便快捷的一次性生成“单线图管线属性表”、“单管材料表”、“通用的管道综合材料表”以及套用公司模板的“管道轴侧图索引表”、“管道综合材料表”等报表。
PCF二次开发报表丰富了SmartPlant 3D出报表的方式,对软件自带的传统报表起到了很好的补充作用。