#ifndef POWER_MANAGER_FSM_HPP #define POWER_MANAGER_FSM_HPP #include "PowerManger.h" #include "tinyfsm.hpp" // 定义事件类型 struct InitEvent : tinyfsm::Event { }; struct StandbyEvent : tinyfsm::Event { }; struct FaultEvent : tinyfsm::Event { unsigned int faultCode; FaultEvent(unsigned int code) : faultCode(code) {} }; // 定义状态机基类 class PowerManagerFsm : public tinyfsm::Fsm { protected: static PowerManger* pm; public: // 初始化状态机 static void init(PowerManger* powerManager) { pm = powerManager; } // 响应事件默认实现 virtual void react(tinyfsm::Event const &) { } // 状态转换接口 void triggerInitEvent() { dispatch(InitEvent()); } void triggerStandbyEvent() { dispatch(StandbyEvent()); } void triggerFaultEvent(unsigned int faultCode) { dispatch(FaultEvent(faultCode)); } }; // 初始化静态成员 PowerManger* PowerManagerFsm::pm = nullptr; // 定义状态类 class InitState : public PowerManagerFsm { public: void entry() { PowerManagerFsm::pm->m_pmEvent = "初始化状态"; // 保持正确类名 PowerManagerFsm::pm->printState("InitState", "进入初始化状态"); } void react(InitEvent const &) { // 1. 检查通信是否正常 double StartTime = PowerManagerFsm::pm->GetAppStartTime(); while (PowerManagerFsm::pm->connectState < 5) { MOOSPause(1000); PowerManagerFsm::pm->updateTime(); double dft = abs(PowerManagerFsm::pm->m_current_time - StartTime); if(dft > 10) { transit(); PowerManagerFsm::pm->m_faultNum = 1; return; } string desp = "等待复合管控消息 : " + to_string(10-dft); PowerManagerFsm::pm->printState("InitState", desp); } // 2. 检查复合管控器是否上报故障 if(PowerManagerFsm::pm->checkError() < 0) { transit(); PowerManagerFsm::pm->m_faultNum = 2; return; } // 3. 初始化系统为待机状态 PowerManagerFsm::pm->initControlCmd(); // 4. 判断关键断路器是否闭合 while (true) { if(PowerManagerFsm::pm->m_currentDisBreakerState.bus3Breaker.unit4InstrumentDC48VCircuitBreaker == 1 || PowerManagerFsm::pm->m_currentDisBreakerState.bus4Breaker.unit5CircuitBreaker == 1 || PowerManagerFsm::pm->m_currentDisBreakerState.bus4Breaker.unit2CircuitBreaker == 1 || PowerManagerFsm::pm->m_currentDisBreakerState.bus4Breaker.unit3CircuitBreaker == 1 || PowerManagerFsm::pm->m_currentDisBreakerState.bus4Breaker.unit1CircuitBreaker == 1) { transit(); return; } PowerManagerFsm::pm->m_pmEvent = "等待关键断路器闭合"; MOOSPause(1000); PowerManagerFsm::pm->printState("InitState", PowerManagerFsm::pm->m_pmEvent); } } }; class StandbyState : public PowerManagerFsm { public: void entry() { PowerManagerFsm::pm->m_stateData.note = "待机状态"; PowerManagerFsm::pm->printState("StandbyState", "进入待机状态"); } void react(StandbyEvent const &) { while (true) { // 1. 检查当前是否存在故障 if(PowerManagerFsm::pm->checkError() < 0) { transit(); return; } // 2. 处理上位机控制指令 handlePowerCommands(); MOOSPause(1000); } } private: void handlePowerCommands() { switch (PowerManagerFsm::pm->m_msCmd.powerCMD) { case 0: PowerManagerFsm::pm->m_pmEvent = "收到上位机控制指令:关机"; break; case 1: handlePowerOn(); break; // 其他处理函数省略... } } void handlePowerOn() { PowerManagerFsm::pm->m_pmEvent = "动力电上电"; PowerManagerFsm::pm->m_CcuColCmd.powerBatCmd = 0x10; if(PowerManagerFsm::pm->m_pmCurrentState.ccustate.fcuState == 0x04) PowerManagerFsm::pm->m_CcuColCmd.fcuCmd = 0x02; } }; class FaultState : public PowerManagerFsm { public: void entry() { PowerManagerFsm::pm->printState("FaultState", "进入故障状态"); } void react(FaultEvent const & e) { switch (e.faultCode) { case 1: PowerManagerFsm::pm->m_pmEvent = "复合管控连接超时"; PowerManagerFsm::pm->printState("FaultState", "通信故障"); break; case 2: PowerManagerFsm::pm->m_pmEvent = "能源系统故障"; PowerManagerFsm::pm->printState("FaultState", "能源故障"); break; } } }; // 设置初始状态 FSM_INITIAL_STATE(PowerManagerFsm, InitState); #endif // POWER_MANAGER_FSM_HPP