国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于LXI的數(shù)據(jù)采集管理軟件設(shè)計(jì)與實(shí)現(xiàn)

2015-04-25 10:00葉衛(wèi)東杜霄峰
制造業(yè)自動化 2015年3期
關(guān)鍵詞:入隊(duì)線程隊(duì)列

葉衛(wèi)東,杜霄峰

YE Wei-dong, DU Xiao-feng

(北京航空航天大學(xué) 自動化與電氣工程學(xué)院,北京 100191)

0 引言

數(shù)據(jù)采集技術(shù)是多學(xué)科交叉、融合的產(chǎn)物,及時(shí)將相關(guān)學(xué)科的研究新成果應(yīng)用到數(shù)據(jù)采集技術(shù)中,研究新的數(shù)據(jù)采集技術(shù)與方法對于制造企業(yè)采用先進(jìn)制造技術(shù)實(shí)現(xiàn)制造自動化、全面提高產(chǎn)品質(zhì)量、增強(qiáng)企業(yè)競爭力有著重要意義。熟悉數(shù)據(jù)采集與管理系統(tǒng)的概念、功能和組成情況;利用軟件模塊化思想進(jìn)行系統(tǒng)的軟件設(shè)計(jì),包括軟件的分層設(shè)計(jì),模塊劃分,模塊接口設(shè)計(jì);對于底層協(xié)議及相關(guān)通訊與命令接口封裝成IVI驅(qū)動,利用DLL接口實(shí)現(xiàn)調(diào)用。從而實(shí)現(xiàn)軟件上層與底層的隔離,便于日后的維護(hù)升級以及擴(kuò)展其他通訊方式。

系統(tǒng)分為客戶機(jī)端和服務(wù)器端,客戶機(jī)可通過以太網(wǎng)通訊方式對數(shù)據(jù)采集各通道參數(shù)進(jìn)行配置和通信,服務(wù)器便可按照配置好的參數(shù)進(jìn)行數(shù)據(jù)采集工作。同時(shí)客戶機(jī)可將服務(wù)器傳輸過來的實(shí)時(shí)采集數(shù)據(jù)進(jìn)行統(tǒng)計(jì)、濾波、時(shí)域頻域轉(zhuǎn)換等處理;實(shí)現(xiàn)數(shù)據(jù)庫、文件等格式的存儲,數(shù)據(jù)庫的管理與訪問技術(shù);通過表格、圖形、以及良好的用戶界面友好性,幫助用戶得以更快、更好、更便捷的查補(bǔ)系統(tǒng)問題。

用戶可以通過在PC機(jī)上安裝應(yīng)用程序,通過軟面板操作將設(shè)置的參數(shù)信息準(zhǔn)確的發(fā)送到儀器。并最終生成C/S模式的安裝程序提供給用戶進(jìn)行數(shù)據(jù)采集管理工作。

1 軟件總體方案設(shè)計(jì)

C/S模式也稱C/S架構(gòu),是軟件系統(tǒng)體系結(jié)構(gòu)的一種。用戶在PC機(jī)上操作應(yīng)用程序,通過IVI驅(qū)動程序?qū)⒂脩舻恼埱蠼唤o服務(wù)器端程序進(jìn)行處理,進(jìn)而控制硬件動作,實(shí)現(xiàn)對儀器模塊的遠(yuǎn)程控。主要內(nèi)容是介紹LXI數(shù)據(jù)采集軟件的工作原理、C/S模式應(yīng)用軟件方案設(shè)計(jì)以及IVI驅(qū)動軟件設(shè)計(jì)。

本課題中的LXI數(shù)據(jù)采集軟件體系總體結(jié)構(gòu)中包含了客戶端和服務(wù)端的多個(gè)程序,分別完成不同的功能,這些程序共同運(yùn)行和作用才能實(shí)現(xiàn)儀器所有的功能。軟硬件系統(tǒng)整體結(jié)構(gòu)圖如圖1所示。

圖1 軟硬件系統(tǒng)整體結(jié)構(gòu)圖

C/S模式,不依賴外網(wǎng)環(huán)境,很多工作在提交給服務(wù)器端之前,會首先在客戶端進(jìn)行處理,使得客戶端計(jì)算機(jī)的處理能力得到充分發(fā)揮,很大程度上減輕了服務(wù)器的負(fù)擔(dān),提高了儀器工作效率。LXI數(shù)據(jù)采集軟件C/S模式客戶端的設(shè)計(jì)核心就是軟件設(shè)計(jì),為了增強(qiáng)軟件系統(tǒng)的靈活性和可擴(kuò)展性,方便以后軟件的升級和維護(hù),在進(jìn)行軟件設(shè)計(jì)時(shí)采用了模塊化的設(shè)計(jì)思想。

數(shù)據(jù)處理模塊接收從各通道讀取回來的數(shù)據(jù),對其進(jìn)行預(yù)處理。實(shí)現(xiàn)基本功能有:數(shù)據(jù)工程單位的轉(zhuǎn)換;可根據(jù)項(xiàng)目需求,對一定階段的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)。

數(shù)據(jù)存儲模塊可以對從下位機(jī)接收到的數(shù)據(jù),根據(jù)項(xiàng)目當(dāng)中的實(shí)際需要,可以提供相應(yīng)存儲形式的接口,如csv、txt、二進(jìn)制文件形式,或者.NET相對優(yōu)越的數(shù)據(jù)庫存取服務(wù),直接將所需要的數(shù)據(jù)存入數(shù)據(jù)庫中,還可以直接導(dǎo)出下位機(jī)的原始數(shù)據(jù),供二次開發(fā)使用。

通訊與命令接口模塊包括對上位機(jī)下位機(jī)通訊協(xié)議的解析,軟件多線程并發(fā)隊(duì)列的設(shè)計(jì)以及TCP/IP網(wǎng)絡(luò)的編程通信等功能。

各功能模塊詳細(xì)設(shè)計(jì)結(jié)構(gòu)如圖2所示。

圖2 C/S模式軟件結(jié)構(gòu)設(shè)計(jì)

2 通訊與命令接口模塊設(shè)計(jì)

本節(jié)中主要介紹基于TCP協(xié)議的數(shù)據(jù)傳輸,多線程并發(fā)隊(duì)列設(shè)計(jì)。

2.1 TCP協(xié)議的數(shù)據(jù)傳輸

TCP連接的建立分為三個(gè)階段:建立連接、數(shù)據(jù)傳輸和斷開連接,即我們通常所說的三次握手。

數(shù)據(jù)采集管理系統(tǒng)基于套接字的面向連接的通信連接過程分為以下三個(gè)步驟:

1)建立連接

當(dāng)上位機(jī)向下位機(jī)發(fā)出連接請求,下位機(jī)給出響應(yīng),雙方即可通信。在上位機(jī)程序中,首要任務(wù)是創(chuàng)建一個(gè)本地套接字對象:然后連接到的目標(biāo)IP和端口號。

2)數(shù)據(jù)傳輸

此時(shí)上位機(jī)與下位機(jī)服務(wù)器嘗試連接;連接成功后,就可以接收服務(wù)器發(fā)送的消息了。

3)關(guān)閉連接

在通信完成之后,必須先使用Shutdown方法停止回話,然后關(guān)閉Socket實(shí)例。

圖3 TCP協(xié)議客戶端和服務(wù)器端工作流程圖

2.2 多線程并發(fā)隊(duì)列設(shè)計(jì)

本文在設(shè)計(jì)底層通訊功能時(shí),為使系統(tǒng)具有高效率實(shí)時(shí)性,數(shù)據(jù)存儲和顯示無延時(shí),程序在設(shè)計(jì)時(shí)將數(shù)據(jù)接收和數(shù)據(jù)處理線程分割開來,使兩個(gè)線程分別執(zhí)行互不影響,相當(dāng)于設(shè)計(jì)模式中的生產(chǎn)者消費(fèi)者問題。這兩個(gè)線程的數(shù)據(jù)共享的公共存儲區(qū)就依靠這個(gè)隊(duì)列。而這樣的方法可能會引起隊(duì)列并發(fā)訪問。

對于一個(gè)隊(duì)列來說,它提供的兩個(gè)最主要的操作就是入隊(duì)和出隊(duì)操作。在多線程的程序當(dāng)中,多個(gè)線程同時(shí)會對一個(gè)隊(duì)列進(jìn)行入隊(duì)和出隊(duì)操作。為了保證在入隊(duì)和出隊(duì)時(shí)操作著同一個(gè)隊(duì)列節(jié)點(diǎn),多個(gè)線程并發(fā)進(jìn)行入隊(duì)和出隊(duì)操作,這兩種情況下的操作是線程安全的。下面分別對Monitor方法,Mutex方法以及Semaphore方法進(jìn)行實(shí)驗(yàn)對比。

1)Monitor(lock)方法

Monitor 類通過向單個(gè)線程授予對象鎖來控制對對象的訪問。對象鎖提供限制訪問代碼塊(通常稱為臨界區(qū))的能力。當(dāng)一個(gè)線程擁有對象的鎖時(shí),其他任何線程都不能獲取該鎖。

首先進(jìn)行初始化操作,建立共享隊(duì)列,入隊(duì)操作和出隊(duì)操作線程。其次啟動入隊(duì)線程和出隊(duì)線程,并為線程執(zhí)行函數(shù)涉及共享隊(duì)列部分加上Monitor.Enter()和Monitor.Exit()互斥鎖,直到入隊(duì)出隊(duì)全部完成,查看程序執(zhí)行時(shí)間。

Lock類為簡化版的Monitor類,封裝了Monitor.Enter()和Monitor.Exit()函數(shù),性能與Monitor方法一致。

2)Mutex方法

Mutex與Monitor類似,需要注意的是Mutex分兩種:一種是本地Mutex一種是系統(tǒng)級Mutex,系統(tǒng)級Mutex可以用來進(jìn)行跨進(jìn)程間的線程的同步。盡管Mutex比監(jiān)視器更為強(qiáng)大,但是相對于Monitor類,它所需要的互操作轉(zhuǎn)換更消耗計(jì)算資源。

Mutex與Monitor有一個(gè)很大的區(qū)別:Mutex可以用來同步屬于不同應(yīng)用程序或者進(jìn)程的線程,而Monitor沒有這個(gè)能力。與Monitor類實(shí)驗(yàn)方法類似,此處不再詳細(xì)說明。

3)Semaphore方法

信號量的特性如下:信號量是一個(gè)非負(fù)整數(shù)(表示可以利用的資源數(shù),這里是指的是可用的數(shù)據(jù)緩沖區(qū)中BLOCK的數(shù)量),所有通過它的線程(接收線程和存儲線程)都會將該整數(shù)減1(通過它當(dāng)然是為了使用資源),當(dāng)該整數(shù)值為零時(shí),所有試圖通過它的線程都將處于等待狀態(tài)。在信號量上我們定義兩種操作:Unsignal 和 Signal(釋放)。 當(dāng)一個(gè)線程調(diào)用Unsignal操作時(shí),它要么通過然后將信號量減1(還有相應(yīng)的資源),要么一直等下去(相應(yīng)的資源已經(jīng)沒有),直到信號量大于1或超時(shí)。Signal實(shí)際上是在信號量上執(zhí)行加操作,相當(dāng)于提醒別的新的線程已經(jīng)可以使用被釋放的資源。

數(shù)據(jù)緩沖區(qū)結(jié)構(gòu)如圖4所示。

圖4 數(shù)據(jù)緩沖區(qū)結(jié)構(gòu)(隊(duì)列)

實(shí)驗(yàn)設(shè)計(jì)如下:

入隊(duì)信號量表示現(xiàn)在數(shù)據(jù)隊(duì)列中已經(jīng)存放滿數(shù)據(jù)的數(shù)據(jù)塊的數(shù)量,出隊(duì)信號量表示現(xiàn)在數(shù)據(jù)隊(duì)列中空數(shù)據(jù)塊的數(shù)量,初始化出隊(duì)信號量為0。入隊(duì)信號量初始化為n,初始化兩者最大允許的并發(fā)數(shù)為n。初始化當(dāng)前入隊(duì)和出隊(duì)線程正在處理的數(shù)據(jù)塊的編號為0。分別啟動入隊(duì)線程和出隊(duì)線程。

當(dāng)入隊(duì)信號量計(jì)數(shù)器大于0時(shí)按照In_Index編號選定一個(gè)可用數(shù)據(jù)塊對象,直到當(dāng)前數(shù)據(jù)塊存儲內(nèi)容達(dá)到上限,將出隊(duì)信號量加1,同時(shí)入隊(duì)信號量減1,In_Index加1。若未達(dá)到上限,都不執(zhí)行,繼續(xù)填充數(shù)。當(dāng)入隊(duì)計(jì)數(shù)器等于0時(shí)入隊(duì)線程阻塞,In_Index達(dá)到數(shù)據(jù)塊最大時(shí),返回0繼續(xù)重復(fù)之前過程。

當(dāng)入隊(duì)信號量計(jì)數(shù)器大于0時(shí)按照Out_Index編號選定一個(gè)可用數(shù)據(jù)塊對象,直到當(dāng)前數(shù)據(jù)塊存儲內(nèi)容全部取出,將出隊(duì)信號量加1,同時(shí)入隊(duì)信號量減1,Out_Index加1。若未達(dá)到上限,都不執(zhí)行,繼續(xù)填充數(shù)。當(dāng)出隊(duì)計(jì)數(shù)器等于0時(shí)出隊(duì)線程阻塞,Out_Index達(dá)到數(shù)據(jù)塊最大時(shí),返回0繼續(xù)重復(fù)之前過程。

基于Semaphore(信號量)的方法流程圖如圖5所示。

圖5 Semaphore方法流程圖

計(jì)算結(jié)果如表1所示。

表1 三種并發(fā)隊(duì)列訪問方法效率對比

經(jīng)過實(shí)驗(yàn)得出采用方法三中信號量的方式效率最高,故本軟件采用此方法,可以有效的提高隊(duì)列的出隊(duì)效率,為軟件圖形的實(shí)時(shí)顯示及數(shù)據(jù)的存儲打下良好的基礎(chǔ)。

3 軟件界面設(shè)計(jì)

3.1 軟件總體設(shè)計(jì)

軟件上方菜單選項(xiàng)有“設(shè)備”和“系統(tǒng)設(shè)置”。其中,“設(shè)備”選項(xiàng)下的內(nèi)容主要用于對設(shè)備的完全控制,而“系統(tǒng)設(shè)置”選項(xiàng)下的內(nèi)容主要用于實(shí)現(xiàn)軟件開機(jī)自啟動、設(shè)置數(shù)據(jù)庫連接配置;狀態(tài)欄實(shí)時(shí)顯示軟件工作狀態(tài),以及當(dāng)前時(shí)刻接收和存儲的數(shù)據(jù)量;功能區(qū)主要包括通道掃描表設(shè)置,采樣速率設(shè)置,采集方式設(shè)置。

3.2 軟件工作流程

1)新建設(shè)備

打開菜單中的新建設(shè)備選項(xiàng),輸入設(shè)備ID及名稱,配置好需要連接的下位機(jī)采集器的IP及端口號。

2)通道配置

“通道配置”界面會以表單形式呈現(xiàn)給用戶,讓其進(jìn)行各采集通道獨(dú)立的參數(shù)配置。根據(jù)傳感器類型,分為兩頁,即“微應(yīng)變”和“電壓輸入”。對于同一個(gè)通道,每次僅有一個(gè)類型的配置頁生效,比如用戶在“微應(yīng)變”頁啟用并配置了通道1,那么在“電壓輸入”頁將自動禁用通道1的配置,反之同理。如圖6所示。

圖6 采集軟件圖形實(shí)時(shí)顯示界面

3)采集配置

“采集配置”界面可以讓用戶進(jìn)行采集方式的配置。根據(jù)類別不同,主要分為“隨機(jī)采樣配置”、“定時(shí)采樣配置”、“觸發(fā)采樣配置”,并且以配置頁的形式呈現(xiàn)給用戶。

完成以上基本設(shè)置操作后,軟件可以開啟采集,實(shí)時(shí)波形顯示效果如圖7所示,界面中間區(qū)域就是實(shí)時(shí)曲線顯示區(qū),可以觀察采集儀傳送上來的采集數(shù)據(jù)曲線。圖形顯示區(qū)的右側(cè)為當(dāng)前顯示的通道圖例,如果想要取消哪一個(gè)通道曲線的顯示,可以去掉相應(yīng)通道前的勾選。如果想要放大圖形顯示,在圖形顯示區(qū)想要放大的位置,可完成對該區(qū)域的顯示放大。

圖7 采集軟件圖形實(shí)時(shí)顯示界面

3.3 實(shí)驗(yàn)結(jié)果

為驗(yàn)證軟件是否正常工作,實(shí)驗(yàn)中開啟了十個(gè)通道的微應(yīng)變隨機(jī)采集,采樣速率設(shè)備120,每個(gè)通道每秒中產(chǎn)生120個(gè)數(shù)據(jù)包。每256個(gè)數(shù)據(jù)包合成一個(gè)文件存儲在相應(yīng)路徑下。相應(yīng)二進(jìn)制文件。

對于用戶不需要保存原始數(shù)據(jù),只要求在數(shù)據(jù)庫中看到采集數(shù)據(jù),我們可以通過ADO.NET的SqlBulkCopy方法可將內(nèi)存中大量數(shù)據(jù)快速上傳至數(shù)據(jù)庫中,保證數(shù)據(jù)的實(shí)時(shí)性以及可靠性。數(shù)據(jù)庫中查看到的結(jié)果如圖8所示。

圖8 采集數(shù)據(jù)上傳至數(shù)據(jù)庫

4 結(jié)論

本文在深入研究了LXI相關(guān)協(xié)議及用戶的需求后設(shè)計(jì)了基于LXI的C/S模式數(shù)據(jù)采集管理軟件以及IVI驅(qū)動程序設(shè)計(jì),實(shí)現(xiàn)了與采集器的通信,對采集器進(jìn)行采集配置與命令控制,完成數(shù)據(jù)從采集到存儲為二進(jìn)制文件或數(shù)據(jù)庫相應(yīng)表中,并且可以實(shí)時(shí)波形顯示等功能,解決了多線程并發(fā)隊(duì)列的高效訪問問題,達(dá)到了預(yù)期目的,取得了良好效果。

[1] 于勁松,李行善.下一代自動測試系統(tǒng)體系結(jié)構(gòu)與關(guān)鍵技術(shù)[J].計(jì)算機(jī)測量與控制,2005,13(1)∶1-3.

[2] LI Yue-qin,LI Jin-ping.Arbitrary Waveform Generator based on LabVIEW[A].IEEE[C].2009,103-06.

[3] LXI Consortium.LXI Standard Revision 1.4[Z].October, 2013 Edition.

[4] 田韜,張悠慧,汪東升.基于C/S架構(gòu)的可擴(kuò)展嵌入式系統(tǒng)[J].計(jì)算機(jī)工程與設(shè)計(jì),2008,29(7)∶1804-1807.

[5] 胡友民,杜潤生,楊叔子.制造系統(tǒng)數(shù)據(jù)采集技術(shù)研究[J]. 制造業(yè)自動化,2002,24(3)∶23-27.

[6] Stevens W R,范建華,胥光輝,等.TCP/IP詳解卷1∶協(xié)議[J]. 2000.

[7] Michael M M, Scott M L. Simple, fast, and practical nonblocking and blocking concurrent queue algorithms[A].Proceedings of the fifteenth annual ACM symposium on Principles of distributed computing.ACM[C],1996∶267-275.

猜你喜歡
入隊(duì)線程隊(duì)列
今天我入隊(duì)——入隊(duì)儀式
基于C#線程實(shí)驗(yàn)探究
1+1我們這樣學(xué)隊(duì)章:我們的入隊(duì)誓詞
分批『全童入隊(duì)』常熟少先隊(duì)這樣做
隊(duì)列里的小秘密
基于多隊(duì)列切換的SDN擁塞控制*
基于國產(chǎn)化環(huán)境的線程池模型研究與實(shí)現(xiàn)
線程池調(diào)度對服務(wù)器性能影響的研究*
在隊(duì)列里
今天我入隊(duì)了