程序采用VisualC++的多線程編程來實現對數控雕銑機操作時實性和動態性要求。所謂線程是指一個獨立的過程,是系統分配處理器時間資源的基本單位。線程機制使得系統具有多任務功能。
PCNC軟件系統一般執行過程為:讀取處理后的NC文件→譯碼→軌跡插補計算→伺服控制,這樣一個基本的加工循環,在未運行完最后一條NC語句前,該循環將一直進行。如果應用程序僅有一個線程即用戶界面線程,一旦程序執行仿真,它將獨占CPU一直運行下去直到結束,無法接受和處理用戶消息和事件。也就無法實現實時性的要求,而多線程就可以解決這個問題。
VisualC++中線程可分為用戶界面線程(UserInterfaceThread)和工作線程(WorkerThread)。用戶界面線程的特點是擁有單獨的消息隊列,具有自己的窗口界面能夠對用戶輸入事件和消息作出響應。工作線程一般用于處理后臺任務,僅由函數體實現,不處理窗口消息。采用多線程后,用戶界面線程主要用來顯示當前指令、更新狀態參數(X,Y,Z軸坐標值,主軸進給速度、加工時間等),以及接受用戶輸入指令。將實現仿真的程序放在一個工作線程中。這樣盡管工作線程忙個不停,但用戶線程卻“空閑”可以隨時響應用戶輸入事件和消息。用戶線程和工作線程之間通過事件對象Cevent來負責線程之間的通信。
設置“暫停仿真”和“開始仿真”兩個按鈕,當按下在“暫停仿真”后程序暫停用戶可以觀察指令和相應狀態;按下“開始仿真”后又斷點處重新開始執行。其實現的具體方法如下:在“暫停仿真”按鈕的單擊事件響應函數中設置停止事件有信號,“開始仿真”按鈕的單擊事件響應函數中設置啟動事件有信號,工作進程在循環體中檢測相應事件是否有信號,從而執行相應的程序。需要做的工作是定義兩個事件停止事件和啟動事件,創建一個工作者線程,并建立工作線程的控制函數體。其程序流程如圖2所示。用戶界面線程和工作線程的狀態參數和圖象緩沖區首地址通過全局變量來傳遞。用戶界面線程首先建立圖象緩沖區,將緩沖區初始化后,通過全局變量將緩沖區首地址和繪制圖象的窗口句柄傳遞給工作進程。工作進程將譯碼后的數據轉化成圖像數據,不斷刷新緩沖區,調用MFC類庫中的CDC類BitBlt()來重繪屏幕,這樣就形成加工動畫過程。在重繪屏幕時加入延時,這個延時由每條指令所走的步距總和和對應插補的速度決定。通過比例延時可以較為精確地獲得實際加工時間。
狀態參數的刷新則由WINDOW下計時器Timer實現,在達到設定時間后由計時器Timer發出WM-TIMER系統消息到用戶界面線程消息隊列中,由其對應的消息處理函數OnTimer來刷新狀態參數。
下一篇:VC數控雕銑機仿真軟件的作用