基于LabWindows/CVI的动中通控制系统软件设计
2016-08-13吴诗琪郑健刘杉何芳
吴诗琪 郑健 刘杉 何芳
摘 要:动中通在保持实时稳定对星、跟踪过程中,针对天线控制器ACU难以满足算法开发、故障诊断、便捷调试、可视化界面等问题,设计一款动中通控制系统软件。软件以LabWindows/CVI为平台,针对软件高速采集数据要求,提出响应的控制策略,通过多线程技术与数据保护机制,使用线程池和Timer控件定时判断、开启数据采集线程和绘图线程,提升软件数据采集速率;使用线程安全队列技术保护共享数据;利用工具包SQL Toolkit开发卫星数据库等。测试结果表明:软件能够可靠准确地完成通信、数据处理任务,绘图功能流畅快速,为系统工作的监控、调试以及故障诊断提供充分的技术支撑。
关键词:卫星动中通;串口通信;LabWindows/CVI;多线程;线程安全队列
文献标志码:A 文章编号:1674-5124(2016)09-0077-06
0 引 言
作为一种新型的卫星移动通信系统,动中通(运动中卫星通信,satcom on-the-move,SOTM)就是利用现有的地球同步通信卫星实现宽带移动卫星通信业务[1]。作为一种新型的卫星移动通信系统,动中通可以实现在海、陆、空移动载体实时跟踪卫星,传输高比特率的多媒体信息[2]。
动中通的测控系统是保证波束对准卫星、实现通信的关键,在整个动中通系统中起着承上启下的作用[3]。ACU(antenna control unit)是动中通测控系统的终端显示和设置部分,一般由电源、显示屏以及通信接口组成,包括设置和监控两部分。ACU的主要功能是方位角、俯仰角和极化角的标定,极化方式的设置,天线的工作状态监控、系统数据查询、发送指令,实现故障诊断以及天线姿态和惯导数据监控等。ACU作为动中通系统的关键,其性能直接影响到动中通系统的整体效能,但现使用的ACU也有以下3个方面需要进一步改进:
1)一次只能显示一类参数,并且修改参数比较繁琐,没有键盘等直接输入设备,应加强人机交互优化;
2)由于单次监测的数据单一,无法实时监控多类数据。一般ACU需将监控信息导出并存储到文件中,再利用其他线下软件才能进行绘图分析、检测。这会大大降低操作者实时分析数据及故障诊断的能力;
3)仪器本身较为笨重,不适合搬运携带。若能够将软件安置在电脑、手机、iPad等移动设备上,将会更加方便快捷。
现阶段,国外对动中通控制软件研究相对成熟,主要有以色列公司Intellian开发的APTUS软件、RaySat公司开发的IDU软件等。以APTUS为例,国外软件主要划分为上位机与ACU连接模块、工具菜单模块、系统属性状态显示模板、用户工作界面4大模块。其中以用户工作界面为主呈现天线对星状态。但其公司开发的软件仅适合本公司的对星设备,不仅对星设备售价昂贵,且技术流通性不强,具有一定的限制性。反观国内形式,并无公司系统、完善地做出此类软件。所以本文在充分研究国内外动中通发展现状的基础上,结合了虚拟仪器技术[4]、LabWindows/CVI软件[5]为开发环境设计上位机程序,旨在将软件与我国生产的动中通对星设备相结合,达到优化用户界面、快速反应用户指令、在高速串口通信下实时分析数据并画图监控,进而实现对星过程中的状态监控的目的。
1 软件系统总体设计
整个系统由两部分组成,现场数据采集与传输部分,实时显示各项指标状态、绘图和数据库部分。其中,传输数据主要由测控系统提供。首先ACU通过协议将测控系统上传的数据由RS232[6]传至上位机,经过分析处理后,用户通过人机交互界面获取相应信息并达到实时监控天线对星状态的目的。
如图1所示,测控系统主要由传感器、控制器以及伺服控制系统组成,控制器通过采集传感器敏感的载体扰动信息,采用一定的测控算法,输出控制量给伺服系统,并驱动天线波束隔离扰动,保证波束在地理空间内的指向不变。当开始对星时,软件需要从ACU上传的数据主要包括:天线状态信息(方位角A、俯仰角E、极化角V)、载体的3个姿态角(航向角H、俯仰角P、横滚角R)、所对卫星信息(名称、卫星经度、极化方式等)、GPS定位信息、AGC信号强度等。
从用户界面上看,软件功能主要包括:设置、重启、上传、天线基本信息展示、卫星基本信息展示、天线对星设置、天线实时对星状态数据显示、绘图界面、串口信息设置等。其中所需数据均由测控系统提供。
当地面站天线位于北半球时,由卫星经度、地面站经纬度可得天线初始状态信息:方位角A、俯仰角E和极化角V。
随着动中通运动载体状态(载体航向角、载体俯仰角、载体横滚角)的不断变化,卫星在载体坐标系中的位置也是时刻变化。所以软件实际输出的预置方位角、预置俯仰角还需进一步确定。
设高精度惯导输出载体的3个姿态角分别为航向角H、俯仰角P、横滚角R;地理坐标系g到载体坐标系b进行坐标变换时的3个旋转角分别为航向转角Ht、俯仰转角Pt、横滚转角Rt;其中坐标变换公式表示为
2 系统主要功能设计
如图2所示,根据软件功能,主程序可分成通信模块、数据处理模块、实时显示模块和人机交互模块4大模块。通信模块主要依据ACU的通信协议读取由串口RS232传输的监控数据;数据处理模块主要处理通信模块中读取的数据,其中数据主要包括ACU通信协议中的16类数据:预置方位角、预置俯仰角、预置极化角、当前方位角、当前俯仰角、当前极化角、寻星状态、载体航向角、载体俯仰角、载体横滚角、经度、纬度、GPS状态、限位信息、AGC电平;人机交互模块根据用户的需求显示天线对星状态、ACU当前状态、設置天线对星、监控数据实时绘图等功能;实时显示模块与前面3个模块相关,主要通过高速串口实现实时接收数据、绘图的功能。
2.1 高速数据采集功能的设计与实现
在动中通持续对星的过程中,由于载体一直处于移动状态,导致软件监控时间间隔短,数据绘图的时效性要求高。例如,为了判断是否丢星,软件需要持续监控AGC信号强度;同样,为了判断天线是否精准指向卫星,软件需要一直监控方位角、俯仰角、极化角等。由于串口寄存器的容量有限,软件在不采用多线程技术的情况下会对程序一一顺序执行[7]。当软件处理旧数据的速度低于上传新数据的速度时,就一定会出现数据丢包的现象。在用户层面上更是显出反应延迟死锁、显示曲线断层等现象。所以,采用多线程技术[8]是保证在高速移动下实时监控是否丢星或者其他对不准情况的有效保证。
出于对数据接收、处理和显示的实时性要求,程序开辟了两种次线程,分别为数据采集线程和数据显示线程。能够对用户操作进行第一时间响应是软件的基本要求,所以程序以响应用户操作为主线程。CVI软件中提供了两种多线程实现方法:线程池和异步定时器。考虑使用线程池可以同时开辟多个线程,程序主要使用线程池技术。
如图3所示,当串口打开后,数据采集线程即刻开启,保证串口寄存器随时处于可继续储存新数据的状态。开启多线程函数原型为:CmtScheduleThreadPoolFunction(DEFAULT_THREAD_POOL_HANDLE,ThreadFunction,threadfunctiondata,&threadID)。但随着时间的推移,安全队列中存储的数据将渐渐增多。为了防止安全队列中的数据溢出,设置Timer控件定时读取安全队列内数据存储量,一旦发现安全队列内数据存储量超过50%,即开启第i个数据采集线程(i初始值赋为1)读取安全队列中的数据并绘制图像,随后等待线程执行直到其结束,其函数原型为:CmtWaitForThreadPoolFunctionCompletion(DEF
AULT_THREAD_POOL_HANDLE,threadID,OPT_TP_
PROCESS_EVENTS_WHILE_WAITING)。结束之后释放该线程,函数原型为:CmtReleaseThreadPoolFun
ctionID(DEFAULT_THREAD_POOL_HANDLE,threadID)。最后关闭线程并释放,节省内存空间,关闭线程函数原型为:CmtReleaseThreadPoolFunctionID(DEF
AULT_THREAD_POOL_HANDLE,threadID)。当Timer控件定时开启时,循环操作以上操作直至安全队列中的数据存储量<50%或关闭串口。通过多次使用多线程技术,避免了串口寄存器和安全队列存储器数据溢出的现象并实时进行绘图处理。
多线程保证了用户界面的及时响应,串口数据不丢包,绘图实时能力大幅度上升,软件可靠性和实时性增强。
2.2 线程间的数据保护
在多线程编程中,不可避免地要对一些共享的数据进行访问。由于线程之间对共享数据的访问是独立的,任何一个线程都可对共享数据进行访问和修改[9]。由于它们之间是异步并发进行的,特别是当需要对共享数据进行修改时,就会产生数据不一致的问题。为此,共享数据需要一种保护机制,避免出现数据竞赛(data race)和死锁(deadlocks)等现象导致软件出现逻辑错误,产生崩坏。CVI软件中共有3种数据保护方法,分别是:线程锁(thread lock)、线程安全变量(thread safe variables)和线程安全队列(thread safe queues)[10]。
在程序运行过程中,由于数据采集线程和数据显示线程是同时进行的,两者必将共享ACU上传的数据。在不采用任何保护机制的情况下,双方会出现数据竞争和死锁现象。比较3者,当使用线程锁时有可执行性差,容易出现阻塞和死锁,效率低的缺点;当使用线程安全变量时存在多个次线程无法共同配合处理数据的缺点。考虑线程安全队列适用于为多个线程之间传递大批数据并协同处理数据,软件采用稳定可靠的线程安全队列作为数据保证。线程安全队列函数[11]基本如下:
1)CmtNewTSQ;
2)CmtWriteTSQData;
3)CmtReadTSQData;
4)CmtFlushTSQ。
为了保证ACU上传的数据能够实时完整地从串口寄存器中读取,将CmtNewTSQ函数中的options参数设置为可使队列长度动态增加的OPT_TSQ_DYN
AMIC_SIZE,达到不影响数据采集线程中的其他程序运行的目的。
线程安全队列的使用保护了多线程技术下ACU上传数据在传递过程中的准确性和稳定性,整体提升软件实用性和稳定性。
2.3 实时显示功能的设计与实现
软件侧重于实时显示数据、实时数据绘图,实时监控天线对星动态方面,那么软件对ACU上传数据显示效果的好坏直接决定了用户对软件的评价。
CVI中有两种定时调用函数的方法:一是Timer控件,二是异步定时器[12]。数据采集线程和显示线程在串口打开时即开始运行,为了进一步保证安全队列数据存储无溢出,软件采用线程池和Timer控件混合使用的编程方式。本文采用Timer控件定时监测安全队列中数据存储量,并通过条件判断是否打开新的数据读取显示线程。当发现数据存储量>50%时,即开启新线程读取安全队列中的数据并显示、绘图。通过这种线程池与Timer控件结合使用的模式,可将串口数据采集由50 Hz提高至原来的2~3倍,平均速度维持在100~150 Hz之间。
当设置Timer控件间隔时间为20 ms或20 ms以上时,安全队列中的数据储存较多,有数据溢出的可能,数据显示时依旧有断层现象。经测试,当Timer控件时间间隔设置为11 ms时,曲线绘制效果流畅,实时性强,既防止了安全队列中数据的溢出问题,又兼顾到了运行的稳定性。
2.4 數据库设计与实现
LabWindows/CVI支持对数据库的访问,不支持数据库的开发。因此,LabWindows/CVI访问数据库需要借助NI公司开发数据库系统软件工具包SQL Toolkit才能实现对数据库的访问和操作。通过SQL工具包,CVI可以和任何符合ODBC标准的数据库驱动器和符合ADO标准的产品协同工作[13]。
数据库的交互操作是通过数据库会话实现的,其中会话包含建立数据库连接、激活SQL语句、处理SQL语句、释放SQL语句和与数据库断开连接5个步骤[14]。由于软件采用多线程编程,在使用SQL Toolkit前需进行初始化,函数原型为:int DBInit(int DB_INIT_MULTI_THREADED)。
数据库主要包含常用卫星的基本信息,如卫星名称、经度、信标参数等,并且用户可以根据需要添加(INSERT)、删除(DELETE)、修改(MODIFY)、读取(READ)卫星数据。数据库界面如图4所示。
3 系统集成与试验
利用实验室现有的低轮廓天线和跑车装备对软件的响应性能,功能实现进行了实地测试。跑车试验基本装备如图5所示,将天线置于跑车顶端并随机开动跑车监测天线对星状态。其中,信号强度和GPS定位系统会实时反映在软件界面左端(常态展现栏),帮助用户快速把握天线对星状态。
在软件运行过程中,本文使用Spotlight对软件性能指标进行测试。Spotlight软件是一款轻量级的远程监控工具,具有方便快捷的特点。针对性能测试的目的以及用户的关注点,软件性能指标监测主要分为资源指标和系统指标两大块。具体指标如表1所示。
选取一次跑车测试如图6所示,在移动载体上的天线对星过程中,有一处信号强度明显下降,即说明天线在此处丢星。用户可通过卫星捕获时间、丢星时各个数据显示情况初步判断突发状况,并再次捕获卫星;AGC、方位角、俯仰角等数据的实时画图能力强,绘制图像流畅,曲线无明显阶跃点,为用户提供了良好的使用界面。
从用户界面响应能力和高速串口数据采集、传输能力两个方面测试软件效果。从用户界面来看,软件反应用户操作应达到准确迅速,曲线显示稳定流畅,无延迟、断层现象的要求。从数据采集传输来看,原始数据应达到读取及时,无丢包现象的要求;程序应运行稳定,无死锁现象。测试结果表明,软件能够快速准确地响应用户的操作,ACU上传数据读取及时无丢包,数据处理分析准确快速,数据绘图显示实时稳定,达到设计要求。
4 结束语
本文以Labwindows/CVI软件为基础,设计了一个动中通控制系统软件,通过ACU上传的数据进行实时画图,清晰画出天线角度偏差值、直观展现卫星旋转角度、实时监控信号强弱,增强用户对天线的实时控制能力。其中,运用了基于安全队列的多线程技术,实现了软件4大模块的并行执行,保证了每个任务可以有充足的时间可靠地完成任务,避免软件出现反应延迟现象。使用线程安全队列技术,保护了线程间共享数据的安全,防止数据死锁,软件崩溃。使用Timer控件技术定时判断安全队列中数据的存储量,进一步避免了数据在传输过程中的丢包现象。最后,工程试验验证了本软件在功能上和性能上的快速稳定性,为系统工作的监控、调试以及故障诊断提供了充分的技术支撑。
参考文献
[1] 沈晓卫,姚敏立,李琳琳,等. 宽带移动卫星通信低成本组合姿态确定算法[J]. 西安交通大学学报,2011,45(6):64-68.
[2] WU Z W, YAO M L, MA H G, et al. Low-cost antenna attitude estimation by fusing inertial sensing and two-antenna GPS for vehicle-mounted satcom-on-the-move[J]. IEEE Trans Veh Technol,2013,62(3):1084-1096.
[3] 田方浩,姚敏立,伍宗偉,等. 低成本动中通姿态估计算法[J]. 宇航学报,2015,36(9):1036-1042.
[4] 薄志峰. 基于LabWindows/CVI的电动舵机自动化测试系统设计[J]. 国外电子测量技术,2015,34(5):66-69.
[5] 张扬,肖世德. LabWindows/CVI平台下虚拟信号分析仪的设计[J]. 自动化仪表,2016,37(2):89-94.
[6] 张煊工,陈雷. 基于LabVIEW的RS232通信协议时间装定模块研究[J]. 中国测试,2014,40(z1):139-141.
[7] YU Q F, ZHENG D Z, YANG Yi, et al. An arc fault detection method based on wavelet feature extraction and the design & realization by LabWindows/CVI[J]. Journal of Computers,2013,8(2):417-424.
[8] YANG S F, DAUDI S. Simbeye. Computerized greenhouse environmental monitoring and control system based on LabWindows/CVI[J]. Journal of Computers,2013,8(2):399-408.
[9] 白渚铨,张晓明,王宇. 基于LabWindows/CVI的数据处理软件设计[J]. 计算机应用与软件,2015,32(4):30-33.
[10] BENHUR A, WESTON J. A Users guide to support vector machines[J]. Methods Mol Biol,2010(609):223-239.
[11] 牛云鹏,王小鹏,房超,等. 利用LabWindows/CVI多线程技术实现实时数据采集[J]. 电子测试,2011(12):41-45.
[12] KATALIN A. Vibration detection of the electrical motors using strain gauges[J]. Procedia Technology,2016(22):.
[13] 陈曦,廖明夫,邓旺群,等. 柔性转子动平衡测试数据库系统开发与验证[J]. 测控技术,2015,34(11):24-28.
[14] EON K, KLAUS E. Assessment of accuracy and repeatability of anterior segment optical coherence tomography and reproducibility of measurements using a customized software program[J]. Clinical and Experimental Optometry,2012,95(4):27-32.
(编辑:刘杨)