VB6. 0與 ActiveX Aut omati on技術(shù)開發(fā) CAM的分析
ActiveX Aut omati on技術(shù)是微軟制定的一套標(biāo)準(zhǔn) ,使用這個(gè)標(biāo)準(zhǔn)可以使用不同語言開發(fā)的軟件構(gòu)件在網(wǎng)絡(luò)環(huán)境中相互操作 ,它允許通過外顯的對(duì)象由一個(gè) windows應(yīng)用程序控制另一個(gè) win2dows應(yīng)用程序 , CAD可以調(diào)用 CAM的對(duì)象 , CAM也可以調(diào)用CAD的對(duì)象。ActiveX Aut omati on被稱為第四代開發(fā)工具。 (第一代開發(fā)工具 - Aut olis p;第二代開發(fā)工具 - ads ;第三代開發(fā)工具- Visuallis p、 arx;第四代開發(fā)工具 - ActiveX aut omati on[ 1 ])。同其他三代開發(fā)工具相比 ,ActiveX Aut omati on提供了******的靈活性和開發(fā)效率。它無需相關(guān)的控件的幫助 ,無需編寫復(fù)雜L ISP或 c語言程序 ,而是以對(duì)象的方式把 Aut oCAD的強(qiáng)大功能直接提供給應(yīng)用程序 ,既大大降低了開發(fā)工作量 ,又增強(qiáng)了系統(tǒng)的集成性、 對(duì)各種不同版本的適應(yīng)性和可維護(hù)性。Aut oCAD的 Ac2tiveX Aut omati on技術(shù)的出現(xiàn) ,標(biāo)志著 Aut oCAD的二次開發(fā)技術(shù)取得了歷史性轉(zhuǎn)折。首先 ,它首次完全實(shí)現(xiàn)了 OLE Aut omati on ,使得其他軟件可以方便地訪問 Aut oCAD ; 其次 ,Aut oCAD首次實(shí)現(xiàn)了面向?qū)ο蟮拈_發(fā)技術(shù) ,用戶可以操縱它提供所有的 Aut oCAD對(duì)象;最后 ,基于 ActiveX Aut omati on開發(fā)技術(shù)的開發(fā)工具得到空前的膨脹 ,已不再局限于 C及 C + +系列語言 ,用 Visual Basic ,Del phi等工具都可以進(jìn)行開發(fā) ,本文介紹基于 Visual Basic和 Ac2tiveX Aut omati on技術(shù)開發(fā) CAM系統(tǒng)的過程。1 CAM系統(tǒng)總體實(shí)現(xiàn)的方法基于 Visual Basic和 ActiveX Aut omati on技術(shù) ,我公司已經(jīng)開發(fā)出了汽車縱梁沖孔生產(chǎn)線 CAM系統(tǒng)、 TP80型精工液壓板料沖孔機(jī) CAM系統(tǒng)、 精工沖床通用 CAM系統(tǒng)等 ,各種 CAM系統(tǒng)的功能雖然千差萬別 ,但總體實(shí)現(xiàn)的方法類似。下面談?wù)?CAM系統(tǒng)實(shí)現(xiàn)的通用方法。增加菜單項(xiàng)以實(shí)現(xiàn) CAM圖標(biāo) ,用 VBA編寫接口 ,使圖標(biāo)與ActiveX控件相連 ,用 VB編寫類生成 DLL,它是以 VB類的形式提供的開發(fā)接口 ,可用于定義模型的幾何、 窗體 ,拓?fù)湟约皩?shí)現(xiàn)其他功能。在應(yīng)用中 ,可直接通過類的公共 ( Public)數(shù)據(jù)成員和保護(hù)( Pr otected)數(shù)據(jù)成員以及成員函數(shù) (Member Functi on)與 ACIS相互作用。開發(fā)者也可以根據(jù)特殊的需要從 ACIS類派生出自己的應(yīng)用類 ,類接口在各版本中可能有變化 ,最終把菜單、 VBA工程、DLL、 各種文檔都封裝在 SET UP中 ,可以安裝在 Aut oCAD2000、2002、 2004、 2005、 2006、 2007中。示意圖如圖 1:首先創(chuàng)建一個(gè) CAM系統(tǒng)圖標(biāo)菜單 ,編寫腳本 ( Scri p ts) j mcar .mns,在 AUT OCAD使用工具 → 自定義菜單 →\JMCAR. MNS加載 ,把 CAM菜單加載到 Aut oCAD系統(tǒng)中 ,以便用戶像點(diǎn)擊 Aut oCAD的圖標(biāo)一樣點(diǎn)擊 CAM圖標(biāo)。第二步用 VBA編寫 j mvb1 . dvb工程 ,用于調(diào)用 DLL工程中類的成員 ,第三步中使用 VisualBasic6 . 0創(chuàng)建工程 ,包括各種窗體、 模塊、 類、 過程、 函數(shù)和各種功能模塊 ,并編譯成 DLL工程 ,以備 VBA調(diào)用 ,該部分的工作量******約占整個(gè)開發(fā)總量的 90%以上。最后集成打包封裝形成 SET UP安裝文檔。以汽車縱梁沖孔生產(chǎn)線 CAM系統(tǒng)為例 ,其流程圖如圖 2:2 CAM開發(fā)中技術(shù)要點(diǎn)從圖 1 CAD /CAM系統(tǒng)示意圖可以看出 ,開發(fā)過程有四步 ,分別是圖標(biāo)菜單文檔的編寫、 VBA工程的創(chuàng)建、 DLL工程的創(chuàng)建設(shè)計(jì)和整個(gè)系統(tǒng)的集成 ,第一步圖標(biāo)菜單文檔的編寫和第二步 VBA工程的創(chuàng)建韓學(xué)軍已在“ 汽車縱梁沖孔精工生產(chǎn)線自動(dòng)編程系統(tǒng)ActiveX Aut omati on技術(shù)的應(yīng)用 ” 一文中介紹 (詳見《CAD /CAM與制造業(yè)信息化 》 2006年 12期 ) ,本文不再贅述。這里主要介紹第三步 DLL工程的創(chuàng)建設(shè)計(jì)中的要點(diǎn)問題。2 . 1 Visual Basic 6 . 0工程的引用動(dòng)態(tài)鏈接庫中存放了所有 Windows應(yīng)用程序可以共享的代碼和資源 ,這些代碼或函數(shù)可以用多種語言寫出。Visual Basic利用這些技術(shù)可以調(diào)用任何語言產(chǎn)生的 DLL,也可以調(diào)出 windows應(yīng)用程序接口 (AP I )函數(shù) ,以實(shí)現(xiàn) S DK所能實(shí)現(xiàn)的功能。對(duì)象的鏈接與嵌入是 VisualBasic訪問所有對(duì)象的一種方法。利用 OLE技術(shù) ,Visual Basic將其他應(yīng)用軟件作為一個(gè)對(duì)象嵌入到應(yīng)用程序中進(jìn)行操作 ,也可以將各種基于 windows的應(yīng)用程序嵌入到 Visu2al Basic應(yīng)用程序中[ 2 ]。在“ 引用 ” 對(duì)話框中 ,選擇 ActiveX部件的名稱 ,它包含在應(yīng)用程序的對(duì)象中??梢允褂?ldquo; 瀏覽 ’ ’ 按鈕來搜索包含所需對(duì)象的類型庫文件。類型庫可以有. tlb或. o1b擴(kuò)展文件名??蓤?zhí)行( exe)文件與動(dòng)態(tài)鏈接庫 (DLL)也可以提供類型庫。在應(yīng)用程序中 ,在使用對(duì)象的屬性、 方法和事件之前 ,必須先聲明對(duì)象變量 ,然后將對(duì)象引用賦予該變量。如何賦值對(duì)象引用取決于兩個(gè)因素:一、 該對(duì)象是頂層、 外部可創(chuàng)建對(duì)象 ,還是從屬對(duì)象。對(duì)于外部創(chuàng)建的對(duì)象的引用 ,可以直接賦值 ,而對(duì)從屬對(duì)象的引用則間接賦值。二、 ActiveX部件是否提供類型庫。ActiveX部件的類型庫包含部件提供的全部對(duì)象的定義 ,包括全部可用的方法、 屬性和事件的定義。如果 ActiveX部件提供類型庫 ,在使用庫的對(duì)象前 ,需要在 visual Basic工程中添加一個(gè)對(duì)類型庫的引用。如果對(duì)象是外部可創(chuàng)建的 ,可在 Set語句中用 New關(guān)鍵字、CreateObject或 Get Objet從部件外面將對(duì)象引用賦予變量。如果對(duì)象是從屬對(duì)象 ,則需使用高層對(duì)象的方法 ,在 set語句中指定一個(gè)對(duì)象的引用[ 3 ]。缺省的引用有四個(gè):visual basic for app licat onsvisual basic runti me objects and p roceduesvisual basic objects and p roceduresole aut omati on根據(jù)各個(gè)不同版本增加四個(gè)引用:對(duì)于 2007來說AUT OCAD 2007 type libraryAUT OCAD /Object obx commom 17 . 0 type library對(duì)于 2004, 2005, 2006來說AUT OCAD 2004AUT OCAD /Object obx commom16 . 0AUT OCAD Focus contr ol for vba type libraryMicosoftActivex Data Objects 2 . 1 L ibrary對(duì)于 2000, 2002來說AUT OCAD 2000AUT OCAD Focus contr ol for vba type libraryAUT OCAD /Object obx commom 1 . 0MicosoftActivex Data Objects 2 . 1 L ibrary2 實(shí)現(xiàn) VB與 Aut oCAD之間的鏈接Aut oCAD的所有對(duì)象可組成一個(gè)層狀結(jié)構(gòu) ,其最高層是 Ap2licati on對(duì)象 ,其它對(duì)象都是 App licati on對(duì)象的子對(duì)象。對(duì)象層中每個(gè)子對(duì)象都有屬于自己的子對(duì)象。為了獲得某個(gè)特定的對(duì)象 ,必須從 App licati on對(duì)象中對(duì)各層子對(duì)象進(jìn)行遍歷查詢 ,到找到該特定對(duì)象 , App licati on對(duì)象是 vb應(yīng)用程序與 Aut o2AD之間鏈接的關(guān)鍵。只有通過 App licati on對(duì)象才能獲取參數(shù)、 文檔集、 菜單欄、 菜單組。將 App licati on對(duì)象與 Aut oCAD之間行鏈接是實(shí)現(xiàn) CAM與 CAD連接的第一步。對(duì)于 2007來說Private Sub Form_Load ( ) ’ 連接至 Aut oCAD圖形On Err or Resume NextDi m acadApp AsAcadApp licati onSet acadApp = Get Object ( , "Aut oCAD. App licati on . 17" )I f Err ThenErr . ClearSet acadApp = CreateObject ( "Aut oCAD. App licati on . 17 . " )I f Err ThenMsg Box Err . Descri p ti onExit SubEnd I fEnd I fSet acadDoc = acadApp. ActiveDocumentEnd Sub對(duì)于 2004, 2005, 2006來說Private Sub Form_Load ( ) ’ 連接至 Aut oCAD程序On Err or Resume NextDi m acadApp AsAcadApp licati onSet acadApp = Get Object ( , "Aut oCAD. App licati on . 16" )I f Err ThenErr . ClearSet acadApp = CreateObject ( "Aut oCAD. App licati on . 16" )I f Err ThenMsg Box Err . Descri p ti onExit SubEnd I fEnd I fSet acadDoc = acadApp. ActiveDocumentEnd Sub對(duì)于 2000, 2002來說Private Sub Form_Load ( ) ’ 連接至 Aut oCAD圖形On Err or Resume NextDi m acadApp AsAcadApp licati onSet acadApp = Get Object ( , "Aut oCAD. App licati on" )I f Err ThenErr . ClearSet acadApp = CreateObject ( "Aut oCAD. App licati on . " )I f Err ThenMsg Box Err . Descri p ti onExit SubEnd I fEnd I fSet acadDoc = acadApp. ActiveDocumentEnd Sub2 . 3 在模塊中定義全局變量 ,獲取 Aut oCAD信息在模塊中定義 Aut oCAD應(yīng)用程序和 Aut oCAD文件Public acadApp AsAcadApp licati on ’ cad應(yīng)用Public acadDoc AsAcadDocument ’ cad文件用戶可以根據(jù)屏幕選取圖形、 可以根據(jù)圖層選取圖形 ,也可以根據(jù)某些條件過濾掉某些圖形元素 ,下面的過程是根據(jù)屏幕選取圖形放入選擇集中 ,然后把圖形元素放入動(dòng)態(tài)數(shù)組中 ,放入動(dòng)態(tài)數(shù)組中的目的是由于在選擇集中處理數(shù)據(jù)比較慢 ,而在動(dòng)態(tài)數(shù)組中處理數(shù)據(jù)的速度比較快。筆者做過一個(gè)試驗(yàn) ,在一個(gè)有 40個(gè)圖素的圖形文件中 ,用選擇集處理數(shù)據(jù)需要十分鐘 ,而用動(dòng)態(tài)數(shù)組處理需要 10秒。Public Sub Aut ogetdata ( ) ’Di m iAs I nteger, k As I nteger, ic As I nteger, lngCount as integeDi m entAsAcadEntityDi m sset ObjAs AcadSelecti onSetDi m objEnts ( ) ’ 定義動(dòng)態(tài)數(shù)組On Err or GoTo ccc1ic = acadDoc . Selecti onSets . Count ’ 選擇集的個(gè)數(shù)I f ic > 0 ThenFor i = ic - 1 To 0 Step - 1Set sset Obj = acadDoc . Selecti onSets ( i)I f sset Obj . Name = " SSSS" Then sset Obj . Delete ’ 存在該選擇集刪除它NextEnd I fSet sset Obj = acadDoc . Selecti onSets . Add ( " SSSS" )sset Obj . Select OnScreenlngCount = sset Obj . Count ’ 選擇集的圖元個(gè)數(shù)I f lngCount > 0 ThenReDi m objEnts (0 To lngCount - 1) ’ 定義放實(shí)體的動(dòng)態(tài)數(shù)組For ic = 0 To lngCount - 1 ’ 把選擇集的圖素放入實(shí)體數(shù)組中Set objEnts ( ic) = ssSet obj ( ic)NextEnd I fSsset obj . deleteEnd subObjEnts數(shù)組中存放了從屏幕上獲取的所有圖素。2 . 4 向圖形數(shù)據(jù)庫添加 CAM圖形數(shù)據(jù)圖形設(shè)計(jì)可以運(yùn)用 Pro /Engineer,UGII , I - DEAS, Euclid - IS,CATI A, SolidWorks, Sigraph等專用 CAD軟件直接設(shè)計(jì)繪制 ,通過DXF、I - GES、 DWG格式放入 CAD和 CAM的一體化系統(tǒng) ,也可以用 Aut oCAD直接繪制。對(duì)于不同的 CAM系統(tǒng) ,向圖形數(shù)據(jù)庫添加的 CAM圖形數(shù)據(jù)也不同的 ,以 TP80型精工液壓板料沖孔機(jī)為例 ,需要向圖形數(shù)據(jù)庫中加入板材信息、 夾鉗信息、 模具信息、 行程信息、 重定位信息、 模擬演示信息等等 ,然后根據(jù)從 CAD圖形數(shù)據(jù)庫中獲取的數(shù)據(jù)添加模具信息 ,該功能可以通過添加塊實(shí)現(xiàn) ,塊的屬性可以帶有 CAD信息 (如圓的圓心坐標(biāo)點(diǎn)、 圓的直徑 ,層、 線型、 顏色等 )和 CAM信息 (刀具號(hào)、 刀具的直徑、 工位號(hào)、 沖壓類型、 重定位區(qū)域等 )。自動(dòng)排刀的算法:首先建立刀具庫 ,并提取刀具信息如:圓刀的直徑 ,其他刀具的長(zhǎng)、 寬、 面積、 角度 ,刀具名稱等 ,設(shè)置正公差和負(fù)公差的范圍 ,以便進(jìn)行匹配刀具。第二步從 Aut oCAD中提取圖形信息放入選擇集中 ,并把圓孔、 長(zhǎng)方孔、 長(zhǎng)圓孔、 特殊孔四種篩選出來 ,去除板材線 ,尺寸線 ,文字等 ,第三步從選擇集中取一個(gè)圖素 ,判斷該圖素的類型 (上述四種 ) ,根據(jù)圖素的類型進(jìn)行相應(yīng)的處理。利用循環(huán)原理 ,把實(shí)體數(shù)組中的圖素全部處理后 ,在 CAM層上就自動(dòng)把合適的刀具適配上了 , CAM圖形為了區(qū)別于 CAD圖形 ,以特殊的顏色顯示 ,放在專用層上 ,以便于后續(xù)處理。由于篇幅所限 ,在這里只能給出程序框圖圖 3。2 . 5 優(yōu)化TP80型精工液壓板料沖孔機(jī)采用直列式模具庫 ,它的換模速度比較快 ,一般采用路徑優(yōu)化然后再進(jìn)行模具優(yōu)化的原則。它采用了夾鉗硬件自動(dòng)避讓的方式 ,軟件中不考慮夾鉗死區(qū)的避讓問題。該優(yōu)化方法采用分組方式 ,每?jī)擅诪橐唤M ,每組內(nèi)先按模具優(yōu)化 ,相同模具按沖點(diǎn)的 X值 +所用模具的偏移值的距離進(jìn)行優(yōu)化 ,相同模具并且 X值 +所用模具的偏移值也相同的沖點(diǎn)按 Y值+所用模具的偏移值的距離進(jìn)行比較 ,再按所有優(yōu)化路徑進(jìn)行比較 ,選出一個(gè)******路徑生成 NC代碼。設(shè)計(jì)模擬演示、 生成 NC程序等模塊把菜單、 VBA工程、 Visu2al Basic編譯后形成的 DLL、 各種文檔都封裝在 SET UP中。ActiveX DLL的注冊(cè)與開發(fā)平臺(tái)無關(guān) ,在一種編程語言中開發(fā)出來的 ActiveX DLL,幾乎不作任何修改 ,便可以在另一種編程語言中使用。一般注冊(cè) VB6 . 0 ActiveX DLL的方法有很多種 ,這里只介紹手動(dòng)注冊(cè)和自動(dòng)注冊(cè):(1)使用 Regsvr32 . exe程序?qū)?VB ActiveX DLL進(jìn)行注冊(cè)。(2)安裝過程中的自動(dòng)注冊(cè)。TP80型精工液壓板料沖孔機(jī)自動(dòng)編程 CAM軟件采用的是安裝過程中的自動(dòng)注冊(cè)。主圖標(biāo)菜單如圖 5:3 結(jié)論利用計(jì)算機(jī)圖形交互界面 ,采用二維模擬技術(shù)及面向?qū)ο蟮某绦蛟O(shè)計(jì)方法 ,以 vb和 ActiveX Aut omati on技術(shù) ,設(shè)計(jì) TP80型精工液壓板料沖孔機(jī) CAM系統(tǒng) ,對(duì)刀具的刀具軌跡進(jìn)行模擬 ,直觀、 快速、 正確地驗(yàn)證精工代碼 ,且操作簡(jiǎn)單、 方便 ,提高了精工液壓板料沖孔機(jī)的工作效率。該開發(fā)思路還可以用于精工沖床、 精工車床、 精工銑床、 加工中心、 激光切割機(jī)、 等離子切割機(jī)等精工加工設(shè)備 ,以起到節(jié)能降耗、 降低成本、 落實(shí)科學(xué)發(fā)展觀 ,建設(shè)節(jié)約型社會(huì)、 向綠色金屬加工邁進(jìn)的作用。目前該系統(tǒng)已經(jīng)應(yīng)用在汽車縱梁沖孔生產(chǎn)線和各種精工液壓板料沖孔設(shè)備中 ,用戶滿意度較高 ,使用效果比國(guó)外同類軟件要好。本文由海天精工文章整理發(fā)表,文章來自網(wǎng)絡(luò)僅參考學(xué)習(xí),本站不承擔(dān)任何法律責(zé)任。http://m.himslangfull.com加工中心專業(yè)制造