李延峰,李宥謀,閆海卿,李曉俊
(西安郵電大學(xué) 計(jì)算機(jī)學(xué)院,陜西 西安 710100)
目前,網(wǎng)絡(luò)儀器測控系統(tǒng)蓬勃發(fā)展,在促進(jìn)當(dāng)代生產(chǎn)中扮演關(guān)鍵角色[1]。同時(shí),總線技術(shù)是儀器進(jìn)步的基礎(chǔ)[2],總線技術(shù)由GPIB(general-purpose interface bus,通用接口總線)、VXI(VMEbus extension for instrumentation,VME總線在儀器領(lǐng)域的擴(kuò)展)、PXI(PCI extensions for instrumentation,面向儀器系統(tǒng)的PCI擴(kuò)展)向LXI(LAN extension for instrumentation,LAN在儀器領(lǐng)域的擴(kuò)展)發(fā)展過渡。
GPIB、VXI、PXI儀器由于帶寬和底板結(jié)構(gòu)等限制,被測對(duì)象難于遠(yuǎn)距離分布[3]。LXI是繼GPIB儀器、VXI/PXI虛擬儀器后新型的基于以太網(wǎng)的模塊化互聯(lián)架構(gòu)標(biāo)準(zhǔn)[4]。LXI網(wǎng)絡(luò)儀器測控系統(tǒng)是集成了RTOS(embedded real-time operation system,嵌入式實(shí)時(shí)操作系統(tǒng))、嵌入式SNMP(simple network management protocol,簡單網(wǎng)絡(luò)管理協(xié)議)代理、嵌入式HiSLIP(high-speed LAN instrument protocol,高速以太網(wǎng)儀器協(xié)議)服務(wù)、嵌入式DHCP(dynamic host configuration protocol,動(dòng)態(tài)主機(jī)配置協(xié)議)模塊及各種接口驅(qū)動(dòng)的大型應(yīng)用系統(tǒng),提供網(wǎng)絡(luò)化儀器測量,實(shí)現(xiàn)儀器設(shè)備動(dòng)態(tài)重組,降低了系統(tǒng)的復(fù)雜度和成本消耗[5]。
所以,文中對(duì)LXI網(wǎng)絡(luò)儀器后臺(tái)處理模塊進(jìn)行設(shè)計(jì),包括SNMP、HISLIP、DHCP等客戶端,實(shí)現(xiàn)儀器代理的主動(dòng)感知及IP自動(dòng)分配、控制指令和測量數(shù)據(jù)的實(shí)時(shí)高速傳輸、儀器代理的配置和測控管理等功能。另外,通過分析接口參數(shù),設(shè)計(jì)了調(diào)用后臺(tái)處理的統(tǒng)一接口程序,易于入門、方便后期功能擴(kuò)展、提高后臺(tái)操作與響應(yīng)速度。
SNMP基于TCP/IP協(xié)議工作,是對(duì)網(wǎng)絡(luò)中支持該協(xié)議的網(wǎng)絡(luò)節(jié)點(diǎn)進(jìn)行管理的標(biāo)準(zhǔn)協(xié)議[6]。其采用C/S模式[7],SNMP客戶端在管理端運(yùn)行,SNMP服務(wù)器在被管理端運(yùn)行。SNMP由SNMP代理、被管理的設(shè)備和網(wǎng)絡(luò)管理系統(tǒng)組成[8]。
本項(xiàng)目中SNMP協(xié)議客戶端主要完成測控端后臺(tái)處理模塊與遠(yuǎn)端儀器之間變量的屬性信息、控制命令及異常信息的交互傳輸。SNMP客戶端的總體操作由3類組成:儀器設(shè)備設(shè)置操作、屬性值獲取操作和被監(jiān)管設(shè)備異常監(jiān)測操作??蛻舳送ㄟ^GET、GETBULK和GETNEXT向SNMP服務(wù)器請(qǐng)求相應(yīng)操作;通過SET對(duì)設(shè)備參數(shù)值進(jìn)行設(shè)置或修改;通過Trap將異常信息主動(dòng)發(fā)送到管理端。
SNMP客戶端以模塊化方式設(shè)計(jì)實(shí)現(xiàn),各模塊間功能函數(shù)相互約束,同時(shí)接口函數(shù)相互配合,實(shí)現(xiàn)SNMP客戶端功能需求。
HISLIP由IVI聯(lián)盟推出,實(shí)現(xiàn)對(duì)儀器的控制和共享[9]。協(xié)議以C/S模式設(shè)計(jì),控制端運(yùn)行HISLIP客戶端,遠(yuǎn)端代理運(yùn)行HISLIP服務(wù)器端。HISLIP客戶端與標(biāo)準(zhǔn)儀器程控指令SCPI配合使用,實(shí)現(xiàn)對(duì)遠(yuǎn)端儀器代理的測量控制與管理[10]。HISLIP協(xié)議信息交互有異步通道和同步通道兩條鏈路,同步通道負(fù)責(zé)數(shù)據(jù)和指令的交互,異步通道負(fù)責(zé)異常處理[11]。
本項(xiàng)目中HISLIP協(xié)議客戶端主要負(fù)責(zé)后臺(tái)處理模塊與遠(yuǎn)端代理間數(shù)據(jù)和指令的傳輸交互任務(wù)。HISLIP客戶端整體設(shè)計(jì)可劃分為數(shù)據(jù)包同步通道處理模塊、數(shù)據(jù)包異步通道處理模塊和雙向通道建立模塊三部分。處理模塊流程如圖1所示。
圖1 HISLIP處理模塊流程
HISLIP客戶端設(shè)計(jì)采用模塊化方式,相互制約配合,最終實(shí)現(xiàn)HISLIP客戶端的功能。
DHCP是優(yōu)化主機(jī)等設(shè)備IP地址管理分配的標(biāo)準(zhǔn)協(xié)議[12],本項(xiàng)目中主要負(fù)責(zé)管理和分配IP地址,動(dòng)態(tài)管理網(wǎng)絡(luò)設(shè)備的上網(wǎng)環(huán)境,使設(shè)備的入網(wǎng)效率大幅提升。
LXI網(wǎng)絡(luò)儀器的DHCP模塊分四步實(shí)現(xiàn)。首先搭建DHCP服務(wù)器;其次以Linux系統(tǒng)的Inotify機(jī)制來監(jiān)控DHCP服務(wù)器日志文件中IP、MAC地址的數(shù)據(jù)變化;然后HISLIP客戶端給該IP設(shè)備發(fā)送SCPI指令獲取屬性;最后將儀器設(shè)備返回的屬性信息鏈接到IP地址的尾部。具體如圖2所示。
圖2 自動(dòng)發(fā)現(xiàn)模塊DHCP功能測試
LXI網(wǎng)絡(luò)儀器整體軟件結(jié)構(gòu)可分為三層,分別是:儀器設(shè)備層、核心組件層和應(yīng)用服務(wù)層[13]。儀器設(shè)備層實(shí)現(xiàn)測控?cái)?shù)據(jù)采集等功能;核心組件層解決應(yīng)用層的控制指令及儀器層上傳的測控?cái)?shù)據(jù)和異常消息,主要包含:HISLIP協(xié)議客戶端、SNMP協(xié)議客戶端、DHCP模塊和統(tǒng)一調(diào)用接口程序;應(yīng)用服務(wù)層負(fù)責(zé)提供友好界面以供人機(jī)交互,實(shí)現(xiàn)測量數(shù)據(jù)顯示與修改、儀器管理等功能。系統(tǒng)軟件結(jié)構(gòu)如圖3所示。
圖3 LXI網(wǎng)絡(luò)儀器整體軟件結(jié)構(gòu)
LXI網(wǎng)絡(luò)儀器后臺(tái)處理服務(wù)總調(diào)度模塊由統(tǒng)一接口、任務(wù)調(diào)度和數(shù)據(jù)處理模塊組成。統(tǒng)一接口模塊為
外部調(diào)用后臺(tái)處理服務(wù)提供統(tǒng)一化指令格式;任務(wù)調(diào)度模塊主要為測控命令在后臺(tái)的調(diào)度與處理服務(wù);數(shù)據(jù)模塊主要為儀器代理的數(shù)據(jù)處理服務(wù)。
為使程序健壯和穩(wěn)定,故以進(jìn)程實(shí)現(xiàn)調(diào)度,以共享內(nèi)存實(shí)現(xiàn)數(shù)據(jù)通信。后臺(tái)運(yùn)行時(shí),父進(jìn)程創(chuàng)建共享內(nèi)存和信號(hào)量后,實(shí)時(shí)監(jiān)控應(yīng)用層的命令[14]。當(dāng)測控指令產(chǎn)生,父進(jìn)程交由新建的子進(jìn)程去解決問題,其繼續(xù)監(jiān)聽。由于子進(jìn)程直接調(diào)用了可執(zhí)行代碼,父進(jìn)程不能直接接受數(shù)據(jù)結(jié)果,故以共享內(nèi)存去實(shí)現(xiàn)數(shù)據(jù)信息的交互,同時(shí)以信號(hào)量進(jìn)行讀寫的限制,流程如圖4所示。
統(tǒng)一接口模塊能夠讓應(yīng)用服務(wù)層以統(tǒng)一指令格式對(duì)核心組件層的SNMP客戶端、HISLIP客戶端和DHCP模塊進(jìn)行調(diào)度處理,在Linux操作系統(tǒng)下三個(gè)模塊接口參數(shù)如下:
./snmp_client Instrument_IP OID Command;
./hislip_client Instrument_IP Command;
./dhcpr_client DHCP_SERVER_IP;
參數(shù)說明如下:
Instrument_IP:遠(yuǎn)端儀器代理的IP地址;
OID:SNMP協(xié)議的對(duì)象標(biāo)識(shí)號(hào);
Command:在SNMP客戶端中,SNMP協(xié)議操作:SET、GET、GETNEXT、GETBULK等操作;在HISLIP客戶端中,SCPI表示標(biāo)準(zhǔn)儀器的程控指令;
DHCP_SERVER_IP:表示系統(tǒng)中DHCP服務(wù)器儀器設(shè)備的IP地址;
圖4 后臺(tái)處理服務(wù)總調(diào)度設(shè)計(jì)流程
為了實(shí)現(xiàn)對(duì)模塊接口的統(tǒng)一封裝,同時(shí)基于功能模塊的接口參數(shù)形式,定義命令格式如下:
typedef struct interface
{
int port;
charoid[60];
charip[20];
char command[120];
}interface, *interface;
統(tǒng)一接口模塊程序根據(jù)公共端口號(hào)的不同解析服務(wù)層請(qǐng)求,然后調(diào)用相應(yīng)客戶端。HISLIP客戶端端口號(hào)為4880,SNMP客戶端端口號(hào)為161及DHCP客戶端端口號(hào)為5000,所以本項(xiàng)目采用port參數(shù)作為區(qū)分三者的指標(biāo)參數(shù)。
系統(tǒng)主機(jī)以TCP Socket的形式連接到后臺(tái)總調(diào)度模塊。總調(diào)度模塊接受主機(jī)指令,同時(shí)解析控制指令,根據(jù)解析結(jié)果去確定調(diào)用SNMP協(xié)議客戶端、HISLIP協(xié)議客戶端或DHCP自動(dòng)發(fā)現(xiàn)模塊[15]。后臺(tái)處理服務(wù)總調(diào)度模塊的父進(jìn)程創(chuàng)建子進(jìn)程去執(zhí)行相應(yīng)客戶端請(qǐng)求,將結(jié)果存入共享內(nèi)存后,由信號(hào)量通知主進(jìn)程讀取結(jié)果。其次,主進(jìn)程在讀取數(shù)據(jù)時(shí)通過信號(hào)量防止讀寫競爭。最后,總調(diào)度模塊將結(jié)果通過TCP套接字發(fā)送給系統(tǒng)控制主機(jī),完成主機(jī)對(duì)所需信息的獲取與修改??傉{(diào)度模塊的處理流程如圖5所示。
圖5 后臺(tái)處理模塊的處理過程
后臺(tái)處理服務(wù)總調(diào)度模塊的主進(jìn)程重復(fù)監(jiān)聽從系統(tǒng)控制主機(jī)發(fā)起的連接,當(dāng)連接產(chǎn)生時(shí),父進(jìn)程創(chuàng)建單一子進(jìn)程去處理該請(qǐng)求,子進(jìn)程以Linux的EXECVP系統(tǒng)調(diào)用實(shí)現(xiàn)功能,在進(jìn)程的代碼段載入其對(duì)應(yīng)客戶端的可執(zhí)行文件,同時(shí)后臺(tái)模塊填充EXECVP系統(tǒng)調(diào)用的環(huán)境變量與命令參數(shù),以此方式就可以實(shí)現(xiàn)相應(yīng)客戶端的傳參調(diào)用。
后臺(tái)總調(diào)度模塊的子進(jìn)程調(diào)用EXECVP系統(tǒng)調(diào)用,然后相應(yīng)客戶端程序被對(duì)應(yīng)執(zhí)行。由于子進(jìn)程直接調(diào)用了可執(zhí)行代碼,父進(jìn)程不能直接接受數(shù)據(jù)結(jié)果,故以共享內(nèi)存去實(shí)現(xiàn)數(shù)據(jù)信息的交互。父進(jìn)程首先創(chuàng)建并初始化共享內(nèi)存,然后用信號(hào)量防止進(jìn)程對(duì)共享內(nèi)存的讀寫競爭。共享內(nèi)存有自己的權(quán)限位及擁有者,不受進(jìn)程存在的影響。所有進(jìn)程均可連接到共享內(nèi)存并得到指向該共享內(nèi)存的指針。當(dāng)子進(jìn)程將結(jié)果數(shù)據(jù)寫入共享內(nèi)存時(shí),子進(jìn)程會(huì)用信號(hào)量對(duì)共享內(nèi)存段加鎖,在寫數(shù)據(jù)結(jié)束后釋放鎖。父進(jìn)程讀取共享內(nèi)存時(shí),執(zhí)行相同操作,即對(duì)共享內(nèi)存加鎖,然后等讀數(shù)據(jù)結(jié)束后釋放鎖[16]。最后,將結(jié)果數(shù)據(jù)發(fā)送給系統(tǒng)控制主機(jī),完成數(shù)據(jù)修改、信息獲取。至此,后臺(tái)處理服務(wù)總調(diào)度模塊的功能就可以實(shí)現(xiàn)。
采用control_client模擬應(yīng)用服務(wù)層向后臺(tái)處理模塊control_server下達(dá)調(diào)用HISLIP客戶端的命令請(qǐng)求,control_client的命令:
./control_client 192.168.1.122 192.168.1.232 4880 1.3.6.1.4.1.1199.1.1.1.1.1.1.0 *IDN?DATa?*IDN?*IDN?
其中,192.168.1.122為后臺(tái)模塊系統(tǒng)主機(jī)的IP地址;192.168.1.232為儀器代理的IP地址;4880為HISLIP公共端口號(hào);1.3.6.1.4.1.1199.1.1.1.1.1.1.0為項(xiàng)目上MIB庫節(jié)點(diǎn);*IDN?DATa?*IDN?*IDN?是SCPI指令。
control_client客戶端的運(yùn)行結(jié)果如圖6所示。
圖6 control_client調(diào)用HISLIP客戶端的運(yùn)行結(jié)果
后臺(tái)處理服務(wù)總調(diào)度模塊control_server服務(wù)器在接收到control_client客戶端調(diào)用HISLIP客戶端的任務(wù)指令后執(zhí)行相應(yīng)操作。
后臺(tái)處理服務(wù)總調(diào)度模塊首先分析命令行參數(shù)。其次由統(tǒng)一接口程序根據(jù)接口4880確定調(diào)用HISLIP客戶端,并將HISLIP客戶端的命令行補(bǔ)齊。最后成功調(diào)用HISLIP客戶端服務(wù)。
本章主要對(duì)后臺(tái)處理服務(wù)進(jìn)行測試,由測試結(jié)果可知功能模塊達(dá)到了預(yù)計(jì)需求。
綜上所述,為實(shí)現(xiàn)LXI網(wǎng)絡(luò)測控系統(tǒng)的后臺(tái)處理調(diào)度服務(wù)、提高儀器設(shè)備的使用效益、降低使用成本,以LXI總線標(biāo)準(zhǔn)和特點(diǎn)優(yōu)勢進(jìn)行設(shè)計(jì),將SNMP客戶端、HISLIP客戶端、DHCP客戶端等嵌入到測控系統(tǒng)中,并設(shè)計(jì)實(shí)現(xiàn)了調(diào)用后臺(tái)處理服務(wù)的統(tǒng)一接口程序。LXI網(wǎng)絡(luò)測控系統(tǒng)后臺(tái)處理模塊提高了后臺(tái)與應(yīng)用服務(wù)層、儀器設(shè)備層的傳輸效率,增加了系統(tǒng)的實(shí)時(shí)性和完備性,設(shè)計(jì)實(shí)現(xiàn)了LXI總線標(biāo)準(zhǔn)規(guī)范的網(wǎng)絡(luò)測控系統(tǒng)的核心組件層,對(duì)項(xiàng)目發(fā)展有積極意義。而且,該項(xiàng)目已被驗(yàn)收,運(yùn)行正常,達(dá)到了項(xiàng)目預(yù)期目標(biāo)。