3. 遥控指令格式与数据结构设计

遥控指令格式与数据结构设计,是把“任务要发什么”翻译成“星上能稳定解析什么”的中间环节。它要同时满足三件事:任务语义完整、帧长与带宽受控、未来功能可扩展。设计结果通常表现为一份可编码的指令数据模型——包括帧结构、字段定义、取值约束、长度规则和扩展机制,最终能直接映射为二进制码流。

先明确本节参照约定:所有字段按大端序(高位字节在前)编码,位序从字节最高位 MSB 起编号为 bit7,最低位 LSB 为 bit0;长度字段一律以字节为单位,除非特别说明。

一、从任务需求到帧结构

设计起点不是“先画一个帧”,而是先梳理指令族。以某低轨遥感卫星的示例任务为例,遥控指令可归为四类:平台控制类(姿态、电源、热控)、载荷操作类(成像、数传、存储)、参数上注类(阈值、增益、时间)、安全类(复位、安全模式、解锁)。每类指令的语义不同,对实时性、确认方式和参数长度的要求也不同。

由此确定帧结构的基本分层:帧头 + 指令标识 + 参数区 + 校验。帧头用于同步和长度界定,指令标识用于路由到具体功能,参数区承载可变数据,校验用于完整性判断。这个分层是后续所有字段定义的骨架。

二、字段定义与长度约束

以下给出一个可直接编码的示例帧结构(示例参数,非实测值):

字段长度取值/说明
同步字 SYNC2 B固定 0xEB90,用于帧边界识别
帧长 LEN1 B从 SYNC 到 CRC 的总字节数,范围 8~64
指令码 OPCODE2 B高 4 位为功能域,低 12 位为具体指令
参数长度 PLEN1 B参数区字节数,0 表示无参数
参数区 DATA0~48 B按 OPCODE 解释,见参数模型
校验 CRC2 BCRC-16/CCITT,覆盖 LEN 至 DATA

长度约束的核心是“总长可控、参数可算”。LEN 上限 64 B 决定了单帧最大参数为 48 B;PLEN 必须等于 LEN 减去固定开销(SYNC 2 + LEN 1 + OPCODE 2 + PLEN 1 + CRC 2 = 8 B),即 PLEN = LEN - 8。接收端先校验这个等式,再校验 CRC,最后才解析参数。这样即使帧被截断或拼接,也能在早期被拒绝。

指令码 OPCODE 采用“功能域 + 序号”编码:高 4 位功能域(0x1 平台、0x2 载荷、0x3 参数、0x4 安全),低 12 位为该域内序号。例如 0x1001 表示平台域的姿态控制指令,0x3002 表示参数域的增益上注指令。这种编码让路由逻辑只需一次位掩码即可完成。

三、参数数据模型

参数区不能是“一坨字节”,而要有类型化模型。示例中定义四种参数类型:

  • U8/U16/U32:无符号整数,按大端序排列,用于阈值、计数、时间戳。
  • I16:有符号整数,用于姿态角偏差等可正可负的量。
  • BIT:位标志,用于开关量打包,如 8 个开关占 1 B。
  • BCD:时间或编号,便于地面可读。

以“载荷增益上注”为例,OPCODE=0x3002,参数模型为:通道号 U8(1 B)+ 增益值 U16(2 B,单位 0.1 dB)+ 生效时刻 BCD(6 B)。则 PLEN=9,LEN=17。地面编码时按此顺序写入,星上按同一模型解析,双方共享同一份“指令字典”。

四、扩展机制

扩展机制决定这套格式能用多久。示例采用三层扩展:

  1. 功能域扩展:OPCODE 高 4 位已用 4 个,剩余 12 个域可分配给新分系统,无需改帧结构。
  2. 参数区扩展:PLEN 允许 0~48 B,新指令只要总长不超 64 B,即可直接增加参数,旧指令不受影响。
  3. 版本位:在 OPCODE 最高位保留 1 bit 作为版本标志,0 为当前版本,1 为扩展版本,扩展版本可在参数区首字节再定义子类型。

扩展时必须遵守两条约束:一是新指令不得改变已有 OPCODE 的语义;二是新增参数只能追加在参数区尾部,不能插入中间,否则会破坏旧版解析器的偏移假设。

遥控指令帧结构与数据模型(示例) 帧结构(大端序,总长 LEN 字节) SYNC 2 B LEN 1 B OPCODE 2 B PLEN 1 B DATA(参数区) 0~48 B,按 OPCODE 解释 CRC 2 B 固定开销 8 B(SYNC+LEN+OPCODE+PLEN+CRC) → PLEN = LEN − 8 OPCODE 编码分解(16 bit) 版本 功能域 4 bit 指令序号 11 bit 示例:0x1001 → 平台域·姿态控制    0x3002 → 参数域·增益上注 参数数据模型示例:载荷增益上注(OPCODE=0x3002) 通道号 U8 1 B 增益值 U16 2 B,0.1 dB/LSB 生效时刻 BCD 6 B PLEN = 1+2+6 = 9 B LEN = 9+8 = 17 B 扩展:功能域剩余 12 个可分配 | 参数区尾部追加 | 版本位区分新旧解析

五、可编码数据模型的落地

把上述定义固化为一份“指令字典”,每条指令记录:OPCODE、名称、参数模型(类型+长度+单位+范围)、默认值、是否需确认。地面编码器读取字典生成码流,星上解析器读取同一份字典做反向解析。这样新增指令只需改字典,不改编解码代码。

设计检查点:① LEN 与 PLEN 是否满足 PLEN = LEN − 8;② 参数总长是否 ≤ 48 B;③ 新增参数是否只追加在尾部;④ 同一 OPCODE 的语义是否保持稳定;⑤ CRC 覆盖范围是否从 LEN 开始。五项全部通过,帧结构才具备可编码、可扩展、可长期维护的条件。

最终交付的指令数据模型,应能直接回答三个问题:这条指令长什么样、每个字节代表什么、未来加功能时往哪里加。做到这三点,遥控指令格式设计就从“画帧”变成了可执行的工程规范。