吳 昊,蘇瑞東,項 陸,王 帥
(1.今創集團股份有限公司,江蘇 常州 213102;2.中南大學 粉末冶金研究院,湖南 長沙 410083)
對于一般的制造企業來說,標準件種類、規格較多,常規做法是技術人員首先通過手工填寫標準件的相關信息,比如標準代號、規格名稱、材料(等級)、備注(表面處理和狀態)等,然后憑借這些信息到系統數據庫中查找對應物料代碼,最終將物料代碼反填到圖紙的明細表中。但是,由于項目交期緊迫,加之技術人員的出圖習慣、出圖技能、細心程度等各方面的差異,造成圖紙明細表的標準件數據填寫質量參差不齊。常見問題有:標準代號誤寫,比如“GB/T 6170”寫成“GB6170”或“GBT6170”;規格名稱隨意采用簡寫或者縮寫,比如,“標準型彈簧墊圈6”簡寫成“彈墊6”或者“彈簧墊圈6”;規格名稱中的“×”被“*”或者“x”替代,比如,“內六角圓柱頭螺釘M6×15”寫成“內六角圓柱頭螺釘M6*15”等。同時,系統數據庫經過長時間的運行,積累了大量數據,部分數據信息填寫不規范。綜合上述兩方面的原因,所造成的后果就是圖紙的數據無法直接與系統標準件代碼數據庫進行對接,不方便物料代碼的匹配與查找。據初步統計,技術人員在標準件數據填寫上所花的時間占出圖總時間的10%~15%。
CAXA CAD電子圖板是一個開放的二維CAD平臺[1],是數碼大方自主開發的國產CAD核心產品,具有上手快、出圖快、專業規范、穩定可靠、兼容性好等特點,已經廣泛應用于航空航天、裝備制造、電子電器、汽車及零部件、國防軍工、教育等行業。同時,CAXA擁有強大的二次開發能力,結合Microsoft Visual Studio 2010,可以方便、快捷地定制出具有公司特色的二次開發軟件。
由于系統數據庫里的標準件數據不規范,因此程序不能直接對接系統數據庫。這里采用拆分的方法,對系統數據庫中的數據進行清洗和整理。根據標準件數據類型特點,將其拆分為規范圖號(標準代號)、規格名稱、材料、備注、物料代碼等部分,如圖1所示。注意,一個包含圖號、名稱、材料、備注這四方面信息的物料,有且只能對應一個物料代碼,不能出現一個物料對應多個物料代碼(一物對多碼)或者多個物料對應一個物料代碼(多物對一碼)等異常情況。最后形成規范的標準件代碼庫文件StdPartsDatabase.xlsx。

圖1 經過整理后的系統標準件數據效果
該算法實現了對文件夾所有圖紙明細表中標準件信息的批量識別和提取。首先,初始化結構體鏈表為空、文件序號為0,該鏈表包含有標準件的標準代號、規格名稱、材料、備注以及在所在圖紙明細表中的件號、所在圖紙的路徑等信息;然后程序會對文件夾中的每張圖紙進行讀取,如果圖紙中包含明細表,則遍歷明細表,若出現有標準件信息,則將該標準件信息追加入鏈表的末尾;最后,遍歷該鏈表,將各標準件信息顯示在主窗口的相應控件ListViewCtrl中,并導出為xlsx或csv等格式文件,方便后續的操作。標準件信息的識別與提取算法流程如圖2所示。

圖2 標準件信息的識別與提取算法流程
上述算法中,判斷一條明細是否為標準件的方法,是通過檢測該明細圖號列的字符串是否包含有常用標準代號的縮寫,比如”GB/T”、”ISO”、”DIN”,如果包含,則判斷為標準件,反之,則為非標件。
按照前述分析,問題主要出在標準代碼和規格名稱這兩部分,因此,針對這兩部分的整理算法的設計就顯得尤為重要。在介紹算法前,首先準備格式為csv的標準件信息文件StdPartInfoFile,該文件的格式是每行數據包含規范標準代號RegStdNO、規范名稱前綴RegStdNamePrefix、標準代號的正則字符串StdNORegExp、規格名稱的正則字符串StdNameRegExp等內容,并且用逗號分割。后續如需新增標準件信息,也按照此順序逐行增加。
算法的具體實現方法如下:首先,遍歷讀取該標準件信息文件的每行內容,并且存入結構體鏈表StdPartsInfoList中;然后,遍歷讀取上述2.1中的控件ListViewCtrl各行內容,獲取臨時標準代號StdNO、臨時規格名稱StdName;接著遍歷上述結構體鏈表StdPartsInfoList,如果StdNO與結構體鏈表中某一條數據SPI的標準代號正則字符串SPI→StdNORegExp相匹配,則將該數據的規范標準代號SPI→RegStdNO填寫到控件ListViewCtrl所在行的相應列中,進一步地,將StdName與規格名稱的正則字符串SPI→StdNameRegExp相匹配,將其純規格信息Spec提取出來并進行相應的處理;再接著將規范名稱前綴SPI→RegStdNamePrefix與經過處理的純規格信息Spec’進行連接并形成新的規格信息NewStdName;最后將NewStdName填入到控件ListViewCtrl所在行的相應列中。標準件信息的整理算法流程如圖3所示。

圖3 標準件信息的整理算法流程
上述算法中,標準代號正則字符串StdNORegExp是根據前述常見問題來設計的,比如,GB(‘?|?)T?s?93可以用來識別GB/T 93這條標準代號[2];規格名稱正則字符串StdNameRegExp是用來匹配物料純規格信息的,比如,Md+(*|x|×)d+可以用來識別常用螺釘和螺栓的規格;規格名稱的前綴RegStdNamePrefix是指除去純規格信息而比較固定的內容,比如,規格名稱“標準型彈簧墊圈 6”中的“6”就是該物料的純規格信息,而前綴就是“標準型彈簧墊圈”。
搜索算法是實現物料代碼自動填寫的關鍵,算法如下:遍歷讀取ListViewCtrl的各行,獲取規范標準代號StdNO1、規范規格名稱StdName1、材料Material1、備注Memo1各信息;然后遍歷規范標準件代碼庫文件StdPartsDatabase,將上述StdNO1、StdName1、Material1、Memo1與代碼庫相應各信息進行一一比較,如果都符合,則說明已經找到;最后將物料代碼填入ListViewCtrl相應行的物料代碼列中,如果有一項不符合,則說明沒有找到,跳過并讀取代碼庫的下一條數據,如果都沒有找到,則在對應的物料代碼列中填入“未找到物料代碼”信息,以提醒技術員需要后續人工干預。物料代碼搜索算法流程如圖4所示。

圖4 物料代碼搜索算法流程
該算法實現物料代碼導入進圖紙的功能,即遍歷讀取ListViewCtrl每行物料代碼、所在圖紙的序號、所在圖紙的路徑等列數據,然后填入相應的圖紙中。因功能比較簡單,現不再贅述,具體可以參考CAXA電子圖板 ObjectCRX二次開發指南[3]之相關章節內容。
考慮到技術員的操作習慣,程序的GUI界面設計[4]較為簡潔,操作步驟也較為簡單,達到了技術員“一看就懂大概、一用就會操作”的效果。二次開發程序運行界面如圖5所示。

圖5 二次開發程序運行界面
經過10張圖紙共30條明細數據的人工填寫與程序填寫的測試比對,結果如表1所示??梢钥闯觯ㄟ^二次開發程序,節省的時間還是很可觀的。經過初步試用,能夠有效縮短出圖時間,提高出圖效率。

表1 人工填寫與程序填寫比對結果
針對目前存在的標準件數據填寫時間長、數據的填寫質量不高等一系列問題,本文介紹了一種解決方法。首先對系統數據庫中的標準件物料數據進行整理,形成規范標準件代碼庫文件StdPartsDatabase,然后進行二次程序開發,通過算法來實現圖紙標準件數據的識別、提取、整理等功能,最終實現了物料代碼的搜索與反填。經過技術人員初步使用,可以有效縮短技術員的出圖時間,提高工作效率,為圖紙標準件數據精細化管理提供了一種切實可行的解決方案。另外,因為二次開發程序不受圖紙的限制,模塊化程度較高,可拓展性較好,后續可以向選碼等其他功能拓展,從而進一步減少人工填寫的內容和人工填寫所花費的時間。