省教育廳課題:浙江省教育廳《PDM下圖紙信息自動獲取與反填技術(shù)的研究》(Y201430802)
浙江省公益性技術(shù)應(yīng)用研究計(jì)劃《可穿戴下肢助力機(jī)器人設(shè)計(jì)》2017C31106
摘要:圖紙信息的提取與反填是實(shí)現(xiàn)產(chǎn)品數(shù)據(jù)高效管理的基礎(chǔ)。Creo軟件在工程設(shè)計(jì)制造領(lǐng)域應(yīng)用廣泛,針對Creo文件,提出一種基于VS2015平臺的信息提取與反填的應(yīng)用程序,既可以將Creo文件中的信息提取出來,也可以將數(shù)據(jù)反填到Creo文件。通過實(shí)例驗(yàn)證,表明應(yīng)用程序信息提取與反填有效。
關(guān)鍵詞:Creo;信息提取;信息反填
中圖分類號:TG802?? 文獻(xiàn)標(biāo)識碼:A?? 文章編號:1672-9129(2020)11-0152-03
前言:一個產(chǎn)品的生產(chǎn)過程中,會產(chǎn)生大量的圖紙文件。隨著時(shí)間的推移,企業(yè)產(chǎn)品的數(shù)量急劇增加,容易造成文件丟失、信息丟失,因此往往需要引入管理軟件比如PDM軟件,進(jìn)行信息管理。但是,管理軟件需要將產(chǎn)品信息錄入到系統(tǒng)中,而這些信息往往存在圖紙中,使用這些信息就需要打開一個個產(chǎn)品的圖紙文件,然后將信息拷貝出來,效率非常低,且容易出錯,不利于管理。同時(shí)新的圖紙也有類似問題,由于設(shè)計(jì)者往往不會使用管理軟件,而管理軟件使用者也不會使用CAD軟件,新圖紙信息的獲取也是費(fèi)時(shí)費(fèi)力。因此,如何高效且準(zhǔn)確地提取信息,解決圖紙?jiān)O(shè)計(jì)軟件“信息孤島”現(xiàn)狀成為企業(yè)負(fù)責(zé)人十分關(guān)注的問題。
為此,本文針對如何高效且準(zhǔn)確地提取信息,開發(fā)了一個應(yīng)用程序,可以將所需信息直觀地顯示在界面上,并可以按照一定格式生成文本文件,供任意管理軟件調(diào)用。最終生成動態(tài)鏈接庫文件,提供接口信息,嵌入到任意管理軟件中,實(shí)現(xiàn)無縫連接。
CAD軟件的類型眾多,其中Creo軟件是一款主流的、應(yīng)用非常廣泛的軟件。因此,本文選用的CAD軟件為Creo 4.0。
1 開發(fā)環(huán)境配置
根據(jù)Creo4.0的官方規(guī)定,其二次開發(fā)的應(yīng)用軟件為VS2015,因此,本文將通過VS2015設(shè)計(jì)開發(fā)應(yīng)用程序,實(shí)現(xiàn)Creo4.0文件的信息提取與反填,其中信息的提取與反填可以定制化。
(1)API開發(fā)包。隨著Creo軟件的發(fā)展,其二次開發(fā)的庫由ProToolkit向Creo Object TOOLKIT C++轉(zhuǎn)變,但是ProToolkit的部分功能還是能應(yīng)用的,因此,本文將同時(shí)使用ProToolkit與OTK進(jìn)行二次開發(fā)。
(2)環(huán)境變量。為了實(shí)現(xiàn)高效且獨(dú)立的信息提取,將采用異步模式對Creo進(jìn)行開發(fā),因此,需要設(shè)置環(huán)境變量PRO_COMM_MSG_EXE,它的值設(shè)定為pro_comm_msg的絕對路徑。
(3)VS2015開發(fā)環(huán)境設(shè)置。配置Creo4.0庫,包含目錄和庫目錄,將工程中的包含目錄設(shè)定軟件安裝目錄下~\\Common Files\\\\otk\\otk_cpp\\include和~\\Common Files\\protoolkit\\includes。
將工程中的庫目錄設(shè)定為軟件安裝目錄下~\\Common Files\\otk\\otk_cpp\\x86e_win64\\obj和~\\Common Files\\protoolkit\\x86e_win64\\obj。
同時(shí),將Creo4.0庫的附加依賴項(xiàng),如:otk_cpp_async.lib、otk_222.lib、pt_asynchronous.lib、protoolkit_NU.lib、ucore.lib、udata.lib等。
2 信息提取與反填
2.1信息提取算法。
首先,明確信息來源,輸入工程文件的絕對地址或者選擇一個工程文件;
接著,根據(jù)輸入的不同工程文件,取不同的信息。具體如下:1)零件圖,提取標(biāo)題欄信息;2)裝配圖,提取標(biāo)題欄信息和子圖的信息;3)工程圖,提取標(biāo)題欄信息和明細(xì)表信息。
最后,將信息按照一定格式保存。
信息提取算法的流程圖如圖1所示。
2.2信息提取的實(shí)現(xiàn)。
首先,檢查是否已經(jīng)啟動Creo,如果已經(jīng)啟動,獲取其會話對象;如果沒有啟動Creo,則以異步模式下不可見方式啟動Creo。利用pfcAsyncConnection::Start(“pro -g:no_graphics -i:rpc_input”)來實(shí)現(xiàn)非交互式、無界面的啟動Creo。其中pro是啟動Creo Parametric的命令。
connection= pfcAsyncConnection::GetActiveConnection();
if (!connection)
{
connection = pfcAsyncConnection::Start("C:\\\\Program Files\\\\PTC\\\\Creo 4.0\\\\M080\\\\Parametric\\\\bin\\\\parametric.exe -g:no_graphics -i:rpc_input", "");
if(!connection)
{
::MessageBox(NULL, _T("Creo啟動錯誤!"), _T("Fail"), NULL);
return;
}
}
else
{
::MessageBox(NULL, _T("Creo已經(jīng)啟動,獲取成功!"), _T("Get"), NULL);
}
然后,通過函數(shù)ProMdlFiletypeLoad打開文件;
GetDlgItemText(IDC_EDIT1, filename);
ProStringToWstring(proPath, filename);
status = ProMdlFiletypeLoad(proPath, PRO_MDLFILE_PART, b, &proMdl);
if (status != PRO_TK_NO_ERROR)
{
::MessageBox(NULL, _T("打開文件錯誤!"), _T("Get"), NULL);
}
其次,判斷文件類型,根據(jù)文件擴(kuò)展名的不同判斷當(dāng)前文件是裝配圖還是工程圖還是零件圖。
接著,根據(jù)不同文件,提取不同信息;
status=ProMdlToModelitem(proMdl, &item);
GetSolidParam(item, &appdata);
ProArraySizeGet((ProArray)appdata, ¶mCount);
for (int i = 0;i { char name[PRO_NAME_SIZE]; char value[PRO_TYPE_SIZE]; ProParamvalue proval; ProParameterValueGet(appdata + i, &proval); Num = m_MyListBox.GetCount(); CString strTemp, strTemp1; strTemp1 = " = "; if (proval.type == PRO_PARAM_DOUBLE) { strTemp.Format(_T("%.4f"), proval.value.d_val); strTemp = ((appdata + i)->id) + strTemp1+ strTemp; m_MyListBox.InsertString(Num, strTemp); } else { strTemp = ((appdata + i)->id) + strTemp1 + proval.value.s_val; m_MyListBox.InsertString(Num, strTemp); } } 最后,將信息保存成可以讓管理軟件使用的文本格式。 2.3信息反填算法。 首先,明確信息反填對象,輸入工程文件的絕對地址或者選擇一個工程文件; 接著,判斷信息是否已經(jīng)存在,如果存在,更改屬性內(nèi)容;如果不存在,新建屬性及其設(shè)定值。 最后,保存文件。 信息反填算法的流程圖如圖2所示。 2.4信息反填的實(shí)現(xiàn)。 首先,檢查是否已經(jīng)啟動Creo,此過程類似信息提取算法; 然后,通過函數(shù)ProMdlFiletypeLoad打開文件; 其次,判斷反填信息是否已經(jīng)存在,存在則修改,不存在則新建; status = ProParameterInit(&item, strParam1.AllocSysString(), &new_param); if (status != PRO_TK_NO_ERROR) { ProParamvalueSet(&new_value, &plTemp1, PRO_PARAM_STRING); status = ProParameterWithUnitsCreate(&item, name1, &new_value,NULL,&new_param); if (status != PRO_TK_NO_ERROR) { AfxMessageBox(_T("屬性參數(shù)創(chuàng)建失敗!")); } } else//反填信息已存在,更新之 { ProParamvalueSet(&new_value, &plTemp1, PRO_PARAM_STRING); status = ProParameterValueWithUnitsSet(&new_param, &new_value,NULL); } 最后,保存文件。 3 實(shí)例驗(yàn)證 本文所述的信息提取與反填算法將通過MFC應(yīng)用程序來驗(yàn)證。以某一個零件圖為對象,根據(jù)測試要求,在零件圖的參數(shù)對話框中設(shè)置屬性,如圖3所示: 設(shè)置屬性完畢,運(yùn)行MFC程序,點(diǎn)擊選擇文件按鈕,在彈出的文件選擇對話框中,將上述文件選中,再點(diǎn)擊開始提取,經(jīng)過后臺自動提取,將零件圖中的參數(shù)信息提取出來,并按照一定形式顯示在顯示框內(nèi),顯示形式可以自定義。比較程序提取出來的信息與零件圖中的信息,兩者一致。如圖4所示 提取完畢后,在信息反填中,將需要修改的屬性內(nèi)容與添加的內(nèi)容填寫上去,如將材料修改為45號鋼,購買者修改為趙張武,添加一個新的屬性,如新屬性=測試。然后點(diǎn)擊開始反填按鈕,經(jīng)過后臺自動反填,完成屬性的修改與添加。同時(shí),為了更好觀察是否反填完畢,再次點(diǎn)擊開始提取,比對發(fā)現(xiàn)信息已經(jīng)反填成功。最后通過打開零件圖的參數(shù)對話框驗(yàn)證,信息反填成功。如圖5所示: 4 結(jié)論 本文通過VS2015實(shí)現(xiàn)Creo圖紙信息的提取與反填,可以自動分辨圖紙的種類,根據(jù)定制需求提取出定制形式信息。在本文論述過程中,通過MFC應(yīng)用程序方式完成。推廣到實(shí)際應(yīng)用上的時(shí)候,可以將實(shí)現(xiàn)過程用MFC DLL的形式,提供出信息提取與信息反填2個接口,生成動鏈接庫文件,從而方便其他管理軟件的調(diào)用。 參考文獻(xiàn): [1]晏恒兵,仲梁維,基于Creo的智能模型庫插件研究與開發(fā)[J].軟件工程,2020,23(4):12-14 [2]張文曉,基于Excel VBA對Creo進(jìn)行異步模式下的二次開發(fā)[J].電腦知識與技術(shù),2019,15(7):212-214. [3]宮潘威,時(shí)小磊,陶高周等,CREO環(huán)境下三維模型及信息集成共享實(shí)現(xiàn)方法研究[J],機(jī)械設(shè)計(jì)與制造,2019,0(2):218-221. [4] Creo Object TOOLKIT C++ Users Guide (4.0 M080),PTC,2019. [5]張文彬,沈精虎,姜兆康,基于Creo二次開發(fā)的零件參數(shù)化變型設(shè)計(jì)[J],微型電腦應(yīng)用,2018,34(2):48-50. 作者簡介:朱文偉,1983.12.27,男,漢,浙江瑞安市人,碩士,溫州大學(xué)甌江學(xué)院,研究方向:機(jī)電一體化、數(shù)字化設(shè)計(jì)。 李美琴,1982.06.30,女,浙江溫州人,碩士,溫州大學(xué)甌江學(xué)院,研究方向:機(jī)械設(shè)計(jì)及理論。