技術頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國傳動網(wǎng) > 技術頻道 > 技術百科 > 多線程技術解決開放式數(shù)控系統(tǒng)實時性能的應用設計

多線程技術解決開放式數(shù)控系統(tǒng)實時性能的應用設計

時間:2008-04-15 08:49:00來源:dujing

導語:?為了保證系統(tǒng)的實時性能,擬采用多線程技術,通過多任務并行處理的方式,提高系統(tǒng)實時性。
1 引言 實時性是數(shù)控系統(tǒng)一項重要的性能指標。 在IPC(Industrial Personal Computer )+運動控制器構成的開放式數(shù)控系統(tǒng)開發(fā)平臺上,雖然這種主從式結構,確保了運動控制指令在運動控制器內高速、實時的被執(zhí)行,但在PC機上,仍需要完成諸如實時顯示、預處理計算、系統(tǒng)狀態(tài)監(jiān)控等許多任務。為了保證系統(tǒng)的實時性能,擬采用多線程技術,通過多任務并行處理的方式,提高系統(tǒng)實時性。 本開發(fā)平臺采用IPC+運動控制器模式的開放式數(shù)控系統(tǒng),主要的運動控制由固高公司的GT400-SV通用運動控制器完成。它提供C語言函數(shù)庫GT400sv.lib和Windows動態(tài)連接庫GT400.dll,能夠實現(xiàn)復雜的控制功能[2>。數(shù)控系統(tǒng)的開發(fā)是將這些控制函數(shù)與自己控制系統(tǒng)所需的數(shù)據(jù)處理、界面顯示、用戶接口等應用程序模塊集成在一起,建造符合特定應用要求的控制系統(tǒng)。 2 進程與線程以及多線程技術 Windows操作系統(tǒng)既支持多進程,又支持多線程。一個進程就是應用程序的一個實例,一次執(zhí)行過程也就是調入內存準備執(zhí)行的程序,包括當前執(zhí)行的應用程序的執(zhí)行代碼和程序執(zhí)行相關的一些環(huán)境信息。每個進程擁有整臺計算機的資源,無須知道其他進程在計算機中的信息。通常每個進程至少有一個線程在執(zhí)行所屬地址空間中的代碼,該線程稱為主線程。如果該主線程運行結束,系統(tǒng)將自動清除進程及其他地址空間。 線程是進程內部執(zhí)行的路徑,是操作系統(tǒng)分配CPU時間的基本實體,是程序運行的最小單位。每個進程都由主線程開始進行應用程序的執(zhí)行。線程由一個堆棧、CPU寄存器的狀態(tài)和系統(tǒng)調用列表中的一個入口組成。每個進程可以包含一個以上的線程,這些線程可以同時獨立地執(zhí)行進程地址空間中的代碼,共享進程中的所有資源。 Windows系統(tǒng)分配處理器時間的最小單位是線程,系統(tǒng)不停地在各個線程之間切換。在PC機中,同一時間只有一個線程在運行。通常系統(tǒng)為每個線程劃分的時間片很?。╩s級別),這樣快速系統(tǒng)的實時性就有了保障[3]。 要實現(xiàn)多線程編程,可建立輔助線程(worker Thread)和用戶界面線程(User Interface Thread)。輔助線程主要用來執(zhí)行數(shù)控程序、坐標顯示、動態(tài)仿真和數(shù)據(jù)預處理;用戶界面線程用來處理用戶的輸入,響應用戶產(chǎn)生的事件和消息。 3 數(shù)控系統(tǒng)實時性分析 3.1 線程的實時性 數(shù)控系統(tǒng)需要完成的任務有很多,這些任務中,優(yōu)先級的要求級別不一樣。據(jù)此,可以利用Windows系統(tǒng)的多任務、搶占式的特點和多線程技術將各個任務分給不同的線程,并賦予各個線程不同的優(yōu)先級,當高優(yōu)先級的線程執(zhí)行時,即實時性要求高的任務需要執(zhí)行時,可以自動地終止其他線程的工作轉而執(zhí)行這一線程[4>。通過這一方法,可以實現(xiàn)數(shù)控系統(tǒng)所要求的實時性。 3.2 輔助線程創(chuàng)建 本開發(fā)系統(tǒng)中所創(chuàng)建的輔助線程可大致劃分如下: (1)坐標顯示線程 在手動脈沖面板、電動控制面板和增量控制面板中,可實時顯示X、Y、Z三個運動軸的坐標。這樣可使操作人員直觀看到三軸的實際坐標。實時性要求較低,所以使用最低優(yōu)先級:Lowest Normal。 (2)圖形顯示線程 圖像顯示線程用于在動態(tài)仿真面板中執(zhí)行圖形繪制的指令。通過圖形顯示,操作者可以在動態(tài)仿真的同時,對人機界面進行操作。這一線程實時性要求較低,等級為:Blow Normal。 (3)IO狀態(tài)控制線程 此線程用于檢測由系統(tǒng)輸入的各個離散量,以及從數(shù)控程序得到的指令來輸出機床各離散量的狀態(tài)。此線程優(yōu)先級比前兩線程高,等級為:Normal。 (4)數(shù)據(jù)預處理線程 數(shù)據(jù)預處理線程主要負責完成編碼形式轉換、刀具長度補償、刀具半徑補償和公英制轉換等運動控制數(shù)據(jù)預處理函數(shù)的執(zhí)行。等級為:Normal。 (5)運動控制線程 此線程主要用于運動控制器執(zhí)行數(shù)控代碼函數(shù)的運行。負責向緩沖器輸入運動控制命令,清空緩沖器和打開關閉緩沖器等操作。等級稍高:Above Normal。 (6)緊急控制線程 此線程處理一些需要機床立即做出反應的時間,如機床的急停等。優(yōu)先級最高,等級為:Highest。 本系統(tǒng)中所創(chuàng)建的輔助線程可大致劃分如下表1所示。   表1 線程的創(chuàng)建及優(yōu)先級設置
4 多線程的實現(xiàn) 在Windows操作系統(tǒng)中,多線程的實現(xiàn)需要調用一系列的API函數(shù),如CreateThread、ResumeThread等,比較麻煩且容易出錯。使用新一代RAD開發(fā)工具C++ Builder中的TThread類,可以方便地實現(xiàn)多線程的編程,特別是對于系統(tǒng)開發(fā)語言是C的Windows系列操作系統(tǒng),它具有其它編程語言無可比擬的優(yōu)勢。 4.1 線程的創(chuàng)建 在C++ Builder中雖然用TThread對象說明了線程的概念,但是TThread對象本身并不完整,需要在TThread下新建其子類,并重載Execute來使用線程對象。 在C++ Builder IDE環(huán)境下選擇菜單File|New,在New欄中選中Thread Object,按OK,在彈出的對話框中輸入TThread對象子類的名字CoordinateDisplyThread,自動創(chuàng)建了一個CoordinateDisply的TThread子類。同時在編輯器中創(chuàng)建了一個名為CoordinateDisplyThread單元。 4.2 線程的實現(xiàn) 在創(chuàng)建的代碼中Execute()函數(shù)就是要在線程中實現(xiàn)的任務的代碼所在處。在原Unit1.cpp代碼中包含了CoordinateDisplayThread.h文件。使用時,動態(tài)創(chuàng)建一個TCoordinateDisplay對象,具體執(zhí)行的代碼就是Execute()方法重載的代碼。 由于Execute()中添加的線程運行時所需要執(zhí)行的函數(shù)調用了VCL組件,而VCL對象不具有線程安全性,它們的特性和方法只能在主線程中訪問,所以用Synchronize()函數(shù)將坐標顯示函數(shù)進行包裝。而坐標顯示函數(shù)需如下聲明: void_fastcall Function(). 下面以坐標顯示線程即CoordinateDisplayThread的實現(xiàn)步驟為例,說明線程實現(xiàn)的具體方法。其他線程的實現(xiàn)需根據(jù)具體情況,進行修正。 在CoordinateDisplayThread.cpp文件中的CoordinateDisplayThread::Execute()函數(shù)里添加如下語句,實現(xiàn)X、Y、Z坐標顯示函數(shù)調用的一致性。 首先用switch語句判斷單軸運動中的哪一軸的坐標位置發(fā)生改變:
做好上述準備工作之后,需要在主單元中的適當?shù)奈恢锰砑娱_始線程和掛起線程的命令。代碼如下所示:
4.3 關于線程同步 線程同步在編程技術中非常重要,當一個線程在訪問一個進程對象時,如果另一個線程要改變該對象,可能產(chǎn)生錯誤的結果。在本例開發(fā)應用中,利用API函數(shù),可以直接使用臨界或互斥來達到同步的目的。為了提高同步的可靠性和靈活性,同時用到了標志變量和臨界機制。只需在程序中聲明一個TRTLCriticalSection類型的變量Sect1,并在主線程的構造函數(shù)中進行初始化。之后在某個線程中,可以把相應的代碼標記為臨界部分,當在一個線程中調用EnterCriticalSection()并傳遞Sect1時,就設置多個數(shù)據(jù)成員,以表明臨界部分進入活動狀態(tài)。如果另一個線程要調用它自己的臨界部分時,函數(shù)EnterCriticalSection()將發(fā)現(xiàn)有一個臨界部分正在使用,就讓第二個線程處于休眠狀態(tài),直到第一個線程退出臨界部分為止。 5 結束語 本文將C++ builder多線程技術應用于開放式數(shù)控系統(tǒng)的軟件設計中,有效的解決了線程同步問題,保證了數(shù)控軟件系統(tǒng)的實時性要求,取得了較好的運用效果。

標簽:

點贊

分享到:

上一篇:汽車電子保護電路設計

下一篇:微能WIN-V63矢量控制變頻器在...

中國傳動網(wǎng)版權與免責聲明:凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(wǎng)(m.u63ivq3.com)獨家所有。如需轉載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉載使用時須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責任。

本網(wǎng)轉載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。

網(wǎng)站簡介|會員服務|聯(lián)系方式|幫助信息|版權信息|網(wǎng)站地圖|友情鏈接|法律支持|意見反饋|sitemap

傳動網(wǎng)-工業(yè)自動化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務平臺

網(wǎng)站客服服務咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權所有
粵ICP備 14004826號 | 營業(yè)執(zhí)照證書 | 不良信息舉報中心 | 粵公網(wǎng)安備 44030402000946號