4. 星上时间表示与编码

星务计算机内部对时间的处理,本质上要回答两个问题:用什么物理量记录时间,以及用什么编码把时间放进遥测帧、遥控指令和星上软件接口。前者决定时间基准的精度和覆盖范围,后者决定时间信息能否被星上各分系统、地面测控站和数据处理中心无歧义地解析。本节围绕秒计数、日计数、BCD码、二进制码、时间标签格式、CCSDS时间码和PUS时间戳,梳理它们的表示方法与转换关系。

一、秒计数与日计数:最基础的两种时间量

秒计数(Second Counter)是以某一历元为起点累计的秒数,通常用一个整型变量保存。例如以2000-01-01 00:00:00 UTC为历元,星上某时刻累计秒计数为757382400,表示该时刻距历元已过去757382400秒。秒计数的优点是运算简单、比较方便,适合做时间差计算和定时器基准;缺点是单靠一个秒计数无法直接看出年月日,需要配合历元定义和闰秒处理才能还原为日历时间。

日计数(Day Counter)则是以“天”为单位的累计量,常见形式是儒略日(JD)或简化儒略日(MJD)。MJD = JD − 2400000.5,例如MJD 60000.0对应2023-02-25 00:00:00 UTC。日计数常用于轨道递推、星历计算和长期时间管理,因为它与轨道周期、太阳同步周期等物理量直接对应。星上若同时维护秒计数和日计数,通常以日计数为粗时间、秒计数为细时间,二者通过“日计数×86400 + 当日秒数”建立换算关系。

二、BCD码与二进制码:两种编码方式的选择

BCD码(Binary-Coded Decimal)用4位二进制表示1位十进制数字。例如十进制数25的BCD表示为0010 0101,高4位是2,低4位是5。BCD码的优点是人机可读性好,地面解析时不需要做二进制到十进制的转换,适合遥测参数中“年、月、日、时、分、秒”这类字段。缺点是编码效率低,8位只能表示0~99,而同样8位二进制可表示0~255。

二进制码则直接用整数的二进制形式存储。例如秒计数757382400用32位二进制表示为0x2D2A5C00。二进制码的优点是存储紧凑、运算高效,适合星上软件内部的时间变量、定时器计数和差值计算。实际工程中常见做法是:星上内部用二进制秒计数做运算,下传遥测时再转换为BCD码或CCSDS时间码,兼顾效率与可读性。

三、时间标签格式与CCSDS时间码

时间标签(Time Tag)是附加在遥测帧、遥控指令或数据包上的时间信息,用于标识该数据的产生时刻或执行时刻。时间标签格式需要明确三件事:历元、编码方式、分辨率。例如“2000-01-01 00:00:00 UTC为历元,32位无符号秒计数,分辨率1秒”就是一种完整的时间标签定义。

CCSDS时间码是空间数据系统咨询委员会定义的标准时间格式,常见的有CCSDS未压缩时间码和CCSDS压缩时间码。未压缩时间码通常用8字节表示:4字节秒计数 + 4字节分数秒,分辨率可达2-32秒;压缩时间码则用较少的字节,例如4字节秒计数 + 2字节分数秒,适合带宽受限的遥测链路。CCSDS时间码的历元通常定义为1958-01-01 00:00:00 UTC,与GPS历元(1980-01-06)和Unix历元(1970-01-01)不同,转换时必须先统一历元。

四、PUS时间戳及其与CCSDS时间码的关系

PUS(Packet Utilisation Standard)是欧空局定义的遥控遥测包标准,其中PUS时间戳用于标识服务包的时间信息。PUS时间戳通常采用CCSDS时间码作为底层编码,但在包结构中有自己的字段定义,例如CUC(CCSDS Unsegmented Code)时间戳和CDS(CCSDS Day Segmented)时间戳。CUC时间戳就是前面说的CCSDS未压缩时间码,CDS时间戳则用“日计数 + 当日毫秒数”表示,适合需要按天分段处理的任务。

PUS时间戳与CCSDS时间码的转换关系可以概括为:PUS时间戳 = CCSDS时间码 + PUS包字段封装。星上软件在生成PUS包时,先读取内部二进制秒计数,再按CCSDS时间码格式编码,最后填入PUS包的时间戳字段。地面收到后,先按PUS包结构解析出时间戳字段,再按CCSDS时间码规则还原为秒计数和分数秒,最后结合历元转换为UTC日历时间。

星上时间表示与编码转换关系 秒计数 32位无符号整数 日计数 MJD / JD 分数秒 2⁻³² 秒分辨率 二进制码 0x2D2A5C00 BCD码 0010 0101 → 25 CCSDS时间码 4B秒 + 4B分数秒 时间标签 历元+编码+分辨率 时间标签 遥测帧/遥控指令 时间标签 数据包时间戳 PUS时间戳(CUC / CDS) PUS包字段封装 + CCSDS时间码底层编码 历元统一 UTC ↔ 星上时 闰秒处理 TAI ↔ UTC 注:图中数值为教学示例,实际参数以任务定义为准

五、转换关系与工程实现要点

从星上内部时间到地面可读时间,完整的转换链可以概括为:二进制秒计数 → CCSDS时间码 → PUS时间戳 → 地面解析 → UTC日历时间。每一步都需要注意以下要点。

第一,历元必须统一。CCSDS时间码历元是1958-01-01,GPS历元是1980-01-06,Unix历元是1970-01-01。星上若用2000-01-01作为内部历元,下传前必须加上“2000-01-01相对于1958-01-01的秒数”这一偏移量。以2000-01-01 00:00:00 UTC为例,距1958-01-01已过去1325376000秒(含闰秒修正前的近似值),这个偏移量需要在软件中作为常量维护。

第二,闰秒要单独处理。CCSDS时间码通常基于TAI(国际原子时),而地面显示常用UTC。TAI与UTC之间相差整数秒,截至2024年该差值为37秒。星上若用UTC秒计数,下传为CCSDS时间码时需要加上这37秒;地面解析后再减去,才能得到正确的UTC时间。忽略闰秒会导致时间标签出现数十秒的系统偏差。

第三,分辨率要与任务匹配。秒计数分辨率1秒,适合大多数遥测参数;但姿态控制、星间链路等需要毫秒甚至微秒级时间标签,此时必须使用CCSDS时间码的分数秒字段。例如4字节分数秒的分辨率为2-32秒,约0.233纳秒,远高于一般星务需求;2字节分数秒分辨率约15.26微秒,适合多数低轨任务。

第四,BCD码与二进制码的转换要防溢出。BCD码每个字节只能表示0~99,若秒计数超过99,必须拆分为多个BCD字节。例如秒计数25的BCD为0x25,而秒计数125需要两个BCD字节0x01 0x25。星上软件在打包遥测时,应先判断数值范围,再决定BCD字节数,避免高位截断。

工程提示:星上时间管理模块建议维护一张“时间格式转换表”,明确每种格式的历元、编码、字节数、分辨率和适用场景。例如:内部秒计数(2000历元,32位二进制,1秒)、CCSDS CUC(1958历元,4B秒+4B分数秒,2⁻³²秒)、PUS CDS(1958历元,2B日计数+4B毫秒,1毫秒)。这样在生成遥测包和解析遥控指令时,可以直接查表转换,减少人为错误。

最后需要强调,时间表示与编码的选择不是孤立的,它直接影响星上软件的时间比较、定时器触发、遥测帧同步和地面数据处理。秒计数和二进制码适合星上内部运算,BCD码适合人机可读字段,CCSDS时间码和PUS时间戳适合标准化传输。理解它们之间的转换关系,是星务计算机时间管理从“能走时”走向“走得准、传得对”的关键一步。