周曉慧,陳岳坪,楊 翊
(1.廣西科技大學(xué) 機(jī)械工程學(xué)院,廣西 柳州 545006;2.柳州市特種設(shè)備檢驗(yàn)所,廣西 柳州 545006)
數(shù)控機(jī)床的效率發(fā)揮與程序的傳輸方式密切相關(guān)。目前,隨著以“先進(jìn)制造技術(shù)”為主題的制造業(yè)興起[1],數(shù)控機(jī)床依靠傳統(tǒng)的數(shù)控程序傳輸方式已無法滿足需求。同時(shí),隨著原位檢測技術(shù)的快速發(fā)展,原位測量的高速高精度化,發(fā)展面向集成的原位檢測技術(shù),實(shí)現(xiàn)原位檢測系統(tǒng)與CAD/CAM系統(tǒng)的無縫連接已成必然趨勢。因此,針對以上要求,對UG6.0進(jìn)行二次開發(fā),增加基于加工檢測集成的數(shù)控機(jī)床串口通訊系統(tǒng)模塊,實(shí)現(xiàn)原位檢測與CAD/CAM的有效集成。
圖1 基于UG的數(shù)控機(jī)床串口通訊系統(tǒng)的組成Fig.1 Composition of Serial Communication System for CNC Machine Tool Based on UG
通訊系統(tǒng)主要是由計(jì)算機(jī)系統(tǒng)、數(shù)控機(jī)床系統(tǒng)、測頭系統(tǒng)、工件和UG軟件五部分組成[2],如圖1所示。UG軟件在整個(gè)系統(tǒng)中起著至關(guān)重要的作用,通過對它增加基于加工檢測集成的數(shù)控機(jī)床串口通訊系統(tǒng)模塊,實(shí)現(xiàn)了PC端與NC端的數(shù)據(jù)傳輸,可實(shí)現(xiàn)邊傳輸邊加工,邊傳輸邊檢測的操作。
目前,用戶對UG的二次開發(fā)主要還是依靠UG/Open API,也稱User Function[3]。另外,用戶界面的設(shè)計(jì)開發(fā)大多是采用UG/Open UI Styler。然而,同Windows應(yīng)用程序開發(fā)工具相比,UI Styler包含的控件相對較少,功能有限,受到的局限因素較多,編程過程復(fù)雜,執(zhí)行效果較差。盡管UG的應(yīng)用程序采用Microsoft Visual C++6.0(VC)作為編譯器,但是由于受到UG/Open API的限制,目前還不能在UG/Open API中直接調(diào)用Microsoft Fundament Class(MFC)。
數(shù)控機(jī)床原位檢測要實(shí)現(xiàn)的效果是,待加工工件在數(shù)控機(jī)床上加工完畢,沒有進(jìn)行二次裝夾的情況下,將機(jī)床上的加工刀具直接換成檢測測頭,當(dāng)檢測測頭的紅寶石觸碰工件時(shí)[4],機(jī)床能夠?qū)崟r(shí)記錄當(dāng)前工件上觸碰點(diǎn)的坐標(biāo)值(實(shí)際上是測頭球心的坐標(biāo)值,只是在建立檢測工件坐標(biāo)系時(shí)加了偏置補(bǔ)償,因而數(shù)控系統(tǒng)中記錄的坐標(biāo)值就轉(zhuǎn)化成工件上檢測點(diǎn)的坐標(biāo)值了)并通過宏程序傳輸?shù)綑C(jī)床串口,供原位檢測系統(tǒng)計(jì)算機(jī)端的采集和處理。因此,對于接收檢測結(jié)果的編程應(yīng)采用消息響應(yīng)機(jī)制,即發(fā)現(xiàn)信號啟動(dòng)接收機(jī)制,并將檢測結(jié)果在屏幕上進(jìn)行實(shí)時(shí)顯示。而MFC擁有著編程可視化、使用方便、控件豐富、強(qiáng)大易控制并且還可利用Windows的消息機(jī)制,直接開發(fā)中文界面的特點(diǎn)。因此,我們要突破UG/Open API對MFC直接調(diào)用的禁錮,尋求一種新方法完成基于UG數(shù)控機(jī)床串口通訊系統(tǒng)。
對UG進(jìn)行二次開發(fā)的第一步是要設(shè)置UF源程序的環(huán)境變量,其目的是方便UG找到二次開發(fā)可執(zhí)行程序的入口,有助于啟動(dòng)UG時(shí)必要信息的載入。在MicrosoftVisualStudio平臺中原本是沒有UG二次開發(fā)模塊的,需要在MicrosoftVisualStudioCommonMSDev98Template中添加ugopen.awx和ugopen.hlpl兩個(gè)文件。
新建系統(tǒng)環(huán)境變量“UGII_USER_DIR”[5],變量值為自定義目錄,如圖2所示。在這個(gè)自定義的目錄下新建application文件夾和startup文件夾[5]。前者用來放置對話框文件(*.dlg)、圖片文件(*.bmp),后者則放置菜單文件(*.men)文件、二次開發(fā)程序(*.dll),這樣設(shè)置后就可在UG軟件中看到用戶定制的功能模塊。
圖2 系統(tǒng)添加用戶變量Fig.2 Adding User Variables to System
在Visual C++6.0的開發(fā)環(huán)境中,UG/Open AppWizard、Win32 Dynamic-Link Library和均可作為UG二次開發(fā)的工程向?qū)АH欢?,這三者中只有MFC Wizard(DLL)可充分調(diào)用MFC類庫中的資源創(chuàng)建(dll)。另外,對于MFC本身,因包含應(yīng)用程序框架并以C++類的形式封裝Windows API,實(shí)現(xiàn)人機(jī)交互,可大大減少程序開發(fā)人員的工作量,故通過調(diào)用MFC類庫的方式,進(jìn)行基于UG的數(shù)控機(jī)床串口通訊系統(tǒng)的開發(fā)。UG可通過DLL實(shí)現(xiàn)UG系統(tǒng)內(nèi)部與自身圖形界面的通信[6],并且該執(zhí)行方式運(yùn)行速度快,故選用MFC Wizard(DLL)作為工程向?qū)?。DLL的調(diào)用過程,如圖3所示。接口實(shí)現(xiàn)方案,如圖4所示。通過載入DLL文件的方式,實(shí)現(xiàn)UG與MFC的集成和運(yùn)行,從而可直接調(diào)用MFC豐富的函數(shù)資源,實(shí)現(xiàn)與數(shù)據(jù)庫的通信。
圖3 DLL的調(diào)用過程Fig.3 DLL Calling Procedure
圖4 接口實(shí)現(xiàn)方案Fig.4 Implementation Scheme of Interface
具體實(shí)現(xiàn)過程如下:(1)在VisualC++6.0的應(yīng)用程序創(chuàng)建向?qū)е羞x擇MFCAppWizard(dl1),應(yīng)用程序類型為Regular DLL using sharedMFCDLL。(2)設(shè)置UG應(yīng)用開發(fā)環(huán)境。在Project-Setting-Link中,Object/librarymodules文本框中添加UG庫文件libufun.1ib和 libugopenint.1ib。(3)配置路徑選項(xiàng),選擇 Tools-Options,選擇Directoris選項(xiàng)卡,分別在LibraryFiles和IncludeFiles中添加UG根目錄下UGOPEN文件夾所在的路徑。編寫應(yīng)用程序,在其主程序中添加UG的入口函數(shù)ufusr()。(4)建立MFC對話框并添加調(diào)用MFC函數(shù)。在菜單命令中選擇Insert--Resource,選擇Dialog,創(chuàng)建Windows風(fēng)格對話框。(5)在應(yīng)用程序中添加 ufusr_ask_unload()卸載函數(shù)和PrintErrorMessage()錯(cuò)誤處理函數(shù)代碼,編譯,連接,生成動(dòng)態(tài)連接庫文件(*.dll)。啟動(dòng)UG,通過工具條和MenuScript編輯的菜單完成調(diào)用。
串口通信,即收發(fā)雙方可在單根數(shù)據(jù)線上按位(bit)進(jìn)行數(shù)據(jù)信息的傳輸[7]。并行通信是按字節(jié)(byte)傳輸?shù)?,傳輸速度雖快,但其抗干擾能力遠(yuǎn)遠(yuǎn)不及串行通信。將串口通信應(yīng)用于原位檢測數(shù)控機(jī)床通訊系統(tǒng)中,可實(shí)現(xiàn)邊傳輸邊加工,邊傳輸邊檢測,促進(jìn)數(shù)控程序傳輸?shù)目旖莺涂煽啃缘奶岣?。目前,RS—232C已成為DET(數(shù)據(jù)終端設(shè)備,如計(jì)算機(jī))和DCE(數(shù)據(jù)通信設(shè)備)的接口標(biāo)準(zhǔn),計(jì)算機(jī)上的COM口就是RS—232C接口,除了老式的臺式機(jī)電腦和工控機(jī)還保留著DB—9的公頭連接器外,現(xiàn)在筆記本電腦和臺式機(jī)電腦上都要使用USB進(jìn)行串口轉(zhuǎn)換與RS—232C數(shù)據(jù)線進(jìn)行連接使用。故通過RS—232C標(biāo)準(zhǔn)接口實(shí)現(xiàn)數(shù)控機(jī)床系統(tǒng)和計(jì)算機(jī)系統(tǒng)之間的全雙工串行通訊。
使用動(dòng)態(tài)鏈接庫開發(fā)UG環(huán)境下的界面對話框,并添加控件,如圖5所示。
Visual C++進(jìn)行串口應(yīng)用程序的開發(fā),常用的方式有兩種。一種是使用微軟的MSComm(Microsoft Communication Control)控件,另一種是使用Win API。前者應(yīng)用簡單快捷,但其靈活性差,特別是在UG/Open中,部分控件的函數(shù)處理非常麻煩,而且其最多僅支持16個(gè)串口;相反,后者功能強(qiáng)大,編程靈活且穩(wěn)定性強(qiáng),并且針對不同的要求,有多種應(yīng)用方式,如重疊I/O方式、簡單查詢方式以及事件驅(qū)動(dòng)方式??紤]到數(shù)控機(jī)床用戶使用的靈活性和通用性,采用了Win API方式進(jìn)行串口通信應(yīng)用程序的編寫。同時(shí),對于原位檢測的數(shù)控機(jī)床而言,串口通信數(shù)據(jù)到來的時(shí)刻是隨機(jī)的,若應(yīng)用查詢方式將極度浪費(fèi)系統(tǒng)資源;而重疊I/O方式,是依據(jù)I/O請求創(chuàng)建線程[8],當(dāng)同一時(shí)刻請求量多時(shí),系統(tǒng)的處理效率會大大降低,特別是有數(shù)據(jù)到來時(shí),程序是無法實(shí)現(xiàn)自動(dòng)接收的。相反,事件驅(qū)動(dòng)的方式則是通過事件來觸發(fā)消息,系統(tǒng)通過消息響應(yīng)函數(shù)進(jìn)行處理。故選擇此應(yīng)用方式,可實(shí)現(xiàn)串口接收緩沖區(qū)在處理接收數(shù)據(jù)的同時(shí)仍可處于接收或者等待數(shù)據(jù)傳輸?shù)臓顟B(tài),程序的執(zhí)行效率顯然會大大地提高。
圖5 UG環(huán)境下主界面對話框圖Fig.5 Main Interface Diagram of the Dialogue Based on UG
在串口編程中,當(dāng)使用WinAPI編寫串口程序及事件驅(qū)動(dòng)方式時(shí),通常要考慮使用多線程編程。因?yàn)榇藭r(shí)串口的事件狀態(tài)需要被程序循環(huán)檢測,當(dāng)串口出現(xiàn)收發(fā)事件時(shí),串口的讀寫操作則必須立即進(jìn)行。從文獻(xiàn)[8]可知,MFC可以支持工作者線程和用戶界面線程,通過函數(shù)AfxBeginThread()均可實(shí)現(xiàn)這兩種類型線程的創(chuàng)建,只是函數(shù)參數(shù)不同。兩者的根本區(qū)別是工作者線程沒有消息循環(huán)和消息機(jī)制,只是進(jìn)行程序的后臺工作。與之相反,用戶界面線程是由CWinThread類派生出,主要用于處理用戶的中斷輸入并響應(yīng)各種對應(yīng)的消息和事件。因此,采用用戶接口線程。有了線程,可由主界面調(diào)用串口配置對話框,完成串口參數(shù)的配置,如圖6所示。
圖6 配置串口參數(shù)Fig.6 Configuration of Serial Port Parameters
自定義消息的發(fā)出和處理可由程序員自己掌握,相對于一般由系統(tǒng)函數(shù)處理的系統(tǒng)消息而言,使用起來比較靈活,主要應(yīng)用于消息驅(qū)動(dòng)事件。故采用自定義消息函數(shù),可由以下步驟完成。
2.1.6 穩(wěn)定性試驗(yàn) 取KC粉末0.30 g,精密稱定,按照“2.1.3”項(xiàng)下方法制備試品溶液,室溫放置,分別于0、4、8、12、16、20、24 h按照“2.1.1”項(xiàng)下色譜條件進(jìn)樣,記錄峰面積,金絲桃苷、朝藿定B、朝藿定A、朝藿定C、淫羊藿苷、木犀草素、槲皮素、川陳皮素、山柰酚、寶藿苷I峰面積的RSD值分別為0.15%、0.58%、0.32%、1.11%、0.98%、1.58%、0.55%、0.68%、1.03%、0.25%,表明供試品溶液在室溫下24 h內(nèi)穩(wěn)定。
(1)聲明自定義消息
#defineWM_RECEIVEWM_USER+101
#defineWM_SENDWM_USER+102
(2)聲明消息處理函數(shù)
afx_msgLRESULTOnReceive(WPARAM wParam,LPARAM lParam);
afx_msgLRESULT OnSend(WPARAM wParam,LPARAM lParam);
(3)將消息映射宏代碼添加到類文件程序中
ON_MESSAGE(WM_SEND,OnSend)
(4)將消息處理函數(shù)添加到類實(shí)現(xiàn)文件中
LRESULTCCommDlg::OnReceive(WPARAMwParam,LPARAMlParam)LRESULT CCommDlg::OnSend(WPARAM wParam,LPARAM lParam)
系統(tǒng)設(shè)計(jì)好后,通過正確配置環(huán)境變量后,可在UG軟件的菜單欄中看到數(shù)控機(jī)床串口通訊系統(tǒng)模塊,如圖7所示。
圖7 UG軟件菜單欄中的數(shù)控機(jī)床串口通訊Fig.7 Serial Communication System of CNC Machine Tool in UG Software Menu Bar
為驗(yàn)證本系統(tǒng)的可行性,在我校加工中心,配備FANUCSeries Oi-MD數(shù)控系統(tǒng),進(jìn)行了數(shù)控機(jī)床串口通訊實(shí)驗(yàn),主要步驟如下:
(1)設(shè)置好計(jì)算機(jī)及機(jī)床端參數(shù),如圖6所示。
(2)數(shù)控系統(tǒng)面板的操作。
(a)找到控制面板MODE模塊,將旋鈕調(diào)置EDIT狀態(tài)下。
(b)在NC鍵盤上按下[PROG]鍵
(c)顯示裝置:[列表+]→[操作]→[F輸入]→設(shè)定文件名→[執(zhí)行]→SKP閃爍
(d)等待計(jì)算機(jī)端發(fā)送
選擇待發(fā)送的檢測程序文件(*.txt),如圖5所示。
點(diǎn)擊[發(fā)送檢測程序],在機(jī)床控制面板顯示裝置上可以查看到發(fā)送的程序,如圖8所示。數(shù)控機(jī)床檢測程序開始運(yùn)行后,則會通過檢測測頭系統(tǒng),將檢測結(jié)果先在數(shù)控系統(tǒng)中存儲,再通過RS232傳輸裝置傳送到計(jì)算機(jī)中,可對檢測結(jié)果進(jìn)行保存,如圖5所示。
圖8 數(shù)控機(jī)床端接收到的檢測程序Fig.8 Receiving Inspection Program for CNC Machine Tool
開發(fā)了一種基于UG的原位檢測數(shù)控機(jī)床串口通訊系統(tǒng)。針對不能在UG/Open API中直接調(diào)用Microsoft Fundament Class(MFC)的問題,即無法使用MFC來編寫UG應(yīng)用程序的界面,采用動(dòng)態(tài)鏈接庫的方法開發(fā)UG界面,使用多線程調(diào)用串口配置對話框,完成串口參數(shù)的配置,利用消息響應(yīng)函數(shù),完成對事件的處理,在此基礎(chǔ)上實(shí)現(xiàn)了數(shù)控機(jī)床系統(tǒng)與計(jì)算機(jī)系統(tǒng)之間的串口通訊。
[1]張金煥.基于嵌入式系統(tǒng)的制造裝備自律控制理論與關(guān)鍵技術(shù)研究[D].武漢:武漢理工大學(xué),2009.(Zhang Jin-huan.Research on the control theory and key technology of manufacturing mquipment based on embedded system[D].Wuhan:Wuhan University of Technology,2009.)
[2]王正春.基于UG在機(jī)測量系統(tǒng)的關(guān)鍵技術(shù)研究[D].哈爾濱:哈爾濱理工大學(xué),2014.(Wang Zheng-chun.The study of key technology about on-machine measurement system based on UG[D].Harbin:Harbin University of Science and Technology,2014.)
[3]諶祖輝,侯忠濱,吳占陽.UG軟件二次開發(fā)中MFC調(diào)用方法研究[J].機(jī)床與液壓,2006(5):181-3+6(Chen Zu-hui,Hou Zhong-bin,Wu Zhan-yang.Research about how to use MFC in the second development of UG [J].Machine Tools and Hydraulic,2006(5):181-3+6.)
[4]諸進(jìn)才.面向曲面零件的加工精度在線檢測技術(shù)研究與系統(tǒng)開發(fā)[D].廣州:廣東工業(yè)大學(xué),2008.(Zhu Jin-cai.Research on the technology of online inspection system for machining accuracy of free-form surface components[D].Guangzhou:Guangdong University of Technology,2008.)
[5]黃勇.UG/Open API、MFC和COM開發(fā)實(shí)例精解[M].北京:國防工業(yè)出版社,2009.(Huang Yong.UG/Open API,MFC and COM Development Instances of Pure Solution[M].Beijing:National Defence Industry Press,2009.)
[6]陳小勇,周德儉,吳兆華.基于UG的接口技術(shù)研究[J].機(jī)床與液壓,2009(7):196-198.(Chen Xiao-yong,Zhou De-jian,Wu Zhao-hua.Research on the interface technology of UG[J].Machine Tool and Hydraulic,2009(7):196-198.)[7]田敏,鄭瑤,李江全.Visual C++數(shù)據(jù)采集與串口通信測控應(yīng)用實(shí)戰(zhàn)[M].北京:人民郵電出版社,2010.(Tian Min,Zheng Yao,Li Jiang-quan.Visual C++Data Acquisition and Seria Port Communication[M].Beijing:Posts&Telecom Press,2010.)
[8]張?bào)蘩?,劉舒?Visual C++實(shí)踐與提高—串口通信與工程應(yīng)用篇[M].北京:中國鐵道出版社,2005.(Zhang Yun-li,Liu Shu-zhi.Practice and Improvement of C++Visual-Serial Communication and Engineering Application[M].Beijing:China Railway Publishing House,2005.)
[9]龔敏,陳友東.數(shù)控技術(shù)及開放式數(shù)控系統(tǒng)[J].機(jī)械設(shè)計(jì)與制造,2006(2):79-81.(Gong Min,Chen You-dong.Numerical control technology and open CNC system[J].Mechanical Design and Manufacture,2006(2):79-81.)
[10]董正衛(wèi),田立中,付宜利.UG/OPEN API編程基礎(chǔ)[M].北京:清華大學(xué)出版社,2002.(Dong Zheng-wei,Tian Li-zhong,F(xiàn)u Yi-Li.UG/OPEN API Programming Foundation[M].Beijing:Tsinghua University Press,2002.)
[11]任國棟,鄭峰,葛春榮.基于UG的汽輪機(jī)葉片CAD系統(tǒng)二次開發(fā)[J].組合機(jī)床與自動(dòng)化加工技術(shù),2015(1):46-8.(Ren Guo-dong,Zheng Feng,Ge Chun-rong.CAD system of blade of the steam turbine based on UG/OPEN[J].Modular Machine Tool&Automatic Manufacturing Technique,2015(1):46.)