王根源 李民 马蕾
摘 要:航天器在发射前需进行空间环境模拟试验,模拟航天器飞行的真空、冷黑和外热流环境,试验中必须对航天器上多个测温点进行实时监测。现有温度监测软件仅能实时显示温度数值和绘制温度变化曲线,对于航天器的温度分布显示不够直观。
本文利用VC++和Open Inventor搭建三维温度监测软件,通过温度采集设备实时监测各测点温度,在监测窗口显示航天器模型,并利用不同颜色对航天器各部件温度进行区分,实现三维温度监测功能。
关键词:空间环模试验;三维温度;监测软件
引言
航天器在研制过程中,必须在地面模拟的空间环境中进行试验(简称环模试验)以提高其可靠性,其中航天器轨道飞行中的温度分布,以及温度条件下航天器各组件的性能与功能是重要的考察要素,所以环模试验中需实时对各部组件的温度进行监测[1]。现行的温度监测软件可通过数据采集器读取各测点温度,但是只能以数值和变化曲线的形式进行显示,不能直观的展现航天器在试验中的实时温度分布情况。本文基于可视化技术,根据当前采集到的各部件温度,直接在卫星模型上更改相应部件的颜色,帮助研究人员和测试人员直观地掌握航天器实时的温度分布状况[2]。
2总体设计
本文利用VC++和Active X控件编写了航天器环模试验三维温度监测软件,通过数据采集器以一定的时间间隔读取航天器和环模设备各测点温度数据,并实现了温度数据的数值显示、曲线绘制、超限报警、数据存储功能。基于Open Inventor搭建可视化模块,根据设定的温度-颜色关系,对环模设备和航天器各部组件进行着色渲染,实现温度的直观显示。
2.1 系统结构
三维温度监测软件结构如图1所示,温度数据由若干个温度数据采集器测量,通过以太网与控制计算机连接,软件的温度采集模块按设定的时间间隔读取数据采集器的测量数据,根据配置文件,将温度数值与各部组件匹配,以列表和曲线的形式显示。用户可在超限报警模块设定每个通道的温度报警范围,当该通道的温度超过报警范围时,可以发出声光报警给予提示。软件数据存储模块每天自动创建csv格式的文件,保存所有温度数据。
三维显示模块可显示测试产品、环模设备及配套工装等的三维模型,每个需要测温的部件作为一个模型节点,根据该部件的温度和设置好的温度-颜色配置,实时更改每个节点的颜色属性,温度较高时采用偏红的暖色系,温度较低时采用偏蓝的冷色系以此直观显示各部件的温度分布。
2.2 界面设计
软件采用CPropertySheet为主界面,包含三个属性页。第一个属性页显示三维温度模型,并配以温度--颜色对照尺,以及一些用于操作或显示的控件。第二个属性页采用网格控件来显示所有温度测点的测点名称、当前温度、温度范围、设置信息、超限报警等信息,以及实现对单个或者多个通道的模型显示、温度范围等进行设置。第三个属性页为绘制温度曲线界面,每个曲线绘制窗口可最多显示12个通道温度随时间变化的曲线。
2.3 几何建模
几何建模通过VC++与Open Inventor联合编程实现。Open Inventor是一个面向对象的交互性三维图形软件开发包,操作者可以在其提供的三维图形浏览器中以任意比例或角度观察模型[3]。但是通常Open Inventor绘制零件几何模型的工作较为复杂,所以实际由ProE建模再将模型和装配关系转换为可用的“.iv”格式后,再从Open Inventor中搭建模型。每个模型作为一个节点,该模型的纹理、运动等属性作为其子节点,通过改变其子节点的域的数值即可实现外观、运动状态等的显示[3]。航天器部件模型和环模设备间也应遵从一定的父子关系,父节点运动状态改变时,子节点也会相应改变。
2.4 多线程设计
监测软件共包含四个线程,分别为主界面线程、语音报警线程、数据读取线程和数据写入线程。主线程负责响应Windows消息,如菜单命令、定时器事件、窗口大小变化、关闭窗口等,以及处理数据写入线程发来的消息,并实现三维温度及其他数据的显示功能。
主线程中设置一个时长为30秒的定时器,定时器超时后就通知数据读取线程去查询数据采集器的当前测量温度,通知数据写入线程将温度数据写入文件。同时设置一个10秒的定时器,定期检查计算机与数据采集器间的通信连接情况,并根据情况进行重连操作。
主线程与数据写入线程间通过信号量进行通信。主线程与数据写入线程之间通过信号量进行通信。串口线程调等待信号量变成有信号状态。主界面线程则在定时器超时后,设置该信号量为有信号状态,使得数据写入线程从等待状态转入到就绪状态。数据写入线程得到主界面线程的通知后,将数据读取线程获取的温度数据写入文件,并发送一条消息给主界面线程。主界面线程收到消息后,更新所有的相关页面,并检查是否有温度超限报警发生。如有超限,则启动语音报警线程。
3主要模块设计
3.1 温度采集模块
温度采集模块用于实现从Kethley 2701数据采集器读取各测量通道的温度值,其功能由数据采集器管理类实现。该类封装了对数据采集器的操作、数据读取线程以及数据写入线程。主界面线程通过访问数据采集器管理类提供的函数实现对数据采集器的访问,以及数据的处理和保存。每当定时器超时,即发送SCPI指令至数据采集器,数据采集器接收指令后将温度数据发送到连接的Socket中,当读取数据进程监测到Socket中存有数据时将其接收并处理问温度数值。当需要从控温仪读取当前温度数据时,主界面线程就调用数据采集器管理类提供的SaveData函數,由SaveData函数激活数据写入线程。数据写入线程则将已经读取的温度数据发送至主界面线程,并写入到csv格式的文件中。读取数据线程和数据写入线程间采用了互斥机制,避免同时访问温度数据而产生信息处理矛盾和错误。
3.2 三维温度显示模块
温度采集模块完成温度数据采集后,三维温度显示模块对模型进行更新。Open Inventor提供的SoTexture2类可以创建一个2D的纹理贴图,然后将纹理图映射到3D模型表面。本文中的纹理贴图通过调用SoTexture2节点的Image域,创建RGB颜色纹理映射,以区分航天器内的不同温度特征。需要注意的是,由于模型本身底色的原因,在调用纹理渲染SoTexture2节点时,属性应选择DECAL模式,即使用纹理颜色代替底色,而不是缺省的混合运算MODULATE模式[4]。RGB中每个颜色分量均由0~255的数值表示,温度较高时,提高暖色调的R值,温度较低时调高冷色调的B值,温度适中则相应调高G值。假设采集的温度最高值为TMAX,温度最低值为TMIN,中间温度TMID=((TMAX+TMIN))·2,则温度与RGB各分量的对应关系如下所示:
最高温度TMAX时:RGB(255,0,0);
中间温度TMID时:RGB(0,255,0);
最低温度TMIN时:RGB(255,0,0);
此外,还可通过SoText节点将部件名称和当前温度數值显示在该部件模型附近。
3.3 监测配置模块
为提高操作的灵活性,方便对网络设置、监控通道、温度范围等进行设置,软件提供了配置窗口,以便让试验值班人员按照实际情况进行设置,并将配置信息保存在监视配置类里,每次打开软件可自动读取上一次的配置信息。监视设置类使用了单件模式,利用C++面向对象程序设计的访问控制机制,将构造函数和析构函数设计成private函数,确保无法直接生成类的实例,然后提供一个public的静态访问点(本文中的GetInstance函数)和一个private的类实例的静态指针。静态访问点首先检查类实例的指针是否为空,为空则生成一个类的实例并赋值给类实例的静态指针,否则直接返回类实例的静态指针[5]。
3.4 碰撞检测模块
环模设备中空间有限,工装和测试产品形状多不规则,因此一些需要工装或产品运动的试验,可能会发生碰撞,造成产品的损坏。Open Inventor提供了多种用于碰撞检测的类。将环模设备、工装等相对不会运动的节点设置为静态节点,运动模拟器和产品设置为动态节点,当检测到某一动态节点的transform节点非空,即该节点发生了运动时,就调用碰撞检测函数checkCollision检测该动节点及其子节点和静态节点之间是否发生了碰撞。一旦碰撞检测函数发现了碰撞的发生,就会调用一些碰撞响应函数,可以用来显示碰撞点的位置、高亮显示碰撞对等。这样在试验之前即可发现碰撞风险,提高试验的可靠性。采用这种碰撞检测方式,只对正在发生运动的节点和其他节点进行碰撞检测,计算量较小,检测效率较高。
结论
本文通过将温度以颜色的形式赋予航天器模型,实现了三维温度的显示,并结合数据采集、数据保存、碰撞检测等模块,操作者可以在航天器环模试验对温度进行直观地实时监测,方便地对各测点温度范围进行设置并查看超限情况。
参考文献:
[1]黄本诚,马有礼 航天器空间环境试验技术[M].北京:国防工业出版社.2002:1-3.
[2]毛鑫龙.深空目标红外辐射特性仿真和温度场可视化[D].南京理工大学硕士学位论文,2014:55-57.
[3]阎锋欣,侯增选,张定华,等.Open Inventor程序设计从入门到精通[M].北京:清华大学出版社.2007:7-10.
[4]Josie Wernecke. The Inventor Mentor [M]//Silicon Graphics, 1994:165-173.
[5]微软.MSDN Library for Visual Studio 2008[CP/DK], 2007.