冉凡輝,鄧 輝,梁 波,王 鋒,衛(wèi)守林,季凱帆
(昆明理工大學(xué) 云南省計(jì)算機(jī)技術(shù)應(yīng)用重點(diǎn)實(shí)驗(yàn)室,云南 昆明 650500)
基于XML-RPC的RTS2自主觀測(cè)系統(tǒng)遠(yuǎn)程訪問(wèn)技術(shù)*
冉凡輝,鄧 輝,梁 波,王 鋒,衛(wèi)守林,季凱帆
(昆明理工大學(xué) 云南省計(jì)算機(jī)技術(shù)應(yīng)用重點(diǎn)實(shí)驗(yàn)室,云南 昆明 650500)
自主觀測(cè)軟件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)是天文望遠(yuǎn)鏡自主觀測(cè)的核心,近年來(lái)已經(jīng)成為天文技術(shù)研究中的一個(gè)重要方向。在當(dāng)前可用的自主觀測(cè)系統(tǒng)中,遠(yuǎn)程望遠(yuǎn)鏡系統(tǒng)第2版(Remote Telescope System 2nd version, RTS2)擁有較多優(yōu)勢(shì)從而成為國(guó)內(nèi)天文技術(shù)界較為關(guān)注的系統(tǒng)之一。針對(duì)RTS2不提供遠(yuǎn)程訪問(wèn)控制功能的問(wèn)題,深入分析RTS2中利用XML-RPC技術(shù)實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)和功能調(diào)用的機(jī)制,實(shí)現(xiàn)了一個(gè)基于XML-RPC的望遠(yuǎn)鏡自動(dòng)控制終端系統(tǒng)原型,在不更改RTS2核心代碼的基礎(chǔ)上,通過(guò)其服務(wù)層提供的XML-RPC接口實(shí)現(xiàn)RTS2的應(yīng)用擴(kuò)展,并為后續(xù)工作中集成利用RTS2奠定了基礎(chǔ)。
XML-RPC;RTS2;自主觀測(cè)
遠(yuǎn)程望遠(yuǎn)鏡系統(tǒng)第2版[1]是一個(gè)天文望遠(yuǎn)鏡自主觀測(cè)軟件系統(tǒng),是遠(yuǎn)程望遠(yuǎn)鏡系統(tǒng)[2]的進(jìn)一步發(fā)展,目的是實(shí)現(xiàn)全自主的天文觀測(cè)。RTS2系統(tǒng)在Linux下開發(fā)并運(yùn)行,優(yōu)點(diǎn)較為明顯:(1)系統(tǒng)運(yùn)行穩(wěn)定;(2)系統(tǒng)響應(yīng)快;(3)有開放源碼利于實(shí)現(xiàn)系統(tǒng)擴(kuò)展和進(jìn)一步的開發(fā)。
國(guó)內(nèi)在遠(yuǎn)程控制方面已經(jīng)有一些研究工作,如在WEB界面中實(shí)現(xiàn)了對(duì)望遠(yuǎn)鏡的遠(yuǎn)程控制[3-4]。RTS2作為一個(gè)相對(duì)成熟的自主控制軟件系統(tǒng),支持大量的天文觀測(cè)設(shè)備,包括望遠(yuǎn)鏡系統(tǒng)、CCD系統(tǒng)、自動(dòng)對(duì)焦器等,直接利用RTS2可以簡(jiǎn)化系統(tǒng)開發(fā)工作量的同時(shí)保證系統(tǒng)的穩(wěn)定性。然而,盡管目前商用的RTS3中有遠(yuǎn)程系統(tǒng)控制功能,但是開源的RTS2系統(tǒng)只提供了一個(gè)基于文本終端的命令行方式的操作界面,不能滿足望遠(yuǎn)鏡遠(yuǎn)程控制的需求。
本文正是在這樣的背景下開展相應(yīng)的研究工作,通過(guò)分析RTS2的XML-RPC接口,掌握RTS2系統(tǒng)中XML-RPC接口的調(diào)用方法,通過(guò)改進(jìn)的XML-RPC接口,實(shí)現(xiàn)RTS2管理下的各類設(shè)備狀態(tài)參數(shù)獲取以及功能調(diào)用,使得通過(guò)WEB或移動(dòng)手機(jī)界面對(duì)RTS2系統(tǒng)進(jìn)行操作成為可能。
遠(yuǎn)程過(guò)程調(diào)用(Remote Procedure Call, RPC)是一種在本地機(jī)器上調(diào)用遠(yuǎn)端機(jī)器上的一個(gè)過(guò)程(方法)的技術(shù)。遠(yuǎn)程過(guò)程調(diào)用系統(tǒng)包括2部分:一是遠(yuǎn)程過(guò)程調(diào)用客戶端,用來(lái)向遠(yuǎn)程過(guò)程調(diào)用服務(wù)器發(fā)出調(diào)用請(qǐng)求,并接收方法的返回?cái)?shù)據(jù);另一個(gè)是遠(yuǎn)程過(guò)程調(diào)用服務(wù)器,用于響應(yīng)遠(yuǎn)程過(guò)程調(diào)用客戶端的請(qǐng)求,執(zhí)行相應(yīng)的方法(Method),并回送執(zhí)行結(jié)果。
XML-RPC是一種網(wǎng)絡(luò)編程接口定義規(guī)范,以XML封裝并通過(guò)HTTP協(xié)議進(jìn)行傳輸, XML-RPC的實(shí)現(xiàn)是基于HTTP 的POST和GET 方法,傳輸數(shù)據(jù)流遵循HTTP格式??蛻舳丝梢灾付繕?biāo)服務(wù)器,將XML數(shù)據(jù),包括目標(biāo)方法和參數(shù),傳遞給服務(wù)器;目標(biāo)服務(wù)器通過(guò)XML-RPC接口得到XML 數(shù)據(jù),處理后將結(jié)果以同樣的方式生成XML格式的報(bào)文返回客戶端。XML-RPC不受限于計(jì)算機(jī)平臺(tái)和操作系統(tǒng),任何一種支持HTTP協(xié)議的編程語(yǔ)言都可以支持XML-RPC編程[3]。XML-RPC工作原理如圖1。
圖1 XML-RPC工作原理圖
Fig.1 Block diagram of the XML-RPC
客戶端發(fā)出連接申請(qǐng),服務(wù)端響應(yīng)客戶端的請(qǐng)求,建立連接??蛻舳税延脩粢缶幋a成XML格式傳輸服務(wù)端,服務(wù)端調(diào)用已注冊(cè)方法(Method)對(duì)所接收的命令進(jìn)行處理,并把處理結(jié)果以XML格式返回客戶端,客戶端解碼,并把結(jié)果送給用戶[4]。
數(shù)據(jù)的傳輸主要是方法名字和參數(shù)的輸入和結(jié)果輸出,格式為XML格式??蛻舳税l(fā)送請(qǐng)求時(shí)傳遞的XML格式報(bào)文包括請(qǐng)求報(bào)頭和請(qǐng)求報(bào)文,報(bào)頭中包括消息格式(text/xml)和消息長(zhǎng)度,有的也會(huì)有XML版本。
請(qǐng)求報(bào)文中必須包含有
方法名
如果需要傳遞參數(shù),則在
<數(shù)據(jù)類型>
參數(shù)值
數(shù)據(jù)類型>
參數(shù)的數(shù)據(jù)類型包括整形(int)、字符串(string)、邏輯型(boolean)、數(shù)組(array)、結(jié)構(gòu)體(struct)等。
服務(wù)端響應(yīng)的消息包括響應(yīng)報(bào)頭和報(bào)文,響應(yīng)報(bào)頭和請(qǐng)求報(bào)頭一樣,響應(yīng)報(bào)文中一定要有
。
其中,faultCode的值是整型,代表錯(cuò)誤的代碼;faultString的值是字符串型,代表錯(cuò)誤的原因。
RTS2采用層狀結(jié)構(gòu)[5],共4層。第1層是中控層,提供系統(tǒng)中所有可用的設(shè)備與服務(wù)列表、系統(tǒng)狀態(tài)改變和各設(shè)備的同步;第2層是設(shè)備層,實(shí)現(xiàn)與各個(gè)硬件的連接,針對(duì)不同的設(shè)備提供不同的類;第3層是服務(wù)層,包括系統(tǒng)的執(zhí)行邏輯,提供對(duì)最終用戶的各類功能,獲得其他預(yù)報(bào)源(如伽馬暴預(yù)報(bào))的數(shù)據(jù),實(shí)現(xiàn)XML-RPC的訪問(wèn);第4層是客戶層,一般工作在交互模式,通過(guò)交互終端或者簡(jiǎn)單工具實(shí)現(xiàn)觀測(cè)腳本。
在此基礎(chǔ)上,對(duì)RTS2系統(tǒng)的應(yīng)用擴(kuò)展無(wú)疑可以有多種方法,其中較為便捷的做法是在完全不改變RTS2結(jié)構(gòu)的前提下,通過(guò)服務(wù)層提供的XML-RPC,實(shí)現(xiàn)對(duì)RTS2各方法的調(diào)用,讀取相應(yīng)的設(shè)備參數(shù)與狀態(tài),并通過(guò)XML-RPC寫入需要控制的設(shè)備參數(shù)。這種方法是本文討論的重點(diǎn)。
在RTS2中XML-RPC的實(shí)現(xiàn)主要通過(guò)調(diào)用XML-RPCD進(jìn)程。構(gòu)造函數(shù)XML-RPCD繼承于Device 和XML-RPCServer,作為一個(gè)后臺(tái)程序(Daemon),與其它設(shè)備后臺(tái)守護(hù)進(jìn)程交互,獲得各設(shè)備的狀態(tài),實(shí)現(xiàn)對(duì)各設(shè)備的控制,如觀測(cè)腳本的啟動(dòng)和執(zhí)行情況等;同時(shí),XML-RPCD自身又是RTS2的一個(gè)可被調(diào)用的服務(wù),能被RTS2-MON這一類的RTS2用戶界面程序所調(diào)用。XML-RPCD采用8889端口,外部可以通過(guò)HTTP協(xié)議進(jìn)行訪問(wèn),也可以通過(guò)標(biāo)準(zhǔn)的XML-RPC的進(jìn)行訪問(wèn)。XML-RPCD的基本流程如圖2。
圖2 XML-RPCD流程圖
Fig.2 Flowchart of the XML-RPCD
(1) 流程中,XML-RPCD通過(guò)套接通信與HTTP協(xié)議讀取客戶端數(shù)據(jù),從客戶端傳遞的數(shù)據(jù)先封裝成XML的格式,如rts2.devices.list方法,封裝的格式是
(2)RTS2中定義的方法需要在XMLRPCAPI中有具體的方法實(shí)現(xiàn)過(guò)程,同時(shí)這些方法已經(jīng)在XML-RPCD中注冊(cè)。
(3)服務(wù)端根據(jù)客戶端請(qǐng)求的方法和參數(shù),調(diào)用相應(yīng)的功能,執(zhí)行完后返回的數(shù)據(jù)是XML格式。如DeviceCount方法,返回的結(jié)果是設(shè)備個(gè)數(shù),封裝成的XML格式為
要實(shí)現(xiàn)外部對(duì)RTS2的訪問(wèn),關(guān)鍵在于利用RTS2提供的XML-RPC訪問(wèn)接口,獲得RTS2的各種狀態(tài),并通過(guò)相應(yīng)命令,實(shí)現(xiàn)對(duì)各類設(shè)備的控制。表1列出了RTS2提供的用戶訪問(wèn)接口方法。
表1 RTS2提供的接口Table 1 The interfaces supported by the RTS2
客戶端通過(guò)XML-RPC協(xié)議,實(shí)現(xiàn)對(duì)RTS2的訪問(wèn),具體的流程如圖3。
(1)客戶端與服務(wù)器建立連接后,遠(yuǎn)程調(diào)用rts2.user.login方法,bool verifyUser()函數(shù)進(jìn)行響應(yīng)處理,通過(guò)返回的結(jié)果判斷登錄是否成功(“0”失敗,“1”成功)。
(2)調(diào)用rts2.devices.list方法。由類XMLRPCD定義的對(duì)象getMasterApp(),并由其下面的構(gòu)造函數(shù)getConnections()獲取當(dāng)前正在工作的設(shè)備名,然后以設(shè)備名為參數(shù),調(diào)用rts2.devices.values.list方法,在服務(wù)端調(diào)用構(gòu)造函數(shù)connectionValuesToXmlRpc()獲得設(shè)備工作參數(shù),如望遠(yuǎn)鏡當(dāng)前轉(zhuǎn)動(dòng)阻塞狀態(tài),CCD腳本執(zhí)行狀態(tài)等等。
(3)調(diào)用rts2.device.command方法,由設(shè)備名字和命令作為參數(shù),在服務(wù)端由類Connect下的構(gòu)造函數(shù)getOpenConnection(),檢查設(shè)備是否處在連通狀態(tài),如果是,再調(diào)用構(gòu)造函數(shù)queCommand(),對(duì)參數(shù)中指定設(shè)備根據(jù)命令進(jìn)行相應(yīng)操作。
基于上述討論,在Windows操作系統(tǒng)下,利用開源的xmlrpc++庫(kù)[6],以C++為開發(fā)語(yǔ)言,實(shí)現(xiàn)了一套基于RTS2的望遠(yuǎn)鏡系統(tǒng)狀態(tài)數(shù)據(jù)采集和控制終端系統(tǒng)原型,系統(tǒng)使用一臺(tái)Meade LX200GPS望遠(yuǎn)鏡[7]。客戶端界面如圖4。
圖3 客戶端訪問(wèn)流程Fig.3 Flowchart of the calling of the RST2 by a client
圖4 客戶端界面Fig.4 The client interface
通過(guò)客戶端界面輸入RTS2的IP地址和端口并執(zhí)行“連接”功能,獲得所有設(shè)備目錄(圖4中的設(shè)備列表)。選擇一個(gè)設(shè)備,比如“T0”,該設(shè)備的各種參數(shù)顯示在圖5設(shè)備狀態(tài)列表框中。輸入該設(shè)備所支持的一條命令,如圖4命令框中的“move 20∶00∶00.000 30∶00∶00.000”,點(diǎn)擊“發(fā)送”,實(shí)現(xiàn)望遠(yuǎn)鏡的轉(zhuǎn)動(dòng)控制。服務(wù)端響應(yīng)如圖5。
圖5 服務(wù)端響應(yīng)客戶端請(qǐng)求
Fig.5 A sample of response of the server to a connection requirement from a client
主要代碼如下:
port=GetDlgItemInt(IDC_EDIT1); //獲得端口號(hào)
GetDlgItem(IDC_EDIT2)->GetWindowText(ip,16); //獲得ip;
const char*uri=NULL;
XmlRpc∷XmlRpcClient c(server, port, uri); //定義客戶端
XmlRpc∷XmlRpcValue params, result; //定義數(shù)據(jù)類型
CString s;
GetDlgItem(IDC_EDIT10)->GetWindowText(s); //獲得設(shè)備命令
string s0(s.GetBuffer()); //數(shù)據(jù)類型轉(zhuǎn)換
CString s1;
((CComboBox*)GetDlgItem(IDC_COMBO))->GetWindowText(s1); //獲得設(shè)備名
string s2(s1.GetBuffer()); //數(shù)據(jù)類型轉(zhuǎn)換
params[0]=s2; //設(shè)備名
params[1]=s0; //命令
c1.execute("rts2.device.command", params, result); //客戶端發(fā)送命令給服務(wù)端
原型系統(tǒng)測(cè)試表明,以RTS2為基礎(chǔ)核心,采用XML-RPC方式,可以較快地對(duì)RTS2進(jìn)行功能擴(kuò)展,快速構(gòu)建滿足天文遠(yuǎn)程自主觀測(cè)需求的用戶終端軟件系統(tǒng)。
自主觀測(cè)軟件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)是天文望遠(yuǎn)鏡自主觀測(cè)的核心,近幾年已經(jīng)成為天文技術(shù)研究中的一個(gè)重要方向。在當(dāng)前可用的自主觀測(cè)系統(tǒng)中,RTS2系統(tǒng)因?yàn)槠浜诵牟糠珠_源,已經(jīng)有諸多實(shí)際應(yīng)用,特別是已經(jīng)成功應(yīng)用于Bootes[8],成為國(guó)內(nèi)天文技術(shù)界較為關(guān)注的系統(tǒng)之一。
本文深入分析RTS2中XML-RPC的數(shù)據(jù)訪問(wèn)和功能調(diào)用接口,實(shí)現(xiàn)了一個(gè)基于XML-RPC的望遠(yuǎn)鏡自動(dòng)控制終端系統(tǒng)原型。在不更改RTS2核心代碼的基礎(chǔ)上,通過(guò)服務(wù)層提供的XML-RPC接口,可以快速實(shí)現(xiàn)RTS2的應(yīng)用擴(kuò)展,為后續(xù)工作中集成利用RTS2奠定了基礎(chǔ)。
[1] Remote Telescope System-2nd version[EB/OL]. [2012-11-20]. http://rts2.org/.
[2] Petr Kubánek. RTS2—the remote telescope system[J]. Advances in Astronomy, 2010: 1005-1014.
[3] 諶俊毅, 陳東, 范玉峰, 等. 基于網(wǎng)絡(luò)的望遠(yuǎn)鏡遠(yuǎn)程控制實(shí)驗(yàn)[J]. 天文研究與技術(shù)——國(guó)家天文臺(tái)臺(tái)刊, 2007, 4(1): 36-41.
Chen Junyi, Chen Dong, Fan Yufeng, et al. The remote control experiment of the telescope based on the embedded internet[J]. Astronomical Research & Technology——Publications of National Astronomical Observatories of China, 2007, 4(1): 36-41.
[4] 許駿, 金振字. Windows Sockets實(shí)現(xiàn)天文終端的遠(yuǎn)程控制[J]. 天文研究與技術(shù)——國(guó)家天文臺(tái)臺(tái)刊, 2001(1): 40-46.
Xu Jun, Jin Zhenyu. Remote control of astronomical terminals based on WinSockets[J]. Astronomical Research & Technology——Publications of National Astronomical Observatories of China, 2001(1): 40-46.
[5] Petr Kubánek, Martin Jelínek, Stanislav Vítek, et al. The RTS2 protocol[C]//Proceedings of SPIE, 2008, 70192S: 92-103.
[6] Xml-RPC for C and C++[EB/OL]. [2012-11-20]. http://xmlrpc-c.sourceforge.net/.
[7] David Suder. Software and hardware autoguiding issues with the LX200GPS[M/OL]. [2012-11-20]. http://www.pdfio.com/k-1465698.html.
[8] BOOTES: Burst Optical Observer and Transient Exploring[EB/OL]. [2012-11-20]. http://bootes.iaa.es/.
AStudyofRemoteAccessTechniquesforAnRTS2AutonomousObservationSoftwareSystemBasedontheXML-RPC
Ran Fanhui, Deng Hui, Liang Bo, Wang Feng, Wei Shoulin, Ji Kaifan
(Key Lab of Applications of Computer Technology of the Yunnan Province, University of Science and Technology of Kunming, Kunming 650500, China, Email: dh@cnlab.net)
An autonomous observation software system is a key component in modern autonomous astronomical telescope observation, which has been an important new research direction of astronomical technologies in recent years. Among established autonomous observation software systems, the RTS2 has a variety of advantages and has
relatively more attention. However, the RTS2 does not provide any function for remote access and control. In this paper, we have an in-depth study on installing in an RTS2 system function callings and data-access interfaces based on the XML-RPC technology. We provide a prototype of a terminal system for autonomous telescope control based on the XML-RPC. We present the details of the source codes including descriptions of interface functions and interface parameters. Our experimental results show that the XML-RPC based methods are simple for expanding the applications of an RTS2 system. These methods could also be helpful for further development of autonomous observation systems.
XML-RPC; RTS2; Autonomous observation
CN53-1189/PISSN1672-7673
TP311.11
A
1672-7673(2013)04-0372-06
國(guó)家自然科學(xué)基金 (11203011) 資助.
2012-11-20;修定日期:2012-12-21
冉凡輝,男,碩士. 研究方向:天文技術(shù)與方法. Email: rff@cnlab.net
鄧 輝,女,教授. 研究方向:計(jì)算機(jī)應(yīng)用技術(shù). Email: dh@cnlab.net