<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>

新聞中心

EEPW首頁(yè) > 消費電子 > 設計應用 > 多線(xiàn)程火工品壓藥機控制程序設計初探

多線(xiàn)程火工品壓藥機控制程序設計初探

作者:重慶通信學(xué)院 劉鵬 趙英 劉榮 時(shí)間:2008-04-17 來(lái)源: 收藏

  引言

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

  在工業(yè)控制系統中使用的各種工控軟件往往要同時(shí)執行多任務(wù),如數據采集、控制信息實(shí)時(shí)計算和輸出、現場(chǎng)各類(lèi)數據和狀態(tài)的實(shí)時(shí)顯示、各種報表的實(shí)時(shí)顯示和打印、各種鍵盤(pán)命令的實(shí)時(shí)讀取和響應以及數據通信等等。這些任務(wù)雖然在實(shí)時(shí)性上要求有些不同,但本質(zhì)上都是并行進(jìn)行的,因此要求開(kāi)發(fā)的控制系統能實(shí)現實(shí)時(shí)多任務(wù)。

  火工品在運載火箭和導彈武器中的應用極為廣泛,火工品主要是用于火工品生產(chǎn)過(guò)程中壓藥工藝的專(zhuān)用自動(dòng)化壓藥設備,本文結合一種精密氣動(dòng)壓力機控制軟件的開(kāi)發(fā),分析在工控軟件中如何利用Windows提供的技術(shù)。

  概述

  作為一個(gè)的操作系統,Windows實(shí)行的是搶先式多任務(wù)。在Windows環(huán)境中,每個(gè)正在運行的程序都建立一個(gè)進(jìn)程,每個(gè)進(jìn)程至少由一個(gè)線(xiàn)程組成,每個(gè)進(jìn)程可以同時(shí)執行多個(gè)線(xiàn)程。線(xiàn)程與進(jìn)程是兩個(gè)相關(guān)的概念,進(jìn)程是資源分配的單元,線(xiàn)程是系統調度的單元。在一個(gè)進(jìn)程中存在的多個(gè)線(xiàn)程間要進(jìn)行同步、通信,以實(shí)現復雜的邏輯功能,如共享內存映射文件、訪(fǎng)問(wèn)共享數據以及使用同一消息隊列等。系統創(chuàng )建好進(jìn)程后,實(shí)際上就啟動(dòng)了主線(xiàn)程,主線(xiàn)程把程序的啟動(dòng)點(diǎn)提供給Windows系統,而后按消息觸發(fā)隊列順序執行。主線(xiàn)程與進(jìn)程同時(shí)存在,同時(shí)消失。在多線(xiàn)程執行中系統會(huì )根據線(xiàn)程的優(yōu)先級和同步要求分配時(shí)間單元用于執行多個(gè)線(xiàn)程,這樣實(shí)現了多任務(wù)分時(shí)占有CPU ,可在一個(gè)段時(shí)間內并行完成多個(gè)任務(wù),達到實(shí)時(shí)性要求,大大提高了系統資源的利用率,有利于用戶(hù)按要求完成復雜的任務(wù)。系統的處理器調度算法基于以下兩點(diǎn):①基于線(xiàn)程優(yōu)先級的可搶占調度算法。②同優(yōu)先級線(xiàn)程采用按時(shí)間片輪轉的算法。CPU調度進(jìn)程方式如圖1示。

  多線(xiàn)程操作

  線(xiàn)程的啟動(dòng)

  創(chuàng )建一個(gè)用戶(hù)界面線(xiàn)程,首先要從類(lèi)CwinThread產(chǎn)生一個(gè)派生類(lèi),同時(shí)必須使用DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE來(lái)聲明和實(shí)現這個(gè)CwinThread派生類(lèi)。 而后,根據需要重載該派生類(lèi)的一些成員函數如ExitInstance()、InitInstance()、OnIdle()、PreTranslateMessage()等,最后啟動(dòng)該用戶(hù)界面線(xiàn)程,調用AfxBeginThread()函數的一個(gè)版本:

     CWinThread* AfxBeginThread( CRuntimeClass* pThreadClass,

      int nPriority = THREAD_PRIORITY_NORMAL,

       UINT nStackSize = 0,

        DWORD dwCreateFlags = 0,

        LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL );

  其中第一個(gè)參數為指向定義的用戶(hù)界面線(xiàn)程類(lèi)指針變量,第二個(gè)參數為線(xiàn)程的優(yōu)先級,第三個(gè)參數為線(xiàn)程所對應的堆棧大小,第四個(gè)參數為線(xiàn)程創(chuàng )建時(shí)的附加標志,缺省為正常狀態(tài),如為CREATE_SUSPENDED則線(xiàn)程啟動(dòng)后為掛起狀態(tài)。

  對于工作線(xiàn)程來(lái)說(shuō),啟動(dòng)一個(gè)線(xiàn)程,首先需要編寫(xiě)一個(gè)希望與應用程序的其余部分并行運行的函數如exec(),接著(zhù)定義一個(gè)指向CwinThread對象的指針變量*pThread,調用AfxBeginThread(exec,param,priority)函數,返回值付給pThread變量的同時(shí)一并啟動(dòng)該線(xiàn)程來(lái)執行上面的exec()函數,其中exec是線(xiàn)程要運行的函數的名字,也是上面所說(shuō)的控制函數的名字,param是準備傳送給線(xiàn)程函數exec的任意32位值,priority則是定義該線(xiàn)程的優(yōu)先級別,它是預定義的常數。

  線(xiàn)程的終止

  終止線(xiàn)程有三種途徑,線(xiàn)程可以在自身內部調用AfxEndThread()來(lái)終止自身的運行;可以在線(xiàn)程的外部調用BOOL TerminateThread( HANDLE hThread, DWORD dwExitCode )來(lái)強行終止一個(gè)線(xiàn)程的運行,然后調用CloseHandle()函數釋放線(xiàn)程所占用的堆棧;第三種方法是改變全局變量,使線(xiàn)程的執行函數返回,則該線(xiàn)程終止。

  線(xiàn)程的同步

  使用多線(xiàn)程開(kāi)發(fā)用戶(hù)程序時(shí),經(jīng)常需要協(xié)調兩種或多種動(dòng)作,這種過(guò)程就稱(chēng)作同步(Synchronization)。需要利用同步的原因是:(1)當兩個(gè)或多個(gè)線(xiàn)程需要訪(fǎng)問(wèn)一個(gè)共享的資源,而此資源一次只能被一個(gè)線(xiàn)程所使用; (2)當一個(gè)線(xiàn)程正在等候由另一個(gè)線(xiàn)程所引起的事件。

  Win32操作系統提供了幾種同步對象允許線(xiàn)程來(lái)同步它們之間的行為。這些同步對象包括臨界區(criticalse ction)、互斥量(mutexe)、信號量(semaphore)和事件(event)等。

  (1)臨界區

  臨界區是一小段代碼,它要求在執行以前取得對某些共享數據的獨占訪(fǎng)問(wèn)權。

  (2)互斥量

  互斥和臨界區非常相似,只不過(guò)它們可被用來(lái)同步多個(gè)進(jìn)程間的數據訪(fǎng)問(wèn)。

  (3)信號量

  信號量?jì)群藢ο笥糜谙到y的資源計數。它們?yōu)榫€(xiàn)程提供了查詢(xún)可用資源數目的能力,對某個(gè)線(xiàn)程如果有一個(gè)或者多個(gè)資源可用,可用資源計數就減1。只有在資源計數加1之后,系統才會(huì )讓別的進(jìn)程訪(fǎng)問(wèn)此資源。

  (4)事件

  事件對象是同步對象的最基本形式,它與互斥量和信號量大不相同?;コ饬亢托盘柫客ǔS脕?lái)控制對數據的訪(fǎng)問(wèn),但事件是用來(lái)發(fā)信號以表示某一操作己經(jīng)完成。

  控制系統多任務(wù)的實(shí)現

  線(xiàn)程的分配

  由于軟件的工作比較復雜,軟件設計時(shí)采用了4個(gè)線(xiàn)程完成。除了第一個(gè)主界面線(xiàn)程外還有執行線(xiàn)程、顯示線(xiàn)程、A/D轉換監視線(xiàn)程。

  1.主線(xiàn)程的主要功能:

  (1)創(chuàng )建兩個(gè)定時(shí)器,一個(gè)為50ms Windows定時(shí)器,其功能是向顯示線(xiàn)程發(fā)送消息,驅動(dòng)顯示線(xiàn)程,另一個(gè)為20ms,功能是向執行線(xiàn)程發(fā)送消息,驅動(dòng)執行線(xiàn)程。

  (2)主線(xiàn)程產(chǎn)生一個(gè)用戶(hù)線(xiàn)程,用于監視A/D轉換事件。

  (3)接收用戶(hù)從鍵盤(pán)輸入的信息,執行相應過(guò)程。

  主線(xiàn)程流程圖如圖2所示。

  2.執行線(xiàn)程負責執行自動(dòng)壓藥,及停止自動(dòng)壓藥等功能,本程序的大部分工作由執行線(xiàn)程完成。執行線(xiàn)程流程圖如圖3所示。

  3.參數實(shí)時(shí)顯示線(xiàn)程負責實(shí)時(shí)顯示壓力值、保壓時(shí)間以及錯誤信息。

  4. A/D轉換監視線(xiàn)程用于監視A/D轉換。

  執行線(xiàn)程的實(shí)現

  如圖3所示,在本系統軟件中執行線(xiàn)程完成系統的大部分工作,執行線(xiàn)程函數的定義如下:

  LRESUL
  CJmqyView::OnTimerProc(WPARAM wParam, LPARAM lParam)
  {
  if( !bfPCL812PG ) //數據采集卡不存在
  return( 1 );
  InputFromPCL812PG(); //數據采集卡PCL-812PG 輸入操作
  if(inBit.start && !inBit0.start )//啟動(dòng)按鈕按下
  OnStart();
  else if( inBit.stop && !inBit0.stop ) //停止按鈕按下
  OnStop();
  execTask();             //執行任務(wù)
  OutputToPCL812PG();   //數據采集卡PCL-812PG 輸出操作
  }  

  某控制系統有豐富的人機界面來(lái)接受用戶(hù)的鍵盤(pán)以及鼠標操作,系統正是通過(guò)這些操作來(lái)完成整個(gè)控制系統的任務(wù)。當控制系統啟動(dòng)時(shí),首先建立起主線(xiàn)程接受用戶(hù)的鍵盤(pán)、鼠標操作,完成用戶(hù)的工藝參數的輸入,啟動(dòng)A/D轉化監視線(xiàn)程,同時(shí)主線(xiàn)程也創(chuàng )建兩個(gè)定時(shí)器用以驅動(dòng)執行線(xiàn)程、顯示線(xiàn)程。主線(xiàn)程相應定時(shí)器發(fā)送的定時(shí)時(shí)間到達消息,并分別發(fā)送消息驅動(dòng)執行線(xiàn)程或顯示線(xiàn)程。顯示線(xiàn)程將壓藥機的實(shí)時(shí)壓力、及保壓時(shí)間呈現在用戶(hù)界面上,方便用戶(hù)的下一步操作。

  結語(yǔ)

  在傳統的DOS環(huán)境下開(kāi)發(fā)的控制系統軟件為了實(shí)現并行多任務(wù),采用基于中斷的調度和循環(huán)輪流的方式,CPU的利用率較低,而在Windows環(huán)境下則可以利用Windows提供的多線(xiàn)程技術(shù),既可以方便的實(shí)現上述并行多任務(wù),又充分利用了CPU時(shí)間。實(shí)踐證明,采用多線(xiàn)程技術(shù)開(kāi)發(fā)的某型壓藥機控制系統軟件,較好的保證了系統在多任務(wù)環(huán)境下的實(shí)時(shí)性和穩定性。隨著(zhù)工業(yè)控制系統的日益復雜,系統在同一時(shí)間所要執行的任務(wù)不斷增加,多線(xiàn)程編程技術(shù)將會(huì )越來(lái)越明顯的體現出它的優(yōu)點(diǎn)。

  參考文獻:

  1.  葛景國,陳立功,倪純珍,焊縫偏差實(shí)時(shí)監控軟件的開(kāi)發(fā)[J],算機工程,2004(4)

  2.  何其昌,Windows下工控軟件的研制[J].制造業(yè)自動(dòng)化,2002(24)

  3.  鄭連清,劉榮,王玨,劉其坤,火工品壓藥工藝方法的改進(jìn)[J],火工品,1999(1)

  4.  廖春蘭,基于多線(xiàn)程的實(shí)時(shí)測控系統研究[J].機電工程技術(shù),2006(35)

  5.  邱仲潘,柯渝,謝燕華等,Visual C++6從入門(mén)到精通[M],電子工業(yè)出版社,2005

c++相關(guān)文章:c++教程




評論


相關(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>