羅海友
摘 ? ?要:AVEVA MARINE是一個(gè)功能強(qiáng)大的CAD設(shè)計(jì)平臺(tái),但各船廠的實(shí)際情況千差萬別,故幾乎每個(gè)船廠都要針對(duì)不同的項(xiàng)目進(jìn)行客戶化配置及二次開發(fā)。本文對(duì)我司的AVEVA MARINE軟件二次開發(fā)進(jìn)行了系統(tǒng)論述,并對(duì)二次開發(fā)實(shí)例《自動(dòng)生成零件明細(xì)表》進(jìn)行了詳細(xì)介紹,希望能夠起到拋磚引玉的效果,為有志于AVEVA MARINE軟件二次開發(fā)的同仁提供參考。
關(guān)鍵詞:AVEVA MARINE;軟件二次開發(fā);C#
中圖分類號(hào):U662.9 ??? ? ? ? ? ? ? ? ? ? ? ? ? ?文獻(xiàn)標(biāo)識(shí)碼:A
Redevelopment for AVEVA Marine
Luo Haiyou
( COSCO Shipping Heavy Industry (Guangdong) Co., Ltd., Dongguan 523146 )
Abstract: AVEVA Marine is an extremely powerful CAD design platform, but the actual situation of each shipyard is different. Almost every shipyard needs to carry out the customized configuration and redevelopment for different projects. This paper provides a systematic discussion of the redevelopment of AVEVA MARINE software, and the development example "automatic generation of parts list" was introduced in detail. It provides reference for people interested in redevelopment of AVEVA MARINE software.
Key words: AVEVA MARINE; Redevelopment ; C#
1 ? ? 前言
目前比較流行的3D船舶生產(chǎn)設(shè)計(jì)軟件,主要有:AUTO CAD ;滬東東欣;CATIA;AVEVA MARINE等。其中,AVEVA MARINE幾乎占據(jù)了國(guó)內(nèi)船舶生產(chǎn)設(shè)計(jì)軟件領(lǐng)域的半壁江山。
AVEVA公司在船舶和海洋工程、石油、天然氣、電力、造紙、制藥、化工等工業(yè)領(lǐng)域都能提供全生命周期解決方案服務(wù)。該公司總部位于英國(guó)劍橋,是國(guó)際知名的工程信息技術(shù)企業(yè),也是目前世界領(lǐng)先的工程信息技術(shù)企業(yè)之一。AVEVA Marine是AVEVA公司的一系列軟件產(chǎn)品之一,是用于設(shè)計(jì)、建造船舶和海洋工程項(xiàng)目的集成軟件。該軟件采用以對(duì)象為中心的技術(shù),提供一系列解決方案、加載項(xiàng)以及單機(jī)版應(yīng)用程序所構(gòu)成的產(chǎn)品組合,貫穿造船業(yè)務(wù)過程中的每個(gè)環(huán)節(jié)。
AVEVA Marine雖然是一個(gè)功能強(qiáng)大的CAD設(shè)計(jì)平臺(tái),但各船廠的實(shí)際情況千差萬別,故幾乎每個(gè)船廠都要針對(duì)不同的項(xiàng)目進(jìn)行客戶化配置及二次開發(fā)。鑒于AVEVA Marine是一款專業(yè)性極強(qiáng)的設(shè)計(jì)軟件,對(duì)該軟件進(jìn)行二次開發(fā)的門檻很高,既要精通編程語言,又要有豐富的設(shè)計(jì)經(jīng)驗(yàn)及相應(yīng)專業(yè)知識(shí),不然開發(fā)出來的東西可能和實(shí)際需求相差甚遠(yuǎn)。目前國(guó)內(nèi)有能力進(jìn)行二次開發(fā)的船廠不多,但需求卻很大,很多船廠都是直接向AVEVA或是第三方購(gòu)買開發(fā)服務(wù),成本很高。為了實(shí)現(xiàn)自主可控,降低成本,在各船廠建立二次開發(fā)部門培養(yǎng)自己的開發(fā)人才迫在眉睫。
2 ? ?AVEVA MARINE軟件二次開發(fā)平臺(tái)
2.1 ?開發(fā)工具
由于歷史原因,AVEVA MARINE軟件的大舾裝和船體優(yōu)先選擇的編程語言有所不同。其中:大舾裝優(yōu)先選擇PML;而船體則優(yōu)先選擇C#。PML無需編譯AM 即可直接讀取,C#則需要以Visual Studio 為載體進(jìn)行編寫及封裝。
Visual Studio是美國(guó)微軟公司開發(fā)的一個(gè)相對(duì)完整的開發(fā)工具集,它包括了整個(gè)軟件生命周期中所需的包括UML工具、代碼管控工具、集成開發(fā)環(huán)境等大部分工具,支持的所有平臺(tái)都能與用VS寫的目標(biāo)代碼完美匹配。由于使用習(xí)慣問題,確定選擇Visual Studio 2017版。
2.2 ? ?編程語言
PML 全稱Programamable Macro Language,是PDMS內(nèi)置的開發(fā)語言,已從開始的PML升級(jí)到了PML .Net版本。其功能強(qiáng)大,并且與PDMS無縫連接,還能簡(jiǎn)化用戶界面,在大舾裝開發(fā)方面具有一定的優(yōu)勢(shì)。
C#是一種新的、面向?qū)ο蟮木幊陶Z言。它可以幫助程序員快速地編寫各種基于Microsoft .NET平臺(tái)而開發(fā)的應(yīng)用程序,是構(gòu)建各類組件的理想之選。使用簡(jiǎn)單的C#語言結(jié)構(gòu),這些組件可以方便的轉(zhuǎn)化為XML 網(wǎng)絡(luò)服務(wù),從而通過Internet進(jìn)行調(diào)用。
AVEVA MARINE 的船體部分是以C#編寫為主,本文主要研究船體的二次開發(fā),所以選擇C#語言。
3 ? ?AVEVA MARINE軟件二次開發(fā)實(shí)例《自動(dòng)生成分段零件明細(xì)表》
一套完整的船體分段生產(chǎn)設(shè)計(jì)圖紙,包括:分段工作圖、板材切割圖、型材切割圖、板材加工圖、型材加工圖、板材清單、零件明細(xì)表,有些分段還包括小組立圖和預(yù)密性試驗(yàn)圖。其中,船體分段零件明細(xì)表包含了零件名、組立流向、板厚材質(zhì)、套料位置、型材規(guī)格、加工信息等幾乎所有的零件屬性信息,是一套必不可少的圖紙。
用AM軟件在出圖的最后階段,需要生成一個(gè)完整的零件明細(xì)表。AM本身可以生成一個(gè)零件明細(xì)表,但比較粗糙,很難滿足各船廠的個(gè)性化需求,因此很多船廠的零件表是通過外部開發(fā)在AM生成的零件表基礎(chǔ)上進(jìn)行數(shù)據(jù)再提取,并手動(dòng)填入所缺的信息后重新生成一個(gè)符合本廠要求的零件明細(xì)表。這種方式的弊端,是圖紙和模型不同步。由于分段模型圖紙修改是一種常態(tài),后期很容易出現(xiàn)零件明細(xì)表漏更新的情況,所以開發(fā)一個(gè)嵌入AM軟件直接提取模型數(shù)據(jù)的生成零件表的插件迫在眉睫。
3.1 ? 開發(fā)流程及整體框架
根據(jù)我司生產(chǎn)及施工需求,零件明細(xì)表需要提供如下信息:組立名、零件號(hào)、零件數(shù)量、組立流向、零件規(guī)格、材質(zhì)、套料圖名、零件重量。通過對(duì)比發(fā)現(xiàn),AM自帶的功能生成零件表缺少了組立流向及另存后的型材下料位置,所以無法直接從生成的零件表中提取所有需要的信息。為了簡(jiǎn)化流程,節(jié)省時(shí)間,決定從模型中直接提取。
軟件整體開發(fā)流程,見圖1。
3.2 ? 開發(fā)細(xì)則
3.2.1 需求調(diào)研
需求調(diào)研是軟件開發(fā)的基礎(chǔ),其目的是了解用戶想實(shí)現(xiàn)什么樣的功能,在這個(gè)基礎(chǔ)上進(jìn)行更深入的分析,實(shí)現(xiàn)用戶的需求。
3.2.2 軟件算法流程
軟件算法流程,如圖2所示。
3.2.3 設(shè)計(jì)軟件界面
(1)插件圖標(biāo)
為便于識(shí)別,采用零件明細(xì)表的英文名PARTLIST 的首字母“P”作為插件的圖標(biāo)。
(2)操作界面
結(jié)合零件明細(xì)表需要涵蓋的信息及AM模型中所包含的屬性信息,操作界面中需要提供船號(hào)、分段號(hào)的填寫框,以及是否為左右對(duì)稱分段的復(fù)選框。
AM模型完善后,可自動(dòng)生成型材下料草圖,其圖面和模型是互不關(guān)聯(lián)的。也就是說,即使生成了型材下料草圖,AM分段模型零件中也不包含零件明細(xì)表中所需要的型材下料草圖的位置信息,所以操作界面中需要提供一個(gè)可以使型材下料和分段模型關(guān)聯(lián)起來的按鈕。
船體分段中所有的零件都需要提供流向信息,因AM軟件在進(jìn)行粗建模時(shí)是沒有零件流向填入選項(xiàng)的,需要等模型校對(duì)完成開始正式繪制施工圖前,打開裝配計(jì)劃模塊按照分段的裝配流程進(jìn)行組立流程的設(shè)計(jì)和建模,并逐個(gè)填寫組立的流向信息;AM軟件的裝配計(jì)劃模塊在填寫組立流程的操作上有一個(gè)弊端,就是每次只能填寫一個(gè)小組立的流程信息,這樣不但耗時(shí)而且操作繁瑣。考慮到零件明細(xì)表需要提取所有零件的流向信息,在主界面中提供一個(gè)裝配計(jì)劃編輯器按鈕,通過點(diǎn)擊該按鈕,可以彈出批量編輯或添加組立流程信息的對(duì)話框。
船體的分段是根據(jù)場(chǎng)地及起吊能力來劃分的,不同船廠的起吊能力不同,劃分的船體分段大小及組立數(shù)量也不同。另外,有些分段(比如機(jī)艙分段)雖然不算大,但是結(jié)構(gòu)復(fù)雜,零件數(shù)量龐大,并且C#的dataGridView功能比較難實(shí)現(xiàn)分頁顯示,一個(gè)界面可能無法將零件顯示出來。考慮到插件的通用性問題,在界面中提供顯示零件總數(shù)量,以便核對(duì)。
《自動(dòng)生成零件明細(xì)表》程序?qū)崿F(xiàn)過程,就是一個(gè)從AM模型中提取零件屬性信息,通過排列組合,再調(diào)用EXCEL功能模塊,最后實(shí)現(xiàn)生成符合船廠要求的標(biāo)準(zhǔn)格式的《零件明細(xì)表》的過程;AM模型提供的零件屬性信息本身是有些雜亂無章的,并且有些客戶化信息也顯示不出來,為了便于檢查核對(duì),在操作界面中提供數(shù)據(jù)預(yù)覽按鈕及預(yù)覽窗口;此外,操作界面中還需提供清空列表和生成零件表這兩個(gè)必需的按鈕。
3.2.4 代碼編寫
(1)數(shù)據(jù)預(yù)覽功能實(shí)現(xiàn)
操作主界面設(shè)計(jì)好后,首先應(yīng)實(shí)現(xiàn)數(shù)據(jù)預(yù)覽功能,以方便核對(duì)所提取的模型零件數(shù)據(jù)正確與否。
數(shù)據(jù)預(yù)覽功能的整體思想,是通過設(shè)計(jì)人員輸入的船號(hào)、分段號(hào)、左右對(duì)稱信息定位數(shù)據(jù)所在的位置,并通過對(duì)話框列表顯示出來。
① 首先判斷船號(hào)和分段號(hào)是否為空,如果都不為空則開始執(zhí)行主程序,否則如果有一個(gè)或者兩個(gè)為空則彈出報(bào)錯(cuò)信息,提示未填船號(hào)或分段號(hào);
② 通過對(duì)模型零件信息分析發(fā)現(xiàn),板材和型材所存儲(chǔ)的目錄有所差異,并且各自的屬性中都無法提供零件表所需要的全部信息;對(duì)比模型數(shù)據(jù)庫及零件數(shù)據(jù)庫后,發(fā)現(xiàn)零件數(shù)據(jù)中的屬性信息比模型數(shù)據(jù)庫中的屬性信息全面,于是決定從零件數(shù)據(jù)庫中的零件提取信息,并通過寫入用戶自定義屬性的方式把缺失的信息補(bǔ)全;
③ 要提取軟件的相關(guān)信息,首先要找到該軟件的接口程序-API。API的英文全稱Application Programming Interface,意思是應(yīng)用程序編程接口。 AM軟件提供了較為完整的API程序:先找到AM提供的過濾器TypeFilter,通過分段號(hào)信息篩選出本分段的板材及型材零件,歸入到一維數(shù)組中,并通過C#的foreach函數(shù)遍歷整個(gè)數(shù)組,在dataGridView中列表顯示出來。至此,該程序的數(shù)據(jù)預(yù)覽功能已初步實(shí)現(xiàn),但信息還不完整;
④ 通過零件數(shù)據(jù)庫中的零件屬性,利用AM提供的API程序可以提取到組立名、零件號(hào)、零件數(shù)量、零件規(guī)格、材質(zhì)、重量和板材套料位置,但缺失了零件流向和型材的套料位置。
(2)型材套料位置功能實(shí)現(xiàn)
AM模型完善后,可自動(dòng)生成型材下料草圖,但圖面和模型是互不關(guān)聯(lián)的,將圖紙另存后圖中的型材信息和模型就完全脫鉤了,所以通過寫入型材套料位置按鈕實(shí)現(xiàn)將圖紙中的零件信息寫到模型中,并在數(shù)據(jù)預(yù)覽時(shí)顯示出來;
寫入型材套料位置實(shí)現(xiàn)的基本原理,是通過定位圖紙中圖框的坐標(biāo)找到型材的零件名,然后再和零件數(shù)據(jù)庫中的零件名進(jìn)行匹配,匹配成功后將圖紙名字寫入零件屬性中。
(3)裝配計(jì)劃編輯器 功能實(shí)現(xiàn)
AM軟件的Hulldesign模塊中嵌入有一個(gè)assembly(裝配計(jì)劃)模塊。在模型校對(duì)完成后,需要根據(jù)分段實(shí)際情況,進(jìn)行組立流程的設(shè)計(jì)和建模,并逐個(gè)填寫組立的流向信息。
AM軟件的裝配計(jì)劃模塊,在填寫組立流程的操作上有一個(gè)弊端,就是每次只能填寫一個(gè)小組立的流程信息,而且操作流程較為復(fù)雜,如果分段的組立比較多的話,很容易遺漏或出錯(cuò)。裝配計(jì)劃編輯器開發(fā)的初衷,除了要將流向?qū)懭肓慵傩酝?,就是把所有的組立流向填寫信息都集成在一個(gè)窗口里,并且通過算法實(shí)現(xiàn)只填當(dāng)前組立流向,自動(dòng)生成下級(jí)組立流向。
該功能的基本原理,是將用戶指定的裝配樹列表顯示出來,并在API中找到相應(yīng)的接口程序,把用戶所填寫的數(shù)據(jù)寫入到AM模型中,寫入完成后再將數(shù)據(jù)集成到零件的屬性中,便于數(shù)據(jù)提取。
(4)生成零件表功能實(shí)現(xiàn)
數(shù)據(jù)預(yù)覽功能將所需要的數(shù)據(jù)全部提取,并在dataGridView中顯示出來后,接下來的工作是將數(shù)據(jù)按零件表模版整理出來,并輸出EXCEL格式文件。
該功能的基本原理是,通過引用Excel的組件Microsoft.Office.Interop.Excel實(shí)現(xiàn)在C#中打開Excel,并將dataGridView中的數(shù)據(jù)寫入Excel,再通過C#編寫方法進(jìn)行處理,最后輸出符合要求的Excel格式文件。
3.2.5 軟件調(diào)試與異常處理
(1)軟件調(diào)試
軟件調(diào)試是軟件開發(fā)過程必不可少的一個(gè)環(huán)節(jié)。對(duì)AM二次開發(fā)進(jìn)行調(diào)試,首先要將編譯后的程序放到AM的安裝目錄下,并將程序加載到指定模塊中,比如船體模塊需要通過HullDesignAddins來加載。
Visual Studio提供了編輯器和調(diào)試器進(jìn)行調(diào)試。在使用Visual Studio2017開發(fā)C#程序時(shí),編輯器既能為開發(fā)者提供代碼編寫的各種輔助提示及實(shí)時(shí)編譯等功能,還提供了源代碼快捷修改、重構(gòu)以及語法糾錯(cuò)等操作。通過Visual Studio2017,可以快速地發(fā)現(xiàn)各種語法錯(cuò)誤,并提示修改建議進(jìn)行快速修正。
當(dāng)代碼不能正常運(yùn)行時(shí),可以通過調(diào)試器定位錯(cuò)誤。常用的程序調(diào)試包括:增加斷點(diǎn);開始、中斷、停止程序的執(zhí)行;單行代碼執(zhí)行和使程序運(yùn)行到指定的位置。
(2)異常處理
在進(jìn)行軟件開發(fā)時(shí),既要考慮軟件后期是否能正常運(yùn)行,還要注意編寫代碼時(shí)可能出現(xiàn)的筆誤和各種不可預(yù)測(cè)的邏輯錯(cuò)誤。在C#提供的 .NET類庫中,有處理各種異常情形所設(shè)計(jì)的各種異常類,這些類包含了很多異常的相關(guān)信息。
3.2.6 軟件交付
軟件調(diào)試完成后,需交設(shè)計(jì)人員進(jìn)行實(shí)測(cè),修復(fù)完實(shí)測(cè)過程中暴露出來缺陷后才可以正式交付,同時(shí)提交軟件開發(fā)文檔。
4 ? ?結(jié)束語
對(duì)AVEVA MARINE軟件的二次開發(fā)是一個(gè)比較復(fù)雜的過程,特別是一些專業(yè)性較強(qiáng)的軟件,對(duì)開發(fā)人員要求更高,既要精通編程語言,又要有相應(yīng)專業(yè)知識(shí)。目前國(guó)內(nèi)許多大中型船廠和設(shè)計(jì)公司都在嘗試組建自己的軟件開發(fā)團(tuán)隊(duì),但真正有能力進(jìn)行二次開發(fā)的船廠尚不多。
本文對(duì)AVEVA MARINE 軟件二次開發(fā)進(jìn)行了系統(tǒng)論述,并通過AM二次開發(fā)的實(shí)例《自動(dòng)生成零件明細(xì)表》對(duì)整個(gè)開發(fā)過程進(jìn)行了詳細(xì)介紹,希望能夠起到拋磚引玉的效果,為有志于AVEVA MARINE軟件二次開發(fā)的同仁提供參考。
參考文獻(xiàn)
[1] 明日科技.C#項(xiàng)目開發(fā)實(shí)戰(zhàn)入門[M].吉林:吉林大學(xué)出版社, 2019.