4. 遥测数据结构:源包格式、传输帧格式、虚拟信道概念

好,咱们今天聊点硬核的。遥测数据怎么从卫星上下来?不是一股脑儿往下倒,而是有严格的包装层次。我当年第一次看CCSDS协议栈时,说实话,头有点大。但后来发现,搞懂了源包、传输帧和虚拟信道这三层,整个遥测链路就清晰了。

4.1 源包格式——遥测数据的“最小单元”

源包是什么?说白了,就是卫星上某个设备产生的一包数据。比如温度传感器采集的温度值,打包成一个源包发下来。

我个人习惯把源包想象成一个信封。信封外面写地址,里面装内容。CCSDS源包的结构也是这样:

| 包主头(6字节) | 包数据域(可变长度) | 包差错控制(可选,2字节) |

包主头里最重要的几个字段:

  • 版本号:固定为"000",标识这是CCSDS包
  • 类型:0表示遥测,1表示遥控
  • 应用过程标识(APID):11位,标识数据来源。比如温度传感器APID=0x100,电压传感器APID=0x101
  • 分组标志:2位,表示这包数据是独立的还是分段的
  • 源包序号:14位,每个APID独立计数,从0到16383循环
  • 包长度:16位,表示包数据域的字节数减1

关键点:APID是区分不同数据源的核心。我见过不少新手把APID和虚拟信道搞混,记住——APID标识“谁产生的数据”,虚拟信道标识“数据走哪条路”。

源包长度可变,但最大不超过65536字节。实际项目中,我建议源包长度控制在256字节以内。为什么?因为传输帧长度有限,源包太长会导致分包重组,增加复杂度。

4.2 传输帧格式——数据下行的“集装箱”

源包打包好了,怎么往下传?这就轮到传输帧出场了。传输帧是物理层传输的基本单位,相当于把多个源包装进一个集装箱里往下扔。

CCSDS传输帧格式:

| 帧主头(6字节) | 帧数据域(可变) | 帧差错控制(4字节,可选) |

帧主头里这些字段你得记住:

字段 长度 说明
帧版本号 2位 固定"00"
航天器标识 10位 标识是哪颗卫星
虚拟信道标识 3位或6位 标识虚拟信道号
虚拟信道帧计数 8位 每个虚拟信道独立计数
帧数据域状态 2位 指示数据域是否包含帧头

我的经验:帧计数是判断丢帧的关键。我曾经排查过一个遥测丢数问题,就是发现帧计数跳变——从0x3A直接跳到0x3C,中间少了0x3B。嗯,那帧数据丢了。

传输帧长度通常是固定的。常见的帧长有223字节、1115字节等。固定帧长的好处是接收端好处理,不用猜帧边界。

4.3 虚拟信道概念——一条物理信道,多条逻辑链路

虚拟信道这个概念,我刚开始学的时候觉得挺玄乎。说白了,就是在一根物理天线上,分出多条逻辑通道。每条虚拟信道独立传输数据,互不干扰。

你想想看,卫星上同时有遥测数据、科学数据、工程数据,这些数据重要性不同。遥测数据丢了可能影响卫星安全,科学数据丢了顶多少发篇论文。如果混在一起传,万一信道拥堵,重要数据可能被挤掉。

虚拟信道解决了这个问题:

  • 虚拟信道0:传实时遥测,优先级最高
  • 虚拟信道1:传存储遥测,优先级中等
  • 虚拟信道2:传科学数据,优先级最低

每个虚拟信道有自己的帧计数、自己的缓冲区、自己的调度策略。物理层按优先级轮询各虚拟信道,取出帧发送。

注意:虚拟信道不是物理隔离,而是时分复用。我曾经遇到过一个坑——某个虚拟信道一直发大包,占用了太多带宽,导致其他虚拟信道的数据延迟。后来加了带宽限制,每个虚拟信道最多占用50%的物理带宽,问题才解决。

4.4 三层结构如何协同工作

源包、传输帧、虚拟信道这三层怎么配合?我画个流程你就明白了:

  1. 温度传感器采集数据,打包成源包(APID=0x100)
  2. 源包根据APID映射到虚拟信道0(实时遥测)
  3. 虚拟信道0的复用器把多个源包拼接到传输帧的数据域
  4. 传输帧加上帧头,通过物理层发送

接收端反向操作:收到传输帧→解析帧头→提取数据域→拆出源包→根据APID分发到对应应用。

这里有个细节:一个传输帧可以装多个源包,也可以只装一个源包的一部分。如果源包太大,需要跨帧传输。CCSDS用“分组标志”和“源包序号”来标识分包关系。

避坑指南:我曾经遇到一个分包重组的问题。某个源包被分成3帧传输,但第2帧丢了。接收端一直等第2帧,导致第3帧也处理不了。后来加了超时机制——如果3秒内没收到完整包,就丢弃已收到的部分,并上报丢包事件。

4.5 实际项目中的设计建议

说了这么多理论,来点实际的。如果你正在设计星载计算机的遥测协议,我建议:

  • APID分配要规划好:0x000-0x0FF留给平台设备,0x100-0x1FF留给载荷,0x200-0x2FF留给测试用
  • 虚拟信道数量别太多:3-4个就够了。虚拟信道多了,调度开销大,而且容易出bug
  • 帧长选223字节:这是CCSDS推荐的最小帧长,兼容性好,而且适合大多数遥测场景
  • 加帧序号校验:接收端检查帧序号是否连续,不连续就报错。这是发现链路问题的最简单方法

嗯,遥测数据结构这块就讲这么多。下一章咱们聊聊遥控协议,那又是另一番天地了。