云南1米红外太阳塔分布式CCD实时控制与图像采集系统软件研制*
2012-01-25程祖桥季凯帆王传军
程祖桥,邓 辉,王 锋,,梁 波,季凯帆,王传军,许 骏
(1.昆明理工大学云南省计算机技术应用重点实验室,云南 昆明 650500;2.中国科学院国家天文台/云南天文台,云南 昆明 650011)
1 m红外太阳塔位于云南省昆明市东南约60 km的云南抚仙湖太阳物理观测站,是我国本世纪初主要的地面光学及近红外太阳观测设备,也是目前世界上口径最大的真空太阳望远镜。太阳塔主体设计为具有旋转对称结构的1 m口径地平式真空系统,工作波段0.3~2.5μm,未加自适应系统前空间分辨率优于0.3″。测量和研究太阳磁场的精细结构、高时间空间分辨率的磁场演化以及磁场和动力学流场的关系是1 m红外太阳塔的主要科学目标之一。同时得到太阳活动区的多条高时空分辨率谱线,从多个波段研究太阳的结构和物理特性,也是太阳塔未来的工作任务[1]。
红外太阳塔主体建筑结构和布局如图1。主控机房部署在太阳塔三楼,CCD安装在四楼光谱仪平台上。目前采用4台科学CCD进行多波段太阳图像采集,其中两台采集可见光光谱,一台采集红外光谱,一台进行Hα成像观测,因此,如何实现多台CCD的远程集中统一实时监控管理,是本文的一个研究重点。系统选用了德国PCO公司的高分辨率高速科学CCD相机PCO4000[2]和PCO2000[3],要求可见光采集速度达到3帧/秒(分辨率4008 ×2 672,14位AD),Hα采集速度达到5帧/秒(分辨率2048 ×2048,14位AD),红外采集速度达到10帧/秒(分辨率640 ×512,14位AD),即每秒钟需要处理的数据量大约分别为61 M、40 M、6.2 M,如何确保这些图像数据的高速实时处理和存储,是论文需要解决的另一个关键问题。
1 系统总体设计
根据1 m红外太阳塔的实际结构布局(见图1),整个CCD数据采集控制软件系统采取了主控-前置结构,4套前置系统部署于光谱仪平台上的4台前置计算机,一套主控系统部署于主控计算机。系统总体结构如图2,4台前置计算机通过CameraLink总线方式分别与CCD相连,主控计算机、前置计算机和数据中心通过千兆网络实现互联。
图1 1 m红外太阳塔结构布局Fig.1 Structural layout of the 1m Solar Tower
图2 系统总体结构Fig.2 Structure of the system
整个系统工作流程如图3。观测时,观测人员把CCD的参数配置和操作命令通过主控系统下达到前置系统,前置系统把操作命令和参数内容进一步下达给相应CCD。前置系统对采集的数据进行包括格式转换在内的加工处理并保存到数据中心,同时,前置系统每间隔10 s向主控系统发送一张采集的缩略图,便于观测人员对观测状况进行实时监控。
围绕系统的工作流程,除了核心数据采集、数据处理、数据存储等功能以外,在主控系统中还增加了日志管理、数据导出、系统复位等菜单功能。主控系统的界面功能如图4。
2 需要解决的几个主要问题
图3 系统工作流程Fig.3 Workflow of the system
整个系统采取主控-前置结构,实现对4台CCD的集中控制以及高速图像采集数据的处理和存储。主控前置系统之间的通信协议设计、图像数据的高速实时读取处理、网络环境下系统可靠性保证以及多CCD采集图像的实时展示,成为软件系统研制过程中需要重点考虑的几个关键性问题。
2.1 主控-前置系统通信协议设计
为了实现在一台主控机的总控制下,4台CCD各自独立完成图像数据的采集处理和存储,主控系统与前置系统之间必须有一套自定义的应用层通信协议。系统设计了系统、控制、状态以及参数配置4类协议解决主控与前置系统之间的通信问题(表1)。系统类协议主要实现前置系统登录、主控系统对前置系统的连接复位以及关闭前置系统;通过控制类协议,主控系统实现向前置系统下达图像采集或者停止采集的命令;通过参数类协议,前置系统向主控系统请求获得CCD的配置参数;主控系统通过状态类协议获得前置系统状态以及心跳信息。“OK”表示相应操作成功,“FAILURE”表示相应操作失败。
图4 主控系统界面功能Fig.4 Functions on the interface of the main-control system
表1 主控-前置系统通信协议设计Table 1 Communication protocols between the main-control and front-end systems
系统登陆协议中,前置系统向主控系统发送USER<username>,其中,<username>唯一标识4台CCD对应的前置系统。
在参数配置协议中,由前置系统向主控系统发送GETCONFIG,请求CCD参数配置,主控系统回送SENDCONFIG <x0 y0 x1 y1> <Binningx> <Binningy> <Exposure> <Delay>。其中,<x0 y0 x1 y1>为图像采集窗口区间,默认为所对应CCD的最大分辨率,视情况也可以采用ROI值,ROI、<x0 y0 x1 y1>、CCD最大分辨率之间关系如图5,其中max1/max2表示CCD的最大分辨率;<Binningx> <Binningy>分别为水平方向和垂直方向面元,<Binningx>的取值范围为1、2,<Binningy>的取值范围为1、2、4、8[2-3]; <Exposure>为曝光时间参数,默认为20 ms。
图5 <x0 y0 x1 y1>、ROI、CCD最大分辨率之间对应关系Fig.5 Relations between the <x0 y0 x1 y1 > ,ROI,and the full resolution of CCD
2.2 双缓存、双ADC、DMA技术提高图像处理存储速度
系统主要选用了德国的PCO4000以及PCO2000相机。为了提高图像采集速度,这两款相机均支持双模数转换器(ADC)以及多缓存设计,最多可以支持8 个缓存[4]。试验数据[4](表2)表明,在同样的32M采样频率下,双ADC的图像处理速度比单ADC至少快70%,而双缓存只比单缓存快7%,因此,实际系统中采用了双缓存双ADC的设计方案。两块缓存空间交替接收来自CCD的数据并进行相应的处理和存储,节省了任务间的相互等待耗费的资源和时间。PCO相机开发包中跟缓存以及ADC管理相关的函数有 PCO_AllocateBuffer、PCO_AddBuffer、PCO_FreeBuffer以及 PCO_SetADCOperation 等[4]。
表2 不同缓存和ADC个数组合下的采集存储速度对比[5]Table2 Comparison of acquisition speeds under different numbers of the buffers and ADC[5]
另外,在高速CCD图像采集实现过程中,充分考虑到相机的高速采集特性以及Camera Link总线带来的高速传输,采用适合于高速外设和内存之间批量交换数据的DMA技术,从相机内存直接获取图像数据,从而获得与相机提供的采集速度相匹配的图像处理速度。另外,在DMA模式下,数据的批量传输过程交由DMA卡控制,DMA卡代替CPU控制完成在快速设备与主存储器之间的直接数据传输,因此,节省下来的CPU资源可以用于进行图像处理等其他任务。
在前置系统计算机配置为Intel Core I7 930、2.8 G主频、8 M缓存、2 G内存的情况下,经实测,可见光CCD图像采集处理存储最高速度为每分钟277张图(约4.6帧/秒),红外CCD图像采集处理存储最高速度为每分钟923张图(约15帧/秒),Hα图像采集处理存储最高速度为263张图(约4.4帧/秒),达到了系统的预期要求。
2.3 多线程机制提高系统运行效率
在整个系统中,主控机承担了对4台前置机的监控管理以及采集图像的实时显示等任务,前置机承担了对CCD的直接控制、CCD图像数据采集处理和存储、CCD采集数据实时缩略图生成、前置系统与主控系统间通信等任务。
为了提高系统的整体运行效率,实现图像数据的实时有效处理,系统采用了多线程技术[6]。在前置系统中设计了3类线程,即Socket线程、数据采集线程、数据处理存储以及缩略图处理线程。其中,Socket线程负责与主控系统间的通信以及对CCD的控制,缩略图处理线程负责每间隔10 s生成一幅缩略图发送给主控系统。为主控系统设计了Socket线程,负责与前置系统的通信以及缩略图的接收展现。多线程的设计,解决了任务的并行问题,提高了整个系统的运行效率。同时,多线程程序设计中,线程间数据共享可能造成数据冲突是必须重视的一个问题,系统采取临界区避免数据冲突的发生。
2.4 心跳检测增强系统可靠性
为了确保网络环境下整体系统的可靠性,前置系统与主控系统间传输层通信采用了传输控制协议(Transmission Control Protocol,TCP),主控系统开放6000号端口,通过套接字实现主控系统和前置系统之间控制信息和数据传输。
TCP/IP协议族[7]的传输层包括TCP协议和用户数据包协议(User Datagram Protocol,UDP)两种,TCP协议是一种面向连接的可靠的传输层协议,TCP协议采用能够使系统获得比UDP协议更为可靠的数据传输。但是,在前置系统机器故障、前置系统非正常退出以及网络故障的情况下,可能会造成TCP的死连接,故障得不到及时处理和恢复,影响整个系统的正常运行。为了解决这一问题,在系统中增加了心跳检测,前置系统每间隔10 s向主控系统发送一次心跳信息,如果主控系统连续两次没有收到心跳信息则认为前置系统连接断开,进行相应的报警和故障处理。
2.5 双屏设计实现多CCD的实时监控管理
主控系统同时承担了系统操控和4台CCD图像的实时显示功能,因此,采用双屏幕设计。主屏幕展现系统操作菜单、4台CCD的实时参数状态信息以及操作日志信息,如图6,副屏幕实时显示来自4台CCD采集的图像缩略图,如图7。
图6 主控系统界面1Fig.6 Interface 1 of the main-control system
图7 主控系统界面2Fig.7 Interface2 of the main-control system
系统工作过程中,前置系统图像采集线程每隔10 s,发送一次数据到主控系统进行显示。对于一张分辨率为4008×2 672的图像,原始数据达到21 G,不进行任何处理直接发送,既浪费网络带宽资源,又没有必要。因此采取前置系统在发送数据前首先对原始图像进行抽样处理并生成缩略位图的策略。具体做法为:以4008×2 672分辨率图像为例,对原始图像数据进行4×4的抽样,则图像变成1002×668,数据量变为原来的由原来的21 G缩小为1.3 G左右,然后进行格式转换,生成可以直接显示的位图。
3 结论与展望
论文讨论了1 m红外太阳塔多CCD分布式实时控制与图像采集软件系统的整体研制和实现,对其中涉及的一些主要技术问题进行了详细讨论,完成的软件系统目前已经在1 m红外太阳塔投入实际观测运行,初步满足了太阳塔的日常观测要求。
随着太阳塔建设的逐步推进,相应的数据分析、数据发布系统会随之研制并投入应用,新观测设备的加入、观测模式的变化也会给本软件系统带来一定的影响。各系统之间的集成方式和互操作是一个不容忽视的问题。另外,考虑到太阳塔未来有可能会选用其它品牌的CCD,在下一步的研究工作中,还将对系统中CCD控制功能进行进一步封装,以增强系统的通用性。
[1]刘忠,尤建圻,沈龙翔.1 m红外太阳塔[C]//2002中国天文望远镜及仪器学术讨论会论文集.北京:中国科学技术出版社,2003:272-276.
[2]PCO AG.PCO4000 Product Details [EB/OL].[2011-08-17].http://www.pco.de/sensitivecameras/pco4000/.
[3]PCO AG.PCO2000 Product Details [EB/OL].[2011-08-17].http://www.pco.de/sensitivecameras/pco2000/.
[4]PCO AG.pco.camera/SDK_Descriptionre [EB/OL].(2009-10-27) [2011-08-17].http://www.cookecorp.com/software/pco4000/.
[5]程租桥,邓辉,王锋,等.基于Camera Link总线的CCD高速图像采集技术 [J].天文研究与技术——国家天文台台刊,2011,8(4):363-368.Cheng Zuqiao,Deng Hui,Wang Feng,et al.A study on camera-link-based high-speed CCD image acquisition techniques [J].Astronomical Research & Technology——Publications of National Astronomical Observatories of China,2011,8(4):363-368.
[6]休斯.C++面向对象多线程编程 [M].周良忠,译.北京:人民邮电出版社,2003.
[7]W Richard Stevens.TCP/IP详解[M].范建华,胥光辉,张涛,等译.北京:机械工业出版社,2000.