#include "PowerManagerFsm.hpp" #include "PowerManger.h" #include #include "MOOS/libMOOS/Utils/MOOSUtilityFunctions.h" // 定义静态成员 PowerManger* PowerManagerFsm::pm = nullptr; // InitState实现 void InitState::entry() { PowerManagerFsm::entry(); std::cout << "===========================" << std::endl; // PowerManagerFsm::pm->m_pmEvent = "初始化状态"; PowerManagerFsm::pm->printState("InitState", "进入初始化状态"); } void InitState::react(InitEvent const &) { // double StartTime = PowerManagerFsm::pm->GetAppStartTime(); std::cout << "开始初始化" << std::endl; double StartTime = 0; 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); } if(PowerManagerFsm::pm->checkError() < 0) { transit(); PowerManagerFsm::pm->m_faultNum = 2; return; } PowerManagerFsm::pm->initControlCmd(); 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); } std::cout << "InitState: 初始化完成" << std::endl; //转换到待机状态 transit(); } // StandbyState实现 void StandbyState::entry() { PowerManagerFsm::entry(); PowerManagerFsm::pm->printState("StandbyState", "进入待机状态"); } void StandbyState::react(StandbyEvent const &) { while (true) { if(PowerManagerFsm::pm->checkError() < 0) { transit(); return; } handlePowerCommands(); MOOSPause(1000); } } void StandbyState::handlePowerCommands() { switch (PowerManagerFsm::pm->m_msCmd.powerCMD) { case 0: PowerManagerFsm::pm->m_pmEvent = "收到上位机控制指令:关机"; break; case 1: handlePowerOn(); break; } } void StandbyState::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; } // FaultState实现 void FaultState::entry() { PowerManagerFsm::pm->printState("FaultState", "进入故障状态"); } void FaultState::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);