姜秀斌,沈彬,吳濤,劉鎮(zhèn)東
(海洋石油工程股份有限公司,青島266520)
隨著近幾年海洋石油工程股份有限公司走向全球、走向深海的步伐,海工青島公司作為建造板塊的核心公司也迎來(lái)了國(guó)內(nèi)和國(guó)外浮式生成和儲(chǔ)油裝置建造的一個(gè)小高峰,同時(shí)也加強(qiáng)與煙臺(tái)萊佛士船業(yè)有限公司為代表船廠之間的合作。在船體建造過程中,國(guó)外業(yè)主會(huì)要求每周提交每一個(gè)零件的建造狀態(tài),國(guó)外業(yè)主稱之為Piece Mark狀態(tài)表,包括下料、零件預(yù)制、板片預(yù)制、分段預(yù)制、涂裝和搭載狀態(tài),并以此為依據(jù)進(jìn)行建造進(jìn)度的計(jì)算,以及費(fèi)用QS結(jié)算等業(yè)務(wù)。
由于每一個(gè)項(xiàng)目業(yè)主對(duì)Piece Mark報(bào)表的內(nèi)容和狀態(tài)清單等都可能提出一些特定的要求,因此需要基于項(xiàng)目的特定需求并使用該解決方案和軟件算法為每一個(gè)項(xiàng)目的Piece Mark表開發(fā)特定的程序。
PCMS系統(tǒng)是Project Construction Management Sys?tem的縮寫,海工青島公司與鷹圖公司合作開發(fā)的適用于海工青島公司的建造管理系統(tǒng)。該系統(tǒng)的一個(gè)優(yōu)點(diǎn)是可以根據(jù)項(xiàng)目的需求實(shí)現(xiàn)從加工設(shè)計(jì)數(shù)據(jù)、工單類型、工作步驟、報(bào)表等環(huán)節(jié)的自定義配置,因此是非常靈活的一個(gè)系統(tǒng)。
加工設(shè)計(jì)數(shù)據(jù)模板分為下料方案模板類和裝配方案模板類。其中分段下料方案模板包括:分段板材下料方案模板文件和分段型材下料方案模板文件。下料方案模板文件必須包含的信息包括:下料指令號(hào)(即圖紙?zhí)枺?、套料零件清單、下料凈總重量等;其中裝配模板文件包括:一級(jí)裝配件(包括卷制管、T型梁、K板等)裝配模板文件、板架裝配模板文件和分段裝配模板文件。裝配模板文件必須包含的信息包括:裝配圖紙?zhí)?、零件ID、子構(gòu)件ID、零件數(shù)量、零件重量和父構(gòu)件ID等。
工單的類型需要與業(yè)主、項(xiàng)目組和生產(chǎn)車間相關(guān)人員(包括生產(chǎn)負(fù)責(zé)人和計(jì)劃工程師等)一起討論后確定;每一類工單中包含什么Component(工作對(duì)象),它應(yīng)該分成哪幾個(gè)Work Step(工作步驟)也需要一起討論后確定。這些討論是非常有必要的,因?yàn)楣ぷ鲗?duì)象和工作步驟直接和項(xiàng)目的四級(jí)計(jì)劃、權(quán)重分配策略等相關(guān)。
從SPF2016R1版本開始,Smart Plant Foundation軟件提供了Report Administration模塊,通過該模塊可以非常方便并且靈活地配置報(bào)表,報(bào)表導(dǎo)出格式選擇xlsx文件格式。在本項(xiàng)目中設(shè)計(jì)了兩個(gè)報(bào)表分別是下料進(jìn)度報(bào)表和裝配進(jìn)度報(bào)表,由于xlsx格式數(shù)據(jù)文件的最大行數(shù)約為104萬(wàn)行,因此合理地分成兩個(gè)報(bào)表有利于保證在項(xiàng)目后期數(shù)據(jù)報(bào)表的總行數(shù)不會(huì)突破104萬(wàn)行限制。
本文采用的編程技術(shù)是VSTO技術(shù)(Visual Studio Tool for Office),編程語(yǔ)言采用Visual Basic.Net,首選通過SPF生成xlsx報(bào)表并下載到本地,再通過xlsx數(shù)據(jù)表提取數(shù)據(jù)技術(shù),并采用數(shù)據(jù)字典數(shù)據(jù)結(jié)構(gòu),最后使用零件狀態(tài)分析算法生成業(yè)主需要的Piece Mark報(bào)表。
將xlsx文件作為數(shù)據(jù)庫(kù),可以采用如下數(shù)據(jù)庫(kù)連接關(guān)鍵字信息: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文件擴(kuò)展名為.xlsx;當(dāng)IMEX=1時(shí)為“匯入模式”,這個(gè)模式開啟的Excel檔案只能用來(lái)做“讀取”用途;當(dāng)HDR=Yes,這代表第一行是標(biāo)題,不作為數(shù)據(jù)使用。
如果整個(gè)xlsx文件作為一個(gè)數(shù)據(jù)庫(kù),那么xlsx文件中的一個(gè)worksheet就作為一個(gè)數(shù)據(jù)表,因此讀取數(shù)據(jù)可以使用select語(yǔ)句,select語(yǔ)句的語(yǔ)法采用Jet SQL的語(yǔ)法,唯一的區(qū)別是數(shù)據(jù)庫(kù)表名稱的寫法為:FROM["+WorkSheet_CuttingDamp_Data_SheetName+"$]T1,即用‘[SheetName$]’表示數(shù)據(jù)庫(kù)表名,T1作為表的別名。那么獲取下料進(jìn)度狀態(tài)數(shù)據(jù)完整的select語(yǔ)句范例如下所示: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語(yǔ)句的應(yīng)用,可以快速地獲得想要得到的數(shù)據(jù)集合,并可以較為快速地存儲(chǔ)這些數(shù)據(jù)到DataTable對(duì)象中。
針對(duì)裝配階段的完成情況數(shù)據(jù)表,可以根據(jù)零件和構(gòu)件在不同階段完成裝配工作的情況的分類,對(duì)應(yīng)生成如下10種數(shù)據(jù)表:1)零件在一級(jí)裝配階段的完成情況數(shù)據(jù)表;2)零件在二級(jí)預(yù)制階段的完成情況數(shù)據(jù)表;3)零件在三級(jí)預(yù)制階段的完成情況數(shù)據(jù)表;4)零件在總裝搭載階段的完成情況數(shù)據(jù)表;5)一級(jí)結(jié)構(gòu)物在二級(jí)預(yù)制階段的完成情況數(shù)據(jù)表;6)一級(jí)結(jié)構(gòu)物在三級(jí)預(yù)制階段的完成情況數(shù)據(jù)表;7)一級(jí)結(jié)構(gòu)物在總裝搭載階段的完成情況數(shù)據(jù)表;8)二級(jí)結(jié)構(gòu)物在三級(jí)預(yù)制階段的完成情況數(shù)據(jù)表;9)二級(jí)結(jié)構(gòu)物在總裝搭載階段的完成情況數(shù)據(jù)表;10)三級(jí)結(jié)構(gòu)物在總裝搭載階段的完成情況數(shù)據(jù)表。也同樣將這10張數(shù)據(jù)表存儲(chǔ)到DataTable對(duì)象中。
如果通過使用For循環(huán)遍歷DataTable對(duì)象中的每一行數(shù)據(jù),去尋找指定零件ID的預(yù)制狀態(tài),一定會(huì)出現(xiàn)循環(huán)嵌套的情況。由于數(shù)據(jù)表的行數(shù)是幾萬(wàn)行這樣一個(gè)數(shù)量級(jí),因此For循環(huán)的執(zhí)行效率一定會(huì)非常低。因此本文考慮使用字典數(shù)據(jù)結(jié)構(gòu),將For循環(huán)嵌套改進(jìn)為兩個(gè)獨(dú)立的非嵌套的For循環(huán)。第一個(gè)For循環(huán)用于生成數(shù)據(jù)字典,數(shù)據(jù)字典對(duì)象的定義如下所示:Dim Dict_ClassPart_1stFabr_Finished As Dictionary(Of String,List(Of String)),該字典用于存儲(chǔ)零件在一級(jí)裝配階段完成情況,字典的Key為零件ID,字典的Value為一個(gè)List對(duì)象,List對(duì)象的清單為該零件在預(yù)制階段各個(gè)工作步驟的完成日期。第二個(gè)For循環(huán)用于循環(huán)所有零件ID,根據(jù)零件ID以及指定的字典直接獲得它的各個(gè)階段的施工步驟完成日期。采用數(shù)據(jù)字典和兩個(gè)獨(dú)立的For循環(huán)的方法代替兩層for循環(huán)嵌套的方法,解決了算法效率太慢的問題。
零件的Piece Mark報(bào)表中分成兩個(gè)部分,第一部分是零件的加工設(shè)計(jì)基礎(chǔ)數(shù)據(jù),包括零件號(hào)、圖紙?zhí)枴⒎侄翁?hào)、零件數(shù)量、零件重量等。第二部分是零件的各生產(chǎn)階段的狀態(tài)信息,包括下料階段各狀態(tài)點(diǎn)完成日期、一級(jí)裝配階段各狀態(tài)點(diǎn)完成日期、分段預(yù)制階段各狀態(tài)點(diǎn)完成日期、分段總裝階段各狀態(tài)點(diǎn)完成日期。因此零件的狀態(tài)分析算法應(yīng)該包括對(duì)零件的各個(gè)階段的狀態(tài)分析過程。
首先下料狀態(tài)日期直接從存儲(chǔ)下料狀態(tài)信息的字典中取值即可,沒有層次關(guān)系直接對(duì)應(yīng)即可。接著分析一級(jí)裝配件的預(yù)制狀態(tài)信息,由于一級(jí)裝配件是由零件組成的構(gòu)建,因此需要根據(jù)一級(jí)裝配件的類型(例如T型梁、K板、卷制管)再分別分析并獲取該類型零件從一級(jí)裝配、板片預(yù)制、分段預(yù)制和分段總裝全過程的狀態(tài)信息。再接著對(duì)于沒有一級(jí)裝配階段的零件而直接進(jìn)入分段預(yù)制階段的零件的狀態(tài)進(jìn)行分析,最后對(duì)那些總裝散裝零件的狀態(tài)進(jìn)行分析。
該算法由一個(gè)函數(shù)實(shí)現(xiàn),該函數(shù)所包含的參數(shù)如下:零件號(hào),一級(jí)裝配構(gòu)件號(hào),板片預(yù)制構(gòu)件號(hào),分段預(yù)制構(gòu)件號(hào)。該類型的零件大多數(shù)在一級(jí)裝配階段就完成了預(yù)制工作,但存在少量零件在板片預(yù)制階段安裝,少量零件直接在分段預(yù)制階段安裝,也存在極少量直接在總裝階段安裝。因此該算法首先需判斷該零件是否在一級(jí)裝配階段完成了預(yù)制,如果該零件在一級(jí)裝配階段完成裝配,那么讀取該一級(jí)裝配件預(yù)制完成日期作為該零件的預(yù)制完成日期。接著再判斷該一級(jí)裝配件是否在板片預(yù)制階段完成了裝配,如果該板片完成了裝配,那么讀取該板片預(yù)制完成日期作為該零件的板片預(yù)制完成日期。再接著判斷板片構(gòu)件是否完成在分段裝配階段完成了裝配,如果該分段完成了裝配,那么讀取該分段裝配完成日期作為該零件的分段裝配完成日期。最后判斷分段構(gòu)件是否完成了總裝工作,如果該分段完成了總裝,那么讀取該分段總裝完成日期作為該零件的總裝完成日期。對(duì)于其他類型的零件的整個(gè)建造狀態(tài)的分析過程類似,不在累述。
該解決方案適用于數(shù)據(jù)源文件是Excel進(jìn)度文件,該Excel文件來(lái)自于某一個(gè)項(xiàng)目管理系統(tǒng)(例PCMS系統(tǒng))。通過xlsx表提取數(shù)據(jù)技術(shù)、數(shù)據(jù)字典數(shù)據(jù)結(jié)構(gòu)、零件狀態(tài)分析算法,使用VSTO開發(fā)平臺(tái)開發(fā)Excel小程序,開發(fā)周期短、開發(fā)環(huán)境和調(diào)試環(huán)境好、Excel小程序用戶體驗(yàn)好等優(yōu)勢(shì)。
PCMS系統(tǒng)使用Smart Plant Foundation,通過SPFAdhocReport類型生成Excel進(jìn)度文件,當(dāng)項(xiàng)目后期這個(gè)報(bào)表的總行數(shù)達(dá)到23萬(wàn)行這個(gè)級(jí)別,服務(wù)器端生成Excel報(bào)表文件的時(shí)間約為4分鐘,從服務(wù)器下載到本地的時(shí)間約為15秒。
通過xlsx表提取數(shù)據(jù)技術(shù)、數(shù)據(jù)字典數(shù)據(jù)結(jié)構(gòu)和零件狀態(tài)分析算法,在項(xiàng)目后期零件數(shù)達(dá)到6萬(wàn)行這個(gè)級(jí)別時(shí),經(jīng)過測(cè)試從讀取Excel文件(文件數(shù)據(jù)行總數(shù)約23萬(wàn)行)到最終生成Piece Mark報(bào)表共計(jì)需要約4分鐘(CPU Intel Core i7 2.2MHz 6核)。
Piece Mark報(bào)表有大量的應(yīng)用領(lǐng)域和較高的價(jià)值。一方面可用于進(jìn)度計(jì)算,結(jié)構(gòu)專業(yè)的進(jìn)度計(jì)算一般會(huì)是使用重量作為工作量統(tǒng)計(jì)的單位,該P(yáng)iece Mark報(bào)表可以作為進(jìn)度計(jì)算的數(shù)據(jù)源,編制Excel進(jìn)度計(jì)算表,或者匯總后反饋給P6也是可以的。另一方面,費(fèi)用結(jié)算時(shí)一般會(huì)考慮項(xiàng)目進(jìn)度和完成工作量,該表可以作為QS工作量結(jié)算參考,如果與QS團(tuán)隊(duì)完成每個(gè)零件QS結(jié)算重量的校核后可以直接用于QS費(fèi)用結(jié)算。最后,依據(jù)該P(yáng)iece Mark報(bào)表還可以生成各種各樣基于時(shí)間軸的圖表,來(lái)反映項(xiàng)目下料工作、預(yù)制工作的實(shí)際進(jìn)展曲線,分析出項(xiàng)目的高峰期和低谷期,為未來(lái)類似項(xiàng)目的人力計(jì)劃編制提供依據(jù)。
結(jié)合FPSO船體建造項(xiàng)目的需求,依據(jù)Smart Plant Foundation軟件生成的Excel報(bào)表,使用VSTO工具開發(fā)滿足業(yè)主要求的Piece Mark報(bào)表是一條非常靈活和高效的報(bào)表開發(fā)解決方案。通過xlsx表提取數(shù)據(jù)技術(shù)、數(shù)據(jù)字典數(shù)據(jù)結(jié)構(gòu)、零件狀態(tài)分析算法,使用匯VSTO開發(fā)平臺(tái)完成開發(fā),用戶使用Excel進(jìn)行工作。顯然的優(yōu)勢(shì)如下:Visual Studio開發(fā)和調(diào)試環(huán)境好、程序分發(fā)和部署非常綠色和方便、Excel小程序用戶體驗(yàn)好。由于該類型的報(bào)表的使用頻率并不會(huì)太高(一般情況下一周兩次),程序的運(yùn)行速度前期很快,隨著項(xiàng)目數(shù)據(jù)的增大會(huì)慢慢變慢,到項(xiàng)目組的最后生成報(bào)表的速度也是可以接受的。