1. 星务计算机数据管理与日志记录概述

星务计算机(On-Board Computer,OBC)是航天器电子系统的核心处理单元,通常承担遥测采集、遥控指令解析、姿态与轨道控制律计算、任务调度、时间管理、总线通信以及数据存储与下传等职责。它并不等同于单一处理器芯片,而是由CPU模块、存储器、看门狗、总线接口、供电与复位管理等构成的完整机载计算系统。在整星架构中,星务计算机处于"信息中枢"位置:向下通过1553B、CAN、RS-422、SpaceWire等总线连接敏感器与执行机构,向上通过测控应答机与地面站交互,横向与数传、电源、热控等分系统交换状态数据。

数据管理与日志记录是星务计算机软件中两个紧密耦合但边界清晰的功能域。数据管理关注"数据在哪里、以什么格式存在、何时被读写、如何保证一致性",其对象包括遥测参数、遥控指令、任务计划、轨道与姿态数据、分系统状态字等;日志记录关注"发生过什么、何时发生、由谁触发、结果如何",其对象是事件记录、异常记录、操作审计记录和关键状态变迁记录。二者的关系可以概括为:数据管理维护"当前状态与业务数据",日志记录维护"历史轨迹与因果证据"。当星上出现复位、总线超时或参数越界时,日志是定位根因的第一手材料,而数据管理则决定了这些日志能否被可靠写入、保存并在过境时下传。

理解本节的关键:星务计算机不是"一台电脑",而是一个带实时约束、资源受限、且长期无人值守的嵌入式系统。数据管理与日志记录的设计必须围绕"可靠性、可追溯性、可下传性"三个目标展开。

典型星务计算机架构与数据流

一个典型的星务计算机采用分层架构:最底层是硬件与BSP(板级支持包),中间是实时操作系统(RTOS)或时间片调度内核,上层是应用任务。数据流通常沿三条主线运动:

  • 采集链:敏感器/分系统 → 总线接口 → 驱动层 → 数据池(Data Pool)→ 遥测组帧 → 下行。
  • 指令链:地面遥控 → 测控应答机 → 遥控解码 → 指令分发 → 执行机构/分系统,同时写入操作日志。
  • 日志链:各任务事件 → 日志服务 → 环形缓冲区 → 非易失存储(FRAM/Flash/EEPROM)→ 过境下传。

这三条链共享同一套存储与总线资源,因此必须通过优先级、互斥和缓冲策略避免相互阻塞。例如,姿态控制任务对采集链的实时性要求最高,日志写入通常被安排在低优先级或空闲时段,但异常日志必须能够抢占写入,以保证关键证据不丢失。

星务计算机典型架构与三条数据流 地面测控站 遥控上行 / 遥测下行 测控应答机 射频收发 / 基带 星务计算机(OBC) CPU / RTOS 内核 任务调度 · 时间管理 数据池 Data Pool 遥测参数 · 状态字 总线接口驱动 1553B / CAN / RS-422 日志服务 事件 · 异常 · 审计 非易失存储:FRAM / Flash / EEPROM 环形缓冲 · 掉电保护 · 磨损均衡 遥测组帧 打包 · 校验 · 下传 遥控指令解码 校验 · 分发 · 回执 敏感器 / 执行机构 姿态 · 电源 · 热控 数传分系统 日志 / 遥测下传 上行 遥控数据 指令分发 写 遥测参数 采集 / 控制 写入 下传 遥测下行 图例: 遥控链 遥测/采集链 日志链 数据池读写 三条链共享总线与存储资源,通过优先级与缓冲策略避免相互阻塞;异常日志可抢占写入。

数据管理与日志记录的任务边界

在实际工程中,数据管理与日志记录常被混为一谈,导致接口不清、责任不明。建议按以下边界划分:

维度数据管理日志记录
核心目标维护当前状态与业务数据的正确性保留历史事件与因果证据
典型对象遥测参数、指令表、任务计划、轨道姿态数据事件记录、异常记录、操作审计、状态变迁
时间特性以"当前值"为主,可覆盖更新以"时间序列"为主,追加写入
存储策略数据池 + 定期快照环形缓冲 + 掉电保护
下传方式按遥测帧周期打包按事件触发或过境批量下传
失败影响控制律失准、遥测异常故障无法定位、责任无法追溯

需要强调的是,日志记录不是"打印调试信息"。星上日志必须满足可解析、可检索、可下传三个条件:每条记录应包含时间戳、事件类型、来源任务、参数快照和结果码;记录格式应在设计阶段冻结,避免因版本升级导致地面解析失败。对于资源受限的星务计算机,日志通常采用定长记录加环形覆盖策略,并预留"异常区"用于保存不可覆盖的关键事件。

常见误区:把日志写入放在高优先级任务中同步执行。这会导致总线阻塞或任务超时。正确做法是日志服务采用异步队列,高优先级任务只负责投递事件,由低优先级任务完成落盘;但异常事件应支持同步落盘或双缓冲保护。

一个可参考的日志记录格式示例

以下给出一个教学用的日志记录结构示例,字段可根据任务实际裁剪。假设星务计算机采用32位时间戳(单位:秒,相对星上零点),记录长度固定为32字节:

typedef struct {
    uint32_t timestamp;      // 星上时间,秒
    uint16_t event_id;       // 事件编号,如0x0101=总线超时
    uint8_t  source_task;    // 来源任务ID
    uint8_t  level;          // 0=INFO 1=WARN 2=ERROR 3=FATAL
    uint32_t param1;         // 参数快照1,如总线地址
    uint32_t param2;         // 参数快照2,如错误码
    uint8_t  reserved[16];   // 预留扩展
} log_record_t;              // 共32字节

写入时,日志服务从空闲队列取一条记录,填充字段后追加到环形缓冲区尾部;当缓冲区满时,覆盖最旧的非异常记录。地面解析时,按timestamp排序即可还原事件序列。判断日志是否完整,可检查记录中的event_id是否连续、时间戳是否单调递增、以及异常区是否有未下传记录。

综上,星务计算机的数据管理与日志记录是保障航天器长期可靠运行的基础能力。数据管理解决"状态对不对",日志记录解决"过程清不清"。二者共享资源、互相支撑,设计时必须从架构层面明确数据流、优先级和存储策略,才能在资源受限、无人值守的星上环境中实现可追溯、可下传、可恢复的数据闭环。