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