莊志凡
(特靈科技亞太研發(fā)中心,江蘇 215400)
隨著數(shù)字和自動化技術(shù)的發(fā)展,當(dāng)代企業(yè)的產(chǎn)品具有迭代周期短、標(biāo)準(zhǔn)化程度高等特點(diǎn)。因此,在研發(fā)階段,工程人員通常會制定相同的設(shè)計(jì)規(guī)則和流程來提升產(chǎn)品的開發(fā)效率以及統(tǒng)一數(shù)據(jù)的管理。在這過程中會產(chǎn)生許多帶有重復(fù)性、批量式特點(diǎn)的操作,例如利用同一種方式創(chuàng)建、修改、替換產(chǎn)品模型及圖紙,針對同一系列產(chǎn)品訂制同一套組裝方案以便于工廠部署產(chǎn)線等等。而這些工作又因?yàn)椴僮麟y度較低、需要修改或替換的數(shù)據(jù)差異不大,讓計(jì)算機(jī)替代人去執(zhí)行會更優(yōu)。在三維機(jī)械設(shè)計(jì)軟件Creo Parametric 4.0當(dāng)中,有一個(gè)宏模塊Mapkey,它能夠幫助并提升完成這類型工作的效率和質(zhì)量。
Mapkey中文名稱為映射鍵,主要功能是使用鍵盤調(diào)用宏來自動反映并重現(xiàn)一些Creo的操作流程。用戶一般可以使用手動錄制的方法去創(chuàng)建一個(gè)Mapkey,但這樣通常會讓系統(tǒng)把許多非關(guān)鍵操作環(huán)節(jié)也自動記錄進(jìn)來,最終導(dǎo)致程序運(yùn)行效率低下。當(dāng)更新一個(gè)Mapkey時(shí),相當(dāng)于再重新錄制一遍,因此維護(hù)起來也比較困難。另外,用戶所錄制的Mapkey有時(shí)需要在某種特定情況下才能夠?qū)崿F(xiàn),不具有普遍性、規(guī)律性,不易推廣。對于一些過多重復(fù)的操作,這種錄制方法反而會增加用戶的工作量。雖然目前已有PTC官方手冊作為一手的培訓(xùn)資料,但是該手冊的關(guān)注重點(diǎn)在于基本的使用方法,并未涉及到Mapkey在實(shí)際項(xiàng)目中的進(jìn)階運(yùn)用,學(xué)習(xí)起來有一定的局限性。
本文目的通過研究Mapkey技術(shù)在Creo工程設(shè)計(jì)不同板塊中的實(shí)際應(yīng)用、程序的編寫方法和實(shí)際案例來幫助企業(yè)或個(gè)人用戶能夠深入的了解并運(yùn)用,從而解決上述人工錄制時(shí)產(chǎn)生的一些問題,同時(shí)提升對它的使用效率。
Mapkey 的常用功能之一是快捷鍵。用戶能夠通過一些個(gè)性化的鍵位設(shè)置對Creo單個(gè)或者多個(gè)連續(xù)的命令做一個(gè)快捷鍵驅(qū)動的宏。它的主要特點(diǎn)就是方便輸入和記憶,并減少了人為搜索及調(diào)用指令的時(shí)間。需要注意的是,Mapkey快捷鍵運(yùn)行時(shí)具有一定的優(yōu)先原則。例如有兩個(gè)Mapkey,快捷鍵依次為a和ab,通常無法直接通過鍵盤運(yùn)行程序ab,程序a在鍵盤輸入上具有優(yōu)先執(zhí)行的能力,因此一般不建議設(shè)置單個(gè)字母或者字符的快捷鍵。
在使用Creo的時(shí)候,往往會需要做一些添加、刪除或者替換某些對象的工程變更。當(dāng)該對象只需進(jìn)行單次操作時(shí),通過人工就能快速處理,但當(dāng)它需要按照特定規(guī)則重復(fù)操作的時(shí)候,人工操作的效率就會很低。利用Mapkey技術(shù)能夠完成將一個(gè)周期較長且不限次數(shù)自動循環(huán)的操作,直到最后一個(gè)指令提示操作結(jié)束為止。因此,Mapkey能夠提升在這類型批處理操作上帶來的效率問題。
在Creo內(nèi)進(jìn)行組件的裝配是產(chǎn)品研發(fā)中的一個(gè)重要環(huán)節(jié),對于一些大型的裝配而言,它占內(nèi)存較大會導(dǎo)致模型的卡頓,因此人為進(jìn)行切換和選擇約束參照會變得十分緩慢和笨拙。另外,對于相同或者類似的裝配組件和被裝配組件,它們在Creo內(nèi)部使用的約束及參照對象ID大多相同。在這種前提下,將這些固定選擇類型的操作方式賦予Mapkey,同時(shí)讓它自動讀取并運(yùn)行就能快速精準(zhǔn)的進(jìn)行裝配。
圖1 利用Mapkey進(jìn)行快速裝配流程
有些時(shí)候,全自動的設(shè)計(jì)往往不能夠滿足所有的需求,工程人員需要在其中某幾個(gè)環(huán)節(jié)人工介入來做一些技術(shù)性的判斷,從而達(dá)到人和機(jī)器兩者相互合作的工作模式。Mapkey也能夠提供這樣的人機(jī)交互式的設(shè)計(jì),通常在Mapkey進(jìn)行自動處理期間,進(jìn)入手動編輯模式,等待用戶進(jìn)行一些特殊的操作,再執(zhí)行下一步。如圖2所示,用戶在執(zhí)行一些自動操作前需要檢查部分參數(shù)是否準(zhǔn)確,再決定是否繼續(xù),繼續(xù)則選擇“Resume”,取消選擇“Cancel”。
圖2 暫停宏窗口示例
Mapkey由于自身缺乏邏輯運(yùn)算使得它無法進(jìn)行一些靈活的參數(shù)化設(shè)計(jì),但使用一些第三方的工具進(jìn)行編程就能夠?qū)崿F(xiàn)這一功能,用戶可以對具體的參數(shù)進(jìn)行定義并輸入到第三方程序,同時(shí)將這些參數(shù)進(jìn)行編程運(yùn)算并轉(zhuǎn)換成Mapkey語句,最終把得到的語句傳輸?shù)紺reo軟件內(nèi)部運(yùn)行就能實(shí)現(xiàn)一次參數(shù)化的設(shè)計(jì)過程。
圖3 Mapkey參數(shù)化設(shè)計(jì)流程
表1 Mapkey聲明解析
Mapkey程序主要由Mapkey初始聲明和主語句組成,初始聲明的功能是為了定義該Mapkey以下基本信息:快捷鍵,短描述以及長描述,而長短描述一般是可選項(xiàng),用戶可以忽略。
表2 主語句命令
表3 主語句結(jié)構(gòu)類型
如表2所示,Mapkey主語句的標(biāo)準(zhǔn)結(jié)構(gòu)就是由Mapkey(continued)和執(zhí)行命令組成,其中“;”和“”在主語句的作用與初始聲明相同。
如表3所示,主語句結(jié)構(gòu)通常有三類,第一類為段落式結(jié)構(gòu),由多行語句組成,每一行代表一個(gè)命令的執(zhí)行,由Mapkey(continued) 和“;”“”之間做換行連接,直到執(zhí)行完第N個(gè)命令之后末端刪除續(xù)行符“”表示程序終止。這類型的結(jié)構(gòu)層次分明,便于閱讀,適合代碼偏多的程序。第二類為組合式結(jié)構(gòu),只有一個(gè)Mapkey(continued),每個(gè)命令之間由“;”相隔且不換行。它的特點(diǎn)就是結(jié)構(gòu)比較緊縮,相比段落式閱讀起來比較困難,適合代碼偏少的程序。第三類為單命令分解式結(jié)構(gòu),它與段落式結(jié)構(gòu)相似,將同一個(gè)命令依次拆分成多個(gè)部分并且用Mapkey(continued)和“”換行,該命令除末尾行,每一行結(jié)尾是不需要分號的,表明還未執(zhí)行完畢。該結(jié)構(gòu)只適用于其中單一命令字符過長的程序。在實(shí)際編寫的過程中,用戶可根據(jù)需求來混合使用這三類的結(jié)構(gòu)。
當(dāng)Mapkey主程序的代碼很多且部分代碼語句重復(fù)出現(xiàn)的時(shí)候,編寫起來耗時(shí)較長,維護(hù)時(shí)其難度也會隨之增大,因此現(xiàn)有一種特殊的可嵌套結(jié)構(gòu),能夠在一套程序的某個(gè)位置執(zhí)行另一個(gè)Mapkey的程序,提升維護(hù)和閱讀的效率,嵌套命令如表4所示。
如表5所示,通常有三類嵌套結(jié)構(gòu):第一類為標(biāo)準(zhǔn)嵌套結(jié)構(gòu),可以在快捷鍵ab中執(zhí)行快捷鍵aa的命令1。第二類為同級嵌套結(jié)構(gòu),在快捷鍵ab中先后運(yùn)行快捷鍵aa和ac的命令。第三種為多級嵌套結(jié)構(gòu),在快捷鍵ab中運(yùn)行快捷鍵aa,而同時(shí)在快捷鍵aa的程序中調(diào)用快捷鍵ac的程序,這類結(jié)構(gòu)能實(shí)現(xiàn)最多五級嵌套。
表4 嵌套命令
表5 嵌套結(jié)構(gòu)類型
如表6所示,Mapkey有四種標(biāo)準(zhǔn)語句,主要由命令類型的聲明和命令語句組成。標(biāo)準(zhǔn)命令能夠在Creo內(nèi)進(jìn)行一些常規(guī)的操作;暫停命令能夠?qū)崿F(xiàn)人機(jī)交互,用戶能夠用它讓程序在某個(gè)階段暫停等待操作響應(yīng);系統(tǒng)命令通??梢宰鲆恍〤reo平臺之外的一些程序的操作,例如打開某個(gè)應(yīng)用程序文件;菜單管理器命令一般處理在菜單管理器中的一些操作。
表6 Mapkey四種語句
由于標(biāo)準(zhǔn)命令在程序中的占比最高,下文著重分析標(biāo)準(zhǔn)命令語句字符的編寫。通常它是由三類特殊的字符組成,行為字符、窗口字符以及參數(shù)字符,如圖4所示:
圖4 標(biāo)準(zhǔn)命令字符示例
Mapkey可以完成的標(biāo)準(zhǔn)語句事件類型很多,主要體現(xiàn)在對Creo每個(gè)功能塊的執(zhí)行特點(diǎn),用戶需要定義對應(yīng)的行為字符來模擬這些特點(diǎn)的動作。如下表所示,通常Command 和Activate對應(yīng)的事件就是按鈕或復(fù)選框控件的操作;Update和input 這兩類的事件是通過完成輸入框填寫來完成的,其中update更加的直接和高效;Select就是用戶進(jìn)行列表框、條目框、選項(xiàng)框的選擇事件,它可以模擬在Creo內(nèi)幾乎所有的選擇類型的操作。Mapkey還有其他的的行為字符,例如Key、Open、Close、Trail等等,由于這些字符的使用頻率非常低,故不作具體的說明。
表7 行為字符列表
確定行為字符的事件類型之后,用戶需要去判斷該事件發(fā)生的窗口名稱,在Mapkey內(nèi)部會生成一個(gè)該窗口的字符。除了Command事件以外,一般都需要在行為字符之后輸入相應(yīng)的窗口字符,又因?yàn)閺膶訇P(guān)系需要把它分為一級和二級窗口,由于二級窗口被包含在一級窗口里面,因此它的字符位置通常在一級窗口之后。Creo內(nèi)部的二級窗口字符數(shù)較多,下表展示的是部分常見的一級窗口列表:
表8 一級窗口字符列表
用戶確定執(zhí)行的事件以及窗口之后,就需要找到執(zhí)行命令的字符,它就是參數(shù)字符。參數(shù)字符位置通常在窗口字符之后,它有許多種類型,主要由模擬事件類別所決定。第一類字符通常比較固定,該參數(shù)字符通常會和activate或者Command的事件結(jié)合使用,如果是復(fù)選框的參數(shù),需要在字符后面添加復(fù)選框的值,真為1,假為0。第二類字符是在有限范圍內(nèi)的可變參數(shù),該參數(shù)字符一般和select事件共用,根據(jù)選擇的參數(shù)選擇條件數(shù)量需在字符前面加上對應(yīng)的數(shù)字,通常參數(shù)選擇條件數(shù)量為1或者2。上述兩者字符格式通常是固定的,否則會導(dǎo)致執(zhí)行失敗,而最后一類字符是最自由的,用戶可以隨意去定義這類型的參數(shù),一般會應(yīng)用在input和update事件。
表9 參數(shù)字符類型
下文主要通過一個(gè)具體的自動化案例:創(chuàng)建一個(gè)基于當(dāng)前模型的工程圖來說明利用Mapkey進(jìn)行程序的設(shè)計(jì)的主要思路和具體操作方式。
圖5 notepad++界面和默認(rèn)配置
表10 創(chuàng)建圖紙主要Mapkey字符
(1)分析得知工程圖創(chuàng)建界面中無屏幕捕捉界面會強(qiáng)制終止Mapkey運(yùn)行,并且圖紙創(chuàng)建流程具有很強(qiáng)的通用性,因此選擇使用Mapkey技術(shù)來設(shè)計(jì)自動化方案。本實(shí)例主要利用notepad++作為編程環(huán)境來寫入Mapkey代碼,注意在程序前面更改兩個(gè)配置Mapkey_execution的值no_feedback以及visible_Mapkeys值no,前者能夠防止Mapkey由于程序沒找到指令而終止,后者能夠在運(yùn)行Mapkey的時(shí)候禁止屏幕刷新。
(2)如下圖所示的手動操作順序中,可以生成一些通用的操作:主要事件為選擇、點(diǎn)擊,其字符為Command、select、Activate。依次的窗口為“New”和“New drawing”,其字符為`new`、`dwg_create`,綜上這些字符在創(chuàng)建圖紙的時(shí)候是必不可少的。
圖6 操作事件通用順序
圖7 創(chuàng)建工程圖流程及其Mapkey分解步驟
(3)通過手動操作還能夠找出需要用戶介入的操作:填寫圖紙名稱以及選擇模板。因此,在設(shè)計(jì)這套流程的時(shí)候,需要在圖6中序號1和2,3和4中間進(jìn)入用戶輸入模式,即程序暫停。由此可得圖7中的關(guān)鍵路徑自動化流程。如果不定義二者的手動狀態(tài),程序會以默認(rèn)的配置全自動執(zhí)行,往往與實(shí)際情況不符。
(4)Creo內(nèi)部除了標(biāo)準(zhǔn)實(shí)體還有許多其他類型的模型,主要為族表和裝配。因此要兼顧這兩類模型運(yùn)行的有效性,需要分別對他們進(jìn)行試錯(cuò)分析。根據(jù)實(shí)際操作結(jié)果得知,在程序執(zhí)行到圖紙界面,可能會出現(xiàn)兩種提醒窗口,如圖8所示。因此需要再額外添加兩串命令關(guān)閉該界面:
兩句指令分別點(diǎn)擊界面“Select Instance”及“Open Representation”中的命令“Open”來關(guān)閉窗口,無論運(yùn)行哪一種模型,系統(tǒng)能夠選擇性識別并關(guān)閉。
圖8 族表模型(左)和裝配模型(右)圖紙創(chuàng)建提醒窗口
(5)由于Mapkey在創(chuàng)建圖紙時(shí)會使Creo長期處于運(yùn)行狀態(tài),用戶無法預(yù)知程序執(zhí)行完畢所需的時(shí)間,因此可以在執(zhí)行程序的尾端添加系統(tǒng)dos彈窗命令作為程序終止的一個(gè)信號。
圖9 dos彈窗
(6)最后對Mapkey語句進(jìn)行整體的編碼和調(diào)試。把該文件保存成.pro格式,并導(dǎo)入進(jìn)Creo,用快捷鍵運(yùn)行即可。一旦調(diào)試成功,再將流程圖中填寫圖紙名稱和選擇圖紙模板等用戶操作前后的代碼轉(zhuǎn)換成可嵌套的子程序,可以得到兩套主程序結(jié)構(gòu)方案。圖10是轉(zhuǎn)換前后的程序示意圖,通過比較得出標(biāo)準(zhǔn)程序的字符數(shù)量和行數(shù) (709,15) 相對嵌套程序 (945,24) 較少,因此推薦使用標(biāo)準(zhǔn)程序作為該自動化程序的主要結(jié)構(gòu)。
圖10 標(biāo)準(zhǔn)程序(a)和嵌套程序(b)
綜上所述,結(jié)合實(shí)際自動化需求去做分析,將所需求的通用性和特殊性做一個(gè)分類,來達(dá)到程序的標(biāo)準(zhǔn)統(tǒng)一,能夠方便大多數(shù)的用戶使用。再利用關(guān)鍵路徑設(shè)計(jì)流程,用字符去更新維護(hù)Mapkey,提升模塊使用和開發(fā)的效率。不用情況下的試錯(cuò)分析能夠保證Mapkey執(zhí)行的有效性和穩(wěn)定性,滿足日常的工作所需。這類方法的技術(shù)應(yīng)用適合大多數(shù)Mapkey程序,不過需要注意的是,由于Creo的界面和功能從1.0版本至今變化較大,因此在使用不同版本Mapkey時(shí)要額外關(guān)注所書寫指令能否通過或者已被迭代。最后,希望讀者能夠從本文中獲得一些啟發(fā)和感悟。