为了获得更好的观测效果,随着技术的发展,越来越多的望远镜建到人烟稀少的地方,甚至是不适合人类居住的地方,比如超高海拔的高原或山上、南极,以及太空望远镜,因此对望远镜的自主控制能力提出很高的要求。
RTS2 (Remote Telescope System,2nd Version)[1, 2]是PetrKubanek 2001年在Linux操作系统平台上研发的一套远程望远镜控制系统,可以进行全自动观测模式,自主地从数据库选择合适的观测目标进行观测,有很好的实时性,并能够对望远镜的最新警报做出最快的反应。RTS2秉承模块化设计理念,每个模块间耦合度很低,易于扩展和修改,并且采用设备“即插即用”的设计方案,设备甚至设备的控制程序接入RTS2控制系统时,都可以随时开启和关闭。随着项目的进行,十多年的发展,使得RTS2可以适应更多的观测需求,RTS2已经成功运行于西班牙、美国、智利、阿根廷、新西兰、南非、捷克的10余套程控自主天文台上,特别在小口径望远镜上得到了良好的应用,并能自动完成设定的观测功能,在设备无故障的情况下实现无人值守,实现了一定的自主化控制功能①(① http://bootes.iaa.es/)。
EPICS全称为 “Experimental Physics and Industrial ControlSystem”②(② http://www.aps.anl.gov/ epics/),是20世纪90年代初由美国洛斯阿拉莫斯国家实验室(Los Alamos National Laboratory,LANL)和阿贡国家实验室(Argonne National Laboratory,ANL)等联合开发的大型控制软件系统。EPICS已经广泛应用于高能粒子加速器、天文望远镜等大型物理实验装置。在大型天文望远镜领域,越来越多的机构也将EPICS作为控制系统设计的基本方案,如美国的Keck II望远镜[3]、Gemini 8 m望远镜[4, 5]、SDSS(Sloan Digital Sky Survey)[6]的望远镜运行监控台等等。
EPICS采用客户端/服务器(Client/Server)和发布/订阅(Publish/Subscribe)模式,在多台计算机之间进行通信。一组计算机用于实时的通过物理测量设备采集实验和控制数据,然后这些信息会通过EPICS的传输协议Channel Access传送给其他的计算机。整体是一个分布式网络结构,通信协议Channel Access是一种高带宽的网络协议,能够很好地适应科学实验装置的软实时应用[7, 8]。EPICS用于多台通过网络连接的电脑之间的控制和反馈,同时提供很好的数据监控和采集功能,其结构如图 1。
|
| 图 1 EPICS的结构 Fig. 1 A schematic diagram illustrating the structure of the EPICS |
图 1中,每个输入输出控制器(Input/Output Controller,IOC)都是一个设备的控制程序。与设备的通信可以通过各种物理设备或协议,例如GPIB、USB、LAN等,有的设备甚至直接就在内部集成了EPICS控制程序。位于协议上层的Operator Interface则是Channel Access协议客户端,可以是命令行工具,也可以是EPICS的扩展客户端工具如MEDM(Motif Editor and Display Manager),还可以根据具体需求开发相应的图形用户界面(Graphical User Interface,GUI)作为EPICS客户端。
本文主要针对成像设备相机进行设备控制软件的设计,给出了相机控制软件的结构,并给出了相机控制的调试界面以及和整个自主望远镜控制系统的集成,包括基于EPICS的第三方工具AreaDetector完成了成像控制软件的设计,并完成了和RTS2的接口,使得成像控制软件能很方便地集成到RTS2的观测控制流程中。
1 望远镜控制系统构架针对EPICS的软实时性和RTS2对于望远镜观测流程的自主控制的优势和特点,利用EPICS进行望远镜设备的控制,利用RTS2进行观测流程的控制,设计了自主望远镜控制系统。设计的框架如图 2,底层的设备控制为基于EPICS的输入输出控制器控制程序,这样上层可以不管底层输入输出控制器的程序变化,只要接口不变,都可以适配原来的组件程序。
|
| 图 2 基于RTS和EPICS的自主望远镜控制系统构架 Fig. 2 Illustration of the architecture of our control system for an autonomous observatory based on the RTS2 and EPICS |
望远镜控制系统整体采用层次化的组件模型,从上到下依次为用户界面(User Interface,UI)模块层、核心模块层、子系统控制层。用户界面模块层包含本地用户界面模块以及远程用户界面模块,用户界面模块主要负责与RTS2的核心组件通信,包括控制方式以及状态监控等,提供与用户交互的接口。
核心模块层与远程通信的组件为XMLRCPD组件,通信协议采用RTS2原有的XMLRPC http://xmlrpc.scripting.com/default.html协议。核心层组件间的通信还是原RTS2协议[2]。这里需要对这些核心组件进行修改,与底层的通信采用EPICS的Channel Access协议,使其可以和新加的输入输出控制器进行通信,需要将以前组件内的连接类(Connection类)中加入EPICS的客户端操作,如触发输入输出控制器的命令PV量,监听输入输出控制器的状态PV量等。
子系统设备控制层分别是各个硬件的控制程序,通过一些通信方式(以太网、 串口等)对硬件进行控制。在实现控制的基础上,需要加入集成到RTS2中所需要的一些功能,包括状态同步、Value表同步等,以完成对RTS2的接口。
2 成像控制软件的设计成像软件由基于EPICS的一个第三方工具AreaDetector http://cars9.uchicago.edu/software/epics/areaDetectorDoc.html开发而成,通过CA通道和RTS2连接,并按照RTS2的协议完成命令和状态的接口,同时AreaDetector通过相机的驱动和相机硬件完成通讯。成像控制软件的结构如图 3。
|
| 图 3 成像控制软件结构示意图 Fig. 3 A schematic diagram illustrating the structure of our imaging control software |
AreaDetector是一个基于EPICS的用来控制2D探测器的软件,这里2D探测器包括CCD、像素阵列探测器(Pixel Array Detector),以及在线图片源(比如持续刷新的网络摄像头)。它提供了成像设备基本的功能和标准的接口,并很容易根据设备的具体特点进行扩展,提供了实时的大数据图片的传输以及实时的感兴趣区(Region of Interest,ROI)分析,并已集成大部分市面上常见的各种科学级相机,使得成像系统的开发快速方便且性能稳定,提供了高性能和容易扩展的特点。AreaDetector的结构如图 4。
|
| 图 4 EPICS AreaDetector结构示意图>EPICS AreaDetector结构示意图 Fig. 4 A schematic diagram illustrating the structure of the AreaDetector in the EPICS |
AreaDetector的结构与其他EPICS程序一样,主要分为3部分:记录层(第5层),设备支持层(第4层),设备驱动层(第2层)。记录层定义了程序的过程变量(Process Variable,PV),用来提供程序的对外接口;设备支持层定义了设备驱动层的通用接口,实现了保存图像的数据结构,以及用于图像处理和计算统计信息的插件;设备驱动层实现了不同相机设备的控制,每个相机设备都对应了一个不同的设备驱动。其中设备支持层与设备驱动层是用Asyn http://www.aps.anl.gov/epics/modules/asyn库实现的,利用面向对象的结构,实现了设备支持层与设备驱动层的隔离,从而让设备支持层可以支持不同的设备驱动。
因此基于AreaDetector的开发非常方便,只需在驱动层使用相机的驱动完成对相机硬件的衔接,在record层,在原有相机控制的PV量上,增加和RTS2集成的PV量即可。
2.2 RTS2设备接口设计RTS2的接口PV量的设计主要涉及命令和状态。对于命令需要把RTS2的命令映射成设备IOC的PV量,对于状态,在RTS2中是使用Value的数据结构表达,同样要映射为设备IOC的PV量。在RTS2中,使用Connection类对各个设备进行通讯,也就是说设备层和RTS2核心组件层是通过Connection类进行通讯,为了完成EPICS IOC和RTS2的通讯,对Connection类进行了扩展设计。
如图 5,Connection类在原来功能的基础上增加了EPICS IOC的客户端接口,并且以RTS2中NMonitor发送命令为例进行了类关系的示意。为了方便设计和扩展,并不影响原有RTS2的核心代码,在RTS2的Connection类中,基于XML格式设计了命令状态到相应PV量的映射配置文件,只要在Connection类中读取此配置文件即能完成命令状态到PV量的映射而不涉及RTS2的核心代码。
|
| 图 5 Connection类的扩展示意图 Fig. 5 A schematic diagram of the extension of the Class Connection |
配置文件的格式如图 6。以命令为例说明,其它类型映射类似。命令映射包含在
|
| 图 6 命令状态映射文件格式 Fig. 6 The format of a file for the configuration of mapping a command to a PV variable. The file format for mapping a status is similar |
为了区别原有设备组件和EPICS IOC,为RTS2定义了一个新的设备类型:DEVICE_EPICS。这样在创建与IOC设备的连接类时,需要解析该XML配置文件,并将其中的命令与Value的PV量对应关系存储在新设计的Connection的两个Map表:
map
map
Connection类中加入一个解析XML的函数为initEpics(),在该函数中,首先解析命令PV、ValuePV和StatusPV并保存在对应的Map表中,然后对设备的ValuePV及StatusPV创建EPICS的CA客户端监听程序。这样Value或Status值变化之后,可以在监听的callback函数(EPICSPVCallback)中获取新的值,并更新到相应的Value或Status值中。然后需要在connection中加入一些处理EPICS PV量的函数,用于触发PV量的操作。
另外,还需要针对不同的设备或客户端,新建不同的Connection子类来连接IOC设备,比如图 5中,Monitor组件连接RTS2原有设备通过NMonnConn类,这里新增了ConnEPICSClient类表示Client与IOC设备间的连接。在device中,原有的设备间连接类为DevConnection类,需要新建EpicsDevConnection类用于原有设备(Executor等)与IOC设备间的连接。当新的设备加入连接到RTS2中时,Centrald会将IOC的连接信息通过 “device” 命令将信息发送给新接入的设备,这样设备收到 “device” 命令以后,会创建EpicsDevConnection连接IOC设备,并解析上述XML配置文件。
2.3 RTS2接口PV量的设计接口部分PV量涉及3部分:命令、状态以及针对设备的通用PV量。
在EPICS中,每个设备都有一定的命令,这些命令在IOC里面对应为PV量。为了统一接口,需要为所有设备的命令设计统一的PV量类型,比如不带参数的命令可以定义为BO类型的PV量,带参数的可以定义为longin类型的PV量,并按图 6的格式定义在配置文件中,供Connection类进行解析和调用。
RTS2的每个组件相应的状态量都是一个Value对象,Value保存着设备状态中的一项。在RTS2的终端界面中显示的每个设备的属性值都是该设备的一个Value。通过扩展的Connection类,从配置文件中获取该设备的所有Value PV量,加入Value与PV的Map表——std∷map
除了命令和状态,RTS2还需要针对设备的通用信息,包括Name、Status、DataType,对CCD相机来说,需要对应添加CCD∶Name、 CCD∶Status、 CCD∶DataType这3个PV量。CCD∶Name是设备在RTS2中显示的名字,需要与配置文件中一致,CCD∶Status是设备状态PV量,需要与RTS2兼容,CCD∶DataType表示CCD单个像素的数据类型,需要与RTS2中的宏定义一致。
2.4 相机驱动模块的集成AreaDetector提供了很多现成厂家相机的驱动,比如Andor、Prosilica等。在我们的望远镜控制系统中使用Andor相机,Andor公司对其所有的相机提供了通用的驱动程序,开发非常方便。
Andor相机的Linux驱动是以函数库的形式提供的,包括一些头文件和一个动态链接库。通过libusb库,实现了在用户态操作USB设备,不需要安装内核模块。功能包括:设置曝光模式,设置读出模式,设置触发模式,快门控制,制冷控制,等等。不同的相机支持的参数不尽相同,某些设置选项只针对特定的相机型号。Linux上的Andor驱动提供的是C语言接口,AreaDetector中已经集成了Andor相机的支持。针对我们自己的Andor相机型号,对AreaDetector中的代码进行修改,使之能够支持相机的位数以及满足读出方式的需求。
RTS2是通过设备状态CCD∶Status的变化判断下一步应该做什么,比如发送曝光命令之后,等到设备状态变为空闲状态,才开始读图像,所以需要在AreaDetector中添加状态 PV量来配合RTS2。为了与RTS2本身的状态变量兼容,在AreaDetector中引入RTS2的status.h头文件,同时在AreaDetector的基类中实现maskState函数,用于设置AreaDetector的状态PV量,其参数与RTS2中一样。因此,在AreaDetector中需要改变状态的地方有:AreaDetector初始化的时候,把状态初始化为空闲状态;AreaDetector收到曝光指令后,将状态设为正在曝光;AreaDetector曝光结束后将状态设为开始读出;AreaDetector读出结束后将状态设为空闲状态。同时AreaDetector需要在上述4个位置调用maskState函数,并设置正确的状态值,才能正确接入RTS2。
3 成像控制软件的实现基于RTS2和EPICS,完成了具有自主控制功能的成像控制软件的构架、设计和实现,并使用Andor iKon-L相机进行了测试。在RTS2的NMonitor组件中成功实现对Andor相机的控制,如图 7。
|
| 图 7 RTS2 monitor组件对相机的控制界面 Fig. 7 A screenshot of the UI for the control of the camera through the RTS2 monitor |
本文使用AreaDetector完成了相机的控制,并根据RTS2的命令和状态的协议,实现了AreaDetector到RTS2的命令和状态接口,使得整个相机控制软件能很好地集成到基于RTS2的望远镜控制系统中。利用AreaDetector的原有功能,在RTS2中增加了CCD相机对应的命令到PV量的映射,以及CCD相机对应的Value到PV量的映射,完成了整个成像控制软件的设计,并能很好地融合到RTS2系统,为RTS2的应用提供了新的思路。
| [1] | Kubánek P, Jelínek M, Vítek S, et al. RTS2: a powerful robotic observatory manager[C]//Proceedings of the SPIE. 2006. |
| [2] | Kubánek P, Jelínek M, French J, et al. The RTS2 protocol[C]//Proceedings of the SPIE. 2008. |
| [3] | Lupton W F. Keck telescope control system[C]//Astronomical Data Analysis Software and Systems IX, ASP Conference Series. 2000: 261-270. |
| [4] | McGehee P M.The real-time computing environment for the Gemini 8-m telescopes[C]//Astronomical Data Analysis Software and Systems III, ASP Conference Series. 1994: 465-468. |
| [5] | Maclean J F. Gemini primary mirror control system: design, implementation and experience[C]//Proceedings of the SPIE. 2000: 276-287. |
| [6] | McGehee P M. Toolkit based extension of the SDSS control system[C]//Manset N,Veillet C, Crabtree D. Astronomical Data Analysis Software and Systems IX, ASP Conferance Series. 2000: 283-286. |
| [7] | Xu S F, Kraimer M R. Real-time performancemeasurements of EPICS IOCcore[C]//10th ICALEPCS International Conference on Accelerator & Large Experiment Physics Control Systems. 2005. |
| [8] | Wang Jian, Xie Shuxin, Dong Jian, et al. Design of Win32-based EPICS IOC[J]. Nuclear Techniques, 2008, 31(1): 67-70. |



