APP下载

FPSO船体结构建造Piece Mark进度报表开发与应用

2021-11-20姜秀斌沈彬吴涛刘镇东

现代计算机 2021年18期
关键词:总装数据表字典

姜秀斌,沈彬,吴涛,刘镇东

(海洋石油工程股份有限公司,青岛266520)

0 引言

随着近几年海洋石油工程股份有限公司走向全球、走向深海的步伐,海工青岛公司作为建造板块的核心公司也迎来了国内和国外浮式生成和储油装置建造的一个小高峰,同时也加强与烟台莱佛士船业有限公司为代表船厂之间的合作。在船体建造过程中,国外业主会要求每周提交每一个零件的建造状态,国外业主称之为Piece Mark状态表,包括下料、零件预制、板片预制、分段预制、涂装和搭载状态,并以此为依据进行建造进度的计算,以及费用QS结算等业务。

由于每一个项目业主对Piece Mark报表的内容和状态清单等都可能提出一些特定的要求,因此需要基于项目的特定需求并使用该解决方案和软件算法为每一个项目的Piece Mark表开发特定的程序。

1 PCMS系统配置

PCMS系统是Project Construction Management Sys⁃tem的缩写,海工青岛公司与鹰图公司合作开发的适用于海工青岛公司的建造管理系统。该系统的一个优点是可以根据项目的需求实现从加工设计数据、工单类型、工作步骤、报表等环节的自定义配置,因此是非常灵活的一个系统。

1.1 加工设计数据模板配置

加工设计数据模板分为下料方案模板类和装配方案模板类。其中分段下料方案模板包括:分段板材下料方案模板文件和分段型材下料方案模板文件。下料方案模板文件必须包含的信息包括:下料指令号(即图纸号)、套料零件清单、下料净总重量等;其中装配模板文件包括:一级装配件(包括卷制管、T型梁、K板等)装配模板文件、板架装配模板文件和分段装配模板文件。装配模板文件必须包含的信息包括:装配图纸号、零件ID、子构件ID、零件数量、零件重量和父构件ID等。

1.2 工单类型和工作步骤配置

工单的类型需要与业主、项目组和生产车间相关人员(包括生产负责人和计划工程师等)一起讨论后确定;每一类工单中包含什么Component(工作对象),它应该分成哪几个Work Step(工作步骤)也需要一起讨论后确定。这些讨论是非常有必要的,因为工作对象和工作步骤直接和项目的四级计划、权重分配策略等相关。

1.3 SPF进度报表配置

从SPF2016R1版本开始,Smart Plant Foundation软件提供了Report Administration模块,通过该模块可以非常方便并且灵活地配置报表,报表导出格式选择xlsx文件格式。在本项目中设计了两个报表分别是下料进度报表和装配进度报表,由于xlsx格式数据文件的最大行数约为104万行,因此合理地分成两个报表有利于保证在项目后期数据报表的总行数不会突破104万行限制。

2 Piece Mark开发技术与算法

本文采用的编程技术是VSTO技术(Visual Studio Tool for Office),编程语言采用Visual Basic.Net,首选通过SPF生成xlsx报表并下载到本地,再通过xlsx数据表提取数据技术,并采用数据字典数据结构,最后使用零件状态分析算法生成业主需要的Piece Mark报表。

2.1 xlsx表提取数据技术

将xlsx文件作为数据库,可以采用如下数据库连接关键字信息:OleDbConnection1.ConnectionString="Provider=Microsoft.Ace.OLEDB.12.0;Extended Proper⁃ties='Excel 12.0;HDR=yes;IMEX=1';Data Source="&XlsxFullFileName。其中Extended Properties中的属性‘Excel 12.0’Excel文件扩展名为.xlsx;当IMEX=1时为“汇入模式”,这个模式开启的Excel档案只能用来做“读取”用途;当HDR=Yes,这代表第一行是标题,不作为数据使用。

如果整个xlsx文件作为一个数据库,那么xlsx文件中的一个worksheet就作为一个数据表,因此读取数据可以使用select语句,select语句的语法采用Jet SQL的语法,唯一的区别是数据库表名称的写法为:FROM["+WorkSheet_CuttingDamp_Data_SheetName+"$]T1,即用‘[SheetName$]’表示数据库表名,T1作为表的别名。那么获取下料进度状态数据完整的select语句范例如下所示:Sql_Get_Nest_Plate="SELECT T1.RegisterID,

T1.DrawingID,T1.Component,T1.NestingList,T1.Qty,T1.Units,T1.FinishDate,T1.RowID"+"FROM["+Work⁃Sheet_CuttingDamp_Data_SheetName+"$]T1 where T1.Class='PCMS_ST_Nest_Plate'and T1.RegisterID like'%SD-CR-DWG-S10-ST-%'"。可以通过select语句的应用,可以快速地获得想要得到的数据集合,并可以较为快速地存储这些数据到DataTable对象中。

针对装配阶段的完成情况数据表,可以根据零件和构件在不同阶段完成装配工作的情况的分类,对应生成如下10种数据表:1)零件在一级装配阶段的完成情况数据表;2)零件在二级预制阶段的完成情况数据表;3)零件在三级预制阶段的完成情况数据表;4)零件在总装搭载阶段的完成情况数据表;5)一级结构物在二级预制阶段的完成情况数据表;6)一级结构物在三级预制阶段的完成情况数据表;7)一级结构物在总装搭载阶段的完成情况数据表;8)二级结构物在三级预制阶段的完成情况数据表;9)二级结构物在总装搭载阶段的完成情况数据表;10)三级结构物在总装搭载阶段的完成情况数据表。也同样将这10张数据表存储到DataTable对象中。

2.2 数据字典结构的应用

如果通过使用For循环遍历DataTable对象中的每一行数据,去寻找指定零件ID的预制状态,一定会出现循环嵌套的情况。由于数据表的行数是几万行这样一个数量级,因此For循环的执行效率一定会非常低。因此本文考虑使用字典数据结构,将For循环嵌套改进为两个独立的非嵌套的For循环。第一个For循环用于生成数据字典,数据字典对象的定义如下所示:Dim Dict_ClassPart_1stFabr_Finished As Dictionary(Of String,List(Of String)),该字典用于存储零件在一级装配阶段完成情况,字典的Key为零件ID,字典的Value为一个List对象,List对象的清单为该零件在预制阶段各个工作步骤的完成日期。第二个For循环用于循环所有零件ID,根据零件ID以及指定的字典直接获得它的各个阶段的施工步骤完成日期。采用数据字典和两个独立的For循环的方法代替两层for循环嵌套的方法,解决了算法效率太慢的问题。

2.3 零件状态总体分析算法

零件的Piece Mark报表中分成两个部分,第一部分是零件的加工设计基础数据,包括零件号、图纸号、分段号、零件数量、零件重量等。第二部分是零件的各生产阶段的状态信息,包括下料阶段各状态点完成日期、一级装配阶段各状态点完成日期、分段预制阶段各状态点完成日期、分段总装阶段各状态点完成日期。因此零件的状态分析算法应该包括对零件的各个阶段的状态分析过程。

首先下料状态日期直接从存储下料状态信息的字典中取值即可,没有层次关系直接对应即可。接着分析一级装配件的预制状态信息,由于一级装配件是由零件组成的构建,因此需要根据一级装配件的类型(例如T型梁、K板、卷制管)再分别分析并获取该类型零件从一级装配、板片预制、分段预制和分段总装全过程的状态信息。再接着对于没有一级装配阶段的零件而直接进入分段预制阶段的零件的状态进行分析,最后对那些总装散装零件的状态进行分析。

2.4 一级装配件零件的状态分析算法

该算法由一个函数实现,该函数所包含的参数如下:零件号,一级装配构件号,板片预制构件号,分段预制构件号。该类型的零件大多数在一级装配阶段就完成了预制工作,但存在少量零件在板片预制阶段安装,少量零件直接在分段预制阶段安装,也存在极少量直接在总装阶段安装。因此该算法首先需判断该零件是否在一级装配阶段完成了预制,如果该零件在一级装配阶段完成装配,那么读取该一级装配件预制完成日期作为该零件的预制完成日期。接着再判断该一级装配件是否在板片预制阶段完成了装配,如果该板片完成了装配,那么读取该板片预制完成日期作为该零件的板片预制完成日期。再接着判断板片构件是否完成在分段装配阶段完成了装配,如果该分段完成了装配,那么读取该分段装配完成日期作为该零件的分段装配完成日期。最后判断分段构件是否完成了总装工作,如果该分段完成了总装,那么读取该分段总装完成日期作为该零件的总装完成日期。对于其他类型的零件的整个建造状态的分析过程类似,不在累述。

3 Piece Mark报表的实际应用效果

该解决方案适用于数据源文件是Excel进度文件,该Excel文件来自于某一个项目管理系统(例PCMS系统)。通过xlsx表提取数据技术、数据字典数据结构、零件状态分析算法,使用VSTO开发平台开发Excel小程序,开发周期短、开发环境和调试环境好、Excel小程序用户体验好等优势。

3.1 SPF报表生成速度

PCMS系统使用Smart Plant Foundation,通过SPFAdhocReport类型生成Excel进度文件,当项目后期这个报表的总行数达到23万行这个级别,服务器端生成Excel报表文件的时间约为4分钟,从服务器下载到本地的时间约为15秒。

3.2 Piece Mark报表生成速度

通过xlsx表提取数据技术、数据字典数据结构和零件状态分析算法,在项目后期零件数达到6万行这个级别时,经过测试从读取Excel文件(文件数据行总数约23万行)到最终生成Piece Mark报表共计需要约4分钟(CPU Intel Core i7 2.2MHz 6核)。

3.3 Piece Mark表的后续应用

Piece Mark报表有大量的应用领域和较高的价值。一方面可用于进度计算,结构专业的进度计算一般会是使用重量作为工作量统计的单位,该Piece Mark报表可以作为进度计算的数据源,编制Excel进度计算表,或者汇总后反馈给P6也是可以的。另一方面,费用结算时一般会考虑项目进度和完成工作量,该表可以作为QS工作量结算参考,如果与QS团队完成每个零件QS结算重量的校核后可以直接用于QS费用结算。最后,依据该Piece Mark报表还可以生成各种各样基于时间轴的图表,来反映项目下料工作、预制工作的实际进展曲线,分析出项目的高峰期和低谷期,为未来类似项目的人力计划编制提供依据。

4 结语

结合FPSO船体建造项目的需求,依据Smart Plant Foundation软件生成的Excel报表,使用VSTO工具开发满足业主要求的Piece Mark报表是一条非常灵活和高效的报表开发解决方案。通过xlsx表提取数据技术、数据字典数据结构、零件状态分析算法,使用汇VSTO开发平台完成开发,用户使用Excel进行工作。显然的优势如下:Visual Studio开发和调试环境好、程序分发和部署非常绿色和方便、Excel小程序用户体验好。由于该类型的报表的使用频率并不会太高(一般情况下一周两次),程序的运行速度前期很快,随着项目数据的增大会慢慢变慢,到项目组的最后生成报表的速度也是可以接受的。

猜你喜欢

总装数据表字典
开心字典
开心字典
质量检验在新一代运载火箭总装总测质量控制中的作用
航天器回收着陆系统总装多余物预防与控制
中国航天发展史(二)
集装箱正面起重机总装技术
湖北省新冠肺炎疫情数据表
基于列控工程数据表建立线路拓扑关系的研究
我是小字典
正版字典