衛(wèi)守林,陳亞杰,梁 波,王 鋒,鄧 輝,戴 偉,曹子皇
(1.昆明理工大學(xué)云南省計(jì)算機(jī)技術(shù)應(yīng)用重點(diǎn)實(shí)驗(yàn)室,云南 昆明 650500;2.中國(guó)科學(xué)院云南天文臺(tái),云南 昆明 650011)
RTS2中新CCD類型擴(kuò)展方法
衛(wèi)守林1,陳亞杰1,梁 波1,王 鋒1,鄧 輝1,戴 偉1,曹子皇2
(1.昆明理工大學(xué)云南省計(jì)算機(jī)技術(shù)應(yīng)用重點(diǎn)實(shí)驗(yàn)室,云南 昆明 650500;2.中國(guó)科學(xué)院云南天文臺(tái),云南 昆明 650011)
CCD是天文望遠(yuǎn)鏡中最常見的觀測(cè)終端設(shè)備,也是望遠(yuǎn)鏡自主控制系統(tǒng)中的重要組成部分。隨著天文望遠(yuǎn)鏡自主觀測(cè)需求的不斷出現(xiàn)以及技術(shù)的快速發(fā)展,開源的RTS2軟件系統(tǒng)成為目前該領(lǐng)域研究中受到較多關(guān)注的系統(tǒng)之一。但RTS2支持的CCD設(shè)備較為有限,同時(shí)控制接口約定也相對(duì)固定。在針對(duì)部分特殊的CCD設(shè)備(如LAMOST中采用的32臺(tái)CCD設(shè)備、選址用的部分CCD設(shè)備)時(shí),僅實(shí)現(xiàn)原有類的方法是不夠的。在深入分析RTS2源碼的基礎(chǔ)上,重點(diǎn)從參數(shù)、命令、協(xié)議擴(kuò)展方面研究基于原有的Camera類,通過(guò)繼承的方法構(gòu)造新的CCD類型,實(shí)現(xiàn)對(duì)LAMOST項(xiàng)目的CCD控制,取得了較好的效果,對(duì)在RTS2中集成望遠(yuǎn)鏡系統(tǒng)其他類型設(shè)備也有較好的參考價(jià)值。
遠(yuǎn)程控制;RTS2;CCD;擴(kuò)展
CN53-1189/P ISSN1672-7673
遠(yuǎn)程望遠(yuǎn)鏡系統(tǒng)第2版[1](Remote Telescope System 2nd version,RTS2)是一個(gè)開放源碼的天文望遠(yuǎn)鏡自主觀測(cè)軟件系統(tǒng),采用面向?qū)ο蟮腃++開發(fā),具有良好的模塊化設(shè)計(jì),組件之間的通信基于傳輸控制協(xié)議(Transmission Control Protocol,TCP),在分布式組件部署情況下能夠支持多CCD的集群控制[2]。
RTS2已經(jīng)可以支持諸多的設(shè)備或模塊,實(shí)現(xiàn)多種儀器設(shè)備如圓頂、望遠(yuǎn)鏡、CCD的控制。在網(wǎng)址http://www.rts2.org/wiki/hw.start中可以查看RTS2目前支持的設(shè)備。從CCD設(shè)備來(lái)看,當(dāng)前主要支持的CCD設(shè)備包含了SBIG、Andor、Apogee等十多種類型,顯而易見,針對(duì)國(guó)內(nèi)的天文望遠(yuǎn)鏡諸如LAMOST、NVSTFAST等配置的大型望遠(yuǎn)鏡的科學(xué)級(jí)CCD的控制需要,是RTS2當(dāng)前無(wú)法支持的。由于控制的復(fù)雜性,RTS2中的CCD控制基類只提供了基礎(chǔ)的控制實(shí)現(xiàn),滿足不了實(shí)際觀測(cè)與CCD控制的要求。
本文正是在這樣的背景下開展相應(yīng)的研究工作,在分析RTS2中CCD構(gòu)建的基礎(chǔ)上,重點(diǎn)研究RTS2繼承和擴(kuò)展新設(shè)備的方法,并以LAMOST CCD開發(fā)為例,從參數(shù)擴(kuò)展、自定義方法、協(xié)議擴(kuò)展幾方面探討基于RTS2的CCD控制擴(kuò)展技術(shù)。
RTS2體系中服務(wù)和設(shè)備是以組件的形式進(jìn)行封裝,對(duì)程序可擴(kuò)展性進(jìn)行了較完善的考慮。所有的組件和服務(wù)都可以通過(guò)配置文件中進(jìn)行配置,可以在任何時(shí)候開始工作、重啟或者停止,在這過(guò)程中不會(huì)影響系統(tǒng)其他模塊的使用。RTS2需要運(yùn)行在Linux環(huán)境下,可進(jìn)行分布式的部署,至少需要部署一個(gè)中心控制程序(CentralD),也可以部署多個(gè)中心控制程序。在每個(gè)中心控制程序中維護(hù)著系統(tǒng)中所有的設(shè)備連接、客戶端連接和服務(wù)連接,針對(duì)每一臺(tái)天文觀測(cè)設(shè)備都有一個(gè)后臺(tái)管理進(jìn)程??蛻舳顺绦蚧蛘逺TS2本身提供的一些工具類,首先通過(guò)中心控制程序找到設(shè)備的地址,通過(guò)這個(gè)地址雙方建立Socket連接進(jìn)行通信、接收或發(fā)送相應(yīng)的數(shù)據(jù)[3]。
在RTS2的代碼體系結(jié)構(gòu)中,所有的對(duì)象都繼承于rts2core∷Object,在該基類中只是提供了postEvent事件提交的方法,所有的設(shè)備驅(qū)動(dòng)都是繼承于rts2core∷Device,并且作為守護(hù)程序運(yùn)行,像rts2core∷Telescope是望遠(yuǎn)鏡設(shè)備的基礎(chǔ)類,rts2core∷Camera是CCD相機(jī)設(shè)備的基礎(chǔ)類。在這些設(shè)備的基礎(chǔ)類中只是提供了設(shè)備的基本操作的框架,而針對(duì)特定一款新設(shè)備的驅(qū)動(dòng)就需要繼承這些設(shè)備類并實(shí)現(xiàn)框架中的方法[4]。在RTS2的設(shè)計(jì)中,還特別考慮了所有可能的阻塞(Blocking)狀態(tài),以此確保系統(tǒng)內(nèi)的設(shè)備可以協(xié)調(diào)完成觀測(cè)任務(wù)。
RTS2中CCD的所有設(shè)備都繼承自rts2core∷Camera(在camd.h和camd.cpp中定義),在Camera的實(shí)現(xiàn)中大量使用虛函數(shù),不同的功能分別在不同層次的基類中實(shí)現(xiàn),設(shè)計(jì)中較少采用多重繼承的方法,所以源碼結(jié)構(gòu)相對(duì)清晰易讀。實(shí)現(xiàn)新CCD類型的控制就需要繼承rts2core∷Camera類,rts2core∷Camera類及其父類都在rts2core的命名空間下,圖1是RTS2中Camera類的繼承關(guān)系。
圖1 RTS2中Camera類的繼承關(guān)系Fig.1 The heritage relations of the Class Camera in the RTS2
基類App中主要定義作為應(yīng)用所需要處理的命令行參數(shù)的解析、初始化和幫助提示的工作?;怋lock負(fù)責(zé)維護(hù)網(wǎng)絡(luò)連接、定時(shí)器等。基類Daemon主要負(fù)責(zé)初始化守護(hù)進(jìn)程、創(chuàng)建網(wǎng)絡(luò)監(jiān)聽、接收客戶端的連接?;怐evice作為所有設(shè)備的基類,主要進(jìn)行設(shè)備層的初始化工作,對(duì)CCD曝光、望遠(yuǎn)鏡移動(dòng)、數(shù)據(jù)讀出等阻塞狀態(tài)進(jìn)行設(shè)置?;怱criptDevice是對(duì)設(shè)備當(dāng)前運(yùn)行的腳本進(jìn)行處理。基類Camera是對(duì)CCD基本操作的封裝,包含了曝光命令、溫度設(shè)置等一系列操作。
在Camera類中,使用虛函數(shù)的方式定義了CCD相機(jī)的基本控制的方法。為了將新類型的CCD設(shè)備集成到RTS2體系中,需要對(duì)參數(shù)設(shè)置、初始化、命令行處理等多個(gè)部分的函數(shù)進(jìn)行重寫。下面對(duì)在新類型CCD擴(kuò)展中需要重寫的關(guān)鍵函數(shù)進(jìn)行說(shuō)明。
info():在收到info命令后觸發(fā)該函數(shù),收集設(shè)備的相關(guān)信息,并將信息發(fā)送到請(qǐng)求端。在新類型設(shè)備中可以設(shè)置需要發(fā)送給請(qǐng)求端的信息。在Camera和Daemon類中都有定義。
idle():在oneRunLoop函數(shù)中調(diào)用,在程序運(yùn)行期間,oneRunLoop被無(wú)限次循環(huán)執(zhí)行,idle函數(shù)主要完成定時(shí)器清除工作,將連接從預(yù)備隊(duì)列移動(dòng)到正式連接隊(duì)列,依次執(zhí)行連接上的idle函數(shù)。在Camera類中的idle函數(shù)檢查CCD曝光狀態(tài)和數(shù)據(jù)讀出。在新類型的CCD設(shè)備中可以根據(jù)CCD的曝光機(jī)制和數(shù)據(jù)讀出機(jī)制,重寫idle函數(shù)。
processOption():程序執(zhí)行時(shí)命令行參數(shù)解析處理函數(shù),通過(guò)重寫processOption函數(shù),增加新設(shè)備的命令行參數(shù)。在基類App、Daemon、Camera和Device類中有定義。
init():初始化函數(shù),完成設(shè)備在RTS2體系中網(wǎng)絡(luò)注冊(cè)、參數(shù)初始化操作,調(diào)用initHardware完成設(shè)備硬件的初始化工作。如自定義設(shè)備使用USB連接,可以重寫該函數(shù),完成對(duì)USB接口的初始化連接工作。
startExposure():開始曝光的函數(shù),在Camera類中被定義為純虛函數(shù),在自定義的設(shè)備類中是必需重寫的。在執(zhí)行該函數(shù)前會(huì)調(diào)用camStartExposure進(jìn)行曝光條件的檢查,如設(shè)備是否正在曝光,對(duì)焦器是否正在移動(dòng),滿足曝光條件才能執(zhí)行該函數(shù)。
isExposing():重寫該函數(shù)返回,返回-2表示已經(jīng)曝光結(jié)束,返回其他大于0的值,表示距離曝光結(jié)束還有多少毫秒。
endExposure():當(dāng)前曝光結(jié)束時(shí)調(diào)用該函數(shù),開始讀取數(shù)據(jù),將圖像數(shù)據(jù)存儲(chǔ)在文件系統(tǒng)中。
stopExposure():停止曝光函數(shù),將曝光隊(duì)列清空。通知所有的連接曝光已停止,在endExposure ()函數(shù)中調(diào)用,或者收到stopexpo命令時(shí)觸發(fā)。
readoutStart():準(zhǔn)備開始讀取數(shù)據(jù),調(diào)用sendFirstLine函數(shù)設(shè)置圖像頭信息,在camReadout中被調(diào)用,在自定義CCD實(shí)現(xiàn)中,可以設(shè)置數(shù)據(jù)讀取前的初始化工作。
doReadout():讀取數(shù)據(jù)函數(shù),在Camera中是以純虛函數(shù)形式聲明,所以自定義CCD中必需實(shí)現(xiàn),通常是先調(diào)用markReadoutStart表示開始讀取,讀取數(shù)據(jù),然后調(diào)用sendReadoutData函數(shù)將數(shù)據(jù)發(fā)送出去。doReadout在checkReadouts函數(shù)中被調(diào)用。
endReadout():結(jié)束數(shù)據(jù)讀取,在checkReadouts函數(shù)中被調(diào)用,也是周期性地被調(diào)用,主要工作是對(duì)數(shù)據(jù)的清理,如果曝光隊(duì)列中還有等待命令,則會(huì)調(diào)用camExpose繼續(xù)曝光。自定義CCD中通常需要做一些資源釋放的操作。
setValue():設(shè)置設(shè)備參數(shù)值,通過(guò)客戶端或網(wǎng)絡(luò)連接可以設(shè)置設(shè)備的參數(shù)值,如曝光時(shí)間、溫度等,對(duì)于特定設(shè)備的參數(shù),可以重寫該函數(shù)完成參數(shù)的修改,通過(guò)網(wǎng)絡(luò)協(xié)議“X”關(guān)鍵字可以修改參數(shù)。
在RTS2中,CCD組件的擴(kuò)展主要是構(gòu)建CCD的設(shè)備層的控制程序,包括了對(duì)CCD參數(shù)的擴(kuò)展和對(duì)設(shè)備一系列操作的重寫,如開始曝光、停止曝光、判斷是否在曝光、開始讀數(shù)據(jù)、結(jié)束讀數(shù)據(jù)、讀取數(shù)據(jù)等。接下來(lái)從LAMOST CCD參數(shù)擴(kuò)展、自定義方法、協(xié)議擴(kuò)展幾方面探討基于RTS2的CCD控制擴(kuò)展。
2.1 CCD參數(shù)擴(kuò)展
在Camera中已經(jīng)定義了相機(jī)的基本參數(shù),比如芯片類型、曝光時(shí)間、讀出時(shí)間等參數(shù)。但針對(duì)特定的CCD,還需要定義該CCD專有的參數(shù),在LAMOST CCD類中,需要定義該設(shè)備特有的參數(shù)如讀出速率,讀出方式,紅、藍(lán)相機(jī)同步等參數(shù),參數(shù)的類型需要使用Value的繼承類(在value.h和value.cpp中定義),包含了字符串、整型、時(shí)間日期、浮點(diǎn)型、布爾型、列表選擇類型及天文中特有的方位角和高度值。如LAMOST項(xiàng)目中的CCD相機(jī)中增益的參數(shù)擴(kuò)展可以增加如下變量:
在類的構(gòu)造方法中完成參數(shù)值的默認(rèn)設(shè)置,可以調(diào)用父類Daemon中的createValue函數(shù)完成。在每個(gè)設(shè)備中都維護(hù)著一個(gè)類型為CondValueVector的參數(shù)列表,createValue函數(shù)對(duì)參數(shù)進(jìn)行初始值的設(shè)置并加入該列表中。每一個(gè)參數(shù)值可以包含以下幾個(gè)或多個(gè)狀態(tài)值:
RTS2_VALUE_FITS:是否將參數(shù)寫到FITS文件中。
RTS2_VALUE_AUTOSAVE:是否自動(dòng)保存。
RTS2_VALUE_NEED_SEND:是否被在infoAll函數(shù)中發(fā)送。
RTS2_VALUE_WRITABLE:設(shè)置參數(shù)值是否可以被修改。
2.2 函數(shù)重寫與實(shí)現(xiàn)
RTS2中對(duì)CCD的關(guān)鍵操作包含了對(duì)CCD的參數(shù)設(shè)置、曝光命令的解析、數(shù)據(jù)讀出等操作。其中曝光命令的執(zhí)行最為關(guān)鍵,本節(jié)以曝光命令的解析為例說(shuō)明新類型CCD對(duì)父類函數(shù)重寫的方法。
在RTS2中對(duì)曝光命令的處理是在commandAuthorized()函數(shù)中。請(qǐng)求端發(fā)送的命令首先在Connection對(duì)象的processLine函數(shù)中進(jìn)行解析,如果無(wú)法解析則會(huì)調(diào)用command函數(shù),最后再調(diào)用commandAuthorized()函數(shù)進(jìn)行解析,如系統(tǒng)中的命令無(wú)法滿足新類型設(shè)備的需求,可以通過(guò)重寫該函數(shù)完成自定義命令的實(shí)現(xiàn)。如下代碼為L(zhǎng)AMOST CCD控制中該函數(shù)處理曝光命令的部分代碼。
在上段代碼中,首先判斷當(dāng)前命令是否是曝光命令,如果是,判斷參數(shù)的個(gè)數(shù),緊接著判斷CCD到UCAM的網(wǎng)絡(luò)連接的狀態(tài),如果是連接的狀態(tài),則將命令轉(zhuǎn)發(fā)到UCAM的命令控制器中。如果在該函數(shù)中沒有滿足條件的命令關(guān)鍵字的解析過(guò)程,則調(diào)用Camera父類中commandAuthorized函數(shù)進(jìn)行命令解析。
2.3 協(xié)議擴(kuò)展
RTS2中各個(gè)組件間的通信是使用基于文本的傳輸控制協(xié)議[5]。通信兩端建立連接后,兩端是對(duì)等的,同時(shí)處理來(lái)自對(duì)方的請(qǐng)求和發(fā)送請(qǐng)求到對(duì)方。CCD設(shè)備進(jìn)程啟動(dòng)后建立動(dòng)態(tài)監(jiān)聽端口,同時(shí)建立和中央監(jiān)控程序CentralD(默認(rèn)端口為617)的連接,同時(shí)向CentralD發(fā)送注冊(cè)命令,注冊(cè)成功后設(shè)備的連接信息將保存在CentralD對(duì)象中,并且所有設(shè)備的網(wǎng)絡(luò)地址信息都在CentralD中進(jìn)行注冊(cè)維護(hù)。設(shè)備到CentralD的連接定義為DevConnectionMaster,CentralD到設(shè)備的連接類型為Rts2ConnCentralD,兩者的通信過(guò)程如圖2。
客戶端(如rts2-mon)啟動(dòng)后首先和CentralD建立連接,發(fā)送登錄命令到CentralD,CentralD會(huì)將注冊(cè)過(guò)的設(shè)備信息發(fā)送到客戶端,客戶端再和設(shè)備建立連接,客戶端到設(shè)備的網(wǎng)絡(luò)協(xié)議解析過(guò)程如圖3。
圖2 CCD設(shè)備與CentralD通信過(guò)程Fig.2 A schematic diagram of the communication between the CCD and CentralD
圖3 客戶端到CCD設(shè)備的網(wǎng)絡(luò)協(xié)議解析過(guò)程Fig.3 A schematic diagram of the parsing process of the protocol from the Client to a CCD
RTS2的網(wǎng)絡(luò)協(xié)議規(guī)則由協(xié)議關(guān)鍵字和參數(shù)組成,協(xié)議關(guān)鍵字在block.h中定義,如PROTO_VALUE表示參數(shù)值更新,PROTO_STATUS表示狀態(tài)信息。另外還包含了沒有使用宏定義的協(xié)議關(guān)鍵字,如注冊(cè)、登錄協(xié)議使用Command封裝,在Connection類、設(shè)備類中也包含一些關(guān)鍵字,給源碼的分析帶來(lái)一些困難。在CCD設(shè)備基類Camera支持的關(guān)鍵命令中,目前包含了曝光(expose)、停止曝光(stopexpo)、停止讀出(stopread),如果需要增加新的命令,可以通過(guò)重寫commandAuthorized()函數(shù)完成。
將LAMOST項(xiàng)目的CCD相機(jī)加入RTS2的控制體系中,首先需要在RTS2的源碼中src/camd目錄下增加lamost.cpp文件,創(chuàng)建類LamostCCD并繼承于Camera類,如class LamostCCD:public Camera。目前LAMOST的CCD使用UCAM的方法進(jìn)行控制[6-7],LamostCCD類不直接和底層的硬件進(jìn)行通信,而是和UCAM通過(guò)網(wǎng)絡(luò)連接發(fā)送命令實(shí)現(xiàn)對(duì)CCD的控制。由于UCAM控制CCD已相對(duì)成熟,通過(guò)這樣的方式,一方面可以減少出錯(cuò)的可能性,另一方面,也可以減少底層控制代碼編寫的工作量。在LamostCCD類初始化時(shí)建立UCAM的通信連接,圖4為將LAMOST的CCD接入RTS2體系中,并通過(guò)RTS2的自帶工具rts2-mon進(jìn)行控制。
圖4 使用rts2-mon對(duì)LAMOST CCD進(jìn)行曝光控制Fig.4 An rts2-mon interface to send an exposure command to a CCD on the LAMOST
RTS2系統(tǒng)因?yàn)槠溟_源特性同時(shí)有一定的用戶基礎(chǔ),已經(jīng)成功應(yīng)用于BOOTES、LSST等多個(gè)自主控制天文臺(tái)中,是國(guó)內(nèi)天文技術(shù)界目前較為受關(guān)注的系統(tǒng)之一。RTS2目前支持的主要CCD型號(hào)是天文愛好者所用的CCD設(shè)備,在對(duì)用戶接口、多通道CCD支持及CCD集群的組合觀測(cè)等方面還存在諸多不足,有較大的改善空間。本文在分析RTS2源碼的基礎(chǔ)上,研究如何擴(kuò)展RTS2,將新類型的CCD設(shè)備加入RTS2的體系結(jié)構(gòu)中,同時(shí)為其他類型的設(shè)備擴(kuò)展提供了有價(jià)值的參考。
參考文獻(xiàn):
[1] Remote Telescope System-2nd vesion[EB/OL].[2013-11-10].http://rts2.org/.
[2] 趙永恒.天文望遠(yuǎn)鏡的自動(dòng)觀測(cè)技術(shù)[J].科研信息化技術(shù)與應(yīng)用,2012,3(4):11-16.
Zhao Yongheng.Technology of automatic observation of astronomical telescope[J].E-Science Technology&Application,2012,3(4):11-16.
[3] Kubánek P,Jelínek M,F(xiàn)renchc J,et al.The RTS2 protocol[C]//Bridger A,Radziwill N M. Advanced Software and Control for Astronomy II:Proceedings of the SPIE.2008,7019:92-103.
[4] Kubánek P,Jelínek M,Vítek S,et al.RTS2:a powerful robotic observatory manager[C]// Lewis H,Bridge A.Advanced Software and Control for Astronomy:Proceedings of the SPIE. 2006,6274.
[5] 程祖橋,鄧輝,王鋒,等.云南1米紅外太陽(yáng)塔分布式CCD實(shí)時(shí)控制與圖像采集系統(tǒng)軟件研制[J].天文研究與技術(shù)——國(guó)家天文臺(tái)臺(tái)刊,2012,9(4):426-431.
Cheng Zuqiao,Deng Hui,Wang Feng,et al.Design of the distributed real-time control and image-acquisition software system for the YNAO 1m solar telescope[J].Astronomical Research&Technology——Publications of National Astronomical Observatories of China,2012,9(4): 426-431.
[6] 羅阿理,田園,宋靜,等.LAMOST觀測(cè)控制系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].科研信息化技術(shù)與應(yīng)用,2012,3(4):76-85.
Luo Ali,Tian Yuan,Song Jing,et al.Design and implementation of LAMOST observatory control system[J].E-Science Technology&Application,2012,3(4):76-85.
[7] 徐靈哲,徐欣圻.LAMOST網(wǎng)路控制系統(tǒng)結(jié)構(gòu)[J].天文學(xué)進(jìn)展,2006,24(3):200-209.
Xu Lingzhe,Xu Xinqi.The structure of network control system for LAMOST[J].Progress in Astronomy,2006,24(3):200-209.
Methods of Constructing New CCD Classes in the RTS2
Wei Shoulin1,Chen Yajie1,Liang Bo1,Wang Feng1,Deng Hui1,Dai Wei1,Cao Zihuang2
(1.Key Laboratory of Applications of Computer Technologies of the Yunnan Province,University of Science and Technology of Kunming,China,Email:wsl@cnlab.net;2.Yunnan Observatories,Chinese Academy of Sciences,Kunming 650011,China)
CCDs are among the most commonly used instruments on astronomical telescopes and are also important parts of autonomous control systems of astronomical telescopes.With emerging needs of automatic observations using astronomical telescopes and the rapid development of relevant technologies,the open-source RTS2 has become one of the software systems that are relatively more noticed in the field of automatic observations.However,the RTS2 supports rather limited types of CCDs,and its control-interface convention is rather fixed.The original settings of classes in the RTS2 are not sufficient to incorporate special CCD devices (such as the 32 CCDs of the LAMOST and some CCD devices for selecting observation sites).Based on our thorough analysis of the RTS2 source codes,we investigate methods of constructing new CCD classes from the original Camera class.The methods are mainly about extensions of parameters,commands,and protocols.The methods are applied to the control of the CCDs on the LAMOST telescope and achieve rather effective results. The work of this paper provides rather valuable references for incorporating other types of equipments on astronomical telescopes into the RTS2.
Remote Control;RTS2;CCD;Extension
TP311.1
A
1672-7673(2014)03-0281-06
2013-10-13;
2013-10-25
衛(wèi)守林,男,講師,碩士.研究方向:軟件架構(gòu),網(wǎng)絡(luò)安全,天文計(jì)算方法.Email:wsl@cnlab.net