李英輝,王洪慶,張永生
(1.石家莊職業(yè)技術(shù)學(xué)院電氣與電子工程系,河北石家莊050081;2.天津電氣科學(xué)研究院有限公司,天津300180;3.河北傳媒學(xué)院信息技術(shù)學(xué)院,河北石家莊050071)
數(shù)控機床(CNC)在當今工業(yè)控制中的應(yīng)用領(lǐng)域十分廣泛。X-Y 平臺是CNC 的試驗平臺之一。CNC 在工作過程中,各軸要協(xié)調(diào)地運動,因此各軸的位置狀態(tài)需要動態(tài)實時地顯示。
隨著自動控制技術(shù)的發(fā)展,以Windows系統(tǒng)為平臺的實時控制系統(tǒng)得到廣泛應(yīng)用[1]。對于以Dos 系統(tǒng)為平臺的控制系統(tǒng),可以對硬件直接中斷得到精確的實時控制。而Windows 是搶占式多任務(wù)操作系統(tǒng),硬件資源由系統(tǒng)操作,應(yīng)用程序不允許對硬件直接中斷。在Windows 平臺下實現(xiàn)精確實時控制值得研究[2]。
對于實時性要求不高的情況下,可以直接使用Windows提供的普通定時器。首先由函數(shù)Set-Timer()設(shè)置一定時器,在其參數(shù)中設(shè)定時間間隔,當達到設(shè)定的時間后,定時器發(fā)出WM_TIMER 消息到應(yīng)用程序的消息隊列中,將狀態(tài)顯示程序放在WM_TIMER 消息處理函數(shù)中,便可實現(xiàn)狀態(tài)的動態(tài)顯示。但是WM_TIMER消息優(yōu)先級較低,且定時精度不高(約為55 ms)[1]。
X-Y 平臺是高精度試驗平臺,因此其狀態(tài)的實時顯示需要有較高的定時精度,即運動控制程序與實時顯示控制程序要實現(xiàn)同步,因此考慮采用Windows 下的多線程技術(shù)將每個任務(wù)放在不同的線程中,操作系統(tǒng)通過線程間快速反復(fù)切換來達到并行計算的效果。Windows 系統(tǒng)的多媒體定時服務(wù)很好地解決了這一問題,它擁有自己獨立的線程,使應(yīng)用程序可以得到周期性的時間中斷。且優(yōu)先級高,定時精度可以達到1 ms。
對于更高的定時精度要求,可以使用API 函數(shù)QueryPerformanceFrequency()和QueryPerformanceCounter(),其精度可以達到ns 級。但對硬件系統(tǒng)資源的要求較高。
綜合X-Y 平臺對運動狀態(tài)顯示時間精度的要求和系統(tǒng)資源的考慮,多媒體定時器更適于實現(xiàn)X-Y平臺運動狀態(tài)的實時狀態(tài)顯示。
以Visual C++為開發(fā)工具的多媒體定時器的使用步驟如下[3]:
1)設(shè)定多媒體定時器的有關(guān)參數(shù)。利用函數(shù)TimeGetDevCaps()確定定時器服務(wù)提供的最大和最小事件周期;用TimeBeginPeriod()設(shè)置最小時鐘事件定時精度。精度越高,定時器消耗的系統(tǒng)資源越多。因此,在具體應(yīng)用中應(yīng)根據(jù)需要考慮精度設(shè)置。
2)啟動多媒體定時器事件。用TimerSetEvent()函數(shù)初始化和啟動多媒體定時器事件。函數(shù)原型具體如下:
MMRESULT timeSetEvent(UINT uDelay,UINT uResolution,
LPTIMECALLBACK lpTimeProc,DWORD dwUser,UINT fuEvent);
參數(shù)具體定義見文獻[3]。
3)在回調(diào)函數(shù)中具體應(yīng)用。LpTimeProc 表示事件回調(diào)函數(shù)的入口地址,由用戶自己編寫。如狀態(tài)的動態(tài)實時顯示程序就可以存在于這一步。但需要注意,此函數(shù)是全局的Windows API類型的函數(shù),不是某個類具體的成員。
4)刪除定時器以釋放系統(tǒng)資源。定時器是一種有限的全局資源,創(chuàng)建得越多Windows系統(tǒng)的負擔越重。因此,定時器不再使用后要調(diào)用TimeKillEvent()函數(shù)和TimeEndPeriod()函數(shù)來釋放定時器資源和消除步驟1)中設(shè)定的最小時鐘事件精度。
試驗采用固高公司提供的X-Y 試驗平臺,試驗設(shè)備主要有運動控制卡、伺服驅(qū)動系統(tǒng)、X-Y 平臺、PC 機和顯示器1 臺。運動控制卡插入PC 機的擴展PCI 插槽,采用PC 機+運動控制卡的控制方式。固高公司以動態(tài)鏈接庫形式(GT400.dll)提供給用戶此控制卡的API 函數(shù),用戶可以調(diào)用這些函數(shù)用于X-Y 試驗平臺的運動控制,同時通過位置檢測裝置增量式光電編碼器實時讀取平臺位置狀態(tài),并將數(shù)據(jù)信息反饋給PC 機實時顯示,PC 機通過顯示界面的控制操作向運動控制卡發(fā)出命令,實現(xiàn)平臺的運動控制。
X-Y平臺系統(tǒng)結(jié)構(gòu)如圖1所示。
圖1 X-Y平臺結(jié)構(gòu)圖Fig.1 X-Y platform structure chart
X-Y 平臺運動控制系統(tǒng)是由控制計算機部分、伺服驅(qū)動部分、機械傳動部分及檢測部分組成,采用閉環(huán)控制方式,其結(jié)構(gòu)如圖2所示。
圖2 X-Y平臺運動控制系統(tǒng)結(jié)構(gòu)圖Fig.2 Structure chart of X-Y platform motion control system
本軟件的編程試驗在Visual C++6.0 編譯器上實現(xiàn)。其軟件控制框圖如圖3 所示,其中包括主控制界面、軸控制、坐標系控制、輸入輸出控制、平臺操作控制、基本參數(shù)設(shè)置。
本文利用多媒體定時器主要完成實時軌跡顯示部分。軸系和坐標系狀態(tài)由于實時性要求相對較低,可以采用普通定時器實現(xiàn)。
圖3 X-Y平臺軟件功能模塊Fig.3 X-Y platform software modules
X-Y 平臺軟件編程試驗充分利用了C++語言開放式的面向?qū)ο蟮脑O(shè)計思想。運動狀態(tài)實時顯示部分的程序框圖如圖4所示。
圖4 X-Y平臺實時狀態(tài)控制流程圖Fig.4 X-Y platform real-time status control flow chart
在工程中為多媒體定時器建立一個新類為CmultimediaTimer,首先在其頭文件中定義:
將多媒體定時器封裝成類,能在平臺的各種控制類中調(diào)用多媒體定時器的函數(shù),運動完成后可以通過調(diào)用CMultimediaTimer類的析構(gòu)函數(shù)或Stop()函數(shù)來關(guān)閉多媒體定時器資源,這樣可以保證在任意運動時刻只啟動1 個多媒體定時器,實現(xiàn)了定時器資源的反復(fù)利用,節(jié)省了系統(tǒng)資源的消耗。
為了在其它的控制類中訪問多媒體定時器類的數(shù)據(jù),首先在使用多媒體定時器的類中定義多媒體定時器的對象。例如在坐標系控制類CCoodinateCtrl中:
定時器啟動后,每隔設(shè)定時間就會執(zhí)行1 次回調(diào)函數(shù)?;卣{(diào)函數(shù)定義如下:
其中,m_parent 為主控制窗口視類的指針變量;xpos和ypos為軸運動軌跡坐標點,初始化為視類中的坐標原點。
本文將多媒體定時器應(yīng)用到X-Y 試驗平臺的運動狀態(tài)實時顯示中,實驗證明能實現(xiàn)精確的定時??梢酝茝V到高精度數(shù)控機床CNC 的實時中斷控制和實時狀態(tài)顯示中。此外本軟件采用開放性的設(shè)計語言開發(fā),軟件開發(fā)過程中留有冗余,可以在原有軟件基礎(chǔ)上進一步開發(fā)。
[1] 文清華,吳來杰,楊代華,等.Windows環(huán)境下數(shù)控軟件實時控制的實現(xiàn)[J].機床與液壓,2003,31(3):139-141.
[2] 王偉,徐國華.多媒體定時器在工業(yè)控制中的應(yīng)用[J].微型機與應(yīng)用,2001,20(12):8-10.
[3] 王文武,王誠,郝燕玲,等.多媒體定時器的定制和使用方法[J].計算機應(yīng)用,2000,20(3):39-40.
[4] 杜詩文,宋建國,閆獻國.基于Visual C++的數(shù)控軟件的設(shè)計[J].山西機械,2002,31(1):11-12.
[5]陳德妙,張桂香.基于Windows 2000下開放式數(shù)控系統(tǒng)軟件的開發(fā)[J].組合機床與自動化加工技術(shù),2005,47(4):28-32.
[6] 付永紅,熊飛麗,龍佑喜,等.基于Windows下數(shù)控軟件的設(shè)計與實現(xiàn)[J].機電一體化,2001,8(1):28-31.
[7] 王洪剛,傅建中.基于線程技術(shù)的PC 數(shù)控軟件設(shè)計[J].組合機床與自動加工技術(shù),2004,46(1):31-34.