周 彬, 吳 優(yōu)
(中船澄西船舶修造有限公司, 江蘇 江陰 214433)
船舶產(chǎn)品設計(Ship Product Design, SPD)軟件是能滿足船體結構、機裝、電裝、居裝和甲裝等專業(yè)設計的三維全數(shù)字化產(chǎn)品模型軟件平臺。隨著SPD應用的不斷深入,用戶對SPD的開放性提出了更高的要求,因此SPD V4.0新增數(shù)據(jù)查詢二次開發(fā)接口,使用戶可在獲取數(shù)據(jù)后根據(jù)實際需要對數(shù)據(jù)進行篩選、排序、統(tǒng)計并輸出數(shù)據(jù)報表等,大大提升用戶與SPD間的交互能力。由于SPD已在船廠長期使用,船廠的物量及管理數(shù)據(jù)結構已趨于穩(wěn)定,與之配套的軟件也已形成,如果更換船舶設計軟件,會對原有的管理造成沖擊,船廠基本不會愿意更換。而且,幾乎沒有SPD二次開發(fā)的交流平臺,開發(fā)人員無法方便地獲取資料,這也會對SPD獲取更多用戶造成影響。
中船澄西船舶修造有限公司現(xiàn)行船舶設計軟件為SPD V4.0,在載重量82 000 t船的生產(chǎn)設計中,利用C#語言對SPD進行軟件的二次開發(fā),主要為突破生產(chǎn)設計瓶頸,提高設計人員效率,同時獲取實際需要的數(shù)據(jù)。
SPD V4.0提供SpdCustomization.dll和SpdArxCustomization.dll等2個DLL文件作為數(shù)據(jù)查詢二次開發(fā)接口,提供基于模型和基于產(chǎn)品數(shù)據(jù)庫的2種數(shù)據(jù)提取方式。2種提取方式的特點有:模型數(shù)據(jù)完整,提取效率較低;產(chǎn)品數(shù)據(jù)庫的數(shù)據(jù)不完整,提取效率較高。用戶可根據(jù)不同需求選擇提取方式。SPD軟件的管子模型數(shù)據(jù)提取流程如圖1所示(產(chǎn)品數(shù)據(jù)結構樹和其他模型數(shù)據(jù)均類似)。
圖1 管子模型數(shù)據(jù)提取流程
源代碼如下:
Project m_proj = new Project();
m_proj.Open(string projectname);
ModelFile mdf = m_proj.OpenModelFile
(string modelname,SpecialityIdx.Pipe) ;
For (mdf.RewindRec(); mdf.GetRecState (out rectype, out recnum) == 0; mdf.NextRec());
MddRec rec = mdf.GetMddRec(recnum) ;
其他主要數(shù)據(jù)接口如下:
(1) SpdtRecord類:數(shù)據(jù)表基類,主要存儲SQL數(shù)據(jù)庫數(shù)據(jù);
(2) Component類:實體部件記錄基類,主要存儲管子部件、實體部件和參數(shù)化部件;
(3) PpdRec類:原理記錄基類,主要存儲管子原理和電氣原理數(shù)據(jù)。
部件庫是SPD設計系統(tǒng)中管子、電氣、舾裝專業(yè)設計的基礎,沒有部件庫,設計師無法在SPD設計系統(tǒng)實現(xiàn)快速建模。SPD部件分為參數(shù)化部件、實體部件和管子部件。SPD部件提供的接口有基類和拓展類,其中基類為空體部件記錄基類(Component),擴展類分別為參數(shù)化部件(ParaComponent)、實體部件(PartComponent)和管子部件(PipeComponent)。
SPD參數(shù)化建模系統(tǒng)支持用戶自定義計算、報表生成和模型瀏覽,為用戶提供良好的設計模式、數(shù)據(jù)瀏覽和管理方式。參數(shù)化部件按專業(yè)分為管子、電氣、舾裝和通用,按用途分為基礎型材和組合部件,按標準又分為標準件和非標件。對復雜部件物量的抽取,原SPD接口需要在每個部件中單獨計算并定義物量,才能實現(xiàn)物量輸出。通過二次開發(fā)參數(shù)化部件數(shù)據(jù)查詢工具,實現(xiàn)對參數(shù)化部件建模準確性的檢查,完成參數(shù)化部件建模數(shù)據(jù)的提取程序。完善后的接口可以根據(jù)底層基礎型材定義的物量信息實現(xiàn)復雜部件物量信息的完整提取,復雜部件無需再單獨計算和定義物量,提高了參數(shù)化部件的設計效率。SPD參數(shù)化部件可以用其他部件組合為復雜的部件,參數(shù)化部件物量提取流程如圖2所示。
圖2 參數(shù)化部件物量提取流程圖
主要源代碼如下:
List
MddSstru recsstru = (MddSstru)rec;
ParaComponent paracomponent = new ParaComponent(recsstru.ParaCompNum, recsstru.ParaValues);
listpara.Add(paracomponent);
組合件判斷源代碼如下:
if (listpara[i].RefParaComps[j].ParaNum < 9000)
{
listpara.Add(listpara[i].RefParaComps[j]);
}
通過ParaComponent屬性輸出物量信息如下:
(1) SubSpecs:組件規(guī)格描述($MSPEC),如:型材規(guī)格;
(2) SubSpecLengths:組件規(guī)格長度($LENS),如:型材長度、電氣基座的螺栓個數(shù);
(3) SubSpecNums:組件數(shù)量($NUMS),如:型材數(shù)量、電氣導架的螺栓個數(shù);
(4) SubWeights:組件基準質量($WETS)。
本文通過SubSpecs判斷部件是否為組合件,參數(shù)化部件組合件無需定義和計算物量信息,原參數(shù)化部件的物量數(shù)據(jù)抽取不受影響,提高了參數(shù)化部件基礎庫的建模效率,降低了參數(shù)化部件基礎庫的維護難度。
對管子專業(yè)的實體部件進行優(yōu)化。管子專業(yè)物資種類多,標準件多,管子專業(yè)的實體部件如果處理不好,后期會對物資采購需求產(chǎn)生較大影響。物資編碼是物資管理的基礎,每個企業(yè)均有自己的物資編碼體系,由于各個企業(yè)的物資編碼體系差異性較大,SPD軟件無法為每個企業(yè)建立完善的物資編碼系統(tǒng)。通過對SPD數(shù)據(jù)的深入了解,開發(fā)了物資編碼系統(tǒng)。該系統(tǒng)采用的是基礎數(shù)據(jù)配置,實現(xiàn)全自動復雜結構編碼。以管子為例,介紹物資編碼系統(tǒng)的結構和原理,管子編碼結構如圖3所示。系統(tǒng)設計原理為提取每個結構信息單獨的編碼,通過數(shù)據(jù)庫中的組合規(guī)則將單獨的編碼組合成完整的物資編碼,如圖4所示。
圖3 管子編碼結構
圖4 自動編碼設計原理
SPD的原理定義是其短板,定義效率不高。SPD原理提供的接口為原理記基類(PpdRec)和擴展類,擴展類包括閥附件原理(PpdValve)、管路原理(PpdPipeline)和設備原理(PpdDevice)等。主要對管路原理定義進行優(yōu)化,實現(xiàn)管路原理以詳細設計的DWG原理圖直接輸入到SPD系統(tǒng)。其主要原理為:定義各系統(tǒng)基礎信息,如法蘭、處理、壓力等信息,然后抓取詳細設計的DWG原理圖的管路信息(管路號、管子規(guī)格、管子材質、管子等級),在定義每條原理數(shù)據(jù)的過程中自動選取法蘭、處理和壓力等信息,最終實現(xiàn)管路原理自動定義功能。自動定義設計原理如圖5所示。
圖5 自動定義設計原理
主要源代碼如下:
PrincipleFile principlefile = m_proj.GetPipePpdFile();
PpdPipeline ppdpipeline = new PpdPipeline();
// ppdpipeline屬性賦值
ppdpipeline.SysCode= "管路名";
ppdpipeline.PipeCompCode="管子部件代號";
……
principlefile.WriteRec(ppdpipeline);
物量提取是建立在中船澄西船舶修造有限公司自主研發(fā)的綜合數(shù)據(jù)管理平臺和SPD二次開發(fā)基礎上的,可以實現(xiàn)將SPD模型數(shù)據(jù)無縫導入綜合數(shù)據(jù)管理平臺,然后通過該平臺對外發(fā)布數(shù)據(jù)。
SPD雖然提供了大量報表,但是報表中部分數(shù)據(jù)并不完整,無法滿足實際需求,因此對SPD模型數(shù)據(jù)進行準確的提取和重組是有必要的。管子制作托盤提取界面如圖6所示。通過該模塊提取的管子材料明細有材料來源信息、物資編碼信息和需要的備注信息。
圖6 管子制作托盤提取
主要源代碼如下:
if ((mdf = m_proj.OpenModelFile(modelname, SpecialityIdx.Pipe)) != null)//判斷模型是否為管子專業(yè)
{
for (mdf.RewindRec(); mdf.GetRecState(out rectype, out recnum) == 0; mdf.NextRec())//遍歷模型
{
if ((rec = mdf.GetMddRec(recnum)) != null)
{
recspool = (MddSpool)mdf.GetMddRec((uint)Math.Abs(SPD_Pipe.spoolrecno(rec)));//獲取零件
if (recspool != null && recspool.Pallet == Listview.SelectedItems[0].SubItems[0].Text && recspool.PalletOrderNumber < 3000)//判斷零件托盤
{
spoolname = recspool.SpoolName;
ArrayList pipedetail = new ArrayList();//管子材料
pipedetail = SPD_Pipe.PipeDetail(rec, mdf, m_proj);//讀取管子部件詳細信息(自己寫的接口)
}
}
}
}
物量需求是指在設計端建立出庫和入庫數(shù)據(jù)庫,將設計下發(fā)的采購需求作為入庫數(shù)據(jù),模型提取的數(shù)據(jù)作為出庫數(shù)據(jù),通過對出入庫數(shù)據(jù)的對比分析,動態(tài)顯示物量需求,指導設計人員進行材料采購。目前完成了管子專業(yè)模塊的開發(fā),主要功能有基礎物資庫、材料請購、材料比對、材料查詢和材料請購單。物量需求模塊程序設計原理如圖7所示。
圖7 物量需求設計原理
基礎物資庫主要作用為將模型數(shù)據(jù)與采購數(shù)據(jù)對照,形成標準的采購數(shù)據(jù),同時也作為材料比對的標準數(shù)據(jù)。程序輸入端為托盤、基礎物資庫和采購單。托盤由模型直接輸出,基礎物資庫需要系統(tǒng)管理人員進行維護,采購單則由缺料數(shù)據(jù)直接輸出,設計師只允許進行數(shù)量調整,修改備注等操作。該系統(tǒng)保證了采購需求物量信息的標準化。
通過該系統(tǒng),設計師能在提交模型數(shù)據(jù)后快速生成物料需求,過程中可以直觀地看到訂貨數(shù)據(jù)和模型數(shù)據(jù),通過對比分析,指導后續(xù)項目訂貨,其他專業(yè)物量需求可用類似的方法實現(xiàn)。
全套料技術指實現(xiàn)船體以外其他專業(yè)板材類零件圖形數(shù)據(jù)的提取。該技術是建立在參數(shù)化建模基礎上的,對參數(shù)化建模和手工建模過程作如下約定:
(1) 在建模過程中除了板材類零件可以使用軟件自帶的拉伸體功能,其余均通過參數(shù)化部件建模。
(2) 在參數(shù)化部件的組合部件中型材類均從基本型材中引用,只有板材可以引用基礎實體部件。
通過約定,可以實現(xiàn)自動過濾,將舾裝件中需要套料的板材過濾出來,最終實現(xiàn)舾裝件板材零件的全套料。
實現(xiàn)過程源代碼如下:
MddSstru recsstru = (MddSstru)rec; //獲取鐵舾件零件
HdEntStretchPrism hdentstretchprism = (Hd
EntStretchPrism)recsstru.Ents[0];//獲取實體信息
hdentstretchprism.BottomSpline //獲取實體圖形信息,拉伸體底面邊界樣條
底面邊界樣條數(shù)據(jù)解析如下:
xyz
x1y1z1
……
xnynzn
其中:yn、zn為樣條節(jié)點的坐標;xn為連接節(jié)點(yn-1,zn-1)和(yn,zn)組成的樣條片段的有向半徑, 當xn= 0時為直線段。程序通過獲取的邊界樣條自動輸出圖形文件,該圖形文件能在中船澄西船舶修造有限公司套料軟件中直接套料。
設計軟件二次開發(fā)是打通企業(yè)信息化建設孤島的關鍵所在,能夠使設計軟件更加貼合企業(yè)實際需求。船舶設計模型數(shù)據(jù)是船廠信息化的基石,理論物量、理論工時等均以模型數(shù)據(jù)為源頭,二次開發(fā)是從模型數(shù)據(jù)中獲得基礎數(shù)據(jù)的必由之路。通過對SPD軟件的二次開發(fā),可以將設計模型數(shù)據(jù)轉化為其他軟件需要的信息,建立企業(yè)統(tǒng)一的數(shù)據(jù)源,打通設計、生產(chǎn)和管理之間的信息孤島。隨著SPD軟件二次開發(fā)接口的不斷完善,船廠信息化建設要求將更能滿足。