0 引言
實時性是數(shù)控系統(tǒng)一項重要的性能指標(biāo),。
通信在IPC(Industrial Personal Computer)與運(yùn)動控制器構(gòu)成的開放式數(shù)控系統(tǒng)開發(fā)平臺上,雖然這種主從式結(jié)構(gòu),,確保了運(yùn)動控制指令在運(yùn)動控制器內(nèi)高速,、實時的被執(zhí)行,但在PC平臺上,,仍需要完成諸如實時顯示,、預(yù)處理計算、系統(tǒng)狀態(tài)監(jiān)控等許多任務(wù),。為了保證系統(tǒng)的實時性能,,擬采用多線程技術(shù),通過多任務(wù)并行處理的方式,,提高系統(tǒng)實時性,。
1 進(jìn)程與線程以及多線程技術(shù)
Windows操作系統(tǒng)既支持多進(jìn)程,又支持多線程,。一個進(jìn)程就是應(yīng)用程序的一個實例,,一次執(zhí)行過程也就是調(diào)入內(nèi)存準(zhǔn)備執(zhí)行的程序,包括當(dāng)前執(zhí)行的應(yīng)用程序的執(zhí)行代碼和程序執(zhí)行相關(guān)的一些環(huán)境信息,。每個進(jìn)程擁有整臺計算機(jī)的資源,,無須知道其他進(jìn)程在計算機(jī)中的信息。通常每個進(jìn)程至少有一個線程在執(zhí)行所屬地址空間中的代碼,,該線程稱為主線程,,如果該主線程運(yùn)行結(jié)束,系統(tǒng)將自動清除進(jìn)程及其他地址空間,。
線程是進(jìn)程內(nèi)部執(zhí)行的路徑,,是操作系統(tǒng)分配CPU時間的基本實體,是程序運(yùn)行的最小單位,。每個進(jìn)程都由主線程開始進(jìn)行應(yīng)用程序的執(zhí)行,。線程由一個堆棧,、CPU寄存器的狀態(tài)和系統(tǒng)調(diào)用列表中的一個人口組成。每個進(jìn)程可以包含一個以上的線程,,這些線程可以同時獨(dú)立地執(zhí)行進(jìn)程地址空間中的代碼,,共享進(jìn)程中的所有資源。
Windows系統(tǒng)分配處理器時間的最小單位是線程,,系統(tǒng)不停地在各個線程之間切換,。在PC機(jī)中,同一時間只有一個線程在運(yùn)行,。通常系統(tǒng)為每個線程劃分的時間片很小(ms級別),,這樣快速系統(tǒng)的實時性就有了保障。
要實現(xiàn)多線程編程,,可建立輔助線程(Worker Thread)和用戶界面線程(User Interface Thread),。輔助線程主要用來執(zhí)行數(shù)控程序、坐標(biāo)顯示,、動態(tài)仿真和數(shù)據(jù)預(yù)處理,;用戶界面線程用來處理用戶的輸入,響應(yīng)用戶產(chǎn)生的事件和消息,。
2 實時多任務(wù)的實現(xiàn)
數(shù)控系統(tǒng)軟件具有實時性和多任務(wù)兩大特點(diǎn)。數(shù)控系統(tǒng)中要管理和控制的任務(wù)很多,,如當(dāng)數(shù)控系統(tǒng)正處于加工控制狀態(tài)時,,為了保證加工的連續(xù)性,在各個程序段之間不停頓,,各數(shù)控加工程序段的預(yù)處理,、插補(bǔ)計算、位置控制和各種輔助控制任務(wù)都要及時進(jìn)行,;為了使操作人員及時了解和干預(yù)數(shù)控系統(tǒng)的工作狀態(tài),,系統(tǒng)在執(zhí)行加工任務(wù)的同時還應(yīng)該及時進(jìn)行一些人機(jī)交互工作,即顯示加工狀態(tài),、接收操作人員通過操作面板輸入的各種改變系統(tǒng)狀態(tài)的控制信號等,。為了及時檢查和預(yù)報軟、硬件的各種故障,,系統(tǒng)在運(yùn)行控制程序和人機(jī)交互程序同時還要及時運(yùn)行診斷程序,;此外,系統(tǒng)還可能被要求及時完成通信等其他任務(wù),??梢姡硐氲臄?shù)控程序,,應(yīng)具有實時多任務(wù)的處理能力,。
針對數(shù)控系統(tǒng)軟件的實時性和多任務(wù)性兩大特點(diǎn),,采用分時并行處理技術(shù)來確定數(shù)控系統(tǒng)軟件結(jié)構(gòu)。分時并行處理技術(shù)是指一個處理器同時完成多種任務(wù),。系統(tǒng)用時間片輪換的方式處理和完成各任務(wù),,即按照某種輪換次序給每個任務(wù)分配一段CPU時間進(jìn)行各任務(wù)的處理。從微觀上看,,各任務(wù)分時占用CPU,;從宏觀的角度來看,在一段時間內(nèi),,CPU并行完成了多個任務(wù),。在軟件設(shè)計中,利用Windows的多線程技術(shù)以“資源分時共享”為原則,,有效地解決CNC系統(tǒng)的實時多任務(wù)問題,。應(yīng)用優(yōu)先級搶占方式來進(jìn)行線程調(diào)度,以滿足系統(tǒng)的實時性要求,,利用時間重疊和資源共享的方法來實現(xiàn)并行處理,。
2.1 系統(tǒng)線程的總體設(shè)計
Windows提供兩種線程,輔助線程和主線程,。主線程有窗口,,因此它有自己的消息循環(huán),可以處理消息,,使程序能夠迅速響應(yīng)命令和其他事件,;輔助線程沒有窗口,所以它不需要處理消息,。它可用于完成一些費(fèi)時的工作,,以免在由主線程處理這些工作時阻礙程序消息的處理。軟件設(shè)計時有并行要求的模塊置于獨(dú)立的線程中,,以實現(xiàn)系統(tǒng)的多任務(wù)并行工作,。根據(jù)對系統(tǒng)實時多任務(wù)的分析,將軟件系統(tǒng)中的線程設(shè)計為:
(1)主線程
主線程是應(yīng)用系統(tǒng)啟動時創(chuàng)建的第一個線程,,其他線程都是由主線程直接或間接創(chuàng)建,。主線程主要負(fù)責(zé)創(chuàng)建客戶界面、數(shù)據(jù)顯示,、與客戶交互,、系統(tǒng)初始化以及對其他線程進(jìn)行監(jiān)控。
(2)譯碼線程
譯碼線程是由主線程創(chuàng)建的,,負(fù)責(zé)程序的譯碼,,并將計算結(jié)構(gòu)存入公共數(shù)據(jù)區(qū),為通信線程提供數(shù)據(jù)來源,。
(3)通信線程
通信線程負(fù)責(zé)上下位機(jī)間的數(shù)據(jù)傳輸,。上下位機(jī)間的傳輸以一來一回的形式進(jìn)行,。通信線程接收到下位機(jī)傳來的數(shù)據(jù),根據(jù)事先定義好的協(xié)議對它進(jìn)行識別,,并根據(jù)識別的結(jié)果來判斷是否需要將插補(bǔ)命令等傳給下位機(jī),,還需要通知主線程來處理異常情況。
通信線程所承擔(dān)的任務(wù)是強(qiáng)實時周期性任務(wù),,譯碼線程所承擔(dān)的任務(wù)是弱實時性任務(wù),,主線程承擔(dān)的是實時突發(fā)性任務(wù)。因此根據(jù)系統(tǒng)任務(wù)實時性強(qiáng)弱不同,,可為各個線程設(shè)置相應(yīng)的優(yōu)先級來確保實時性,。主線程與進(jìn)程的優(yōu)先級相同,通信線程的優(yōu)先級高于主線程,,而譯碼線程的優(yōu)先級高于主線程低于通信線程,。
在線程優(yōu)先級設(shè)置中,通信線程的優(yōu)先級最高,,這使得通信線程在需要CPU時間片等資源時,,能夠順利的搶占其他線程的資源,保證上下位機(jī)的通信順暢,,使下位機(jī)在加工時能夠平穩(wěn)的實現(xiàn)進(jìn)程,,并且使下位機(jī)在出現(xiàn)異常情況時能及時通知上位機(jī)。由于通信這一動作是依照某種頻率進(jìn)行的,,因此通信線程不會一直占用CPU資源,,從而不會因為它的優(yōu)先級高使其他線程無法運(yùn)行。
具體實現(xiàn)原理架構(gòu)如圖1所示,。
2.2 系統(tǒng)線程的具體實現(xiàn)
Delphi提供了許多與多線程編程相關(guān)的組件,其中最重要的是Tthread類,,本文就是利用它來實現(xiàn)多線程編程,。該類封裝了大多數(shù)與線程相關(guān)的方法,使用Tthread類大大簡化了多線程程序的開發(fā)步驟,。Tthread類是一個抽象類,,不可以直接創(chuàng)建它的實例,但是可以創(chuàng)建它的派生類,。創(chuàng)建方法在Delphi菜單中依次選擇“File”→“New”→“Other”→“New”,,選擇“Thread Object”項,在對話框中輸入新的線程類的名稱,,確認(rèn)后即創(chuàng)建了一個新的線程類:
其中:“private”及“protected”用來定義變量和程序函數(shù),,“procedure Execute;override,;”是線程函數(shù),,用來編寫線程的執(zhí)行部分,。同時Delphi還提供了各種函數(shù)用來運(yùn)行和終止線程等。創(chuàng)建了線程的派生類后可以生成該類的對象,,來表示應(yīng)用程序的執(zhí)行線程,。各個線程創(chuàng)建好后將NC的解釋程序、通信程序等放在各自線程函數(shù)內(nèi),,再創(chuàng)建線程的對象,,設(shè)置幾個線程就生成幾個對象,在對象內(nèi)編寫打開或終止線程等函數(shù)來控制線程的運(yùn)行,。
3 結(jié)語
基于Windows平臺的高檔數(shù)控實時操作系統(tǒng)的開發(fā),,實現(xiàn)了不僅能向Windows平臺添加實時功能,而且使這些實時功能具有很好的可擴(kuò)展性,。本課題下步的目標(biāo)是將此實時系統(tǒng)的設(shè)計實現(xiàn)在Windows XPEmbedded平臺上,,使其具備高檔數(shù)控系統(tǒng)需要的嵌入式設(shè)備的特性。