999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于全息模型庫(kù)的數(shù)字樣機(jī)運(yùn)動(dòng)機(jī)構(gòu)交互式創(chuàng)建系統(tǒng)

2019-04-01 12:28:56劉宏新安晶玉王登宇
關(guān)鍵詞:界面模型系統(tǒng)

劉宏新 安晶玉 王登宇 蘇 航

(東北農(nóng)業(yè)大學(xué)工程學(xué)院, 哈爾濱 150030)

0 引言

機(jī)械設(shè)計(jì)是整個(gè)機(jī)械工程質(zhì)量的重要保證,而傳統(tǒng)機(jī)械設(shè)計(jì)已無(wú)法滿足當(dāng)下需求,機(jī)械設(shè)計(jì)智能化發(fā)展已成為必然趨勢(shì)[1-2]。智能化設(shè)計(jì)在航空航天和汽車工程等領(lǐng)域已進(jìn)行較多研究并得到了部分應(yīng)用,但大多數(shù)專業(yè)裝備領(lǐng)域的研究和應(yīng)用還處于起步階段[3-5]。在裝備智能化設(shè)計(jì)過(guò)程中,需要建立一個(gè)包含模型庫(kù)、知識(shí)庫(kù)[6]、推理機(jī)[7]及智能裝配[8]等多個(gè)功能模塊的設(shè)計(jì)系統(tǒng)[9]。對(duì)于該系統(tǒng)模型庫(kù)中具有運(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)仿真功能模塊,用來(lái)檢驗(yàn)?zāi)P蛶?kù)中機(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)仿真軟件。對(duì)于部分 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ù)檢測(cè)和分析等過(guò)程,存在定義運(yùn)動(dòng)副元素多、操作繁瑣、專業(yè)性強(qiáng)等問(wèn)題;對(duì)于專業(yè)的分析軟件,除上述步驟外,模型跨平臺(tái)轉(zhuǎn)換費(fèi)時(shí),模型修改后需反復(fù)導(dǎo)入導(dǎo)出并重新創(chuàng)建機(jī)構(gòu),效率較低[10]。

國(guó)內(nèi)外對(duì)運(yùn)動(dòng)仿真系統(tǒng)進(jìn)行了相關(guān)研究[11-20],這些系統(tǒng)分別研究了機(jī)床加工時(shí)加工工具的運(yùn)動(dòng)過(guò)程、船舶航行的實(shí)時(shí)運(yùn)動(dòng)、水下航行器的水下動(dòng)態(tài)等,系統(tǒng)專用性強(qiáng),主要借助運(yùn)動(dòng)仿真輔助解決某項(xiàng)具體問(wèn)題,不以提供通用的運(yùn)動(dòng)機(jī)構(gòu)創(chuàng)建及仿真的方法和技術(shù)為研究目的。

近年來(lái),本課題組一直致力于裝備智能化設(shè)計(jì)系統(tǒng)的研究,提出了基于物元的數(shù)字模型全息標(biāo)識(shí)體系[21-22];研究參數(shù)化建模方法,解決了模型快速變型的問(wèn)題[23];基于物元標(biāo)識(shí),研究了一種智能虛擬裝配技術(shù)[8];針對(duì)數(shù)字模型的標(biāo)準(zhǔn)化構(gòu)建,利用模塊聚類方法,實(shí)現(xiàn)了對(duì)模型庫(kù)中模型的智能存儲(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)全息模型庫(kù)[21],研究一種交互式運(yùn)動(dòng)機(jī)構(gòu)創(chuàng)建系統(tǒng)。使用 Windows API 函數(shù),實(shí)現(xiàn)對(duì)創(chuàng)建運(yùn)動(dòng)機(jī)構(gòu)命令的封裝,以弱化專業(yè)背景知識(shí)的限制。

1 技術(shù)選擇與系統(tǒng)方案

1.1 技術(shù)對(duì)比

1.1.1CATIA 二次開(kāi)發(fā)方式

CATIA軟件為用戶提供了多種二次開(kāi)發(fā)接口,其中包括自動(dòng)化對(duì)象編程(V5 Automation)和基于構(gòu)件的應(yīng)用程序接口(CAA)方式。具體來(lái)說(shuō),即為宏錄制和組件應(yīng)用架構(gòu)(CAA-RADE)方式[25-27]。宏錄制能錄制較簡(jiǎn)單的 CATIA 操作過(guò)程并自動(dòng)生成代碼,但用其來(lái)錄制運(yùn)動(dòng)仿真操作時(shí),無(wú)法得到關(guān)鍵操作的代碼;組件應(yīng)用架構(gòu)是專業(yè)的開(kāi)發(fā)技術(shù),其功能強(qiáng)大,但專業(yè)開(kāi)發(fā)技能要求高且入門困難[28]。綜上所述,通過(guò)以上兩種開(kāi)發(fā)方式實(shí)現(xiàn)該系統(tǒng)預(yù)設(shè)計(jì)的功能較為困難。

1.1.2Windows API函數(shù)

Windows API(Windows application programming interface,簡(jiǎn)稱API)是針對(duì)Windows操作系統(tǒng)的應(yīng)用程序接口。API是一系列函數(shù)、宏、數(shù)據(jù)類型等的集合,可使用Windows提供的接口來(lái)實(shí)現(xiàn)所需功能[29]。API函數(shù)能夠擴(kuò)展編程語(yǔ)言的功能,以VB為例,當(dāng)VB本身提供的語(yǔ)句、函數(shù)和控件不便甚至無(wú)法實(shí)現(xiàn)的操作時(shí),可以考慮使用API函數(shù)實(shí)現(xiàn)。同時(shí),API函數(shù)具有涉及面廣、數(shù)量眾多及使用方便的特點(diǎn),使程序的功能更加完善。

在VB中可以方便地使用API函數(shù),只需先對(duì)其聲明,即可同VB自身函數(shù)一樣直接調(diào)用。聲明API函數(shù)的作用是確定將要使用的API函數(shù)的名稱、函數(shù)所在的文件、函數(shù)中使用的參數(shù)及其類型和數(shù)據(jù)傳輸方式及函數(shù)本身的函數(shù)類型。

聲明API函數(shù)的語(yǔ)句格式如下:

[Public/Private] Declare Function API函數(shù)名 Lib “該函數(shù)所在的文件名” [Alias “該函數(shù)的別名”] [(變量名及變量類型說(shuō)明)] As API函數(shù)類型說(shuō)明調(diào)用API函數(shù):

變量=API函數(shù)(函數(shù)參數(shù))[30]。

1.2 總體方案與技術(shù)流程

1.2.1系統(tǒng)分析

為避免用戶通過(guò)直接定義專業(yè)且繁瑣的運(yùn)動(dòng)副來(lái)創(chuàng)建運(yùn)動(dòng)機(jī)構(gòu),作者預(yù)設(shè)計(jì)操作簡(jiǎn)便且具有通用性的運(yùn)動(dòng)機(jī)構(gòu)創(chuàng)建系統(tǒng)。系統(tǒng)能夠?qū)⒕邆鋵I(yè)知識(shí)的添加運(yùn)動(dòng)副過(guò)程自動(dòng)化實(shí)現(xiàn),且具有與 DMU 工作臺(tái)創(chuàng)建運(yùn)動(dòng)機(jī)構(gòu)同樣的性能,可對(duì)任一產(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

2 模型預(yù)處理與運(yùn)動(dòng)機(jī)構(gòu)分析

2.1 模型預(yù)處理

為使交互式運(yùn)動(dòng)機(jī)構(gòu)創(chuàng)建系統(tǒng)實(shí)現(xiàn)智能化,需要對(duì)存入農(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]。針對(duì) 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è)功能模塊的需求。曾在開(kāi)發(fā)智能虛擬裝配模塊時(shí),運(yùn)用CATIA的自動(dòng)化對(duì)象編程(V5 Automation)開(kāi)發(fā)方式,充分結(jié)合數(shù)字模型實(shí)體特征要素和部分創(chuàng)建要素,利用 HybridShapeFactory (混合形狀)對(duì)象的AddNewPointCoord、AddNewLinePtPt、AddNewAxisLine、AddNewPlaneOffset、AddNewPlane1Curve和AddNew-PointOnSurface等方法,通過(guò)交互界面,以點(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)建要素,因此,對(duì)于含有高副的模型需對(duì)其創(chuàng)建運(yùn)動(dòng)副構(gòu)建要素。為提高模型預(yù)處理的效率,通過(guò)人機(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

針對(duì)高副中的點(diǎn)、曲線和曲面構(gòu)建要素,采用宏錄制的開(kāi)發(fā)方式,輔以人機(jī)交互界面可快速便捷的創(chuàng)建構(gòu)建要素。

在圖4左側(cè)欄界面上可完成點(diǎn)要素的創(chuàng)建,創(chuàng)建點(diǎn)曲線和點(diǎn)曲面高副中的點(diǎn)要素時(shí),將宏錄制的程序修改后,其語(yǔ)法為

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)”按鈕即可在對(duì)應(yīng)零件上創(chuàng)建要素“點(diǎn)”。

圖4右側(cè)界面上可創(chuàng)建曲線要素,曲線要素是基于零件幾何體下與構(gòu)建要素輪廓一致的草圖和草圖對(duì)應(yīng)的實(shí)體,利用創(chuàng)成式外形設(shè)計(jì)工作臺(tái)的“投影”命令,投影生成曲線構(gòu)建要素。

其語(yǔ)法為

Set partDocument1=documents1.Item(Text5.Text)

其中,Text5.Text為在“零件編號(hào)”中輸入的默認(rèn)后綴為 .CATPart的零件編號(hào)。

Set pad1=shapes1.Item(Text6.Text)

其中,Text6.Text為在“草圖對(duì)應(yīng)的實(shí)體”中輸入對(duì)應(yīng)的實(shí)體名稱,如凸臺(tái).1。

當(dāng)在“零件編號(hào)”和“草圖對(duì)應(yīng)的實(shí)體”中輸入完成后,通過(guò)“曲線”按鈕可完成創(chuàng)建曲線要素。此外,因點(diǎn)曲面中的曲面要素可直接選用實(shí)體,所以,無(wú)需對(duì)其創(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)建要素,故不需對(duì)模型作預(yù)處理。

2.2 運(yùn)動(dòng)機(jī)構(gòu)分析

2.2.1標(biāo)識(shí)運(yùn)動(dòng)副構(gòu)建要素

低副構(gòu)建要素選用模型上已存在的部分約束參考元素。通過(guò)圖4交互界面,為機(jī)構(gòu)中各高副創(chuàng)建構(gòu)建要素。所需構(gòu)建要素完善后按標(biāo)識(shí)規(guī)則命名各構(gòu)建要素,并將其標(biāo)識(shí)在模型結(jié)構(gòu)樹(shù)上。在該實(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)樹(shù)上已標(biāo)識(shí)了運(yùn)動(dòng)副構(gòu)建要素,為使系統(tǒng)程序自動(dòng)獲取標(biāo)識(shí)信息,需將結(jié)構(gòu)樹(shù)上的標(biāo)識(shí)信息導(dǎo)出。運(yùn)用 CATIA 裝配體工作臺(tái)“發(fā)布”界面的“導(dǎo)出”命令,如圖7所示,結(jié)合“搜索”命令,如圖8所示,采用Windows API和宏錄制技術(shù)編寫(xiě)程序,通過(guò)人機(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

通過(guò)程序?qū)崿F(xiàn)直接點(diǎn)選結(jié)構(gòu)樹(shù)及三維模型上的信息較為困難。因此,本文結(jié)合CATIA“搜索”命令檢索所需的信息,點(diǎn)擊菜單欄中“編輯”下拉菜單中的“搜索”命令打開(kāi)搜索界面,結(jié)合該界面中“名稱”欄和“預(yù)突出顯示”按鈕即可搜索到對(duì)應(yīng)名稱的對(duì)象,界面如圖8所示。

通過(guò)圖9中交互界面可操作“搜索”命令,“搜索”命令檢索出結(jié)構(gòu)樹(shù)上所有已標(biāo)識(shí)的構(gòu)建要素,并將標(biāo)識(shí)信息添加到“發(fā)布”界面,再通過(guò)該界面上的“導(dǎo)出”命令即可將圖5中標(biāo)識(shí)信息導(dǎo)出成.txt文本。

為了簡(jiǎn)化“搜索”界面的操作并且可以導(dǎo)出標(biāo)識(shí)信息,需將裝配體各零件的“零件幾何體”隱藏。為實(shí)現(xiàn)任一裝配體各零件的隱藏功能,后臺(tái)程序?qū)⒆詣?dòng)讀取模型結(jié)構(gòu)樹(shù)并將其信息輸出,再?gòu)脑撔畔⒅泻Y選出零件的“零件編號(hào)”,“零件編號(hào)”是實(shí)現(xiàn)隱藏“零件幾何體”功能的關(guān)鍵信息。

利用ProductDocument對(duì)象的ExportData方法快速輸出裝配模型結(jié)構(gòu)樹(shù),語(yǔ)句為[17]

3)果實(shí)淀粉系數(shù)。蘋(píng)果成熟過(guò)程中淀粉含量逐漸降低,淀粉遇到碘溶液時(shí)會(huì)呈現(xiàn)藍(lán)色,所以把蘋(píng)果切開(kāi),將其橫斷面浸入配制好的碘液中30秒,觀察果肉變藍(lán)的面積和程度,可反映果實(shí)的成熟度。不同品種的蘋(píng)果成熟過(guò)程中淀粉含量的變化特性不同,可以制作不同品種蘋(píng)果成熟過(guò)程中淀粉變藍(lán)的圖譜,判斷成熟度很方便。根據(jù)圖譜,做到蘋(píng)果的適時(shí)采收。

oProductDocument.ExportData (fileName, format)

其中,fileName為輸出保存的完整路徑,format為輸出格式類型。

利用所得到的結(jié)構(gòu)樹(shù)信息,可快速獲取零部件編號(hào)信息。

隱藏各零件是在已知各零件“零件編號(hào)”的基礎(chǔ)上,利用 Item 方法實(shí)現(xiàn),其語(yǔ)句為

Set partDocument1=documents1.Item (PartName)

Set body1=bodies1.Item(“零件幾何體”)

其中,PartName 為各零件的“零件編號(hào)”,隱藏的是各零件的“零件幾何體”。

圖9界面上所示的“打開(kāi)模型”、“打開(kāi)發(fā)布和搜索”、“添加到發(fā)布并導(dǎo)出”、“保存”、“退出”操作是應(yīng)用 Windows API 技術(shù),通過(guò)控制窗口句柄及在菜單中位置來(lái)實(shí)現(xiàn)的。具體調(diào)用的 API 函數(shù)有:FindWindow、FindWindowEx、GetMenu、GetSubMenu、GetMenuItemID、SendMessage、WM_COMMAND、WM_LBUTTONDOWN、WM_LBUTTONUP。其語(yǔ)句為

(1) 聲明FindWindow:

Public Declare Function FindWindow Lib “user32” Alias “FindWindowA” (ByVal lp ClassName As String, ByVal lpWindowName As String) As Long

FindWindow 尋找 CATIA 的頂級(jí)窗口,裝配體工作臺(tái)頂級(jí)窗口句柄為“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ù)可以通過(guò)“導(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)

常量用來(lái)模擬鼠標(biāo)動(dòng)作,SendMessage 與常量配合將獲取的菜單 ID 及“導(dǎo)出”消息發(fā)給 FindWindow 或 FindWindowEx 找到的窗口,等待消息處理完畢即可打開(kāi)“搜索”和“發(fā)布”界面,并在該界面上完成相應(yīng)操作。

3 關(guān)鍵技術(shù)

系統(tǒng)通過(guò) API函數(shù)調(diào)用 DMU 工作臺(tái)操作界面、模擬手動(dòng)操作的方式創(chuàng)建運(yùn)動(dòng)機(jī)構(gòu),簡(jiǎn)潔的人機(jī)操作界面下封裝著大量復(fù)雜的程序。

3.1 系統(tǒng)程序框圖

以 VB 為開(kāi)發(fā)語(yǔ)言,使用 CATIA 二次開(kāi)發(fā)接口,調(diào)用 Windows API 函數(shù),結(jié)合“搜索”命令,輔以人機(jī)交互界面,即可完成運(yùn)動(dòng)副構(gòu)建要素的自動(dòng)搜索和輸入,并生成相應(yīng)的運(yùn)動(dòng)副,快速、簡(jiǎn)單地實(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 技術(shù)節(jié)點(diǎn)

3.2.1CATIA的訪問(wèn)

通過(guò)編程訪問(wèn)CATIA的對(duì)象有很多不同的方法。對(duì)于其他程序或腳本來(lái)說(shuō),CATIA只是一個(gè)OLE(Object linking and embedding)自動(dòng)化對(duì)象服務(wù)。任何能訪問(wèn)COM(Component object model)對(duì)象的程序或腳本都能訪問(wèn)CATIA的對(duì)象并對(duì)其進(jìn)行操作。采用VB對(duì)CATIA進(jìn)行進(jìn)程外訪問(wèn),腳本利用CreateObject方法訪問(wèn)CATIA[25]。代碼如下

Set CATIA=CreateObject("CATIA.Application")

3.2.2打開(kāi) DMU 工作臺(tái)

訪問(wèn)CATIA后并未進(jìn)入到DMU工作臺(tái)。通過(guò)調(diào)用 API 函數(shù)FindWindow、GetMenu、GetSubMenu、GetMenuItemID和SendMessage打開(kāi)DMU模塊,其實(shí)現(xiàn)過(guò)程為:

聲明FindWindow后,調(diào)用FindWindow尋找CATIA的頂級(jí)窗口,并得到該窗口句柄“CATIA V5”。

聲明GetMenu、GetSubMenu、GetMenuItemID,使用GetMenu、GetSubMenu函數(shù)分別獲取“開(kāi)始”菜單及其彈出式菜單的句柄并通過(guò)GetMenuItemID返回位于菜單下指定位置處的菜單ID。

圖10 系統(tǒng)程序框圖Fig.10 Block diagram of system

聲明SendMessage后,該函數(shù)將獲取的菜單ID以消息的形式發(fā)給FindWindow找到的窗口,等待消息處理完畢即可打開(kāi)DMU工作臺(tái)。

3.2.3添加運(yùn)動(dòng)副構(gòu)建要素

在手動(dòng)操作中,通過(guò)在三維模型上點(diǎn)選相應(yīng)的點(diǎn)、線、面添加運(yùn)動(dòng)副構(gòu)建要素。而在該系統(tǒng)中,為避開(kāi)添加運(yùn)動(dòng)副過(guò)程中專業(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)副過(guò)程的封裝及構(gòu)建要素的自動(dòng)選取。

在CATIA軟件中,因三維模型大小和位置的不確定性,運(yùn)用程序?qū)崿F(xiàn)在實(shí)體上選取構(gòu)建要素較為困難。因此,本文利用“搜索”命令檢索所需的構(gòu)建要素,“搜索”界面中“名稱”欄和“預(yù)突出顯示”即可搜索到對(duì)應(yīng)名稱的構(gòu)建要素。用程序?qū)崿F(xiàn)在“名稱”中輸入搜索對(duì)象(構(gòu)建要素)的過(guò)程可分為將搜索對(duì)象名稱復(fù)制到剪切板和將對(duì)象名稱添加到“名稱”欄兩步。

(1)將搜索對(duì)象名稱復(fù)制到剪切板

后臺(tái)程序控制在“名稱”中輸入搜索對(duì)象,且搜索對(duì)象可為子產(chǎn)品、零件以及零件上的點(diǎn)線面等,本文運(yùn)用 clipboard(剪切板)方法,將待搜索的運(yùn)動(dòng)副構(gòu)建要素名稱復(fù)制到剪切板,其語(yǔ)法為

Str1 = RCombo1.Text

Clipboard.Clear

Clipboard.SetText str1

其中,Text 表示待搜索對(duì)象的名稱;Clipboard.Clear 為清空剪切板;Clipboard.SetText str1 為獲取 RCombo1.Text 的文本到剪切板上。在本文中,將待搜索對(duì)象的名稱賦值給 str1,并將 str1 攜帶的信息復(fù)制在剪切板上,為粘貼操作做準(zhǔn)備。

(2)將對(duì)象名稱添加到“名稱”欄

通過(guò)程序已將待搜索對(duì)象的名稱復(fù)制到剪切板。在本文中,要將已復(fù)制好的名稱添加到“搜索”界面的“名稱”欄,還需通過(guò)程序獲得“搜索”界面的絕對(duì)坐標(biāo)位置、移動(dòng)鼠標(biāo)位置到“名稱”欄、鼠標(biāo)激活“名稱”欄編輯框、復(fù)制對(duì)象名稱到“名稱”欄編輯框等步驟來(lái)完成。

① 獲得“搜索”界面絕對(duì)坐標(biāo)位置

“名稱”欄在“搜索”界面上,為實(shí)現(xiàn)在“搜索”界面上完成操作,需要利用API 函數(shù)GetWindowRect 來(lái)獲得圖8界面的絕對(duì)坐標(biāo)位置,其語(yǔ)法為

聲明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)中為“搜索”界面的句柄,且以此來(lái)鎖定此操作將應(yīng)用在該界面上。lpRect 指向一個(gè) RECT 結(jié)構(gòu)的指針,該參數(shù)接收該窗口的左上角和右下角的屏幕坐標(biāo),以確定該窗口的絕對(duì)坐標(biāo)位置,從而可以獲得“搜索”界面絕對(duì)坐標(biāo)位置。

② 移動(dòng)鼠標(biāo)位置到“名稱”欄

確定了“搜索”界面的絕對(duì)坐標(biāo),再通過(guò)絕對(duì)坐標(biāo)的調(diào)整將鼠標(biāo)位置移動(dòng)到“名稱”欄。API 函數(shù)SetCursorPos 可實(shí)現(xiàn)程序控制此步操作,其語(yǔ)法為

聲明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 表示,其具體語(yǔ)法為

A=SetCursorPos(rect1.left+10, rect1.top+5)

其中l(wèi)eft和top函數(shù)用來(lái)準(zhǔn)確地定位光標(biāo)位置,將光標(biāo)位置移動(dòng)到“名稱”欄。

③ 模擬鼠標(biāo)激活“名稱”欄編輯框

用程序控制光標(biāo)的位置以激活當(dāng)前位置的編輯框,在鼠標(biāo)位置移動(dòng)到“名稱”欄的基礎(chǔ)上,通過(guò)程序模擬鼠標(biāo)單擊的方式激活“名稱”欄編輯框,該鼠標(biāo)模擬事件可用API 函數(shù)mouse_event 實(shí)現(xiàn),其語(yǔ)句為

聲明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)絕對(duì)位置(MOUSEEVENTF _ABSOLUTE),指定水平和垂直方向的絕對(duì)位置或相對(duì)運(yùn)動(dòng),cButtons和 dwExtraInfo 通常未使用。因此,若不指定鼠標(biāo)絕對(duì)位置,則后4個(gè)參數(shù)通常指為0,本系統(tǒng)中的具體語(yǔ)法為

mouse_event &H2 Or &H4, 0, 0, 0, 0

聲明常量 &H2 和 &H4:

Public Const MOUSEEVENTF_LEFTDOWN = &H2

Public Const MOUSEEVENTF_LEFTUP = &H4

通過(guò)模擬該鼠標(biāo)操作即可激活“名稱”欄編輯框。

④ 粘貼對(duì)象名稱到“名稱”欄編輯框

已將對(duì)象名稱復(fù)制到剪切板、光標(biāo)移動(dòng)到“名稱”欄編輯框處,為實(shí)現(xiàn)在“名稱”欄輸入待搜索對(duì)象名稱以查找該對(duì)象,后臺(tái)程序?qū)⒆詣?dòng)把剪切板上的對(duì)象名稱粘貼到“名稱”欄編輯框處。

表2 鼠標(biāo)動(dòng)作虛擬鍵Tab.2 Mouse action virtual key

熟知的復(fù)制、粘貼操作方式有兩種:?jiǎn)螕羰髽?biāo)右鍵操作和鍵盤操作(Ctrl+C、Ctrl+V),本文中,應(yīng)用 API 函數(shù)keybd_event 來(lái)模擬復(fù)制、粘貼的鍵盤操作,語(yǔ)句為

聲明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ù)無(wú)返回值,其4個(gè)參數(shù)含義見(jiàn)表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鍵,其語(yǔ)句為

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)制值,二鍵的代碼組合即可模擬將對(duì)象名稱粘貼到“名稱”編輯框。

4 技術(shù)組裝與實(shí)例分析

4.1 人機(jī)交互界面

在該數(shù)字樣機(jī)運(yùn)動(dòng)機(jī)構(gòu)創(chuàng)建系統(tǒng)中設(shè)置人機(jī)交互界面,以達(dá)到簡(jiǎn)便的創(chuàng)建運(yùn)動(dòng)機(jī)構(gòu)的效果。良好的人機(jī)交互界面能起到智能化引導(dǎo)的作用,使功能模塊化,操作簡(jiǎn)單化,適應(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所示,通過(guò)該界面可進(jìn)入運(yùn)動(dòng)機(jī)構(gòu)創(chuàng)建界面如圖12所示,該界面上可以打開(kāi)數(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 實(shí)例分析

4.2.1運(yùn)動(dòng)機(jī)構(gòu)構(gòu)建

通過(guò)系統(tǒng)主界面進(jìn)入到運(yùn)動(dòng)機(jī)構(gòu)創(chuàng)建界面。在運(yùn)動(dòng)機(jī)構(gòu)創(chuàng)建界面中,通過(guò)“選擇運(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)需要,通過(guò)選擇“是否新建機(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)撥齒相對(duì)運(yùn)動(dòng)軌跡

在同一撥齒上標(biāo)記兩點(diǎn),使用軌跡繪制功能輸出兩點(diǎn)軌跡。用直線將同一時(shí)刻對(duì)應(yīng)的兩點(diǎn)連接,獲取撥齒的空間運(yùn)動(dòng)狀態(tài),如圖15所示??梢?jiàn)撥齒滿足撥禾過(guò)程保持豎直狀態(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)軌跡。按相對(duì)運(yùn)動(dòng)軌跡中方法標(biāo)記同一撥齒上同一時(shí)刻兩點(diǎn),用直線將同一時(shí)刻對(duì)應(yīng)的兩點(diǎn)連接,如圖16所示,能夠形成理想的余擺線作業(yè)軌跡。

圖15 撥齒相對(duì)運(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)工作條件下,于撥齒端放置傳感器,檢測(cè)撥齒端線速度。不同時(shí)刻撥齒端線速度如圖17所示,最大撥齒端線速度約為2.5 m/s,未超過(guò)上限值3 m/s[34],減少了撥齒對(duì)作物沖擊過(guò)大造成的落粒損失。

5 結(jié)論

(1)采用Windows API函數(shù)第三方控制DMU工作臺(tái)的界面操作,對(duì)比于CATIA的其他二次開(kāi)發(fā)技術(shù),可以完全模擬手動(dòng)操作過(guò)程,且為研究的運(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)建要素,對(duì)機(jī)構(gòu)作預(yù)處理,即完善構(gòu)建要素并在結(jié)構(gòu)樹(shù)上按標(biāo)識(shí)規(guī)則將其重命名,結(jié)合CATIA“搜索”命令,即可在結(jié)構(gòu)樹(shù)上檢索到所需的運(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ǔ)。

猜你喜歡
界面模型系統(tǒng)
一半模型
Smartflower POP 一體式光伏系統(tǒng)
WJ-700無(wú)人機(jī)系統(tǒng)
ZC系列無(wú)人機(jī)遙感系統(tǒng)
重要模型『一線三等角』
國(guó)企黨委前置研究的“四個(gè)界面”
重尾非線性自回歸模型自加權(quán)M-估計(jì)的漸近分布
基于FANUC PICTURE的虛擬軸坐標(biāo)顯示界面開(kāi)發(fā)方法研究
連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
人機(jī)交互界面發(fā)展趨勢(shì)研究
主站蜘蛛池模板: 亚洲IV视频免费在线光看| 97亚洲色综久久精品| 欧美精品1区2区| 国产AV无码专区亚洲A∨毛片| 亚洲欧洲日产国码无码av喷潮| 久久不卡国产精品无码| 国模私拍一区二区| 欧日韩在线不卡视频| 亚洲男人的天堂网| 日本黄色a视频| 在线播放真实国产乱子伦| 色香蕉影院| 女高中生自慰污污网站| 一级毛片在线直接观看| 99久久亚洲精品影院| 2021国产v亚洲v天堂无码| 污污网站在线观看| 中文字幕 日韩 欧美| 国产91熟女高潮一区二区| 欧美不卡二区| julia中文字幕久久亚洲| 91欧美在线| 中文字幕精品一区二区三区视频| 中文字幕色站| 欧美午夜小视频| 国产成人福利在线| 99热在线只有精品| 丝袜亚洲综合| 蜜臀av性久久久久蜜臀aⅴ麻豆| 97在线观看视频免费| 毛片在线看网站| 亚洲国产成人精品青青草原| 精品撒尿视频一区二区三区| 欧美日韩国产在线播放| 精品偷拍一区二区| 免费毛片网站在线观看| 中文字幕一区二区人妻电影| 久久婷婷色综合老司机| 一级做a爰片久久免费| 国产精品主播| 91精品情国产情侣高潮对白蜜| 国产精品一区二区久久精品无码| 日韩精品成人在线| 欧美一级专区免费大片| 91精品视频播放| 四虎永久在线视频| 亚洲天堂网在线观看视频| 国产在线观看人成激情视频| 天天视频在线91频| 亚洲AV成人一区国产精品| 精品国产成人高清在线| 99在线视频免费| 亚洲第一在线播放| 亚洲国产精品日韩av专区| 国产黄网永久免费| 欧美精品亚洲精品日韩专| 国产69精品久久| 丁香六月综合网| 在线观看av永久| 国产精品三级av及在线观看| 国产乱码精品一区二区三区中文| 欧美日韩动态图| 国产爽妇精品| 国产欧美在线观看一区| 精品国产网| 国内精品视频| 亚洲精品无码AV电影在线播放| 国产成人精品在线| 亚洲一区国色天香| 国产精品短篇二区| 黄色网站在线观看无码| 欧美午夜理伦三级在线观看| 久久中文电影| 久草青青在线视频| 欧美日韩中文字幕二区三区| 精品久久久久无码| 日韩国产综合精选| 美女高潮全身流白浆福利区| 精品视频一区二区三区在线播| 亚洲欧美一区二区三区麻豆| 欧美另类第一页| 亚洲永久免费网站|