宋宏江 高何 卢成志 何晓宇 白少华
(北京空间飞行器总体设计部,北京 100094)
航天器综合测试是卫星研制流程中的重要环节,测试期间需要频繁向航天器上注遥控指令,同时通过遥测反馈检查航天器动作执行的正确性。目前,各类航天器均设计了大量遥控指令(二进制码格式),需要在航天器综合测试现场进行指令编制和签字复核,主要包括间接指令、星务指令、总线指令、数据注入指令以及由上述指令组合而成的任务级指令序列等,用于实现航天器的动作执行及任务操控[1]。这些事先难于准备和充分验证,同时制作的指令数量过多,使用时难于检索和实时上注,无法满足航天器快速测试验证需求。因此本文提出基于Lua脚本的航天器遥控快速测试验证技术,将遥控指令注册为Lua函数,航天器综合测试过程中需要上注指令时,由综合测试平台中的指令控制台发送遥控指令参数,再通过综合测试平台集成并扩展的Lua解释器将脚本语言转换为能够生成遥控指令的函数语言完成指令码字的生成、校验并进行实时上注。
Lua[2-4]是一种嵌入式脚本语言,由标准C编写而成,具备可扩展性好、简单、高效的特点,在其类库的支持下,Lua脚本语言可非常方便地与C语言结合,完成遥控指令生成的流程控制,基于Lua脚本的航天器遥控快速测试验证方法,应用了Lua的下列特点。
(1)Lua脚本语言是基于关联数组和可扩展语法结构设计的语言,具有变量无类型、动态定义类型、面向对象结构、编译产生中间代码和内存自动回收等特点,所以常被作为一种脚本嵌入于其它主系统中。
(2)Lua脚本模块作为一个独立的线程,与主程序和其他线程互不影响地同时工作。Lua脚本模块位于主程序的进程内部,可容易地访问主程序内部的变量和函数。
(3)Lua脚本程序可很好地创建接口,定义数据结构,编码和解码每条指令。由于Lua本身是一种解释性的语言,因此,不需要编译过程,大大缩短了动态链接库方式的程序语言的编写、编译、链接和运行的时间,允许用户运行时编写应用程序,这样,主程序变得更加灵活和实用,非常适合实时性要求高、运行环境多样的场合。
图1 综合测试平台与Lua脚本的调用关系图Fig.1 Relationship between integrated test platform and Lua script
本文中综合测试平台与Lua脚本的调用关系[5]如图1所示。航天器综合测试平台作为测试处理服务器,Lua作为嵌入式脚本,嵌入到宿主语言实现的综合测试平台遥控指令生成模块中,为综合测试平台的遥控指令快速生成功能提供参数配置和逻辑描述;同时综合测试平台遥控指令生成模块又作为Lua的底层扩展库,支撑Lua脚本访问航天器综合测试系统中各种数据和计算资源。
遥控指令快速生成系统遵循平台化思想,在航天器综合测试系统基础上深度融合Lua脚本,通过Lua用来描述各类指令的模型和生成算法,屏蔽各型号指令生成接口协议和数据格式的多样性,实现了航天器综合测试平台和Lua脚本之间的交互通信,解决了航天器综合测试遥控指令快速生成的难题。
设计思路如下:
(1)遥控指令快速生成系统创建一个独立的进程用于完成航天器遥控指令的快速生成任务,该进程启动时加载动态指令生成模块。
(2)当遥控指令快速生成系统收到用户发送的遥控指令生成命令后,对命令进行解析,调用Lua语言提供的luaL_newstate接口函数创建Lua解释器,然后调用lua_checkstack接口扩展Lua的堆栈容量,用来接收用户的指令参数,调用luaL_openlibs接口加载Lua通用扩展库,最后调用lua_register接口向Lua解释器注册遥控指令快速生成的扩展函数。本系统中设计的Lua扩展有:①getparamhex是获取实时参数的函数,供Lua指令文件使用,该函数含有两个参数,第一个参数是DATE.A001形式,第二个参数是%08x形式;②savefile是将数据存储至遥控指令快速生成系统型号目录下,第一个参数为要存储的数据,第二个参数为要存储的文件名;③isocompute是计算字符串的ISO校验,参数为要计算的字符串,返回值为需要计算的字符串加上校验码;④crccompute是计算字符串的CRC校验,参数为要计算的字符串,返回值为需要计算的字符串加上校验码;⑤paramreverse是将字符串按照字节反转的函数,供Lua指令文件调用。
(3)按照Lua语法以及已经在Lua解释器中扩展的包含各种获取航天器综合测试系统资源的Lua命令将航天器自动化测试需要的动态指令的生成逻辑编写到Lua脚本中,保存为klu.lua文件。
(4)获取用户发送的指令生成命令的参数,包括指令生成的规则名称和参数数值,并传递给遥控指令快速生成系统的Lua解释器,然后系统调用lua_pcall动态生成指令,期间如果指令需要获取实时遥测数据作为其参数,利用系统扩展的getparamhex函数订阅遥测工程值,最后系统通过lua_tostring获取脚本生成的指令字符串。
(5)整个指令生成过程的差错控制首先由系统调用luaL_loadfile接口将Lua脚本文件加载到遥控指令快速生成系统的Lua解释器中,调用lua_pcall对Lua脚本文件进行语法和词法检查,返回航天器综合测试系统静态检查信息;然后再是指令生成过程中系统对指令参数及生成逻辑进行合法性判断和差错控制;最后指令字符串生成后,遥控指令快速生成系统将字符串转换成二进制数据返回给测试系统判断并处理,当返回结果为0时表示指令生成脚本逻辑有错,不做上星处理,当返回结果为非0数值时,则系统生成二进制码流由前端设备上注至航天器,实现航天器遥控指令的快速生成及上注执行。遥控指令生成过程如图2所示。
图2 遥控指令快速生成过程Fig.2 Fast generation process of remote control command
本文以高分七号卫星综合测试平台[6-8]为例介绍遥控指令快速生成验证方法,如图3所示。
高分七号指令快速生成主要涉及:前端设备、指令控制台以及遥控指令快速生成系统3部分。
(1)前端设备接收卫星下传的遥测信息并送入遥控指令快速生成系统中。
(2)指令控制台提供用户操作界面,实现指令参数输入的可视化效果,传递遥控指令生成所需参数给遥控指令快速生成系统。
(3)遥控指令快速生成系统包括遥测解析模块、动态指令生成模块:遥测解析模块将遥测信息从数据源码状态处理为数据工程值状态;动态指令生成模块加载Lua脚本文件,完成Lua脚本函数注册,当需要进行遥控指令上注时,动态指令生成模块传递遥控指令生成所需参数给Lua解释器,Lua解释器对所述Lua脚本文件进行解释执行,生成指令二进制码并实时发送给前端设备,最终送达卫星。
测试验证过程如下。
1)指令脚本创建
创建高分七号动态指令脚本逻辑文件klu.lua[9-10],编写动态指令的生成逻辑,如某功能指令-载荷单站回放DZHF,其脚本如图4所示。
图4中,DZHF为指令函数名,对应测试系统传递的指令名称;(p1…)为传递的参数数量及内容;crccompute() 等为在测试系统中用C语言定义的扩展函数,用来计算校验和;string.format( )等为Lua内置函数及运算符,实现对指令字符串的格式转换及数学计算等,最终返回生成的字符串结果至测试系统。
图3 遥控指令快速生成系统Fig.3 Fast generation and test system of remote control command
图4 动态指令生成脚本Fig.4 Dynamic instruction generation script
2)遥控指令发送
测试系统指令操作台界面选择载荷单站回放(DZHF)指令,填写相应参数,并发送指令,如图5所示。
3)遥控指令生成
遥控指令快速生成系统收到指令控制台传递的载荷单站回放(DZHF)指令参数后,调用kua.lua中的DZHF函数生成载荷单站回放(DZHF)的指令码。
通过上述测试验证系统,将高分七号卫星模式测试中96个指令序列模板抽象为8个Lua函数脚本,使指令模板数量降低了90%以上,指令生成和上注时间由原来的5~30 min缩短为10~30 s。试验表明:基于Lua脚本的航天器遥控指令快速生成方法利用Lua扩展性、高效率的特点,获取实时遥测使遥控指令更加真实可信,不需重新编译可即时调整脚本逻辑,提高了测试效率与验证的充分性,简化了生成步骤,最终较好地完成了遥控指令实时生成及上注的需求(见图5)。
图5 指令发送示意图Fig.5 Instruction sending diagram
本文提出的基于Lua脚本的航天器遥控指令快速生成方法,实现了指令参数与指令码字、逻辑时序的映射关系,根据测试项目灵活选取指令参数,大幅降低测试准备时间,尤其适用于指令参数多、衍生需求大的遥感卫星载荷任务指令任务编排场景,现已在我国多个航天器综合测试中推广应用,无论是在整合指令模板数量方面,还是在缩短指令生成时间方面,其效率均显著地提升达90%以上。
本文基于Lua脚本,提出了一种航天器遥控快速测试验证技术,该技术通过测试前完成遥控指令Lua函数的注册,测试时根据测试项目灵活选取指令参数,即可完成遥控指令传参-生成-上传-存储-上注等一系列动作,大幅降低测试准备时间,解决了指令生成灵活性差的问题,同时利用Lua扩展性、高效率的特点,获取实时遥测使遥控指令更加真实可信,不需重新编译可即时调整脚本逻辑,有效保障了遥控指令执行的安全性,避免了人工重复制作或复核不到位等风险。实践证明,该方法可以快速生成各类结构复杂的遥控指令,大幅提高了遥感卫星指令生成上注的测试效率。