馮建明,趙 銳
(上海中遠(yuǎn)船務(wù)工程有限公司,上海 200231)
在船舶結(jié)構(gòu)生產(chǎn)設(shè)計中,零件名標(biāo)注是非常重要的一環(huán)。由于船舶分段零件眾多,零件名標(biāo)注工作具有繁瑣、重復(fù)性強、工作量大等特點,往往會占用生產(chǎn)設(shè)計工程師大量的時間和精力[1]。由于每個人的出圖習(xí)慣不同,單憑手工操作難以保持圖面樣式統(tǒng)一,質(zhì)量也很難得到保證。若能采用程序?qū)崿F(xiàn)自動化,則可以在一定程度上降低出錯率,改善圖紙的出圖質(zhì)量。
目前,使用比較廣泛的船舶生產(chǎn)設(shè)計軟件主要包括TRIBON M3和AVEVA Marine(AM),AM作為TRIBON M3的升級版本,具有更加強大的功能和友好的界面。然而,目前AM軟件的二次開發(fā)功能仍需完善。以零件號標(biāo)注功能為例,雖然程序自帶相關(guān)功能,但標(biāo)注的信息樣式較簡單,操作較不便,返工率較高。因此,進(jìn)行AVEVA Marine結(jié)構(gòu)零件名標(biāo)注二次開發(fā)設(shè)計十分必要。
本文基于船舶主流設(shè)計軟件 AVEVA Marine(AM),使用 C#語言針對零件名的標(biāo)注進(jìn)行二次開發(fā)設(shè)計,以期降低出錯率,改善出圖質(zhì)量。
為方便用戶進(jìn)行自定義開發(fā),AM 提供了Vitesse、PML、.Net等二次開發(fā)接口和工具,并內(nèi)置了豐富的類庫[2-3]。本文采用.Net二次開發(fā)接口,基于C#語言編程,編譯環(huán)境為Visual Studio 2017。
零件名標(biāo)注要有一套統(tǒng)一的命名規(guī)則,這是后期程序讀取零件名信息的前提。在AM程序中,控制零件命名的環(huán)境變量有 2個,分別為TB_PARTNAME_CTRL和TB_PARTNAME_LEVEL,TB_PARTNAME_CTRL定義不同的命名組,AM至少需要FULL和SHORT這2個命名組,以便對應(yīng)零件的長名和短名。TB_PARTNAME_LEVEL定義同一零件在不同場合中命名組的應(yīng)用情況。本文二次開發(fā)使用FULL命名組,其名字一般由3部分組成,如BLOCK-PANEL-PART,其中,BLOCK代表分段名,PANEL代表組立名或板架名,PART代表零件名。
根據(jù)生產(chǎn)設(shè)計的出圖模式,零件名的標(biāo)注樣式見圖 1。零件名標(biāo)注樣式包括引出點、引出線和零件名擺放位置線。零件名擺放位置線只有水平和垂直2種方位,以位置線為界共有2部分信息:1)零件名,用戶在使用過程中可根據(jù)需要選擇是否包括分段名信息;2)零件的大小、材質(zhì)、規(guī)格等特征信息。
圖1 零件名標(biāo)注樣式
不同類型的零件需要標(biāo)注的特征信息不同:
1)型材和立柱需要標(biāo)注規(guī)格和材質(zhì)。
2)肘板要標(biāo)注大小、厚度、材質(zhì)、折邊尺寸。
3)板材、補板和墊板要標(biāo)注厚度和材質(zhì)。
4)面板要標(biāo)注規(guī)格、材質(zhì)和安裝形式。
程序的使用方法越簡單越好,導(dǎo)出剖視圖后,點擊命令,提示用戶選擇要標(biāo)注的零件,然后點擊擺放位置和擺放方向即可完成一個零件的標(biāo)注。為提高標(biāo)注效率,在一個零件標(biāo)注完成后會繼續(xù)進(jìn)入到下一個零件的標(biāo)注工作中,直到用戶選擇中止命令才結(jié)束流程。
模型選取步驟引導(dǎo)用戶點擊零件模型,并判斷用戶點擊的位置是否為有效模型。若是,則繼續(xù)進(jìn)行下一步驟;若不是,則提示用戶重新點擊,直到用戶點擊到有效模型或退出按鈕為止。模型選取步驟需要用到 Aveva.Marine.Geometry命名空間下的MarModel功能,包括 Name、PartId、PartType、ReflCode等屬性。其中,Name表示板架名稱,PartId表示零件的內(nèi)部代號,PartType表示零件類型,RefCode表示鏡像信息。若某板架左右對稱,則板架創(chuàng)建側(cè)的RefCode為0,鏡像側(cè)為1。
抽取信息步驟需要進(jìn)一步提取零件名標(biāo)注所需的有用信息并進(jìn)行加工,得到圖紙需要呈現(xiàn)出的數(shù)據(jù)。該步驟需要使用 Aveva.Marine.DataExtraction命名空間下的MarDex功能,在創(chuàng)建相應(yīng)實例后,就可將MarModel模型的屬性值作為輸入條件進(jìn)行數(shù)據(jù)抽取。MarDex功能的抽取流程如下:
1)構(gòu)建抽取命令語句,如 HULL.PAN(‘B01-GR0B’).BRA(1001).PART_ID.SHO為提取板架名為B01-GR0B,PartId為1001的肘板零件的命令語句。
2)運用Extract函數(shù)進(jìn)行抽取。若Extract的返回值為 0,則表示抽取成功;若返回其他數(shù)值,則表示抽取失敗。
3)運用NextResult函數(shù)獲得抽取到的數(shù)據(jù)類型。
4)根據(jù)NextResult函數(shù)的返回值,調(diào)用具體函數(shù),獲得抽取值,并賦值給相關(guān)的參數(shù)。
NextResult函數(shù)的返回值及需要調(diào)用的函數(shù)情況見表1。
表1 NextResult函數(shù)返回值及調(diào)用函數(shù)
本步驟主要抽取的屬性有零件名、板厚、規(guī)格和材質(zhì),對應(yīng)的抽取關(guān)鍵字為PART_ID、THI、DESI和QUA。提取完數(shù)據(jù)后,零件名屬性作為第一行信息,其他屬性為第二行信息,2行信息通過“/n”連接符組合為一個字符串并輸出,以便后續(xù)步驟使用。
本步驟主要用于輸出標(biāo)注信息及輔助線,以模型選取步驟中的點為起始點,引導(dǎo)用戶依次點擊 1個擺放點和1個方向點即可完成零件名的標(biāo)注。可通過比較方向點與擺放點在x和y兩個方向上坐標(biāo)值差值的絕對值來判斷零件擺放方向。若x坐標(biāo)差值的絕對值較大,則表示零件為水平擺放。文字分隔線的長度由上、下兩行文字的長度確定。若不想顯示分段名,僅需將首個“-”標(biāo)注信息隱去即可。本步驟主要用到Aveva.Marine.Drafting命名空間下的MarDrafting功能和Aveva.Marine.Geometry命名空間下的MarContourPlanar功能。MarDrafting功能用于輸出線段和文字等信息,MarContourPlanar功能用于構(gòu)建輔助線段。
AVEVA Marine結(jié)構(gòu)零件名標(biāo)注二次開發(fā)設(shè)計程序流程圖見圖2。
圖2 程序流程圖
要將二次開發(fā)程序應(yīng)用到AM中,需要設(shè)計1個可視化框架,并經(jīng)過編譯及程序配置等步驟。
通用程序框架是AM提供給程序員使用編程軟件開發(fā)各種插件的擴展框架,可理解為編程軟件程序和 AM 之間的連接紐帶。其基本功能由Aveva.AppliationFramework.dll和Aveva.Appliation Framework.Presentation.dll組件提供。
用戶在使用插件時,通常點擊菜單欄或工具條上的按鈕,在彈出的插件窗口中進(jìn)行后續(xù)操作。命令類是指繼承 Aveva.ApplicationFramework.Presentation命名空間的Command基類。命令類需要定義1個窗口成員以便為基類的Key屬性賦值,AM可通過賦值大小追蹤相應(yīng)命令類。此外,命令類還需要具有實現(xiàn)基類的Execute()方法,每點一下命令插件按鈕,就會執(zhí)行一次Execute()方法,并顯示窗口成員。
插件窗口類為插件的工作界面,用戶的最終操作要在插件窗口類中完成。插件窗口類是通過添加C#用戶控件來創(chuàng)建的。
IAddin是Aveva.AppliationFramework命名空間下的一個虛接口,在編寫插件時需要類繼承文件來實現(xiàn)此接口。在AM程序加載和啟動插件時,會啟動該插件IAddin接口的實現(xiàn)類,創(chuàng)建該類的實例并調(diào)用其運行入口。
在二次開發(fā)程序編譯通過后,項目的 DEBUG文件夾下會自動生成1個dll后綴名的動態(tài)鏈接庫文件,這是二次開發(fā)的執(zhí)行程序文件。要在AM的啟動時加載該程序,將插件加載文件與二次開發(fā)執(zhí)行程序關(guān)聯(lián)。配置文件的文件名格式為<模塊名>Addins.xml,其內(nèi)容如下所示:
每個之間的字符串均代表1個二次開發(fā)程序,其通常保持在默認(rèn)的路徑下。若插件沒有保存在默認(rèn)路徑下,則要在文件名前給出完整的存放路徑。
在二次開發(fā)程序加載后,還需要設(shè)置自定義菜單才能將程序中的命令展示出來。右擊工具欄的任意位置,選擇Customize會彈出自定義菜單窗口。在窗口的中間欄新建一個按鈕,并將按鈕的Command屬性值指向二次開發(fā)程序命令類的 Key值,最后將新建的按鈕添加到左邊欄的 Command Bars或者M(jìn)enubar中。在設(shè)置全部完成后,可點擊按鈕執(zhí)行相關(guān)的命令。
本文基于船舶主流設(shè)計軟件 AVEVA Marine(AM),使用 C#語言針對零件名的標(biāo)注進(jìn)行二次開發(fā)設(shè)計。研究表明:二次開發(fā)程序簡單方便,標(biāo)注內(nèi)容清晰明了,彌補了原程序的不足。本文的開發(fā)方法具備通用性,可為后續(xù)其他功能的開發(fā)提供一定借鑒。