传递图像:三个任务间的通信
一台照相机的图像数据刷新会通过其中一个照相机任务写入槽中。在执行完任何必要的像素纠正和子图定位操作之后,该照相机任务会通知ICS有新的图像可以处理。然后ICS根据输入的命令,对该槽中的图像执行就地压缩(不论是有损的还是无损的),然后对图像数据进行打包,传递给“下行”处理程序。只有完成了“下行”处理,该槽才会被释放,供新的图像使用。从图像曝光到为SSI照相机传送图像的事件顺序如图3-7所示。
图 3-7:图像获取和传送序列
如图3-6所示,整个事件的次序是根据图像槽的可达性而定的。如果无法获取槽,照相机任务将会等待一段可配置的时间,使得ICS可以完成压缩和图像“下行”处理,这样就有一个图像槽变得可用。如果ICS在那段时间内不释放槽,该照相机任务就会给地面的操作员生成一条错误信息,直接把该图像保存在照相机中(因为实在没有其他地方可以保存该图像)。
一旦一个照相机设备任务获取一个槽,它在把该槽交给ICS之前,就“拥有”该槽,而交给ICS之后,ICS就拥有该槽。拥有权的验证是基于槽管理器在初始化该槽时所分配给它的槽ID(即ID数值)、图像ID代码和照相机设备任务ID。当某个任务把一个槽交给ICS时,ICS会验证这些ID和之前记录下来的该图像槽的ID是否匹配。
正如之前所述,ICS是异步方式运行,且和任意一个照相机任务并没有密切关系。可以通过利用VxWorks的内置消息队列系统,并且在内存槽管理器中使用共享函数,把ICS和照相机关联起来。图3-8显示了这些步骤的消息序列图(MC)表示方式,这些步骤包括从照相机获取数据到最终把它们传输给“下行”程序。
使用内部消息队列(S/C FSW操作系统管道,代表太空飞行器的飞行软件),这将允许任意一个照相机任务使用和执行从地面“上行”的命令相同的机制,并向ICS发布命令。该命令会保存在队列中,直到ICS完成了其当前的任务。只要有可用的槽来存储图像数据,照相机就会继续获取图片,ICS将轮流检索和处理这些数据,直到队列为空,而不需要考虑照相机当前的工作状态。
注意:图3-8没有显示在成像过程中的错误检查。总之,错误检查和出错处理的代码行数大概和实际上执行处理或者处理该数据的代码的行数相同。在设计生命周期的早期就采用了失效模型效果关键性分析(Filure Mode,Effects,and Criticality Analysis,FMECA)技术,该技术在软件实现和出错处理能力上具有指导作用。
ICS对数据流进行序列化,但是使用图像槽和命令消息队列允许一组图像可以连续快速地(相对而言)获取。这也意味着对于图像获取,存在一定的时间间隙(tming margin),这减少了由于等待图像“下行”处理,操作被挂起的几率。早期的测试命令序列证明了可以执行如下操作:制作短篇“电影”(这么说是因为从SSI照相机下载一张图片大约需要6秒),或者使用不同焦距的RAC或者OM生成大的(30多张图像)数据集合。