摘要:數(shù)據(jù)采集是科學(xué)實(shí)驗(yàn)的一個(gè)重要環(huán)節(jié),數(shù)據(jù)采集卡是數(shù)據(jù)采集系統(tǒng)的一個(gè)關(guān)鍵硬件。利用DataSocket技術(shù)能較好實(shí)現(xiàn)數(shù)據(jù)采集卡的共享,提高了設(shè)備的利用率和降低實(shí)驗(yàn)成本。
關(guān)鍵詞:數(shù)據(jù)采集;DataSocket;Labview;RDA
中圖分類號(hào):TP274 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2009)15-4045-02
The Example of Share Data Collecting Card Based on DataSocket Technique
WANG Peng-chong1, LIANG Jin-tu2, LIN Peng1
(1. Zhanjiang normal university,Zhanjiang 524048,China; 2.Physical Science and Technical College of Zhanjiang normal university,Zhanjiang 524048,China)
Abstract: It is an important tache of science experiment of a data collect, the data collects card is a key hardware of the data collect system . usingthe technique of DataSocket can be better to carry out sharing the data collects card, raising the utilization of the equipments and lowering the experiment cost.
Key words: Data collect;DataSocket; Labview;RDA
1 前言
數(shù)據(jù)采集卡是數(shù)據(jù)采集系統(tǒng)中重要的硬件之一,在有些場(chǎng)合,例如教學(xué)實(shí)驗(yàn)室,如果每臺(tái)計(jì)算機(jī)都配備一塊采集卡,則代價(jià)較高,利用率也較低。因此,實(shí)現(xiàn)采集卡的共享是較好的解決方案。Laview的DataSocket技術(shù)能較好地實(shí)現(xiàn)數(shù)據(jù)采集卡的共享,即多臺(tái)計(jì)算機(jī)共享一臺(tái)計(jì)算機(jī)(服務(wù)器)上的采集卡,數(shù)據(jù)采集卡共享程序可以用于一個(gè)局域網(wǎng)內(nèi)的計(jì)算機(jī)組。
2 DataSocket技術(shù)
DataSocket由DataSocket API 與DataSocket Server兩部分組成。DataSocket API是用于用戶訪問網(wǎng)絡(luò)數(shù)據(jù)的接口,DataSocket Server負(fù)責(zé)提供DSTP協(xié)議和管理底層網(wǎng)絡(luò)通信。利用DSTP實(shí)現(xiàn)現(xiàn)場(chǎng)數(shù)據(jù)網(wǎng)絡(luò)共享,必須要用到DataSocket Server。
DataSocket API是協(xié)議獨(dú)立的、編程語言獨(dú)立和操作系統(tǒng)獨(dú)立的用于簡(jiǎn)化二進(jìn)制數(shù)據(jù)傳輸?shù)腁PI。它的實(shí)現(xiàn)方式可以是ActiveX控件、LabWindows/CVI C代碼庫(kù)或一系列LabView VI,因此可以在任何編程環(huán)境中使用它。
DataSocket Server是一個(gè)輕量級(jí)的獨(dú)立組件。DataSocket API訪問DSTP對(duì)象時(shí)就是通過訪問它來實(shí)現(xiàn)現(xiàn)場(chǎng)數(shù)據(jù)的傳輸?shù)?。DataSocket Server通過自動(dòng)管理與客戶端的連接,從而極大簡(jiǎn)化了TCP編程,用戶可以不用了解任何TCP/IP編程的知識(shí)。
通過DataSocket Server廣播數(shù)據(jù)需要3種“角色”——發(fā)布者(Publisher)、DataSocket Server和接收者(Subsciber)。發(fā)布者通過DataSocket API向DataSocket Server寫入數(shù)據(jù),接收者通過DataSocket API從DataSocket Server讀取數(shù)據(jù)。發(fā)布者和接收者都是DataSocket Server的客戶端。利用DataSocket Server實(shí)現(xiàn)現(xiàn)場(chǎng)數(shù)據(jù)的網(wǎng)絡(luò)共享時(shí),發(fā)布者、接收者和服務(wù)器之間的關(guān)系如圖2所示。
3 數(shù)據(jù)采集卡共享的設(shè)計(jì)方案
NI公司提供的RDA(remote device access)技術(shù)可實(shí)現(xiàn)對(duì)遠(yuǎn)程數(shù)據(jù)采集卡的訪問。用戶可以利用Measurement Automation Explorer來進(jìn)行遠(yuǎn)程數(shù)據(jù)采集卡的設(shè)置,設(shè)置完成后,在本地機(jī)上就會(huì)出現(xiàn)一塊虛擬的數(shù)據(jù)采集卡,并且分配有相應(yīng)的設(shè)備號(hào)。為了避免多個(gè)客戶機(jī)同時(shí)訪問一個(gè)遠(yuǎn)程數(shù)據(jù)采集卡時(shí)發(fā)生沖突,導(dǎo)致程序出錯(cuò),必須考慮在服務(wù)器端增加任務(wù)管理程序,以對(duì)客戶機(jī)的請(qǐng)求進(jìn)行管理。而在客戶機(jī)中,用戶先要向服務(wù)器提出申請(qǐng),服務(wù)器響應(yīng)后,才能調(diào)用本機(jī)LabView中的采集程序,啟動(dòng)配置遠(yuǎn)程采集卡,并進(jìn)行數(shù)據(jù)采集。RDA Server會(huì)自動(dòng)把采集到的數(shù)據(jù)傳送回客戶機(jī)。如果采集卡正被占用,則服務(wù)器不會(huì)響應(yīng)新的客戶機(jī)請(qǐng)求,這樣可以避免多個(gè)客戶機(jī)同時(shí)訪問一個(gè)遠(yuǎn)程采集卡時(shí)發(fā)生的沖突。數(shù)據(jù)采集卡共享示意圖如圖2所示。
3.1 RDA技術(shù)實(shí)現(xiàn)遠(yuǎn)程數(shù)據(jù)采集的配置
利用RDA(Remote Device Access)技術(shù)共享服務(wù)器上的設(shè)備,在客戶機(jī)上編程直接控制服務(wù)器上的DAQ設(shè)備,實(shí)現(xiàn)遠(yuǎn)程數(shù)據(jù)采集。
RDA在編程方面與使用本機(jī)DAQ設(shè)備完全一樣。在LabView中利用RDA技術(shù)實(shí)現(xiàn)遠(yuǎn)程數(shù)據(jù)采集的步驟如下:
第一步,配置RDA服務(wù)器。RDA服務(wù)器需要安裝NI-DAQ6.0(或更高版本)以及DAQ設(shè)備,設(shè)置服務(wù)器的IP地址,例如192.168.0.1,其子網(wǎng)掩碼為255.255.255.0。然后啟動(dòng)服務(wù)器上的Remote Device Access Server即可。若有必要,可以在DAQ設(shè)備的屬性對(duì)話框中設(shè)置RDA訪問密碼。
第二步,設(shè)置客戶機(jī)。RDA客戶端應(yīng)安裝與服務(wù)器相同版本的NI-DAQ,否則DAQ設(shè)備會(huì)無法連接。設(shè)置客戶機(jī)的IP地址,例如192.168.0.2,其子網(wǎng)掩碼為255.255.255.0。RDA客戶機(jī)的設(shè)置比較復(fù)雜,通常按照下列步驟進(jìn)行:
1)在客戶機(jī)的MAX(Measurement Automation Explorer)左側(cè)目錄樹中的Devices and Interfaces項(xiàng)的右鍵彈出菜單中選擇“Create New”,在Create New窗口選擇RDA/Ethernet Device。
2)在隨后出現(xiàn)的Select Remote Computer對(duì)話框中輸入服務(wù)器的IP地址或計(jì)算機(jī)名。
3)在隨后出現(xiàn)的System對(duì)話框中設(shè)定設(shè)備號(hào),若服務(wù)器上的DAQ設(shè)備設(shè)置了RDA訪問密碼,則還需在Password欄中輸入正確的密碼。
至此,就完成了客戶機(jī)上RDA設(shè)備的添加,客戶機(jī)的MAX左側(cè)目錄樹中會(huì)出現(xiàn)這個(gè)RDA設(shè)備。從此以后,用戶可以像在本地一樣操作該設(shè)備。在客戶機(jī)上直接編寫DAQ軟件,實(shí)現(xiàn)遠(yuǎn)程數(shù)據(jù)采集。
3.2 服務(wù)器工作流程
啟動(dòng)服務(wù)器程序,自動(dòng)運(yùn)行DS Server Manager和RDA Server程序。接著,讀取用戶請(qǐng)求信息,如果沒有請(qǐng)求信息,則繼續(xù)掃描;如果有客戶機(jī)請(qǐng)求信息,則對(duì)客戶機(jī)請(qǐng)求信息按照請(qǐng)求時(shí)間或者優(yōu)先級(jí)排序,給優(yōu)先級(jí)最高者以許可訪問響應(yīng)信息。然后。等待客戶機(jī)返回任務(wù)完成信息,如果接到完成信息,則完成一次循環(huán),并重新讀取客戶請(qǐng)求信息,開始新的循環(huán)。
3.3 客戶機(jī)工作流程
向DS Server發(fā)出請(qǐng)求信息,等待服務(wù)器給出響應(yīng)信息;從DS Server讀取響應(yīng)信息,然后進(jìn)入用戶自己設(shè)計(jì)的采集任務(wù),調(diào)用本地的采集程序完成采集。調(diào)用計(jì)時(shí)程序查向自己的任務(wù)所占用的時(shí)間是否超過請(qǐng)求時(shí)間,如果超過請(qǐng)求時(shí)間或者用戶終止采集任務(wù),則需向DS Server寫入任務(wù)結(jié)束信息,從而客戶機(jī)程序結(jié)束。
4 共享數(shù)據(jù)采集卡程序設(shè)計(jì)
4.1 服務(wù)器端程序設(shè)計(jì)
程序使用兩組變量:請(qǐng)求信息變量(任務(wù)結(jié)束變量)rq和服務(wù)器響應(yīng)變量rp。服務(wù)器程序前面板有兩個(gè)頁面,一個(gè)頁面顯示當(dāng)前正在等待或者處理的任務(wù)信息,另一個(gè)頁面顯示已處理的任務(wù)列表。請(qǐng)求信息和響應(yīng)這兩組變量分別為一個(gè)整型數(shù)組,由于不需要用戶修改,因此前面板隱藏了這兩個(gè)變量。為了使服務(wù)器程序能在不同的機(jī)器上運(yùn)行,可利用前面板的變量所具有的DataSocket Connection屬性來實(shí)現(xiàn)前面板的DS連接。在Connect To中指定URL時(shí),格式是“dstp://machine name/variable name”,其中machine name可以是機(jī)器名,也可以是IP,對(duì)于本機(jī)則可以使用localhost或者127.0.0.1來設(shè)定。請(qǐng)求信息初始設(shè)定為1000,即如果請(qǐng)求信息為1000,則表示沒有請(qǐng)求信息;如果請(qǐng)求信息小于1000,則表示有請(qǐng)求信息,其值等于具體的請(qǐng)求時(shí)間。服務(wù)器判斷請(qǐng)求信息的最小值,如果不等于1000,則表示有請(qǐng)求信息,服務(wù)器給予響應(yīng)。服務(wù)器響應(yīng)后,客戶機(jī)開始運(yùn)行采集程序,完成后,需要給請(qǐng)求信息重新賦值為1000,作為采集任務(wù)結(jié)束的標(biāo)志。一旦服務(wù)器判斷到這個(gè)標(biāo)志又變?yōu)?000后,則可以開始新的循環(huán)。
4.2 戶客機(jī)端程序設(shè)計(jì)
客戶機(jī)程序除了用戶設(shè)計(jì)的采集程序外,需要用到3個(gè)子程序:建立連接、超時(shí)判斷和結(jié)束連接。建立連接子程序的作用是向服務(wù)器發(fā)送請(qǐng)求信息,并且等待得到響應(yīng)信息,一旦得到響應(yīng)信息,該子程序就結(jié)束。響應(yīng)信息需要4個(gè)參數(shù):客戶端編號(hào)、請(qǐng)求時(shí)間、服務(wù)器名稱和遠(yuǎn)程采集設(shè)備號(hào)。其中,客戶端編號(hào)作為服務(wù)器識(shí)別來自不同客戶機(jī)請(qǐng)求的標(biāo)志,服務(wù)器名稱可以是機(jī)器名或IP,需要先利用Measurement Automation Explorer設(shè)置好遠(yuǎn)程采集卡之后,才可以使用遠(yuǎn)程采集設(shè)備號(hào)。超時(shí)判斷的作用是判斷采集程序是否運(yùn)行超時(shí)。結(jié)束連接的作用是發(fā)送結(jié)束任務(wù)信息0給DS Server變量rq,相應(yīng)元素賦值為1000,讓服務(wù)器知道任務(wù)已經(jīng)結(jié)束。
在進(jìn)行數(shù)據(jù)采集時(shí),服務(wù)端要啟動(dòng)RDA Server,用以完成客戶機(jī)訪問服務(wù)器采集卡的任務(wù),因此服務(wù)器程序不必調(diào)用任何采集程序,只對(duì)客戶機(jī)的請(qǐng)求進(jìn)行響應(yīng)和判斷任務(wù)是否結(jié)束即可。而客戶機(jī)上的程序則在請(qǐng)求被響應(yīng)之后,可以像使用本機(jī)的采集卡一樣使用服務(wù)器上的采集卡,直接調(diào)用LabVIEW中的采集程序,完成自己的采集任務(wù),實(shí)現(xiàn)遠(yuǎn)程數(shù)據(jù)采集。
5 結(jié)語
DataSocket技術(shù)是NI公司提供的一個(gè)網(wǎng)絡(luò)測(cè)控系統(tǒng)開發(fā)工具。DataSocket遵循TCP/IP協(xié)議,并對(duì)底層進(jìn)行高度封裝,所提供的參數(shù)簡(jiǎn)單、友好,只需要設(shè)置URL,就可以用于實(shí)時(shí)數(shù)據(jù)傳送,通過 DataSocket技術(shù)我們能較好地實(shí)現(xiàn)了數(shù)據(jù)采集卡的共享。
參考文獻(xiàn):
[1] 侯國(guó)屏,王坤,葉齊鑫.Labview 7.1編程與虛擬儀器設(shè)計(jì)[M]清華大學(xué)出版社.2005(2):413-416.
[2] 陳錫輝,張銀鴻.Labview 8.2程序設(shè)計(jì)從入門到精通[M] 清華大學(xué)出版社.2007(1):322-325.
[3] 鄭詩(shī)樵,黃文達(dá).基于LabVIEW的網(wǎng)絡(luò)實(shí)驗(yàn)儀器的開發(fā)[J].實(shí)驗(yàn)室研究與探索.2005,1(24):26-27.
[4] 李海濤.在LabVIEW中實(shí)現(xiàn)基于C/S結(jié)構(gòu)的遠(yuǎn)程數(shù)據(jù)采集[EB/OL].[2009-03-10].http://blog.csdn.net/kw123/archive/2006/07/03/869293.aspx.
[5] 楊忠仁,饒程,鄒建,彭珍蓮.基于LabVIEW 數(shù)據(jù)采集系統(tǒng)[J]. 重慶大學(xué)學(xué)報(bào).2004.2(27):33-36.
[6] 燕延,馬增強(qiáng),楊明.基虧LabVIEW 的數(shù)據(jù)采集與處理軟件編程技巧[J] 微計(jì)算機(jī)信息.2005,5(21):153-154.
[7] 楊忠仁,饒程,鄒 建,彭珍蓮. 基于LabVIEW 數(shù)據(jù)采集系統(tǒng)[J]. 重慶大學(xué)學(xué)報(bào).2004,2(27).33-35.
[8] 張炯,方湘陵.基于虛擬儀器技術(shù)的遠(yuǎn)程實(shí)驗(yàn)室[J].實(shí)驗(yàn)室研究與探索,2007,(26).9:12-13.
[9] 黃曉晴,繆永生.網(wǎng)絡(luò)化PXI總線虛擬實(shí)驗(yàn)室設(shè)計(jì)與實(shí)現(xiàn)[J]. 實(shí)驗(yàn)室研究與探索,2005(24).11:59-60.