某静止卫星海洋辐射计指向镜的操控软件设计

2020-08-03 01:50陈建栋房陈岩
计算机测量与控制 2020年7期
关键词:运转指向自动

陈建栋,房陈岩,杨 静

(1.上海济物光电技术有限公司,上海 201815;2.中国科学院上海技术物理研究所,上海 2000833.上海德虹科学器材有限责任公司,上海 200083)

0 引言

静止卫星海洋成像辐射计是用于在静止轨道上进行水色定量化观测的遥感仪器。其主要任务是海洋生态环境探测、海洋灾害探测、海洋动力过程探测、大气探测,为海洋科学研究等服务[1]。

静止轨道水色卫星与地球同步,尽管只覆盖全球部分区域,但是由于相对地球静止,可将观测周期由天提高至小时,实现高时间分辨率的对地观测,尤其有助于复杂多变的短期过程研究[2]。虽然低轨海洋卫星时刻在监测海洋状况,但是同一个地区每天只能观测一次,看不到一天内的变化情况。无法观测整个海洋现象一天内是如何动态变化的,因此需要发展静止水色卫星[3]。静止轨道遥感卫星探测具有高时间分辨率连续探测等优势,已经成为当前国际遥感探测领域一个重要发展方向[4],而海洋卫星定轨与遥感定位精度是当前行业研究热点[5]。

静止卫星成像辐射计样机GOR(geostationary ocean radiometer)采取二维指向镜加滤光片轮和面阵探测器的技术方案。通过多角度、多谱段、多通道成像进一步提高稳定性和信噪比[6]。静止卫星指向镜基于超精密六轴转台,仪器依靠二维指向镜做东西与南北方向的运动指向,实现覆盖区域的观测和调整。由于二维指向镜是各个光学谱段的总输入口,因此二维指向镜的设计和控制运转尤为重要。

本文借助GOR光学和机械平台,设计了一款通过串口通讯控制海洋辐射计指向镜转动的操控软件,完成转台实时操控和自动运转控制以及显示功能。

1 光学系统转台结构及原理

超精密6自由度PI(physik instrumente)公司定位转台应用于静止卫星海洋成像辐射计预研项目的二维指向镜。设计使用中,指向镜的安装位置如图1所示,左侧板为指向镜的安装位置,右侧板为基座,中间六轴受控可伸缩,通过微机驱动控制达到左侧板六自由度运动的效果。

图1 超精密6自由度PI公司定位转台示意图

在GOR项目中采用二维画幅式成像模式,通过面阵静态成像获得静态面阵图像,通过指向镜运动,实现一定范围内视轴的指向。二维指向镜有两个转轴,转轴定义正交的X轴和Y轴,其中X轴需要转动范围±5°,Y轴需要转动范围±10°。指向镜X、Y坐标轴的转动通过机械结构设计演化为对PI转台的U轴和V轴的转动控制。GOR依靠二维指向镜实现观测区域的调整和覆盖,海洋探测目标通过光学系统传递给后端探测器, 光学系统如图2所示。

图2 光学系统示意图

光学转台系统原理为:对成像目标探测需要作的视轴转动,通过系统计算机处理器驱动控制精密机械转台运动,带动光学指向镜规律运转,从而控制光路的传递方向,使探测器达到对探测区域的全覆盖。

2 设计需求

根据外场试验的光学要求,需要控制转台按5×5的矩阵点,按蛇形逐点运动到每个位置,停顿一段时间且该时间可调,以便于指向镜的稳定和光学探测系统做一定的采集存储图像数据工作。在某些特殊情况,这样的连续运动状态,需要急停和继续自动运转,这就需要转台到某点位置作停留时,可以控制转台暂停当前状态直到继续自动运转。

由于PI公司转台的基础控制软件是基于LabView的上位机软件,再开发性低,不具备试验所要求的软件功能。而通过手动操作,又有操作困难,定时不准的问题。外场试验效率较低。针对这一问题亟需开发一款具有定时运转、定点停顿、多参数可调等功能的定制自动软件。

3 操控软件的全局设计

操控软件采用结构化程序设计方法。基本思路是:把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围之内。具体说采用自顶向下、逐步细化、模块化设计、结构化编码来保证得到结构化的程序[7]。在Windows应用程序中,对话框是应用程序界面的重要形式。不论是打开文件,还是查询数据,以及数据交换时都会用到对话框,对话框是实现人机交互的一条途径[8]。软件使用VC++开发设计,为了便于编程嵌入小番茄控件。利用MFC应用程序向导创建对话框应用程序。在MFC应用程序向导可选单文档、多文档、模态和非模态对话框的创建。由于应用程序只是在单个对话框中实现特定功能,软件设计选择模态对话框的创建和显示。使用MFC搭建软件整体框架。添加操作按钮和输入输出编辑框,软件在功能上共分为四大模块:通讯的建立和结束模块、参数导入模块、运动控制模块(含位置初始化、自动运转模块、UV轴转角定位控制、多线程技术子模块)、数据显示模块。

4 软件模块的实现方法

操控软件与PI的平台控制模块接口相互连接,PI的平台控制模块库函数均是以动态链接库的形式提供。动态链接库通常用于封装一些功能函数,在不公开源码的情况下可以供其它应用程序开发使用。PI公司二次开发程序包中提供了动态链接库文件PI_GCS2_DLL.dll和PI_GCS2_DLL.h[9]。操控软件设计中需要插入和调用PI公司二次开发程序包中的库函数文件。整个软件工程项目建立后,将这两个文件加入到项目工程文件。

在软件功能模块开发中需要调用函数库的以下函数:与PI机构建立RS-232串口通讯连接函数PI_ConnectRS232(2,115200);断开连接函数PI_CloseConnection(ID);移动某轴到某绝对位置函数PI_MOV(ID,axis, &dVal);得到实际位置函数PI_qPOS(ID, axis, &dPos);检查轴系是否有所运转函数PI_IsMoving(ID, axis, &bIsMoving)。其设计需求功能如图3所示。

图3 操控软件功能图

4.1 通讯的建立和结束模块

操控软件与PI的平台控制模块可以通过以太网或USB2.0或串口通讯方式。串口通讯连接简便快捷,选择异步串口通讯方式。在计算机中对RS-232端口转接成RS-485,实际通过RS-485串行接口进行通讯,提高通讯距离和可靠性。通讯的建立和结束模块实现过程如下,主要是连接串口和设置波特率,关闭串口。打开和关闭普通定时器。

4.2 参数导入模块

操控软件的参数导入模块由跨度参数、自动运动模式参数和时间参数3部分组成。自动周期运动模块U轴和V轴的单次跨度参数可以设置。PICTLDlg.cpp主程序中,初始化设置为0.3°,开始自动运动模式下,若需要设置新的运动跨度值,可以从界面编辑框输入新值,程序从IDC_EDIT5编辑框获取输入值传递给U_step、V_step变量。

自动运动模式参数包括常用2×2、5×5模式和自设模式。由于试验中常用的巡扫模式为2×2、5×5模式,因此程序中通过添加单选按钮控件,用户可选择2×2、5×5和自设模式中的一种。自设模式运动频次可以设置,需要通过该模式下的编辑框输入2~10之内的整数输入,这样可以增加程序的使用灵活性和拓展性。该参数的输入值具有记忆功能,在程序关闭后,巡扫模式修改按钮按下后,参数存储在9pictl.ini文件中。程序重新开启,会初始化上次的模式选择。

巡扫模式下,用户需要作一段时间的图像数据存储和处理工作。转台运转到特定点的坐标位置后,需要停顿一段时间。该参数定义为运动时间间隔InterTime。通过InterTime数据对象传递给调用的系统Sleep(1 000*InterTime)函数,调配停顿时间。

4.3 运动控制模块

1)位置初始化:

自动运转是基于光学指向镜的初始化位置而运转的。在自动运转之前,需要找到指向镜的零位。软件设计回归零位按钮,通过定位控制函数OnReset()使六轴回归零位。

2)自动运转模块:

操控软件中的自动周期运转模块,采用循环结构程序设计。静止卫星成像辐射计的指向镜运转模式缺省为5×5巡扫模式,而且该模式的程序控制具有典型性。本文以巡扫5×5运动模式来论述程序算法设计,自动巡扫5×5模式下PI转台运动轨迹为单点蛇行运转。转台运动的轨迹和转次计数如图4所示。

图4 定位转台5×5模式巡扫模式示意图

采用增量计算当前运动轨迹下一点的坐标,通过函数PI_MOV(ID, axis, &dVal),移动某轴到某绝对位置。每次运动方向为直线,U、V两轴并非同时运动。通过函数PI_MOV(ID, axis, &dVal),移动某轴到某绝对位置。在实际使用中横向定义为U轴,纵向定义为V轴。采用for( )语句进行两极嵌套循环。通过计算纵向坐标点g_j数据的单双数,判断U轴正向转动还是反向转动。UVSet_Upos为初始化的U轴坐标值。通过g_i变量的自动加一,完成0~1,1~2,2~3,3~4四次横向转动。反向转动反之亦然。完成一行横向运转后,跳出第二级for循环,纵向转动一个格点,g_j变量自动加一,若第一级for循环仍然满足运行条件,则再次运行第二级for循环。依次反复,直到g_j变量由4变为5后,跳出两极循环从而周期运动功能完成。

软件编写以用户为本,在使用过程中编写者与用户相互沟通协调,软件功能增量添加,逐步变大变复杂。在程序后续版本还附加停转控制功能,二级for循环中适时加上0x55==StopFlag判断,若用户发出急停指令,通过break语句跳出两级for循环,停止自动运转模式。当用户恢复状态后可通过继续按钮来继续进行当前自动运转的状态。

指向镜的转台5×5模式巡扫模式自动运转设计算法流程图如图5所示。

图5 自动运转5×5巡扫模式程序设计流程图

自动运转5×5巡扫模式程序代码设计如下:

for (g_j=0;(g_j< 5)&&(0x55==StopFlag);)

{

//g_i为运动频次

for(g_i=0; (g_i < 4)&&(0x55==StopFlag); )

{

char axis_u[] = "U";//控制U轴运动

if (0==g_j%2 )//j为0,2,4行正转

!MoveTo(ID, axis_u, UVSet_Upos+Ustep*(g_i+1) ) ;

else//j为1,3行回转

MoveTo(ID, axis_u, UVSet_Upos+Ustep*(3-g_i) ) ;

if (!(4==g_j && 3==g_i) )//最后一点不停顿

Sleep(1000*IntTime);//到位后停顿60s间隔时间

if (0xAA == StopFlag)//查询暂停模式 break;

g_i++;

}

// V转一下,j为4时V轴已转完,内循环暂停

if ((g_j < 4)&&(0x55 == StopFlag))

{

char axis_v[] = "V";//转到V轴运动

MoveTo(ID, axis_v, UVSet_Vpos+Vstep*(g_j+1) );

Sleep(1000*IntTime);//到位后停顿60s

}

if (0xAA == StopFlag)//查询暂停模式

break;

g_j++;

}

3)转轴定位控制模块:

U轴的转动控制操作,通过编辑框中输入的定位数据。V轴类似。通过UV轴定位按钮调用OnUVSet()函数,使得转台定位于给定的位置。

4)多线程控制:

由于在自动运转控制程序中,使用了普通定时器函数SetTimer(1,20,NULL)并设置定时器的时间周期为20 ms。程序编写之初,转轴位置的显示刷新时间也采用该定时周期。在控制软件和转台机构联机调试中,出现转轴定时运转的过程中,位置数据监显卡顿,并非实时显示,而是到一个位置镜面机构停顿下来时,才显示数据。分析原因是程序中普通定时器函数中,包含转轴位置的显示和循环转动控制两个任务。其中循环转动控制任务比较费时,占用较多资源。在一个定时器循环中产生冲突,出现抢占资源情况。如果用户在程序中需要同时实现多个操作,必须采用多线程技术[10],实现界面操作的实时控制和响应。因此软件采用改进的方法,添加多线程控制函数。将位置数据显示放在普通定时器里处理,自动运转控制放在新创建的线程里处理。由于使用MFC搭建软件整体框架,在MFC应用程序中,使用AfxBeginThread函数创建一个线程比较简便易行。定义一个名为ThreadData的结构体数据类型,包含停顿时间参数,U向跨度和V向跨度。

自动运转5×5巡扫模式控制下定义一个ThreadData数据类型的TD变量,把具体数据赋值给3个成员函数。使其在内存中占用一段连续空间。并拥有一个首地址&TD。然后通过AfxBeginThread函数创建转台运转控制线程:AfxBeginThread(MoveThread,(LPVOID)&TD,0,0,0,NULL);

调用MoveThread()线程函数,通过首地址&TD传递数据参数,执行转台运转循环。定义一个线程函数,用于执行转台运转循环。

UINT MoveThread(LPVOID pParam)//转台运转控制线程

{

ThreadData *pPm = (ThreadData *)pParam;

unsigned short IntTime = pPm->InterTimeThread;

double Ustep = pPm->U_stepThread;

double Vstep = pPm->V_stepThread;

for (g_j=0; ; ){......} // g_j为V运动频次

}

4.4 数据显示模块

数据显示模块包含UV轴实时位置监现和自动运转频次显示组成。UV轴实时位置只要转轴运转,通过采集U_pos,V_pos数据。自动运转模式下,设置了图像计数器PictureNum,若运动一个位置,则图像计数器自动加一,通过界面显示,可使用户得知当前运动频次。通过设置一个20 ms的普通定时器,通过更新对话框中显示数据,得到位置数据和运动频次显示。应用多线程程序设计之后,再次通过控制软件和转台机构联机调试,操控软件能实时显示和响应界面操作。之前界面拖动,数据显示,界面最大化,最小化,操作卡顿的问题得以解决。

5 软件实现与外场试验

该静止卫星指向镜的操控软件采用模块化的程序设计方法,这种程序设计方法便于程序编写,阅读,修改和维护,能提高程序可靠性,保证程序的质量。该软件设计是一个项目实战过程,在设计中先搭好整体框架,再把各个模块增量设计加入。软件开发是与用户相互沟通协调的过程,有一个增量添加逐步变大变复杂的过程。例如自动运转模块从逐行扫描模式,经过沟通改为蛇形扫描。软件增加巡扫模式选择、停转控制、一键初始化零位功能。自动运转通过多线程技术,解决多任务冲突、解决程序实时性、解决卡顿和等待问题。操控软件设计完成后通过编译调试,生成的操控应用软件界面如图6所示。

图6 操控软件界面图

项目组在杭州湾大桥构建了基于海上塔台的水体光谱连续采集系统。使用本文所设计的GOR操控软件进行外场的多次试验,基于现场观测资料,研究人员系统评估了GOR的遥感监测精度;海上塔台观测的水体光谱资料已应用于我国“天宫二号”空间实验室水色成像仪的在轨测试。静止卫星指向镜基于PI六轴转台特有的六柱伸缩机械结构,采用自动运转操控软件,到位后指向镜自动停顿,时间可调,克服了大惯量转动体在稳定位置附近微振动的问题[11],实现了静止卫星指向镜的高分辨率定位。

6 结束语

本文在Microsoft Visual C++6.0应用程序开发环境下,利用微软基础类库MFC设计开发静止卫星成像辐射计样机(GOR)指向镜的上位机操控软件,软件设计中通过RS-485串口通讯方法连接PI公司的超精密六轴转台驱动器及六轴转台。使用多线程技术,完成基于PI转台的GOR指向镜巡扫模式自动控制,运转多参数可调,数据显示、自动运转急停和继续等多种功能。

通过外场多次试验,充分验证了本文所设计操控软件的功能和可靠性,证实该软件达到设计要求。该软件大大提高了外场试验效率,通过优化界面、功能嵌入,在后续项目开发中可以编写多视图的数据采集处理和操控的一体化软件,体现了本软件良好的兼容性和可扩充性,可以为静止卫星海洋成像辐射计的型号化做好准备。

猜你喜欢
运转指向自动
三角函数的图像与性质的备考新指向
复旧运转
中年级“生本写作”教学的“三个指向”
《狮来运转》萌翻石狮
时来运转
让小鸭子自动转身
自动摇摆的“跷跷板”
关于自动驾驶
傍晚,路灯为什么能自动亮起来?
用英语谈恋爱吧!