3. 航天器状态与状态转换建模

航天器在轨运行期间,其行为并不是连续变化的“模拟量”,而是由一系列离散的工作状态以及状态之间的迁移构成。例如太阳翼展开前处于“发射锁定态”,入轨后进入“展开态”,展开到位后进入“对日定向态”;一旦姿态偏差超限,又可能进入“安全态”。要对这些行为进行测试与验证,首先必须把航天器抽象成可计算、可判定的模型。本节讨论的核心,就是如何用状态变量、状态空间、转换条件、转换触发源以及状态机/模式机表示方法,把航天器的行为“写清楚、画明白、测得到”。

一、状态变量:把“现在处于什么情况”量化

状态变量是描述航天器当前状况的最小一组可观测或可推断的量。它必须满足一个关键性质:只要知道当前时刻全部状态变量的取值,再加上未来的输入,就能唯一确定未来的行为。这就是状态变量的“无记忆性”要求。

在工程实践中,状态变量通常分为三类:

  • 离散状态变量:如工作模式 mode ∈ {发射态, 展开态, 对日态, 安全态},取值是有限枚举。
  • 连续状态变量:如姿态角、角速度、母线电压、蓄电池荷电状态 SOC,取值是实数区间。
  • 布尔/事件变量:如“太阳翼到位标志 flag_wing_deployed”“火工品已解锁 flag_pyro_armed”,取值只有 0/1。

以某低轨遥感卫星为例,可定义状态向量:

X = [ mode, θ_roll, θ_pitch, θ_yaw, ω_x, ω_y, ω_z,
      V_bus, SOC, T_battery, flag_wing, flag_sun_acquired ]

其中 mode 是离散模式,其余为连续量或布尔量。测试时,我们并不需要监控全部变量,而是选取对状态判定有决定作用的“关键状态变量”,例如 mode、SOC、flag_sun_acquired。状态变量的选择直接决定了状态机能否被正确判定,选少了会漏判,选多了会引入冗余和噪声。

二、状态空间:所有可能状态的集合

状态空间是状态变量所有合法取值的组合集合。对离散模式而言,状态空间就是模式枚举的笛卡尔积;对连续量而言,它是一个多维实数空间中的可行域。状态空间的意义在于:它划定了“航天器可能处于哪些情况”的边界,任何不在状态空间内的取值组合都意味着模型错误或遥测异常。

例如,若定义 mode ∈ {发射态, 展开态, 对日态, 安全态},flag_wing ∈ {0,1},则理论上存在 4×2=8 种组合。但物理上“发射态且太阳翼已展开”是不可能的,因此合法状态空间只有 6 种。测试用例设计时,正是要覆盖这些合法状态,并验证非法组合不会被误判为合法状态。

状态空间不是“所有想象得到的组合”,而是“物理与逻辑上允许的组合”。建模时先列合法状态,再列禁止状态,测试才有依据。

三、转换条件与转换触发源

状态转换不是凭空发生的,它由触发源引发,并需满足转换条件。触发源是“谁发起了这次转换”,转换条件是“在什么前提下才允许转换”。二者缺一不可。

常见触发源包括:

  • 遥控指令:地面发送的模式切换指令,如“转入安全模式”。
  • 程控指令:星上时序程序按时间自动发出,如入轨后 120 s 自动展开太阳翼。
  • 自主判据:星上软件根据状态变量判断,如 SOC < 20% 触发节能模式。
  • 内部事件:如“太阳翼到位开关闭合”产生的事件信号。
  • 故障保护:如姿态偏差超限触发安全态。

转换条件则是对触发源和状态变量的联合约束。例如“由对日态转入安全态”的条件可写为:

trigger = 自主判据 OR 遥控指令
condition = (|θ_err| > 5°) OR (SOC < 15%) OR (V_bus < 26 V)

注意:触发源回答“谁按下了按钮”,转换条件回答“按钮按下时门是否开着”。测试中常见的缺陷正是“触发源到了但条件不满足”或“条件满足但触发源丢失”,导致状态卡死或误迁移。

四、状态机与模式机表示方法

状态机(State Machine)和模式机(Mode Machine)是描述状态转换的两种常用表示。二者本质相通,但侧重点不同:状态机强调“状态+迁移+动作”,模式机强调“模式层级与模式切换”。在航天器建模中,通常采用层次化状态机:顶层是模式机,描述发射态、对日态、安全态等大模式;每个模式内部再嵌套子状态机,描述该模式下的具体工作流程。

常用的表示方法有三种:

  • 状态迁移图:节点表示状态,有向边表示迁移,边上标注“触发源/条件/动作”。
  • 状态迁移表:行是当前状态,列是触发事件,单元格是目标状态与动作,适合测试用例自动生成。
  • 层次状态图:用嵌套框表示父子状态,适合表达“安全态内部又分待机、消旋、对日”等层次结构。

下面用一张状态迁移图,把本节的核心对象——状态、转换条件、触发源、动作——集中表达出来。图中以某遥感卫星的四个顶层模式为例,边上的标注格式为“触发源 / 条件 / 动作”。

航天器顶层模式状态迁移图(示例) 边标注格式:触发源 / 转换条件 / 动作 发射态 mode = LAUNCH 展开态 mode = DEPLOY 对日定向态 mode = SUN_TRACK 安全态 mode = SAFE 程控 / t > 120 s 且 flag_pyro=1 / 解锁火工品 内部事件 / flag_wing=1 且 flag_sun=1 / 启动对日控制 自主判据 / |θ_err|>5° 或 SOC<15% / 切安全模式 故障保护 / V_bus<26 V / 停止展开 遥控 / 故障清除且 SOC>40% / 恢复对日 图例: 程控迁移 事件/遥控迁移 故障/自主保护迁移 恢复迁移 状态变量:mode、flag_wing、flag_sun、θ_err、SOC、V_bus

从图中可以清楚看到:每个状态是一个节点,每条边是一次迁移,边上的三段信息分别对应触发源、转换条件、动作。测试用例设计时,可以逐条边构造“满足条件”和“不满足条件”两组输入,验证迁移是否按预期发生或保持原状态。

五、建模到测试的落地要点

把上述模型用于测试,需要完成三件事。第一,状态变量可观测:每个状态变量都要有对应的遥测点或可推断来源,否则状态机无法判定。第二,转换条件可注入:触发源和条件要能通过遥控、程控或仿真注入方式人为构造,例如把 SOC 阈值从 15% 临时改为 50% 以便快速触发。第三,迁移结果可判定:每次迁移后要能读出目标状态和动作执行结果,例如“安全态下太阳翼停止展开”可通过 flag_wing 保持 0 来验证。

常见建模缺陷:把“触发源”和“转换条件”混为一谈,导致测试时只注入触发源却忽略条件,出现“指令发了但状态没变”的误判;或状态变量选取不足,导致两个不同物理状态在模型中不可区分。

综上,状态变量定义“看什么”,状态空间定义“可能在哪”,转换条件与触发源定义“怎么变”,状态机/模式机定义“怎么画、怎么测”。四者构成航天器状态与状态转换建模的完整链条,也是后续状态转换测试用例设计与执行的基础。