?

基于LXI的數據采集管理軟件設計與實現

2015-04-25 10:00葉衛東杜霄峰
制造業自動化 2015年3期
關鍵詞:入隊線程隊列

葉衛東,杜霄峰

YE Wei-dong, DU Xiao-feng

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

0 引言

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

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

用戶可以通過在PC機上安裝應用程序,通過軟面板操作將設置的參數信息準確的發送到儀器。并最終生成C/S模式的安裝程序提供給用戶進行數據采集管理工作。

1 軟件總體方案設計

C/S模式也稱C/S架構,是軟件系統體系結構的一種。用戶在PC機上操作應用程序,通過IVI驅動程序將用戶的請求交給服務器端程序進行處理,進而控制硬件動作,實現對儀器模塊的遠程控。主要內容是介紹LXI數據采集軟件的工作原理、C/S模式應用軟件方案設計以及IVI驅動軟件設計。

本課題中的LXI數據采集軟件體系總體結構中包含了客戶端和服務端的多個程序,分別完成不同的功能,這些程序共同運行和作用才能實現儀器所有的功能。軟硬件系統整體結構圖如圖1所示。

圖1 軟硬件系統整體結構圖

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

數據處理模塊接收從各通道讀取回來的數據,對其進行預處理。實現基本功能有:數據工程單位的轉換;可根據項目需求,對一定階段的數據進行統計。

數據存儲模塊可以對從下位機接收到的數據,根據項目當中的實際需要,可以提供相應存儲形式的接口,如csv、txt、二進制文件形式,或者.NET相對優越的數據庫存取服務,直接將所需要的數據存入數據庫中,還可以直接導出下位機的原始數據,供二次開發使用。

通訊與命令接口模塊包括對上位機下位機通訊協議的解析,軟件多線程并發隊列的設計以及TCP/IP網絡的編程通信等功能。

各功能模塊詳細設計結構如圖2所示。

圖2 C/S模式軟件結構設計

2 通訊與命令接口模塊設計

本節中主要介紹基于TCP協議的數據傳輸,多線程并發隊列設計。

2.1 TCP協議的數據傳輸

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

數據采集管理系統基于套接字的面向連接的通信連接過程分為以下三個步驟:

1)建立連接

當上位機向下位機發出連接請求,下位機給出響應,雙方即可通信。在上位機程序中,首要任務是創建一個本地套接字對象:然后連接到的目標IP和端口號。

2)數據傳輸

此時上位機與下位機服務器嘗試連接;連接成功后,就可以接收服務器發送的消息了。

3)關閉連接

在通信完成之后,必須先使用Shutdown方法停止回話,然后關閉Socket實例。

圖3 TCP協議客戶端和服務器端工作流程圖

2.2 多線程并發隊列設計

本文在設計底層通訊功能時,為使系統具有高效率實時性,數據存儲和顯示無延時,程序在設計時將數據接收和數據處理線程分割開來,使兩個線程分別執行互不影響,相當于設計模式中的生產者消費者問題。這兩個線程的數據共享的公共存儲區就依靠這個隊列。而這樣的方法可能會引起隊列并發訪問。

對于一個隊列來說,它提供的兩個最主要的操作就是入隊和出隊操作。在多線程的程序當中,多個線程同時會對一個隊列進行入隊和出隊操作。為了保證在入隊和出隊時操作著同一個隊列節點,多個線程并發進行入隊和出隊操作,這兩種情況下的操作是線程安全的。下面分別對Monitor方法,Mutex方法以及Semaphore方法進行實驗對比。

1)Monitor(lock)方法

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

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

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

2)Mutex方法

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

Mutex與Monitor有一個很大的區別:Mutex可以用來同步屬于不同應用程序或者進程的線程,而Monitor沒有這個能力。與Monitor類實驗方法類似,此處不再詳細說明。

3)Semaphore方法

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

數據緩沖區結構如圖4所示。

圖4 數據緩沖區結構(隊列)

實驗設計如下:

入隊信號量表示現在數據隊列中已經存放滿數據的數據塊的數量,出隊信號量表示現在數據隊列中空數據塊的數量,初始化出隊信號量為0。入隊信號量初始化為n,初始化兩者最大允許的并發數為n。初始化當前入隊和出隊線程正在處理的數據塊的編號為0。分別啟動入隊線程和出隊線程。

當入隊信號量計數器大于0時按照In_Index編號選定一個可用數據塊對象,直到當前數據塊存儲內容達到上限,將出隊信號量加1,同時入隊信號量減1,In_Index加1。若未達到上限,都不執行,繼續填充數。當入隊計數器等于0時入隊線程阻塞,In_Index達到數據塊最大時,返回0繼續重復之前過程。

當入隊信號量計數器大于0時按照Out_Index編號選定一個可用數據塊對象,直到當前數據塊存儲內容全部取出,將出隊信號量加1,同時入隊信號量減1,Out_Index加1。若未達到上限,都不執行,繼續填充數。當出隊計數器等于0時出隊線程阻塞,Out_Index達到數據塊最大時,返回0繼續重復之前過程。

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

圖5 Semaphore方法流程圖

計算結果如表1所示。

表1 三種并發隊列訪問方法效率對比

經過實驗得出采用方法三中信號量的方式效率最高,故本軟件采用此方法,可以有效的提高隊列的出隊效率,為軟件圖形的實時顯示及數據的存儲打下良好的基礎。

3 軟件界面設計

3.1 軟件總體設計

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

3.2 軟件工作流程

1)新建設備

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

2)通道配置

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

圖6 采集軟件圖形實時顯示界面

3)采集配置

“采集配置”界面可以讓用戶進行采集方式的配置。根據類別不同,主要分為“隨機采樣配置”、“定時采樣配置”、“觸發采樣配置”,并且以配置頁的形式呈現給用戶。

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

圖7 采集軟件圖形實時顯示界面

3.3 實驗結果

為驗證軟件是否正常工作,實驗中開啟了十個通道的微應變隨機采集,采樣速率設備120,每個通道每秒中產生120個數據包。每256個數據包合成一個文件存儲在相應路徑下。相應二進制文件。

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

圖8 采集數據上傳至數據庫

4 結論

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

[1] 于勁松,李行善.下一代自動測試系統體系結構與關鍵技術[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架構的可擴展嵌入式系統[J].計算機工程與設計,2008,29(7)∶1804-1807.

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

[6] Stevens W R,范建華,胥光輝,等.TCP/IP詳解卷1∶協議[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.

猜你喜歡
入隊線程隊列
今天我入隊——入隊儀式
基于C#線程實驗探究
1+1我們這樣學隊章:我們的入隊誓詞
分批『全童入隊』常熟少先隊這樣做
隊列里的小秘密
基于多隊列切換的SDN擁塞控制*
基于國產化環境的線程池模型研究與實現
線程池調度對服務器性能影響的研究*
在隊列里
今天我入隊了
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合