基于Linux的FAST馈源支撑系统控制软件的开发
2010-01-25朱文白
管 皓, 朱文白
(中国科学院国家天文台,北京 100012)
1994年,中国天文学家提出在贵州省南部喀斯特洼地中建造500 m口径球面射电望远镜FAST (Five-hundred-meter Aperture Spherical Telescope)的建议和工程方案[1],它将是世界上最大的单口径射电望远镜。FAST的天文观测将回溯原初宇宙,解答宇宙学的众多难题。FAST具有3项自主创新[2]——洼地台址、主动反射面[3]和光机电一体化柔性馈源支撑系统[4-5]。作为一项巨大的工程项目,FAST涉及到一些工程领域极具挑战性的课题。经过15年的关键技术研究和模型实验,FAST工程方案的台址[6]、主动反射面、光机电一体的馈源支撑系统、高精度测量与控制以及接收机等关键技术可行性已得到确认。FAST作为国家“十一五”大科学装置2007年7月正式立项。
FAST关键技术之一的光机电一体化的馈源支撑系统[7],系统采用索系支撑拖动轻型馈源舱,舱内装置并联机器人作为二次精调稳定机构, 承载望远镜馈源前端。这样,在馈源与反射面之间无刚性连接的情况下, 实现望远镜馈源的高精度的指向跟踪,要求馈源在150m高空、206m的范围内运动,六自由度刚体上各点实时达到10mm的定位精度[8-9]。
图1 500 m大射电望远镜(FAST)的三维模拟图Fig.1 The 3D graphics of FAST
Linux是近年来发展异常迅猛的操作系统,其原因在于它是开源操作系统,有开源社区强有力的支持。另外,Linux是基于Unix的类Unix系的操作系统,而Unix的稳定性、可靠性以及出色的网络能力世所皆知。目前在天文界,Linux已经广泛应用于科学计算。在工程技术中, Linux的应用更是蔓延到从手机终端到车载系统等广阔的领域。为增强系统的灵活性与可靠性,同国际天文界更好地进行交流,FAST项目有必要采用Linux操作系统平台。
Ubuntu Linux是近年来Linux家族中一颗耀眼的明星,作为最为纯粹的自由开源版本,它优良的特性得到了广泛认可,目前已经成为用户使用比例最高的Linux版本之一。
Linux环境下的可视化开发是一个重要问题。目前由挪威TrollTech公司开发的Qt库是一个优秀的跨平台C++类库[10],利用它可以非常轻松地开发Linux下的可视化软件,许多著名软件皆是利用了Qt进行开发(如著名的桌面环境KDE)。本系统采用的是Qt4的开源版本。
1 控制系统软件的整体设计
FAST馈源一次支撑系统是一个索牵引的并联机器人系统,包含测量系统、反馈控制系统和执行机构3部分。整个系统的示意图见图2。
图2 控制系统示意图Fig.2 The structure of the control system
整个系统是一个完整的闭环反馈控制系统。主控程序作为核心模块完成了控制算法的实现,在本系统中采用PID位置反馈与力反馈的双闭环控制策略,一方面实现位置精准定位,另一方面也要针对索系力学特性的要求,避免虚牵与过载等情况发生。用户界面体现出用户(天文学家)对天文观测的要求,给出系统运动参数,作为整个系统的输入。主控算法在接收用户输入与反馈输入,进行相关计算后通过网络向多台电机发送转速数据。电机模块接收数据后,通过相关驱动程序控制电机运转,控制绳索收放达到馈源仓的定位目的。
2 控制软件各模块的设计实现
2.1 软硬件平台及开发工具
软件运行基于Intel X86架构的工业控制计算机上,CPU为Pentium@4,2.66GHz, 内存512M。
目前Linux的版本众多,本系统采用完全自由免费,基于社区支持的Ubuntu 8.04操作系统,采用Qt4作为开发库,结合它特有的信号与槽机制,通过面向对象的编程方法实现软件功能。Qt下所编制的类之间通过信号进行彼此通信,通过编制槽函数进行相应信号的处理,同一个信号可以由不同的槽函数进行处理,同一槽函数也可以用来处理不同的信号,应用起来非常灵活。在具体软件编制中,可以通过采用面向对象中的继承方式来复用Qt库中现有的类,加上QObject宏定义即可使自定义的对象具有消息处理能力,只要利用connect函数即可进行信号与槽函数的连接。
由于主控程序要用到多台电机(目前为6台),因此必须利用主控上的PCI拓展插槽安装多串口卡拓展串口资源,实验中采用MOXA转换卡,并在Linux下安装它相应的驱动程序,总共拓展8个串口资源。
2.2 整个系统的通信协议
为实现模块化的要求,用户界面与主控程序、底层电机控制分别作为独立的应用程序运行,模块之间通过TCP/IP协议簇的UDP(用户数据报文协议)进行通讯,此协议为轻量级的网络协议,非常适合实时控制。系统数据的可靠性由自定义的上层协议实现(如表1),数据段中都有标识数据正常与否的标志dflag,一旦检测到异常,即丢弃数据。整个控制系统的网络属于局域网,网络情况好,数据出错的几率非常低。网络Qt库中提供了QUdpSocket类来实现。通过定义相应的对象,即可实现彼此之间数据的收发。主控程序发送给电机控制程序的数据包括数据头和命令字两部分。数据头标识此数据来自主控程序,电机控制模块若接收到事先约定好的正确的标识数字即认为此数据有效,进而开始接收后面的数据。命令字针对所有电机的启动、关闭、置速,单个电机启动、关闭、置速都进行了一一设定。
表1 主控模块发送给电机模块的协议数据组成Table 1 The protocol between control and motor modules
2.3 电机控制模块设计
电机控制模块是整个软件系统与底层硬件之间的接口部分,通过输出电机转速达到控制索长的目的,继而实现对馈源仓的牵动。在实验中,采用ABB ACS400系统变频器控制。对于ABB公司的ACS400系列变频器,其通讯方式为Modbus通讯协议。此协议在软件实现中的关键部分与难点在于数据尾中CRC校验算法的实现。
表2 Modbus协议指令组成Table 2 The Modbus protocol
考虑到现场实验要求,电机控制模块分为本地与网络两种模式。本地手动模式,即直接通过软件上的操作按钮进行电机控制,用于测试各个电机是否运转良好以及手动调节单个索的长度。网络模式下,软件上的各个按钮皆不可用,此时整个程序只接收网络发来的主控程序模块的网络数据,用于实现馈源自动控制,完成天文规划的各种轨迹。
最底层的实现是利用串口通信。在Linux下对设备控制主要是针对设备文件读写,它本身自带两个串口文件ttyS0、ttyS1,本系统中通过多串口卡拓展出ttyM0~ttyM7共8个串口资源文件,为与电机控制软件中其它类进行交互,自行开发了串口类 QSearialPort,对于串口操作进行了封闭,实现了打开串口、关闭串口、各设备写数据等功能,最后实际测试结果运转正常,达到了预期的目的。
电机模块界面如图3(图左为本地模式,图右为网络模式,网络模式下手动调节按钮皆不可用)。
图3 电机控制模块示意图Fig.3 The motor-control module
2.4 主控算法模块
作为系统的核心模块,主控算法模块的设计尤为重要。由于PID控制技术在工业应用中已经非常成熟,故主控程序采用PID控制算法。同时由于系统的力学特性要求,加入辅助的力反馈,主要是为防止绳索虚牵和过载,实际编程中通过将力反馈数据乘以经验系数,然后加入到最终输出量(钢索速度)上去。
图4 位置反馈示意图Fig.4 Illustration of the position feedback
主控程序以位置反馈为主,如图4,Rci为测量位置,Rei为理论位置。各钢索伸长的速度由3组分量相加而成:V=VT+VFBL+VFBF
其中,V为输出速度;VT为理论速度;VFBL为位置反馈速度分量;VFBF为力反馈速度分量。下面具体说明其计算方法。定义钢索速度方向是伸长为正。
(1)理论速度VT,是速度的主分量。已知当前时刻和下一时刻虚拟下平台中心的理论位置是Re0,Re1,以悬索弧线的弦为标准,就可以算出由Re0到Re1的索长变化dL1,则理论速度为VT=dL1/h;
(2)位置反馈速度VFBL,这里采用比例、积分、微分反馈控制,并进行了位置误差预测。定义位置误差为实际位置Rci与理论位置Rei之差。
位置反馈的反馈量定义为:
kp、ki和kd分别是比例反馈系数、积分反馈系数和微分反馈系数,其数值通过实验调节确定;其中比例项采用下一时刻的误差值,预测公式为:
所以:
由位置反馈量ui+1即可计算对应的电机速度反馈量VFBF。
(3)力反馈速度VFBF,根据索中张力的理论值(期望值)和测量值,计算力反馈速度分量可利用
VFBF=kf*dF,dF即为理论与测量值之差,kf为力反馈系数。
主控模块的输入是系统的预期终点位置,控制策略(分为开环、加位置反馈和同时存在位置与力反馈3种),所走轨迹(分直线,曲线)以及预期时间。这些量通过用户界面的相应控件取得用户输入传给主控模块。输出则是各钢索的速度,通过发送数据包给电机模块从而驱动电机运转。
核心类模块分别是轨迹控制类Tracing与控制算法类Ctrl, 前者用来规划轨迹,后者则把轨迹通过PID算法转化为钢索的速度,发送给电机模块。另外还需要一些辅助类,包括坐标系统类和计时时钟类。其中计时时钟的实现比较关键。因为对于自动控制系统而言,时间的设定是比较重要的。在Linux平台下,要获取当地绝对时间,需要调动底层的系统函数gettimeofday(timeval t, timezone tzone)来实现。在本系统中,通过封装成类来实现绝对时间与相对时间的获取,重点是相对时间,这样从一个时间点开始,经过一个设定的时间段后,控制程序停止。时间精度要求在秒级即可,故而无需更高精度的时间设备。
2.5 意外处理
馈源支撑系统是一个机电控制系统,由于涉及到电机转动等机电设备的运行,因此有必要在软件中加入相应的意外处理,从而加强整个系统的安全性与容错性。其中,电机的转速,钢索的伸长与收缩速度,钢索应力的大小是3个主要关心的安全指标。针对它们,先将安全限位值写入初始化文件,然后在程序运行时读取,每次控制过程中都检测是否超过限位值,否则拒绝执行后续步骤,从而达到安全的目的。
(1)电机的转速必须小于预先设定的限位值m_vmax,如果超过此值,则拒绝向变频器发送相应的驱动数据。程序直接返回。此项在电机驱动模块中实现。
(2)钢索的速度必须小于安全限位值。用户输入期望目标点与所用时间后,若通过计算得出钢索速度过大,则拒绝执行,程序返回。此项在主控算法中实现。
(3)力数据若大于限位值则报警,程序返回。此项在主控算法中实现。
2.6 用户界面设计
用户界面分为用户输入部分和系统运行数据显示部分。前者将用户输入的数据经过适当的格式转换,传入主控算法模块,后者则实时显示系统运行的信息,以备用户参考之用。其中实时显示数据是通过设置定时器,每隔一定时间间隔刷新一次,用到了QTimer类。输入输出主要界面类有 QDialog, QPushButton, QLineEdit, QLabel, QRadioButton,QGroupBox。
主控制用户界面如图5。其中左边部分为控制设置,包括目标点位置,时间设置,控制策略选择。信息提示是在初步填入数据后计算一下仓运行的理论速度,如数量过大则重新输入参数,否则会破坏系统运动的稳定性。右边部分为运行状态信息。
3 实验与测试结果
首先在实验室内搭建上位机+ABB变频器+交流电机的系统,在上位机上编制控制软件,进行测试,其中用软件方式仿真了测量数据。继而在FAST密云50m模型实地进行测试。上述测试表明:主控算法模块与电机驱动模块能够正常通信,各索速度在合理范围之内。该控制软件能够完成预定的功能和任务。
图6 Ubuntu Linux下主控程序运行时图及终端窗口下的索长数据滚动显示Fig.6 The running status of the software and the data of the velocities of the cables
4 结束语
面向FAST馈源运动控制系统的研制,基于Ubuntu Linux开发平台,利用Qt4开发工具,对馈源运动控制系统进行详细分析与设计,对于检验目前馈源模型的运动,测试控制算法和为以后进一步开发馈源支撑的控制系统提供了依据和基础,具有重要的实用价值。
致谢:感谢国家天文台张蜀新老师的帮助和建议。
[1] Nan R D, Peng B.A Chinese concept for the 1 km2radio telescope[J].Acta Astronautica, 2000, 46(10~12):667-675.
[2] 南仁东.500m球面反射面射电望远镜FAST[J].中国科学(G辑),2005,35(5):449-466.
[3] Qiu Y H.A novel design for a giant Arecibo-type spherical radio telescope with an active main reflector[J]. MNRAS, 1998, 301:827-830.
[4] Ren G X, Lu Q H, Zhou Z.On the cable car feed support configuration for FAST[J].Ap&SS, 2001, 278(1):243-247.
[5] Duan B Y, Xu G H, Wang J L.Integrated Optimum Design of Mechanical and Electronic Technologies for Antenna Structural System[C]//Strom R G, Peng B, Nan R D, eds.Proceedings of the LTWG-3&W-SRT.1995, Beijing:IAP, 1996:144-151.
[6] Zhu B, Nie Y, Nan R ,et al.The FAST/SKA site selection in Guizhou Province[J].Ap&SS, 2001, 278(1):213.
[7] 朱文白.FAST望远镜天文规划和馈源支撑的相关研究[D].中国科学院国家天文台,2006.
[8] 米建伟, 段宝岩, 陈光达,等.大射电望远镜舱索粗调控制系统软硬件设计关键技术研究[J]. 电子机械工程, 2004,20(2):42-45.
[9] 路英杰.大射电望远镜馈源支撑系统定位与指向控制研究[D].清华大学, 2007.
[10] C++ GUI Programming with Qt 4, Second Edition Jasmin Blanchette, Mark Summerfield, Prentice Hall, 2006.