亚洲精华国产精华精华液网站,你懂的,娇生惯养4ph归寻(矜以),丰年经继拇中文3与其他教材比较

技術頻道

娓娓工業
您現在的位置: 中國傳動網 > 技術頻道 > 技術百科 > 多線程火工品壓藥機控制程序設計初探

多線程火工品壓藥機控制程序設計初探

時間:2008-04-21 13:11:00來源:zhangting

導語:?火工品在運載火箭和導彈武器中的應用極為廣泛。
引 言 在工業控制系統中使用的各種工控軟件往往要同時執行多任務,如數據采集、控制信息實時計算和輸出、現場各類數據和狀態的實時顯示、各種報表的實時顯示和打印、各種鍵盤命令的實時讀取和響應以及數據通信等等。這些任務雖然在實時性上要求有些不同,但本質上都是并行進行的,因此要求開發的控制系統能實現實時多任務。 火工品在運載火箭和導彈武器中的應用極為廣泛,火工品壓藥機主要是用于火工品生產過程中壓藥工藝的專用自動化壓藥設備,本文結合一種精密氣動壓力機控制軟件的開發,分析在工控軟件中如何利用Windows提供的多線程技術。 多線程概述 作為一個多線程的操作系統,Windows實行的是搶先式多任務。在Windows環境中,每個正在運行的程序都建立一個進程,每個進程至少由一個線程組成,每個進程可以同時執行多個線程。線程與進程是兩個相關的概念,進程是資源分配的單元,線程是系統調度的單元。在一個進程中存在的多個線程間要進行同步、通信,以實現復雜的邏輯功能,如共享內存映射文件、訪問共享數據以及使用同一消息隊列等。系統創建好進程后,實際上就啟動了主線程,主線程把程序的啟動點提供給Windows系統,而后按消息觸發隊列順序執行。主線程與進程同時存在,同時消失。在多線程執行中系統會根據線程的優先級和同步要求分配時間單元用于執行多個線程,這樣實現了多任務分時占有CPU ,可在一個段時間內并行完成多個任務,達到實時性要求,大大提高了系統資源的利用率,有利于用戶按要求完成復雜的任務。系統的處理器調度算法基于以下兩點:①基于線程優先級的可搶占調度算法。②同優先級線程采用按時間片輪轉的算法。CPU調度進程方式如圖1示。 [align=center] 圖1 操作系統以輪轉方式安排每個線程的CPU方式[/align] 多線程操作 線程的啟動 創建一個用戶界面線程,首先要從類CwinThread產生一個派生類,同時必須使用DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE來聲明和實現這個CwinThread派生類。 而后,根據需要重載該派生類的一些成員函數如ExitInstance()、InitInstance()、OnIdle()、PreTranslateMessage()等,最后啟動該用戶界面線程,調用AfxBeginThread()函數的一個版本: CWinThread* AfxBeginThread( CRuntimeClass* pThreadClass, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL ); 其中第一個參數為指向定義的用戶界面線程類指針變量,第二個參數為線程的優先級,第三個參數為線程所對應的堆棧大小,第四個參數為線程創建時的附加標志,缺省為正常狀態,如為CREATE_SUSPENDED則線程啟動后為掛起狀態。 對于工作線程來說,啟動一個線程,首先需要編寫一個希望與應用程序的其余部分并行運行的函數如exec(),接著定義一個指向CwinThread對象的指針變量*pThread,調用AfxBeginThread(exec,param,priority)函數,返回值付給pThread變量的同時一并啟動該線程來執行上面的exec()函數,其中exec是線程要運行的函數的名字,也是上面所說的控制函數的名字,param是準備傳送給線程函數exec的任意32位值,priority則是定義該線程的優先級別,它是預定義的常數。 線程的終止 終止線程有三種途徑,線程可以在自身內部調用AfxEndThread()來終止自身的運行;可以在線程的外部調用BOOL TerminateThread( HANDLE hThread, DWORD dwExitCode )來強行終止一個線程的運行,然后調用CloseHandle()函數釋放線程所占用的堆棧;第三種方法是改變全局變量,使線程的執行函數返回,則該線程終止。 線程的同步 使用多線程開發用戶程序時,經常需要協調兩種或多種動作,這種過程就稱作同步(Synchronization)。需要利用同步的原因是:(1)當兩個或多個線程需要訪問一個共享的資源,而此資源一次只能被一個線程所使用; (2)當一個線程正在等候由另一個線程所引起的事件。 Win32操作系統提供了幾種同步對象允許線程來同步它們之間的行為。這些同步對象包括臨界區(criticalse ction)、互斥量(mutexe)、信號量(semaphore)和事件(event)等。 (1)臨界區 臨界區是一小段代碼,它要求在執行以前取得對某些共享數據的獨占訪問權。 (2)互斥量 互斥和臨界區非常相似,只不過它們可被用來同步多個進程間的數據訪問。 (3)信號量 信號量內核對象用于系統的資源計數。它們為線程提供了查詢可用資源數目的能力,對某個線程如果有一個或者多個資源可用,可用資源計數就減1。只有在資源計數加1之后,系統才會讓別的進程訪問此資源。 (4)事件 事件對象是同步對象的最基本形式,它與互斥量和信號量大不相同。互斥量和信號量通常用來控制對數據的訪問,但事件是用來發信號以表示某一操作己經完成。 壓藥機控制系統多任務的實現 線程的分配 由于軟件的工作比較復雜,軟件設計時采用了4個線程完成。除了第一個主界面線程外還有執行線程、顯示線程、A/D轉換監視線程。 1.主線程的主要功能: (1)創建兩個定時器,一個為50ms Windows定時器,其功能是向顯示線程發送消息,驅動顯示線程,另一個為20ms多媒體定時器,功能是向執行線程發送消息,驅動執行線程。 (2)主線程產生一個用戶線程,用于監視A/D轉換事件。 (3)接收用戶從鍵盤輸入的信息,執行相應過程。 主線程流程圖如圖2所示。 [align=center] 圖2 主線程流程圖[/align] 2.執行線程負責執行自動壓藥,及停止自動壓藥等功能,本程序的大部分工作由執行線程完成。執行線程流程圖如圖3所示。 [align=center] 圖3 執行線程流程圖[/align] 3.參數實時顯示線程負責實時顯示壓力值、保壓時間以及錯誤信息。 4. A/D轉換監視線程用于監視A/D轉換。 執行線程的實現 如圖3所示,在本系統軟件中執行線程完成系統的大部分工作,執行線程函數的定義如下:   LRESUL   CJmqyView::OnTimerProc(WPARAM wParam, LPARAM lParam)   {   if( !bfPCL812PG ) //數據采集卡不存在   return( 1 );   InputFromPCL812PG(); //數據采集卡PCL-812PG 輸入操作   if(inBit.start && !inBit0.start )//啟動按鈕按下   OnStart();   else if( inBit.stop && !inBit0.stop ) //停止按鈕按下   OnStop();   execTask(); //執行任務   OutputToPCL812PG(); //數據采集卡PCL-812PG 輸出操作   } 某壓藥機控制系統有豐富的人機界面來接受用戶的鍵盤以及鼠標操作,系統正是通過這些操作來完成整個控制系統的任務。當控制系統啟動時,首先建立起主線程接受用戶的鍵盤、鼠標操作,完成用戶的工藝參數的輸入,啟動A/D轉化監視線程,同時主線程也創建兩個定時器用以驅動執行線程、顯示線程。主線程相應定時器發送的定時時間到達消息,并分別發送消息驅動執行線程或顯示線程。顯示線程將壓藥機的實時壓力、及保壓時間呈現在用戶界面上,方便用戶的下一步操作。 結 語 在傳統的DOS環境下開發的控制系統軟件為了實現并行多任務,采用基于中斷的調度和循環輪流的方式,CPU的利用率較低,而在Windows環境下則可以利用Windows提供的多線程技術,既可以方便的實現上述并行多任務,又充分利用了CPU時間。實踐證明,采用多線程技術開發的某型壓藥機控制系統軟件,較好的保證了系統在多任務環境下的實時性和穩定性。隨著工業控制系統的日益復雜,系統在同一時間所要執行的任務不斷增加,多線程編程技術將會越來越明顯的體現出它的優點。 參考文獻: 1. 葛景國,陳立功,倪純珍,焊縫偏差實時監控軟件的開發[J],算機工程,2004(4) 2. 何其昌,Windows下工控軟件的研制[J].制造業自動化,2002(24) 3. 鄭連清,劉榮,王玨,劉其坤,火工品壓藥工藝方法的改進[J],火工品,1999(1) 4. 廖春蘭,基于多線程的實時測控系統研究[J].機電工程技術,2006(35) 5. 邱仲潘,柯渝,謝燕華等,Visual C++6從入門到精通[M],電子工業出版社,2005

標簽:

點贊

分享到:

上一篇:淺析YB47型硬盒包裝機商標紙...

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

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

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

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

傳動網-工業自動化與智能制造的全媒體“互聯網+”創新服務平臺

網站客服服務咨詢采購咨詢媒體合作

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

主站蜘蛛池模板: 蓝田县| 鹤山市| 黄陵县| 铜川市| 广西| 陈巴尔虎旗| 广宁县| 二连浩特市| 福建省| 禹州市| 信阳市| 合水县| 大荔县| 屏南县| 新竹市| 尉氏县| 昔阳县| 庆城县| 龙泉市| 崇义县| 金平| 株洲县| 曲靖市| 新乐市| 龙游县| 乌恰县| 内丘县| 平罗县| 上林县| 日喀则市| 新津县| 奈曼旗| 龙门县| 白河县| 固镇县| 长泰县| 星子县| 崇义县| 襄垣县| 花莲县| 湖口县|