龐新法
摘 要: 提出如何通過實現(xiàn)網(wǎng)絡化儀器儀表間的通信來完成儀器間協(xié)同工作,從而最大程度地發(fā)揮網(wǎng)絡化儀器測量系統(tǒng)的效率。為了實現(xiàn)網(wǎng)絡化儀器間的通信,需將HiSLIP協(xié)議、虛擬儀器設計技術(shù)與網(wǎng)絡化測控系統(tǒng)相結(jié)合,并利用HiSLIP協(xié)議的可靠連接以及高效數(shù)據(jù)傳輸特點,設計網(wǎng)絡化儀器間的通信,從而給出協(xié)議客戶端設計與實現(xiàn)。
關(guān)鍵詞: 網(wǎng)絡化儀器; HiSLIP協(xié)議; 通信; 網(wǎng)絡化測控系統(tǒng)
中圖分類號: TN911?34; TP312 文獻標識碼: A 文章編號: 1004?373X(2015)18?0122?03
Abstract: The way how to realize collaborative work of instruments by communication among the networked instruments is proposed to bring the efficiency of measurement system into play for networked instruments to the maximum extent. To achieve communication among networked instruments, it is necessary to combine the networked measurement and control system with HiSLIP protocol, design technology of virtual instrument, and design the communicationn among the networked instruments by utilizing the characteristics of reliable connection and high?efficiency data transmission of the HiSLIP protocol. The design and implementation of protocol client?side are presented.
Keywords: networked equipment; HiSLIP protocol; communication; networked measurement and control system
0 引 言
隨著網(wǎng)絡技術(shù)的廣泛應用,儀器儀表已開始向計算機化、網(wǎng)絡化、智能化方向發(fā)展,儀器網(wǎng)絡化的發(fā)展趨勢,使得其已經(jīng)不再是孤立的、單獨的設備,而是將測試技術(shù)、互聯(lián)網(wǎng)技術(shù)、計算機技術(shù)結(jié)合在一起的網(wǎng)絡儀器系統(tǒng)。但網(wǎng)絡化儀器間難以進行協(xié)同工作,進而限制測量系統(tǒng)測量效率。為了實現(xiàn)網(wǎng)絡化儀器間的通信,本文將HiSLIP協(xié)議、虛擬儀器設計技術(shù)與網(wǎng)絡化測控系統(tǒng)相結(jié)合,利用HiSLIP協(xié)議的可靠連接以及高效數(shù)據(jù)傳輸特點,設計網(wǎng)絡化儀器間的通信原理,并給出了協(xié)議客戶端設計與實現(xiàn)。
儀器代理作為網(wǎng)絡管理結(jié)構(gòu)中的核心實體,存在于被管理的網(wǎng)絡設備中,用來訪問設備的運行狀態(tài),對設備參數(shù)進行配置,是被管設備與管理中心交互的中間接口。
HiSLIP協(xié)議客戶端的功能主要劃分為4部分:協(xié)議啟動和前期準備;與服務器端建立連接;與服務器端的數(shù)據(jù)交互;容錯處理.??蛻舳伺c服務器端的交互種類分為14類,通過這14類交互,完整實現(xiàn)協(xié)議所需要的功能,在進行交互說明時以“<消息類型> <控制碼>
<消息參數(shù)> <數(shù)據(jù)長度> <數(shù)據(jù)>”的格式來表示消息。
1 協(xié)議啟動
在控制端應用程序啟動時,協(xié)議的客戶端即開始啟動,在啟動過程中,向操作系統(tǒng)申請Socket套接字資源[1?2]。并進行端口綁定,協(xié)議規(guī)范中建議使用4880端口。對4880端口綁定完成后,即可向由VISA提供的儀器端的網(wǎng)絡代理IP地址發(fā)起連接。
2 建立連接
HiSLIP協(xié)議連接的建立使用的是TCP機制,由客戶端向服務器端發(fā)起2次TCP連接,分別是該協(xié)議的同步通道連接和異步通道連接。在建立好2個TCP連接之后,還需要檢查服務器端儀器上加鎖的情況,相互協(xié)商交互信息時的消息尺寸。為后續(xù)的數(shù)據(jù)和控制信息的交互提供服務。
2.1 建立連接使用到的消息類型序列
(1) 由客戶端發(fā)起第1個TCP連接;
(2) 使用消息類型Initialize 進行同步通道連接初始化;在該消息中包含的數(shù)據(jù)有客戶端協(xié)議版本;客戶端廠商ID;子地址。消息格式為:
(3) 發(fā)起第2個TCP連接;
(4) 使用消息類型AsyncInitialize 進行異步通道連接初始化,在該消息中包含由應用軟件推送的SessionID(會話號)。格式為:
2.2 對遠端儀器進行鎖操作的消息類型序列
(1) 首先通過AsyncLockInfo消息類型,來向遠端服務器請求當前儀器資源上鎖的情況,有服務器返回是否已經(jīng)加鎖、鎖的類型以及鎖的數(shù)目等消息。格式為:
(2) 在查詢后確認可以對遠端儀器加鎖時,使用消息類型AsyncLock來實現(xiàn)對遠端儀器資源加鎖和釋放鎖。在該消息中包含的數(shù)據(jù)有,請求加鎖標志位和請求釋放鎖標志,等待加鎖超時時間,鎖信息描述等。加鎖消息的格式為:
2.3 客戶端和服務器協(xié)商發(fā)送消息的尺寸使用的消息序列
客戶端通過AsyncMaximumMessageSize消息類型來告知服務器自己的能夠接收的消息尺寸,該消息中包含由8 B無符號整形數(shù)據(jù)表示的消息尺寸信息。消息格式為:
3 數(shù)據(jù)交互
數(shù)據(jù)交互是這個協(xié)議的核心部分,客戶端在與服務器端建立連接后,使用Data和DataEND兩種消息類型的消息發(fā)送數(shù)據(jù)。如果應用軟件推送給客戶端的數(shù)據(jù),可以滿足不超過最大消息長度的情況下,使用DataEND消息類型進行發(fā)送,如果超過了最大消息長度,則先使用Data消息類型進行發(fā)送若干,在剩余的數(shù)據(jù)不超過最大消息尺寸時,使用DataEND發(fā)送剩余的數(shù)據(jù)[3]。所以,所有的消息都是以DataEND消息類型實現(xiàn)數(shù)據(jù)的完整發(fā)送。通信雙方交互時使用的消息類型序列如下:
客戶端使用Data消息類型的消息來發(fā)送數(shù)據(jù);消息中包含的數(shù)據(jù)有交付標志信息RMT?delivered,該消息的消息編號MessageID,消息長度以及由應用軟件推送的數(shù)據(jù)。格式為:
客戶端使用DataEND消息類型的消息來發(fā)送數(shù)據(jù);消息中包含的其他信息與上一條中一致。格式為:
這部分代碼如下:
void send_dataend(hislip_message *send_message,int message_id,int data_len)
{
strncpy(send_message?>prologue,"HS",2);
send_message?>type=DATA_END;
send_message?>parameter=message_id;
send_message?>control=0x00;
send_message?>data_len=htonlli((long long int)data_len);
}
void send_data(hislip_message *send_message,int message_id,int data_len)
{
strncpy(send_message?>prologue,"HS",2);
send_message?>type=DATA;
send_message?>parameter = message_id;
send_message?>control = 0x00;
send_message?>data_len=htonlli((long long int)data_len);
}
4 容錯處理
容錯處理是在連接未成功或者協(xié)議運行故障時的操作,以保證協(xié)議能夠穩(wěn)定實現(xiàn)相關(guān)功能。在協(xié)議的14類交互中,容錯處理包含:致命錯誤及同步恢復交互(Fatal Error Detection and Synchronization Recovery);錯誤告知交互(Error Notification Transaction);中斷交互
(Interrupted Transaction)。
致命錯誤及同步恢復交互[4],客戶端和服務器端都會使用到,設置消息類型為FatalError,該消息包含的數(shù)據(jù)有錯誤碼(ErrorCode)、數(shù)據(jù)長度和數(shù)據(jù)。消息格式為:
錯誤告知交互[5],客戶端和服務器端雙方都會使用到,使用的消息類型為Error,其他字段內(nèi)容與“致命錯誤及同步恢復交互”中的一致,不同的是,雙方不管哪一方收到這個消息,都不需要做出其他動作,消息格式為:
中斷交互,僅服務器端使用,在服務器部分進行說明,本文不在詳述。
5 輔助處理交互
除了上述的交互過程,協(xié)議本身也定義了一些輔助的交互過程,能夠?qū)崿F(xiàn)附屬功能,這些交互有:遠程/本地控制交互(Remote Local Transaction);觸發(fā)信息交互(Trigger Message);服務請求交互(Service Request);狀態(tài)查詢交互(Status Query Transaction);設備清除交互(Device Clear Transaction);廠商定義交互(Vendor Defined Transactions)。
遠程/本地控制交互[6],為GPIB設備提供服務,客戶端向服務器端發(fā)送數(shù)據(jù)時,使用到的消息類型為AsyncRemoteLocalControl,消息中包含的數(shù)據(jù)有控制碼(request),消息ID。消息格式為:
觸發(fā)信息交互[7],為了模擬GPIB設備組觸發(fā)使用到的交互,客戶端向服務器端發(fā)送消息時使用的消息類型為Trigger,消息中包含的數(shù)據(jù)主要有RTM交付標志,消息ID。消息格式為:
服務請求交互,是服務器使用交互,在服務器部分進行說明。
狀態(tài)查詢交互,是為了客戶端查詢服務器端的狀態(tài),返回的狀態(tài)碼(status),客戶端發(fā)送給服務器進行狀態(tài)查詢時使用的消息類型為AsyncStatusQuery,消息中包含的數(shù)據(jù)有RTM交付標志,消息ID。消息格式為:
設備清除交互,是為了清除通信的通道,由客戶端向服務器端發(fā)起,客戶端的消息序列如下:
客戶端發(fā)送AsyncDeviceClear消息,消息中不包含其他數(shù)據(jù),發(fā)送完消息后等待進程中的同步消息處理完成。消息格式為:
客戶端發(fā)送DeviceClearComplete消息,消息中包含特征標志請求(featureRequest)。消息格式為:
廠商定義交互,客戶端和服務器端都可以發(fā)送這個消息,使用的消息類型為VendorDefined,消息中的數(shù)據(jù)都是任意數(shù),消息格式為:
6 程序設計實現(xiàn)
根據(jù)上述設計過程以及各種交互的含義,時序關(guān)系,進行程序設計,程序?qū)崿F(xiàn)使用C語言實現(xiàn),程序中的模塊主要有,通道建立初始化模塊,數(shù)據(jù)接受模塊,數(shù)據(jù)發(fā)送模塊等。下面通過協(xié)議客戶端的主要函數(shù),說明程序設計中的功能實現(xiàn):
static int client_initialize(void)
實現(xiàn)初始化客戶端,初始化完成后,向服務器端發(fā)起的HiSLIP連接。
static int client_handle_async_message_size()
處理服務器端發(fā)送的協(xié)商雙方發(fā)送的消息尺寸的請求消息。
static int client_recv_message_handle()
接收從服務器端發(fā)送過來的數(shù)據(jù),并進行初步處理,對接收的數(shù)據(jù)包按照消息類型進行識別,識別后調(diào)用相關(guān)功能函數(shù)予以處理。
static int client_handle_async_lock()
處理服務器端發(fā)送的加鎖和釋放鎖反饋。
void client_send_data()和void client_send_dataend()
實現(xiàn)向服務器端發(fā)送數(shù)據(jù)操作。
7 結(jié) 語
本文通過對協(xié)議客戶端的詳細設計,并在此基礎上結(jié)合服務器端的設計及控制端和儀器網(wǎng)絡代理的設計,實現(xiàn)了儀器間通信。在實驗中通過示波器A和示波器B間的通信測試,證明本文提出的方案能夠?qū)崿F(xiàn)儀器與控制端、儀器和儀器的通信。
參考文獻
[1] 王建新,隋美麗.Labwindows/CVI虛擬儀器測試技術(shù)及工程應用[M].北京:化學工業(yè)出版社,2011.
[2] 余成波,王士彬,李洪兵.網(wǎng)絡化儀器技術(shù)與實現(xiàn)[M].北京:清華大學出版社,2010.
[3] 林玉池.測量控制與儀器儀表前沿技術(shù)及發(fā)展趨勢[M].天津:天津大學出版社,2005.
[4] ROBBINS A. Linux programming by example [M].北京:中國電力出版社,2006.
[5] 宋寶華.Linux設備驅(qū)動開發(fā)詳解[M].北京:人民郵電出版社,2008.
[6] 陳莉君,康華.Linux操作系統(tǒng)原理與應用[M].北京:清華大學出版社,2006
[7] 李宥謀,劉釗遠,馬博.嵌入式系統(tǒng)開發(fā)[M].北京:清華大學出版社,2011.