使用tinyfsm
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user