3. 星务软件测试环境构建
星务软件(星载综合电子/星务管理软件)的测试环境不是一台“装了编译器的电脑”,而是一套把真实星上计算、接口、总线、数据源逐层替换或复现的联合系统。构建它的核心思路是:先明确被测对象边界,再逐层决定哪些用真实硬件、哪些用仿真、哪些用模拟。目标机、仿真器、模拟器、总线模拟、星务数据库模拟这五类要素,分别对应“算在哪、指令怎么执行、外设怎么响应、数据怎么流动、状态怎么存取”五个问题。
五类要素的定位与替换关系
目标机(Target)指最终运行星务软件的真实处理器板卡或与之同构的工程板,例如基于 SPARC V8、ARM 或龙芯的星载计算机,运行 VxWorks、SpaceOS 或自研实时操作系统。它提供真实的指令集、中断控制器、定时器和内存映射,是时序精度和资源占用的最终判据。仿真器(Emulator/Simulator)在宿主机上复现目标机的指令执行与寄存器行为,常见如 QEMU 定制目标、ISS 指令集仿真器,用于早期无板阶段的逻辑验证。模拟器(Simulator/Stimulator)则针对星上外设与分系统行为建模,例如姿态敏感器、太阳翼驱动、测控应答机,用软件产生符合协议的数据帧。总线模拟负责 1553B、CAN、SpaceWire、RS-422 等星上总线的物理与协议层复现,包括 RT/BC 地址、子地址、消息格式和周期调度。星务数据库模拟则复现星务软件依赖的遥测参数库、指令库、总线 ICD 和模式字表,使软件在无真实卫星数据库时仍能完成参数寻址与指令组帧。
环境配置的关键参数与实现
配置阶段要先把“接口契约”固定下来。以 1553B 总线为例,需在总线模拟配置中明确 BC(总线控制器)周期、RT 地址分配、各子地址的消息长度与刷新率。例如某星务软件要求姿态 RT 地址 0x05、子地址 0x02 每 50 ms 接收 32 字姿态数据,则总线模拟需按 50 ms 周期组帧,帧头含同步字与 RT 地址,数据区按 ICD 顺序填充。若使用 CAN 总线,则需配置波特率(如 500 kbps)、报文 ID 与周期,并保证模拟器发送周期与星务软件接收超时判据匹配。
星务数据库模拟的配置重点在“参数—地址—类型”三元组。例如遥测参数“太阳阵电流”对应遥测源包中的字节偏移 0x12、长度 2 字节、无符号整型、比例因子 0.1 A/LSB。配置时需把这些字段写入模拟数据库,使星务软件解析时能正确换算。若数据库模拟与真实 ICD 不一致,会出现“数值能读但量纲错误”的隐蔽问题,因此必须用已知激励值反查。
# 总线模拟配置示例(1553B,片段)
bus_type = 1553B
bc_period_ms = 50
rt_list = [
{addr: 0x05, sub: 0x02, len: 32, dir: rx, rate_ms: 50},
{addr: 0x07, sub: 0x01, len: 16, dir: tx, rate_ms: 100}
]
# 星务数据库模拟示例(参数条目)
param: 太阳阵电流
offset: 0x12
length: 2
type: uint16
scale: 0.1
unit: A
环境验证方法
环境搭好后不能直接跑用例,必须先做“环境自检”。自检分三层:链路层、数据层、时序层。链路层验证总线模拟能否被目标机正确识别,例如在目标机侧读取 RT 状态字,确认无超时与奇偶错;数据层验证模拟器注入的已知值能否被星务软件解析为预期物理量,例如注入 0x00C8(200)经比例因子 0.1 后应显示 20.0 A;时序层验证周期抖动与丢帧率,用总线分析仪或软件打点统计连续 1000 个周期的实际间隔,要求抖动在允许范围内(如 ±2 ms)。
更严格的验证是“闭环回读”:星务软件发出指令后,总线模拟捕获该指令帧,模拟器按协议执行并回送状态,星务软件再解析状态并更新遥测。若回读状态与预期一致,说明指令链路、总线链路、数据库解析三者均正确。若不一致,则按“先链路后数据再时序”的顺序逐层排查,避免在错误的环境上浪费用例执行时间。
最后要强调的是:目标机、仿真器、模拟器、总线模拟、星务数据库模拟并非必须全部同时使用。早期无板阶段可用“仿真器 + 模拟器 + 总线模拟 + 数据库模拟”组成全数字环境;硬件到位后切换为“目标机 + 总线模拟 + 模拟器 + 数据库模拟”的半实物环境。关键是保证替换前后接口契约一致,使同一套测试用例能在不同环境间迁移,这才是星务软件自动化测试与回归能够持续开展的基础。