免费色播,亚洲国产欧美国产第一区二区三区,毛片看,日本精品在线观看视频,国产成人精品一区二区免费视频,日本黄色免费网站,一级毛片免费

多線程在火焰切割機(jī)數(shù)控軟件中的應(yīng)用

來源:互聯(lián)網(wǎng)

點(diǎn)擊:1386

A+ A-

所屬頻道:新聞中心

關(guān)鍵詞:多線程數(shù)控 軟件 火焰切割

    在設(shè)計(jì)火焰切割機(jī)數(shù)控系統(tǒng)的過程中,我們采用微機(jī)與ADT-853運(yùn)動(dòng)控制卡的結(jié)構(gòu)。微機(jī)作為上位機(jī),負(fù)責(zé)系統(tǒng)的管理功能,如數(shù)控加工文件管理,數(shù)控代碼譯碼,與下位機(jī)通信,顯示加工過程中的信息,接受用戶輸入的信息等任務(wù)。運(yùn)動(dòng)控制卡作為下位機(jī)則負(fù)責(zé)驅(qū)動(dòng)電動(dòng)機(jī),開關(guān)量的控制,以及插補(bǔ)運(yùn)算等實(shí)時(shí)性較強(qiáng)的任務(wù)。在加工過程中,計(jì)算機(jī)主要執(zhí)行加工過程控制任務(wù),即調(diào)用動(dòng)態(tài)鏈接庫函數(shù)控制機(jī)床運(yùn)動(dòng)。同時(shí)在屏幕上動(dòng)態(tài)地顯示當(dāng)前刀具軌跡和加工程序段,及時(shí)地響應(yīng)暫停、急停等用戶信息。

      作為上位機(jī)的微機(jī)需要同時(shí)執(zhí)行控制及顯示等任務(wù),如采用單線程會(huì)造成軟件無法及時(shí)響應(yīng)。為此我們采用多線程技術(shù),把各個(gè)任務(wù)放在不同的線程中執(zhí)行,使數(shù)控系統(tǒng)軟件能較好地執(zhí)行各種不同的任務(wù),互不干擾。

    1 數(shù)控系統(tǒng)軟件結(jié)構(gòu)

      本系統(tǒng)使用目前流行的WINDOWS操作系統(tǒng),采用VC++6.0編譯器開發(fā)。系統(tǒng)要實(shí)現(xiàn)的主要功能有:數(shù)控代碼譯碼,刀具半徑補(bǔ)償,離線仿真,加工過程控制,加工軌跡動(dòng)態(tài)顯示,機(jī)床故障及狀態(tài)檢查等。

      雖然WINDOWS操作系統(tǒng)是一個(gè)多任務(wù)的操作系統(tǒng),能夠同時(shí)處理多個(gè)任務(wù),但如果某一個(gè)任務(wù)執(zhí)行的時(shí)間很長(zhǎng),就會(huì)造成其它的任務(wù)得不到及時(shí)響應(yīng)。例如,在開始設(shè)計(jì)時(shí),我們把加工過程控制和加工軌跡顯示功能都放在主線程中實(shí)現(xiàn),結(jié)果,由于加工過程控制任務(wù)需要不斷查詢控制卡的狀態(tài),占用了大部分的CPU資源,使得加工軌跡顯示任務(wù)得不到及時(shí)響應(yīng),軌跡顯示嚴(yán)重滯后,甚至嚴(yán)重偏離實(shí)際的加工位置,并且不能及時(shí)響應(yīng)用戶的輸入,如暫停停止等操作。由此可見,由于數(shù)控系統(tǒng)軟件的多任務(wù)同時(shí)并發(fā)執(zhí)行,數(shù)控系統(tǒng)軟件中各個(gè)任務(wù)爭(zhēng)奪CPU資源,導(dǎo)致某些任務(wù)不能及時(shí)執(zhí)行,影響了數(shù)控系統(tǒng)性能。為了解決這個(gè)問題,我們把多線程技術(shù)引入到軟件設(shè)計(jì)中。

    2 多線程技術(shù)

      每一個(gè)應(yīng)用程序的執(zhí)行實(shí)例稱為進(jìn)程,每個(gè)進(jìn)程至少有一個(gè)線程,稱為主線程。線程是進(jìn)程內(nèi)部可獨(dú)立執(zhí)行的一個(gè)單元,系統(tǒng)分配給每個(gè)線程一定的執(zhí)行時(shí)間。由于每個(gè)線程的執(zhí)行時(shí)間片只有20μs,可以認(rèn)為它們幾乎是同時(shí)執(zhí)行的。Windows操作系統(tǒng)的多線程機(jī)制,為我們解決數(shù)控系統(tǒng)的多任務(wù)同時(shí)執(zhí)行問題提供了方案。

      數(shù)控軟件運(yùn)行時(shí),產(chǎn)生了數(shù)控軟件的一個(gè)實(shí)例,即進(jìn)程。同時(shí)開始執(zhí)行該進(jìn)程的主線程。此線程終止時(shí),進(jìn)程也終止。除主線程外,windows操作系統(tǒng)允許用戶根據(jù)需要在應(yīng)用程序中創(chuàng)建其他線程,使您可以同時(shí)運(yùn)行多個(gè)并行執(zhí)行的線程。我們可以創(chuàng)建其他線程執(zhí)行加工過程控制任務(wù)、顯示運(yùn)動(dòng)軌跡等。因此,多線程技術(shù)可以滿足數(shù)控系統(tǒng)多任務(wù)并行執(zhí)行的要求。

      Windows提供了兩種線程類型:用戶界面線程(user—interface thread)和輔助線程(worker thread),它們都是從CWinThread類派生出來的。用戶界面線程通常有窗口,有自己的消息循環(huán)。一般用于處理用戶的輸入和對(duì)用戶生成的事件及消息的響應(yīng)。輔助線程沒有窗口,不需要處理消息。一般用于完成不需要用戶輸入的后臺(tái)任務(wù)。如計(jì)算、調(diào)度等工作。2 J。

    3 線程在數(shù)控軟件中的應(yīng)用

      在本系統(tǒng)中由主線程負(fù)責(zé)維護(hù)人機(jī)界面,數(shù)控代碼譯碼,刀具半徑補(bǔ)償,離線仿真等功能。這些功能的實(shí)時(shí)性要求不強(qiáng),可以在非加工過程中完成。加工過程中,主線程創(chuàng)建加工過程控制子線程、加工軌跡顯示子線程。下面以加工過程控制為例,介紹如何使用多線程。

      加工過程控制子線程負(fù)責(zé)控制運(yùn)動(dòng)控制卡。在自動(dòng)加工過程中它先讀取一行刀位文件數(shù)據(jù),判斷是執(zhí)行什么樣的動(dòng)作,然后調(diào)用相應(yīng)的動(dòng)態(tài)鏈接庫函數(shù)。讀下一行數(shù)據(jù)并執(zhí)行相應(yīng)的函數(shù)之前,ADT一853運(yùn)動(dòng)控制卡要求查詢上一次的函數(shù)執(zhí)行過程是否有錯(cuò)誤發(fā)生,當(dāng)進(jìn)行連續(xù)插補(bǔ)運(yùn)算時(shí)還要查詢是否可以發(fā)送下一個(gè)數(shù)據(jù)。當(dāng)用戶發(fā)現(xiàn)加工過程有錯(cuò)誤,按下“暫停”、“停止”等按鈕時(shí),主線程通知加工過程控制線程,子線程執(zhí)行相應(yīng)的函數(shù)實(shí)現(xiàn)暫停或停止功能。

      3.1 線程的創(chuàng)建

      由于加工過程控制線程不需要窗口,可以使用輔助線程作為加工過程控制線程。輔助線程的創(chuàng)建非常簡(jiǎn)單,不需要顯式的從CWinThread類派生一個(gè)輔助線程類。直接在主線程的自動(dòng)加工消息響應(yīng)函數(shù)中創(chuàng)建運(yùn)動(dòng)過程控制線程。它的創(chuàng)建函數(shù)的用法如下。

     

      參數(shù)pfnThreadProc是指向線程的控制函數(shù)的指針,這個(gè)控制函數(shù)必須按下面的形式申明。

      pParam是傳遞給線程控制函數(shù)的參數(shù)。nPfiofity是線程的優(yōu)先級(jí)。操作系統(tǒng)根據(jù)線程的優(yōu)先級(jí)決定它們的執(zhí)行時(shí)間。由于加工過程控制需要較高的實(shí)時(shí)性,所以它的優(yōu)先級(jí)要比主線程的優(yōu)先級(jí)(THREAD—PRIORITY—NORMAL)高。設(shè)輔助線程的優(yōu)先級(jí)比主線程的優(yōu)先級(jí)高一級(jí),為THREAD—PRIORITY—A.BOVE—NORMAL。

      3.2 線程的通信

      由于;暫停停止等消息是由主線程響應(yīng)的,所以子線程要響應(yīng)這些消息必須和主線程通信,由主線程通知子線程。由于采用的是輔助線程,因此不能使用windows消息通信。為此,我們可以使用全局變量,讓主線程通知輔助線程。

      為響應(yīng)暫停停止消息,分別申明一個(gè)布爾類型的全局變量:

      BOOL g_zanting,g_tingzhi;

      初始化時(shí)將全局變量賦值為假。在主線程的暫停”和“停止”等消息響應(yīng)函數(shù)中給全局變量賦值為真。加工過程控制線程調(diào)用動(dòng)態(tài)鏈接庫函數(shù)之前,需要循環(huán)查詢是否可以發(fā)送下一個(gè)數(shù)據(jù),同時(shí)可以在這個(gè)循環(huán)中查詢哪個(gè)全局變量為真,執(zhí)行相應(yīng)的函數(shù),從而實(shí)現(xiàn)主線程和輔助線程的通信。

      3.3 線程的阻塞

      當(dāng)按下“暫停”按鈕時(shí),主線程的暫停”消息響應(yīng)函數(shù)將全局變量zanting賦值為真。加工過程控制線程查詢到zanting為真,阻塞線程,并向運(yùn)動(dòng)控制卡發(fā)出停止命令,記錄當(dāng)前的運(yùn)動(dòng)狀態(tài)。當(dāng)用戶按下繼續(xù)加工按鈕時(shí),線程從當(dāng)前狀態(tài)下繼續(xù)執(zhí)行。為了實(shí)現(xiàn)線程的阻塞,需要調(diào)用WaitForSingleObject函數(shù),它的用法如下。

      參數(shù)hHandle是指向一個(gè)事件對(duì)象的句柄。事件是Windows的一種內(nèi)核對(duì)象,在進(jìn)程內(nèi)部。事件是用唯一的32位句柄來標(biāo)識(shí)的。它的句柄可以進(jìn)行復(fù)制,以便在進(jìn)程之間進(jìn)行共享。事件可以為有信號(hào)(或真)狀態(tài)或無信號(hào)(或假)狀態(tài)。事件有兩種類型:手工復(fù)位和自動(dòng)復(fù)位事件。這里使用了自動(dòng)復(fù)位事件。MFC為事件對(duì)象提供了一個(gè)方便的CEvent類,它是從CSyncObject類中派生的。在默認(rèn)狀態(tài)下,構(gòu)造函數(shù)在無信號(hào)狀態(tài)生成自動(dòng)重置事件對(duì)象。

      要實(shí)現(xiàn)暫停后繼續(xù)加工功能,需要申明一個(gè)全局的事件對(duì)象CEvent g_evenOixu。當(dāng)按鈕按下時(shí),在主線程的消息響應(yīng)函數(shù)中調(diào)用CEvent::SetEvent設(shè)定事件為有信號(hào)狀態(tài)。在加工過程控制線程中調(diào)用Wait—ForSingleObject(g-evenOixu,INFINITE)函數(shù),當(dāng)事件為有信號(hào)狀態(tài),此函數(shù)返回值為WAIT_OBJECT_0。

      3.4 線程的終止

      為了實(shí)現(xiàn)線程正常情況下,一次加工過程執(zhí)行完成后,加工過程控制線程返回,線程正常終止。如果加工過程出現(xiàn)錯(cuò)誤,或是用戶停止加工,加工過程控制線程需要提前終止。提前終止線程需要從線程內(nèi)調(diào)用AfxEndThread函數(shù),將所需的退出代碼作為唯一參數(shù)傳遞。這將停止執(zhí)行線程,解除對(duì)線程堆棧的分配,分離附加到線程的所有DLL并從內(nèi)存中刪除線程對(duì)象。

    4 結(jié)語

      本系統(tǒng)在開發(fā)過程中將多線程技術(shù)應(yīng)用在數(shù)控系統(tǒng)軟件的開發(fā)中,把各個(gè)任務(wù)放在不同的線程中執(zhí)行,解決了數(shù)控系統(tǒng)中多任務(wù)并發(fā)執(zhí)行時(shí)產(chǎn)生的系統(tǒng)響應(yīng)滯后的問題。通過改進(jìn),數(shù)控系統(tǒng)軟件能較好地執(zhí)行各種不同的任務(wù),及時(shí)響應(yīng)用戶操作。

    (審核編輯: 智匯胡妮)

    聲明:除特別說明之外,新聞內(nèi)容及圖片均來自網(wǎng)絡(luò)及各大主流媒體。版權(quán)歸原作者所有。如認(rèn)為內(nèi)容侵權(quán),請(qǐng)聯(lián)系我們刪除。