999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于NI PSP協議的分布式測試系統軟件設計

2019-10-29 08:55:46娟2高艷軍段海彬
計算機測量與控制 2019年10期

高 濤,常 娟2,高艷軍,段海彬

(1.西安翔迅科技有限責任公司,西安 710068; 2.空軍工程大學 基礎部,西安 710051)

0 引言

分布式測試系統是計算機網絡技術的產物,是一種通過局域網或Internet,把分布于不同地點、獨立完成特定測試功能的計算機連接起來,達到測試資源共享、分散操作、集中管理、協同工作等目的網絡測試系統[1]。測試計算機(下位機)一般位于測試現場的被測對象附近,可獨立完成數據采集和預處理任務,并通過以太網將數據傳輸給控制計算機(上位機)[2]。上位機接收各下位機傳送來的數據進行儲存和分析處理,以圖形化的方式顯示數據,生成測試報表供用戶查看。

按照通常的分布式測試軟件設計方法,需要在下位機軟件中實現數據采集和組包操作,然后通過以太網完成數據包的發送;在上位機軟件中通過Winsock API函數接收數據包,并按照約定的數據包格式完成數據的拆包和提取顯示[3]。進行軟件開發時,為保證數據傳輸的可靠性,需要考慮數據包校驗、錯誤重發、FIFO緩存隊列等流程的設計,開發難度大且容易出錯,對軟件開發人員有比較高的要求。此外,當系統中有多個下位機同時工作時,大量測試數據通過以太網傳輸到上位機的過程中,如何保證數據的一致性將成為一個難點[4]。

為了簡化這種應用的軟件開發,NI公司提供了網絡變量庫(Network Variable Library)。該函數庫基于NI PSP(NI Publish-Subscribe Protocol)協議,通過網絡變量對底層網絡通訊協議(TCP/IP和DDE)進行了抽象[5]。用戶在NI公司的LabVIEW、LabWindows/CVI和NI Measurement Studio開發環境中使用網絡變量庫提供的API函數,可以在不影響系統性能的情況下,在多個系統或多個應用程序之間靈活的傳遞數據。

1 分布式測試系統設計

某分布式測試系統采用星型網絡結構,多臺遠程數據采集終端RTU(Remote Terminal Unit)作為下位機布置在測試現場,每臺RTU有50個采集通道,每一臺RTU均通過以太網與遠離測試現場的測控計算機(上位機)相連。這種星型結構的優點是網絡控制容易、便于擴充、可靠性好[6]。

開始測試時,上位機通過以太網發送命令控制RTU進行數據采集,RTU以每個通道10k/s的采樣率進行數據采集,并通過以太網將數據傳輸到上位機;上位機接收RTU傳輸的測試數據,對不同RTU的數據分別進行解析和顯示,供用戶查看。RTU的AD采樣精度為16Bit,通過計算可以得出每臺RTU在1秒內采集的數據量為10 k×50 ch×2 Byte=1 000 kByte。

操作人員在遠離測試現場的地點通過操作測控計算機查看系統中各個RTU采集的測試數據,支持多個測控計算機共享數據,分布式系統的組成如圖1所示。

圖1 分布式系統組成框圖

2 軟件設計與實現

該系統中的RTU和測控計算機均運行Windows操作系統,各個RTU運行相同的下位機軟件,通過配置文件給不同的RTU分配不同的IP地址,主要功能模塊包括數據采集、組包、共享變量數據發布。測控計算機運行上位機軟件,同樣通過配置文件中的IP地址來控制不同的RTU協同工作,主要功能模塊包括共享變量數據訂閱、數據解包、處理、顯示和存儲。上下位機軟件均使用NI LabWindows/CVI環境進行開發。

下位機軟件作為測試數據的發布者,上位機軟件作為數據的訂閱者。在下位機和上位機之間使用NI PSP協議進行數據傳輸,首先需要創建共享網絡變量并進行配置。

共享網絡變量被部署到一個用于在網絡上托管該變量的共享變量引擎SVE(Shared Variable Engine)。SVE是共享網絡變量的服務器,所有對共享變量的應用(讀或寫)都是客戶端。網絡變量首先向共享變量引擎服務器發送數據,然后該服務器將這些數據發布給網絡上的所有節點。因為數據是采用“發布-訂閱”消息結構來傳輸的,所以客戶端節點無需編寫復雜的代碼就可以訪問網絡變量數據[7]。

圖2 共享變量傳輸過程

共享變量的創建和配置可以采用以下兩種方式:一是使用NI提供的Distributed System Manager軟件,在軟件中以圖形化的方式創建共享網絡變量,另一種是使用Network Variable Library庫函數,通過編程的方式創建共享網絡變量[8]。

a)顯式創建共享網絡變量

圖3 分布式系統管理器軟件界面

安裝完LabWindows/CVI開發環境后,系統中安裝了“Distributed System Manager”軟件工具,軟件路徑如下:“開始所有程序National InstrumentsDistributed System Manager”,軟件界面如圖3所示。

使用Distributed System Manager軟件創建共享變量的步驟如下:

1)選中“localhost”項,通過鼠標右鍵菜單的“添加進程”創建共享變量進程“my_process”;

2)選中剛創建的進程,通過鼠標右鍵菜單“添加變量”創建共享變量“my_variable”,并設置變量類型和網絡,同一個進程下可創建多個變量;

3)選中剛創建的進程,通過鼠標右鍵菜單進行“啟動進程”、“停止進程”和 “刪除進程”等操作。

當網絡變量創建好后,網絡中的其它計算機就可以通過網絡變量路徑來共享數據。共享變量的網絡路徑包括計算機名稱、進程名稱以及共享變量名。例如:“192.168.1.100my_processmy_variable”,其中“192.168.1.100”是數據發布計算機的IP地址,“my_process”是網絡變量進程,“my_variable”是網絡變量名[9]。

b)編程創建共享變量

LabWindows/CVI開發環境提供了Network Variable Library(網絡變量函數庫)來方便軟件開發人員在程序中對共享變量進行操作。Network Variable Library庫函數結構如圖4所示,主要功能包括共享變量配置、數據包處理、變量發布和訂閱操作等。

圖4 Network Variable Library庫函數結構

通過編程方式使用共享網絡變量更為靈活,下面結合軟件設計詳細描述網絡變量的編程使用方法。

2.1 下位機軟件設計

該分布式系統的下位機負責采集測試現場的數據,是數據的發布端。下位機軟件的流程設計如圖5所示。

圖5 下位機軟件設計流程圖

第一步,首先創建網絡變量進程,通過調用函數庫中的CNVNewProcess("my_process")函數新建名為"my_process"的網絡變量進程,并使用CNVStartProcess("my_process")函數來啟動該進程。

第二步,創建網絡變量,通過調用網絡變量函數庫中的CNVNewVariable("my_variable")函數新建名為"my_variable"的網絡變量,使用CNVSetVariableAttribute()函數可以對該網絡變量的屬性進行設置,比如將CNVVariableSingleWriterAttribute屬性設置為1,說明該網絡變量只有1個寫入者;CNVVariableServerBufferMaxItemsAttribute屬性可以設置在服務器端能容納數據項的數量。

第三步,使用網絡變量函數庫中的CNVCreateWriter()函數在剛才新建的網絡變量地址:“IPmy_processmy_variable”創建數據發布者;當需要更新的數據量較大時,可以使用CNVCreateBufferedWriter()函數來創建發送緩存區,提高數據的發送效率。創建完成后可以使用CNVGetConnectionAttribute()函數獲得與共享網絡變量的連接狀態。

第四步,發布數據,通過共享網絡變量傳輸的數據類型可以是單個變量、字符串,也可以是一個數據結構。

共享網絡變量的數據類型如表1所示,用戶可以根據需要設置共享變量的數據類型。軟件在通過共享網絡變量進行數據發布和讀取時,均是按已設定的數據類型進行操作,不用考慮在傳輸中的數據轉換問題。

表1 共享網絡變量數據類型

當進行單一數據類型的數據傳輸時,通過使用CNVCreateScalarDataValue()函數創建不同類型的數據,再通過CNVWrite()函數發布到共享共享網絡變量。

當進行復雜數據的傳輸時,需要將發送的數據組包為結構體進行發送。將數據組包為結構體的方法如下:

1)首先根據需要定義網絡變量數據,數據類型為:CNVData。使用CNVCreateArrayDataValue()函數創建數組型的數據;使用CNVCreateScalarDataValue()函數創建數值型的數據;最后使用CNVCreateStructDataValue()函數創建包含若干個網絡變量數據的結構體,示例代碼如下所示;

CNVData data, fields[3]; //3個變量數據

Check(CNVCreateArrayDataValue (&fields[0], CNVInt16, &dataArray, 1, dims)); //數據數組

Check(CNVCreateScalarDataValue (&fields[1], CNVUInt16, 0)); //通道號

Check(CNVCreateScalarDataValue (&fields[2], CNVUInt32, 0)); //包序號

Check(CNVCreateStructDataValue (&data, fields, FIELDSIZE));

2)接下來將數據填充到剛才創建的結構體中,示例代碼如下:

Check(CNVSetArrayDataValue (fields[0], CNVInt16, DataBuf, 1, dims));

Check(CNVSetScalarDataValue (fields[1], CNVUInt16, i));

Check(CNVSetScalarDataValue (fields[2], CNVUInt32, pkgIndex++));

Check(CNVSetStructDataValue (data, fields, FIELDSIZE));

3)最后使用CNVPutDataInBuffer()函數將組包好的數據通過數據發布者發布到共享網絡變量。

第五步,軟件退出前,使用CNVDispose()函數釋放創建數據發布者或發布緩存,最后使用CNVFinish()停止共享變量引擎。

2.2 上位機軟件設計

上位機負責讀取共享網絡變量的數據并進行處理,是數據的訂閱端。上位機軟件的流程設計如圖6所示。

圖6 上位機軟件設計流程圖

第一步,使用CNVCreateSubscriber()函數在網絡變量地址創建數據訂閱者;如果數據量較大,則使用CNVCreateBufferedSubscriber()函數創建數據訂閱緩存。通過使用緩沖區,可以解決對于一個變量讀/寫速度的波動問題。當讀出操作偶爾比寫入操作慢的情況可能會導致一些更新數據的丟失,如果應用可以容忍數據丟失,就不需要使用緩沖區;但是如果讀取操作必須獲得每個更新數據,就需要使用緩沖區[10]。

第二步,使用CNVGetConnectionAttribute()函數獲得與網絡變量的連接狀態,如果連接異常,提示用戶檢查錯誤原因并退出;

第三步,創建數據接收線程,不斷的從網絡變量讀取數據,解析數據并進行顯示,同時將數據寫入記錄文件中存儲。

從共享網絡變量接收數據并提取出有效數據的方法與發布端相反,步驟如下:

1)使用CNVGetDataFromBuffer()函數檢查網絡變量是否有新數據到達;

2)使用CNVGetNumberOfStructFields()函數獲取接收到的結構體數量,

3)使用CNVGetStructFields()函數獲取結構體數據;

4)使用CNVGetArrayDataValue()函數獲取結構體中的數組元素,使用CNVGetScalarDataValue()函數獲取結構體中的數據值;

5)測試完成后使用CNVDisposeData()函數釋放網絡變量接收緩存;

如果不需要獲得網絡變量的每個更新數據,僅獲取最新數據進行顯示,那么上面的5個步驟可以簡化為以下3個:

1)使用CNVGetConnectionAttribute()函數通過CNVMostRecentDataAttribute參數查詢最新的結構體數據;

2)在定時器函數中重復調用CNVGetArrayDataValue()函數獲取共享網絡變量結構體中的數組元素,使用CNVGetScalarDataValue()函數獲取數據值;

3)測試完成后使用CNVDisposeData()函數釋放網絡變量接收緩存。

最后,當用戶結束數據接收操作時,軟件停止數據接收線程,使用CNVDispose()函數釋放創建數據訂閱者或訂閱緩存,最后使用CNVFinish()停止共享變量引擎。

2.3 上下位機軟件交互協議

在下位機上完成共享網絡變量數據的發布流程以及在上位機上完成網絡變量數據的訂閱流程后,還需要制定上下位機之間的通訊交互協議,由上位機向下位機發送控制命令,下位機根據控制命令開始或停止數據采集和發布。

上下位機軟件之間的交互命令包括開始自檢、停止自檢、開始測試、停止測試和關閉軟件等幾個命令。這些命令采用TCP協議進行傳輸,這樣做的好處是將交互命令和共享網絡變量的數據傳輸相互分離,簡化軟件的開發和數據處理流程。

上下位機軟件之間的命令交互流程如圖7所示。

圖7 上下位機軟件交互流程

第一步,下位機啟動后首先在指定端口創建TCP Server和共享網絡變量,等待上位機進行連接;上位機啟動后根據配置文件中定義的端口號連接TCP Server,連接成功后在界面上顯示已連接狀態;

第二步,根據用戶在上位機軟件界面上的操作,通過TCP連接向下位機發送開始測試等控制命令,下位機收到命令后發送應答,開始數據采集并將數據更新到共享網絡變量中;上位機從共享網絡變量中讀取數據,完成解析并在軟件界面中進行顯示;

第三步,用戶在上位機軟件界面中點擊停止測試按鈕,軟件通過TCP連接向下位機發送停止測試命令,下位機收到命令后發送應答,停止數據采集和共享變量的更新;

第四步,當用戶點擊退出按鈕時,軟件通過TCP連接向下位機發送關閉軟件命令,下位機關閉網絡共享變量和TCP連接,釋放資源并退出。

3 功能驗證

為了驗證軟件設計的可行性和NI PSP協議的傳輸效率,在測試系統中進行了上下位機的軟件部署和軟件功能的驗證。

下位機沒有圖形化的軟件界面,下位機軟件運行后創建以時間命名的本地數據記錄文件,將將采集到的數據保存在本地文件中。

上位機軟件界面如圖8所示,Tab頁面分別對應兩個RTU,這兩個RTU通過各自的共享網絡變量與上位機進行數據傳輸。用戶點擊“開始”按鈕后,上位機軟件向兩個RTU的下位機軟件發送開始測試命令,下位機軟件將采集到的現場數據通過各自的共享網絡變量發送給上位機;上位機分別從這兩個共享變量讀取數據,并對讀取的數據進行解析,根據解析結果對RTU的每一個通道的狀態進行顯示,同時按照與下位機相同的格式將接收到的數據保存在數據記錄文件中。

圖8 上位機軟件界面

測試過程結束后,通過對比上、下位機中的保存的數據記錄文件,驗證了在測試過程中軟件通過共享網絡變量進行數據傳輸沒有錯誤發生,驗證了數據傳輸的可靠性。

4 結束語

本文介紹了以共享網絡變量技術為基礎,具有多節點大數據量傳輸能力的分布式測試軟件的設計方法。與傳統采用Socket API函數進行數據傳輸的設計方法相比,使用共享網絡變量的編程更為簡單,降低了軟件開發的難度,可以使開發人員專注于測試功能的實現,提高軟件開發的效率。

采用該設計方法開發的分布式測試軟件已在某型號電磁閥測試系統中得到了應用,實際驗證了共享網絡變量的傳輸效率和可靠性,具有一定的推廣價值。

主站蜘蛛池模板: 亚洲天堂精品视频| 尤物国产在线| 婷婷久久综合九色综合88| 国产免费网址| 丝袜美女被出水视频一区| 国产午夜不卡| 国产日韩欧美黄色片免费观看| 超薄丝袜足j国产在线视频| 亚洲国模精品一区| 亚洲第一国产综合| 欧美亚洲中文精品三区| 在线国产91| 国产第三区| 国产精品永久不卡免费视频| 直接黄91麻豆网站| 国产精品欧美激情| 久青草国产高清在线视频| 91精品专区国产盗摄| 四虎永久在线| 国产在线视频导航| 国产伦片中文免费观看| 日本人真淫视频一区二区三区 | 午夜不卡视频| 人与鲁专区| 亚洲天堂精品视频| 日本三级欧美三级| 天天色综网| 亚洲无码91视频| 免费无码在线观看| 在线一级毛片| 精品无码视频在线观看| 国产精品亚洲五月天高清| a级毛片一区二区免费视频| 久久96热在精品国产高清| 国产H片无码不卡在线视频| 亚洲手机在线| 六月婷婷综合| 成人亚洲国产| 亚洲欧美自拍视频| 国产精品性| 国产黑丝视频在线观看| 国产福利拍拍拍| 午夜日韩久久影院| 爱爱影院18禁免费| 婷婷五月在线| 四虎国产精品永久一区| 四虎亚洲精品| 欧美高清三区| 亚洲欧美极品| 国产伦精品一区二区三区视频优播 | 国产成人啪视频一区二区三区| 91福利在线观看视频| 日本免费新一区视频| 青青草原国产一区二区| 免费观看国产小粉嫩喷水| 欧美日韩中文国产va另类| 狠狠亚洲婷婷综合色香| 91www在线观看| 欧美亚洲国产日韩电影在线| 欧美午夜在线视频| 国产精品视频3p| 国产性猛交XXXX免费看| 国产极品美女在线观看| a级毛片免费看| 欧美狠狠干| 国产麻豆aⅴ精品无码| 国产自视频| 91久久性奴调教国产免费| 国产原创自拍不卡第一页| 国产无码制服丝袜| 精品丝袜美腿国产一区| 成人看片欧美一区二区| 国产精品久久精品| 国产无码性爱一区二区三区| 人人看人人鲁狠狠高清| 日本人妻一区二区三区不卡影院| 丝袜无码一区二区三区| 亚洲欧美不卡中文字幕| 一区二区三区四区精品视频 | 一本色道久久88| 自偷自拍三级全三级视频| 天天色天天操综合网|