<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 測(cè)試測(cè)量 > 設(shè)計(jì)應(yīng)用 > 基于多線(xiàn)程技術(shù)的天線(xiàn)實(shí)時(shí)測(cè)量系統(tǒng)研究

          基于多線(xiàn)程技術(shù)的天線(xiàn)實(shí)時(shí)測(cè)量系統(tǒng)研究

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

            2.1 軟件分層結(jié)構(gòu)與信息交互

          本文引用地址:http://www.ex-cimer.com/article/277447.htm

            系統(tǒng)軟件是整個(gè)系統(tǒng)的控制核心,它的功能對(duì)用戶(hù)是透明的,對(duì)于用戶(hù)而言,只要選擇和輸入了正確的測(cè)量參數(shù),系統(tǒng)就能自動(dòng)完成相應(yīng)的測(cè)量功能。

            根據(jù)軟件需求和功能,可將其分為三層結(jié)構(gòu)部分:

            用戶(hù)界面部分、數(shù)據(jù)處理部分和硬件接口部分。

            系統(tǒng)軟件各層之間的信息交互如圖2所示。

            

           

            用戶(hù)界面部分,響應(yīng)用戶(hù)操作,將硬件設(shè)置傳輸?shù)接布涌诓糠郑瑢⑤斎霐?shù)據(jù)送到數(shù)據(jù)處理部分,同時(shí)將數(shù)據(jù)處理部分送來(lái)的數(shù)據(jù)與狀態(tài)信息顯示給用戶(hù),使用戶(hù)可以便捷地完成測(cè)量控制與監(jiān)控。數(shù)據(jù)處理部分,一方面將硬件接口傳遞來(lái)的數(shù)據(jù)與狀態(tài)信息進(jìn)行處理,轉(zhuǎn)換為用戶(hù)需要的格式以供顯示和存儲(chǔ);另一方面將用戶(hù)設(shè)置的數(shù)據(jù)信息轉(zhuǎn)換為數(shù)據(jù)指令交給硬件接口部分。

            硬件接口部分,完成計(jì)算機(jī)與儀器之間的通信,一方面將指令和數(shù)據(jù)等程序語(yǔ)言轉(zhuǎn)化為儀器可識(shí)別的機(jī)器語(yǔ)言輸送到儀器;另一方面將儀器傳輸回來(lái)的數(shù)據(jù)和狀態(tài)信息等轉(zhuǎn)換為可編程處理的數(shù)據(jù),以供數(shù)據(jù)處理部分使用。

            2.2 軟件任務(wù)分析

            根據(jù)系統(tǒng)工作原理,系統(tǒng)軟件需要完成以下任務(wù):

            (1)建立計(jì)算機(jī)與轉(zhuǎn)臺(tái)控制箱之間的通信:建立通道,使計(jì)算機(jī)可以讀取轉(zhuǎn)臺(tái)實(shí)時(shí)運(yùn)行狀態(tài),并可以隨時(shí)控制轉(zhuǎn)臺(tái)以改變其運(yùn)行狀態(tài)。

            (2)轉(zhuǎn)臺(tái)運(yùn)行狀態(tài)的顯示:將轉(zhuǎn)臺(tái)運(yùn)動(dòng)速度及角度信息顯示到用戶(hù)界面并實(shí)時(shí)更新。

            (3)轉(zhuǎn)臺(tái)運(yùn)行參數(shù)的設(shè)置:按照用戶(hù)輸入設(shè)置轉(zhuǎn)臺(tái)的運(yùn)動(dòng)速度、起止位置以及脈沖輸出方式,并控制其運(yùn)動(dòng)的起止。

            (4)建立計(jì)算機(jī)與的通信:建立通道,使計(jì)算機(jī)可以讀取矢網(wǎng)狀態(tài)及測(cè)量數(shù)據(jù),并可以隨時(shí)控制矢網(wǎng)以改變其運(yùn)行狀態(tài)。

            (5)的初始化以及測(cè)量參數(shù)的設(shè)置:使用基于VISA 庫(kù)的SCPI指令,對(duì)矢網(wǎng)進(jìn)行初始化使其進(jìn)入測(cè)量狀態(tài),按照用戶(hù)輸入完成測(cè)量參數(shù)的設(shè)置。

            (6)測(cè)量數(shù)據(jù)存儲(chǔ)文檔的建立與更新:在計(jì)算機(jī)中建立文檔用于測(cè)量數(shù)據(jù)的存儲(chǔ),將測(cè)量過(guò)程從由矢網(wǎng)讀取的測(cè)量數(shù)據(jù)按特定格式進(jìn)行實(shí)時(shí)記錄。

            (7)系統(tǒng)測(cè)量進(jìn)度的顯示:在測(cè)量過(guò)程中的軟件運(yùn)行節(jié)點(diǎn)、測(cè)量過(guò)程中完成某次測(cè)量時(shí)以及測(cè)量完成后輸出相應(yīng)提示性文字到用戶(hù)界面。

            在實(shí)時(shí)測(cè)量系統(tǒng)中,要求計(jì)算機(jī)能同時(shí)完成多項(xiàng)任務(wù),且具有很高的實(shí)時(shí)性要求,多線(xiàn)程技術(shù)以其避免阻塞、能同時(shí)執(zhí)行多項(xiàng)任務(wù)、減小運(yùn)行過(guò)程和用戶(hù)界面的相互影響,以及最大程度地利用多處理器性能的獨(dú)特優(yōu)點(diǎn)很好地滿(mǎn)足了這一要求。

            2.3 軟件多線(xiàn)程的實(shí)現(xiàn)

            MFC 中有兩類(lèi)線(xiàn)程,用戶(hù)界面線(xiàn)程和工作者線(xiàn)程。前者有自己的消息隊(duì)列和消息循環(huán),一般用于處理獨(dú)立于其他線(xiàn)程執(zhí)行之外的用戶(hù)輸入,響應(yīng)用戶(hù)及系統(tǒng)所產(chǎn)生的事件和消息等;后者沒(méi)有消息循環(huán),通常用來(lái)執(zhí)行后臺(tái)計(jì)算和維護(hù)任務(wù),如冗長(zhǎng)的計(jì)算過(guò)程,數(shù)據(jù)的循環(huán)讀取等。

            任意一個(gè)MFC 程序至少具有一個(gè)線(xiàn)程,也是程序的主線(xiàn)程。通過(guò)主線(xiàn)程能夠生成或終止任意多的線(xiàn)程,主線(xiàn)程一直存在直至程序終止。其中用戶(hù)界面線(xiàn)程是程序默認(rèn)啟動(dòng)的主線(xiàn) 程,主要實(shí)現(xiàn)軟件的運(yùn)行和響應(yīng)用戶(hù)操作及控制。根據(jù)軟件任務(wù)分析部分,在主線(xiàn)程中生成三個(gè)工作者線(xiàn)程,通過(guò)計(jì)算機(jī)與測(cè)量?jī)x器的通信,完成儀器參數(shù)的設(shè)置以 及數(shù)據(jù)的實(shí)時(shí)采集、處理等后臺(tái)工作。

            各線(xiàn)程工作順序及生存時(shí)間如圖3所示。

            

           

            三個(gè)工作者線(xiàn)程所完成的具體工作如下:

            轉(zhuǎn)臺(tái)狀態(tài)線(xiàn)程:建立計(jì)算機(jī)與轉(zhuǎn)臺(tái)控制箱的通信,不斷讀取轉(zhuǎn)臺(tái)的位置信息和速度信息并將其更新顯示到用戶(hù)界面,對(duì)應(yīng)軟件任務(wù)分析部分的任務(wù)(1)和(2),流程如圖4所示。

            



          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();