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