卫星载荷软件的层次化设计
2012-03-18黎佩南
黎佩南
(中国西南电子技术研究所, 成都610036)
1 引 言
随着数字化技术和器件水平不断发展,一个任务系统中越来越多的功能依赖软件来实现,航天载荷也不例外。但是,航天系统任务固有特点使载荷软件在可靠性上具有比其他类型软件更高的要求,同时,随着技术的发展和应用的需要,近年来,学术界提出了快速响应、软件星等技术,要求载荷软件具有快速开发、临时组装、使用灵活等特性。而传统的航天产品软件开发以结构化设计为主,软件完全依据载荷任务而定制,通用性差,即使是功能相同的模块,在不同平台之间也难以移植,使载荷软件在研发周期、成本、测试遍历覆盖等方面难以满足未来任务的高节奏要求。
本文针对未来软件星、快响卫星载荷的可能需求,提出一种基于模块的分层综合软件设计思路,通过对载荷可能功能的梳理,提炼成若干功能模块,按照组合化思路构建系统软件体系,方便功能裁减、设计验证、分块测试。这样,一些已经经过使用验证的模块可以方便地在不同平台间移植,不仅缩短了载荷软件研发时间,降低了开发测试成本,而且有效地提高了可靠性。
2 卫星载荷软件的功能分析
不同的卫星,其载荷完成的任务各不相同,但对于载荷软件来说,其功能却有相同或相似之处。总的来说,载荷软件可看做一个信息交换中心,实现有效载荷与星务平台及星间链路之间的数据交换,因此在设计时可以采取“弱化载荷实体功能、强化信息管理与交换功能” 的思路,将载荷软件的任务模型提炼为“接收、发送、执行”,即:接收和解释星务平台下发的指令,根据指令调度和控制载荷各设备去执行相应任务;接收并封装各载荷设备在工作中产生的数据,上报星务平台。可以将载荷软件功能模块进行如图1 所示的划分。
图1 载荷软件的功能划分Fig.1 Function partitioning of payload software
3 载荷软件的层次化设计
层次化设计的关键在于对软件所实现功能和任务的分解,上层设计只需要底层软件部件的功能和接口,低层软件部件内部工作所需的信息保持隐藏状态[1]。通过对载荷软件功能的分析,可将其分为如图2 所示的层次。
图2 载荷软件的功能划分Fig.2 Hierarchical partitioning of payload software function
根据软件各部分实现的功能,整个软件分为3层,即系统层、协议层、应用层。
3.1 系统层
系统层包括操作系统和端口驱动,是整个软件运行的支撑平台,提供实时多任务环境,实现整个软件与硬件的接口。
3.1.1 操作系统
20 世纪90 年代以来,实时多任务的操作系统(以VxWorks 和RTEMS 两大系统为主)开始大量应用在卫星平台上,这两种操作系统都具有实时性强、占用系统资源少、支持多任务、内核可裁剪等特点,是当前航空航天和军工领域主流的嵌入式操作系统。以VxWorks 为例,它是由400 多个相对独立、短小精炼的模块组成,包括多任务环境(Kernel)、文件系统、虚拟内存管理、网络协议栈、I/O 系统接口等,可根据实际使用情况进行裁剪和组合,甚至可以裁剪到只剩下最简内核(任务的管理与调度,称为纳核,可以只有8k)。
3.1.2 端口驱动层
端口驱动层用于对具体的硬件设备进行管理和服务, 封装各种硬件接口(如RS422、CAN 总线、LVDS、1533B、1394 等)的读出和写入操作,使上层软件完全不必考虑硬件类型、地址、时序等,只需要调用端口驱动层提供的读写函数。端口驱动程序主要完成以下工作:相关设备的初始化、底层输入输出函数与上层标准输入输出函数的挂接、相关设备与对应驱动程序的挂接。为了降低软件内部模块的耦合度及提高效率,该层的函数应只针对单一接口进行读写,不提倡在这一层进行组帧、优先级判断等其他操作。为提高适应性,可将硬件接口的地址做为输入参数,这样,针对不同的平台,只需改变地址,就可实现同类型接口的读写,而不必对软件进行修改。
系统层各部分与硬件紧密相关,不同的主板,甚至不同的芯片所对应的软件都不一样,但是由于星载设备一般优先使用成熟技术的特性,技术的沿用性很强,因此相对来说,这一部分的变化反而是最小的,只需针对不同的系统进行简单修改即可。
3.2 协议层
包括输入输出和数据处理,用于实现整个系统的数据接收、发送、分拆、封装等。
3.2.1 输入输出层
输入输出层调用端口驱动层提供的函数,实现对不同接口的读出和写入数据。不同的卫星平台,其接口有所不同,在输入输出层按照接口进行模块化设计,便于裁剪,可以完成不同卫星平台硬件接口的完全封装[2]。
数据输入一般采用中断(实时性要求高,如上位机下发的OC 指令、任务包指令、存储指令等)和定时读取(实时性要求低、设备状态和参数等)两种方式,为了保证系统的高效运行和模块化,一般只将数据存放在接收链表中,而不做任何处理。需要注意的是,每次向链表中插入新的数据时,必须遍历链表,根据其优先级来确定插入的位置,以确保优先级高的数据在链表中的位置始终比优先级低的数据靠前,以提高实时性,如图3 所示。
图3 数据按优先级插入链表Fig.3 PRI data insertion chain
数据输出一般遍历消息队列、链表,对其中的数据进行顺序发送,而不判断其优先级。
3.2.2 数据处理层
数据处理层完成对数据的解包和封装,即将从数据链表或消息队列中读取的数据按协议解包,取出有效数据,或将有效数据按协议进行封装,插入数据链表或消息队列。一般来说,同一硬件接口的数据,其封装结构都是一致的,为降低模块之间的耦合度,可按不同接口或协议分别编写解包和封装模块。
数据处理层完成对数据协议的隔离,使应用层和输入输出层可以直接使用有效数据,而不必关心具体的协议,这样,一些与协议无关的过程可以最大限度地复用和移植。
3.3 应用层
该层实现载荷软件的具体应用,在对其功能和任务进行抽象后,可将载荷软件划分遥测轮询、任务调度、存储管理、设备管理、故障处理、公用模块等。
3.3.1 遥测轮询模块
定时查询各设备状态,并将查询的结果按照协议要求封装并上报。遥测轮询模块包含两个功能,遥测响应和定时轮询。
(1)遥测响应:对星务平台各类遥测指令的响应,收到遥测指令后,从缓冲区中取出需要的数据进行拼装,发送给星务平台。
(2)定时轮询:定时查询所监控设备的状态、参数等,将数据存放在缓冲区中,在收到遥测指令时可随时组装。
3.3.2 任务调度
任务调度是整个软件的核心,与卫星所执行的具体任务密切相关。该模块完成优先级调度、流程控制、内存管理等功能,几乎不具有通用性。
3.3.3 存储管理
卫星下行通道带宽有限,星上采集的数据往往不能及时传回地面,需要在星上进行存储。该模块拼装待存储的数据,调用相应存储接口的输出函数,实现对数据的存储。
3.3.4 设备管理
该模块实现对各种设备的控制处理,可根据所属设备的类型分为若干子模块,如接收机、天线、望远镜、红外线等设备控制、设备的加断电、主备切换等。对一些用于组网或系列发射的卫星,由于其功能具有相似性或延续性,一些相同设备的控制模块可以重复使用。
3.3.5 故障处理
由于卫星所处环境的特殊性(高真空、超低温、强辐射等,复杂的空间环境可能导致硬件故障、程序跑飞、应用程序数据错误、内部操作系统数据错误以及由于数据错误带来的其他不可预料的后果[3])和星载软件本身的特性(嵌入式为主、实时性要求高、自动化程度高、维修困难),星载软件有着远高于其他软件的可靠性要求和独特的故障处理模式。故障处理模块完成软件的查错、容错、纠错等功能,通常采用的方法有指令冗余、软件陷阱、软件看门狗、数字滤波等。
3.3.6 公用模块
公用模块用于实现软件中一些被多次使用的功能,如链表管理、校验计算等、内存拷贝、数据比较等。
应用层是实现载荷软件功能的关键,与卫星本身的任务密切相关,不同的卫星其应用层的实现千差万别,因此在设计时将任务管理单独列出,使载荷软件的差异化设计尽量限制在一个模块中,同时由其他模块完成相对通用的功能。由于星载应用的特殊性,星载产品设计的第一原则是尽量采用成熟技术,一些共用的技术甚至是接口协议,具有很强的延续性,特别是用于组网的系列卫星,这样的层次和模块划分可以使其他模块能够最大程度地被移植和复用。
4 结束语
随着卫星应用的发展,载荷的功能越来越强大,载荷软件的也随之日趋复杂,其架构成为制约其质量的重要因素。在软件代码实现前合理规划软件架构,设计嵌入式软件框架,有利于分工协作和联合调试[5]。本文提出的卫星载荷软件层次化设计方法已在某系列实验卫星中使用,采用这样的设计方法,使整个软件架构清晰、接口明确、高内聚、低耦合,系统层、协议层无需修改即可移植,大大缩短了开发和测试时间。因此,这样的方法具有工程实践指导意义,也可供其他系统借鉴。
[ 1] 汤铭瑞.航天型号软件研制过程[M] .北京:宇航出版社,1999.
TANG Ming -rui.Aerospace Program Software Developing Process[ M] .Beijing:China Astronautic Pub lishing House,1999.(in Chinese)
[ 2] 王磊,袁利.卫星综合软件的体系结构研究[ J] .空间控制技术与应用,2010, 36(1):31-36.
WANG Lei, YUAN Li.Integrated Software Architecture for Satellites[ J] .Aerospace Control and Application, 2010, 36(1):31-36.(in Chinese)
[ 3] 李新明,李小将, 李艺,等.分布式卫星嵌入式计算机系统结构设计方法[J] .中国空间科学技术,2010(4):1-8.
LI Xin-ming, LI Xiao-jiang, LI Yi, et al.M ethod of Designing Embedded Computer System Architecture in Distributed Satellite[ J] .Chinese Space Science and Technology,2010(4):1-8.(in Chinese)
[4] 黄琪, 姜涛.星载计算机中实时多任务软件的设计[ J] .通信对抗,2009(1):58-61.
HUANG Qi, JIANG Tao.Real-Time Multi-Task Software Design of Spaceborne Computer[ J] .Communication Countermeasures, 2009(1):58-61.(in Chinese)
[5] 程敬原.VxWorks 软件开发项目实例完全解析[M] .北京:中国电力出版社,2005.
CHENG Jing -yuan.VxWorks software development project case study[M] .Beijing:China Electric Power Press, 2005.(in Chinese)