<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > 基于高檔數控系統的實(shí)時(shí)多任務(wù)實(shí)現

基于高檔數控系統的實(shí)時(shí)多任務(wù)實(shí)現

作者: 時(shí)間:2016-09-16 來(lái)源:網(wǎng)絡(luò ) 收藏

  0 引言

本文引用地址:http://dyxdggzs.com/article/201609/297029.htm

  實(shí)時(shí)性是一項重要的性能指標。

  通信在IPC(Industrial Personal Computer)與運動(dòng)控制器構成的開(kāi)放式開(kāi)發(fā)平臺上,雖然這種主從式結構,確保了運動(dòng)控制指令在運動(dòng)控制器內高速、實(shí)時(shí)的被執行,但在PC平臺上,仍需要完成諸如實(shí)時(shí)顯示、預處理計算、系統狀態(tài)監控等許多任務(wù)。為了保證系統的實(shí)時(shí)性能,擬采用多線(xiàn)程技術(shù),通過(guò)多任務(wù)并行處理的方式,提高系統實(shí)時(shí)性。

  1 與線(xiàn)程以及多線(xiàn)程技術(shù)

  Windows操作系統既支持多,又支持多線(xiàn)程。一個(gè)就是應用程序的一個(gè)實(shí)例,一次執行過(guò)程也就是調入內存準備執行的程序,包括當前執行的應用程序的執行代碼和程序執行相關(guān)的一些環(huán)境信息。每個(gè)進(jìn)程擁有整臺計算機的資源,無(wú)須知道其他進(jìn)程在計算機中的信息。通常每個(gè)進(jìn)程至少有一個(gè)線(xiàn)程在執行所屬地址空間中的代碼,該線(xiàn)程稱(chēng)為主線(xiàn)程,如果該主線(xiàn)程運行結束,系統將自動(dòng)清除進(jìn)程及其他地址空間。

  線(xiàn)程是進(jìn)程內部執行的路徑,是操作系統分配CPU時(shí)間的基本實(shí)體,是程序運行的最小單位。每個(gè)進(jìn)程都由主線(xiàn)程開(kāi)始進(jìn)行應用程序的執行。線(xiàn)程由一個(gè)堆棧、CPU寄存器的狀態(tài)和系統調用列表中的一個(gè)人口組成。每個(gè)進(jìn)程可以包含一個(gè)以上的線(xiàn)程,這些線(xiàn)程可以同時(shí)獨立地執行進(jìn)程地址空間中的代碼,共享進(jìn)程中的所有資源。

  Windows系統分配處理器時(shí)間的最小單位是線(xiàn)程,系統不停地在各個(gè)線(xiàn)程之間切換。在PC機中,同一時(shí)間只有一個(gè)線(xiàn)程在運行。通常系統為每個(gè)線(xiàn)程劃分的時(shí)間片很小(ms級別),這樣快速系統的實(shí)時(shí)性就有了保障。

  要實(shí)現多線(xiàn)程編程,可建立輔助線(xiàn)程(Worker Thread)和用戶(hù)界面線(xiàn)程(User Interface Thread)。輔助線(xiàn)程主要用來(lái)執行數控程序、坐標顯示、動(dòng)態(tài)仿真和數據預處理;用戶(hù)界面線(xiàn)程用來(lái)處理用戶(hù)的輸入,響應用戶(hù)產(chǎn)生的事件和消息。

  2 實(shí)時(shí)多任務(wù)的實(shí)現

  軟件具有實(shí)時(shí)性和多任務(wù)兩大特點(diǎn)。數控系統中要管理和控制的任務(wù)很多,如當數控系統正處于加工控制狀態(tài)時(shí),為了保證加工的連續性,在各個(gè)程序段之間不停頓,各數控加工程序段的預處理、插補計算、位置控制和各種輔助控制任務(wù)都要及時(shí)進(jìn)行;為了使操作人員及時(shí)了解和干預數控系統的工作狀態(tài),系統在執行加工任務(wù)的同時(shí)還應該及時(shí)進(jìn)行一些人機交互工作,即顯示加工狀態(tài)、接收操作人員通過(guò)操作面板輸入的各種改變系統狀態(tài)的控制信號等。為了及時(shí)檢查和預報軟、硬件的各種故障,系統在運行控制程序和人機交互程序同時(shí)還要及時(shí)運行診斷程序;此外,系統還可能被要求及時(shí)完成通信等其他任務(wù)??梢?jiàn),理想的數控程序,應具有實(shí)時(shí)多任務(wù)的處理能力。

  針對數控系統軟件的實(shí)時(shí)性和多任務(wù)性?xún)纱筇攸c(diǎn),采用分時(shí)并行處理技術(shù)來(lái)確定數控系統軟件結構。分時(shí)并行處理技術(shù)是指一個(gè)處理器同時(shí)完成多種任務(wù)。系統用時(shí)間片輪換的方式處理和完成各任務(wù),即按照某種輪換次序給每個(gè)任務(wù)分配一段CPU時(shí)間進(jìn)行各任務(wù)的處理。從微觀(guān)上看,各任務(wù)分時(shí)占用CPU;從宏觀(guān)的角度來(lái)看,在一段時(shí)間內,CPU并行完成了多個(gè)任務(wù)。在軟件設計中,利用Windows的多線(xiàn)程技術(shù)以“資源分時(shí)共享”為原則,有效地解決CNC系統的實(shí)時(shí)多任務(wù)問(wèn)題。應用優(yōu)先級搶占方式來(lái)進(jìn)行線(xiàn)程調度,以滿(mǎn)足系統的實(shí)時(shí)性要求,利用時(shí)間重疊和資源共享的方法來(lái)實(shí)現并行處理。

  2.1 系統線(xiàn)程的總體設計

  Windows提供兩種線(xiàn)程,輔助線(xiàn)程和主線(xiàn)程。主線(xiàn)程有窗口,因此它有自己的消息循環(huán),可以處理消息,使程序能夠迅速響應命令和其他事件;輔助線(xiàn)程沒(méi)有窗口,所以它不需要處理消息。它可用于完成一些費時(shí)的工作,以免在由主線(xiàn)程處理這些工作時(shí)阻礙程序消息的處理。軟件設計時(shí)有并行要求的模塊置于獨立的線(xiàn)程中,以實(shí)現系統的多任務(wù)并行工作。根據對系統實(shí)時(shí)多任務(wù)的分析,將軟件系統中的線(xiàn)程設計為:

  (1)主線(xiàn)程

  主線(xiàn)程是應用系統啟動(dòng)時(shí)創(chuàng )建的第一個(gè)線(xiàn)程,其他線(xiàn)程都是由主線(xiàn)程直接或間接創(chuàng )建。主線(xiàn)程主要負責創(chuàng )建客戶(hù)界面、數據顯示、與客戶(hù)交互、系統初始化以及對其他線(xiàn)程進(jìn)行監控。

  (2)譯碼線(xiàn)程

  譯碼線(xiàn)程是由主線(xiàn)程創(chuàng )建的,負責程序的譯碼,并將計算結構存入公共數據區,為通信線(xiàn)程提供數據來(lái)源。

  (3)通信線(xiàn)程

  通信線(xiàn)程負責上下位機間的數據傳輸。上下位機間的傳輸以一來(lái)一回的形式進(jìn)行。通信線(xiàn)程接收到下位機傳來(lái)的數據,根據事先定義好的協(xié)議對它進(jìn)行識別,并根據識別的結果來(lái)判斷是否需要將插補命令等傳給下位機,還需要通知主線(xiàn)程來(lái)處理異常情況。

  通信線(xiàn)程所承擔的任務(wù)是強實(shí)時(shí)周期性任務(wù),譯碼線(xiàn)程所承擔的任務(wù)是弱實(shí)時(shí)性任務(wù),主線(xiàn)程承擔的是實(shí)時(shí)突發(fā)性任務(wù)。因此根據系統任務(wù)實(shí)時(shí)性強弱不同,可為各個(gè)線(xiàn)程設置相應的優(yōu)先級來(lái)確保實(shí)時(shí)性。主線(xiàn)程與進(jìn)程的優(yōu)先級相同,通信線(xiàn)程的優(yōu)先級高于主線(xiàn)程,而譯碼線(xiàn)程的優(yōu)先級高于主線(xiàn)程低于通信線(xiàn)程。

  在線(xiàn)程優(yōu)先級設置中,通信線(xiàn)程的優(yōu)先級最高,這使得通信線(xiàn)程在需要CPU時(shí)間片等資源時(shí),能夠順利的搶占其他線(xiàn)程的資源,保證上下位機的通信順暢,使下位機在加工時(shí)能夠平穩的實(shí)現進(jìn)程,并且使下位機在出現異常情況時(shí)能及時(shí)通知上位機。由于通信這一動(dòng)作是依照某種頻率進(jìn)行的,因此通信線(xiàn)程不會(huì )一直占用CPU資源,從而不會(huì )因為它的優(yōu)先級高使其他線(xiàn)程無(wú)法運行。

  具體實(shí)現原理架構如圖1所示。

  

 

  2.2 系統線(xiàn)程的具體實(shí)現

  Delphi提供了許多與多線(xiàn)程編程相關(guān)的組件,其中最重要的是Tthread類(lèi),本文就是利用它來(lái)實(shí)現多線(xiàn)程編程。該類(lèi)封裝了大多數與線(xiàn)程相關(guān)的方法,使用Tthread類(lèi)大大簡(jiǎn)化了多線(xiàn)程程序的開(kāi)發(fā)步驟。Tthread類(lèi)是一個(gè)抽象類(lèi),不可以直接創(chuàng )建它的實(shí)例,但是可以創(chuàng )建它的派生類(lèi)。創(chuàng )建方法在Delphi菜單中依次選擇“File”→“New”→“Other”→“New”,選擇“Thread Object”項,在對話(huà)框中輸入新的線(xiàn)程類(lèi)的名稱(chēng),確認后即創(chuàng )建了一個(gè)新的線(xiàn)程類(lèi):

  

 

  其中:“private”及“protected”用來(lái)定義變量和程序函數,“procedure Execute;override;”是線(xiàn)程函數,用來(lái)編寫(xiě)線(xiàn)程的執行部分。同時(shí)Delphi還提供了各種函數用來(lái)運行和終止線(xiàn)程等。創(chuàng )建了線(xiàn)程的派生類(lèi)后可以生成該類(lèi)的對象,來(lái)表示應用程序的執行線(xiàn)程。各個(gè)線(xiàn)程創(chuàng )建好后將NC的解釋程序、通信程序等放在各自線(xiàn)程函數內,再創(chuàng )建線(xiàn)程的對象,設置幾個(gè)線(xiàn)程就生成幾個(gè)對象,在對象內編寫(xiě)打開(kāi)或終止線(xiàn)程等函數來(lái)控制線(xiàn)程的運行。

  3 結語(yǔ)

  基于Windows平臺的高檔數控實(shí)時(shí)操作系統的開(kāi)發(fā),實(shí)現了不僅能向Windows平臺添加實(shí)時(shí)功能,而且使這些實(shí)時(shí)功能具有很好的可擴展性。本課題下步的目標是將此實(shí)時(shí)系統的設計實(shí)現在Windows XPEmbedded平臺上,使其具備高檔數控系統需要的嵌入式設備的特性。



關(guān)鍵詞: 進(jìn)程 數控系統

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>