雷立群,王戩
(吉林農業科技學院機械與土木工程學院,吉林吉林 132101)
數控系統是一種典型的多任務實時控制系統,系統中的強實時控制部分主要是插補運算和位置控制脈沖的輸出。眾所周知,插補是數控機床控制刀具運動軌跡的核心,傳統的數控系統多因實時性原因,主要采用硬件來實現強實時控制部分[1-3],硬件實現的數控系統限制了系統的體系結構,為開放式數控系統的實現增加了難度。而采用全軟件的方法實現數控系統是實現開放式數控系統最簡潔的途徑,文獻[4]提出采用引入外部時鐘中斷的方法,有效解決了Windows操作系統高精度定時時鐘的問題,使全軟件數控系統的實現成為可能。作者在此基礎上構建了Windows操作系統全軟件結構的整體建模,實驗證明這種數控系統的結構模型是可行的。
數控加工是一種復雜的控制過程,在加工過程中同一時間段中可能需要同時完成兩種不同的功能。例如,系統在插補的同時,需要不斷地翻譯并向內存送入數控代碼。同時,系統還要能夠隨時接收用戶發出的緊急控制信息等。全軟件數控系統在總設計上的關鍵在于如何使系統能夠更為精確和快速地響應控制,因此在程序的總體設計上盡量避免程序之間相互調用而產生的軟件延時問題。
數控系統在整體上采用了分層的軟件結構,圖1給出了數控系統各個部分之間的相互關系(雙箭頭表示它們之間可以進行雙向數據傳輸),可以清楚地看到數控系統的軟件結構以及系統的控制策略。數控系統由底層WDM程序與頂層控制應用程序兩部分組成:WDM程序主要負責系統的強實時控制部分,如外部硬件中斷的截取、控制脈沖的輸出等;而頂層應用程序則主要負責數控代碼的編譯、控制參數的設置、加工位置信息的顯示等。

圖1 數控系統整體結構框圖
從圖中可以看到,WDM程序位于控制結構的中間部分。因此在控制的過程中,底層的WDM程序必然要不斷地同外部硬件以及頂層應用程序通信。
從圖1可以看到全軟件數控系統整體上分為3個大的部分,這3個大的部分文中采用了多線程的編程實現方式,包括主線程、數據處理線程和插補線程。在程序的實現上,一方面要考慮如何避免線程之間的切換對強實時控制部分產生的影響,另一方面又要協調好各個線程之間的同步關系,以保證系統的整體控制結構更加合理完善。下面對各線程的功能進行一一介紹:
(1)主線程。負責對數控文件的處理(例如,對文件的編輯、修改、存儲和讀入等),以及接收用戶的控制信息和輸出系統的顯示信息,如系統的啟動、暫停、繼續執行、倍率調整等的控制以及加工中刀具的位置、進給速度等內容的顯示。
(2)數據處理線程。該線程主要負責對數控代碼的處理,包括數控文件的編譯、向內存中存放編譯完成的數控指令、負責實時接收插補過程中傳遞過來的各種需要顯示的數據信息和命令等。
(3)插補線程。主要用于實現系統中實時性較強的插補運算、位置控制等內容。圖2為各線程之間的狀態示意圖。

圖2 線接觸加工數控系統線程之間的同步關系
從圖2中可以看到各個線程之間具有如下的關系:
(1)主線程負責激活和掛起其他的線程。當接收到啟動加工的信息后主線程負責激活數據處理線程和插補線程,當加工結束或接收到暫停信息時,主線程負責掛起其他的線程。
(2)線程之間的同步關系。插補線程與數據處理線程之間總是按照:插補線程→數據處理線程→插補線程→數據處理線程…這樣的過程交替執行的。在插補過程中,數據處理線程一直處于等待狀態,準備接收插補線程發來的編譯數控文件并存入數控代碼的命令,或者是接收用于顯示刀具運動位置的數據。因此,它們之間存在著線程之間的同步問題。插補線程和數據處理線程之間是通過Win32事件通知的方式進行通信的。具體的實現過程是:在數據處理線程中創建一個事件后,直接將該事件句柄傳遞給插補線程,然后等待插補線程發送事件消息。插補線程通過類KEvent獲取這個事件的一個對象指針后,通過設置事件信號狀態來觸發應用程序。
在插補線程中,當插補周期結束時,如果需要繼續向內存空間填充數控指令時,則通過在延遲過程調用(DPC)函數內設置事件為信號狀態,通知應用程序,程序如下:
VOIDSampleISADevice::dpc
{
m_pEventToSignal->Set();
}
數據處理線程通過下面的方式接收插補線程發送過來的通知信息:
while(1)
{
WaitForSingleObject(hEvent1,INFINITE);//等待插補命令執行完畢…//執行相應的操作}
文中采用前后臺的方式設計了Windows操作系統下數控系統的軟件結構,其中前臺軟件用C++Bulider設計完成,后臺采用WDM設備驅動程序設計實現,數控系統軟件可實現對直線、圓弧輪廓的走刀控制。
數控系統的控制界面和加工運動控制過程中的位置顯示界面如圖3所示,下面對各部分進行具體的介紹。
(1)控制界面
控制面板由兩部分組成,在設計時依據的是界面簡單、清晰,控制方式便捷的原則進行的。它位于主功能界面的右方,用開關按鍵以及分頁等進行設計的。
(2)顯示界面
顯示面板也由兩部分組成,位于控制面板的左上方和右上方,主要用于顯示加工中各個坐標軸的運動位置、加工中的進給速度等。

圖3 線接觸加工數控系統控制界面

圖4 控制界面

圖5 顯示界面
提出了采用多線程的程序結構模式實現全軟件控制系統,控制系統的強實時部分在Windows操作系統底層的驅動程序部分實現,管理程序和顯示程序等弱實時控制部分在應用程序層面實現,各個控制部分之間通過中斷及線程通信來實現。數控系統軟件最終實現了對9個軸電機驅動器的控制,實驗證明:控制系統的極限加工進給速度可達到1 500 mm/min,系統的最小脈沖當量是0.037μm,數控系統可實現對空間直線、圓弧等輪廓的加工控制。
[1]賴曉豐,劉敬猛,李善鋒.基于ARM和運動控制器的嵌入式數控系統設計[J].機床與液壓,2011,39(6):86-88.
[2]朱利東,殷蘇民.基于嵌入式實時操作系統的開放式數控系統的研究[J].機床與液壓,2004(1):92-95.
[3]楊恒宗,傅星,張師偉.基于DSP與單片機的激光加工數控系統的研究[J].組合機床與自動化加工技術,2005(12):35-37.
[4]雷立群,于振文.基于Windows的全軟件數控系統實現方法研究[J].機床與液壓,2012,40(9):94-97,20.
[5]何航.Windows開發式數控系統軟件設計與研究[D].成都:電子科技大學,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設備驅動程序開發[M].北京:電子工業出版社,2003:1-354.