李晨蕊,郝 博
(1.沈陽(yáng)理工大學(xué) 機(jī)械工程學(xué)院,遼寧 沈陽(yáng) 110159;2.遼寧機(jī)電職業(yè)技術(shù)學(xué)院,遼寧 丹東 118009)
UG二次開(kāi)發(fā)中C++、KF、GRIP 3種語(yǔ)言的對(duì)比
李晨蕊1,郝 博2
(1.沈陽(yáng)理工大學(xué) 機(jī)械工程學(xué)院,遼寧 沈陽(yáng) 110159;2.遼寧機(jī)電職業(yè)技術(shù)學(xué)院,遼寧 丹東 118009)
為提高UG二次開(kāi)發(fā)效率,改善UG二次開(kāi)發(fā)界面風(fēng)格,以C++、KF、GRIP 3種語(yǔ)言為開(kāi)發(fā)方式,結(jié)合UG/Open MenuScript和UG/Open UIStyler兩種開(kāi)發(fā)工具,對(duì)UG進(jìn)行二次開(kāi)發(fā).通過(guò)實(shí)例對(duì)比,總結(jié)出了3種開(kāi)發(fā)語(yǔ)言的優(yōu)缺點(diǎn).
UG二次開(kāi)發(fā);C++;KF;GRIP;開(kāi)發(fā)方式
C++語(yǔ)言在20世紀(jì)80年代早期被開(kāi)發(fā)出來(lái),是一種基于C語(yǔ)言的面向?qū)ο笳Z(yǔ)言[1],發(fā)展至今已成為市場(chǎng)上使用最廣泛、通用性最強(qiáng)、近于完善的高級(jí)語(yǔ)言.C++保留了C語(yǔ)言原有的優(yōu)點(diǎn),還增加了面向?qū)ο髾C(jī)制.
知識(shí)融合(Knowledge Fusion,KF)是一種新的設(shè)計(jì)思想和工具,是在基于特征的參數(shù)化建模技術(shù)和知識(shí)工程技術(shù)的基礎(chǔ)上發(fā)展起來(lái)的[2-3].KF語(yǔ)言憑借自身開(kāi)發(fā)優(yōu)點(diǎn),能夠直接訪問(wèn)電子表格、數(shù)據(jù)庫(kù)等外部數(shù)據(jù)資源,具有聯(lián)合其他分析和優(yōu)化軟件的能力,并且能夠與其他UG二次開(kāi)發(fā)工具(如UG/Open MenuScript、UG/Open UIStyler等)進(jìn)行集成與開(kāi)發(fā).
GRIP語(yǔ)言是UG軟件自身攜帶的一種早期開(kāi)發(fā)語(yǔ)言,是UGS公司提供的一個(gè)用于UG二次開(kāi)發(fā)的軟件工具.利用GRIP程序可以完成UG的各種交互操作.在UG1.0到4.0版本的界面中,許多功能是通過(guò)GRIP語(yǔ)言開(kāi)發(fā)的[4].
1.1UG二次開(kāi)發(fā)中C++語(yǔ)言的特點(diǎn)
C++語(yǔ)言開(kāi)發(fā)支持多種程序設(shè)計(jì)風(fēng)格,其許多特性以庫(kù)的形式存在,以保證語(yǔ)言簡(jiǎn)潔和開(kāi)發(fā)運(yùn)行高效.與C語(yǔ)言相比,C++語(yǔ)言引入了面向?qū)ο蟮母拍?,使得UG二次開(kāi)發(fā)的人機(jī)交互界面更簡(jiǎn)潔.
借助UG自帶的2 000多種API函數(shù),結(jié)合高級(jí)語(yǔ)言C++以及編程軟件Visual Studio,可以對(duì)UG進(jìn)行二次開(kāi)發(fā).但需要注意的是,市場(chǎng)上Visual Studio和UG的版本很多,并不是所有的軟件版本都能互相兼容.UG7.0默認(rèn)支持VS2009;UG7.5、8.0、8.5默認(rèn)支持VS2010;UG9.0、10.0默認(rèn)支持VS2012.
1.2UG二次開(kāi)發(fā)中KF語(yǔ)言的特點(diǎn)
KF語(yǔ)言是解釋性、聲明性和需求驅(qū)動(dòng)性的語(yǔ)言,并且具有面向?qū)ο蠛蛯哟位奶攸c(diǎn).KF語(yǔ)言能夠與NX交互系統(tǒng)同步.
在NX界面打開(kāi)后綴名為dfa的文件,在KF導(dǎo)航器中使用系統(tǒng)提供的類和函數(shù)能夠?yàn)槠涮砑又R(shí)約束功能.這些知識(shí)約束功能被定義儲(chǔ)存在三維模型中,可以通過(guò)腳本文件的修改實(shí)現(xiàn)參數(shù)的傳遞,并在模型的參數(shù)改變后進(jìn)行推理計(jì)算,也可以使用KF語(yǔ)言編寫(xiě)程序文件,創(chuàng)建更加復(fù)雜的產(chǎn)品參數(shù)化設(shè)計(jì)系統(tǒng).
1.3UG二次開(kāi)發(fā)中GRIP語(yǔ)言的特點(diǎn)
GRIP語(yǔ)言是UG自帶開(kāi)發(fā)性語(yǔ)言,能夠與UG緊密結(jié)合,具有完整的語(yǔ)法規(guī)則.其程序結(jié)構(gòu)和內(nèi)部函數(shù)可與其他語(yǔ)言相互調(diào)用.GRIP語(yǔ)言是面向工程師的語(yǔ)言,但是只有經(jīng)過(guò)UG自帶的NX Open grip編譯,鏈接后生成可執(zhí)行的程序性文件,才可以在UG窗口運(yùn)行.
UG/Open GRIP功能強(qiáng)大,是UG內(nèi)嵌語(yǔ)言,主要實(shí)現(xiàn)圖形繪制和裝配、工程圖生成,并對(duì)一些外部文件實(shí)現(xiàn)管理功能,可以完成UG的各種交互操作[5].通過(guò)人機(jī)交互界面,它幾乎能夠?qū)崿F(xiàn)用戶的所有要求.
2.1C++語(yǔ)言在UG二次開(kāi)發(fā)中的應(yīng)用
C++語(yǔ)言在UG二次開(kāi)發(fā)中應(yīng)用離不開(kāi)C++語(yǔ)言的基礎(chǔ)知識(shí).在此基礎(chǔ)上,結(jié)合2 000多個(gè)API函數(shù)就可以開(kāi)發(fā)出想要的UG界面.開(kāi)發(fā)時(shí)首先要?jiǎng)?chuàng)建NX Open Wizard,在創(chuàng)建過(guò)程中要注意Visual Studio和UG的版本配置問(wèn)題.在Visual Studio環(huán)境中創(chuàng)建程序,鏈接UG NX,進(jìn)行編譯和調(diào)試,生成后綴名為dll的文件(必須啟動(dòng)UG Gateway才能運(yùn)行)[6],在UG界面NX Open中運(yùn)行后綴名為dll的文件,實(shí)現(xiàn)UG界面的二次開(kāi)發(fā).在該過(guò)程中,通常會(huì)使用UG/Open MenuScript和UG/Open UIStyler,兩種輔助開(kāi)發(fā)工具,讓開(kāi)發(fā)更容易,并且可得到更加優(yōu)美的UG界面.UG二次開(kāi)發(fā)(用C++語(yǔ)言)總體開(kāi)發(fā)流程如圖1所示.
圖1 UG二次開(kāi)發(fā)(用C++語(yǔ)言)總體開(kāi)發(fā)流程
2.2KF語(yǔ)言在UG二次開(kāi)發(fā)中的應(yīng)用
研究KF語(yǔ)言編程應(yīng)熟悉KF語(yǔ)言的語(yǔ)法元素,如類(Class)、屬性(Attribute)、表達(dá)式(Expression)、信息傳遞(Information Passing)、需求順序(Demand Order)、需求值(Demand Value)和參數(shù)框架(Reference Frames)[7].圖2所示為語(yǔ)法元素的聲明.
圖2 語(yǔ)法元素的聲明
運(yùn)用帶有記事本功能的軟件編寫(xiě)KF程序,保存為后綴名為dfa的腳本文件.打開(kāi)NX創(chuàng)建新文件,在所有應(yīng)用模塊選項(xiàng)選擇“知識(shí)融合”,并從知識(shí)融合工具條中選擇“DFA管理器(DFA Manager)”,指定知識(shí)融合搜索路徑,執(zhí)行程序.UG二次開(kāi)發(fā)(用KF語(yǔ)言)總體開(kāi)發(fā)流程如圖3所示.
圖3 UG二次開(kāi)發(fā)(用KF語(yǔ)言)總體開(kāi)發(fā)流程
2.3GRIP語(yǔ)言在UG二次開(kāi)發(fā)中的應(yīng)用
一個(gè)GRIP源程序由一系列的GRIP語(yǔ)句組成.一般說(shuō)來(lái),一個(gè)GRIP源程序可分為5個(gè)部分,每個(gè)部分都使用一組GRIP命令.它具體由申明語(yǔ)句部分、初始化語(yǔ)句部分、交互語(yǔ)句部分、過(guò)程處理語(yǔ)句部分和結(jié)束語(yǔ)句部分組成(圖4).
圖4 GRIP源程序的組成
進(jìn)行GRIP源程序編譯、鏈接、生成時(shí),可執(zhí)行GRIP程序,但需要正確使用GRIP的高級(jí)開(kāi)發(fā)環(huán)境(GRADE).其具體方法如下:首先打開(kāi)高級(jí)開(kāi)發(fā)環(huán)境界面,然后設(shè)置GRIP文件所在文件夾的安裝目錄,接著編寫(xiě)(或修改)源程序(可打開(kāi)帶有記事本功能的軟件進(jìn)行編寫(xiě)或修改);最后對(duì)編寫(xiě)完成的程序進(jìn)行編譯、鏈接,生成可執(zhí)行的后綴名為grx的文件. UG二次開(kāi)發(fā)(用GRIP語(yǔ)言)總體開(kāi)發(fā)流程如圖5所示.
圖5 UG二次開(kāi)發(fā)(用GRIP語(yǔ)言)總體開(kāi)發(fā)流程
以一個(gè)長(zhǎng)50 mm、寬40 mm、高30 mm的塊模型為實(shí)例.它附有6個(gè)直徑為10 mm的通孔.該模型實(shí)例的二維草圖和基于MBD模型的三維標(biāo)注如圖6所示.
圖6 模型實(shí)例
本文運(yùn)用C++、KF、GRIP 3種開(kāi)發(fā)語(yǔ)言,結(jié)合UG中UG/Open MenuScript和UG/Open UIStyler兩種開(kāi)發(fā)工具,創(chuàng)建了同種實(shí)例模型.其菜單和對(duì)話框的創(chuàng)建如圖7所示.
3.1基于C++語(yǔ)言的UG二次開(kāi)發(fā)實(shí)例創(chuàng)建
結(jié)合UG API函數(shù),用C++編程軟件Visual Studio編寫(xiě)的主要程序如下:
UF_FEATURE_SIGN sign;
UF_FEATURE_SIGN sign1;
圖7 針對(duì)塊模型的菜單和對(duì)話框創(chuàng)建
static void do_ugopen_api(float abc[],float orig1[],float orig2[])
{
int method=0; double block_orig[3]={orig1[0],orig1[1],orig1[2]};
double cyl_orig[3]={orig2[0],orig2[1],orig2[2]}; char *block_len[3];char bb[4][20];
char *cyl_height; char *cyl_diam;char cc[3][20]; double direction[3]={0,0,m};
char *number_in_x;char *distance_x;char *number_in_y;
char *distance_y;char dd[5][20]; tag_t blk_obj;tag_t cyl_obj_id;uf_list_p_t feature_list;
tag_t feature_obj_id;
......
UF_CALL(UF_MODL_create_block1(sign,block_orig,block_len,&blk_obj));
.......
UF_CALL(UF_MODL_create_cyl1(sign1,cyl_orig,cyl_height,cyl_diam,direction,&cyl_obj_id));
......
UF_CALL(UF_MODL_create_list(&feature_list));
UF_CALL(UF_MODL_put_list_item(feature_list, cyl_obj_id));
UF_CALL(UF_MODL_create_linear_iset(method,number_in_x,distance_x,number_in_y,distance_y,feature_list, &feature_obj_id));return;
}
3.2基于KF語(yǔ)言的UG二次開(kāi)發(fā)實(shí)例創(chuàng)建
在實(shí)例中,需要設(shè)置KF的搜索路徑來(lái)保存新建的DFA文件,并使用KF提供的集成編輯器(Integrated Class Editor,ICE)創(chuàng)建KF實(shí)例.利用記事本編寫(xiě)KF程序的主要代碼如下:
#! NX/KF 4.0
DefClass: %model1.prt (ug_base_part);
(Child) new_ug_block: {
Class, ug_block;
length, 50;
Width, 40;
Height, 30;
Origin, Point(0,0,0);
X_Axis, Vector(1,0,0);
Y_Axis, Vector(0,1,0);
};
(Child) new_ug_cylinder1: {
Class, ug_cylinder;
Diameter, 10;
Height, 30;
Origin, Point(1,1,0);
Direction, Vector(0,0,1);
Operation, Subtract;
Target, {new_ug_block:};
};
.......
3.3基于GRIP語(yǔ)言的UG二次開(kāi)發(fā)實(shí)例創(chuàng)建
利用記事本編寫(xiě)GRIP程序的主要代碼如下:
$生成實(shí)體
$目的:演示實(shí)體創(chuàng)建過(guò)程
ENTITY/BLOCK,CYL1,CYL2,CYL3,CYL4,CYL5,CYL6,PIM1,PIM2,PIM3,PIM4,PIM5,PIM6
$生成長(zhǎng)方體
BLOCK = SOLBLK/ORIGIN,0,0,0,SIZE,50,40,30
$生成圓柱
CYL1 = SOLBLK/ORIGIN,10,10,0,HEIGHT,30,DIAMTR,10
CYL2 = SOLBLK/ORIGIN,10,30,0,HEIGHT,30,DIAMTR,10
CYL3 = SOLBLK/ORIGIN,25,10,0,HEIGHT,30,DIAMTR,10
CYL4 = SOLBLK/ORIGIN,25,30,0,HEIGHT,30,DIAMTR,10
CYL5 = SOLBLK/ORIGIN,40,10,0,HEIGHT,30,DIAMTR,10
CYL6 = SOLBLK/ORIGIN,40,30,0,HEIGHT,30,DIAMTR,10
$生成實(shí)體(減運(yùn)算)
PIM1 = SUBTRA/BLOCK,WITH,CYL1
PIM2 = SUBTRA/PIM1,WITH,CYL2
PIM3 = SUBTRA/PIM2,WITH,CYL3
PIM4 = SUBTRA/PIM3,WITH,CYL4
PIM5 = SUBTRA/PIM4,WITH,CYL5
PIM6 = SUBTRA/PIM5,WITH,CYL6
HALT
3.4綜合分析
(1)通常認(rèn)為,C++是用途最廣的開(kāi)發(fā)語(yǔ)言之一,且C++語(yǔ)言是一種最早應(yīng)用的工程類語(yǔ)言,比較完善.通過(guò)實(shí)例創(chuàng)建可看出,C++語(yǔ)言的邏輯性很強(qiáng),結(jié)構(gòu)比較完整.但是,在開(kāi)發(fā)過(guò)程中,由于該語(yǔ)言本身過(guò)度復(fù)雜,甚至有的開(kāi)發(fā)人員難以理解語(yǔ)言的意思,受C++編譯系統(tǒng)自身復(fù)雜性的影響,編寫(xiě)難度大,因此復(fù)雜C++程序的正確性難以保證,即使能夠編寫(xiě),編譯器也可能存在許多問(wèn)題.目前,各軟件的外部接口不是特別完善,對(duì)C++編程軟件的接口要求比較高,在配置方面還存在一些技術(shù)性問(wèn)題.
(2)KF語(yǔ)言無(wú)需在編譯、鏈接、源代碼文件修改后更新設(shè)計(jì),只要重載即可.KF語(yǔ)言的規(guī)則創(chuàng)建不需要考慮編程的先后順序,只要在規(guī)則中賦予依賴關(guān)系即可.如果對(duì)象被交互地修改建模尺寸,KF語(yǔ)言描述會(huì)自動(dòng)地反映此變化.但是,目前市場(chǎng)上基于KF語(yǔ)言開(kāi)發(fā)的相關(guān)文獻(xiàn)較少,KF語(yǔ)言的普及程度比較低,只限于專業(yè)人士之間的溝通.從實(shí)例中可以看出,雖然KF語(yǔ)言簡(jiǎn)單易懂,但是邏輯性相比C++語(yǔ)言來(lái)說(shuō)較弱.在編譯、運(yùn)行方面, NX軟件對(duì)KF語(yǔ)言的處理還不夠完善,好多問(wèn)題只能由開(kāi)發(fā)者憑借自身技術(shù)能力去處理,而不能通過(guò)計(jì)算機(jī)輔助解決.
(3)GRIP語(yǔ)言通俗易懂,與一般通用語(yǔ)言一樣,具有完整的語(yǔ)法規(guī)則和程序結(jié)構(gòu),并且作為UG自帶的開(kāi)發(fā)性語(yǔ)言,和UG兼容性比較好,無(wú)需利用外部接口技術(shù).GRIP語(yǔ)言本身相對(duì)簡(jiǎn)單,邏輯性強(qiáng).但是它只適合早期UG1.0-4.0的簡(jiǎn)單開(kāi)發(fā)界面,對(duì)于現(xiàn)階段各種風(fēng)格界面來(lái)說(shuō),GRIP語(yǔ)言開(kāi)發(fā)能力相比C++語(yǔ)言尚有欠缺.相比基于知識(shí)工程的KF語(yǔ)言,雖然GRIP語(yǔ)言發(fā)展較為完善,但有時(shí)候卻不能實(shí)現(xiàn)開(kāi)發(fā)者的設(shè)計(jì)意圖.
(4)通過(guò)實(shí)例分析,KF語(yǔ)言和GRIP語(yǔ)言對(duì)于簡(jiǎn)單功能模塊的開(kāi)發(fā)較為合適.如果開(kāi)發(fā)具有一定風(fēng)格且具有一定難度系數(shù)的UG界面,選擇C++語(yǔ)言作為開(kāi)發(fā)方式更能滿足開(kāi)發(fā)者的需求.
基于一定語(yǔ)言的UG二次開(kāi)發(fā)在目前市場(chǎng)上有很多方式,除了本文所比較的C++、KF、GRIP外,還有JAVA、.net、Python、SNAP等語(yǔ)言.本文結(jié)合模型實(shí)例對(duì)3種典型的UG開(kāi)發(fā)語(yǔ)言進(jìn)行對(duì)比,總結(jié)出了C++語(yǔ)言、KF語(yǔ)言、GRIP語(yǔ)言在UG二次開(kāi)發(fā)中的優(yōu)缺點(diǎn).設(shè)計(jì)者和開(kāi)發(fā)商可以根據(jù)產(chǎn)品的開(kāi)發(fā)環(huán)境和自身?xiàng)l件,選擇較為合適的開(kāi)發(fā)方式.
[1] 董志鵬,侯艷書(shū). Visual C++編程從基礎(chǔ)到應(yīng)用[M]. 北京: 清華大學(xué)出版社,2014:5-6.
[2] 劉建釗,花 鋒.知識(shí)融合程序設(shè)計(jì)與開(kāi)發(fā)[M]. 北京: 電子工業(yè)出版社,2015:1-2.
[3] Chen Z.Knowledge an acquisition assisted by CLIPS programming[J].Engineering Application of Artificial Intelligence,1999,12:379-387.
[4] 王慶林.UG/Open GRIP實(shí)用編程基礎(chǔ)[M].北京:清華大學(xué)出版社,2002:1-2.
[5] 秦 闖,劉戰(zhàn)強(qiáng),葉洪濤,等.基于UG二次開(kāi)發(fā)技術(shù)的CAD/CAE/CAM軟件集成方法研究[J].機(jī)床與液壓,2015,43(9):141-144.
[6] 何 麗,孫文磊,王宏偉.UG二次開(kāi)發(fā)技術(shù)在WEB零件庫(kù)系統(tǒng)開(kāi)發(fā)中的應(yīng)用研究[J].機(jī)床與液壓,2011,39(20):9-11,105.
[7] 朱文華,杜素芬. 知識(shí)融合程序設(shè)計(jì)與應(yīng)用[M]. 上海: 上海交通大學(xué)出版社,2011:10.
ComparisonofC++,KFandGRIPinSecondaryDevelopmentofUG
LI Chen-rui1, HAO Bo2
(1.School of Mechanical Engineering,Shenyang Ligong University,Shenyang 110159,China;2. Liaoning Jidian Polytechnic,Dandong 118009,China)
In order to improve the cycle speed and the interface style in the Secondary Development of UG, it is very important to choose the right development language. This paper summarizes the advantages and disadvantages of languages of C++, KF and GRIP by introducing the development methods with the languages of C++, KF and GRIP combining with the two development tools of UG / Open MenuScript and UG / Open UIStyler and respective second development of UGcompares and the case study with the practice of the development process, that is, designers and developers can choose a suitable development mode according to their own needs.
secondary development of UG;C++;KF;GRIP;development mode
2017-04-10
國(guó)家自然科學(xué)基金資助項(xiàng)目(61672360)
李晨蕊(1992-),女,河北張家口人,碩士研究生,研究方向?yàn)閿?shù)字化、網(wǎng)絡(luò)化設(shè)計(jì)與制造技術(shù).
1006-3269(2017)03-0038-05
TP391.7
A
10.3969/j.issn.1006-3269.2017.03.009