• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于多線程技術(shù)的測(cè)控系統(tǒng)軟件設(shè)計(jì)

    2016-09-09 02:51:32宋國(guó)堃趙世平
    電子設(shè)計(jì)工程 2016年16期
    關(guān)鍵詞:控制線線程測(cè)控

    楊 珂,宋國(guó)堃,趙世平

    (四川大學(xué) 制造科學(xué)與工程學(xué)院,四川 成都 610065)

    基于多線程技術(shù)的測(cè)控系統(tǒng)軟件設(shè)計(jì)

    楊 珂,宋國(guó)堃,趙世平

    (四川大學(xué) 制造科學(xué)與工程學(xué)院,四川 成都610065)

    根據(jù)某系統(tǒng)軟件設(shè)計(jì)的需要,開發(fā)了基于多線程技術(shù)的測(cè)控系統(tǒng)軟件。本文中所介紹的軟件是通過(guò)微軟.Net平臺(tái)下的C#語(yǔ)言實(shí)現(xiàn)的。該語(yǔ)言平臺(tái)提供強(qiáng)大的線程模型,完整的線程接口能夠滿足對(duì)線程操作的需要。軟件核心采用多線程技術(shù),將數(shù)據(jù)采集、試驗(yàn)控制、UI交互以及安全監(jiān)測(cè)等功能模塊放在不同線程內(nèi)執(zhí)行。線程同步技術(shù)保證了線程之間對(duì)象高速傳輸?shù)臏?zhǔn)確性。該軟件設(shè)計(jì)方式不僅大幅度提高了軟件的穩(wěn)定性和可靠性,還充分利用了計(jì)算機(jī)的系統(tǒng)資源從而加快系統(tǒng)工作效率。

    多線程;線程同步;測(cè)控系統(tǒng);C#

    文中所介紹的系統(tǒng)是集機(jī)械、液壓、電氣以及計(jì)算機(jī)于一體的工業(yè)測(cè)控系統(tǒng)。本系統(tǒng)不僅要滿足對(duì)各部分模擬數(shù)字信號(hào)采集與輸出的需要,同時(shí)要實(shí)現(xiàn)系統(tǒng)復(fù)雜的試驗(yàn)控制功能。系統(tǒng)軟件要完成數(shù)據(jù)采集、試驗(yàn)控制、UI人機(jī)交互以及安全監(jiān)測(cè)等功能。傳統(tǒng)的測(cè)控軟件大多使用面向過(guò)程的編程模式,根據(jù)系統(tǒng)任務(wù)的需要自上至下的執(zhí)行程序[1]。該編程模式顯然無(wú)法滿足本系統(tǒng)多任務(wù)同步執(zhí)行以及高速數(shù)據(jù)采集控制的需要。

    根據(jù)系統(tǒng)軟件的功能需要,采用多線程作為軟件的核心技術(shù)。本軟件使用微軟Visual Studio 2013平臺(tái)下的C#語(yǔ)言進(jìn)行開發(fā)。該平臺(tái)的.Net Framework 4.5托管編碼環(huán)境提供完整并且功能強(qiáng)大的線程模型[2]。

    依據(jù)該模型將整個(gè)程序分成若干功能模塊,把每個(gè)功能模塊放在不同的線程內(nèi)執(zhí)行。該方式依托多線程技術(shù)旨在把軟件功能模塊化,從而簡(jiǎn)化了軟件的框架結(jié)構(gòu),從根本上實(shí)現(xiàn)系統(tǒng)的功能要求。

    1 多線程技術(shù)

    1.1多線程介紹

    多線程技術(shù)就是允許一個(gè)復(fù)雜的應(yīng)用程序能夠同時(shí)執(zhí)行若干個(gè)任務(wù)。這里所說(shuō)的“同時(shí)”在計(jì)算機(jī)發(fā)展的不同階段代表著不同的含義。在計(jì)算機(jī)內(nèi)核上只存在一個(gè)CPU時(shí),多任務(wù)只能是并發(fā)執(zhí)行即多個(gè)任務(wù)在相同的時(shí)間間隔內(nèi)執(zhí)行。這里的時(shí)間間隔一般由操作系統(tǒng)來(lái)分配。由于計(jì)算機(jī)的執(zhí)行速度很快,從邏輯上來(lái)看多任務(wù)是在同時(shí)執(zhí)行。然而當(dāng)計(jì)算機(jī)進(jìn)入多核時(shí)代以后,一個(gè)CPU擁有多個(gè)內(nèi)核,這里的多任務(wù)就是并行執(zhí)行,每個(gè)任務(wù)同時(shí)在不同的計(jì)算機(jī)內(nèi)核上執(zhí)行,從而實(shí)現(xiàn)了真正意義上的同時(shí)執(zhí)行。單核時(shí)代使用多線程或者單線程來(lái)處理多個(gè)任務(wù)時(shí),實(shí)際上表現(xiàn)出來(lái)的處理效果并沒(méi)有太大差異。然而由于多線程之間任務(wù)的相互切換反而會(huì)耗費(fèi)大量的系統(tǒng)資源,從而會(huì)使得多線程的執(zhí)行效率更低[3]。相比之下,在多核計(jì)算機(jī)上使用多線程可以充分利用計(jì)算機(jī)的各個(gè)內(nèi)核的硬件資源,遠(yuǎn)遠(yuǎn)超過(guò)單線程的執(zhí)行效率。因此,本文所介紹的多線程都是在多核硬件平臺(tái)下的多線程,實(shí)現(xiàn)軟件各線程真正意義的并行執(zhí)行[4]。

    1.2線程基本操作和線程同步

    .Net平臺(tái)的C#語(yǔ)言提供了操作線程的豐富接口,其中包括操作線程的方法,例如線程的開啟、阻塞、銷毀、優(yōu)先級(jí)設(shè)置等;也包括獲取線程的各種屬性,例如獲取線程的名稱、標(biāo)識(shí)符、當(dāng)前執(zhí)行狀態(tài)等信息。在應(yīng)用程序中,對(duì)線程的常用操作包含以下步驟 (偽代碼示例):1)Thread myThread=new Thread()實(shí)例化一個(gè)線程對(duì)象myThread;2)myThead.Start (myMethod())開啟一個(gè)線程,myMethod()為線程所要執(zhí)行方法的引用;3)在需要阻塞線程的位置,語(yǔ)句Thread.Sleep (myMillisecond)使線程進(jìn)入休眠狀態(tài),myMillisecond為一個(gè)int型參數(shù)指定阻塞線程的時(shí)間,單位為毫秒;4)線程執(zhí)行完成myMethod()方法中的所有語(yǔ)句后,程序即會(huì)銷毀線程并且釋放線程所占用的系統(tǒng)資源,或者給myMethod()方法的循環(huán)體判斷標(biāo)志置位,并且在調(diào)用線程使用Join()方法等待線程終止[5]。

    在多線程中,如果允許不同的工作線程對(duì)同一個(gè)對(duì)象進(jìn)行讀寫操作,這勢(shì)必會(huì)導(dǎo)致該對(duì)象訪問(wèn)出錯(cuò)從而引發(fā)程序異常。線程同步技術(shù)利用互斥鎖以排他方式防止共享對(duì)象被同時(shí)訪問(wèn)?;コ怄i工作的基本原理是在某個(gè)線程訪問(wèn)共享對(duì)象前,向操作系統(tǒng)申請(qǐng)鎖對(duì)象,如果鎖被其他線程占有,說(shuō)明其他線程正在訪問(wèn)該共享對(duì)象,當(dāng)前線程則沒(méi)有訪問(wèn)權(quán)限因此阻塞當(dāng)前線程,直到獲取鎖才結(jié)束阻塞狀態(tài);如果互斥鎖處于釋放狀態(tài),則當(dāng)前線程馬上獲取鎖并訪問(wèn)共享對(duì)象,在訪問(wèn)結(jié)束后釋放互斥鎖。使用這種方式,保證了程序在同一時(shí)刻只能有一個(gè)線程可以訪問(wèn)共享對(duì)象[6]。C#語(yǔ)言提供的線程同步有Mutex、Monitor以及Lock等對(duì)象,使用方法均通過(guò)獲取互斥鎖、標(biāo)記訪問(wèn)共享對(duì)象的臨界區(qū)、釋放互斥鎖等操作組成。

    2 多線程在系統(tǒng)軟件中的詳細(xì)設(shè)計(jì)

    2.1軟件框架介紹

    文中所介紹的軟件根據(jù)系統(tǒng)的功能要求,人為的把程序各功能模塊放在以下多個(gè)獨(dú)立的線程中執(zhí)行,它們分別是數(shù)據(jù)采集線程(這里包括低速和高速采集兩個(gè)線程)、UI交互線程、試驗(yàn)控制線程以及安全監(jiān)測(cè)線程。線程間交互及邏輯關(guān)系如圖1所示。

    圖1 程序框架圖

    2.2線程功能詳解

    2.2.1數(shù)據(jù)采集線程

    數(shù)據(jù)采集作為測(cè)控系統(tǒng)軟件的基礎(chǔ)功能,通過(guò)在while函數(shù)中循環(huán)調(diào)用采集板卡的系統(tǒng)API函數(shù)為顯示、控制以及安全判斷提供系統(tǒng)模擬和數(shù)字信息。本軟件根據(jù)系統(tǒng)采集和控制的需要,將數(shù)據(jù)采集分為低速數(shù)據(jù)采集線程和高速數(shù)據(jù)采集線程。在本文的測(cè)控系統(tǒng)中,一部分模擬信號(hào)和數(shù)字信號(hào)僅作為輔助參考信號(hào)使用,例如液壓壓力、溫度、過(guò)濾器狀態(tài)等信號(hào)。低速線程采集的數(shù)據(jù)以觸發(fā)事件的形式將數(shù)據(jù)傳遞給UI顯示線程和試驗(yàn)控制線程和安全監(jiān)測(cè)線程。并且保證低速采集線程每采集一次數(shù)據(jù)睡眠10 ms,從而節(jié)約系統(tǒng)資源。相比較于低速采集線程,高速采集線程則負(fù)責(zé)采集系統(tǒng)需要采集頻率較高的拉壓力以及位移信號(hào),并且使用線程同步技術(shù)保證數(shù)據(jù)的高速傳輸。為了滿足系統(tǒng)試驗(yàn)控制線程的采樣要求,本系統(tǒng)選用Advantech公司的PCI1716數(shù)據(jù)采集卡。該采集板卡具有16位分辨率的8路差分輸入或16路單端輸入模擬信號(hào)采集功能,采樣頻率可達(dá)250 KS/s。軟件實(shí)測(cè)顯示,在線程全速采集無(wú)休眠操作的情況下單通道采集時(shí)間為160 μs/次,該采集速度可以滿足系統(tǒng)需求。

    2.2.2UI交互線程

    UI交互線程實(shí)現(xiàn)顯示試驗(yàn)界面以及響應(yīng)用戶操作的功能。該線程一方面把來(lái)自數(shù)據(jù)采集線程數(shù)據(jù)、試驗(yàn)控制線程的試驗(yàn)狀態(tài)以及安全監(jiān)測(cè)線程的狀態(tài)信息通過(guò)窗體的顯示控件直觀的表示出來(lái),例如chart、richtextbox、label等控件;另一方面通過(guò)用戶觸發(fā)窗體控件的事件屬性來(lái)響應(yīng)其操作,軟件中即通過(guò)“開始試驗(yàn)”按鈕的Click()事件開啟試驗(yàn)控制線程。試驗(yàn)界面設(shè)計(jì)如圖2所示。

    2.2.3試驗(yàn)控制線程

    試驗(yàn)控制線程實(shí)現(xiàn)試驗(yàn)過(guò)程控制和數(shù)據(jù)保存的功能。線程同步的方式使得該線程與高速采集線程實(shí)現(xiàn)數(shù)據(jù)共享,從而保證了試驗(yàn)過(guò)程數(shù)據(jù)的高速采集。高速采集的數(shù)據(jù)一方面用于試驗(yàn)控制的判斷依據(jù),另一方面數(shù)據(jù)被保存到緩存數(shù)組中并定期保存到文件當(dāng)中以供查看歷史數(shù)據(jù)。該線程執(zhí)行的方法體中集合了整個(gè)試驗(yàn)的核心控制算法,依賴采集的實(shí)時(shí)數(shù)據(jù)、狀態(tài)標(biāo)志以及邏輯判斷等實(shí)現(xiàn)復(fù)雜的試驗(yàn)控制功能。

    2.2.4安全監(jiān)測(cè)線程

    安全監(jiān)測(cè)線程實(shí)時(shí)監(jiān)測(cè)整個(gè)系統(tǒng)的各項(xiàng)工作參數(shù)是否在安全參數(shù)范圍內(nèi),如果參數(shù)超標(biāo)則報(bào)警或者緊急停機(jī)。該線程在系統(tǒng)軟件啟動(dòng)后就開始運(yùn)行,直至退出軟件停止工作。這其中監(jiān)測(cè)的信號(hào)包括拉壓力、液壓壓力、溫度液位以及急停開關(guān)等信號(hào),這些信號(hào)同樣來(lái)自于數(shù)據(jù)采集線程。該線程也是一個(gè)低速線程,每監(jiān)測(cè)一個(gè)循環(huán)睡眠100 ms。

    2.3線程同步實(shí)現(xiàn)

    軟件為滿足系統(tǒng)對(duì)于實(shí)時(shí)高速數(shù)據(jù)采集的要求,在數(shù)據(jù)采集線程和試驗(yàn)控制線程之間實(shí)現(xiàn)數(shù)據(jù)共享對(duì)象的線程同步操作。線程同步具體代碼如圖3所示。這里選用Monitor對(duì)象來(lái)實(shí)現(xiàn)線程同步,數(shù)據(jù)共享對(duì)象為高速采集線程中的cacheBuf數(shù)組。如圖程序所示,高速采集線程T1對(duì)cacheBuf進(jìn)行寫操作,試驗(yàn)控制線程T2對(duì)其進(jìn)行讀操作。線程同步操作步驟:1)T1執(zhí)行Monitor.Enter()語(yǔ)句,獲取鎖并將T2線程阻塞在Monitor.Enter()語(yǔ)句處;2)T1執(zhí)行Monitor.Pulse()語(yǔ)句,通知阻塞在Monitor.Wait()語(yǔ)句處的線程進(jìn)入就緒狀態(tài);3)T1執(zhí)行Monitor.Wait()語(yǔ)句,釋放鎖并且進(jìn)入等待狀態(tài);4)此阻塞在Monitor.Entor()處的T2獲取鎖并執(zhí)行到Monitor. Pulse()通知阻塞在Monitor.Wait()的T1進(jìn)入就緒狀態(tài);5)T2執(zhí)行Monitor.Wait()語(yǔ)句,釋放鎖并且進(jìn)入等待狀態(tài),此時(shí)處于就緒狀態(tài)并阻塞在Monitor.Wait()處的T1重新獲取鎖,并執(zhí)行Monitor.Exit()并釋放鎖;6)由于T2阻塞在Monitor.Wait()處并處于等待狀態(tài),此時(shí)T1再次執(zhí)行Monitor.Enter()語(yǔ)句并再次獲取鎖。依次類推,保證在同一時(shí)間只有一個(gè)線程獲取能夠獲取對(duì)共享對(duì)象cacheBuf的獨(dú)占訪問(wèn)權(quán)。

    圖2 實(shí)驗(yàn)界面

    圖3 線程同步圖

    3 結(jié) 論

    本文利用多線程技術(shù),一方面實(shí)現(xiàn)了測(cè)控系統(tǒng)軟件各功能模塊的代碼分離從而優(yōu)化了軟件框架,保證其可靠性和穩(wěn)定性;另一方面,多線程的引入大幅度提高系統(tǒng)資源的利用率從而提升軟件的整體執(zhí)行效率。這種基于多線程的測(cè)控軟件設(shè)計(jì)方法同時(shí)具有很高的復(fù)用性。本文軟件中的各功能模塊已在多個(gè)測(cè)控軟件中實(shí)現(xiàn)了充分的代碼復(fù)用,并且得到滿意的效果。

    [1]武杰.快速可重組機(jī)械工程測(cè)控實(shí)驗(yàn)平臺(tái)的研制 [D].南京:南京航空航天大學(xué),2007.

    [2]Tobin Titus,F(xiàn)abio Claudio Ferracchiati.C#線程參考手冊(cè)[M].北京:清華大學(xué)出版社,2003.

    [3]眭俊華,劉慧娜,王建鑫,等.多核多線程技術(shù)綜述[J].計(jì)算機(jī)應(yīng)用,2013(33):239-242,261.

    [4]劉權(quán)盛,楊洪斌,吳悅,等.同時(shí)多線程技術(shù)[J].計(jì)算機(jī)工程與設(shè)計(jì),2008(4):963-967.

    [5]Christian Nagel,Bill Evjen,Jay Glynn,等.C#高級(jí)編程[M]. 8版.北京:清華大學(xué)出版社,2013.

    [6]楊宗德,呂光宏,劉雍.Linux高級(jí)程序設(shè)計(jì)[M].3版.北京:人民郵電出版社,2012.

    The software design of measurement and control system based on multi-threading technology

    YANG Ke,SONG Guo-kun,ZHAO Shi-ping
    (Manufactory Science and Engineering Institute of Sichuan University,Chengdu 610065,China)

    We developed a software of measurement and control system based on multi-threading technology according to the design need of a certain measurement and control system.The realization of the software in the article is through the C# language on the.Net platform,which providing with a powerful thread model and complete operation interfaces can meet the needs toward to the operation on threads.The core function of the software,which starts different threads to run the data acquisition,experiment control,UI interaction and safety monitoring functional modules,is multi-threading technology. Thread synchronization technology guaranteed the accuracy of high-speed objects transmission among different threads.On the one hand,this kind of design pattern enhances the stability and reliability of the software significantly,on the other hand,it can also takes full advantage of the computer's system resources to speed up the working efficiency of the system.

    multi-threading;data synchronization;measurement and control system;C#

    TN98

    A

    1674-6236(2016)16-0089-03

    2015-08-25稿件編號(hào):201508133

    楊珂(1991—),男,四川成都人,碩士。研究方向:儀器儀表工程。

    猜你喜歡
    控制線線程測(cè)控
    人與自然和諧共存一淺談黃嘩市三條控制線劃定
    《關(guān)于在國(guó)土空間規(guī)劃中統(tǒng)籌劃定落實(shí)三條控制線的指導(dǎo)意見》發(fā)布
    《測(cè)控電路》實(shí)踐教學(xué)改革探討
    淺談linux多線程協(xié)作
    基于現(xiàn)代測(cè)控技術(shù)及其應(yīng)用分析
    向著新航程進(jìn)發(fā)——遠(yuǎn)望7號(hào)測(cè)控船首航記錄
    太空探索(2016年12期)2016-07-18 11:13:43
    基于USB2.0協(xié)議的通用測(cè)控通信接口設(shè)計(jì)
    采煤機(jī)電纜中控制線芯使用壽命的改善
    電線電纜(2013年2期)2013-09-28 11:03:02
    Linux線程實(shí)現(xiàn)技術(shù)研究
    碟形建筑測(cè)量放線施工技術(shù)
    山西建筑(2011年19期)2011-08-20 08:55:50
    社会| 永吉县| 城固县| 方山县| 呼和浩特市| 台东市| 沾化县| 堆龙德庆县| 页游| 武威市| 湾仔区| 乐安县| 桂林市| 繁昌县| 察隅县| 清水河县| 娱乐| 大新县| 大兴区| 泗水县| 开封县| 龙口市| 江口县| 拜城县| 嘉祥县| 界首市| 桐柏县| 横峰县| 安达市| 常德市| 白银市| 莲花县| 宜宾市| 西盟| 桑植县| 四平市| 屯昌县| 甘德县| 那曲县| 瑞昌市| 克拉玛依市|