劉宏新 安晶玉 王登宇 蘇 航
(東北農(nóng)業(yè)大學(xué)工程學(xué)院, 哈爾濱 150030)
機(jī)械設(shè)計(jì)是整個(gè)機(jī)械工程質(zhì)量的重要保證,而傳統(tǒng)機(jī)械設(shè)計(jì)已無法滿足當(dāng)下需求,機(jī)械設(shè)計(jì)智能化發(fā)展已成為必然趨勢[1-2]。智能化設(shè)計(jì)在航空航天和汽車工程等領(lǐng)域已進(jìn)行較多研究并得到了部分應(yīng)用,但大多數(shù)專業(yè)裝備領(lǐng)域的研究和應(yīng)用還處于起步階段[3-5]。在裝備智能化設(shè)計(jì)過程中,需要建立一個(gè)包含模型庫、知識(shí)庫[6]、推理機(jī)[7]及智能裝配[8]等多個(gè)功能模塊的設(shè)計(jì)系統(tǒng)[9]。對于該系統(tǒng)模型庫中具有運(yùn)動(dòng)屬性的機(jī)構(gòu),其數(shù)字樣機(jī)可以替代實(shí)物樣機(jī)供設(shè)計(jì)者分析與運(yùn)動(dòng)相關(guān)的性能和參數(shù),這就需要在智能化設(shè)計(jì)系統(tǒng)中增加運(yùn)動(dòng)仿真功能模塊,用來檢驗(yàn)?zāi)P蛶熘袡C(jī)構(gòu)的運(yùn)動(dòng)特性并獲取其運(yùn)動(dòng)學(xué)參數(shù)。
目前,企業(yè)大多使用 CAD 軟件的運(yùn)動(dòng)仿真模塊或?qū)I(yè)的運(yùn)動(dòng)仿真軟件。對于部分 CAD 軟件的運(yùn)動(dòng)仿真模塊,在定義零件之間的運(yùn)動(dòng)副創(chuàng)建運(yùn)動(dòng)機(jī)構(gòu)、編制運(yùn)動(dòng)規(guī)則、設(shè)置傳感器、仿真、數(shù)據(jù)檢測和分析等過程,存在定義運(yùn)動(dòng)副元素多、操作繁瑣、專業(yè)性強(qiáng)等問題;對于專業(yè)的分析軟件,除上述步驟外,模型跨平臺(tái)轉(zhuǎn)換費(fèi)時(shí),模型修改后需反復(fù)導(dǎo)入導(dǎo)出并重新創(chuàng)建機(jī)構(gòu),效率較低[10]。
國內(nèi)外對運(yùn)動(dòng)仿真系統(tǒng)進(jìn)行了相關(guān)研究[11-20],這些系統(tǒng)分別研究了機(jī)床加工時(shí)加工工具的運(yùn)動(dòng)過程、船舶航行的實(shí)時(shí)運(yùn)動(dòng)、水下航行器的水下動(dòng)態(tài)等,系統(tǒng)專用性強(qiáng),主要借助運(yùn)動(dòng)仿真輔助解決某項(xiàng)具體問題,不以提供通用的運(yùn)動(dòng)機(jī)構(gòu)創(chuàng)建及仿真的方法和技術(shù)為研究目的。
近年來,本課題組一直致力于裝備智能化設(shè)計(jì)系統(tǒng)的研究,提出了基于物元的數(shù)字模型全息標(biāo)識(shí)體系[21-22];研究參數(shù)化建模方法,解決了模型快速變型的問題[23];基于物元標(biāo)識(shí),研究了一種智能虛擬裝配技術(shù)[8];針對數(shù)字模型的標(biāo)準(zhǔn)化構(gòu)建,利用模塊聚類方法,實(shí)現(xiàn)了對模型庫中模型的智能存儲(chǔ)、組織管理與高效檢索[24]等。以上成果為運(yùn)動(dòng)機(jī)構(gòu)交互式創(chuàng)建系統(tǒng)的研究奠定了良好的基礎(chǔ)。
本文在 CATIA DMU 環(huán)境下,基于農(nóng)機(jī)裝備智能化設(shè)計(jì)系統(tǒng)全息模型庫[21],研究一種交互式運(yùn)動(dòng)機(jī)構(gòu)創(chuàng)建系統(tǒng)。使用 Windows API 函數(shù),實(shí)現(xiàn)對創(chuàng)建運(yùn)動(dòng)機(jī)構(gòu)命令的封裝,以弱化專業(yè)背景知識(shí)的限制。
1.1.1CATIA 二次開發(fā)方式
CATIA軟件為用戶提供了多種二次開發(fā)接口,其中包括自動(dòng)化對象編程(V5 Automation)和基于構(gòu)件的應(yīng)用程序接口(CAA)方式。具體來說,即為宏錄制和組件應(yīng)用架構(gòu)(CAA-RADE)方式[25-27]。宏錄制能錄制較簡單的 CATIA 操作過程并自動(dòng)生成代碼,但用其來錄制運(yùn)動(dòng)仿真操作時(shí),無法得到關(guān)鍵操作的代碼;組件應(yīng)用架構(gòu)是專業(yè)的開發(fā)技術(shù),其功能強(qiáng)大,但專業(yè)開發(fā)技能要求高且入門困難[28]。綜上所述,通過以上兩種開發(fā)方式實(shí)現(xiàn)該系統(tǒng)預(yù)設(shè)計(jì)的功能較為困難。
1.1.2Windows API函數(shù)
Windows API(Windows application programming interface,簡稱API)是針對Windows操作系統(tǒng)的應(yīng)用程序接口。API是一系列函數(shù)、宏、數(shù)據(jù)類型等的集合,可使用Windows提供的接口來實(shí)現(xiàn)所需功能[29]。API函數(shù)能夠擴(kuò)展編程語言的功能,以VB為例,當(dāng)VB本身提供的語句、函數(shù)和控件不便甚至無法實(shí)現(xiàn)的操作時(shí),可以考慮使用API函數(shù)實(shí)現(xiàn)。同時(shí),API函數(shù)具有涉及面廣、數(shù)量眾多及使用方便的特點(diǎn),使程序的功能更加完善。
在VB中可以方便地使用API函數(shù),只需先對其聲明,即可同VB自身函數(shù)一樣直接調(diào)用。聲明API函數(shù)的作用是確定將要使用的API函數(shù)的名稱、函數(shù)所在的文件、函數(shù)中使用的參數(shù)及其類型和數(shù)據(jù)傳輸方式及函數(shù)本身的函數(shù)類型。
聲明API函數(shù)的語句格式如下:
[Public/Private] Declare Function API函數(shù)名 Lib “該函數(shù)所在的文件名” [Alias “該函數(shù)的別名”] [(變量名及變量類型說明)] As API函數(shù)類型說明調(diào)用API函數(shù):
變量=API函數(shù)(函數(shù)參數(shù))[30]。
1.2.1系統(tǒng)分析
為避免用戶通過直接定義專業(yè)且繁瑣的運(yùn)動(dòng)副來創(chuàng)建運(yùn)動(dòng)機(jī)構(gòu),作者預(yù)設(shè)計(jì)操作簡便且具有通用性的運(yùn)動(dòng)機(jī)構(gòu)創(chuàng)建系統(tǒng)。系統(tǒng)能夠?qū)⒕邆鋵I(yè)知識(shí)的添加運(yùn)動(dòng)副過程自動(dòng)化實(shí)現(xiàn),且具有與 DMU 工作臺(tái)創(chuàng)建運(yùn)動(dòng)機(jī)構(gòu)同樣的性能,可對任一產(chǎn)品創(chuàng)建運(yùn)動(dòng)機(jī)構(gòu),具有面向更廣泛用戶的通用性及普適性。規(guī)劃設(shè)計(jì)運(yùn)動(dòng)機(jī)構(gòu)交互式創(chuàng)建系統(tǒng)的功能模塊,按功能及技術(shù)區(qū)域分別設(shè)置 CATIA 運(yùn)用、人機(jī)交互及應(yīng)用技術(shù)3部分及其子系統(tǒng),系統(tǒng)模塊如圖1所示。
圖1 系統(tǒng)模塊Fig.1 System module
1.2.2系統(tǒng)設(shè)計(jì)
以 VB 6.0為編程環(huán)境,調(diào)用Windows API函數(shù),結(jié)合 CATIA“搜索”命令,研究與 CATIA 軟件自帶 DMU 有相同創(chuàng)建運(yùn)動(dòng)機(jī)構(gòu)功能的通用性系統(tǒng),預(yù)設(shè)計(jì)系統(tǒng)實(shí)現(xiàn)操作流程如圖2所示。
圖2 系統(tǒng)操作流程Fig.2 Flow chart of system operation
為使交互式運(yùn)動(dòng)機(jī)構(gòu)創(chuàng)建系統(tǒng)實(shí)現(xiàn)智能化,需要對存入農(nóng)機(jī)裝備智能化設(shè)計(jì)系統(tǒng)的3D模型作預(yù)處理,即在各模型上創(chuàng)建運(yùn)動(dòng)副構(gòu)建要素(運(yùn)動(dòng)副構(gòu)建要素是指構(gòu)建運(yùn)動(dòng)副時(shí)要點(diǎn)選的點(diǎn)、線、面及零件等元素)如圖3所示。在 CATIA 中有16種運(yùn)動(dòng)接合方式,用以定義兩零件間的運(yùn)動(dòng)接合形式,其中,低副為:旋轉(zhuǎn)、棱形、圓柱、螺釘、球面和平面;高副為:點(diǎn)曲線、滑動(dòng)曲線、滾動(dòng)曲線和點(diǎn)曲面;關(guān)聯(lián)運(yùn)動(dòng)副為:U 形接合、CV 接合、齒輪、齒輪齒條、電纜接合和剛性接合[31]。針對 DMU 工作臺(tái)運(yùn)動(dòng)接合方式種類多、構(gòu)建要素復(fù)雜的情況,將模型預(yù)處理分為以下3部分:
圖3 運(yùn)動(dòng)副構(gòu)建要素Fig.3 Construction elements of motion pairs
(1)低副:裝備智能化設(shè)計(jì)系統(tǒng)模型需同時(shí)滿足多個(gè)功能模塊的需求。曾在開發(fā)智能虛擬裝配模塊時(shí),運(yùn)用CATIA的自動(dòng)化對象編程(V5 Automation)開發(fā)方式,充分結(jié)合數(shù)字模型實(shí)體特征要素和部分創(chuàng)建要素,利用 HybridShapeFactory (混合形狀)對象的AddNewPointCoord、AddNewLinePtPt、AddNewAxisLine、AddNewPlaneOffset、AddNewPlane1Curve和AddNew-PointOnSurface等方法,通過交互界面,以點(diǎn)為參考創(chuàng)建點(diǎn)、以線為參考創(chuàng)建線、以軸線為參考創(chuàng)建軸線、以平面為參考創(chuàng)建平面、以平面曲線為參考創(chuàng)建平面和以曲面為參考創(chuàng)建點(diǎn)[8,24],這些約束參考元素的創(chuàng)建是為了滿足虛擬裝配的需求。
因裝配模型上存在的約束參考元素能適應(yīng)低副構(gòu)建要素的需求,所以,低副的構(gòu)建要素可直接選用裝配模型上已有的約束參考元素。
(2)高副:裝配模型上已有的約束參考元素?zé)o法適應(yīng)高副構(gòu)建要素,因此,對于含有高副的模型需對其創(chuàng)建運(yùn)動(dòng)副構(gòu)建要素。為提高模型預(yù)處理的效率,通過人機(jī)交互界面的方式輔助創(chuàng)建高副構(gòu)建要素,其人機(jī)交互界面如圖4所示。
圖4 創(chuàng)建高副構(gòu)建要素人機(jī)交互界面Fig.4 Human-computer interaction interface of creating construction elements of higher pairs
針對高副中的點(diǎn)、曲線和曲面構(gòu)建要素,采用宏錄制的開發(fā)方式,輔以人機(jī)交互界面可快速便捷的創(chuàng)建構(gòu)建要素。
在圖4左側(cè)欄界面上可完成點(diǎn)要素的創(chuàng)建,創(chuàng)建點(diǎn)曲線和點(diǎn)曲面高副中的點(diǎn)要素時(shí),將宏錄制的程序修改后,其語法為
Set partDocument1=documents1.Item(Text1.Text)
其中,Text1.Text 為在“零件編號(hào)”中輸入的默認(rèn)后綴為 .CATPart 的零件編號(hào),且應(yīng)在后綴名前面輸入。
Set hybridShapePointCoord1=
hybridShapeFactory1.AddNewPointCoord
(Text2.Text, Text3.Text, Text4.Text)
分別在Text2、Text3和Text4中輸入X、Y、Z坐標(biāo),單擊“點(diǎn)”按鈕即可在對應(yīng)零件上創(chuàng)建要素“點(diǎn)”。
圖4右側(cè)界面上可創(chuàng)建曲線要素,曲線要素是基于零件幾何體下與構(gòu)建要素輪廓一致的草圖和草圖對應(yīng)的實(shí)體,利用創(chuàng)成式外形設(shè)計(jì)工作臺(tái)的“投影”命令,投影生成曲線構(gòu)建要素。
其語法為
Set partDocument1=documents1.Item(Text5.Text)
其中,Text5.Text為在“零件編號(hào)”中輸入的默認(rèn)后綴為 .CATPart的零件編號(hào)。
Set pad1=shapes1.Item(Text6.Text)
其中,Text6.Text為在“草圖對應(yīng)的實(shí)體”中輸入對應(yīng)的實(shí)體名稱,如凸臺(tái).1。
當(dāng)在“零件編號(hào)”和“草圖對應(yīng)的實(shí)體”中輸入完成后,通過“曲線”按鈕可完成創(chuàng)建曲線要素。此外,因點(diǎn)曲面中的曲面要素可直接選用實(shí)體,所以,無需對其創(chuàng)建構(gòu)建要素。
(3)關(guān)聯(lián)運(yùn)動(dòng)副:此類型運(yùn)動(dòng)副的構(gòu)建要素主要為旋轉(zhuǎn)副和棱形副及軸線,剛性接合的要素為零件。因模型上已存在此類運(yùn)動(dòng)副構(gòu)建要素,故不需對模型作預(yù)處理。
2.2.1標(biāo)識(shí)運(yùn)動(dòng)副構(gòu)建要素
低副構(gòu)建要素選用模型上已存在的部分約束參考元素。通過圖4交互界面,為機(jī)構(gòu)中各高副創(chuàng)建構(gòu)建要素。所需構(gòu)建要素完善后按標(biāo)識(shí)規(guī)則命名各構(gòu)建要素,并將其標(biāo)識(shí)在模型結(jié)構(gòu)樹上。在該實(shí)例中存在多個(gè)相同的零件,其運(yùn)動(dòng)副構(gòu)建要素相同,因此,圖5標(biāo)識(shí)結(jié)果中只列出其中之一。
圖5 割臺(tái)運(yùn)動(dòng)副構(gòu)建要素的創(chuàng)建與標(biāo)識(shí)Fig.5 Creation and identification of construction elements of cutting table
從圖5可看出,構(gòu)建要素標(biāo)識(shí)存在規(guī)律性,其一般規(guī)律如圖6所示。E為構(gòu)建要素英文的首字母,為了加以區(qū)別,部分構(gòu)建要素用英文前兩個(gè)字母表示。A是被標(biāo)識(shí)構(gòu)建要素所在的零件,B則為與A構(gòu)成運(yùn)動(dòng)副的另一零件。此種方法具有普適性,同時(shí)能保證標(biāo)識(shí)容易被記憶。分析割臺(tái)各零件間的運(yùn)動(dòng)關(guān)系,可得其運(yùn)動(dòng)副及構(gòu)建要素如表1所示。
圖6 構(gòu)建要素標(biāo)識(shí)規(guī)則Fig.6 Identification rules of construction element
2.2.2導(dǎo)出標(biāo)識(shí)信息
在數(shù)字模型結(jié)構(gòu)樹上已標(biāo)識(shí)了運(yùn)動(dòng)副構(gòu)建要素,為使系統(tǒng)程序自動(dòng)獲取標(biāo)識(shí)信息,需將結(jié)構(gòu)樹上的標(biāo)識(shí)信息導(dǎo)出。運(yùn)用 CATIA 裝配體工作臺(tái)“發(fā)布”界面的“導(dǎo)出”命令,如圖7所示,結(jié)合“搜索”命令,如圖8所示,采用Windows API和宏錄制技術(shù)編寫程序,通過人機(jī)交互界面將標(biāo)識(shí)信息導(dǎo)出成 .txt 格式并保存到指定位置,交互界面如圖9所示。
表1 割臺(tái)接合種類及其構(gòu)建要素Tab.1 Types of joints and construction elements of cutting table
圖7 “發(fā)布”界面上的“導(dǎo)出”命令Fig.7 “Export” command on “Publish” interface
圖8 “搜索”界面Fig.8 “Search” interface
圖9 導(dǎo)出標(biāo)識(shí)信息交互界面Fig.9 Interaction interface of exporting identification information
通過程序?qū)崿F(xiàn)直接點(diǎn)選結(jié)構(gòu)樹及三維模型上的信息較為困難。因此,本文結(jié)合CATIA“搜索”命令檢索所需的信息,點(diǎn)擊菜單欄中“編輯”下拉菜單中的“搜索”命令打開搜索界面,結(jié)合該界面中“名稱”欄和“預(yù)突出顯示”按鈕即可搜索到對應(yīng)名稱的對象,界面如圖8所示。
通過圖9中交互界面可操作“搜索”命令,“搜索”命令檢索出結(jié)構(gòu)樹上所有已標(biāo)識(shí)的構(gòu)建要素,并將標(biāo)識(shí)信息添加到“發(fā)布”界面,再通過該界面上的“導(dǎo)出”命令即可將圖5中標(biāo)識(shí)信息導(dǎo)出成.txt文本。
為了簡化“搜索”界面的操作并且可以導(dǎo)出標(biāo)識(shí)信息,需將裝配體各零件的“零件幾何體”隱藏。為實(shí)現(xiàn)任一裝配體各零件的隱藏功能,后臺(tái)程序?qū)⒆詣?dòng)讀取模型結(jié)構(gòu)樹并將其信息輸出,再從該信息中篩選出零件的“零件編號(hào)”,“零件編號(hào)”是實(shí)現(xiàn)隱藏“零件幾何體”功能的關(guān)鍵信息。
利用ProductDocument對象的ExportData方法快速輸出裝配模型結(jié)構(gòu)樹,語句為[17]
3)果實(shí)淀粉系數(shù)。蘋果成熟過程中淀粉含量逐漸降低,淀粉遇到碘溶液時(shí)會(huì)呈現(xiàn)藍(lán)色,所以把蘋果切開,將其橫斷面浸入配制好的碘液中30秒,觀察果肉變藍(lán)的面積和程度,可反映果實(shí)的成熟度。不同品種的蘋果成熟過程中淀粉含量的變化特性不同,可以制作不同品種蘋果成熟過程中淀粉變藍(lán)的圖譜,判斷成熟度很方便。根據(jù)圖譜,做到蘋果的適時(shí)采收。
oProductDocument.ExportData (fileName, format)
其中,fileName為輸出保存的完整路徑,format為輸出格式類型。
利用所得到的結(jié)構(gòu)樹信息,可快速獲取零部件編號(hào)信息。
隱藏各零件是在已知各零件“零件編號(hào)”的基礎(chǔ)上,利用 Item 方法實(shí)現(xiàn),其語句為
Set partDocument1=documents1.Item (PartName)
Set body1=bodies1.Item(“零件幾何體”)
其中,PartName 為各零件的“零件編號(hào)”,隱藏的是各零件的“零件幾何體”。
圖9界面上所示的“打開模型”、“打開發(fā)布和搜索”、“添加到發(fā)布并導(dǎo)出”、“保存”、“退出”操作是應(yīng)用 Windows API 技術(shù),通過控制窗口句柄及在菜單中位置來實(shí)現(xiàn)的。具體調(diào)用的 API 函數(shù)有:FindWindow、FindWindowEx、GetMenu、GetSubMenu、GetMenuItemID、SendMessage、WM_COMMAND、WM_LBUTTONDOWN、WM_LBUTTONUP。其語句為
(1) 聲明FindWindow:
Public Declare Function FindWindow Lib “user32” Alias “FindWindowA” (ByVal lp ClassName As String, ByVal lpWindowName As String) As Long
FindWindow 尋找 CATIA 的頂級窗口,裝配體工作臺(tái)頂級窗口句柄為“CATIA V5-[Product1]”、“搜索”命令的句柄為“搜索”、“發(fā)布”命令的句柄為“發(fā)布”。
(2) 聲明GetMenu、GetSubMenu、GetMenuItemID:
Public Declare Function GetMenu Lib "user32" Alias "GetMenu" (ByVal hwnd As Long) As Long
Public Declare Function GetSubMenu Lib "user32" Alias "GetSubMenu" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Public Declare Function GetMenuItemID Lib "user32.dll" (ByVal hMenu As Long, ByVal nPos As Integer) As Long
GetMenu、GetSubMenu 和 GetMenuItemID 函數(shù)配合鎖定命令在菜單中的位置,用以上函數(shù)即可確定“搜索”和“發(fā)布”命令在 CATIA 菜單下的位置。
(3) 聲明 FindWindowEx:
Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Integer, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
FindWindowEx 尋找頂層窗口下的子窗口?!皩?dǎo)出”命令是“發(fā)布”界面上的一個(gè)子窗口, FindWindowEx 函數(shù)可以通過“導(dǎo)出”的句柄找到“導(dǎo)出”按鈕。
(4) 聲明 SendMessage:
Declare Function SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)
常量用來模擬鼠標(biāo)動(dòng)作,SendMessage 與常量配合將獲取的菜單 ID 及“導(dǎo)出”消息發(fā)給 FindWindow 或 FindWindowEx 找到的窗口,等待消息處理完畢即可打開“搜索”和“發(fā)布”界面,并在該界面上完成相應(yīng)操作。
系統(tǒng)通過 API函數(shù)調(diào)用 DMU 工作臺(tái)操作界面、模擬手動(dòng)操作的方式創(chuàng)建運(yùn)動(dòng)機(jī)構(gòu),簡潔的人機(jī)操作界面下封裝著大量復(fù)雜的程序。
以 VB 為開發(fā)語言,使用 CATIA 二次開發(fā)接口,調(diào)用 Windows API 函數(shù),結(jié)合“搜索”命令,輔以人機(jī)交互界面,即可完成運(yùn)動(dòng)副構(gòu)建要素的自動(dòng)搜索和輸入,并生成相應(yīng)的運(yùn)動(dòng)副,快速、簡單地實(shí)現(xiàn)運(yùn)動(dòng)機(jī)構(gòu)創(chuàng)建。該系統(tǒng)完成創(chuàng)建運(yùn)動(dòng)機(jī)構(gòu)的程序框圖如圖10所示。
3.2.1CATIA的訪問
通過編程訪問CATIA的對象有很多不同的方法。對于其他程序或腳本來說,CATIA只是一個(gè)OLE(Object linking and embedding)自動(dòng)化對象服務(wù)。任何能訪問COM(Component object model)對象的程序或腳本都能訪問CATIA的對象并對其進(jìn)行操作。采用VB對CATIA進(jìn)行進(jìn)程外訪問,腳本利用CreateObject方法訪問CATIA[25]。代碼如下
Set CATIA=CreateObject("CATIA.Application")
3.2.2打開 DMU 工作臺(tái)
訪問CATIA后并未進(jìn)入到DMU工作臺(tái)。通過調(diào)用 API 函數(shù)FindWindow、GetMenu、GetSubMenu、GetMenuItemID和SendMessage打開DMU模塊,其實(shí)現(xiàn)過程為:
聲明FindWindow后,調(diào)用FindWindow尋找CATIA的頂級窗口,并得到該窗口句柄“CATIA V5”。
聲明GetMenu、GetSubMenu、GetMenuItemID,使用GetMenu、GetSubMenu函數(shù)分別獲取“開始”菜單及其彈出式菜單的句柄并通過GetMenuItemID返回位于菜單下指定位置處的菜單ID。
圖10 系統(tǒng)程序框圖Fig.10 Block diagram of system
聲明SendMessage后,該函數(shù)將獲取的菜單ID以消息的形式發(fā)給FindWindow找到的窗口,等待消息處理完畢即可打開DMU工作臺(tái)。
3.2.3添加運(yùn)動(dòng)副構(gòu)建要素
在手動(dòng)操作中,通過在三維模型上點(diǎn)選相應(yīng)的點(diǎn)、線、面添加運(yùn)動(dòng)副構(gòu)建要素。而在該系統(tǒng)中,為避開添加運(yùn)動(dòng)副過程中專業(yè)知識(shí)的局限,提高創(chuàng)建運(yùn)動(dòng)機(jī)構(gòu)的效率,調(diào)用API函數(shù),結(jié)合CATIA“搜索”命令,實(shí)現(xiàn)將 DMU 工作臺(tái)創(chuàng)建運(yùn)動(dòng)副過程的封裝及構(gòu)建要素的自動(dòng)選取。
在CATIA軟件中,因三維模型大小和位置的不確定性,運(yùn)用程序?qū)崿F(xiàn)在實(shí)體上選取構(gòu)建要素較為困難。因此,本文利用“搜索”命令檢索所需的構(gòu)建要素,“搜索”界面中“名稱”欄和“預(yù)突出顯示”即可搜索到對應(yīng)名稱的構(gòu)建要素。用程序?qū)崿F(xiàn)在“名稱”中輸入搜索對象(構(gòu)建要素)的過程可分為將搜索對象名稱復(fù)制到剪切板和將對象名稱添加到“名稱”欄兩步。
(1)將搜索對象名稱復(fù)制到剪切板
后臺(tái)程序控制在“名稱”中輸入搜索對象,且搜索對象可為子產(chǎn)品、零件以及零件上的點(diǎn)線面等,本文運(yùn)用 clipboard(剪切板)方法,將待搜索的運(yùn)動(dòng)副構(gòu)建要素名稱復(fù)制到剪切板,其語法為
Str1 = RCombo1.Text
Clipboard.Clear
Clipboard.SetText str1
其中,Text 表示待搜索對象的名稱;Clipboard.Clear 為清空剪切板;Clipboard.SetText str1 為獲取 RCombo1.Text 的文本到剪切板上。在本文中,將待搜索對象的名稱賦值給 str1,并將 str1 攜帶的信息復(fù)制在剪切板上,為粘貼操作做準(zhǔn)備。
(2)將對象名稱添加到“名稱”欄
通過程序已將待搜索對象的名稱復(fù)制到剪切板。在本文中,要將已復(fù)制好的名稱添加到“搜索”界面的“名稱”欄,還需通過程序獲得“搜索”界面的絕對坐標(biāo)位置、移動(dòng)鼠標(biāo)位置到“名稱”欄、鼠標(biāo)激活“名稱”欄編輯框、復(fù)制對象名稱到“名稱”欄編輯框等步驟來完成。
① 獲得“搜索”界面絕對坐標(biāo)位置
“名稱”欄在“搜索”界面上,為實(shí)現(xiàn)在“搜索”界面上完成操作,需要利用API 函數(shù)GetWindowRect 來獲得圖8界面的絕對坐標(biāo)位置,其語法為
聲明GetWindowRect:
Public Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As rect) As Long
A=GetWindowRect (hwnd, lpRect)
其中 GetWindowRect 的函數(shù)功能是獲得整個(gè)窗口的范圍矩形,等號(hào)右側(cè)的值賦給左側(cè)變量(本文中均用A表示)。Hwnd 為窗口句柄,本系統(tǒng)中為“搜索”界面的句柄,且以此來鎖定此操作將應(yīng)用在該界面上。lpRect 指向一個(gè) RECT 結(jié)構(gòu)的指針,該參數(shù)接收該窗口的左上角和右下角的屏幕坐標(biāo),以確定該窗口的絕對坐標(biāo)位置,從而可以獲得“搜索”界面絕對坐標(biāo)位置。
② 移動(dòng)鼠標(biāo)位置到“名稱”欄
確定了“搜索”界面的絕對坐標(biāo),再通過絕對坐標(biāo)的調(diào)整將鼠標(biāo)位置移動(dòng)到“名稱”欄。API 函數(shù)SetCursorPos 可實(shí)現(xiàn)程序控制此步操作,其語法為
聲明SetCursorPos:
Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
A = SetCursorPos (x, y)
其中SetCursorPos 的函數(shù)功能是把光標(biāo)移到屏幕的指定位置。x、y為指定光標(biāo)的新的x、y坐標(biāo),本系統(tǒng)中用GetWindowRect的 lpRect 表示,其具體語法為
A=SetCursorPos(rect1.left+10, rect1.top+5)
其中l(wèi)eft和top函數(shù)用來準(zhǔn)確地定位光標(biāo)位置,將光標(biāo)位置移動(dòng)到“名稱”欄。
③ 模擬鼠標(biāo)激活“名稱”欄編輯框
用程序控制光標(biāo)的位置以激活當(dāng)前位置的編輯框,在鼠標(biāo)位置移動(dòng)到“名稱”欄的基礎(chǔ)上,通過程序模擬鼠標(biāo)單擊的方式激活“名稱”欄編輯框,該鼠標(biāo)模擬事件可用API 函數(shù)mouse_event 實(shí)現(xiàn),其語句為
聲明mouse_event:
Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long )
A = mouse_event(dwFlags,dx,dy,cButtons, dwExtraInfo)
其中,mouse_event 可綜合實(shí)現(xiàn)鼠標(biāo)擊鍵和鼠標(biāo)動(dòng)作。dwFlags 為指定點(diǎn)擊按鈕和鼠標(biāo)動(dòng)作,一些常用模擬鼠標(biāo)動(dòng)作的參數(shù)如表2所示,dx、dy 根據(jù)是否指定了鼠標(biāo)絕對位置(MOUSEEVENTF _ABSOLUTE),指定水平和垂直方向的絕對位置或相對運(yùn)動(dòng),cButtons和 dwExtraInfo 通常未使用。因此,若不指定鼠標(biāo)絕對位置,則后4個(gè)參數(shù)通常指為0,本系統(tǒng)中的具體語法為
mouse_event &H2 Or &H4, 0, 0, 0, 0
聲明常量 &H2 和 &H4:
Public Const MOUSEEVENTF_LEFTDOWN = &H2
Public Const MOUSEEVENTF_LEFTUP = &H4
通過模擬該鼠標(biāo)操作即可激活“名稱”欄編輯框。
④ 粘貼對象名稱到“名稱”欄編輯框
已將對象名稱復(fù)制到剪切板、光標(biāo)移動(dòng)到“名稱”欄編輯框處,為實(shí)現(xiàn)在“名稱”欄輸入待搜索對象名稱以查找該對象,后臺(tái)程序?qū)⒆詣?dòng)把剪切板上的對象名稱粘貼到“名稱”欄編輯框處。
表2 鼠標(biāo)動(dòng)作虛擬鍵Tab.2 Mouse action virtual key
熟知的復(fù)制、粘貼操作方式有兩種:單擊鼠標(biāo)右鍵操作和鍵盤操作(Ctrl+C、Ctrl+V),本文中,應(yīng)用 API 函數(shù)keybd_event 來模擬復(fù)制、粘貼的鍵盤操作,語句為
聲明keybd_event:
Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Integer, ByVal bScan As Integer, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
其中,函數(shù)keybd_event可以模擬鍵盤上的某個(gè)或某些鍵按下或抬起動(dòng)作,且該函數(shù)無返回值,其4個(gè)參數(shù)含義見表3。
表3 參數(shù)含義Tab.3 Parameter list
參數(shù)dwFlags表示各種鍵盤動(dòng)作,VB中它的兩種取值為KEYEVENTF_KEYDOWN 和 KEYEVENTF_KEYUP,分別模擬某鍵的按下和抬起。通常情況下,bScan 和 dwExtraInfo 取值為0。bVk是一個(gè) BYTE 類型值的宏,其取值范圍為1~254,不同值可模擬不同按鍵。為實(shí)現(xiàn)粘貼操作,本系統(tǒng)需模擬Ctrl鍵和V鍵,其語句為
keybd_event17, 0, KEYEVENTF_KEYDOWN, 0
keybd_event86, 0, KEYEVENTF_KEYDOWN, 0
keybd_event86, 0, KEYEVENTF_KEYUP, 0
keybd_event17, 0, KEYEVENTF_KEYUP, 0
其中,17和86分別為 Ctrl 鍵和 V 鍵的十進(jìn)制值,二鍵的代碼組合即可模擬將對象名稱粘貼到“名稱”編輯框。
在該數(shù)字樣機(jī)運(yùn)動(dòng)機(jī)構(gòu)創(chuàng)建系統(tǒng)中設(shè)置人機(jī)交互界面,以達(dá)到簡便的創(chuàng)建運(yùn)動(dòng)機(jī)構(gòu)的效果。良好的人機(jī)交互界面能起到智能化引導(dǎo)的作用,使功能模塊化,操作簡單化,適應(yīng)更廣泛的用戶群體[32-33]。
本系統(tǒng)中的人機(jī)交互主要實(shí)現(xiàn)兩個(gè)功能:運(yùn)動(dòng)副的構(gòu)建和引導(dǎo)創(chuàng)建運(yùn)動(dòng)機(jī)構(gòu)。該系統(tǒng)的主界面如圖11所示,通過該界面可進(jìn)入運(yùn)動(dòng)機(jī)構(gòu)創(chuàng)建界面如圖12所示,該界面上可以打開數(shù)字模型、添加固定件以及選擇運(yùn)動(dòng)接合方式。點(diǎn)擊運(yùn)動(dòng)接合按鈕可切換到運(yùn)動(dòng)副構(gòu)建界面,以旋轉(zhuǎn)運(yùn)動(dòng)副為例,人機(jī)交互界面如圖13所示,在該界面上可構(gòu)建旋轉(zhuǎn)副。
圖11 系統(tǒng)主界面Fig.11 System main interface
圖12 運(yùn)動(dòng)機(jī)構(gòu)創(chuàng)建界面Fig.12 Interface of creating motion mechanism
4.2.1運(yùn)動(dòng)機(jī)構(gòu)構(gòu)建
通過系統(tǒng)主界面進(jìn)入到運(yùn)動(dòng)機(jī)構(gòu)創(chuàng)建界面。在運(yùn)動(dòng)機(jī)構(gòu)創(chuàng)建界面中,通過“選擇運(yùn)動(dòng)接合方式”和“添加固定件”即可創(chuàng)建運(yùn)動(dòng)機(jī)構(gòu)。以“旋轉(zhuǎn)接合”為例,在“選擇運(yùn)動(dòng)接合方式”中選擇“旋轉(zhuǎn)接合”命令,進(jìn)入旋轉(zhuǎn)接合構(gòu)建界面,如圖13所示。根據(jù)機(jī)構(gòu)需要,通過選擇“是否新建機(jī)制”、“設(shè)置構(gòu)建要素”及“是否驅(qū)動(dòng)角度”構(gòu)建旋轉(zhuǎn)運(yùn)動(dòng)副。根據(jù)表1中割臺(tái)各零件間的運(yùn)動(dòng)副形式,依次構(gòu)建模型的其他運(yùn)動(dòng)副,割臺(tái)的運(yùn)動(dòng)機(jī)構(gòu)創(chuàng)建結(jié)果如圖14所示。
圖13 創(chuàng)建旋轉(zhuǎn)副人機(jī)交互界面Fig.13 Human-computer interaction interface of creating revolute join
圖14 聯(lián)合收獲機(jī)割臺(tái)運(yùn)動(dòng)機(jī)構(gòu)Fig.14 Motion mechanism of cutting table and auger of combine harvester
4.2.2運(yùn)動(dòng)機(jī)構(gòu)應(yīng)用
以谷神GK100 型小麥聯(lián)合收獲機(jī)結(jié)構(gòu)及作業(yè)參數(shù)為例,進(jìn)行數(shù)字樣機(jī)分析。該型機(jī)相關(guān)參數(shù)為:割幅B=4 570 mm;撥禾輪直徑D=1 076 mm,轉(zhuǎn)速n為18.5~51.5 r/min;機(jī)器作業(yè)速度vm為2.5~6.9 km/h;撥禾輪轉(zhuǎn)速與機(jī)器作業(yè)速度比λ為1.53~1.72。取vm=3.5 km/h,當(dāng)λ=1.6時(shí)[31],n=27 r/min。
(1)撥齒相對運(yùn)動(dòng)軌跡
在同一撥齒上標(biāo)記兩點(diǎn),使用軌跡繪制功能輸出兩點(diǎn)軌跡。用直線將同一時(shí)刻對應(yīng)的兩點(diǎn)連接,獲取撥齒的空間運(yùn)動(dòng)狀態(tài),如圖15所示??梢姄荦X滿足撥禾過程保持豎直狀態(tài),從而更好地起到梳理推送作用的設(shè)計(jì)要求。
(2)撥齒合成運(yùn)動(dòng)軌跡
當(dāng)vm=3.5 km/h,n=27 r/min時(shí),繪制撥齒合成運(yùn)動(dòng)軌跡。按相對運(yùn)動(dòng)軌跡中方法標(biāo)記同一撥齒上同一時(shí)刻兩點(diǎn),用直線將同一時(shí)刻對應(yīng)的兩點(diǎn)連接,如圖16所示,能夠形成理想的余擺線作業(yè)軌跡。
圖15 撥齒相對運(yùn)動(dòng)軌跡Fig.15 Relative motion trajectory of reel teeth
圖16 撥齒合成運(yùn)動(dòng)軌跡Fig.16 Synthetic motion trajectory of reel teeth
(3)撥齒端線速度
在合成運(yùn)動(dòng)工作條件下,于撥齒端放置傳感器,檢測撥齒端線速度。不同時(shí)刻撥齒端線速度如圖17所示,最大撥齒端線速度約為2.5 m/s,未超過上限值3 m/s[34],減少了撥齒對作物沖擊過大造成的落粒損失。
(1)采用Windows API函數(shù)第三方控制DMU工作臺(tái)的界面操作,對比于CATIA的其他二次開發(fā)技術(shù),可以完全模擬手動(dòng)操作過程,且為研究的運(yùn)動(dòng)機(jī)構(gòu)創(chuàng)建系統(tǒng)提供人機(jī)交互式模式。
圖17 撥齒端線速度Fig.17 Linear velocity at end of reel teeth
(2)為了自動(dòng)準(zhǔn)確捕捉運(yùn)動(dòng)副構(gòu)建要素,對機(jī)構(gòu)作預(yù)處理,即完善構(gòu)建要素并在結(jié)構(gòu)樹上按標(biāo)識(shí)規(guī)則將其重命名,結(jié)合CATIA“搜索”命令,即可在結(jié)構(gòu)樹上檢索到所需的運(yùn)動(dòng)副構(gòu)建要素,從而保證了搜索到的構(gòu)建要素的精確性。
(3)基于人機(jī)交互平臺(tái)選擇或輸入各構(gòu)建要素名稱,結(jié)合Windows系統(tǒng)的粘貼板功能,系統(tǒng)可自動(dòng)搜索構(gòu)建要素并完成相應(yīng)運(yùn)動(dòng)副的構(gòu)建。構(gòu)建要素的自動(dòng)搜索和運(yùn)動(dòng)副的自動(dòng)構(gòu)建是交互式創(chuàng)建運(yùn)動(dòng)機(jī)構(gòu)系統(tǒng)有效性和可行性的基礎(chǔ)。