雷立群,王戩
(吉林農(nóng)業(yè)科技學(xué)院機(jī)械與土木工程學(xué)院,吉林吉林 132101)
數(shù)控系統(tǒng)是一種典型的多任務(wù)實(shí)時(shí)控制系統(tǒng),系統(tǒng)中的強(qiáng)實(shí)時(shí)控制部分主要是插補(bǔ)運(yùn)算和位置控制脈沖的輸出。眾所周知,插補(bǔ)是數(shù)控機(jī)床控制刀具運(yùn)動(dòng)軌跡的核心,傳統(tǒng)的數(shù)控系統(tǒng)多因?qū)崟r(shí)性原因,主要采用硬件來(lái)實(shí)現(xiàn)強(qiáng)實(shí)時(shí)控制部分[1-3],硬件實(shí)現(xiàn)的數(shù)控系統(tǒng)限制了系統(tǒng)的體系結(jié)構(gòu),為開(kāi)放式數(shù)控系統(tǒng)的實(shí)現(xiàn)增加了難度。而采用全軟件的方法實(shí)現(xiàn)數(shù)控系統(tǒng)是實(shí)現(xiàn)開(kāi)放式數(shù)控系統(tǒng)最簡(jiǎn)潔的途徑,文獻(xiàn)[4]提出采用引入外部時(shí)鐘中斷的方法,有效解決了Windows操作系統(tǒng)高精度定時(shí)時(shí)鐘的問(wèn)題,使全軟件數(shù)控系統(tǒng)的實(shí)現(xiàn)成為可能。作者在此基礎(chǔ)上構(gòu)建了Windows操作系統(tǒng)全軟件結(jié)構(gòu)的整體建模,實(shí)驗(yàn)證明這種數(shù)控系統(tǒng)的結(jié)構(gòu)模型是可行的。
數(shù)控加工是一種復(fù)雜的控制過(guò)程,在加工過(guò)程中同一時(shí)間段中可能需要同時(shí)完成兩種不同的功能。例如,系統(tǒng)在插補(bǔ)的同時(shí),需要不斷地翻譯并向內(nèi)存送入數(shù)控代碼。同時(shí),系統(tǒng)還要能夠隨時(shí)接收用戶發(fā)出的緊急控制信息等。全軟件數(shù)控系統(tǒng)在總設(shè)計(jì)上的關(guān)鍵在于如何使系統(tǒng)能夠更為精確和快速地響應(yīng)控制,因此在程序的總體設(shè)計(jì)上盡量避免程序之間相互調(diào)用而產(chǎn)生的軟件延時(shí)問(wèn)題。
數(shù)控系統(tǒng)在整體上采用了分層的軟件結(jié)構(gòu),圖1給出了數(shù)控系統(tǒng)各個(gè)部分之間的相互關(guān)系(雙箭頭表示它們之間可以進(jìn)行雙向數(shù)據(jù)傳輸),可以清楚地看到數(shù)控系統(tǒng)的軟件結(jié)構(gòu)以及系統(tǒng)的控制策略。數(shù)控系統(tǒng)由底層WDM程序與頂層控制應(yīng)用程序兩部分組成:WDM程序主要負(fù)責(zé)系統(tǒng)的強(qiáng)實(shí)時(shí)控制部分,如外部硬件中斷的截取、控制脈沖的輸出等;而頂層應(yīng)用程序則主要負(fù)責(zé)數(shù)控代碼的編譯、控制參數(shù)的設(shè)置、加工位置信息的顯示等。
圖1 數(shù)控系統(tǒng)整體結(jié)構(gòu)框圖
從圖中可以看到,WDM程序位于控制結(jié)構(gòu)的中間部分。因此在控制的過(guò)程中,底層的WDM程序必然要不斷地同外部硬件以及頂層應(yīng)用程序通信。
從圖1可以看到全軟件數(shù)控系統(tǒng)整體上分為3個(gè)大的部分,這3個(gè)大的部分文中采用了多線程的編程實(shí)現(xiàn)方式,包括主線程、數(shù)據(jù)處理線程和插補(bǔ)線程。在程序的實(shí)現(xiàn)上,一方面要考慮如何避免線程之間的切換對(duì)強(qiáng)實(shí)時(shí)控制部分產(chǎn)生的影響,另一方面又要協(xié)調(diào)好各個(gè)線程之間的同步關(guān)系,以保證系統(tǒng)的整體控制結(jié)構(gòu)更加合理完善。下面對(duì)各線程的功能進(jìn)行一一介紹:
(1)主線程。負(fù)責(zé)對(duì)數(shù)控文件的處理(例如,對(duì)文件的編輯、修改、存儲(chǔ)和讀入等),以及接收用戶的控制信息和輸出系統(tǒng)的顯示信息,如系統(tǒng)的啟動(dòng)、暫停、繼續(xù)執(zhí)行、倍率調(diào)整等的控制以及加工中刀具的位置、進(jìn)給速度等內(nèi)容的顯示。
(2)數(shù)據(jù)處理線程。該線程主要負(fù)責(zé)對(duì)數(shù)控代碼的處理,包括數(shù)控文件的編譯、向內(nèi)存中存放編譯完成的數(shù)控指令、負(fù)責(zé)實(shí)時(shí)接收插補(bǔ)過(guò)程中傳遞過(guò)來(lái)的各種需要顯示的數(shù)據(jù)信息和命令等。
(3)插補(bǔ)線程。主要用于實(shí)現(xiàn)系統(tǒng)中實(shí)時(shí)性較強(qiáng)的插補(bǔ)運(yùn)算、位置控制等內(nèi)容。圖2為各線程之間的狀態(tài)示意圖。
圖2 線接觸加工數(shù)控系統(tǒng)線程之間的同步關(guān)系
從圖2中可以看到各個(gè)線程之間具有如下的關(guān)系:
(1)主線程負(fù)責(zé)激活和掛起其他的線程。當(dāng)接收到啟動(dòng)加工的信息后主線程負(fù)責(zé)激活數(shù)據(jù)處理線程和插補(bǔ)線程,當(dāng)加工結(jié)束或接收到暫停信息時(shí),主線程負(fù)責(zé)掛起其他的線程。
(2)線程之間的同步關(guān)系。插補(bǔ)線程與數(shù)據(jù)處理線程之間總是按照:插補(bǔ)線程→數(shù)據(jù)處理線程→插補(bǔ)線程→數(shù)據(jù)處理線程…這樣的過(guò)程交替執(zhí)行的。在插補(bǔ)過(guò)程中,數(shù)據(jù)處理線程一直處于等待狀態(tài),準(zhǔn)備接收插補(bǔ)線程發(fā)來(lái)的編譯數(shù)控文件并存入數(shù)控代碼的命令,或者是接收用于顯示刀具運(yùn)動(dòng)位置的數(shù)據(jù)。因此,它們之間存在著線程之間的同步問(wèn)題。插補(bǔ)線程和數(shù)據(jù)處理線程之間是通過(guò)Win32事件通知的方式進(jìn)行通信的。具體的實(shí)現(xiàn)過(guò)程是:在數(shù)據(jù)處理線程中創(chuàng)建一個(gè)事件后,直接將該事件句柄傳遞給插補(bǔ)線程,然后等待插補(bǔ)線程發(fā)送事件消息。插補(bǔ)線程通過(guò)類KEvent獲取這個(gè)事件的一個(gè)對(duì)象指針后,通過(guò)設(shè)置事件信號(hào)狀態(tài)來(lái)觸發(fā)應(yīng)用程序。
在插補(bǔ)線程中,當(dāng)插補(bǔ)周期結(jié)束時(shí),如果需要繼續(xù)向內(nèi)存空間填充數(shù)控指令時(shí),則通過(guò)在延遲過(guò)程調(diào)用(DPC)函數(shù)內(nèi)設(shè)置事件為信號(hào)狀態(tài),通知應(yīng)用程序,程序如下:
VOIDSampleISADevice::dpc
{
m_pEventToSignal->Set();
}
數(shù)據(jù)處理線程通過(guò)下面的方式接收插補(bǔ)線程發(fā)送過(guò)來(lái)的通知信息:
while(1)
{
WaitForSingleObject(hEvent1,INFINITE);//等待插補(bǔ)命令執(zhí)行完畢…//執(zhí)行相應(yīng)的操作}
文中采用前后臺(tái)的方式設(shè)計(jì)了Windows操作系統(tǒng)下數(shù)控系統(tǒng)的軟件結(jié)構(gòu),其中前臺(tái)軟件用C++Bulider設(shè)計(jì)完成,后臺(tái)采用WDM設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)實(shí)現(xiàn),數(shù)控系統(tǒng)軟件可實(shí)現(xiàn)對(duì)直線、圓弧輪廓的走刀控制。
數(shù)控系統(tǒng)的控制界面和加工運(yùn)動(dòng)控制過(guò)程中的位置顯示界面如圖3所示,下面對(duì)各部分進(jìn)行具體的介紹。
(1)控制界面
控制面板由兩部分組成,在設(shè)計(jì)時(shí)依據(jù)的是界面簡(jiǎn)單、清晰,控制方式便捷的原則進(jìn)行的。它位于主功能界面的右方,用開(kāi)關(guān)按鍵以及分頁(yè)等進(jìn)行設(shè)計(jì)的。
(2)顯示界面
顯示面板也由兩部分組成,位于控制面板的左上方和右上方,主要用于顯示加工中各個(gè)坐標(biāo)軸的運(yùn)動(dòng)位置、加工中的進(jìn)給速度等。
圖3 線接觸加工數(shù)控系統(tǒng)控制界面
圖4 控制界面
圖5 顯示界面
提出了采用多線程的程序結(jié)構(gòu)模式實(shí)現(xiàn)全軟件控制系統(tǒng),控制系統(tǒng)的強(qiáng)實(shí)時(shí)部分在Windows操作系統(tǒng)底層的驅(qū)動(dòng)程序部分實(shí)現(xiàn),管理程序和顯示程序等弱實(shí)時(shí)控制部分在應(yīng)用程序?qū)用鎸?shí)現(xiàn),各個(gè)控制部分之間通過(guò)中斷及線程通信來(lái)實(shí)現(xiàn)。數(shù)控系統(tǒng)軟件最終實(shí)現(xiàn)了對(duì)9個(gè)軸電機(jī)驅(qū)動(dòng)器的控制,實(shí)驗(yàn)證明:控制系統(tǒng)的極限加工進(jìn)給速度可達(dá)到1 500 mm/min,系統(tǒng)的最小脈沖當(dāng)量是0.037μm,數(shù)控系統(tǒng)可實(shí)現(xiàn)對(duì)空間直線、圓弧等輪廓的加工控制。
[1]賴曉豐,劉敬猛,李善鋒.基于ARM和運(yùn)動(dòng)控制器的嵌入式數(shù)控系統(tǒng)設(shè)計(jì)[J].機(jī)床與液壓,2011,39(6):86-88.
[2]朱利東,殷蘇民.基于嵌入式實(shí)時(shí)操作系統(tǒng)的開(kāi)放式數(shù)控系統(tǒng)的研究[J].機(jī)床與液壓,2004(1):92-95.
[3]楊恒宗,傅星,張師偉.基于DSP與單片機(jī)的激光加工數(shù)控系統(tǒng)的研究[J].組合機(jī)床與自動(dòng)化加工技術(shù),2005(12):35-37.
[4]雷立群,于振文.基于Windows的全軟件數(shù)控系統(tǒng)實(shí)現(xiàn)方法研究[J].機(jī)床與液壓,2012,40(9):94-97,20.
[5]何航.Windows開(kāi)發(fā)式數(shù)控系統(tǒng)軟件設(shè)計(jì)與研究[D].成都:電子科技大學(xué),2004.
[6]LEI L Q,WANG K Q,HAN J.Implementation Study about the Software CNCSystem Based on Windows[J].Advanced Materials Research,2011,411:264-269.
[7]武安河,邰銘,于洪濤.Windows2000/XPWDM設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)[M].北京:電子工業(yè)出版社,2003:1-354.