使用tinyfsm

This commit is contained in:
zjk
2025-04-06 21:42:55 +08:00
parent 8677811dac
commit 002df307d7
2 changed files with 24 additions and 29 deletions
View File
+23 -28
View File
@@ -1,10 +1,10 @@
#ifndef POWER_MANAGER_FSM_HPP #ifndef POWER_MANAGER_FSM_HPP
#define POWER_MANAGER_FSM_HPP #define POWER_MANAGER_FSM_HPP
#include "PowerManger.h"
#include "tinyfsm.hpp" #include "tinyfsm.hpp"
// 前向声明
class PowerManger;
// 定义事件类型 // 定义事件类型
struct InitEvent : tinyfsm::Event { }; struct InitEvent : tinyfsm::Event { };
@@ -17,19 +17,14 @@ struct FaultEvent : tinyfsm::Event {
// 定义状态机基类 // 定义状态机基类
class PowerManagerFsm : public tinyfsm::Fsm<PowerManagerFsm> { class PowerManagerFsm : public tinyfsm::Fsm<PowerManagerFsm> {
protected: protected:
static void* pm; static PowerManger* pm;
public: public:
// 初始化状态机 // 初始化状态机
static void init(void* powerManager) { static void init(PowerManger* powerManager) {
pm = powerManager; pm = powerManager;
} }
// 类型安全转换接口
static PowerManger* getPowerManager() {
return static_cast<PowerManger*>(pm);
}
// 响应事件默认实现 // 响应事件默认实现
virtual void react(tinyfsm::Event const &) { } virtual void react(tinyfsm::Event const &) { }
@@ -40,23 +35,23 @@ public:
}; };
// 初始化静态成员 // 初始化静态成员
void* PowerManagerFsm::pm = nullptr; PowerManger* PowerManagerFsm::pm = nullptr;
// 定义状态类 // 定义状态类
class InitState : public PowerManagerFsm { class InitState : public PowerManagerFsm {
public: public:
void entry() { void entry() {
PowerManagerFsm::getPowerManager()->m_pmEvent = "初始化状态"; PowerManagerFsm::pm->m_pmEvent = "初始化状态"; // 保持正确类名
PowerManagerFsm::getPowerManager()->printState("InitState", "进入初始化状态"); PowerManagerFsm::pm->printState("InitState", "进入初始化状态");
} }
void react(InitEvent const &) { void react(InitEvent const &) {
// 1. 检查通信是否正常 // 1. 检查通信是否正常
double StartTime = PowerManagerFsm::getPowerManager()->GetAppStartTime(); double StartTime = PowerManagerFsm::pm->GetAppStartTime();
while (PowerManagerFsm::getPowerManager()->connectState < 5) { while (PowerManagerFsm::pm->connectState < 5) {
MOOSPause(1000); MOOSPause(1000);
PowerManagerFsm::getPowerManager()->updateTime(); PowerManagerFsm::pm->updateTime();
double dft = abs(PowerManagerFsm::getPowerManager()->m_current_time - StartTime); double dft = abs(PowerManagerFsm::pm->m_current_time - StartTime);
if(dft > 10) { if(dft > 10) {
transit<FaultState>(); transit<FaultState>();
PowerManagerFsm::pm->m_faultNum = 1; PowerManagerFsm::pm->m_faultNum = 1;
@@ -67,9 +62,9 @@ public:
} }
// 2. 检查复合管控器是否上报故障 // 2. 检查复合管控器是否上报故障
if(PowerManagerFsm::getPowerManager()->checkError() < 0) { if(PowerManagerFsm::pm->checkError() < 0) {
transit<FaultState>(); transit<FaultState>();
PowerManagerFsm::getPowerManager()->m_faultNum = 2; PowerManagerFsm::pm->m_faultNum = 2;
return; return;
} }
@@ -78,17 +73,17 @@ public:
// 4. 判断关键断路器是否闭合 // 4. 判断关键断路器是否闭合
while (true) { while (true) {
if(PowerManagerFsm::getPowerManager()->m_currentDisBreakerState.bus3Breaker.unit4InstrumentDC48VCircuitBreaker == 1 || if(PowerManagerFsm::pm->m_currentDisBreakerState.bus3Breaker.unit4InstrumentDC48VCircuitBreaker == 1 ||
PowerManagerFsm::getPowerManager()->m_currentDisBreakerState.bus4Breaker.unit5CircuitBreaker == 1 || PowerManagerFsm::pm->m_currentDisBreakerState.bus4Breaker.unit5CircuitBreaker == 1 ||
PowerManagerFsm::getPowerManager()->m_currentDisBreakerState.bus4Breaker.unit2CircuitBreaker == 1 || PowerManagerFsm::pm->m_currentDisBreakerState.bus4Breaker.unit2CircuitBreaker == 1 ||
PowerManagerFsm::getPowerManager()->m_currentDisBreakerState.bus4Breaker.unit3CircuitBreaker == 1 || PowerManagerFsm::pm->m_currentDisBreakerState.bus4Breaker.unit3CircuitBreaker == 1 ||
PowerManagerFsm::getPowerManager()->m_currentDisBreakerState.bus4Breaker.unit1CircuitBreaker == 1) { PowerManagerFsm::pm->m_currentDisBreakerState.bus4Breaker.unit1CircuitBreaker == 1) {
transit<StandbyState>(); transit<StandbyState>();
return; return;
} }
PowerManagerFsm::getPowerManager()->m_pmEvent = "等待关键断路器闭合"; PowerManagerFsm::pm->m_pmEvent = "等待关键断路器闭合";
MOOSPause(1000); MOOSPause(1000);
PowerManagerFsm::getPowerManager()->printState("InitState", PowerManagerFsm::getPowerManager()->m_pmEvent); PowerManagerFsm::pm->printState("InitState", PowerManagerFsm::pm->m_pmEvent);
} }
} }
}; };
@@ -96,8 +91,8 @@ public:
class StandbyState : public PowerManagerFsm { class StandbyState : public PowerManagerFsm {
public: public:
void entry() { void entry() {
PowerManagerFsm::getPowerManager()->m_stateData.note = "待机状态"; PowerManagerFsm::pm->m_stateData.note = "待机状态";
PowerManagerFsm::getPowerManager()->printState("StandbyState", "进入待机状态"); PowerManagerFsm::pm->printState("StandbyState", "进入待机状态");
} }
void react(StandbyEvent const &) { void react(StandbyEvent const &) {
@@ -134,7 +129,7 @@ private:
class FaultState : public PowerManagerFsm { class FaultState : public PowerManagerFsm {
public: public:
void entry() { void entry() {
PowerManagerFsm::getPowerManager()->printState("FaultState", "进入故障状态"); PowerManagerFsm::pm->printState("FaultState", "进入故障状态");
} }
void react(FaultEvent const & e) { void react(FaultEvent const & e) {